Changeset 2998


Ignore:
Timestamp:
Nov 9, 2009 8:51:34 AM (10 years ago)
Author:
bennylp
Message:

Ticket #950 and #957:

  • added QoS options on PJLIB/PJLIB SSL/TLS socket/transport
  • added demo in Symbian ua.cpp
Location:
pjproject/trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib/include/pj/ssl_sock.h

    r2970 r2998  
    2727#include <pj/ioqueue.h> 
    2828#include <pj/sock.h> 
     29#include <pj/sock_qos.h> 
    2930 
    3031 
     
    532533     */ 
    533534    pj_str_t server_name; 
    534      
     535 
     536    /** 
     537     * QoS traffic type to be set on this transport. When application wants 
     538     * to apply QoS tagging to the transport, it's preferable to set this 
     539     * field rather than \a qos_param fields since this is more portable. 
     540     * 
     541     * Default value is PJ_QOS_TYPE_BEST_EFFORT. 
     542     */ 
     543    pj_qos_type qos_type; 
     544 
     545    /** 
     546     * Set the low level QoS parameters to the transport. This is a lower 
     547     * level operation than setting the \a qos_type field and may not be 
     548     * supported on all platforms. 
     549     * 
     550     * By default all settings in this structure are disabled. 
     551     */ 
     552    pj_qos_params qos_params; 
     553 
     554    /** 
     555     * Specify if the transport should ignore any errors when setting the QoS 
     556     * traffic type/parameters. 
     557     * 
     558     * Default: PJ_TRUE 
     559     */ 
     560    pj_bool_t qos_ignore_error; 
     561 
     562 
    535563} pj_ssl_sock_param; 
    536564 
  • pjproject/trunk/pjlib/src/pj/sock_qos_symbian.cpp

    r2967 r2998  
    2323                                           pj_qos_params *param) 
    2424{ 
     25    PJ_ASSERT_RETURN(sock!=0 && sock!=PJ_INVALID_SOCKET, PJ_EINVAL); 
     26     
    2527    CPjSocket *pjsock = (CPjSocket*)sock; 
    2628    RSocket & rsock = pjsock->Socket(); 
     
    6163                                           pj_qos_params *p_param) 
    6264{ 
     65    PJ_ASSERT_RETURN(sock!=0 && sock!=PJ_INVALID_SOCKET, PJ_EINVAL); 
     66     
    6367    CPjSocket *pjsock = (CPjSocket*)sock; 
    6468    RSocket & rsock = pjsock->Socket(); 
  • pjproject/trunk/pjlib/src/pj/ssl_sock_common.c

    r2950 r2998  
    121121    param->read_buffer_size = 1500; 
    122122#endif 
     123    param->qos_type = PJ_QOS_TYPE_BEST_EFFORT; 
     124    param->qos_ignore_error = PJ_TRUE; 
    123125 
    124126    /* Security config */ 
  • pjproject/trunk/pjlib/src/pj/ssl_sock_ossl.c

    r2994 r2998  
    12071207            goto on_return; 
    12081208    } 
     1209 
     1210    /* Apply QoS, if specified */ 
     1211    status = pj_sock_apply_qos2(ssock->sock, ssock->param.qos_type, 
     1212                                &ssock->param.qos_params, 1,  
     1213                                ssock->pool->obj_name, NULL); 
     1214    if (status != PJ_SUCCESS && !ssock->param.qos_ignore_error) 
     1215        goto on_return; 
    12091216 
    12101217    /* Update local address */ 
     
    19541961        goto on_error; 
    19551962 
     1963    /* Apply QoS, if specified */ 
     1964    status = pj_sock_apply_qos2(ssock->sock, ssock->param.qos_type, 
     1965                                &ssock->param.qos_params, 2,  
     1966                                ssock->pool->obj_name, NULL); 
     1967    if (status != PJ_SUCCESS && !ssock->param.qos_ignore_error) 
     1968        goto on_error; 
     1969 
    19561970    /* Bind socket */ 
    19571971    status = pj_sock_bind(ssock->sock, localaddr, addr_len); 
     
    20292043        goto on_error; 
    20302044 
     2045    /* Apply QoS, if specified */ 
     2046    status = pj_sock_apply_qos2(ssock->sock, ssock->param.qos_type, 
     2047                                &ssock->param.qos_params, 2,  
     2048                                ssock->pool->obj_name, NULL); 
     2049    if (status != PJ_SUCCESS && !ssock->param.qos_ignore_error) 
     2050        goto on_error; 
     2051 
    20312052    /* Bind socket */ 
    20322053    status = pj_sock_bind(ssock->sock, localaddr, addr_len); 
  • pjproject/trunk/pjlib/src/pj/ssl_sock_symbian.cpp

    r2990 r2998  
    9898    }; 
    9999     
    100     static CPjSSLSocket *NewL(const TDesC8 &ssl_proto) { 
    101         CPjSSLSocket *self = new (ELeave) CPjSSLSocket(); 
     100    static CPjSSLSocket *NewL(const TDesC8 &ssl_proto, 
     101                              pj_qos_type qos_type, 
     102                              const pj_qos_params &qos_params)  
     103    { 
     104        CPjSSLSocket *self = new (ELeave) CPjSSLSocket(qos_type, qos_params); 
    102105        CleanupStack::PushL(self); 
    103106        self->ConstructL(ssl_proto); 
     
    131134    CSecureSocket       *securesock_; 
    132135    bool                 is_connected_; 
     136     
     137    pj_qos_type          qos_type_; 
     138    pj_qos_params        qos_params_; 
     139                               
    133140    CPjSSLSocketReader  *reader_; 
    134141    TBuf<32>             ssl_proto_; 
     
    144151    void RunL(); 
    145152 
    146     CPjSSLSocket() : 
     153    CPjSSLSocket(pj_qos_type qos_type, const pj_qos_params &qos_params) : 
    147154        CActive(0), state_(SSL_STATE_NULL), sock_(PJ_INVALID_SOCKET),  
    148         securesock_(NULL),  
    149         is_connected_(false), reader_(NULL), 
    150         cb_(NULL), key_(NULL) 
     155        securesock_(NULL), is_connected_(false), 
     156        qos_type_(qos_type), qos_params_(qos_params), 
     157        reader_(NULL),  cb_(NULL), key_(NULL) 
    151158    {} 
    152159     
     
    165172        } 
    166173        if (sock_ != PJ_INVALID_SOCKET) { 
    167             delete (CPjSocket*)sock_; 
     174            pj_sock_close(sock_); 
    168175            sock_ = PJ_INVALID_SOCKET; 
    169176        }            
     
    184191        return status; 
    185192 
     193    // Apply QoS 
     194    status = pj_sock_apply_qos2(sock_, qos_type_, &qos_params_,  
     195                                2,  THIS_FILE, NULL); 
     196     
    186197    RSocket &rSock = ((CPjSocket*)sock_)->Socket(); 
    187198 
     
    412423    pj_sockaddr          local_addr; 
    413424    pj_sockaddr          rem_addr; 
     425 
     426    /* QoS settings */ 
     427    pj_qos_type          qos_type; 
     428    pj_qos_params        qos_params; 
     429    pj_bool_t            qos_ignore_error; 
     430 
    414431 
    415432    pj_ssl_sock_proto    proto; 
     
    502519    } 
    503520    pj_strdup_with_null(pool, &ssock->servername, &param->server_name); 
     521 
     522    ssock->qos_type = param->qos_type; 
     523    ssock->qos_ignore_error = param->qos_ignore_error; 
     524    pj_memcpy(&ssock->qos_params, &param->qos_params, 
     525              sizeof(param->qos_params)); 
    504526 
    505527    /* Finally */ 
     
    10621084 
    10631085    /* Init SSL engine */ 
    1064     TRAPD(err, sock = CPjSSLSocket::NewL(proto)); 
     1086    TRAPD(err, sock = CPjSSLSocket::NewL(proto, ssock->qos_type,  
     1087                                         ssock->qos_params)); 
    10651088    if (err != KErrNone) 
    10661089        return PJ_ENOMEM; 
  • pjproject/trunk/pjsip-apps/src/pjsua/pjsua_app.c

    r2968 r2998  
    46014601        pjsua_acc_id acc_id; 
    46024602 
     4603        /* Copy the QoS settings */ 
     4604        tcp_cfg.tls_setting.qos_type = tcp_cfg.qos_type; 
     4605        pj_memcpy(&tcp_cfg.tls_setting.qos_params, &tcp_cfg.qos_params,  
     4606                  sizeof(tcp_cfg.qos_params)); 
     4607 
    46034608        /* Set TLS port as TCP port+1 */ 
    46044609        tcp_cfg.port++; 
  • pjproject/trunk/pjsip-apps/src/symbian_ua/ua.cpp

    r2913 r2998  
    9393 
    9494// 
     95// Set QoS on transports? Yes! 
     96// As an example, we set SIP transports DSCP value to CS3 (DSCP 
     97// value 24 or 0x18), for no reason, and tag RTP/RTCP packets  
     98// with VOICE type. 
     99// 
     100#define SIP_QOS_DSCP    0x18 
     101#define RTP_QOS_TYPE    PJ_QOS_TYPE_VOICE 
     102 
     103 
     104// 
    95105// Globals 
    96106// 
     
    385395    pjsua_transport_config_default(&tcfg); 
    386396    tcfg.port = SIP_PORT; 
     397    if (SIP_QOS_DSCP) { 
     398        tcfg.qos_params.flags |= PJ_QOS_PARAM_HAS_DSCP; 
     399        tcfg.qos_params.dscp_val = SIP_QOS_DSCP; 
     400    } 
    387401    status = pjsua_transport_create(PJSIP_TRANSPORT_UDP, &tcfg, &tid); 
    388402    if (status != PJ_SUCCESS) { 
     
    397411    pjsua_transport_config_default(&tcfg); 
    398412    tcfg.port = SIP_PORT; 
     413    if (SIP_QOS_DSCP) { 
     414        tcfg.qos_params.flags |= PJ_QOS_PARAM_HAS_DSCP; 
     415        tcfg.qos_params.dscp_val = SIP_QOS_DSCP; 
     416    } 
    399417    status = pjsua_transport_create(PJSIP_TRANSPORT_TCP, &tcfg, &tid); 
    400418    if (status != PJ_SUCCESS) { 
     
    409427    pjsua_transport_config_default(&tcfg); 
    410428    tcfg.port = SIP_PORT + 1; 
     429    if (SIP_QOS_DSCP) { 
     430        tcfg.qos_params.flags |= PJ_QOS_PARAM_HAS_DSCP; 
     431        tcfg.qos_params.dscp_val = SIP_QOS_DSCP; 
     432        tcfg.tls_setting.qos_params = tcfg.qos_params; 
     433    } 
    411434    status = pjsua_transport_create(PJSIP_TRANSPORT_TLS, &tcfg, &tid); 
    412435    if (status != PJ_SUCCESS) { 
     
    420443    pjsua_acc_add_local(tid, PJ_TRUE, &g_acc_id); 
    421444 
    422  
     445    /* Create media transports */ 
     446    pjsua_transport_config mtcfg; 
     447    pjsua_transport_config_default(&mtcfg); 
     448    mtcfg.port = 4000; 
     449    mtcfg.qos_type = RTP_QOS_TYPE; 
     450    status = pjsua_media_transports_create(&mtcfg); 
     451    if (status != PJ_SUCCESS) { 
     452        pjsua_perror(THIS_FILE, "Error creating media transports", status); 
     453        pjsua_destroy(); 
     454        return status; 
     455    } 
     456     
    423457    /* Initialization is done, now start pjsua */ 
    424458    status = pjsua_start(); 
  • pjproject/trunk/pjsip/include/pjsip/sip_transport_tls.h

    r2394 r2998  
    2828#include <pjsip/sip_transport.h> 
    2929#include <pj/string.h> 
     30#include <pj/sock_qos.h> 
    3031 
    3132 
     
    161162    pj_time_val timeout; 
    162163 
     164    /** 
     165     * QoS traffic type to be set on this transport. When application wants 
     166     * to apply QoS tagging to the transport, it's preferable to set this 
     167     * field rather than \a qos_param fields since this is more portable. 
     168     * 
     169     * Default value is PJ_QOS_TYPE_BEST_EFFORT. 
     170     */ 
     171    pj_qos_type qos_type; 
     172 
     173    /** 
     174     * Set the low level QoS parameters to the transport. This is a lower 
     175     * level operation than setting the \a qos_type field and may not be 
     176     * supported on all platforms. 
     177     * 
     178     * By default all settings in this structure are disabled. 
     179     */ 
     180    pj_qos_params qos_params; 
     181 
     182    /** 
     183     * Specify if the transport should ignore any errors when setting the QoS 
     184     * traffic type/parameters. 
     185     * 
     186     * Default: PJ_TRUE 
     187     */ 
     188    pj_bool_t qos_ignore_error; 
     189 
    163190} pjsip_tls_setting; 
    164191 
     
    172199{ 
    173200    pj_memset(tls_opt, 0, sizeof(*tls_opt)); 
     201    tls_opt->qos_type = PJ_QOS_TYPE_BEST_EFFORT; 
     202    tls_opt->qos_ignore_error = PJ_TRUE; 
    174203} 
    175204 
  • pjproject/trunk/pjsip/src/pjsip/sip_transport_tls.c

    r2970 r2998  
    251251    if (ssock_param.read_buffer_size < PJSIP_MAX_PKT_LEN) 
    252252        ssock_param.read_buffer_size = PJSIP_MAX_PKT_LEN; 
     253    ssock_param.qos_type = listener->tls_setting.qos_type; 
     254    ssock_param.qos_ignore_error = listener->tls_setting.qos_ignore_error; 
     255    pj_memcpy(&ssock_param.qos_params, &listener->tls_setting.qos_params, 
     256              sizeof(ssock_param.qos_params)); 
    253257 
    254258    has_listener = PJ_FALSE; 
     
    798802    if (ssock_param.read_buffer_size < PJSIP_MAX_PKT_LEN) 
    799803        ssock_param.read_buffer_size = PJSIP_MAX_PKT_LEN; 
     804    ssock_param.qos_type = listener->tls_setting.qos_type; 
     805    ssock_param.qos_ignore_error = listener->tls_setting.qos_ignore_error; 
     806    pj_memcpy(&ssock_param.qos_params, &listener->tls_setting.qos_params, 
     807              sizeof(ssock_param.qos_params)); 
    800808 
    801809    switch(listener->tls_setting.method) { 
Note: See TracChangeset for help on using the changeset viewer.