Ignore:
Timestamp:
May 3, 2013 8:47:14 AM (11 years ago)
Author:
riza
Message:

Re #1643: - Modification to shortcut handling(execution&display).

  • Add exact match check to the parse input command process.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib-util/src/pjlib-util/cli_telnet.c

    r4476 r4513  
    668668    cli_telnet_fe *fe = (cli_telnet_fe *)sess->base.fe; 
    669669 
    670     send_data.ptr = &data_str[0]; 
     670    send_data.ptr = data_str; 
    671671    send_data.slen = 0; 
    672672     
     
    692692    cli_telnet_fe *fe = (cli_telnet_fe *)sess->base.fe; 
    693693 
    694     send_data.ptr = &data_str[0]; 
     694    send_data.ptr = data_str; 
    695695    send_data.slen = 0; 
    696696 
     
    709709    pj_strcat(&send_data, &fe->cfg.prompt_str); 
    710710    if (with_last_cmd) 
    711         pj_strcat2(&send_data, (char *)&sess->rcmd->rbuf[0]); 
     711        pj_strcat2(&send_data, (char *)sess->rcmd->rbuf); 
    712712 
    713713    telnet_sess_send(sess, &send_data); 
     
    772772    static const pj_str_t sc_type = {"sc", 2}; 
    773773    static const pj_str_t choice_type = {"choice", 6}; 
    774     send_data.ptr = &data[0]; 
     774    send_data.ptr = data; 
    775775    send_data.slen = 0; 
    776776     
     
    787787    for (i=0;i<info->hint_cnt;++i) { 
    788788        if ((&hint[i].type) && (hint[i].type.slen > 0)) {            
    789             if (pj_stricmp(&hint[i].type, &sc_type) == 0) { 
    790                 //Additional delimiter " | " 
    791                 cmd_length += (hint[i].name.slen + 3); 
     789            if (pj_stricmp(&hint[i].type, &sc_type) == 0) {              
     790                if ((i > 0) && (!pj_stricmp(&hint[i-1].desc, &hint[i].desc))) { 
     791                    cmd_length += (hint[i].name.slen + 3); 
     792                } else { 
     793                    cmd_length = hint[i].name.slen; 
     794                }                
    792795            } else { 
    793796                cmd_length = hint[i].name.slen; 
     
    817820        } 
    818821         
    819         if ((parse_state != OP_SHORTCUT)) { 
    820             if (cmd_desc) { 
    821                 /* Print data if previous hint is shortcut */ 
    822                 send_hint_arg(sess, &send_data,  
    823                               cmd_desc, cmd_length,  
    824                               max_length); 
    825                 cmd_desc = 0; 
    826             } 
     822        if (parse_state != OP_SHORTCUT) { 
    827823            pj_strcat2(&send_data, "\r\n  "); 
    828824            cmd_length = hint[i].name.slen; 
    829         } 
    830  
     825        }            
     826         
    831827        switch (parse_state) { 
    832828        case OP_CHOICE: 
     
    844840        case OP_SHORTCUT: 
    845841            /* Format : "Command | sc |  description" */ 
    846             pj_strcat2(&send_data, " | "); 
    847             pj_strcat(&send_data, &hint[i].name); 
    848             cmd_length += (hint[i].name.slen + 3); 
     842            {            
     843                cmd_length += hint[i].name.slen; 
     844                if ((i > 0) && (!pj_stricmp(&hint[i-1].desc, &hint[i].desc))) { 
     845                    pj_strcat2(&send_data, " | "); 
     846                    cmd_length += 3;                 
     847                } else { 
     848                    pj_strcat2(&send_data, "\r\n  "); 
     849                } 
     850                pj_strcat(&send_data, &hint[i].name);    
     851            } 
    849852            break; 
    850853        default: 
     
    856859         
    857860        if ((parse_state == OP_TYPE) || (parse_state == OP_CHOICE) ||  
    858             ((i+1) >= info->hint_cnt))  
     861            ((i+1) >= info->hint_cnt) || 
     862            (pj_strncmp(&hint[i].desc, &hint[i+1].desc, hint[i].desc.slen)))  
    859863        { 
    860864            /* Add description info */ 
     
    862866                          &hint[i].desc, cmd_length,  
    863867                          max_length); 
     868 
     869            cmd_length = 0; 
    864870        }        
    865871    }   
     
    867873    pj_strcat(&send_data, &fe->cfg.prompt_str); 
    868874    if (with_last_cmd) 
    869         pj_strcat2(&send_data, (char *)&sess->rcmd->rbuf[0]); 
     875        pj_strcat2(&send_data, (char *)sess->rcmd->rbuf); 
    870876 
    871877    telnet_sess_send(sess, &send_data);     
     
    883889    pj_strcat2(&info->hint[0].name, " "); 
    884890 
    885     send_data.ptr = &data[0]; 
     891    send_data.ptr = data; 
    886892    send_data.slen = 0; 
    887893 
     
    901907            unsigned char echo[5] = {0x1b, 0x5b, 0x31, 0x40, 0x00}; 
    902908            echo[4] = *data; 
    903             telnet_sess_send2(sess, &echo[0], 5); 
     909            telnet_sess_send2(sess, echo, 5); 
    904910        } else { 
    905911            /* Append character */ 
     
    925931            unsigned char echo[5] = {0x00, 0x1b, 0x5b, 0x31, 0x50}; 
    926932            echo[0] = *data; 
    927             telnet_sess_send2(sess, &echo[0], 5); 
     933            telnet_sess_send2(sess, echo, 5); 
    928934        } else { 
    929935            const static unsigned char echo[3] = {0x08, 0x20, 0x08};         
    930             telnet_sess_send2(sess, &echo[0], 3); 
     936            telnet_sess_send2(sess, echo, 3); 
    931937        } 
    932938        return PJ_TRUE; 
     
    987993                               pool, &info);     
    988994 
    989     len = pj_ansi_strlen((char *)&sess->rcmd->rbuf[0]); 
     995    len = pj_ansi_strlen((char *)sess->rcmd->rbuf); 
    990996 
    991997    switch (status) { 
     
    10101016        if (info.hint_cnt > 0) {         
    10111017            /* Complete command */ 
    1012             pj_str_t cmd = pj_str((char *)&sess->rcmd->rbuf[0]); 
     1018            pj_str_t cmd = pj_str((char *)sess->rcmd->rbuf); 
    10131019            pj_str_t last_token; 
    10141020 
     
    10191025                if (hint_info->slen >= last_token.slen) { 
    10201026                    hint_info->slen -= last_token.slen; 
    1021                     pj_memmove(&hint_info->ptr[0],  
     1027                    pj_memmove(hint_info->ptr,  
    10221028                               &hint_info->ptr[last_token.slen],  
    10231029                               hint_info->slen);                     
     
    10251031                send_comp_arg(sess, &info); 
    10261032 
    1027                 pj_memcpy(&sess->rcmd->rbuf[len], &info.hint[0].name.ptr[0],  
     1033                pj_memcpy(&sess->rcmd->rbuf[len], info.hint[0].name.ptr,  
    10281034                          info.hint[0].name.slen); 
    10291035 
     
    11361142            CLEAR_CHAR = 0x20 
    11371143        }; 
    1138         send_data.ptr = &str[0]; 
     1144        send_data.ptr = str; 
    11391145        send_data.slen = 0; 
    11401146 
Note: See TracChangeset for help on using the changeset viewer.