Changeset 6035


Ignore:
Timestamp:
Jul 1, 2019 7:12:43 AM (3 years ago)
Author:
ming
Message:

Fixed #2209: Insufficient variable storage to contain Expires header field/ parameter

Location:
pjproject/trunk
Files:
26 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip-apps/src/pjsua/pjsua_app.c

    r6028 r6035  
    10641064        if (h->type == PJSIP_H_CONTACT) { 
    10651065            const pjsip_contact_hdr *c = (const pjsip_contact_hdr*)h; 
    1066             int e = c->expires; 
    1067  
    1068             if (e < 0) { 
     1066            unsigned e = c->expires; 
     1067 
     1068            if (e != PJSIP_EXPIRES_NOT_SPECIFIED) { 
    10691069                if (exp) 
    10701070                    e = exp->ivalue; 
  • pjproject/trunk/pjsip-apps/src/samples/footprint.c

    r5241 r6035  
    404404    pjsip_evsub_get_state(NULL); 
    405405    pjsip_evsub_get_state_name(NULL); 
    406     pjsip_evsub_initiate(NULL, NULL, -1, NULL); 
     406    pjsip_evsub_initiate(NULL, NULL, PJSIP_EXPIRES_NOT_SPECIFIED, NULL); 
    407407    pjsip_evsub_accept(NULL, NULL, 200, NULL); 
    408408    pjsip_evsub_notify(NULL, PJSIP_EVSUB_STATE_ACTIVE, NULL, NULL, NULL); 
  • pjproject/trunk/pjsip-apps/src/samples/sipecho.c

    r5241 r6035  
    435435        pjsip_hdr hdr_list, *h; 
    436436        pjsip_msg *msg; 
    437         int expires = -1; 
     437        unsigned expires = PJSIP_EXPIRES_NOT_SPECIFIED; 
    438438 
    439439        pj_list_init(&hdr_list); 
     
    445445            PJ_LOG(3,(THIS_FILE, " Expires=%d", expires)); 
    446446        } 
    447         if (expires != 0) { 
     447        if (expires != 0 && expires != PJSIP_EXPIRES_NOT_SPECIFIED) { 
    448448            h = (pjsip_hdr*)pjsip_msg_find_hdr(msg, PJSIP_H_CONTACT, NULL); 
    449449            if (h) 
  • pjproject/trunk/pjsip/include/pjsip-simple/evsub.h

    r5558 r6035  
    364364 * @param expires       Subscription expiration. If the value is set to zero, 
    365365 *                      this will request unsubscription. If the value is 
    366  *                      negative, default expiration as defined by the package 
    367  *                      will be used. 
     366 *                      PJSIP_EXPIRES_NOT_SPECIFIED, default expiration 
     367 *                      as defined by the package will be used. 
    368368 * @param p_tdata       Pointer to receive the request. 
    369369 * 
     
    372372PJ_DECL(pj_status_t) pjsip_evsub_initiate( pjsip_evsub *sub, 
    373373                                           const pjsip_method *method, 
    374                                            pj_int32_t expires, 
     374                                           pj_uint32_t expires, 
    375375                                           pjsip_tx_data **p_tdata); 
    376376 
  • pjproject/trunk/pjsip/include/pjsip-simple/evsub_msg.h

    r3553 r6035  
    8989    pj_str_t        sub_state;          /**< Subscription state. */ 
    9090    pj_str_t        reason_param;       /**< Optional termination reason. */ 
    91     int             expires_param;      /**< Expires param, or -1. */ 
     91    unsigned        expires_param;      /**< Expires param, or 
     92                                             PJSIP_EXPIRES_NOT_SPECIFIED. */ 
    9293    int             retry_after;        /**< Retry after param, or -1. */ 
    9394    pjsip_param     other_param;        /**< Other parameters. */ 
  • pjproject/trunk/pjsip/include/pjsip-simple/mwi.h

    r3553 r6035  
    122122 * @param sub           Client subscription instance. 
    123123 * @param expires       Subscription expiration. If the value is set to zero, 
    124  *                      this will request unsubscription. 
     124 *                      this will request unsubscription. If the value is 
     125 *                      PJSIP_EXPIRES_NOT_SPECIFIED, default expiration 
     126 *                      as defined by the package will be used. 
    125127 * @param p_tdata       Pointer to receive the request. 
    126128 * 
     
    128130 */ 
    129131PJ_DECL(pj_status_t) pjsip_mwi_initiate( pjsip_evsub *sub, 
    130                                          pj_int32_t expires, 
     132                                         pj_uint32_t expires, 
    131133                                         pjsip_tx_data **p_tdata); 
    132134 
  • pjproject/trunk/pjsip/include/pjsip-simple/presence.h

    r3553 r6035  
    172172 * @param sub           Client subscription instance. 
    173173 * @param expires       Subscription expiration. If the value is set to zero, 
    174  *                      this will request unsubscription. 
     174 *                      this will request unsubscription. If the value is 
     175 *                      PJSIP_EXPIRES_NOT_SPECIFIED, default expiration 
     176 *                      as defined by the package will be used. 
    175177 * @param p_tdata       Pointer to receive the request. 
    176178 * 
     
    178180 */ 
    179181PJ_DECL(pj_status_t) pjsip_pres_initiate( pjsip_evsub *sub, 
    180                                           pj_int32_t expires, 
     182                                          pj_uint32_t expires, 
    181183                                          pjsip_tx_data **p_tdata); 
    182184 
  • pjproject/trunk/pjsip/include/pjsip-simple/publish.h

    r4173 r6035  
    9898    pj_str_t             reason;    /**< SIP reason phrase received.        */ 
    9999    pjsip_rx_data       *rdata;     /**< The complete received response.    */ 
    100     int                  expiration;/**< Next expiration interval. If the 
    101                                          value is -1, it means the session 
    102                                          will not renew itself.             */ 
     100    unsigned             expiration;/**< Next expiration interval. If the 
     101                                         value is 
     102                                         PJSIP_PUBC_EXPIRATION_NOT_SPECIFIED, 
     103                                         it means the session will not renew 
     104                                         itself.                            */ 
    103105}; 
    104106 
  • pjproject/trunk/pjsip/include/pjsip-ua/sip_regc.h

    r5356 r6035  
    5252 
    5353/** Expiration not specified. */ 
    54 #define PJSIP_REGC_EXPIRATION_NOT_SPECIFIED     ((pj_uint32_t)0xFFFFFFFFUL) 
     54#define PJSIP_REGC_EXPIRATION_NOT_SPECIFIED     PJSIP_EXPIRES_NOT_SPECIFIED 
    5555 
    5656/** Buffer to hold all contacts. */ 
     
    7575    pj_str_t             reason;    /**< SIP reason phrase received.        */ 
    7676    pjsip_rx_data       *rdata;     /**< The complete received response.    */ 
    77     int                  expiration;/**< Next expiration interval.          */ 
     77    unsigned             expiration;/**< Next expiration interval, 
     78                                         PJSIP_REGC_EXPIRATION_NOT_SPECIFIED 
     79                                         if not specified.                  */ 
    7880    int                  contact_cnt;/**<Number of contacts in response.    */ 
    7981    pjsip_contact_hdr   *contact[PJSIP_REGC_MAX_CONTACT]; /**< Contacts.    */ 
     
    110112    pj_bool_t   is_busy;    /**< Have pending transaction?                  */ 
    111113    pj_bool_t   auto_reg;   /**< Will register automatically?               */ 
    112     int         interval;   /**< Registration interval (seconds).           */ 
    113     int         next_reg;   /**< Time until next registration (seconds).    */ 
     114    unsigned    interval;   /**< Registration interval (seconds).           */ 
     115    unsigned    next_reg;   /**< Time until next registration (seconds).    */ 
    114116    pjsip_transport *transport; /**< Last transport used.                   */ 
    115117}; 
  • pjproject/trunk/pjsip/include/pjsip/sip_msg.h

    r5807 r6035  
    10711071    PJSIP_DECL_HDR_MEMBER(struct pjsip_generic_int_hdr); 
    10721072    /** ivalue */ 
    1073     pj_int32_t ivalue; 
     1073    pj_uint32_t ivalue; 
    10741074} pjsip_generic_int_hdr; 
    10751075 
     
    10881088PJ_DECL(pjsip_generic_int_hdr*) pjsip_generic_int_hdr_create( pj_pool_t *pool, 
    10891089                                                      const pj_str_t *hname, 
    1090                                                       int hvalue ); 
     1090                                                      unsigned hvalue ); 
    10911091 
    10921092 
     
    11111111                                                            void *mem, 
    11121112                                                            const pj_str_t *hname, 
    1113                                                             int value ); 
     1113                                                            unsigned value ); 
    11141114 
    11151115/* **************************************************************************/ 
     
    13501350 
    13511351/* **************************************************************************/ 
     1352 
     1353/** Expires not specified. */ 
     1354#define PJSIP_EXPIRES_NOT_SPECIFIED     ((pj_uint32_t)0xFFFFFFFFUL) 
     1355 
    13521356/** 
    13531357 * Contact header. 
     
    13591363{ 
    13601364    PJSIP_DECL_HDR_MEMBER(struct pjsip_contact_hdr); 
    1361     int             star;           /**< The contact contains only a '*' character */ 
    1362     pjsip_uri      *uri;            /**< URI in the contact. */ 
    1363     int             q1000;          /**< The "q" value times 1000 (to avoid float) */ 
    1364     pj_int32_t      expires;        /**< Expires parameter, otherwise -1 if not present. */ 
    1365     pjsip_param     other_param;    /**< Other parameters, concatenated in a single string. */ 
     1365    int             star;           /**< The contact contains only a '*' 
     1366                                         character                          */ 
     1367    pjsip_uri      *uri;            /**< URI in the contact.                */ 
     1368    int             q1000;          /**< The "q" value times 1000 
     1369                                         (to avoid float)                   */ 
     1370    pj_uint32_t     expires;        /**< Expires parameter, otherwise 
     1371                                         PJSIP_EXPIRES_NOT_SPECIFIED 
     1372                                         if not present.                    */ 
     1373    pjsip_param     other_param;    /**< Other parameters, concatenated in 
     1374                                         a single string.                   */ 
    13661375} pjsip_contact_hdr; 
    13671376 
     
    14421451 */ 
    14431452PJ_DECL(pjsip_expires_hdr*) pjsip_expires_hdr_create( pj_pool_t *pool, 
    1444                                                       int value); 
     1453                                                      unsigned value); 
    14451454 
    14461455/** 
     
    14611470PJ_DECL(pjsip_expires_hdr*) pjsip_expires_hdr_init( pj_pool_t *pool, 
    14621471                                                    void *mem, 
    1463                                                     int value ); 
     1472                                                    unsigned value ); 
    14641473 
    14651474 
     
    15651574 */ 
    15661575PJ_DECL(pjsip_max_fwd_hdr*)  
    1567 pjsip_max_fwd_hdr_create(pj_pool_t *pool, int value); 
     1576pjsip_max_fwd_hdr_create(pj_pool_t *pool, unsigned value); 
    15681577 
    15691578 
     
    15841593 */ 
    15851594PJ_DECL(pjsip_max_fwd_hdr*)  
    1586 pjsip_max_fwd_hdr_init( pj_pool_t *pool, void *mem, int value ); 
     1595pjsip_max_fwd_hdr_init( pj_pool_t *pool, void *mem, unsigned value ); 
    15871596 
    15881597 
     
    16021611 */ 
    16031612PJ_DECL(pjsip_min_expires_hdr*) pjsip_min_expires_hdr_create(pj_pool_t *pool, 
    1604                                                              int value); 
     1613                                                             unsigned value); 
    16051614 
    16061615 
     
    16221631PJ_DECL(pjsip_min_expires_hdr*) pjsip_min_expires_hdr_init( pj_pool_t *pool, 
    16231632                                                            void *mem, 
    1624                                                             int value ); 
     1633                                                            unsigned value ); 
    16251634 
    16261635 
  • pjproject/trunk/pjsip/include/pjsip/sip_parser.h

    r5697 r6035  
    5353#define PJSIP_MAX_Q1000             PJ_MAXINT32 / 1000 
    5454#define PJSIP_MIN_EXPIRES           0 
    55 #define PJSIP_MAX_EXPIRES           PJ_MAXINT32 
     55#define PJSIP_MAX_EXPIRES           ((pj_uint32_t)0xFFFFFFFFUL) 
    5656#define PJSIP_MIN_CSEQ              0 
    5757#define PJSIP_MAX_CSEQ              PJ_MAXINT32 
  • pjproject/trunk/pjsip/include/pjsua-lib/pjsua.h

    r6004 r6035  
    41774177 
    41784178    /** 
    4179      * An up to date expiration interval for account registration session. 
    4180      */ 
    4181     int                 expires; 
     4179     * An up to date expiration interval for account registration session, 
     4180     * PJSIP_EXPIRES_NOT_SPECIFIED if the account doesn't have reg session. 
     4181     */ 
     4182    unsigned            expires; 
    41824183 
    41834184    /** 
  • pjproject/trunk/pjsip/include/pjsua-lib/pjsua_internal.h

    r6015 r6035  
    219219    int              acc_id;        /**< Account ID.                        */ 
    220220    pjsip_dialog    *dlg;           /**< Dialog.                            */ 
    221     int              expires;       /**< "expires" value in the request.    */ 
     221    unsigned         expires;       /**< "expires" value in the request, 
     222                                         PJSIP_EXPIRES_NOT_SPECIFIED 
     223                                         if not present.                    */ 
    222224}; 
    223225 
  • pjproject/trunk/pjsip/include/pjsua2/account.hpp

    r6026 r6035  
    12821282     * An up to date expiration interval for account registration session. 
    12831283     */ 
    1284     int                 regExpiresSec; 
     1284    unsigned            regExpiresSec; 
    12851285 
    12861286    /** 
     
    13741374     * Next expiration interval. 
    13751375     */ 
    1376     int                 expiration; 
     1376    unsigned            expiration; 
    13771377}; 
    13781378 
  • pjproject/trunk/pjsip/src/pjsip-simple/evsub.c

    r5917 r6035  
    500500 */ 
    501501static void set_timer( pjsip_evsub *sub, int timer_id, 
    502                        pj_int32_t seconds) 
     502                       pj_uint32_t seconds) 
    503503{ 
    504504    if (sub->timer.id != TIMER_TYPE_NONE) { 
     
    510510    } 
    511511 
    512     if (timer_id != TIMER_TYPE_NONE && seconds > 0) { 
     512    if (timer_id != TIMER_TYPE_NONE && seconds != PJSIP_EXPIRES_NOT_SPECIFIED) 
     513    { 
    513514        pj_time_val timeout; 
    514515 
     
    10691070PJ_DEF(pj_status_t) pjsip_evsub_initiate( pjsip_evsub *sub, 
    10701071                                          const pjsip_method *method, 
    1071                                           pj_int32_t expires, 
     1072                                          pj_uint32_t expires, 
    10721073                                          pjsip_tx_data **p_tdata) 
    10731074{ 
     
    10971098 
    10981099    /* Update and add expires header: */ 
    1099     if (expires >= 0) 
     1100    if (expires != PJSIP_EXPIRES_NOT_SPECIFIED) 
    11001101        sub->expires->ivalue = expires; 
    11011102    pjsip_msg_add_hdr( tdata->msg, (pjsip_hdr*) 
     
    19971998         */ 
    19981999        if (sub->expires->ivalue != 0 && 
    1999             sub_state->expires_param >= 0 && 
     2000            sub_state->expires_param != PJSIP_EXPIRES_NOT_SPECIFIED && 
    20002001            (pj_stricmp(&sub_state->sub_state, &STR_ACTIVE)==0 || 
    20012002             pj_stricmp(&sub_state->sub_state, &STR_PENDING)==0)) 
    20022003        { 
    2003             int next_refresh = sub_state->expires_param; 
     2004            unsigned next_refresh = sub_state->expires_param; 
    20042005            unsigned timeout; 
    20052006 
     
    21002101            evpkg = find_pkg(&event_hdr->event_type); 
    21012102            if (evpkg) { 
    2102                 if (expires->ivalue < (pj_int32_t)evpkg->pkg_expires) 
     2103                if (expires->ivalue < evpkg->pkg_expires) 
    21032104                    sub->expires->ivalue = expires->ivalue; 
    21042105                else 
  • pjproject/trunk/pjsip/src/pjsip-simple/evsub_msg.c

    r5558 r6035  
    150150    hdr->name = hdr->sname = sub_state; 
    151151    hdr->vptr = &sub_state_hdr_vptr; 
    152     hdr->expires_param = -1; 
     152    hdr->expires_param = PJSIP_EXPIRES_NOT_SPECIFIED; 
    153153    hdr->retry_after = -1; 
    154154    pj_list_init(hdr); 
     
    172172    copy_advance_pair_escape(p, ";reason=", 8, hdr->reason_param, 
    173173                             pc->pjsip_TOKEN_SPEC); 
    174     if (hdr->expires_param >= 0) { 
     174    if (hdr->expires_param != PJSIP_EXPIRES_NOT_SPECIFIED) { 
    175175        pj_memcpy(p, ";expires=", 9); 
    176176        p += 9; 
     
    275275        } else if (pj_stricmp(&pname, &expires) == 0) { 
    276276            hdr->expires_param = pj_strtoul(&pvalue); 
     277            if (hdr->expires_param == PJSIP_EXPIRES_NOT_SPECIFIED) 
     278                hdr->expires_param--; 
    277279 
    278280        } else if (pj_stricmp(&pname, &retry_after) == 0) { 
  • pjproject/trunk/pjsip/src/pjsip-simple/mwi.c

    r4172 r6035  
    304304 */ 
    305305PJ_DEF(pj_status_t) pjsip_mwi_initiate( pjsip_evsub *sub, 
    306                                         pj_int32_t expires, 
     306                                        pj_uint32_t expires, 
    307307                                        pjsip_tx_data **p_tdata) 
    308308{ 
     
    567567        pjsip_tx_data *tdata; 
    568568 
    569         status = pjsip_mwi_initiate(sub, -1, &tdata); 
     569        status = pjsip_mwi_initiate(sub, PJSIP_EXPIRES_NOT_SPECIFIED, &tdata); 
    570570        if (status == PJ_SUCCESS) 
    571571            pjsip_mwi_send_request(sub, tdata); 
  • pjproject/trunk/pjsip/src/pjsip-simple/presence.c

    r4713 r6035  
    348348 */ 
    349349PJ_DEF(pj_status_t) pjsip_pres_initiate( pjsip_evsub *sub, 
    350                                          pj_int32_t expires, 
     350                                         pj_uint32_t expires, 
    351351                                         pjsip_tx_data **p_tdata) 
    352352{ 
     
    910910        pjsip_tx_data *tdata; 
    911911 
    912         status = pjsip_pres_initiate(sub, -1, &tdata); 
     912        status = pjsip_pres_initiate(sub, PJSIP_EXPIRES_NOT_SPECIFIED, 
     913                                     &tdata); 
    913914        if (status == PJ_SUCCESS) 
    914915            pjsip_pres_send_request(sub, tdata); 
  • pjproject/trunk/pjsip/src/pjsip-simple/publishc.c

    r5984 r6035  
    533533static void call_callback(pjsip_publishc *pubc, pj_status_t status,  
    534534                          int st_code, const pj_str_t *reason, 
    535                           pjsip_rx_data *rdata, pj_int32_t expiration) 
     535                          pjsip_rx_data *rdata, pj_uint32_t expiration) 
    536536{ 
    537537    struct pjsip_publishc_cbparam cbparam; 
     
    563563        char errmsg[PJ_ERR_MSG_SIZE]; 
    564564        pj_str_t reason = pj_strerror(status, errmsg, sizeof(errmsg)); 
    565         call_callback(pubc, status, 400, &reason, NULL, -1); 
     565        call_callback(pubc, status, 400, &reason, NULL, 
     566                      PJSIP_PUBC_EXPIRATION_NOT_SPECIFIED); 
    566567        return; 
    567568    } 
     
    605606            call_callback(pubc, status, tsx->status_code,  
    606607                          &rdata->msg_info.msg->line.status.reason, 
    607                           rdata, -1); 
     608                          rdata, PJSIP_PUBC_EXPIRATION_NOT_SPECIFIED); 
    608609        } else { 
    609610            status = pjsip_publishc_send(pubc, tdata); 
     
    612613    } else { 
    613614        pjsip_rx_data *rdata; 
    614         pj_int32_t expiration = 0xFFFF; 
     615        pj_uint32_t expiration = PJSIP_PUBC_EXPIRATION_NOT_SPECIFIED; 
    615616 
    616617        if (tsx->status_code/100 == 2) { 
     
    639640                expiration = expires->ivalue; 
    640641             
    641             if (pubc->auto_refresh && expiration!=0 && expiration!=0xFFFF) { 
     642            if (pubc->auto_refresh && expiration!=0 && 
     643                expiration!=PJSIP_PUBC_EXPIRATION_NOT_SPECIFIED) 
     644            { 
    642645                pj_time_val delay = { 0, 0}; 
    643646 
     
    672675 
    673676        /* Call callback. */ 
    674         if (expiration == 0xFFFF) expiration = -1; 
     677        // if (expiration == 0xFFFF) expiration = -1; 
    675678 
    676679        /* Temporarily increment pending_tsx to prevent callback from 
  • pjproject/trunk/pjsip/src/pjsip-ua/sip_reg.c

    r5984 r6035  
    4646#define REGC_TSX_TIMEOUT        33000 
    4747 
    48 enum { NOEXP = 0x1FFFFFFF }; 
     48enum { NOEXP = PJSIP_REGC_EXPIRATION_NOT_SPECIFIED }; 
    4949 
    5050static const pj_str_t XUID_PARAM_NAME = { "x-uid", 5 }; 
     
    740740                          pj_status_t status, int st_code,  
    741741                          const pj_str_t *reason, 
    742                           pjsip_rx_data *rdata, pj_int32_t expiration, 
     742                          pjsip_rx_data *rdata, pj_uint32_t expiration, 
    743743                          int contact_cnt, pjsip_contact_hdr *contact[], 
    744744                          pj_bool_t is_unreg) 
     
    751751    cbparam->rdata = rdata; 
    752752    cbparam->contact_cnt = contact_cnt; 
    753     cbparam->expiration = (expiration >= 0? expiration: 
    754                           regc->expires_requested); 
     753    cbparam->expiration = (expiration != PJSIP_REGC_EXPIRATION_NOT_SPECIFIED? 
     754                           expiration: regc->expires_requested); 
    755755    cbparam->is_unreg = is_unreg; 
    756756    if (contact_cnt) { 
     
    762762static void call_callback(pjsip_regc *regc, pj_status_t status, int st_code,  
    763763                          const pj_str_t *reason, 
    764                           pjsip_rx_data *rdata, pj_int32_t expiration, 
     764                          pjsip_rx_data *rdata, pj_uint32_t expiration, 
    765765                          int contact_cnt, pjsip_contact_hdr *contact[], 
    766766                          pj_bool_t is_unreg) 
     
    799799        char errmsg[PJ_ERR_MSG_SIZE]; 
    800800        pj_str_t reason = pj_strerror(status, errmsg, sizeof(errmsg)); 
    801         call_callback(regc, status, 400, &reason, NULL, -1, 0, NULL, 
     801        call_callback(regc, status, 400, &reason, NULL, NOEXP, 0, NULL, 
    802802                      PJ_FALSE); 
    803803    } 
     
    809809} 
    810810 
    811 static void schedule_registration ( pjsip_regc *regc, pj_int32_t expiration ) 
    812 { 
    813     if (regc->auto_reg && expiration > 0) { 
     811static void schedule_registration ( pjsip_regc *regc, pj_uint32_t expiration ) 
     812{ 
     813    if (regc->auto_reg && expiration > 0 && expiration != NOEXP) { 
    814814        pj_time_val delay = { 0, 0}; 
    815815 
     
    893893 
    894894 
    895 static pj_int32_t calculate_response_expiration(const pjsip_regc *regc, 
    896                                                 const pjsip_rx_data *rdata, 
    897                                                 unsigned *contact_cnt, 
    898                                                 unsigned max_contact, 
    899                                                 pjsip_contact_hdr *contacts[]) 
    900 { 
    901     pj_int32_t expiration = NOEXP; 
     895static pj_uint32_t calculate_response_expiration(const pjsip_regc *regc, 
     896                                                 const pjsip_rx_data *rdata, 
     897                                                 unsigned *contact_cnt, 
     898                                                 unsigned max_contact, 
     899                                                 pjsip_contact_hdr *contacts[]) 
     900{ 
     901    pj_uint32_t expiration = NOEXP; 
    902902    const pjsip_msg *msg = rdata->msg_info.msg; 
    903903    const pjsip_hdr *hdr; 
     
    983983                        has_our_contact = PJ_TRUE; 
    984984 
    985                         if (contacts[i]->expires >= 0 &&  
    986                             contacts[i]->expires < expiration)  
     985                        if (contacts[i]->expires != PJSIP_EXPIRES_NOT_SPECIFIED 
     986                            && contacts[i]->expires < expiration)  
    987987                        { 
    988988                            /* Get the lowest expiration time. */ 
     
    10381038 
    10391039            if (*contact_cnt == our_contact_cnt && *contact_cnt && 
    1040                 contacts[0]->expires >= 0)  
     1040                contacts[0]->expires != PJSIP_EXPIRES_NOT_SPECIFIED)  
    10411041            { 
    10421042                expiration = contacts[0]->expires; 
     
    10981098                     (event->body.tsx_state.type==PJSIP_EVENT_RX_MSG) ?  
    10991099                      event->body.tsx_state.src.rdata : NULL, 
    1100                      -1, 0, NULL, PJ_FALSE); 
     1100                     NOEXP, 0, NULL, PJ_FALSE); 
    11011101 
    11021102        /* Call regc tsx callback before handling any response */ 
     
    11181118                    pjsip_contact_hdr *next = h->next; 
    11191119 
    1120                     if (h->expires == -1) { 
     1120                    if (h->expires == PJSIP_EXPIRES_NOT_SPECIFIED) { 
    11211121                        pj_list_erase(h); 
    11221122                    } 
     
    12061206                call_callback(regc, status, tsx->status_code,  
    12071207                              &rdata->msg_info.msg->line.status.reason, 
    1208                               rdata, -1, 0, NULL, is_unreg); 
     1208                              rdata, NOEXP, 0, NULL, is_unreg); 
    12091209                pj_lock_acquire(regc->lock); 
    12101210            } 
     
    12331233        pjsip_min_expires_hdr *me_hdr; 
    12341234        pjsip_tx_data *tdata; 
    1235         pj_int32_t min_exp; 
     1235        pj_uint32_t min_exp; 
    12361236 
    12371237        /* reset current op */ 
     
    12951295                call_callback(regc, status, tsx->status_code, 
    12961296                              &rdata->msg_info.msg->line.status.reason, 
    1297                               rdata, -1, 0, NULL, PJ_FALSE); 
     1297                              rdata, NOEXP, 0, NULL, PJ_FALSE); 
    12981298                pj_lock_acquire(regc->lock); 
    12991299            } 
     
    13071307    if (!handled) { 
    13081308        pjsip_rx_data *rdata; 
    1309         pj_int32_t expiration = NOEXP; 
     1309        pj_uint32_t expiration = NOEXP; 
    13101310        unsigned contact_cnt = 0; 
    13111311        pjsip_contact_hdr *contact[PJSIP_REGC_MAX_CONTACT]; 
     
    13311331 
    13321332        /* Update registration */ 
    1333         if (expiration==NOEXP) expiration=-1; 
     1333        // if (expiration==NOEXP) expiration=-1; 
    13341334        regc->expires = expiration; 
    13351335 
  • pjproject/trunk/pjsip/src/pjsip-ua/sip_xfer.c

    r4890 r6035  
    310310 
    311311    /* Create basic REFER request */ 
    312     status = pjsip_evsub_initiate(sub, pjsip_get_refer_method(), -1,  
    313                                   &tdata); 
     312    status = pjsip_evsub_initiate(sub, pjsip_get_refer_method(), 
     313                                  PJSIP_EXPIRES_NOT_SPECIFIED, &tdata); 
    314314    if (status != PJ_SUCCESS) 
    315315        goto on_return; 
  • pjproject/trunk/pjsip/src/pjsip/sip_msg.c

    r5727 r6035  
    814814                                                            void *mem, 
    815815                                                            const pj_str_t *hnames, 
    816                                                             int value) 
     816                                                            unsigned value) 
    817817{ 
    818818    pjsip_generic_int_hdr *hdr = (pjsip_generic_int_hdr*) mem; 
     
    829829PJ_DEF(pjsip_generic_int_hdr*) pjsip_generic_int_hdr_create( pj_pool_t *pool, 
    830830                                                     const pj_str_t *hnames, 
    831                                                      int value) 
     831                                                     unsigned value) 
    832832{ 
    833833    void *mem = pj_pool_alloc(pool, sizeof(pjsip_generic_int_hdr)); 
     
    11961196    pj_bzero(mem, sizeof(pjsip_contact_hdr)); 
    11971197    init_hdr(hdr, PJSIP_H_CONTACT, &contact_hdr_vptr); 
    1198     hdr->expires = -1; 
     1198    hdr->expires = PJSIP_EXPIRES_NOT_SPECIFIED; 
    11991199    pj_list_init(&hdr->other_param); 
    12001200    return hdr; 
     
    12641264        } 
    12651265 
    1266         if (hdr->expires >= 0) { 
     1266        if (hdr->expires != PJSIP_EXPIRES_NOT_SPECIFIED) { 
    12671267            if (buf+23 >= endbuf) 
    12681268                return -1; 
     
    14231423PJ_DEF(pjsip_expires_hdr*) pjsip_expires_hdr_init( pj_pool_t *pool, 
    14241424                                                   void *mem, 
    1425                                                    int value) 
     1425                                                   unsigned value) 
    14261426{ 
    14271427    pjsip_expires_hdr *hdr = (pjsip_expires_hdr*) mem; 
     
    14361436 
    14371437PJ_DEF(pjsip_expires_hdr*) pjsip_expires_hdr_create( pj_pool_t *pool, 
    1438                                                      int value ) 
     1438                                                     unsigned value ) 
    14391439{ 
    14401440    void *mem = pj_pool_alloc(pool, sizeof(pjsip_expires_hdr)); 
     
    15861586PJ_DEF(pjsip_max_fwd_hdr*) pjsip_max_fwd_hdr_init( pj_pool_t *pool, 
    15871587                                                   void *mem, 
    1588                                                    int value) 
     1588                                                   unsigned value) 
    15891589{ 
    15901590    pjsip_max_fwd_hdr *hdr = (pjsip_max_fwd_hdr*) mem; 
     
    15991599 
    16001600PJ_DEF(pjsip_max_fwd_hdr*) pjsip_max_fwd_hdr_create(pj_pool_t *pool, 
    1601                                                     int value) 
     1601                                                    unsigned value) 
    16021602{ 
    16031603    void *mem = pj_pool_alloc(pool, sizeof(pjsip_max_fwd_hdr)); 
     
    16121612PJ_DEF(pjsip_min_expires_hdr*) pjsip_min_expires_hdr_init( pj_pool_t *pool, 
    16131613                                                           void *mem, 
    1614                                                            int value ) 
     1614                                                           unsigned value ) 
    16151615{ 
    16161616    pjsip_min_expires_hdr *hdr = (pjsip_min_expires_hdr*) mem; 
     
    16241624 
    16251625PJ_DEF(pjsip_min_expires_hdr*) pjsip_min_expires_hdr_create(pj_pool_t *pool, 
    1626                                                             int value ) 
     1626                                                            unsigned value ) 
    16271627{ 
    16281628    void *mem = pj_pool_alloc(pool, sizeof(pjsip_min_expires_hdr)); 
  • pjproject/trunk/pjsip/src/pjsip/sip_parser.c

    r5697 r6035  
    18861886                   pvalue.slen)  
    18871887        { 
    1888             strtoi_validate(&pvalue, PJSIP_MIN_EXPIRES, PJSIP_MAX_EXPIRES, 
    1889                             &hdr->expires); 
     1888            hdr->expires = pj_strtoul(&pvalue); 
     1889            if (hdr->expires == PJSIP_EXPIRES_NOT_SPECIFIED) 
     1890                hdr->expires--; 
     1891            if (hdr->expires > PJSIP_MAX_EXPIRES) 
     1892                hdr->expires = PJSIP_MAX_EXPIRES; 
     1893            if (hdr->expires < PJSIP_MIN_EXPIRES) 
     1894                hdr->expires = PJSIP_MIN_EXPIRES; 
    18901895        } else { 
    18911896            pjsip_param *p = PJ_POOL_ALLOC_T(pool, pjsip_param); 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_acc.c

    r6015 r6035  
    28772877        info->expires = regc_info.next_reg; 
    28782878    } else { 
    2879         info->expires = -1; 
     2879        info->expires = PJSIP_EXPIRES_NOT_SPECIFIED; 
    28802880    } 
    28812881 
  • pjproject/trunk/pjsip/src/pjsua-lib/pjsua_pres.c

    r5949 r6035  
    980980        uapres->expires = expires_hdr->ivalue; 
    981981    else 
    982         uapres->expires = -1; 
     982        uapres->expires = PJSIP_EXPIRES_NOT_SPECIFIED; 
    983983 
    984984    st_code = (pjsip_status_code)200; 
     
    19081908    pjsip_evsub_set_mod_data(buddy->sub, pjsua_var.mod.id, buddy); 
    19091909 
    1910     status = pjsip_pres_initiate(buddy->sub, -1, &tdata); 
     1910    status = pjsip_pres_initiate(buddy->sub, PJSIP_EXPIRES_NOT_SPECIFIED, 
     1911                                 &tdata); 
    19111912    if (status != PJ_SUCCESS) { 
    19121913        if (buddy->dlg) pjsip_dlg_dec_lock(buddy->dlg); 
  • pjproject/trunk/pjsip/src/test/regc_test.c

    r5678 r6035  
    217217    int         code; 
    218218    pj_bool_t   have_reg; 
    219     int         expiration; 
     219    unsigned    expiration; 
    220220    unsigned    contact_cnt; 
    221221    pj_bool_t   auth; 
     
    228228 
    229229    /* Additional results */ 
    230     int         interval; 
    231     int         next_reg; 
     230    unsigned    interval; 
     231    unsigned    next_reg; 
    232232}; 
    233233 
     
    251251        return; 
    252252 
    253     client->have_reg = info.auto_reg && info.interval>0 && 
    254                        param->expiration>0; 
     253    client->have_reg = info.auto_reg && 
     254                       info.interval != PJSIP_EXPIRES_NOT_SPECIFIED && 
     255                       param->expiration != PJSIP_EXPIRES_NOT_SPECIFIED; 
    255256    client->expiration = param->expiration; 
    256257    client->contact_cnt = param->contact_cnt; 
Note: See TracChangeset for help on using the changeset viewer.