From 832ab156e95916fe57729d8b53456d1d7d3b50fb Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Sat, 9 Apr 2022 00:45:37 +0900 Subject: [PATCH] Revert "Revert "Functionality for send sms with using IMS service. (#1477)"" This reverts commit b732d7bcc543493ffd5c18e1dbb386d7c9a2f352. --- configs/open5gs/hss.yaml.in | 2 + src/hss/hss-context.c | 187 ++++++++++++++++++++++++++++++++++++ src/hss/hss-context.h | 1 + 3 files changed, 190 insertions(+) diff --git a/configs/open5gs/hss.yaml.in b/configs/open5gs/hss.yaml.in index 6030b0caa..675556720 100644 --- a/configs/open5gs/hss.yaml.in +++ b/configs/open5gs/hss.yaml.in @@ -26,6 +26,8 @@ logger: hss: freeDiameter: @sysconfdir@/freeDiameter/hss.conf +# sms_over_ims: "sip:smsc.mnc001.mcc001.3gppnetwork.org:7060;transport=tcp" + # # parameter: # diff --git a/src/hss/hss-context.c b/src/hss/hss-context.c index 2b6a0fb91..01fbace93 100644 --- a/src/hss/hss-context.c +++ b/src/hss/hss-context.c @@ -323,6 +323,9 @@ int hss_context_parse_config(void) ogs_warn("unknown key `%s`", fd_key); } } + } else if (!strcmp(hss_key, "sms_over_ims")) { + self.sms_over_ims = + ogs_yaml_iter_value(&hss_iter); } else ogs_warn("unknown key `%s`", hss_key); } @@ -952,6 +955,190 @@ char *hss_cx_download_user_data( ogs_assert(user_data); } + if(self.sms_over_ims) { + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_ifc_s); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_priority_s, + "2", + ogs_diam_cx_xml_priority_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_tp_s); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_cnf_s, + "1", + ogs_diam_cx_xml_cnf_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_spt_s); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_condition_negated_s, + "0", + ogs_diam_cx_xml_condition_negated_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_group_s, + "1", + ogs_diam_cx_xml_group_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_method_s, + "MESSAGE", + ogs_diam_cx_xml_method_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_extension_s); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_registration_type_s, + "0", + ogs_diam_cx_xml_registration_type_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_extension_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_spt_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_spt_s); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_condition_negated_s, + "0", + ogs_diam_cx_xml_condition_negated_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_group_s, + "2", + ogs_diam_cx_xml_group_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_sip_hdr_s); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_header_s, + "Content-Type", + ogs_diam_cx_xml_header_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_content_s, + "application/vnd.3gpp.sms", + ogs_diam_cx_xml_content_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_sip_hdr_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_extension_s); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_registration_type_s, + "0", + ogs_diam_cx_xml_registration_type_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_extension_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_spt_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_spt_s); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_condition_negated_s, + "0", + ogs_diam_cx_xml_condition_negated_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_group_s, + "3", + ogs_diam_cx_xml_group_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_session_case_s, + "0", + ogs_diam_cx_xml_session_case_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_extension_s); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_registration_type_s, + "0", + ogs_diam_cx_xml_registration_type_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_extension_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_spt_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_tp_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_app_server_s); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_server_name_s, + self.sms_over_ims, + ogs_diam_cx_xml_server_name_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s%s%s", + ogs_diam_cx_xml_default_handling_s, + "0", + ogs_diam_cx_xml_default_handling_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_app_server_e); + ogs_assert(user_data); + + user_data = ogs_mstrcatf(user_data, "%s", + ogs_diam_cx_xml_ifc_e); + ogs_assert(user_data); + } + user_data = ogs_mstrcatf(user_data, "%s", ogs_diam_cx_xml_service_profile_e); ogs_assert(user_data); diff --git a/src/hss/hss-context.h b/src/hss/hss-context.h index fa0886cec..e9d71d708 100644 --- a/src/hss/hss-context.h +++ b/src/hss/hss-context.h @@ -38,6 +38,7 @@ extern int __hss_log_domain; typedef struct _hss_context_t { const char *diam_conf_path;/* HSS Diameter conf path */ ogs_diam_config_t *diam_config; /* HSS Diameter config */ + const char *sms_over_ims; /* SMS over IMS */ ogs_thread_mutex_t db_lock; ogs_thread_mutex_t cx_lock;