tw_cli.h
上传用户:hujq123
上传日期:2016-04-10
资源大小:153k
文件大小:10k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. /* 
  2.  * Copyright (C) 2002 Koninklijke Philips Electronics N.V., 
  3.  * All Rights Reserved. 
  4.  *
  5.  * This source code and any compilation or derivative thereof is the 
  6.  * proprietary information of Koninklijke Philips Electronics N.V. 
  7.  * and is confidential in nature. 
  8.  * Under no circumstances is this software to be exposed to or placed 
  9.  * under an Open Source License of any type without the expressed 
  10.  * written permission of Koninklijke Philips Electronics N.V. 
  11.  * 
  12.  *###########################################################
  13.  */ 
  14. /*! 
  15.  *      file           tw_cli.h 
  16.  * 
  17.  *      brief          - 
  18.  * 
  19.  */ 
  20. /*-----------------------------------------------------------*
  21.  * 
  22.  *      %version:       5 % 
  23.  *      instance:       DS_5 
  24.  *      %date_created:  Fri Feb 21 09:14:08 2003 % 
  25.  *
  26.  *###########################################################
  27.  */ 
  28. #ifndef _TW_CLI_H
  29. #define _TW_CLI_H
  30. /* These constant maps to accessFlag in cmdStruct.  Range is 0 to 31.
  31.  */
  32. #define CLI_ACCESS_NO_MODE         0         /* "   " */
  33. #define CLI_ACCESS_USER_MODE       1         /* "USR" */
  34. #define CLI_ACCESS_TECH_MODE       2         /* "TEC" */
  35. #define CLI_ACCESS_ENG_MODE        3         /* "ENG" */
  36. #define CLI_ACCESS_BLO_MODE        4         /* "BLO" - backdoor access */
  37. #define CLI_ACCESS_PRODUCT_1       8         /* To create command list per product type */
  38. #define CLI_ACCESS_PRODUCT_2       9
  39. #define CLI_ACCESS_PRODUCT_3       10
  40. #define TO_ACCESS_FLAG(x)      (1 << (x))
  41. /* The following flags are used for specifying access 
  42.  * level for a command object. 
  43.  */
  44. #define ALL_ACCESS_MODE       (TO_ACCESS_FLAG(CLI_ACCESS_USER_MODE) | 
  45.                                TO_ACCESS_FLAG(CLI_ACCESS_TECH_MODE) | 
  46.                                TO_ACCESS_FLAG(CLI_ACCESS_ENG_MODE) | 
  47.                                TO_ACCESS_FLAG(CLI_ACCESS_BLO_MODE))
  48.                                     
  49. #define USER_ACCESS_MODE       TO_ACCESS_FLAG(CLI_ACCESS_USER_MODE)
  50. #define TECH_ACCESS_MODE       TO_ACCESS_FLAG(CLI_ACCESS_TECH_MODE)
  51. #define ENG_ACCESS_MODE        TO_ACCESS_FLAG(CLI_ACCESS_ENG_MODE)
  52. #define BLO_ACCESS_MODE        TO_ACCESS_FLAG(CLI_ACCESS_BLO_MODE)
  53.                                      
  54. #define ALL_PRODUCT_TYPE      (TO_ACCESS_FLAG(CLI_ACCESS_PRODUCT_1) | 
  55.                                TO_ACCESS_FLAG(CLI_ACCESS_PRODUCT_2) | 
  56.                                TO_ACCESS_FLAG(CLI_ACCESS_PRODUCT_3))
  57. typedef enum
  58. {
  59.     CLI_PRINT_DATA_FORMAT_INT32 = 0,
  60.     CLI_PRINT_DATA_FORMAT_UINT32,
  61.     CLI_PRINT_DATA_FORMAT_HEX32,
  62.     CLI_PRINT_DATA_FORMAT_INT16,
  63.     CLI_PRINT_DATA_FORMAT_UINT16,
  64.     CLI_PRINT_DATA_FORMAT_HEX16,
  65.     CLI_PRINT_DATA_FORMAT_INT8,
  66.     CLI_PRINT_DATA_FORMAT_UINT8,
  67.     CLI_PRINT_DATA_FORMAT_HEX8
  68. } Cli_PrintFormat_e;
  69. /* A structure to contain all session related parameters.  Multiple
  70.  * of such objects in runtime will support multiple sessions.
  71.  */
  72. #define      CLI_ACCESS_CMDSTR_SIZE           128
  73. #define      CLI_ACCESS_HISTORY_DEPTH          12
  74. #define      MAX_USERPASS_LEN              12
  75. #define      MAX_LOGIN_FAILURE              4
  76. #define      SCRATCH_BUF_SIZE             384
  77. #define      CLI_DEFAULT_PAGE_LENGTH       48
  78. #define      CLI_MINIMAL_PAGE_LENGTH        5
  79. #define      MAX_PROMPT_LEN                24  /* first 14 characters of system name can fit */ 
  80. typedef struct _Cli_SessionFuns Cli_SessionFuns_t;
  81. typedef struct _cmdSession Cli_cmdSession_t;
  82. struct _Cli_SessionFuns {
  83. int (*write)(char *str, int len);
  84. int (*writebuf)(char *str, int len);
  85. int (*read_char)();
  86. void (*yield)();
  87. int (*init)();
  88. void (*cleanup)(Cli_cmdSession_t *pSess);
  89. int (*log)(const char *fmt, ...);
  90. int (*create_task)(const char *name, void*(*task_proc)(void*), int prio, int stack_size, void *arg);
  91. int sessionType;
  92. };
  93. struct _cmdSession {
  94.    Cli_SessionFuns_t   *pSessFuns;                           /* the socket, if -1 this entry is free */
  95.    int   cmdSessionType;                    /* either JTAG or Socket */
  96.    char  cmdBuf[CLI_ACCESS_CMDSTR_SIZE];        /* hold user input uptil CR */
  97.    int   cmdBufIdx;                         /* location of last char */
  98.    int   cmdState;                          /* track login state */
  99.    char  myUserName[MAX_USERPASS_LEN + 2];  /* username as entered */
  100.    /* histroyBuf[][] stores last CLI_ACCESS_HISTORY_DEPTH commands, it's a ring buffer
  101.     * histroyNum[][] stores last CLI_ACCESS_HISTORY_DEPTH command history numbers,
  102.     * historyPtr indicates where in the ring buffer to record the next command
  103.     * historyNextNumber is the next command history number to use.
  104.     */
  105.    char  historyBuf[CLI_ACCESS_HISTORY_DEPTH][CLI_ACCESS_CMDSTR_SIZE];
  106.    int   historyNum[CLI_ACCESS_HISTORY_DEPTH];
  107.    int   historyPtr;
  108.    int   historyNextNumber;
  109.    int   currentCmdMode;         /* operator, admin, cfg or engineering mode */
  110.    int   myProductType;          /* product type such as Barracuda */
  111.    int   loginFailedCount;       /* kick user out after a few failures */
  112.    int   errValue;               /* some place to store error from Fusion's call */
  113.    char  scratchBuf[SCRATCH_BUF_SIZE];   /* buffer for any purpose, per session */
  114.    int   pageLength;             /* store the number of rows in one screen */
  115.    int   currentRow;             /* indicates current line number */
  116.    int   scrollPause;            /* if = 1, printing will pause at "numRow" lines */
  117.    int   skipPrinting;           /* if 1, all calls to print stuff out are discarded. */
  118.    char  prompt[MAX_PROMPT_LEN];
  119. };
  120. /* Definition of command structure 
  121.  *
  122.  * name is the command or option string
  123.  *
  124.  * accessFlag indicates the scope of this command/option; it is compared
  125.  * with user's access right to create a valid set of command and options
  126.  * pertaining to certain access mode and product type.
  127.  *
  128.  * optionList lists all (if any) available command/options as represented 
  129.  * by their Cli_CmdStruct_t objects.
  130.  *
  131.  * helpStr is a one line (60 char max) explanation of what this command/
  132.  * option does.  
  133.  *
  134.  * HelpFunc is an optional function which is executed after printing out 
  135.  * all the helpStrs in optionList's objects.
  136.  *
  137.  * procFunc is the command processing handler.  It is executed when user
  138.  * command is fully qualified (match all command options).  E.g., a command
  139.  * like "logout" needs no argument, meaning that the parser can fully
  140.  * qualify user input.  This will be the job of a procFunc().
  141.  *
  142.  * varOptFunc is the alternative command processing handler when a
  143.  * target procFunc is not available.  This is used for a command/option
  144.  * that expect one or more arguments.  Argument processing must be done
  145.  * by this handler.  E.g., a command like "ping A.B.C.D" contains one
  146.  * argument.  Since value of A.B.C.D is not fixed, the parser can only
  147.  * qualify the command/option upto "ping" but no further.  It is up to a
  148.  * varOptFunc() for ping to scan and extract A.B.C.D and do something with
  149.  * it.
  150.  *
  151.  * What is variable option list ?  A variable option is one which presence
  152.  * and availability is determined during runtime.  For example, if we have
  153.  * a command to show available network device, we can implement it via
  154.  * variable option list.
  155.  * 
  156.  * show netdev pna0, show netdev pppoa0, show netdev pppoa1.  The last
  157.  * option is a variable option. 
  158.  */
  159. typedef struct _cli_cmdStruct 
  160. {
  161.     char                   *name;      /* can't be longer than 16 characters */
  162.     unsigned int           accessFlag;
  163. struct _cli_cmdStruct  **optionList;
  164. char              *helpStr;        /* can't be longer than 60 characters */
  165. int               (*helpFunc)(Cli_cmdSession_t *pSess, char *cmdStr, int ptr);
  166. int               (*procFunc)(Cli_cmdSession_t *pSess, char *cmdStr, int ptr);
  167. int   (*varOptFunc)(Cli_cmdSession_t *pSess, char *cmdStr, int ptr);
  168. } Cli_CmdStruct_t;
  169. #define NULL_HELP_FUNC     NULL  /* no help function */
  170. #define NULL_PROC_FUNC     NULL  /* no (fixed length, no option) processing function */
  171. #define NULL_VAR_OPT_FUNC  NULL  /* no variable option processing function */
  172. typedef enum _cli_sessionType 
  173. {
  174. CLI_SERIAL_SESSION,
  175.     CLI_SOCK_SESSION,
  176.     CLI_JTAG_SESSION 
  177. } Cli_SessionType_t;
  178. /*
  179.  * stdio/cli compatible io
  180.  */
  181. typedef void (*Cli_Printf_t)(void *handle, char *fmt, ...) ;
  182. /* Common size text string to be reused.  See tw_cli.c for definition.
  183.  */
  184. extern char *badPasswordStr;    
  185. extern char *endSessionStr;     
  186. extern char *noHelpStr;         
  187. extern char *missingCmdStr;     
  188. extern char *invalidCmdStr;     
  189. extern char *cmdOptionsAreStr;  
  190. extern char *noSuchHistoryStr;  
  191. extern char *badParamStr;       
  192. extern char *operationFailedStr;
  193. extern char *Cli_FailedStr;
  194. /* CLI Utility Functions */
  195. #if defined(__cplusplus)
  196. extern "C"{
  197. #endif
  198. int Cli_Initialize(Cli_SessionFuns_t *pSessFuns);
  199. int  Cli_ProcessCmd(char *msgbuf, int len, Cli_cmdSession_t *pSess);
  200. int  Cli_SendCrLf(Cli_cmdSession_t *pSess);
  201. int  Cli_PrintLine(Cli_cmdSession_t *pSess, 
  202.                    int  NumChar,
  203.                    char Character,
  204.                    int  NumFrontCR, 
  205.                    int  NumBackCR);
  206. int  Cli_IpAndMask2int(char *str,  
  207.                        unsigned int *addr, 
  208.                        unsigned int *mask);
  209. int  Cli_Printf(Cli_cmdSession_t *pSess, char *fmt, ...);
  210. int  Cli_PutStr(Cli_cmdSession_t *pSess, char *str, int len);
  211. int  Cli_PutChar(Cli_cmdSession_t *pSess, char ch);
  212. int  Cli_PrintAtmPayload(Cli_cmdSession_t *pSess, 
  213.                          unsigned char *pAtmCellBuf);
  214. void Cli_DisableScrollPause(Cli_cmdSession_t *pSess);
  215. void Cli_EnableScrollPause(Cli_cmdSession_t *pSess);
  216. int Cli_SetPageLength(Cli_cmdSession_t *pSess, int NewPageLen);
  217. int Cli_GetScrollPauseStatus(Cli_cmdSession_t *pSess, int *PageLen);
  218. int Cli_PrintFileContent(Cli_cmdSession_t *pSess, char *FileName);
  219. void Cli_PrintData(Cli_cmdSession_t *pSess, void *pvBuffer, int nBytes, 
  220.         Cli_PrintFormat_e eFormat, int bUseRelativeAddr);
  221. int Cli_GetChar(Cli_cmdSession_t *pSess) ;
  222. #if defined(__cplusplus)
  223. }
  224. #endif
  225. #endif  /* _TW_CLI_H */