--- libaitcli/inc/aitcli.h 2010/12/07 15:09:02 1.2.2.13 +++ libaitcli/inc/aitcli.h 2011/03/16 17:43:07 1.3.2.1 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitcli.h,v 1.2.2.13 2010/12/07 15:09:02 misho Exp $ +* $Id: aitcli.h,v 1.3.2.1 2011/03/16 17:43:07 misho Exp $ * *************************************************************************/ #ifndef __AITCLI_H @@ -214,6 +214,115 @@ typedef struct { inline int cli_GetErrno(); // cli_GetError() Get error text of last operation inline const char *cli_GetError(); + + +/* TELNET support for CLI */ + +#define MAX_SUB_LEN 255 + +struct telnetAttrs { + unsigned char ta_cmd; + unsigned char ta_opt; + unsigned char ta_sublen; + unsigned char ta_sub[MAX_SUB_LEN]; +}; + + +#ifndef NDEBUG +/* + * cli_telnetDumpAttrs() Telnet debug attributes list, if NDEBUG defined not include + * @attr = attributes list + * @nAttr = attributes list size + * return: none +*/ +void cli_telnetDumpAttrs(struct telnetAttrs *attr, int nAttr); +#else +extern void cli_telnetDumpAttrs(struct telnetAttrs *, int); +#endif + + +/* + * cli_telnetRecv() Telnet receive commands, negotiate with telnet peer + * @sock = socket for communication + * @attr = received attributes list, must be free after use, but if NULL receive in binary mode + * @nAttr = received attributes list size, if is NULL receive in binary mode + * @pdata = received data in supplied buffer + * @datLen = buffer pdata size + * return: 0 not present data; -1 error:: can`t read; -2 timeout; -3 EOF; >0 number of received bytes +*/ +int cli_telnetRecv(int sock, struct telnetAttrs **attr, int *nAttr, void *data, int datLen); +/* + * cli_telnetSend() Telnet send commands, negotiate with telnet peer + * @sock = socket for communication + * @attr = send attributes list + * @nAttr = send attributes list size + * @data = data for send + * @datLen = data size + * @Term = Terminate with GA (Go Ahead), 1 send after data GA command + * return: 0 not sended commands; -1 error:: can`t send; >0 number of sended bytes +*/ +int cli_telnetSend(int sock, struct telnetAttrs *attr, int nAttr, void *data, int datLen, int Term); + +/* + * cli_telnet_Get_SubOpt() Telnet get sub option function + * @attr = input attribute + * @code = sub-option code for opt + * @data = sub-option data + * @datLen = data size set max size in input, output return copy size + * return: -1 can`t get option; !=-1 option code +*/ +inline int cli_telnet_Get_SubOpt(struct telnetAttrs *attr, unsigned char *code, + void *data, unsigned char *datLen); +/* + * cli_telnet_Set_SubOpt() Telnet set sub option function + * @attr = output attribute + * @opt = attribute option + * @code = sub-option code for opt, if 0xff not specified + * @data = sub-option data, if NULL not specified + * @datLen = data size, if 0 not specified + * return: -1 can`t set sub-otion; 0 ok +*/ +inline int cli_telnet_Set_SubOpt(struct telnetAttrs *attr, unsigned char opt, unsigned char code, + void *data, unsigned char datLen); + +/* + * cli_telnet_GetCmd() Telnet get command + * @attr = input attribute + * return: -1 can`t get command; !=-1 command <<24 return sublen, <<8 return option, <<0 command +*/ +inline unsigned int cli_telnet_GetCmd(struct telnetAttrs *attr); +/* + * cli_telnet_SetCmd() Telnet set command + * @attr = input attribute + * @cmd = command + * @opt = option, if 0xff not specified + * @arg1 = sub-option code, if 0xff not specified + * @arg2 = sub-option data, if NULL not specified + * @arg3 = sub-option data size, if 0 not specified data + * return: -1 can`t set command; !=-1 ok +*/ +inline int cli_telnet_SetCmd(struct telnetAttrs *attr, unsigned char cmd, unsigned char opt, ...); + +/* + * cli_telnet_Answer() Automatic generate commands answer to send from telnet + * @caps = Array of capability options + * @nCaps = number of capability options + * @attr = input attribute + * @nAttr = number of input attributes + * @ans = output answered attributes, must be free() after use + * @Ans = number of output answered attributes + * return: -1 can`t answer; !=-1 ok +*/ +int cli_telnet_Answer(unsigned char *caps, int nCaps, struct telnetAttrs *attr, int nAttr, + struct telnetAttrs **ans, int *Ans); + + +// Add capability option, x = 0 false, 1 true +#define ADD_CAPS(opt, x) ((opt) | (x) ? 0x80 : 0) +// Is supported this option ... +#define SUP_CAPS(caps) ((caps) & 0x80) +// get capability option +#define CAP(caps) ((caps) & 0x7f) /* CLI Helper functions */