Hello Benny, As promised, here are small piece of information to some IMS-specific details for SIP. First let me thank you for adding the AKAv1-MD5 and AKAv2-MD5 support, and the Service-Route support as well. Without them making an IMS client would be very hard :) There's a small document presenting the IMS-specific SIP features http://project.swissgeek.org/IMS_Overview.pdf There might be three very important features that could be added to pjsip to make it almost 100% IMS-Compliant 1. Support for private/public address. In IMS, an IMS Subscription (IMSU) is created, then we attach to it a Private Address (IMPI). This is what identify the user to the operator. In this IMPI you specify which authentication scheme might be used, which Registrar should handle this user ect. The IMPI is also used as the "username" for the authentication process during the REGISTER. To this IMPI you add several Public Address (IMPU). Which means, for one user, you can have several public sip Address the user might be contacted through. A public address might as well be shared between several private address (like sip:support at mycompany.com might point to the 6 engineers providing the support) I'm still looking at how the registration of multiple public address for the same device should be handled (either one REGISTER with all the IMPU or multiple REGISTER). 2. Support for Authorization in IMS As described before, a user is identified by its private address. This information is needed by the I-CSCF to redirect a REGISTER message to the correct S-CSCF (registrar). If you look at a standard REGISTER, there's only the sip contact address in the from/to headers. This can't be used to "guess" the private user identity. That's why in IMS network the initial REGISTER message contains already the "Authorization" field, with only the following fields : - username = private address - realm = IMS domain - uri = IMS domain here's a capture of a REGISTER sent by an IMS client REGISTER sip:glam-oims.net SIP/2.0 Call-ID: f0f9c6d1bf2075b698a440114e5842d5 at 10.8.0.6 CSeq: 1 REGISTER From: "bota" <sip:bota@xxxxxxxxxxxxx>;tag=9523050 To: "bota" <sip:bota at glam-oims.net> Via: SIP/2.0/UDP 10.8.0.6:5060;branch=z9hG4bK6a5cea8e23abe690ef759704cd83fcc6 Max-Forwards: 70 Expires: 3600 P-Access-Network-Info: IEEE-802.11 Authorization: Digest username="bota-private at glam-oims.net",realm="glam-oims.net",nonce="",uri="glam-oims.net",response="" User-Agent: IMS-Communicator 070605 Supported: path Contact: <sip:bota at 10.8.0.6:5060> Content-Length: 0 As you can see, there's already the Authorization field, but without a valid response. This will allow the network to identify the user with it's private address and route the REGISTER to the correct Registrar. A flag in the pjsua_acc_config telling to send the initial register with this field would be very helpfull :) 3. Support for P-Access-Network-Info It would be nice to have in the pjsua_acc_config a field where we can specify the network access method. If this field is not empty, pjsip would then put this header in every request sent from this account. This information is often used by SIP A/S and MediaServer to determine the capability of the access method and offer media stream adapted to it. A streaming server would send a 12mbit/s Video to a user using IEE-802.3 (ethernet) while sending ? 300kb/s video to a user with a P-Access-Network-Info of 3GPP-UMTS. That's it. Sorry for this long mail. If anyone comfortable with IMS see any mistake/errors in the information provided here, I would gladly accept your corrections. Have a nice day. Olivier B. -- Olivier Beytrison Telecommunication Engineer Mobile: +41 (0)78 619 73 53 Mail: olivier at heliosnet.org GPG: 0x4FB83528 http://pgp.mit.edu/