/**
 * @file nxlink.h
 * @brief Netloader (nxlink) utilities
 * @author WinterMute
 * @copyright libnx Authors
 */
#pragma once
#include "../types.h"

struct in_addr;

/// Address of the host connected through nxlink
extern struct in_addr __nxlink_host;

#define NXLINK_SERVER_PORT 28280 ///< nxlink TCP server port
#define NXLINK_CLIENT_PORT 28771 ///< nxlink TCP client port

/**
 * @brief Connects to the nxlink host, setting up an output stream.
 * @param[in] redirStdout Whether to redirect stdout to nxlink output.
 * @param[in] redirStderr Whether to redirect stderr to nxlink output.
 * @return Socket fd on success, negative number on failure.
 * @note The socket should be closed with close() during application cleanup.
 */
int nxlinkConnectToHost(bool redirStdout, bool redirStderr);

/// Same as \ref nxlinkConnectToHost but redirecting both stdout/stderr.
NX_INLINE int nxlinkStdio(void) {
    return nxlinkConnectToHost(true, true);
}

/// Same as \ref nxlinkConnectToHost but redirecting only stderr.
NX_INLINE int nxlinkStdioForDebug(void) {
    return nxlinkConnectToHost(false, true);
}