PJSUA2: Contact header uri length limit

2019-08-22 10:17发布

问题:

I'm building an android VOIP application with push notifications support, based on PJSUA2.

I need to send the push notification (FCM) token to the server (Asterisk in my case) as contact uri parameter, so that I can retrieve it with a script from the server and send notification to wake up client before sending an incoming call request.

I put the parameters in the contact uri parameters with

acfg.getSipConfig().setContactUriParams(buildParams(contactParameters));

contactParams is a HashMap<String, String> with parameters name and value, while buildParams is the following method:

private String buildParams(Map<String, String> params) {
    StringBuilder builder = new StringBuilder();
    for (String k : params.keySet()) {
        builder.append(';');
        builder.append(k);
        String v = params.get(k);
        if (v != null && v.trim().length() > 0) {
            builder.append("=\"");
            builder.append(v);
            builder.append('\"');
        }
    }
    return builder.toString();
}

without FCM parameters everything works well, but

  • building the contact uri with the following parameters ;pn-provider="fcm";pn-tok="LONG FCM TOKEN" makes the calls hangup after 32 seconds (see question PJSUA2 Android - Incoming calls drop after 32 seconds)
  • removing ;pn-provider="fcm" works
  • sending just a portion of the token works (in pn-tok, together with the pn-provider parameter)

I thought it may be a "invalid characters issue", but it actually seems to be a "max length issue".

Is there a Contact header max length or a URI max length for Contact header? If yes, is it a PJSIP limit or a SIP limit?