|
|
| version 1.2.2.17, 2010/06/09 09:32:30 | version 1.2.2.19, 2010/12/07 15:15:34 |
|---|---|
| Line 906 cliInit(int fin, int fout, const char *prompt) | Line 906 cliInit(int fin, int fout, const char *prompt) |
| linebuffer_t *buffer; | linebuffer_t *buffer; |
| bindkey_t *keys; | bindkey_t *keys; |
| register int i; | register int i; |
| struct termios t; | |
| memset(&t, 0, sizeof t); | |
| /* init buffer */ | /* init buffer */ |
| buffer = malloc(sizeof (linebuffer_t)); | buffer = malloc(sizeof(linebuffer_t)); |
| if (!buffer) { | if (!buffer) { |
| LOGERR; | LOGERR; |
| return NULL; | return NULL; |
| Line 1148 cliInit(int fin, int fout, const char *prompt) | Line 1146 cliInit(int fin, int fout, const char *prompt) |
| memcpy(keys[i].key_ch, K_F12, keys[i].key_len); | memcpy(keys[i].key_ch, K_F12, keys[i].key_len); |
| i++; | i++; |
| buffer->line_keys = keys; | |
| return buffer; | |
| } | |
| /* | |
| * cliInitLine() Init CLI input line terminal | |
| * @buffer = CLI buffer | |
| * return: none | |
| */ | |
| int | |
| cliInitLine(linebuffer_t * __restrict buffer) | |
| { | |
| struct termios t; | |
| memset(&t, 0, sizeof t); | |
| tcgetattr(buffer->line_in, &t); | tcgetattr(buffer->line_in, &t); |
| t.c_lflag &= ~(ICANON | ISIG | IEXTEN | ECHO | ECHOCTL | ECHOE | ECHOK | ECHOKE | ECHONL | ECHOPRT); | t.c_lflag &= ~(ICANON | ISIG | IEXTEN | ECHO | ECHOCTL | ECHOE | ECHOK | ECHOKE | ECHONL | ECHOPRT); |
| t.c_iflag |= IGNBRK; | t.c_iflag |= IGNBRK; |
| t.c_cc[VMIN] = 1; | t.c_cc[VMIN] = 1; |
| t.c_cc[VTIME] = 0; | t.c_cc[VTIME] = 0; |
| tcsetattr(buffer->line_in, TCSANOW, &t); | return tcsetattr(buffer->line_in, TCSANOW, &t); |
| buffer->line_keys = keys; | |
| return buffer; | |
| } | } |
| /* | /* |
| Line 1190 cliReadLine(linebuffer_t * __restrict buffer) | Line 1200 cliReadLine(linebuffer_t * __restrict buffer) |
| memset(buf, 0, sizeof buf); | memset(buf, 0, sizeof buf); |
| readLen = read(buffer->line_in, buf, BUFSIZ); | readLen = read(buffer->line_in, buf, BUFSIZ); |
| printf("+++ %s %d\n", buf, readLen); | |
| if (readLen == -1) { | if (readLen == -1) { |
| LOGERR; | LOGERR; |
| return str; | return str; |
| Line 1255 cliNetLoop(linebuffer_t * __restrict buffer, const cha | Line 1264 cliNetLoop(linebuffer_t * __restrict buffer, const cha |
| LOGERR; | LOGERR; |
| return -1; | return -1; |
| case 0: | case 0: |
| close(sock); | if (!buffer) { |
| if (buffer) | |
| ret = cliLoop(buffer, csHistFile) < 0 ? 1 : 0; | |
| else | |
| cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); | cli_SetErr(EINVAL, "Error:: invalid input parameters ..."); |
| return -1; | |
| } else | |
| close(sock); | |
| /* spawn Shell mode */ | ret = cliLoop(buffer, csHistFile) < 0 ? 1 : 0; |
| //execl("/bin/tcsh", "tcsh", NULL); | cliEnd(buffer); |
| _exit(ret); | exit(ret); |
| default: | default: |
| telnet_SetCmd(Attr + 0, DO, TELOPT_TTYPE); | telnet_SetCmd(Attr + 0, DO, TELOPT_TTYPE); |
| telnet_SetCmd(Attr + 1, WILL, TELOPT_ECHO); | telnet_SetCmd(Attr + 1, WILL, TELOPT_ECHO); |
| Line 1369 cliLoop(linebuffer_t * __restrict buffer, const char * | Line 1377 cliLoop(linebuffer_t * __restrict buffer, const char * |
| struct tagCommand *cmd; | struct tagCommand *cmd; |
| /* --- main body of CLI --- */ | /* --- main body of CLI --- */ |
| cliInitLine(buffer); | |
| if (cli_loadHistory(buffer, csHistFile) == RETCODE_ERR) | if (cli_loadHistory(buffer, csHistFile) == RETCODE_ERR) |
| return RETCODE_ERR; | return RETCODE_ERR; |