Enable VoLTE & VoWiFi in rooted Samsung smartphones.
Usually a VoLTE device, after the power creates the Internet
connection using the Internet APN. Afterwards, if VoLTE is enabled, it creates
the ims connection using the ims APN and this one will be furher used for SIP
communication with the VoLTE servers, for registration and handling the calls.
VoLTE&VoWiFi can be enabled for any operator. We managed to do it on all Samsung devices newer than Galaxy S4. For this you need to carefully edit the files in your device with the details of your operator - you can take them from a rooted Samsung officially supported by the operator or you can just guess them :) . For VoWiFi there are some more tricks.
VoLTE&VoWiFi can be enabled for any operator. We managed to do it on all Samsung devices newer than Galaxy S4. For this you need to carefully edit the files in your device with the details of your operator - you can take them from a rooted Samsung officially supported by the operator or you can just guess them :) . For VoWiFi there are some more tricks.
Edit the following files:
1. the ims APN is defined in CSC (Customer Service Code)
file customer.xml
2. the SIP/VoLTE/VoWiFi parameters are defined in CSC file customer.xml and /system/priv-app/imsservice/imsservice.apk . You can decompile this apk or use WinRAR to opent it and edit the .json files mentioned below.
3. further VoWiFi parameters can be found in /etc/epdg_apns_conf.xml
The CSC files are used as an input for imsservice.apk, the
apk takes the basic information and generates the xml files in /data/user_de/0/com.sec.imsservice/shared_prefs/,
the most important being imsprofile.xml. These files, containing tens of
parameters, will be used further for enabling the service.
Use QuickShortcutMaker (or adb, or Phone Info/Secret Codes) to launch IMSSettings apk. You can check now if the phone is registered in VoLTE system (IMS), you can change different parameters like SIP preconditions, codecs,..., you can export all the call messajes in .pcap format and view them with Wireshark. Drop me a line if you need help with wireshark.
Use QuickShortcutMaker (or adb, or Phone Info/Secret Codes) to launch IMSSettings apk. You can check now if the phone is registered in VoLTE system (IMS), you can change different parameters like SIP preconditions, codecs,..., you can export all the call messajes in .pcap format and view them with Wireshark. Drop me a line if you need help with wireshark.
For more information just drop me an email: volte22222 [at] gmail.com
1. CSC
<Setting>
<NetworkName>Digi.Mobil</NetworkName>
<EnableIMS>true</EnableIMS> IMS: ON
<VoLTE>
<EnableVoLTE>true</EnableVoLTE> VoLTE: ON
<EnableVoiceoverWIFI>false</EnableVoiceoverWIFI> VoWiFi: OFF
<EnableVideocall>false</EnableVideocall> VideoCall: OFF
<EnableVoLTEindicator>true</EnableVoLTEindicator> Iconita VoLTE: ON
<Voice_Domain_Preference_EUTRAN>imspsvoicepreferred</...> VoLTE preffered
<Emregencycall_Domain>cs</Emregencycall_Domain> Emergency call: CSFB, the call is done by falling back to 2G/3G, not using VoLTE
<SS_Domain_Preference>cs_always</SS_Domain_Preference> The configuration of Supplimentary Services as call forwarding is done in 3G, not over IP in 4G
<SS_CSFBwithIMSerror>false</SS_CSFBwithIMSerror> NA
<USSD_Domain_Preference>cs</USSD_Domain_Preference> USSD codes ovver 3G, not IP/4G
<EnableSMSoverIP>false</EnableSMSoverIP> SMS over IP: OFF; the SMS is sent over LTE signalisation not over IMS/IP
</VoLTE>
</Setting>
Definition of ims APN:
<Profile>
<NetworkName>Digi.Mobil</NetworkName>
<IpVersion>ipv4</IpVersion>
<Editable>no</Editable>
<ProfileName>IMS</ProfileName>
<Auth>none</Auth>
<Protocol>http</Protocol>
<MTUSize>1500</MTUSize>
<PSparam>
<APN>ims</APN>
</PSparam>
</Profile>
2. /etc/epdg_apns_conf.xml - S8 Nougat&Oreo
<!-- Romania : RDS : ROM -->
<apn mnoname="RDS_RO"
connname="imsApn"
apnname="ims"
authtype="EAP"
subnettype="IPV4"
userauthtype="false"
pfs="false"
ownuritype="USER_FQDN"
ownidentity="023430123456701@nai.epc.mnc005.mcc226.3gppnetwork.org"
remoteuritype="KEY_ID"
remoteidentity="ims"
tunneltype="IPSEC_RAC"
ipsecencryption="IPSEC_ENCRYPTION_AES_CBC_128"
ipsecintegrity="IPSEC_INTEGRITY_HMAC_SHA1_96"
ipsecgroup="IPSEC_GROUP_MODP_1024"
ipseclifetime="IPSEC_LIFE_TYPE_SECONDS"
ipseclifevalue="86400"
ikeversion="IKE_VERSION_2"
ikeintegrity="IKE_INTEGRITY_HMAC_SHA1_96"
ikeencryption="IKE_ENCRYPTION_AES_CBC_128"
ikegroup="IKE_GROUP_MODP_1024"
ikeeaptype="EAP_METHOD_AKA"
ikelife="86400"
ikewindowsize="1"
ikedpdtimeout="60"
ikeconnectiontimeout="10"
ikenatvalue="30"
ikevirtualadaptername="tap0"
vendorattribute="P-CSCF-IPV4"
periodicdpdtimer="120"
mobike="false"
imei="NONE"
fastreauth="false"
/>
<!-- Romania : RDS : ROM -->
<settings mnoname="RDS_RO"
smartwifirssia="-74"
smartwifirssib="-85"
smartwifirssiroveinwifionly="-84"
smartwifirssiroveoutwifionly="-90"
smartwifirsrp1="-118"
smartwifirsrp2="0"
smartwifirsrp3="-110"
smartwificdmarssi="0"
smartpktlosspercent="100"
threshold4grovein="110"
threshold4groveout="118"
threshold3grovein="100"
threshold3groveout="110"
threshold2grovein="95"
threshold2groveout="105"
smartwifigsmecio="-15"
sysseltimer="30"
tepdgltetimer="30"
tepdg1xtimer="0"
tepdg1xscantimer="0"
hodelaytimer="0"
wifiipconfigtimer="10"
idimac="0"
idiimsi="1"
retry_enabled_for_always_on_apn="1"
smartwifitimer="0"
internet_pdn_keep_alive_timer="5400000"
epdgserverip="epdg.epc.mnc005.mcc226.pub.3gppnetwork.org"
dynamic_fqdn="0"
dynamic_userfqdn="1"
smart_wifi_ans_integration="1"
smart_wifi_rtcp_integration="1"
broadcast_ho_result="1"
attach_pdn="default"
alwayson_apntype="ims"
vowifi_pref="1"
ondemand_pdn_handoff="0"
is_throttle_enabled="1"
pcscfv4vendorattr="16389"
pcscfv6vendorattr="16390"
imeivendorattr="16391"
netinterfacenum="0"
epdgenable="on"
emergency_apntype="none"
is_dpd_allowed_in_connected_mode="1"
is_ipv6_enabled="0"
is_ipv6_preferred="0"
certi_path="none"
is_using_certi="0"
handover_support="1"
rtprtcplossratepercent="10"
thresholddpdlatency = "300"
/>
<iwlanapns version="632">
<vowifisettings>
<!-- wifi_call_enable 0 = off, 1 = on -->
<!-- wifi_call_preferred 1 = wifi pref, 2 = cs pref, 3 = wifi only, 4 = cs only -->
<!-- wifi_call_when_roaming -1 = not used, 0 = cs pref, 1 = wifi pref -->
<!-- GCF Test : GCF Test : GCF -->
<!-- RDS Romania ROM -->
<vowifi mnoname="RDS_RO"
wifi_call_enable="0"
wifi_call_preferred="1"
wifi_call_when_roaming="-1"
/>
3. /system/priv-app/imsservice/imsservice.apk - S8 Nougat
- globalsettings.json
"mnoname": "RDS_ro",
"note": "ims",
"srvcc_version": 10,
"note": "misc",
"show_volte_regi_icon": true,
"remove_icon_nosvc": 1
}
"note": "nohitsetting means, there is no matching MNO case",
"nohitsetting": {
"mnoname": "DEFAULT",
"note": "sip",
"enable_ciq": 0,
"enable_hasati": 0,
"note": "rcs",
"rcs_local_config_server": 0,
"rcs_custom_config_server_url": "",
"rcs_auto_config_pdn": 0,
"closed_group_chat": 0,
"rcs_ft_chunk_size": 10240,
"rcs_ish_chunk_size": 10240,
"msrp_cema": 0,
"pager_mode_size_limit": 1300,
"conf_subscribe_enabled": true,
"ft_cancel_memory_full": false,
"ft_hide_download_file": false,
"fthttp_trust_all_certs": false,
"max_adhoc_group_size": 10,
"rcs_disable_under_upsm": 0,
"support_chat_on_default_mms_app": 0,
"support_rcs_interworking_function": false,
"note": "xdm - xcap_root_uri_pref: 0 Manual (From xcap_root_uri), 1 tel + MSISDN, 2 sip:imsi@domain, 3 : sip:MSISDN@domain",
"agg_proxy_ip": "10.40.140.134",
"auth_proxy_ip": "10.40.140.134",
"auth_proxy_port": 8090,
"bsf_ip": "10.40.140.134",
"bsf_port": 8090,
"http_username": "",
"http_password": "test",
"xcap_root_uri": "",
"xcap_root_uri_pref": 0,
"xdm_user_id_domain": "",
"xdm_user_agent": "SAMSUNG IMS 6.0",
"apn_selection": "xcap",
"enable_gba": 0,
"note": "ims ims_enabled is checked from RIL, not IMS Frw",
"ims_enabled": false,
"iwlan_pani_format": "[PREFIX][NODE_ID]",
"dm_app_id": "ap2001",
"dm_user_disp_name": "APCPS",
"enable_group_chat_list_retrieve": 0,
"voice_domain_pref_eutran": 1,
"voice_domain_pref_utran": 1,
"ss_domain_setting": "CS",
"sms_write_uicc": "0",
"t_lte_911_fail": 20,
"ussd_domain_setting": "CS",
"emergency_domain_setting": "CS",
"volte_domestic_default_enabled": true,
"volte_international_default_enabled": false,
"vt_default_enabled": true,
"support_vowifi": false,
"vowifi_need_location_menu": false,
"srvcc_version": 0,
"pip": 0,
"note": "ss",
"ss_support_tls": false,
"ss_select_mode": true,
"ss_cb_select_mode": false,
"ss_support_media_type": 255,
"ss_select_ip_version": 0,
"ss_support_multi_dns": false,
"ss_support_retry": false,
"ss_csfb_with_imserror": true,
"ss_support_cp_element": false,
"ss_support_ss_element": false,
"ss_support_simservs_retry": true,
"ss_disconnect_xcap_pdn": false,
"ss_cf_busy_ruleid": "call-diversion-busy",
"ss_cf_not_reachable_ruleid": "call-diversion-not-reachable",
"ss_cf_no_answer_ruleId": "call-diversion-no-reply",
"ss_cf_no_replytimer_ruleid": "NoReplyTimer",
"ss_cf_not_logged_in_ruleid": "call-diversion-not-logged-in",
"ss_cf_unconditional_ruleid": "call-diversion-unconditional",
"ss_ocb_unconditional_ruleid": "",
"ss_ocb_international_ruleid": "",
"ss_ocb_international_ex_home_ruleid": "",
"ss_icb_unconditional_ruleid": "",
"ss_icb_roaming_ruleid": "",
"ss_icb_anonymous_ruleid": "",
"note": "misc",
"show_regi_info_in_sec_settings": false,
"show_volte_regi_icon": false,
"volte_regi_icon_id": "stat_notify_volte_service_avaliable",
"show_vowifi_regi_icon": false,
"vowifi_regi_icon_id": "stat_notify_wfc",
"vowifi_operator_label": "",
"vowifi_operator_label_ongoing": 0,
"vowifi_subtext_on_lockscreen": "",
"remove_icon_nosvc": 0,
"all_csfb_error_code_list": [],
"voice_csfb_error_code_list": [],
"video_csfb_error_code_list": [],
"e911_csfb_error_code_list": [],
"user_agent": "",
"rcs_groupchat_auto_rejoin": true,
"support_configserver":""
},
- imsprofile.json
"name": "RDS Romania for IMS PDN",
"mnoname": "RDS_ro",
"operator": [
"22605"
],
"sales_code": "ROM",
"pcscf_pref": 0,
"conference_uri": "sip:mmtel@conf-factory.ims.mnc005.mcc226.3gppnetwork.org",
"conference_dialog_type": "1",
"ringing_timer": 120,
"ringback_timer": 120,
"use_precondition": true,
"ipver": "ipv4",
"pdn": "ims",
"port": 5060,
"reg_enabled": true,
"timer": "1:2000,2:16000,4:17000,A:2000,B:32000,C:180000,D:32000,E:2000,F:32000,G:2000,H:128000,I:17000,J:128000,K:17000",
"enable_gruu": false,
"ignore_rtcp_timeout_on_hold_call": true,
"network": [
{
"type": "lte,wifi",
"services": [
"mmtel"
],
"enabled": true
}
]
}
- mnomap.json
Initial solution for VoLTE only, quick and dirty: edit the imsprofile.xml file. You can start with this one.
/data/user_de/0/com.sec.imsservice/shared_prefs/imsprofile.xml
<string name="241">{"name":"RDS Romania for IMS PDN","mnoname":"DEFAULT","operator":["22605"],"enabled":2,"pdn":"ims","transport":"udp-preferred","support_ipsec":false,"regi_algo":"AKAv1-MD5","auth_algo":"both","enc_algo":"all","subscribe_for_reg":true,"subscriber_timer":600000,"useragent":"[PRODUCT_MODEL]-[BUILD_VERSION] Samsung IMS 6.0","reg_expires":600000,"sip_uri_only":false,"enable_gruu":false,"sip_mobility":0,"session_refresh_method":1,"min_se":90,"session_refresher":"none","sip_compact_header":false,"remote_uri_type":"sip","need_naptr_dns":false,"support_roaming":false,"secure_client_port":5000,"secure_server_port":6000,"reregi_on_ratchange":"on_service_change","mss_size":1500,"reg_enabled":true,"timer":"1:2000,2:16000,4:17000,A:2000,B:32000,C:180000,D:32000,E:2000,F:32000,G:2000,H:128000,I:17000,J:128000,K:17000","emergency_support":false,"supported_geolocation_phase":0,"need_autoconfig":false,"use_msrp_bearer":false,"wifi_precondition_enabled":false,"use_precondition":true,"precondtion_initial_sendrecv":true,"use_provisional_response_100rel":false,"use_183_on_progress_incoming":false,"support_183_for_ir92v9_precondition":true,"is_rcs_telephony_feature_tag_required":false,"is_full_codec_offer_required":false,"session_expires":1800,"ringing_timer":120,"ringback_timer":120,"invite_timeout":180,"enable_mwi":false,"mwi_subscribe_expiry":7200,"conference_uri":"sip:mmtel@conf-factory.ims.mnc005.mcc226.3gppnetwork.org","conference_subscribe":"both_subscribe_unsubscribe","conference_dialog_type":"1","conference_referuri_type":"siptel","conference_referuri_asserted":"0","conference_use_anonymous_update":"0","support_merge_video_conference":false,"support_upgrade_video_conference":false,"pulling_server_uri":"","reg_retry_base_time":30,"reg_retry_max_time":1800,"smsc_set":"4444","audio_capabilities":"0","audio_codec_mode":"2","dtmf_mode":0,"video_capabilities":true,"enable_g711":true,"display_format":"vga-port","display_format_hevc":"vga-port","framerate":15,"rtp_timeout":20,"rtcp_timeout":20,"enable_rtcp_on_active_call":false,"ignore_rtcp_timeout_on_hold_call":true,"enable_av_sync":false,"audio_port_start":1234,"audio_port_end":0,"video_port_start":1574,"video_port_end":0,"text_port":49158,"amrnb_mode":"","amrwb_mode":"","audio_video_tx":1,"emm":1,"external_gtty":0,"audio_avpf":0,"audio_srtp":0,"video_avpf":0,"video_srtp":0,"video_as":700,"video_rs":4800,"video_rr":14400,"audio_as":38,"audio_rs":375,"audio_rr":1125,"amrnbbe_payload":118,"amrnboa_payload":96,"amrwbbe_payload":116,"amrwboa_payload":107,"amropen_payload":0,"h264_720p_payload":122,"h264_720pl_payload":123,"h264_vga_payload":116,"h264_vgal_payload":121,"h264_qvga_payload":118,"h264_qvgal_payload":103,"h264_cif_payload":124,"h264_cifl_payload":125,"h263_qcif_payload":34,"dtmf_nb_payload":110,"dtmf_wb_payload":111,"video_codec":"H264,H263","audio_codec":"AMRBE-WB,AMR-WB,AMRBE,AMR,DTMFWB,DTMF","packetization_mode":"1","dtmf_codec_mode":"0","mdmn_type":"NotSupport","enable_scr":true,"tty_type":1,"ptime":20,"maxptime":240,"audio_rtcpxr":0,"video_rtcpxr":0,"enable_evs_codec":false,"evs_discontinuous_transmission":"1","evs_dtx_recv":"1","evs_header_full":"0","evs_mode_switch":"0","evs_channel_send":"0","evs_channel_recv":"0","evs_channel_aware_receive":"-1","evs_codec_mode_request":"0","evs_bit_rate_send":"9.6-24.4","evs_bit_rate_receive":"9.6-24.4","evs_bandwidth_send":"nb-swb","evs_bandwidth_receive":"nb-swb","evs_payload":112,"evs_default_bandwidth":"nb-swb","evs_default_bitrate":"24.4","support_3gpp_ussi":false,"use_autoconfig":true,"closed_group_chat":false,"subscribe_max_entry":0,"publish_timer":0,"publish_expiry":3600,"extended_publish_timer":86400,"enable_gzip":false,"expire_header":true,"anonymous_fetch":false,"bad_event_expiry":0,"cap_cache_exp":0,"cap_poll_interval":0,"src_throttle_publish":60,"avail_cache_exp":0,"publish_err_retry_timer":21600,"poll_list_sub_exp":3,"cap_discovery":true,"self_port":5060,"support_incoming_history_info":false,"non_omc":false,"scm_version":0,"rcs_profile":"","network":[{"services":["mmtel"],"enabled":true,"type":"lte"},{"type":"wifi","services":["mmtel"],"enabled":true}],"sales_code":"ROM","pcscf_pref":0,"ipver":"ipv4","port":5060,"id":241}</string>