diff options
author | Max <msuraev@sysmocom.de> | 2022-07-30 17:08:41 +0700 |
---|---|---|
committer | Max <msuraev@sysmocom.de> | 2022-07-30 18:41:14 +0700 |
commit | f80621540f3638e9bef7c54df6e0e9c00d95e511 (patch) | |
tree | ed03ef48e4c96857bd4169e41b9940cc1ccb5e7f | |
parent | b278a2d7d1f5f6b443d1e47f992f4af79b5a735c (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.h | 5 | ||||
-rw-r--r-- | src/libmsc/Makefile.am | 13 | ||||
-rw-r--r-- | src/libmsc/smpp_smsc.c | 40 | ||||
-rw-r--r-- | src/libmsc/smpp_smsc.h | 3 | ||||
-rw-r--r-- | src/libmsc/smpp_utils.c | 52 | ||||
-rw-r--r-- | src/utils/smpp_mirror.c | 31 | ||||
-rw-r--r-- | tests/smpp/Makefile.am | 1 |
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) |