dexter has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/38606?usp=email )
Change subject: pySim-shell: allow checking of APDU responses
......................................................................
pySim-shell: allow checking of APDU responses
The "apdu" command allows us to send custom APDUs to a card. This command is
often used in low level initialization scripts or tests. To stop the script
execution in case of an error, the command allows us to specify a status word
that must match the status word of the response. But we have no such mechanism
for the response itself. Let's add another parameter where we can pass a regex
that the response must match.
Related: OS#6367
Change-Id: I97bbcdf37bdcf00ad50a875b96940c211de7073d
---
M pySim-shell.py
1 file changed, 6 insertions(+), 0 deletions(-)
Approvals:
laforge: Looks good to me, but someone else must approve
fixeria: Looks good to me, approved
Jenkins Builder: Verified
diff --git a/pySim-shell.py b/pySim-shell.py
index 37d58ae..f53efd3 100755
--- a/pySim-shell.py
+++ b/pySim-shell.py
@@ -21,6 +21,7 @@
import json
import traceback
+import re
import cmd2
from packaging import version
@@ -239,6 +240,7 @@
apdu_cmd_parser = argparse.ArgumentParser()
apdu_cmd_parser.add_argument('--expect-sw', help='expect a specified status word', type=str, default=None)
+ apdu_cmd_parser.add_argument('--expect-response-regex', help='match response against regex', type=str, default=None)
apdu_cmd_parser.add_argument('--raw', help='Bypass the logical channel (and secure channel)', action='store_true')
apdu_cmd_parser.add_argument('APDU', type=is_hexstr, help='APDU as hex string')
@@ -264,6 +266,10 @@
if opts.expect_sw:
if not sw_match(sw, opts.expect_sw):
raise SwMatchError(sw, opts.expect_sw)
+ if opts.expect_response_regex:
+ response_regex_compiled = re.compile(opts.expect_response_regex)
+ if re.match(response_regex_compiled, data) is None:
+ raise ValueError("RESP does not match regex \'%s\'" % opts.expect_response_regex)
@cmd2.with_category(CUSTOM_CATEGORY)
def do_reset(self, opts):
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/38606?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I97bbcdf37bdcf00ad50a875b96940c211de7073d
Gerrit-Change-Number: 38606
Gerrit-PatchSet: 2
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
dexter has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/38603?usp=email )
Change subject: pySim-shell_test/utils: print logfile on all types of errors
......................................................................
pySim-shell_test/utils: print logfile on all types of errors
When pySim-shell has problems starting up, it exits with an error
code. This is detected by the testsuite, but it also causes an
early exit, so that the log file content are not printed.
Change-Id: Ic0f34eda32a7c557810abcb05a84e343741fdb8a
---
M tests/pySim-shell_test/utils.py
1 file changed, 8 insertions(+), 4 deletions(-)
Approvals:
Jenkins Builder: Verified
fixeria: Looks good to me, approved
laforge: Looks good to me, but someone else must approve
diff --git a/tests/pySim-shell_test/utils.py b/tests/pySim-shell_test/utils.py
index 348c9b1..c3cf7a2 100644
--- a/tests/pySim-shell_test/utils.py
+++ b/tests/pySim-shell_test/utils.py
@@ -265,11 +265,9 @@
# Execute commandline
cmdline += " > " + logfile_name + " 2>&1"
print("Executing: " + cmdline)
- rc = os.system(cmdline)
- if rc:
- raise RuntimeError("pySim-shell exits with error code %u" % rc)
+ py_sim_shell_rc = os.system(cmdline)
- # Check for exceptions
+ # Read logfile
logfile = open(logfile_name)
logfile_content = logfile.read()
if self.print_content:
@@ -278,6 +276,12 @@
print(logfile_content)
print("-----------------------8<-----------------------")
logfile.close()
+
+ # Exit early in case pySim-shell ran into a fundamental error
+ if py_sim_shell_rc:
+ raise RuntimeError("pySim-shell exits with error code %u" % py_sim_shell_rc)
+
+ # Check log for exceptions
exception_regex_compiled = re.compile('.*EXCEPTION.*')
exceptions_strings = re.findall(exception_regex_compiled, logfile_content)
if exceptions_strings != []:
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/38603?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Ic0f34eda32a7c557810abcb05a84e343741fdb8a
Gerrit-Change-Number: 38603
Gerrit-PatchSet: 4
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Attention is currently required from: lynxis lazus.
daniel has posted comments on this change by lynxis lazus. ( https://gerrit.osmocom.org/c/libosmocore/+/38631?usp=email )
Change subject: gsm 04.08: add P-TMSI type values
......................................................................
Patch Set 2: Code-Review+1
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/38631?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: If996ccf48781f9dc8872f314f327b89a51f5a312
Gerrit-Change-Number: 38631
Gerrit-PatchSet: 2
Gerrit-Owner: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <dwillmann(a)sysmocom.de>
Gerrit-Attention: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Comment-Date: Tue, 05 Nov 2024 10:59:43 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
Attention is currently required from: lynxis lazus.
pespin has posted comments on this change by lynxis lazus. ( https://gerrit.osmocom.org/c/libosmocore/+/38630?usp=email )
Change subject: gsm 04.08: add GSM48 IE GMM_ADD_IDENTITY/RAI2
......................................................................
Patch Set 1:
(1 comment)
Patchset:
PS1:
Feel free to merge once you fix the reference issue spotted by daniel.
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/38630?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I1861bae4b9c89a19500322de5670df1d46a6cd81
Gerrit-Change-Number: 38630
Gerrit-PatchSet: 1
Gerrit-Owner: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <dwillmann(a)sysmocom.de>
Gerrit-CC: pespin <pespin(a)sysmocom.de>
Gerrit-Attention: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Comment-Date: Tue, 05 Nov 2024 10:59:34 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Attention is currently required from: lynxis lazus.
Hello Jenkins Builder,
I'd like you to reexamine a change. Please visit
https://gerrit.osmocom.org/c/libosmocore/+/38631?usp=email
to look at the new patch set (#2).
The following approvals got outdated and were removed:
Verified-1 by Jenkins Builder
Change subject: gsm 04.08: add P-TMSI type values
......................................................................
gsm 04.08: add P-TMSI type values
Change-Id: If996ccf48781f9dc8872f314f327b89a51f5a312
---
M include/osmocom/gsm/protocol/gsm_04_08_gprs.h
1 file changed, 7 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/31/38631/2
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/38631?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newpatchset
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: If996ccf48781f9dc8872f314f327b89a51f5a312
Gerrit-Change-Number: 38631
Gerrit-PatchSet: 2
Gerrit-Owner: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Attention: lynxis lazus <lynxis(a)fe80.eu>
lynxis lazus has submitted this change. ( https://gerrit.osmocom.org/c/osmo-hlr/+/38422?usp=email )
Change subject: gsupclient: add missing SPDX line
......................................................................
gsupclient: add missing SPDX line
SPDX is a spec to describe the license of a file
in a machine readable format.
Change-Id: Iaded691cc0eb2f5dd85efd1915ddef1a747fe518
---
M src/gsupclient/cni_peer_id.c
M src/gsupclient/gsup_client.c
M src/gsupclient/gsup_req.c
3 files changed, 6 insertions(+), 0 deletions(-)
Approvals:
Jenkins Builder: Verified
fixeria: Looks good to me, but someone else must approve
pespin: Looks good to me, approved
diff --git a/src/gsupclient/cni_peer_id.c b/src/gsupclient/cni_peer_id.c
index ab36959..c4a31b6 100644
--- a/src/gsupclient/cni_peer_id.c
+++ b/src/gsupclient/cni_peer_id.c
@@ -2,6 +2,8 @@
*
* All Rights Reserved
*
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
diff --git a/src/gsupclient/gsup_client.c b/src/gsupclient/gsup_client.c
index 4041366..3329361 100644
--- a/src/gsupclient/gsup_client.c
+++ b/src/gsupclient/gsup_client.c
@@ -6,6 +6,8 @@
* Author: Jacob Erlbeck
* Author: Neels Hofmeyr
*
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
diff --git a/src/gsupclient/gsup_req.c b/src/gsupclient/gsup_req.c
index 2e7caf1..bde002e 100644
--- a/src/gsupclient/gsup_req.c
+++ b/src/gsupclient/gsup_req.c
@@ -2,6 +2,8 @@
*
* All Rights Reserved
*
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
--
To view, visit https://gerrit.osmocom.org/c/osmo-hlr/+/38422?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: osmo-hlr
Gerrit-Branch: master
Gerrit-Change-Id: Iaded691cc0eb2f5dd85efd1915ddef1a747fe518
Gerrit-Change-Number: 38422
Gerrit-PatchSet: 1
Gerrit-Owner: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
lynxis lazus has submitted this change. ( https://gerrit.osmocom.org/c/osmo-hlr/+/38423?usp=email )
Change subject: debian/copyright: add gsup_client under GPLv2+
......................................................................
debian/copyright: add gsup_client under GPLv2+
Change-Id: Idddcd6356af76987bf57ecd21096299cb2ba896f
---
M debian/copyright
1 file changed, 18 insertions(+), 0 deletions(-)
Approvals:
Jenkins Builder: Verified
fixeria: Looks good to me, but someone else must approve
laforge: Looks good to me, approved
pespin: Looks good to me, but someone else must approve
diff --git a/debian/copyright b/debian/copyright
index 374c9a2..b66ed88 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -6,6 +6,10 @@
Copyright: 2016-2022 Sysmocom s. f. m. c. GmbH <info(a)sysmocom.de>
License: AGPL-3+
+Files: src/gsupclient/*
+Copyright: 2014-2016,2019 by sysmocom s.f.m.c. GmbH <info(a)sysmocom.de>
+License: GPL-2+
+
License: AGPL-3+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
@@ -19,3 +23,17 @@
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+License: GPL-2+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
--
To view, visit https://gerrit.osmocom.org/c/osmo-hlr/+/38423?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: osmo-hlr
Gerrit-Branch: master
Gerrit-Change-Id: Idddcd6356af76987bf57ecd21096299cb2ba896f
Gerrit-Change-Number: 38423
Gerrit-PatchSet: 1
Gerrit-Owner: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
lynxis lazus has submitted this change. ( https://gerrit.osmocom.org/c/osmo-hlr/+/38112?usp=email )
Change subject: gsupclient: Introduce gsup_client_mux
......................................................................
gsupclient: Introduce gsup_client_mux
GSUP supports different message classes (e.g. SMS, USSD, Subscriber management),
within a daemon, the messages are usually handled in different parts of it.
The gsup client mux allow to place callbacks for the different message class.
This code original comes from the osmo-msc code and is here
re-licensed under the GPLv2.
Change-Id: I916c1bb6cfc48f92fc5db2b5c914eb1b4e25fa7f
---
M include/Makefile.am
A include/osmocom/gsupclient/gsup_client_mux.h
M src/gsupclient/Makefile.am
A src/gsupclient/gsup_client_mux.c
4 files changed, 252 insertions(+), 0 deletions(-)
Approvals:
laforge: Looks good to me, but someone else must approve
pespin: Looks good to me, but someone else must approve
fixeria: Looks good to me, but someone else must approve
lynxis lazus: Looks good to me, approved
Jenkins Builder: Verified
diff --git a/include/Makefile.am b/include/Makefile.am
index e93fe29..f3baca6 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -3,6 +3,7 @@
nobase_include_HEADERS = \
osmocom/gsupclient/cni_peer_id.h \
osmocom/gsupclient/gsup_client.h \
+ osmocom/gsupclient/gsup_client_mux.h \
osmocom/gsupclient/gsup_req.h \
osmocom/mslookup/mdns.h \
osmocom/mslookup/mdns_sock.h \
diff --git a/include/osmocom/gsupclient/gsup_client_mux.h b/include/osmocom/gsupclient/gsup_client_mux.h
new file mode 100644
index 0000000..537ae60
--- /dev/null
+++ b/include/osmocom/gsupclient/gsup_client_mux.h
@@ -0,0 +1,56 @@
+/*
+ * (C) 2019 by sysmocom - s.f.m.c. GmbH <info(a)sysmocom.de>
+ * All Rights Reserved
+ *
+ * Author: Neels Hofmeyr
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <osmocom/gsm/gsup.h>
+
+struct gsup_client_mux;
+struct ipaccess_unit;
+
+struct gsup_client_mux_rx_cb {
+ int (*func)(struct gsup_client_mux *gcm, void *data, const struct osmo_gsup_message *gsup_msg);
+ void *data;
+};
+
+/* A GSUP client shared between code paths for various GSUP Message Classes.
+ * The main task is to dispatch GSUP messages to code paths corresponding to the respective Message Class, i.e.
+ * subscriber management, SMS, SS/USSD and inter-MSC messaging.
+ * If a GSUP Message Class IE is present in the message, the received message is dispatched directly to the rx_cb entry
+ * for that Message Class. Otherwise, the Message Class is determined by a switch() on the Message Type.*/
+struct gsup_client_mux {
+ struct osmo_gsup_client *gsup_client;
+
+ /* Target clients by enum osmo_gsup_message_class */
+ struct gsup_client_mux_rx_cb rx_cb[OSMO_GSUP_MESSAGE_CLASS_ARRAYSIZE];
+};
+
+struct gsup_client_mux *gsup_client_mux_alloc(void *talloc_ctx);
+int gsup_client_mux_start(struct gsup_client_mux *gcm, const char *gsup_server_addr_str, uint16_t gsup_server_port,
+ struct ipaccess_unit *ipa_dev);
+
+int gsup_client_mux_tx(struct gsup_client_mux *gcm, const struct osmo_gsup_message *gsup_msg);
+void gsup_client_mux_tx_set_source(const struct gsup_client_mux *gcm, struct osmo_gsup_message *gsup_msg);
+void gsup_client_mux_tx_error_reply(struct gsup_client_mux *gcm, const struct osmo_gsup_message *gsup_orig,
+ enum gsm48_gmm_cause cause);
+
+int gsup_client_mux_rx(struct osmo_gsup_client *gsup_client, struct msgb *msg);
diff --git a/src/gsupclient/Makefile.am b/src/gsupclient/Makefile.am
index a627ccc..ab9c478 100644
--- a/src/gsupclient/Makefile.am
+++ b/src/gsupclient/Makefile.am
@@ -11,6 +11,7 @@
libosmo_gsup_client_la_SOURCES = \
cni_peer_id.c \
gsup_client.c \
+ gsup_client_mux.c \
gsup_req.c \
$(NULL)
diff --git a/src/gsupclient/gsup_client_mux.c b/src/gsupclient/gsup_client_mux.c
new file mode 100644
index 0000000..7699ca1
--- /dev/null
+++ b/src/gsupclient/gsup_client_mux.c
@@ -0,0 +1,194 @@
+/* Directing individual GSUP messages to their respective handlers. */
+/*
+ * (C) 2019 by sysmocom - s.f.m.c. GmbH <info(a)sysmocom.de>
+ * All Rights Reserved
+ *
+ * Author: Neels Hofmeyr
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include <errno.h>
+
+#include <osmocom/core/logging.h>
+
+#include <osmocom/gsupclient/gsup_client.h>
+#include <osmocom/gsupclient/gsup_client_mux.h>
+
+static enum osmo_gsup_message_class gsup_client_mux_classify(struct gsup_client_mux *gcm,
+ const struct osmo_gsup_message *gsup_msg)
+{
+ if (gsup_msg->message_class)
+ return gsup_msg->message_class;
+
+ LOGP(DLGSUP, LOGL_DEBUG, "No explicit GSUP Message Class, trying to guess from message type %s\n",
+ osmo_gsup_message_type_name(gsup_msg->message_type));
+
+ switch (gsup_msg->message_type) {
+ case OSMO_GSUP_MSGT_PROC_SS_REQUEST:
+ case OSMO_GSUP_MSGT_PROC_SS_RESULT:
+ case OSMO_GSUP_MSGT_PROC_SS_ERROR:
+ return OSMO_GSUP_MESSAGE_CLASS_USSD;
+
+ /* GSM 04.11 code implementing MO SMS */
+ case OSMO_GSUP_MSGT_MO_FORWARD_SM_ERROR:
+ case OSMO_GSUP_MSGT_MO_FORWARD_SM_RESULT:
+ case OSMO_GSUP_MSGT_READY_FOR_SM_ERROR:
+ case OSMO_GSUP_MSGT_READY_FOR_SM_RESULT:
+ case OSMO_GSUP_MSGT_MT_FORWARD_SM_REQUEST:
+ return OSMO_GSUP_MESSAGE_CLASS_SMS;
+
+ default:
+ return OSMO_GSUP_MESSAGE_CLASS_SUBSCRIBER_MANAGEMENT;
+ }
+}
+
+/* Non-static for unit tests */
+int gsup_client_mux_rx(struct osmo_gsup_client *gsup_client, struct msgb *msg)
+{
+ struct gsup_client_mux *gcm = gsup_client->data;
+ struct osmo_gsup_message gsup;
+ enum osmo_gsup_message_class message_class;
+ int rc;
+
+ rc = osmo_gsup_decode(msgb_l2(msg), msgb_l2len(msg), &gsup);
+ if (rc < 0) {
+ LOGP(DLGSUP, LOGL_ERROR, "Failed to decode GSUP message: '%s' (%d) [ %s]\n",
+ get_value_string(gsm48_gmm_cause_names, -rc), -rc, osmo_hexdump(msg->data, msg->len));
+ goto msgb_free_and_return;
+ }
+
+ if (!gsup.imsi[0]) {
+ LOGP(DLGSUP, LOGL_ERROR, "Failed to decode GSUP message: missing IMSI\n");
+ if (OSMO_GSUP_IS_MSGT_REQUEST(gsup.message_type))
+ gsup_client_mux_tx_error_reply(gcm, &gsup, GMM_CAUSE_INV_MAND_INFO);
+ rc = -GMM_CAUSE_INV_MAND_INFO;
+ goto msgb_free_and_return;
+ }
+
+ message_class = gsup_client_mux_classify(gcm, &gsup);
+
+ if (message_class <= OSMO_GSUP_MESSAGE_CLASS_UNSET || message_class >= ARRAY_SIZE(gcm->rx_cb)) {
+ LOGP(DLGSUP, LOGL_ERROR, "Failed to classify GSUP message target\n");
+ rc = -EINVAL;
+ goto msgb_free_and_return;
+ }
+
+ if (!gcm->rx_cb[message_class].func) {
+ LOGP(DLGSUP, LOGL_ERROR, "No receiver set up for GSUP Message Class %s\n", osmo_gsup_message_class_name(message_class));
+ rc = -ENOTSUP;
+ goto msgb_free_and_return;
+ }
+
+ rc = gcm->rx_cb[message_class].func(gcm, gcm->rx_cb[message_class].data, &gsup);
+
+msgb_free_and_return:
+ msgb_free(msg);
+ return rc;
+}
+
+/* Make it clear that struct gsup_client_mux should be talloc allocated, so that it can be used as talloc parent. */
+struct gsup_client_mux *gsup_client_mux_alloc(void *talloc_ctx)
+{
+ return talloc_zero(talloc_ctx, struct gsup_client_mux);
+}
+
+/* Start a GSUP client to serve this gsup_client_mux. */
+int gsup_client_mux_start(struct gsup_client_mux *gcm, const char *gsup_server_addr_str, uint16_t gsup_server_port,
+ struct ipaccess_unit *ipa_dev)
+{
+ gcm->gsup_client = osmo_gsup_client_create2(gcm, ipa_dev,
+ gsup_server_addr_str,
+ gsup_server_port,
+ &gsup_client_mux_rx, NULL);
+ if (!gcm->gsup_client)
+ return -ENOMEM;
+ gcm->gsup_client->data = gcm;
+ return 0;
+}
+
+int gsup_client_mux_tx(struct gsup_client_mux *gcm, const struct osmo_gsup_message *gsup_msg)
+{
+ struct msgb *msg;
+ int rc;
+
+ if (!gcm || !gcm->gsup_client) {
+ LOGP(DLGSUP, LOGL_ERROR, "GSUP link is down, cannot send GSUP message\n");
+ return -ENOTSUP;
+ }
+
+ msg = osmo_gsup_client_msgb_alloc();
+ rc = osmo_gsup_encode(msg, gsup_msg);
+ if (rc < 0) {
+ LOGP(DLGSUP, LOGL_ERROR, "Failed to encode GSUP message: '%s'\n", strerror(-rc));
+ return rc;
+ }
+
+ return osmo_gsup_client_send(gcm->gsup_client, msg);
+}
+
+/* Set GSUP source_name to our local IPA name */
+void gsup_client_mux_tx_set_source(const struct gsup_client_mux *gcm,
+ struct osmo_gsup_message *gsup_msg)
+{
+ const char *local_msc_name;
+
+ if (!gcm)
+ return;
+ if (!gcm->gsup_client)
+ return;
+ if (!gcm->gsup_client->ipa_dev)
+ return;
+ local_msc_name = gcm->gsup_client->ipa_dev->serno;
+ if (!local_msc_name)
+ return;
+ gsup_msg->source_name = (const uint8_t *) local_msc_name;
+ gsup_msg->source_name_len = strlen(local_msc_name) + 1;
+}
+
+/* Transmit GSUP error in response to original message */
+void gsup_client_mux_tx_error_reply(struct gsup_client_mux *gcm, const struct osmo_gsup_message *gsup_orig,
+ enum gsm48_gmm_cause cause)
+{
+ struct osmo_gsup_message gsup_reply;
+
+ /* No need to answer if we couldn't parse an ERROR message type, only REQUESTs need an error reply. */
+ if (!OSMO_GSUP_IS_MSGT_REQUEST(gsup_orig->message_type))
+ return;
+
+ gsup_reply = (struct osmo_gsup_message){
+ .cause = cause,
+ .message_type = OSMO_GSUP_TO_MSGT_ERROR(gsup_orig->message_type),
+ .message_class = gsup_orig->message_class,
+ .destination_name = gsup_orig->source_name,
+ .destination_name_len = gsup_orig->source_name_len,
+
+ /* RP-Message-Reference is mandatory for SM Service */
+ .sm_rp_mr = gsup_orig->sm_rp_mr,
+ };
+
+ OSMO_STRLCPY_ARRAY(gsup_reply.imsi, gsup_orig->imsi);
+ gsup_client_mux_tx_set_source(gcm, &gsup_reply);
+
+ /* For SS/USSD, it's important to keep both session state and ID IEs */
+ if (gsup_orig->session_state != OSMO_GSUP_SESSION_STATE_NONE) {
+ gsup_reply.session_state = OSMO_GSUP_SESSION_STATE_END;
+ gsup_reply.session_id = gsup_orig->session_id;
+ }
+
+ if (osmo_gsup_client_enc_send(gcm->gsup_client, &gsup_reply))
+ LOGP(DLGSUP, LOGL_ERROR, "Failed to send Error reply (imsi=%s)\n",
+ osmo_quote_str(gsup_orig->imsi, -1));
+}
--
To view, visit https://gerrit.osmocom.org/c/osmo-hlr/+/38112?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: osmo-hlr
Gerrit-Branch: master
Gerrit-Change-Id: I916c1bb6cfc48f92fc5db2b5c914eb1b4e25fa7f
Gerrit-Change-Number: 38112
Gerrit-PatchSet: 5
Gerrit-Owner: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>