/*
 * Header declaring Telnet-handling functions.
 */

#ifndef CYGTERMD_TELNET_H
#define CYGTERMD_TELNET_H

#include "sel.h"

typedef struct Telnet Telnet;

struct shell_data {
    char **envvars;                    /* array of "VAR=value" terms */
    int nenvvars;
    char *termtype;
};

/*
 * Create and destroy a Telnet structure.
 */
Telnet *telnet_new(sel_wfd *net, sel_wfd *pty);
void telnet_free(Telnet *telnet);

/*
 * Process data read from the pty.
 */
void telnet_from_pty(Telnet *telnet, char *buf, int len);

/*
 * Process Telnet protocol data received from the network.
 */
void telnet_from_net(Telnet *telnet, char *buf, int len);

/*
 * Return true if pre-shell-startup negotiations are complete and
 * it's safe to start the shell subprocess now. On a true return,
 * also fills in the shell_data structure.
 */
int telnet_shell_ok(Telnet *telnet, struct shell_data *shdata);

#endif /* CYGTERMD_TELNET_H */