IMS - RCS
RCS Auto Configuration

RCS Auto Configuration is the procedure where the UE retrieves operator-specific RCS parameters from a remote configuration server and applies them to the RCS stack. The downloaded configuration can include IMS identities, service switches, capability discovery timers, messaging limits, file transfer policy, APN behavior, XCAP settings, and transport preferences.

The high-level protocol is simple: the UE first checks the configuration server over HTTP, then performs the real configuration exchange over HTTPS. In practice, the trace looks more complicated because TCP setup, TLS negotiation, certificate handling, and encrypted HTTP payloads surround the actual configuration request and response.

Contents

Overview

The overview sequence separates the availability check from the actual provisioning download. The first HTTP exchange confirms that the configuration service can be reached, while the HTTPS exchange protects the request parameters and the returned RCS provisioning XML.

Even though the negotiation is a simple four-step process, the real log captured for this process looks complicated. Some complexity comes from TCP setup and teardown, but the main reason is the TLS/SSL setup required for steps (3) and (4). When reproducing this procedure in a lab, certificate and security parameters must be configured on both the network or test equipment and the UE.

From the message sequence alone, it is not always clear which packets carry Auto Configuration data and which packets are only transport or security housekeeping. To see the HTTP payload, the TLS/SSL data must be decrypted with the required security material. Refer to Wireshark Protocol - SSL for SSL decoding background.

Once the SSL message is decoded, the Auto Configuration messages can be identified as shown below.

Decoded Auto Configuration Transaction

The decoded transaction contains an initial HTTP availability check, an HTTP response, an HTTPS GET carrying terminal and subscription identifiers, and a final HTTPS response carrying the XML provisioning document.

(1) HTTP GET Request

    GET / HTTP/1.1

    Cache-Control: max-age=0

    Host: config.rcs.mnc001.mcc001.pub.3gppnetwork.org

    User-Agent: 3gpp-gba

    This HTTP/XML message clip highlights the following parameters: User-Agent. Use these fields to identify the HTTP transaction, server response, security context, and provisioning payload for this part of the procedure.

    Connection: Keep-Alive

    Accept-Language: en-US

    This HTTP GET clip shows the request line plus Cache-Control, Host, User-Agent, Connection, and Accept-Language headers. Host identifies the RCS configuration server, and User-Agent indicates the 3GPP GBA-capable client profile.

(2) HTTP 200 OK

    HTTP/1.1 200 OK

    Cache-Control: private

    Transfer-Encoding: chunked

    Content-Type: text/html

    Expires: Mon, 07 Nov 2016 04:05:20 GMT

    This HTTP/XML message clip highlights the following parameters: Expires, Content-Type. Use these fields to identify the HTTP transaction, server response, security context, and provisioning payload for this part of the procedure.

    Server: Microsoft-IIS/7.5

    X-AspNet-Version: 4.0.30319

    Set-Cookie: PHPSESSID=dv+z7IckAiXiBX+aFEJh+g==; path=/

    X-Powered-By: ASP.NET

    Date: Mon, 07 Nov 2016 05:05:20 GMT

    This HTTP/XML message clip highlights the following parameters: Date. Use these fields to identify the HTTP transaction, server response, security context, and provisioning payload for this part of the procedure.

(3) HTTPS GET

    GET /?IMEI=353756074161860

    &terminal_vendor=testVendor

    &rcs_version=5.1B

    &terminal_model=SM-N920T

    &client_version=RCSAndr-5.0

    &IMSI=001001123456789

    &terminal_sw_version=N920TUVS2COKC

    &client_vendor=SEC

    &vers=20160401

    &rcs_profile=joyn_blackbird HTTP/1.1

    Cookie: PHPSESSID=dv+z7IckAiXiBX+aFEJh+g==; path=/

    Cache-Control: max-age=0

    Host: config.rcs.mnc001.mcc001.pub.3gppnetwork.org

    User-Agent: IM-client/OMA1.0 testVendor/SM-N920T-OKC testVendor-RCS/5.0 3gpp-gba

    This HTTP/XML message clip highlights the following parameters: User-Agent. Use these fields to identify the HTTP transaction, server response, security context, and provisioning payload for this part of the procedure.

    Connection: Keep-Alive

    Accept-Language: en-US

    This HTTPS GET clip carries query parameters including IMEI, terminal_vendor, rcs_version, terminal_model, client_version, IMSI, terminal_sw_version, client_vendor, vers, and rcs_profile. These parameters tell the server which device, subscriber, software version, and RCS profile should be provisioned.

