I just stumbled on an issue in the way Sip Communicator handles the OK response to a REGISTER request.
The processOK() method of classs SipRegistrarConnection looks for the "expires" value in a way that complies with the obsolete specification of SIP (RFC 2543) but not the current RFC 3261. The earlier RFC lets the registrar put the "expires" in either an "Expires: " header in the response, or an "expires=" parameter in the Contact part of the response. The current RFC specifies that the "expires" must be in the Contact (see section 10.3).
Sip Communicator looks first for the header, and then in the Contact if there was no header. The Mitel PBX that I am targetting unfortunately puts a bogus "Expires: 0" in every OK along with a correct expires in the Contact. This makes Sip Communicator unable to register since it never sees the real expires in the Contact.
I understand that the way the method works currently probably lets Sip Communicator support some older SIP servers, but maybe we'd be better off prioritizing the Contact over the header, if only in the name of RFC compliance...
As far as getting Sip Communicator to work with our Mitel 3300MX system, I just stopped it from looking at the header by replacing the "expiresHeader = response.getExpires();" line with "expiresHeader = null;" in processOK(), and now I can register.
Hopefully this helps other Mitel users at least... Cheers!
I just stumbled on an issue in the way Sip Communicator handles the OK
response to a REGISTER request.
The processOK() method of classs SipRegistrarConnection looks for the
"expires" value in a way that complies with the obsolete specification
of SIP (RFC 2543) but not the current RFC 3261. The earlier RFC lets the
registrar put the "expires" in either an "Expires: " header in the
response, or an "expires=" parameter in the Contact part of the
response. The current RFC specifies that the "expires" must be in the
Contact (see section 10.3).
Sip Communicator looks first for the header, and then in the Contact if
there was no header. The Mitel PBX that I am targetting unfortunately
puts a bogus "Expires: 0" in every OK along with a correct expires in
the Contact. This makes Sip Communicator unable to register since it
never sees the real expires in the Contact.
I understand that the way the method works currently probably lets Sip
Communicator support some older SIP servers, but maybe we'd be better
off prioritizing the Contact over the header, if only in the name of RFC
compliance...
As far as getting Sip Communicator to work with our Mitel 3300MX system,
I just stopped it from looking at the header by replacing the
"expiresHeader = response.getExpires();" line with "expiresHeader =
null;" in processOK(), and now I can register.
Hopefully this helps other Mitel users at least... Cheers!