diff smsc-daemon/main.c @ 7:22ddb71f6883

smsc-daemon: convert to setting IPA name on the command line
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 25 Aug 2023 14:47:24 -0800
parents cef4677a4cf8
children d9db8661d9f3
line wrap: on
line diff
--- a/smsc-daemon/main.c	Fri Aug 25 14:28:54 2023 -0800
+++ b/smsc-daemon/main.c	Fri Aug 25 14:47:24 2023 -0800
@@ -23,6 +23,7 @@
 #include <osmocom/core/logging.h>
 
 #include <osmocom/gsm/gsup.h>
+#include <osmocom/gsm/ipa.h>
 
 #include <osmocom/gsupclient/gsup_client.h>
 
@@ -30,10 +31,11 @@
 
 extern int gsupc_read_cb(struct osmo_gsup_client *gsupc, struct msgb *msg);
 
-char smsc_addr_num[21];		/* maximum of 20 digits per GSM 04.11 */
-uint8_t smsc_addr_ton_npi;
+#define	MAX_IPA_NAME	31
+
 FILE *smsc_log_file;
-char smsc_gsup_name[26];
+char smsc_ipa_name[MAX_IPA_NAME+1];
+struct ipaccess_unit gsup_ipa_dev;
 struct osmo_gsup_client *g_gc;
 
 static struct log_info_cat default_categories[] = {
@@ -49,44 +51,16 @@
 	.num_cat = ARRAY_SIZE(default_categories),
 };
 
-static void parse_smsc_addr_arg(char *arg)
+static void set_ipa_name(const char *arg)
 {
-	char *cp, *dp, *endp;
-	unsigned ndig;
-
-	cp = arg;
-	dp = smsc_addr_num;
-	ndig = 0;
-	while (isdigit(*cp)) {
-		if (ndig >= 20) {
-			fprintf(stderr,
-	"error: SMSC address argument exceeds GSM 04.11 limit of 20 digits\n");
-			exit(1);
-		}
-		*dp++ = *cp++;
-		ndig++;
-	}
-	if (!ndig) {
-invalid:	fprintf(stderr,
-			"error: SMSC address argument \"%s\" is invalid\n",
-			arg);
+	if (strlen(arg) > MAX_IPA_NAME) {
+		fprintf(stderr, "error: IPA name argument is too long\n");
 		exit(1);
 	}
-	if (!*cp) {
-		/* default to TON=1, NPI=1, i.e., a pretend Global Title */
-		smsc_addr_ton_npi = 0x91;
-		return;
-	}
-	if (*cp++ != ',')
-		goto invalid;
-	if (!*cp)
-		goto invalid;
-	smsc_addr_ton_npi = strtoul(cp, &endp, 0);
-	if (*endp)
-		goto invalid;
+	strcpy(smsc_ipa_name, arg);
 }
 
-static void open_log_file(char *filename)
+static void open_log_file(const char *filename)
 {
 	smsc_log_file = fopen(filename, "a");
 	if (!smsc_log_file) {
@@ -95,6 +69,12 @@
 	}
 }
 
+static void build_ipa_dev(void)
+{
+	gsup_ipa_dev.unit_name = "SMSC";
+	gsup_ipa_dev.serno = smsc_ipa_name;
+}
+
 int main(int argc, char **argv)
 {
 	char *server_host = "127.0.0.1";
@@ -104,17 +84,17 @@
 	osmo_init_logging2(ctx, &smsc_log_info);
 
 	if (argc != 3) {
-		fprintf(stderr, "usage: %s smsc-addr logfile\n", argv[0]);
+		fprintf(stderr, "usage: %s ipa-name logfile\n", argv[0]);
 		exit(1);
 	}
-	parse_smsc_addr_arg(argv[1]);
+	set_ipa_name(argv[1]);
 	open_log_file(argv[2]);
 
-	sprintf(smsc_gsup_name, "SMSC-%s", smsc_addr_num);
-	g_gc = osmo_gsup_client_create(ctx, smsc_gsup_name, server_host,
+	build_ipa_dev();
+	g_gc = osmo_gsup_client_create2(ctx, &gsup_ipa_dev, server_host,
 					server_port, gsupc_read_cb, NULL);
 	if (!g_gc) {
-		fprintf(stderr, "error: osmo_gsup_client_create() failed\n");
+		fprintf(stderr, "error: osmo_gsup_client_create2() failed\n");
 		exit(1);
 	}