Changeset 4148


Ignore:
Timestamp:
May 31, 2012 12:21:59 PM (12 years ago)
Author:
bennylp
Message:

Re #1524 (misc fixes): added command line options to specify port and TCP mode for sipecho

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip-apps/src/samples/sipecho.c

    r4000 r4148  
    4242 
    4343/* Settings */ 
    44 #define AF              pj_AF_INET() /* Change to pj_AF_INET6() for IPv6. 
    45                                       * PJ_HAS_IPV6 must be enabled and 
    46                                       * your system must support IPv6.  */ 
    47 #define SIP_PORT        5060         /* Listening SIP port              */ 
    4844#define MAX_CALLS       8 
    4945 
     
    7975static pj_bool_t on_rx_request( pjsip_rx_data *rdata ); 
    8076 
     77/* Globals */ 
     78static int sip_af; 
     79static int sip_port = 5060; 
     80static pj_bool_t sip_tcp; 
    8181 
    8282/* This is a PJSIP module to be registered by application to handle 
     
    239239    pj_status_t status; 
    240240 
    241     pj_log_set_level(5); 
    242  
    243     status = pj_init(); 
    244     CHECK_STATUS(); 
    245  
    246241    pj_log_set_level(3); 
    247242 
     
    256251 
    257252    pj_log_set_level(4); 
    258     pj_sockaddr_init(AF, &addr, NULL, (pj_uint16_t)SIP_PORT); 
    259     if (AF == pj_AF_INET()) { 
    260         status = pjsip_udp_transport_start( app.sip_endpt, &addr.ipv4, NULL, 
    261                                             1, NULL); 
    262     } else if (AF == pj_AF_INET6()) { 
    263         status = pjsip_udp_transport_start6(app.sip_endpt, &addr.ipv6, NULL, 
    264                                             1, NULL); 
     253    pj_sockaddr_init((pj_uint16_t)sip_af, &addr, NULL, (pj_uint16_t)sip_port); 
     254    if (sip_af == pj_AF_INET()) { 
     255        if (sip_tcp) { 
     256            status = pjsip_tcp_transport_start( app.sip_endpt, &addr.ipv4, 1, 
     257                                                NULL); 
     258        } else { 
     259            status = pjsip_udp_transport_start( app.sip_endpt, &addr.ipv4, 
     260                                                NULL, 1, NULL); 
     261        } 
     262    } else if (sip_af == pj_AF_INET6()) { 
     263            status = pjsip_udp_transport_start6(app.sip_endpt, &addr.ipv6, 
     264                                                NULL, 1, NULL); 
    265265    } else { 
    266266        status = PJ_EAFNOTSUP; 
     
    489489 
    490490    /* Generate Contact URI */ 
    491     status = pj_gethostip(AF, &hostaddr); 
     491    status = pj_gethostip(sip_af, &hostaddr); 
    492492    if (status != PJ_SUCCESS) { 
    493493        app_perror(THIS_FILE, "Unable to retrieve local host IP", status); 
     
    495495    } 
    496496    pj_sockaddr_print(&hostaddr, hostip, sizeof(hostip), 2); 
    497     pj_ansi_sprintf(temp, "<sip:sipecho@%s:%d>", hostip, SIP_PORT); 
     497    pj_ansi_sprintf(temp, "<sip:sipecho@%s:%d>", hostip, sip_port); 
    498498    local_uri = pj_str(temp); 
    499499 
     
    542542 
    543543 
     544static void usage() 
     545{ 
     546    printf("\nUsage: sipecho OPTIONS\n"); 
     547    printf("\n"); 
     548    printf("where OPTIONS:\n"); 
     549    printf("  --local-port, -p PORT        Bind to port PORT.\n"); 
     550    printf("  --tcp, -t                    Listen to TCP instead.\n"); 
     551    printf("  --ipv6, -6                   Use IPv6 instead.\n"); 
     552    printf("  --help, -h                   Show this help page.\n"); 
     553} 
     554 
    544555/* main() 
    545556 * 
     
    549560int main(int argc, char *argv[]) 
    550561{ 
     562    struct pj_getopt_option long_options[] = { 
     563        { "local-port", 1, 0, 'p' }, 
     564        { "tcp",        0, 0, 't' }, 
     565        { "ipv6",       0, 0, '6' }, 
     566        { "help",       0, 0, 'h' } 
     567    }; 
     568    int c, option_index; 
     569 
     570    pj_log_set_level(5); 
     571 
     572    pj_init(); 
     573 
     574    sip_af = pj_AF_INET(); 
     575 
     576    pj_optind = 0; 
     577    while ((c = pj_getopt_long(argc, argv, "p:t6h", long_options, 
     578                               &option_index)) != -1) 
     579    { 
     580        switch (c) { 
     581        case 'p': 
     582            sip_port = atoi(pj_optarg); 
     583            break; 
     584        case 't': 
     585            sip_tcp = PJ_TRUE; 
     586            break; 
     587        case 'h': 
     588            usage(); 
     589            return 0; 
     590        case '6': 
     591            sip_af = pj_AF_INET6(); 
     592            break; 
     593        default: 
     594            PJ_LOG(1,(THIS_FILE, 
     595                      "Argument \"%s\" is not valid. Use --help to see help", 
     596                      argv[pj_optind-1])); 
     597            return -1; 
     598        } 
     599    } 
     600 
    551601    if (init_stack()) 
    552602        goto on_error; 
    553603 
    554604    /* If URL is specified, then make call immediately. */ 
    555     if (argc > 1) { 
     605    if (pj_optind != argc) { 
    556606        pj_sockaddr hostaddr; 
    557607        char hostip[PJ_INET6_ADDRSTRLEN+2]; 
    558608        char temp[80]; 
    559609        call_t *call; 
    560         pj_str_t dst_uri = pj_str(argv[1]); 
     610        pj_str_t dst_uri = pj_str(argv[pj_optind]); 
    561611        pj_str_t local_uri; 
    562612        pjsip_dialog *dlg; 
     
    564614        pjsip_tx_data *tdata; 
    565615 
    566         if (pj_gethostip(AF, &hostaddr) != PJ_SUCCESS) { 
     616        if (pj_gethostip(sip_af, &hostaddr) != PJ_SUCCESS) { 
    567617            PJ_LOG(1,(THIS_FILE, "Unable to retrieve local host IP")); 
    568618            goto on_error; 
     
    571621 
    572622        pj_ansi_sprintf(temp, "<sip:sipecho@%s:%d>", 
    573                         hostip, SIP_PORT); 
     623                        hostip, sip_port); 
    574624        local_uri = pj_str(temp); 
    575625 
Note: See TracChangeset for help on using the changeset viewer.