(4) HTTPS 200 OK

    HTTP/1.1 200 OK

    Cache-Control: private

    Content-Type: text/xml; charset=utf-8

    This HTTP/XML message clip highlights the following parameters: Content-Type. Use these fields to identify the HTTP transaction, server response, security context, and provisioning payload for this part of the procedure.

    Server: Microsoft-IIS/7.5

    X-AspNet-Version: 4.0.30319

    X-Powered-By: ASP.NET

    Date: Mon, 07 Nov 2016 05:05:20 GMT

    Content-Length: 8687

    This HTTP/XML message clip highlights the following parameters: Content-Length, Date. Use these fields to identify the HTTP transaction, server response, security context, and provisioning payload for this part of the procedure.

    <?xml version="1.0" encoding="utf-8"?>

    <wap-provisioningdoc version="1.1">

    <characteristic type="VERS">

    <parm name="version" value="20160401" />

    <parm name="validity" value="300" />

    </characteristic>

    <characteristic type="APPLICATION">

    <parm name="AppID" value="ap2001" />

    <parm name="Name" value="IMS Settings" />

    <parm name="AppRef" value="ims" />

    <characteristic type="ConRefs">

    <parm name="ConRef" value="0" />

    </characteristic>

    <parm name="PDP_ContextOperPref" value="0" />

    <parm name="Timer_T1" value="500" />

    <parm name="Timer_T2" value="4000" />

    <parm name="Timer_T4" value="5000" />

    <parm name="Private_User_Identity" value="001001123456789@ims.mnc001.mcc001.pub.3gppnetwork.org" />

    <characteristic type="Public_User_Identity_List">

    <parm name="Public_User_Identity" value="sip:001010123456789@ims.mnc001.mcc001.3gppnetwork.org" />

    </characteristic>

    <parm name="Home_network_domain_name" value="msg.testnet.com" />

    <characteristic type="Ext">

    <parm name="NatUrlFmt" value="0" />

    <parm name="IntUrlFmt" value="1" />

    <parm name="Q-Value" value="0.5" />

    <characteristic type="SecondaryDevicePar">

    <parm name="VoiceCall" value="0" />

    <parm name="Chat" value="0" />

    <parm name="SendSms" value="0" />

    <parm name="SendMms" value="0" />

    <parm name="FileTransfer" value="0" />

    <parm name="VideoShare" value="0" />

    <parm name="ImageShare" value="0" />

    <parm name="VideoCall" value="0" />

    <parm name="GeoLocPush" value="0" />

    </characteristic>

    <parm name="MaxSizeImageShare" value="5242880" />

    <parm name="MaxTimeVideoShare" value="300" />

    <characteristic type="Ext" />

    </characteristic>

    <characteristic type="ICSI_List">

    <parm name="ICSI" value="" />

    <parm name="ICSI_Resource_Allocation_Mode" value="" />

    </characteristic><characteristic type="LBO_P-CSCF_Address">

    <parm name="Address" value="ss.epdg.epc.mnc001.mcc001.pub.3gppnetwork.org" />

    <parm name="AddressType" value="FQDN" />

    </characteristic><parm name="Voice_Domain_Preference_E_UTRAN" value="1" />

    <parm name="SMS_Over_IP_Networks_Indication" value="1" />

    <parm name="Keep_Alive_Enabled" value="0" />

    <parm name="Voice_Domain_Preference_UTRAN" value="1" />

    <parm name="Mobility_Management_IMS_Voice_Termination" value="1" />

    <parm name="RegRetryBaseTime" value="300" />

    <parm name="RegRetryMaxTime" value="3600" />

    <characteristic type="PhoneContext_List">

    <parm name="PhoneContext" value="0" />

    <parm name="Public_User_Identity" value="sip:+14448880000@msg.testnet.com" />

    </characteristic><characteristic type="APPAUTH"><parm name="AuthType" value="AKA" />

    <parm name="Realm" value="msg.testnet.com" />

    <parm name="UserName" value="001001123456789@ims.mnc001.mcc001.pub.3gppnetwork.org" />

    <parm name="UserPwd" value="ims*1234" />

    </characteristic>

    </characteristic>

    <characteristic type="APPLICATION">

    <parm name="AppID" value="ap2002" />

    <parm name="Name" value="RCS Settings" />

    <parm name="AppRef" value="rcs" />

    <characteristic type="IMS">

    <parm name="To-AppRef" value="ims" />

    <characteristic type="Ext">

    <parm name="rcsVolteSingleRegistration" value="1" />

    </characteristic>

    </characteristic>

    <characteristic type="SERVICES">

    <parm name="presencePrfl" value="1" />

    <parm name="ChatAuth" value="1" />

    <parm name="GroupChatAuth" value="1" />

    <parm name="ftAuth" value="1" />

    <parm name="standaloneMsgAuth" value="1" />

    <parm name="geolocPushAuth" value="0" />

    <parm name="geolocPullAuth" value="0" />

    <parm name="VSAuth" value="0" />

    <parm name="ISAuth" value="0" />

    <parm name="rcsIPVoiceCallAuth" value="1" />

    <parm name="rcsIPVideoCallAuth" value="1" />

    <characteristic type="Ext" />

    </characteristic>

    <characteristic type="PRESENCE">

    <parm name="AvailabilityAuth" value="1" />

    <characteristic type="FAVLINK">

    <parm name="AutMa" value="Auto" />

    <characteristic type="LINKS">

    <parm name="OpFavUrl1" value="" />

    <parm name="OpFavUrl2" value="" />

    <parm name="OpFavUrl3" value="" />

    </characteristic>

    <parm name="LabelMaxLength" value="200" />

    </characteristic>

    <parm name="IconMaxSize" value="204800" />

    <parm name="NoteMaxSize" value="200" />

    <characteristic type="VIPCONTACTS">

    <parm name="NonVipPollPeriodSetting" value="200" />

    <parm name="NonVipMaxPollPerPeriod" value="1" />

    </characteristic>

    <parm name="PublishTimer" value="3600" />

    <parm name="NickNameLength" value="200" />

    <characteristic type="Location">

    <parm name="TextMaxLength" value="200" />

    <parm name="LocInfoMaxValidTime" value="86400" />

    </characteristic><characteristic type="Ext" />

    <parm name="client-obj-datalimit" value="4096" />

    <parm name="content-serveruri" value="" />

    <parm name="source-throttlepublish" value="30" />

    <parm name="max-number-ofsubscriptions-inpresence-list" value="100" />

    <parm name="service-uritemplate" value="rcs" />

    <parm name="RLS-URI" value="" />

    </characteristic><characteristic type="XDMS">

    <parm name="RevokeTimer" value="86400" />

    <parm name="enablePNBManagement" value="0" />

    <parm name="enableXDMSubscribe" value="0" />

    <characteristic type="Ext" />

    <parm name="XCAPRootURI" value="xcap.ims.mnc001.mcc001.pub.3gppnetwork.org" />

    <parm name="XCAPAuthenticationUserName" value="GBA" />

    <parm name="XCAPAuthenticationSecret" value="GBA" />

    <parm name="XCAPAuthenticationType" value="GBA" />

    </characteristic><characteristic type="SUPL">

    <parm name="TextMaxLength" value="200" />

    <parm name="LocInfoMaxValidTime" value="43200" />

    <parm name="geolocPullOpen" value="0" />

    <parm name="geolocPullApiGwAddress" value="" />

    <parm name="geolocPullBlockTimer" value="0" />

    <characteristic type="Ext" />

    <parm name="Addr" value="" />

    <parm name="AddrType" value="" />

    </characteristic><characteristic type="IM">

    <parm name="imMsgTech" value="1" />

    <parm name="imCapAlwaysON" value="1" />

    <parm name="GroupChatFullStandFwd" value="1" />

    <parm name="GroupChatOnlyFStandFwd" value="1" />

    <parm name="imWarnSF" value="0" />

    <parm name="SmsFallBackAuth" value="1" />

    <parm name="imCapNonRCS" value="1" />

    <parm name="imWarnIW" value="0" />

    <parm name="AutAccept" value="1" />

    <parm name="AutAcceptGroupChat" value="1" />

    <parm name="imSessionStart" value="0" />

    <parm name="firstMessageInvite" value="0" />

    <parm name="TimerIdle" value="210" />

    <parm name="MaxConcurrentSession" value="10" />

    <parm name="multiMediaChat" value="1" />

    <parm name="MaxSize1to1" value="1000" />

    <parm name="MaxSize1toM" value="1000" />

    <parm name="ftWarnSize" value="9999999" />

    <parm name="MaxSizeFileTr" value="10240" />

    <parm name="ftThumb" value="1" />

    <parm name="ftStAndFwEnabled" value="0" />

    <parm name="ftCapAlwaysON" value="0" />

    <parm name="ftAutAccept" value="1" />

    <parm name="ftHTTPCSURI" value="" />

    <parm name="ftHTTPCSUser" value="" />

    <parm name="ftHTTPCSPwd" value="" />

    <parm name="ftDefaultMech" value="MSRP" />

    <characteristic type="Ext" />

    <parm name="pres-srv-cap" value="1" />

    <parm name="deferred-msg-func-uri" value="sip:CPMDeferredMsgMgmt@msg.testnet.com" />

    <parm name="max_adhoc_group_size" value="21" />

    <parm name="conf-fcty-uri" value="sip:adhoc@msg.testnet.com" />

    <parm name="exploder-uri" value="sip:adhoc@msg.testnet.com" />

    <parm name="CPMControllingFuncUri" value="sip:adhoc@msg.testnet.com" />

    </characteristic>

    <characteristic type="CPM">

    <characteristic type="StandaloneMsg">

    <parm name="MaxSizeStandalone" value="600" />

    </characteristic>

    <characteristic type="MessageStore">

    <parm name="Url" value="" />

    <parm name="AuthProt" value="0" />

    <parm name="UserName" value="" />

    <parm name="UserPwd" value="" />

    </characteristic>

    <characteristic type="Ext" />

    </characteristic>

    <characteristic type="CAPDISCOVERY">

    <parm name="pollingPeriod" value="300" />

    <parm name="pollingRate" value="20" />

    <parm name="pollingRatePeriod" value="1" />

    <parm name="capInfoExpiry" value="300" />

    <parm name="defaultDisc" value="1" />

    <parm name="capDiscCommonStack" value="0" />

    <characteristic type="Ext" />

    </characteristic>

    <characteristic type="APN">

    <parm name="rcseOnlyAPN" value="ims" />

    <parm name="enableRcseSwitch" value="-1" />

    <parm name="alwaysUseIMSAPN" value="1" />

    <characteristic type="Ext" />

    </characteristic>

    <characteristic type="OTHER">

    <parm name="endUserConfReqId" value="sip:1234567890@msg.testnet.com" />

    <parm name="allowVSSave" value="1" />

    <characteristic type=" transportProto">

    <parm name="psSignalling" value="SIPoUDP" />

    <parm name="psMedia" value="MSRP" />

    <parm name="psRTMedia" value="RTP" />

    <parm name="wifiSignalling" value="SIPoUDP" />

    <parm name="wifiMedia" value="MSRP" />

    <parm name="wifiRTMedia" value="RTP" />

    </characteristic><parm name="uuid_Value" value="0" />

    <parm name="IPCallBreakOut" value="0" />

    <parm name="IPCallBreakOutCS" value="0" />

    <parm name="rcsIPVideoCallUpgradeFromCS" value="0" />

    <parm name="rcsIPVideoCallUpgradeOnCapError" value="0" />

    <parm name="rcsIPVideoCallUpgradeAttemptEarly" value="0" />

    <characteristic type="Ext" />

    </characteristic>

    <characteristic type="SERVICEPROVIDEREXT" />

    </characteristic>

    </wap-provisioningdoc>

    This XML provisioning clip includes parameters such as AppID, AppRef, Private_User_Identity, Public_User_Identity, Home_network_domain_name, Timer_T1, Timer_T2, Timer_T4, APN, XCAPRootURI, imMsgTech, ftDefaultMech, and capability discovery timers. These values configure IMS identity, RCS service behavior, messaging, file transfer, XCAP, APN, and transport preferences on the UE.