aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2022-07-30 17:08:41 +0700
committerMax <msuraev@sysmocom.de>2022-07-30 18:41:14 +0700
commitf80621540f3638e9bef7c54df6e0e9c00d95e511 (patch)
treeed03ef48e4c96857bd4169e41b9940cc1ccb5e7f
parentb278a2d7d1f5f6b443d1e47f992f4af79b5a735c (diff)
SMPP: move common functions to libsmpputil
Related: OS#5568 Change-Id: Icb046570803acb3eff89e2a4eb979c4899d485f7 Signed-off-by: Max <msuraev@sysmocom.de>
-rw-r--r--include/osmocom/msc/smpp.h5
-rw-r--r--src/libmsc/Makefile.am13
-rw-r--r--src/libmsc/smpp_smsc.c40
-rw-r--r--src/libmsc/smpp_smsc.h3
-rw-r--r--src/libmsc/smpp_utils.c52
-rw-r--r--src/utils/smpp_mirror.c31
-rw-r--r--tests/smpp/Makefile.am1
7 files changed, 70 insertions, 75 deletions
diff --git a/include/osmocom/msc/smpp.h b/include/osmocom/msc/smpp.h
index 3e919d232..b2c711421 100644
--- a/include/osmocom/msc/smpp.h
+++ b/include/osmocom/msc/smpp.h
@@ -4,6 +4,9 @@
#define SMPP_SYS_ID_LEN 15
#define SMPP_PASSWD_LEN 8
+#define MODE_7BIT 7
+#define MODE_8BIT 8
+
enum esme_read_state {
READ_ST_IN_LEN = 0,
READ_ST_IN_MSG = 1,
@@ -45,3 +48,5 @@ struct esme {
(resp)->sequence_number = (req)->sequence_number; }
uint32_t smpp_msgb_cmdid(struct msgb *msg);
+uint32_t esme_inc_seq_nr(struct esme *esme);
+int pack_and_send(struct esme *esme, uint32_t type, void *ptr);
diff --git a/src/libmsc/Makefile.am b/src/libmsc/Makefile.am
index b26c8c29f..fe59cf594 100644
--- a/src/libmsc/Makefile.am
+++ b/src/libmsc/Makefile.am
@@ -94,6 +94,10 @@ libmsc_a_SOURCES += \
smpp_utils.c \
$(NULL)
+libmsc_a_LIBADD = \
+ libsmpputil.a \
+ $(NULL)
+
noinst_LIBRARIES += \
libsmpputil.a \
$(NULL)
@@ -102,4 +106,13 @@ libsmpputil_a_SOURCES = \
smpp_utils.c \
$(NULL)
+libsmpputil_a_CFLAGS = \
+ $(LIBSMPP34_CFLAGS) \
+ $(LIBOSMOCORE_CFLAGS) \
+ $(NULL)
+
+libsmpputil_a_LIBADD = \
+ $(LIBSMPP34_LIBS) \
+ $(NULL)
+
endif
diff --git a/src/libmsc/smpp_smsc.c b/src/libmsc/smpp_smsc.c
index 9b81e2994..4f7854f0a 100644
--- a/src/libmsc/smpp_smsc.c
+++ b/src/libmsc/smpp_smsc.c
@@ -251,15 +251,6 @@ static void esme_destroy(struct osmo_esme *esme)
talloc_free(esme);
}
-static uint32_t esme_inc_seq_nr(struct esme *esme)
-{
- esme->own_seq_nr++;
- if (esme->own_seq_nr > 0x7fffffff)
- esme->own_seq_nr = 1;
-
- return esme->own_seq_nr;
-}
-
/*! \brief decrease the use/reference count, free if it is 0 */
void smpp_esme_put(struct osmo_esme *esme)
{
@@ -326,37 +317,6 @@ int smpp_route(const struct smsc *smsc, const struct osmo_smpp_addr *dest, struc
return GSM411_RP_CAUSE_MO_NUM_UNASSIGNED;
}
-/*! \brief pack a libsmpp34 data strcutrure and send it to the ESME */
-static int pack_and_send(struct esme *esme, uint32_t type, void *ptr)
-{
- struct msgb *msg;
- int rc, rlen;
-
- /* the socket was closed. Avoid allocating + enqueueing msgb, see
- * https://osmocom.org/issues/3278 */
- if (esme->wqueue.bfd.fd == -1)
- return -EIO;
-
- msg = msgb_alloc(4096, "SMPP_Tx");
- if (!msg)
- return -ENOMEM;
-
- rc = smpp34_pack(type, msg->tail, msgb_tailroom(msg), &rlen, ptr);
- if (rc != 0) {
- LOGPESMERR(esme, "during smpp34_pack()\n");
- msgb_free(msg);
- return -EINVAL;
- }
- msgb_put(msg, rlen);
-
- if (osmo_wqueue_enqueue(&esme->wqueue, msg) != 0) {
- LOGPESME(esme, LOGL_ERROR, "Write queue full. Dropping message\n");
- msgb_free(msg);
- return -EAGAIN;
- }
- return 0;
-}
-
/*! \brief transmit a generic NACK to a remote ESME */
static int smpp_tx_gen_nack(struct esme *esme, uint32_t seq, uint32_t status)
{
diff --git a/src/libmsc/smpp_smsc.h b/src/libmsc/smpp_smsc.h
index b850c0dcd..9752eba2b 100644
--- a/src/libmsc/smpp_smsc.h
+++ b/src/libmsc/smpp_smsc.h
@@ -15,9 +15,6 @@
#include <smpp34_structs.h>
#include <smpp34_params.h>
-#define MODE_7BIT 7
-#define MODE_8BIT 8
-
struct msc_a;
struct osmo_smpp_acl;
diff --git a/src/libmsc/smpp_utils.c b/src/libmsc/smpp_utils.c
index 094535471..e70ea0585 100644
--- a/src/libmsc/smpp_utils.c
+++ b/src/libmsc/smpp_utils.c
@@ -20,9 +20,19 @@
#include "config.h"
#include <time.h>
+#include <errno.h>
+#include <string.h>
+#include <arpa/inet.h>
-#include "smpp_smsc.h"
+#include <osmocom/core/msgb.h>
+#include <osmocom/core/write_queue.h>
#include <osmocom/core/logging.h>
+#include <osmocom/msc/debug.h>
+#include <osmocom/msc/smpp.h>
+
+#include <smpp34.h>
+#include <smpp34_structs.h>
+#include <smpp34_params.h>
/*! \brief retrieve SMPP command ID from a msgb */
uint32_t smpp_msgb_cmdid(struct msgb *msg)
@@ -31,6 +41,46 @@ uint32_t smpp_msgb_cmdid(struct msgb *msg)
return ntohl(*(uint32_t *)tmp);
}
+uint32_t esme_inc_seq_nr(struct esme *esme)
+{
+ esme->own_seq_nr++;
+ if (esme->own_seq_nr > 0x7fffffff)
+ esme->own_seq_nr = 1;
+
+ return esme->own_seq_nr;
+}
+
+/*! \brief pack a libsmpp34 data strcutrure and send it to the ESME */
+int pack_and_send(struct esme *esme, uint32_t type, void *ptr)
+{
+ struct msgb *msg;
+ int rc, rlen;
+
+ /* the socket was closed. Avoid allocating + enqueueing msgb, see
+ * https://osmocom.org/issues/3278 */
+ if (esme->wqueue.bfd.fd == -1)
+ return -EIO;
+
+ msg = msgb_alloc(4096, "SMPP_Tx");
+ if (!msg)
+ return -ENOMEM;
+
+ rc = smpp34_pack(type, msg->tail, msgb_tailroom(msg), &rlen, ptr);
+ if (rc != 0) {
+ LOGPESMERR(esme, "during smpp34_pack()\n");
+ msgb_free(msg);
+ return -EINVAL;
+ }
+ msgb_put(msg, rlen);
+
+ if (osmo_wqueue_enqueue(&esme->wqueue, msg) != 0) {
+ LOGPESME(esme, LOGL_ERROR, "Write queue full. Dropping message\n");
+ msgb_free(msg);
+ return -EAGAIN;
+ }
+ return 0;
+}
+
int smpp_determine_scheme(uint8_t dcs, uint8_t *data_coding, int *mode)
{
if ((dcs & 0xF0) == 0xF0) {
diff --git a/src/utils/smpp_mirror.c b/src/utils/smpp_mirror.c
index 0303ce93a..a7a7e61d0 100644
--- a/src/utils/smpp_mirror.c
+++ b/src/utils/smpp_mirror.c
@@ -23,37 +23,6 @@
/* FIXME: merge with smpp_smsc.c */
-static uint32_t esme_inc_seq_nr(struct esme *esme)
-{
- esme->own_seq_nr++;
- if (esme->own_seq_nr > 0x7fffffff)
- esme->own_seq_nr = 1;
-
- return esme->own_seq_nr;
-}
-static int pack_and_send(struct esme *esme, uint32_t type, void *ptr)
-{
- struct msgb *msg = msgb_alloc(4096, "SMPP_Tx");
- int rc, rlen;
- if (!msg)
- return -ENOMEM;
-
- rc = smpp34_pack(type, msg->tail, msgb_tailroom(msg), &rlen, ptr);
- if (rc != 0) {
- LOGPESMERR(esme, "during smpp34_pack()\n");
- msgb_free(msg);
- return -EINVAL;
- }
- msgb_put(msg, rlen);
-
- if (osmo_wqueue_enqueue(&esme->wqueue, msg) != 0) {
- LOGPESME(esme, LOGL_ERROR, "Write queue full. Dropping message\n");
- msgb_free(msg);
- return -EAGAIN;
- }
- return 0;
-}
-/* FIXME: merge with smpp_smsc.c */
static struct tlv_t *find_tlv(struct tlv_t *head, uint16_t tag)
{
diff --git a/tests/smpp/Makefile.am b/tests/smpp/Makefile.am
index 0e4834734..402f6ad79 100644
--- a/tests/smpp/Makefile.am
+++ b/tests/smpp/Makefile.am
@@ -38,4 +38,5 @@ smpp_test_SOURCES = \
smpp_test_LDADD = \
$(LIBOSMOCORE_LIBS) \
$(LIBOSMOGSM_LIBS) \
+ $(LIBSMPP34_LIBS) \
$(NULL)