- Timestamp:
- Nov 30, 2012 8:57:18 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/branches/projects/cli/pjlib-util/src/pjlib-util/cli_telnet.c
r4302 r4303 27 27 #include <pj/pool.h> 28 28 #include <pj/string.h> 29 #include <pj/except.h> 29 30 #include <pjlib-util/errno.h> 31 #include <pjlib-util/scanner.h> 30 32 31 33 #define CLI_TELNET_BUF_SIZE 256 … … 889 891 } 890 892 893 /* Syntax error handler for parser. */ 894 static void on_syntax_error(pj_scanner *scanner) 895 { 896 PJ_UNUSED_ARG(scanner); 897 PJ_THROW(PJ_EINVAL); 898 } 899 900 static pj_status_t get_last_token(pj_str_t *cmd, pj_str_t *str) 901 { 902 pj_scanner scanner; 903 PJ_USE_EXCEPTION; 904 pj_scan_init(&scanner, cmd->ptr, cmd->slen, PJ_SCAN_AUTOSKIP_WS, 905 &on_syntax_error); 906 PJ_TRY { 907 while (!pj_scan_is_eof(&scanner)) { 908 pj_scan_get_until_chr(&scanner, " \t\r\n", str); 909 } 910 } 911 PJ_CATCH_ANY { 912 pj_scan_fini(&scanner); 913 return PJ_GET_EXCEPTION(); 914 } 915 PJ_END; 916 return PJ_SUCCESS; 917 } 918 891 919 static pj_bool_t handle_tab(cli_telnet_sess *sess) 892 920 { … … 930 958 if (info.hint_cnt > 0) { 931 959 /* Complete command */ 932 send_comp_arg(sess, &info); 933 934 pj_memcpy(&sess->rcmd->rbuf[len], 935 &info.hint[0].name.ptr[0], info.hint[0].name.slen); 936 937 len += info.hint[0].name.slen; 938 sess->rcmd->rbuf[len] = 0; 960 pj_str_t cmd = pj_str((char *)&sess->rcmd->rbuf[0]); 961 pj_str_t last_token; 962 963 if (get_last_token(&cmd, &last_token) == PJ_SUCCESS) { 964 pj_str_t *hint_info = &info.hint[0].name; 965 pj_strtrim(&last_token); 966 if (hint_info->slen > last_token.slen) { 967 hint_info->slen -= last_token.slen; 968 pj_memmove(&hint_info->ptr[0], &hint_info->ptr[last_token.slen], 969 hint_info->slen); 970 } 971 send_comp_arg(sess, &info); 972 973 pj_memcpy(&sess->rcmd->rbuf[len], &info.hint[0].name.ptr[0], 974 info.hint[0].name.slen); 975 976 len += info.hint[0].name.slen; 977 sess->rcmd->rbuf[len] = 0; 978 } 939 979 } else { 940 980 retval = PJ_FALSE;
Note: See TracChangeset
for help on using the changeset viewer.