109 lines
4.7 KiB
C
Executable File
109 lines
4.7 KiB
C
Executable File
#ifndef TELNETSRV_H
|
|
#define TELNETSRV_H
|
|
|
|
#define TELNETSRV_MODNAME "telnetsrv"
|
|
|
|
#define TELNET_PORT 9090
|
|
#define TELNET_MAX_MSGLENGTH 2048
|
|
#define TELNET_PROMPT "softmodem> "
|
|
#define TELNET_MAXCMD 20
|
|
#define TELNET_CMD_MAXSIZE 10
|
|
#define TELNET_HELPSTR_SIZE 80
|
|
|
|
/* status return by the command parser after it analysed user input */
|
|
#define CMDSTATUS_NOCMD 0
|
|
#define CMDSTATUS_EXIT 1
|
|
#define CMDSTATUS_FOUND 2
|
|
#define CMDSTATUS_VARNOTFOUND 3
|
|
#define CMDSTATUS_NOTFOUND 4
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
/* structure to be used when adding a module to the telnet server */
|
|
/* This is the second parameter of the add_telnetcmd function, which can be used */
|
|
/* to add a set of new command to the telnet server shell */
|
|
typedef void(*telnet_printfunc_t)(const char* format, ...);
|
|
typedef int(*cmdfunc_t)(char*, int, telnet_printfunc_t prnt);
|
|
|
|
typedef struct cmddef {
|
|
char cmdname[TELNET_CMD_MAXSIZE];
|
|
char helpstr[TELNET_HELPSTR_SIZE];
|
|
cmdfunc_t cmdfunc;
|
|
} telnetshell_cmddef_t;
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
/*structure to be used when adding a module to the telnet server */
|
|
/* This is the first parameter of the add_telnetcmd function, which can be used */
|
|
/* to add a set of new variables which can be got/set from the telnet server shell */
|
|
#define TELNET_VARTYPE_INT32 1
|
|
#define TELNET_VARTYPE_INT16 2
|
|
#define TELNET_VARTYPE_INT64 3
|
|
#define TELNET_VARTYPE_STRING 4
|
|
#define TELNET_VARTYPE_DOUBLE 5
|
|
#define TELNET_VARTYPE_PTR 6
|
|
typedef struct variabledef {
|
|
char varname[TELNET_CMD_MAXSIZE];
|
|
char vartype;
|
|
void *varvalptr;
|
|
} telnetshell_vardef_t;
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
/* internal structure definitions */
|
|
/* cmdparser_t is used to store all modules which have been added to the telnet server. */
|
|
/* Each time the add_telnetcmd function is used, the internal array cmdparser_t[] of the */
|
|
/* telnet server is populated with the new commands and variables */
|
|
typedef struct cmdparser {
|
|
char module[TELNET_CMD_MAXSIZE]; // module name = first token of the telnet shell command
|
|
telnetshell_cmddef_t *cmd; // array of functions added to the shell
|
|
telnetshell_vardef_t *var; // array of variables added to the shell
|
|
} cmdparser_t;
|
|
|
|
/* telnetsrv_params_t is an internal structure storing all the current parameters and */
|
|
/* global variables used by the telnet server */
|
|
typedef struct {
|
|
pthread_t telnet_pthread; // thread id of the telnet server
|
|
int telnetdbg; // debug level of the server
|
|
int priority; // server running priority
|
|
int new_socket; // socket of the client connection
|
|
int logfilefd; // file id of the log file when log output is redirected to a file
|
|
int saved_stdout; // file id of the previous stdout, used to be able to restore original stdout
|
|
cmdparser_t CmdParsers[TELNET_MAXCMD]; // array of registered modules.
|
|
char msgbuff[TELNET_MAX_MSGLENGTH]; // internal buffer of the client_printf function which is used to print to the client terminal */
|
|
unsigned int listenport; // ip port the telnet server is listening on
|
|
unsigned int listenaddr; // ip address the telnet server is listening on
|
|
unsigned int loopcount; // loop command param: number of loop iteration
|
|
unsigned int loopdelay; // loop command param: delay in ms between 2 iterations
|
|
unsigned int phyprntbuff_size; // for phy module, dump_eNB_stats function buffer size
|
|
} telnetsrv_params_t;
|
|
|
|
|
|
|
|
typedef int(*addcmdfunc_t)(char*, telnetshell_vardef_t*, telnetshell_cmddef_t*);
|
|
|
|
typedef void(*settelnetmodule_t)(char *name, void *ptr);
|
|
|
|
/*-------------------------------------------------------------------------------------------*/
|
|
/*
|
|
VT escape sequence definition, for smarter display....
|
|
*/
|
|
|
|
#define ESC "\x1b"
|
|
#define CSI "\x1b["
|
|
#define BOLD "\x1b[1m"
|
|
#define RED "\x1b[31m"
|
|
#define GREEN "\x1b[32m"
|
|
#define BLUE "\x1b[34m"
|
|
#define MAGENTA "\x1b[35m"
|
|
#define CYAN "\x1b[36m"
|
|
#define STDFMT "\x1b[0m"
|
|
|
|
/*---------------------------------------------------------------------------------------------*/
|
|
#ifdef TELNETSERVERCODE
|
|
int add_telnetcmd(char *modulename, telnetshell_vardef_t *var, telnetshell_cmddef_t *cmd);
|
|
void set_sched(pthread_t tid, int pid,int priority);
|
|
void set_affinity(pthread_t tid, int pid, int coreid);
|
|
extern int get_phybsize();
|
|
#endif
|
|
#endif
|