can't set Expires header value to 4294967295

GJ
Gross, Jeffrey
Thu, Mar 30, 2017 7:52 PM

Hello,

For my application, I need to set the expiration value in my PUBLISH request to 4294967295. This is allowable per RFC 3261, sec 20.19:

"The value of this field is an integral number of seconds (in decimal) between 0 and (2**32)-1, measured from the receipt of the request."

But, there are two problems with this:

  1. PJSIP uses 4294967295 (0xffffffff) to indicate an expiration value is not specified. Fair enough -- I changed PJSIP_PUBC_EXPIRATION_NOT_SPECIFIED to the less likely to be used 4294967294 (0xfffffffe).

  2. However, the call chain that eventually prints the header into the message converts the pj_uint32_t into an int, then into a pj_int32_t (hdr->ivalue) and then into an unsigned long (pj_utoa). On a 64-bit machine, that last conversion will print:
    "Expires: 18446744073709551615"
    instead of the desired:
    "Expires: 4294967295"

Can you please add a ticket for this?

Thanks,
Jeff

Hello, For my application, I need to set the expiration value in my PUBLISH request to 4294967295. This is allowable per RFC 3261, sec 20.19: "The value of this field is an integral number of seconds (in decimal) between 0 and (2**32)-1, measured from the receipt of the request." But, there are two problems with this: 1. PJSIP uses 4294967295 (0xffffffff) to indicate an expiration value is not specified. Fair enough -- I changed PJSIP_PUBC_EXPIRATION_NOT_SPECIFIED to the less likely to be used 4294967294 (0xfffffffe). 2. However, the call chain that eventually prints the header into the message converts the pj_uint32_t into an int, then into a pj_int32_t (hdr->ivalue) and then into an unsigned long (pj_utoa). On a 64-bit machine, that last conversion will print: "Expires: 18446744073709551615" instead of the desired: "Expires: 4294967295" Can you please add a ticket for this? Thanks, Jeff