123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672 |
- #if !defined(LIBTELNET_INCLUDE)
- #define LIBTELNET_INCLUDE 1
- #include <stdarg.h>
- #if defined(__cplusplus)
- extern "C" {
- #endif
- #if __GNUC__
- # define TELNET_GNU_PRINTF(f,a) __attribute__((format(printf, f, a)))
- # define TELNET_GNU_SENTINEL __attribute__((sentinel))
- #else
- # define TELNET_GNU_PRINTF(f,a)
- # define TELNET_GNU_SENTINEL
- #endif
- typedef struct telnet_t telnet_t;
- typedef union telnet_event_t telnet_event_t;
- typedef struct telnet_telopt_t telnet_telopt_t;
- #define TELNET_IAC 255
- #define TELNET_DONT 254
- #define TELNET_DO 253
- #define TELNET_WONT 252
- #define TELNET_WILL 251
- #define TELNET_SB 250
- #define TELNET_GA 249
- #define TELNET_EL 248
- #define TELNET_EC 247
- #define TELNET_AYT 246
- #define TELNET_AO 245
- #define TELNET_IP 244
- #define TELNET_BREAK 243
- #define TELNET_DM 242
- #define TELNET_NOP 241
- #define TELNET_SE 240
- #define TELNET_EOR 239
- #define TELNET_ABORT 238
- #define TELNET_SUSP 237
- #define TELNET_EOF 236
- #define TELNET_TELOPT_BINARY 0
- #define TELNET_TELOPT_ECHO 1
- #define TELNET_TELOPT_RCP 2
- #define TELNET_TELOPT_SGA 3
- #define TELNET_TELOPT_NAMS 4
- #define TELNET_TELOPT_STATUS 5
- #define TELNET_TELOPT_TM 6
- #define TELNET_TELOPT_RCTE 7
- #define TELNET_TELOPT_NAOL 8
- #define TELNET_TELOPT_NAOP 9
- #define TELNET_TELOPT_NAOCRD 10
- #define TELNET_TELOPT_NAOHTS 11
- #define TELNET_TELOPT_NAOHTD 12
- #define TELNET_TELOPT_NAOFFD 13
- #define TELNET_TELOPT_NAOVTS 14
- #define TELNET_TELOPT_NAOVTD 15
- #define TELNET_TELOPT_NAOLFD 16
- #define TELNET_TELOPT_XASCII 17
- #define TELNET_TELOPT_LOGOUT 18
- #define TELNET_TELOPT_BM 19
- #define TELNET_TELOPT_DET 20
- #define TELNET_TELOPT_SUPDUP 21
- #define TELNET_TELOPT_SUPDUPOUTPUT 22
- #define TELNET_TELOPT_SNDLOC 23
- #define TELNET_TELOPT_TTYPE 24
- #define TELNET_TELOPT_EOR 25
- #define TELNET_TELOPT_TUID 26
- #define TELNET_TELOPT_OUTMRK 27
- #define TELNET_TELOPT_TTYLOC 28
- #define TELNET_TELOPT_3270REGIME 29
- #define TELNET_TELOPT_X3PAD 30
- #define TELNET_TELOPT_NAWS 31
- #define TELNET_TELOPT_TSPEED 32
- #define TELNET_TELOPT_LFLOW 33
- #define TELNET_TELOPT_LINEMODE 34
- #define TELNET_TELOPT_XDISPLOC 35
- #define TELNET_TELOPT_ENVIRON 36
- #define TELNET_TELOPT_AUTHENTICATION 37
- #define TELNET_TELOPT_ENCRYPT 38
- #define TELNET_TELOPT_NEW_ENVIRON 39
- #define TELNET_TELOPT_MSSP 70
- #define TELNET_TELOPT_COMPRESS 85
- #define TELNET_TELOPT_COMPRESS2 86
- #define TELNET_TELOPT_ZMP 93
- #define TELNET_TELOPT_EXOPL 255
- #define TELNET_TELOPT_MCCP2 86
- #define TELNET_TTYPE_IS 0
- #define TELNET_TTYPE_SEND 1
- #define TELNET_ENVIRON_IS 0
- #define TELNET_ENVIRON_SEND 1
- #define TELNET_ENVIRON_INFO 2
- #define TELNET_ENVIRON_VAR 0
- #define TELNET_ENVIRON_VALUE 1
- #define TELNET_ENVIRON_ESC 2
- #define TELNET_ENVIRON_USERVAR 3
- #define TELNET_MSSP_VAR 1
- #define TELNET_MSSP_VAL 2
- #define TELNET_FLAG_PROXY (1<<0)
- #define TELNET_PFLAG_DEFLATE (1<<7)
- enum telnet_error_t {
- TELNET_EOK = 0,
- TELNET_EBADVAL,
- TELNET_ENOMEM,
- TELNET_EOVERFLOW,
- TELNET_EPROTOCOL,
- TELNET_ECOMPRESS
- };
- typedef enum telnet_error_t telnet_error_t;
- enum telnet_event_type_t {
- TELNET_EV_DATA = 0,
- TELNET_EV_SEND,
- TELNET_EV_IAC,
- TELNET_EV_WILL,
- TELNET_EV_WONT,
- TELNET_EV_DO,
- TELNET_EV_DONT,
- TELNET_EV_SUBNEGOTIATION,
- TELNET_EV_COMPRESS,
- TELNET_EV_ZMP,
- TELNET_EV_TTYPE,
- TELNET_EV_ENVIRON,
- TELNET_EV_MSSP,
- TELNET_EV_WARNING,
- TELNET_EV_ERROR
- };
- typedef enum telnet_event_type_t telnet_event_type_t;
- struct telnet_environ_t {
- unsigned char type;
- char *var;
- char *value;
- };
- union telnet_event_t {
-
-
- enum telnet_event_type_t type;
-
- struct data_t {
- enum telnet_event_type_t _type;
- const char *buffer;
- size_t size;
- } data;
-
- struct error_t {
- enum telnet_event_type_t _type;
- const char *file;
- const char *func;
- const char *msg;
- int line;
- telnet_error_t errcode;
- } error;
-
- struct iac_t {
- enum telnet_event_type_t _type;
- unsigned char cmd;
- } iac;
-
- struct negotiate_t {
- enum telnet_event_type_t _type;
- unsigned char telopt;
- } neg;
-
- struct subnegotiate_t {
- enum telnet_event_type_t _type;
- const char *buffer;
- size_t size;
- unsigned char telopt;
- } sub;
-
- struct zmp_t {
- enum telnet_event_type_t _type;
- const char **argv;
- size_t argc;
- } zmp;
-
- struct ttype_t {
- enum telnet_event_type_t _type;
- unsigned char cmd;
- const char* name;
- } ttype;
-
- struct compress_t {
- enum telnet_event_type_t _type;
- unsigned char state;
- } compress;
-
- struct environ_t {
- enum telnet_event_type_t _type;
- const struct telnet_environ_t *values;
- size_t size;
- unsigned char cmd;
- } environ;
-
-
- struct mssp_t {
- enum telnet_event_type_t _type;
- const struct telnet_environ_t *values;
- size_t size;
- } mssp;
- };
- typedef void (*telnet_event_handler_t)(telnet_t *telnet,
- telnet_event_t *event, void *user_data);
- struct telnet_telopt_t {
- short telopt;
- unsigned char us;
- unsigned char him;
- };
- struct telnet_t;
- extern telnet_t* telnet_init(const telnet_telopt_t *telopts,
- telnet_event_handler_t eh, unsigned char flags, void *user_data);
- extern void telnet_free(telnet_t *telnet);
- extern void telnet_recv(telnet_t *telnet, const char *buffer,
- size_t size);
- extern void telnet_iac(telnet_t *telnet, unsigned char cmd);
- extern void telnet_negotiate(telnet_t *telnet, unsigned char cmd,
- unsigned char opt);
- extern void telnet_send(telnet_t *telnet,
- const char *buffer, size_t size);
- extern void telnet_begin_sb(telnet_t *telnet,
- unsigned char telopt);
- #define telnet_finish_sb(telnet) telnet_iac((telnet), TELNET_SE)
- extern void telnet_subnegotiation(telnet_t *telnet, unsigned char telopt,
- const char *buffer, size_t size);
- extern void telnet_begin_compress2(telnet_t *telnet);
- extern int telnet_printf(telnet_t *telnet, const char *fmt, ...)
- TELNET_GNU_PRINTF(2, 3);
- extern int telnet_vprintf(telnet_t *telnet, const char *fmt, va_list va);
- extern int telnet_raw_printf(telnet_t *telnet, const char *fmt, ...)
- TELNET_GNU_PRINTF(2, 3);
- extern int telnet_raw_vprintf(telnet_t *telnet, const char *fmt, va_list va);
- extern void telnet_begin_newenviron(telnet_t *telnet, unsigned char type);
- extern void telnet_newenviron_value(telnet_t* telnet, unsigned char type,
- const char *string);
- #define telnet_finish_newenviron(telnet) telnet_finish_sb((telnet))
- extern void telnet_ttype_send(telnet_t *telnet);
- extern void telnet_ttype_is(telnet_t *telnet, const char* ttype);
- extern void telnet_send_zmp(telnet_t *telnet, size_t argc, const char **argv);
- extern void telnet_send_zmpv(telnet_t *telnet, ...) TELNET_GNU_SENTINEL;
- extern void telnet_send_vzmpv(telnet_t *telnet, va_list va);
- extern void telnet_begin_zmp(telnet_t *telnet, const char *cmd);
- extern void telnet_zmp_arg(telnet_t *telnet, const char *arg);
- #define telnet_finish_zmp(telnet) telnet_finish_sb((telnet))
- #if defined(__cplusplus)
- }
- #endif
- #endif
|