[asterisk-bugs] [JIRA] (ASTERISK-29704) res_pjsip_pubsub: Treats SUBSCRIBE with Expires 0 as invalid when it is valid

Niksa Baldun (JIRA) noreply at issues.asterisk.org
Tue Oct 26 03:04:50 CDT 2021


    [ https://issues.asterisk.org/jira/browse/ASTERISK-29704?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=256702#comment-256702 ] 

Niksa Baldun commented on ASTERISK-29704:
-----------------------------------------

There was a problem with my code, but now that I've corrected it I am getting a new error: 500 Unhandled by dialog usages. That would imply that re-subscribe or unsubscribe is invalid within same dialog. However, RFC states:

{quote}
   In order to keep subscriptions effective beyond the duration
   communicated in the "Expires" header, subscribers need to refresh
   subscriptions on a periodic basis using a new SUBSCRIBE message on
   the same dialog as defined in SIP.
{quote}

{panel:bgColor=yellow}
SUBSCRIBE sip:888 at 127.0.0.1 SIP/2.0
Via: SIP/2.0/UDP 127.0.0.1:5070;branch=z9hG4bKBkIIVXmQY3
Accept: application/dialog-info+xml
Accept-Encoding: zlib+base64
CSeq: 1 SUBSCRIBE
Call-ID: 5c2a4364-35a4-4ddc-941c-9961bdd819ec
Contact: <sip:999 at 127.0.0.1:5070>
Content-Length: 0
Event: dialog
Expires: 3600
From: <sip:999 at 127.0.0.1>;tag=fb7e68040562b05a
Max-Forwards: 70
To: <sip:888 at 127.0.0.1>
User-Agent: CS


SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 127.0.0.1:5070;received=127.0.0.1;branch=z9hG4bKBkIIVXmQY3
Call-ID: 5c2a4364-35a4-4ddc-941c-9961bdd819ec
From: <sip:999 at 127.0.0.1>;tag=fb7e68040562b05a
To: <sip:888 at 127.0.0.1>;tag=z9hG4bKBkIIVXmQY3
CSeq: 1 SUBSCRIBE
WWW-Authenticate: Digest realm="asterisk",nonce="1635232984/49c720a890c5b681325e891ed0db9015",opaque="7144850e016c1658",algorithm=md5,qop="auth"
Server: Asterisk PBX 18.6.0
Content-Length:  0


SUBSCRIBE sip:888 at 127.0.0.1 SIP/2.0
Via: SIP/2.0/UDP 127.0.0.1:5070;branch=z9hG4bKM2U0JloZuM
Accept: application/dialog-info+xml
Accept-Encoding: zlib+base64
Authorization: Digest uri="sip:888 at 127.0.0.1", username="999", response="02a42a41ffec8025b3a4dfc829ba12a5", method="SUBSCRIBE", realm="asterisk", nonce="1635232984/49c720a890c5b681325e891ed0db9015", opaque="7144850e016c1658", algorithm=md5, qop="auth", nc="1", cnonce="kqwPWoKqKH"
CSeq: 2 SUBSCRIBE
Call-ID: 5c2a4364-35a4-4ddc-941c-9961bdd819ec
Contact: <sip:999 at 127.0.0.1:5070>
Content-Length: 0
Event: dialog
Expires: 3600
From: <sip:999 at 127.0.0.1>;tag=fb7e68040562b05a
Max-Forwards: 70
To: <sip:888 at 127.0.0.1>
User-Agent: CS


SUBSCRIBE sip:888 at 127.0.0.1 SIP/2.0
Via: SIP/2.0/UDP 127.0.0.1:5070;branch=z9hG4bKBkIIVXmQY3
Accept: application/dialog-info+xml
Accept-Encoding: zlib+base64
CSeq: 3 SUBSCRIBE
Call-ID: 5c2a4364-35a4-4ddc-941c-9961bdd819ec
Contact: <sip:999 at 127.0.0.1:5070>
Content-Length: 0
Event: dialog
Expires: 0
From: <sip:999 at 127.0.0.1>;tag=fb7e68040562b05a
Max-Forwards: 70
To: <sip:888 at 127.0.0.1>;tag=fe34b375-d09d-479b-a4f5-8745451763eb
User-Agent: CS


SIP/2.0 500 Unhandled by dialog usages
Via: SIP/2.0/UDP 127.0.0.1:5070;received=127.0.0.1;branch=z9hG4bKBkIIVXmQY3
Call-ID: 5c2a4364-35a4-4ddc-941c-9961bdd819ec
From: <sip:999 at 127.0.0.1>;tag=fb7e68040562b05a
To: <sip:888 at 127.0.0.1>;tag=fe34b375-d09d-479b-a4f5-8745451763eb
CSeq: 3 SUBSCRIBE
Server: Asterisk PBX 18.6.0
Content-Length:  0
{panel}

> res_pjsip_pubsub: Treats SUBSCRIBE with Expires 0 as invalid when it is valid
> -----------------------------------------------------------------------------
>
>                 Key: ASTERISK-29704
>                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-29704
>             Project: Asterisk
>          Issue Type: Bug
>      Security Level: None
>          Components: Resources/res_pjsip_pubsub
>    Affects Versions: 18.7.1
>         Environment: Debian Linux 10
>            Reporter: Niksa Baldun
>
> When res_pjsip receives SUBSCRIBE request with Expires=0, it responds with with 400 Bad request. Excerpt from res_pjsip_pubsub.c:
> {code}
>         if (expires_header->ivalue == 0) { 
>             ast_debug(1, "Subscription request from endpoint %s rejected. Expiration of 0 is invalid\n",
>                 ast_sorcery_object_get_id(endpoint));
>             pjsip_endpt_respond_stateless(ast_sip_get_pjsip_endpoint(), rdata, 400, NULL, NULL, NULL);
>                 return PJ_TRUE;
>         }
> {code}
> However, Expires of 0 is perfectly valid. Relevant text from RFC 3265, section 3.1.1:
> {quote}
>    A natural consequence of this scheme is that a SUBSCRIBE with an
>    "Expires" of 0 constitutes a request to unsubscribe from an event.
>       In addition to being a request to unsubscribe, a SUBSCRIBE message
>       with "Expires" of 0 also causes a fetch of state; see section
>       3.3.6.
> {quote}
> Therefore, a SUBSCRIBE with Expires=0 should cause one NOTIFY to be sent, and remove the subscription if it exists.



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list