Diff for /libaitcli/inc/aitcli.h between versions 1.2.2.3 and 1.3.2.1

version 1.2.2.3, 2010/06/04 13:51:21 version 1.3.2.1, 2011/03/16 17:43:07
Line 10 Line 10
 #define __AITCLI_H  #define __AITCLI_H
   
   
   #include <termios.h>
   #include <sys/queue.h>
   
   
 #define STRSIZ          256  #define STRSIZ          256
   
 /* Key definitions */  /* Key definitions */
Line 160  typedef struct { Line 164  typedef struct {
 } bindkey_t;  } bindkey_t;
   
   
   /* Commands structure for CLI */
   
   typedef int (*cmd_func_t)(/*linebuffer_t **/ void * __restrict buffer, int idx, char ** __restrict args);
   struct tagCommand {
           int                     cmd_level;
   
           int                     cmd_len;
           char                    cmd_name[STRSIZ];
   
           char                    cmd_info[STRSIZ];
           char                    cmd_help[STRSIZ];
   
           cmd_func_t              cmd_func;
   
           SLIST_ENTRY(tagCommand) cmd_next;
   };
   typedef SLIST_HEAD(slCommandHead, tagCommand) commands_t;
   
   
 /* Main structure, Buffer for CLI work with thread models ;-) special designed by M.Punov */  /* Main structure, Buffer for CLI work with thread models ;-) special designed by M.Punov */
   
 typedef struct {  typedef struct {
Line 177  typedef struct { Line 200  typedef struct {
   
         bindkey_t               *line_keys;          bindkey_t               *line_keys;
   
           int                     line_level;
           commands_t              line_cmds;
   
         int                     line_in;          int                     line_in;
         int                     line_out;          int                     line_out;
 } linebuffer_t;  } linebuffer_t;
   
 /* Commands structure for CLI */  
   
 typedef int (*cmd_func_t)(linebuffer_t * __restrict buffer, int argc, char ** __restrict argv);  
 typedef struct {  
         int                     cmd_level;  
   
         int                     cmd_min;  
         int                     cmd_len;  
         char                    cmd_name[STRSIZ];  
   
         char                    cmd_info[STRSIZ];  
         char                    cmd_help[STRSIZ];  
   
         cmd_func_t              *cmd_func;  
 } commands_t;  
   
   
 /* Error support functions */  /* Error support functions */
   
 // cli_GetErrno() Get error code of last operation  // cli_GetErrno() Get error code of last operation
Line 206  inline int cli_GetErrno(); Line 216  inline int cli_GetErrno();
 inline const char *cli_GetError();  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 */
   
   /*
    * cli_Cmd_Unsupported() Builtin helper function for unsupported commands
    * @buffer = CLI buffer
    * @idx = Selected command ID
    * @args = Parsed arguments array
    * return: RETCODE_OK ok
   */
   int cli_Cmd_Unsupported(void * __restrict buffer, int idx, char ** __restrict args);
   
   
 /* CLI Functions */  /* CLI Functions */
   
 /*  /*
Line 216  inline const char *cli_GetError(); Line 347  inline const char *cli_GetError();
 */  */
 int cli_BindKey(bindkey_t * __restrict key, linebuffer_t * __restrict buffer);  int cli_BindKey(bindkey_t * __restrict key, linebuffer_t * __restrict buffer);
   
   
 /*  /*
    * cli_addCommand() Add command to CLI session
    * @buffer = CLI buffer
    * @csCmd = Command name
    * @cliLevel = Level in CLI, -1 unprivi(view from all), 0 main config, 1 sub config ...
    * @funcCmd = Callback function when user call command
    * @csInfo = Inline information for command
    * @csHelp = Help line when call help
    * return: RETCODE_ERR error, RETCODE_OK ok
   */
   int
   cli_addCommand(linebuffer_t * __restrict buffer, const char *csCmd, int cliLevel, cmd_func_t funcCmd, 
                   const char *csInfo, const char *csHelp);
   /*
    * cli_delCommand() Delete command from CLI session
    * @buffer = CLI buffer
    * @csCmd = Command name
    * @cliLevel = Level in CLI, -1 unprivi(view from all), 0 main config, 1 sub config ...
    * return: RETCODE_ERR error, RETCODE_OK ok
   */
   int
   cli_delCommand(linebuffer_t * __restrict buffer, const char *csCmd, int cliLevel);
   /*
    * cli_updCommand() Update command in CLI session
    * @buffer = CLI buffer
    * @csCmd = Command name
    * @cliLevel = Level in CLI, -1 unprivi(view from all), 0 main config, 1 sub config ...
    * @funcCmd = Callback function when user call command
    * @csInfo = Inline information for command
    * @csHelp = Help line when call help
    * return: RETCODE_ERR error, RETCODE_OK ok
   */
   int
   cli_updCommand(linebuffer_t * __restrict buffer, const char *csCmd, int cliLevel, cmd_func_t funcCmd, 
                   const char *csInfo, const char *csHelp);
   
   
   /*
  * cli_addHistory() Add line to history   * cli_addHistory() Add line to history
  * @buffer = CLI buffer   * @buffer = CLI buffer
 * @str = Add text * @str = Add custom text or if NULL use readed line from CLI buffer
  * return: RETCODE_ERR error, RETCODE_OK ok   * return: RETCODE_ERR error, RETCODE_OK ok
 */  */
 int cli_addHistory(linebuffer_t * __restrict buffer, const char * __restrict str);  int cli_addHistory(linebuffer_t * __restrict buffer, const char * __restrict str);
Line 258  inline int cli_freeLine(linebuffer_t * __restrict buff Line 427  inline int cli_freeLine(linebuffer_t * __restrict buff
  * return: none   * return: none
 */  */
 inline void cli_setPrompt(linebuffer_t * __restrict buffer, const char *prompt);  inline void cli_setPrompt(linebuffer_t * __restrict buffer, const char *prompt);
   /*
    * cli_Printf() Send message to CLI session
    * @buffer = CLI buffer
    * @fmt = printf format string
    * @... = arguments defined in fmt
    * return: none
   */
   inline void cli_Printf(linebuffer_t * __restrict buffer, char *fmt, ...);
   /*
    * cli_PrintHelp() Print help screen
    * @buffer = CLI buffer
    * return: none
   */
   inline void cli_PrintHelp(linebuffer_t * __restrict buffer);
   
 /*  /*
  * cliEnd() Clear data, Free resources and close CLI session   * cliEnd() Clear data, Free resources and close CLI session
Line 275  void cliEnd(linebuffer_t * __restrict buffer); Line 458  void cliEnd(linebuffer_t * __restrict buffer);
 linebuffer_t *cliInit(int fin, int fout, const char *prompt);  linebuffer_t *cliInit(int fin, int fout, const char *prompt);
   
 /*  /*
 * cliExec() Execute CLI main loop * cliInitLine() Init CLI input line terminal
 * @cmdList = Commands list * @buffer = CLI buffer
 * @csPrompt = Prompt text * return: none
 * return: -1 error, 0 = exit w/^+D, 1 done. 
 */  */
int cliExec(commands_t *cmdList, const char *csPrompt);int cliInitLine(linebuffer_t * __restrict buffer);
 /*  /*
 * cliNetExec() Execute net CLI main loop * cliReadLine() Read line from opened CLI session
 * @cmdList = Commands list * @buffer = CLI buffer
 * @csPrompt = Prompt text * return: NULL if error or !=NULL readed line, must be free after use!
 * @sock = client socket 
 * @term = stdin termios 
 * @win = window size of tty 
 * return: -1 error, 0 = exit w/^+D, 1 done. 
 */  */
int cliNetExec(commands_t *cmdList, const char *csPrompt, int sock, struct termios *term, struct winsize *win);char *cliReadLine(linebuffer_t * __restrict buffer);
   
   
 /* CLI Helper functions */  
   
 /*  /*
 * cli_Cmd_Unsupported() Builtin helper function for unsupported commands * cliLoop() CLI main loop
 * @cmds = Commands list * @buffer = CLI buffer
 * @idx = Selected command ID * @csHistFile = History file name
 * @out = Output handle * return: RETCODE_ERR error, RETCODE_OK ok
 * @args = Parsed arguments array 
 * return: -1 error, 0 = ok, 1 exit from Cli! 
 */  */
int cli_Cmd_Unsupported(void *cmds, int idx, FILE *out, char ** __restrict args);int cliLoop(linebuffer_t * __restrict buffer, const char *csHistFile);
 /*  /*
 * cli_Cmd_Help() Builtin helper function for Help screen * cliNetLoop() CLI network main loop binded to socket
 * @cmds = Commands list * @buffer = CLI buffer
 * @idx = Selected command ID * @csHistFile = History file name
 * @out = Output handle * @sock = client socket
 * @args = Parsed arguments array * @term = stdin termios
 * return: -1 error, 0 = ok * @win = window size of tty
  * return: RETCODE_ERR error, RETCODE_OK ok
 */  */
int cli_Cmd_Help(void *cmds, int idx, FILE *out, char ** __restrict args);int cliNetLoop(linebuffer_t * __restrict buffer, const char *csHistFile, int sock);
/* 
 * cli_Cmd_Exit() Builtin helper function for Exit from Cli 
 * @cmds = Commands list 
 * @idx = Selected command ID 
 * @out = Output handle 
 * @args = Parsed arguments array 
 * return: 1 exit from Cli! 
*/ 
int cli_Cmd_Exit(void *cmds, int idx, FILE *out, char ** __restrict args); 
 
 
/* 
 * cli_Register_Commands - Declare helper function for register and export Commands variable 
*/ 
#define CLI_REGISTER_COMMANDS(CMDS)     \ 
        extern commands_t CMDS[]; 
/* 
 * cli_Make_Comp_Commands - Declare helper function for Commands completion arguments 
*/ 
#define CLI_MAKE_COMP_COMMANDS(FUNC, CMDS)      \ 
        char *FUNC(const char *text, int state) \ 
        { \ 
                register int i; \ 
                int len = strlen(text); \ 
                for (i = state; CMDS[i].cmd_name; i++) { \ 
                        if (strncmp(CMDS[i].cmd_name, "---", 3) && \ 
                                        !strncmp(CMDS[i].cmd_name, text, len)) \ 
                                return strdup(CMDS[i].cmd_name); \ 
                } \ 
                return NULL; \ 
        } 
 
/* 
 * cli_Make_Comp_Args - Declare helper function for Arguments completion 
*/ 
#define CLI_MAKE_COMP_ARGS(FUNC, ARGS)  \ 
        char *FUNC(const char *text __attribute__((unused)), int state) \ 
        { \ 
                while (ARGS[state]) \ 
                        return strdup(ARGS[state]); \ 
                return NULL; \ 
        } 
   
   
 #endif  #endif

Removed from v.1.2.2.3  
changed lines
  Added in v.1.3.2.1


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>