msuraev has submitted this change. ( https://gerrit.osmocom.org/c/osmo-msc/+/28844 )
Change subject: Introduce libsmpputil ......................................................................
Introduce libsmpputil
As part of preparation for libosmo-netif migration let's move common SMPP code into separate build-time library and use it for both smpp_mirror and OsmoMSC renaming the files if necessary.
While at it we also fix id/password legth limits in smpp_mirror and drop unused fields from ESME struct.
Related: OS#5568 Change-Id: I61910651bc7c188dc2fb67d96189a66a47e7e8fb --- M configure.ac M include/osmocom/Makefile.am M include/osmocom/msc/Makefile.am D include/osmocom/msc/smpp.h A include/osmocom/smpp/Makefile.am A include/osmocom/smpp/smpp.h R include/osmocom/smpp/smpp_smsc.h M src/Makefile.am M src/libmsc/Makefile.am M src/libmsc/gsm_04_11.c A src/libsmpputil/Makefile.am R src/libsmpputil/smpp_msc.c R src/libsmpputil/smpp_smsc.c R src/libsmpputil/smpp_utils.c R src/libsmpputil/smpp_vty.c M src/osmo-msc/Makefile.am M src/osmo-msc/msc_main.c M src/utils/Makefile.am M src/utils/smpp_mirror.c M tests/db_sms/Makefile.am M tests/msc_vlr/Makefile.am M tests/smpp/Makefile.am M tests/smpp/smpp_test.c M tests/sms_queue/Makefile.am M tests/stubs.c 25 files changed, 114 insertions(+), 101 deletions(-)
Approvals: Jenkins Builder: Verified fixeria: Looks good to me, but someone else must approve laforge: Looks good to me, approved
diff --git a/configure.ac b/configure.ac index 21056f9..41e51da 100644 --- a/configure.ac +++ b/configure.ac @@ -234,9 +234,11 @@ include/Makefile include/osmocom/Makefile include/osmocom/msc/Makefile + include/osmocom/smpp/Makefile src/Makefile src/libmsc/Makefile src/libvlr/Makefile + src/libsmpputil/Makefile src/osmo-msc/Makefile src/utils/Makefile tests/Makefile diff --git a/include/osmocom/Makefile.am b/include/osmocom/Makefile.am index 4d80637..b07a004 100644 --- a/include/osmocom/Makefile.am +++ b/include/osmocom/Makefile.am @@ -1,3 +1,4 @@ SUBDIRS = \ msc \ + smpp \ $(NULL) diff --git a/include/osmocom/msc/Makefile.am b/include/osmocom/msc/Makefile.am index faf1048..adda44c 100644 --- a/include/osmocom/msc/Makefile.am +++ b/include/osmocom/msc/Makefile.am @@ -45,7 +45,6 @@ sgs_vty.h \ signal.h \ silent_call.h \ - smpp.h \ sms_queue.h \ transaction.h \ vlr.h \ diff --git a/include/osmocom/msc/smpp.h b/include/osmocom/msc/smpp.h deleted file mode 100644 index bcdac8f..0000000 --- a/include/osmocom/msc/smpp.h +++ /dev/null @@ -1,4 +0,0 @@ -#pragma once - -int smpp_openbsc_alloc_init(void *ctx); -int smpp_openbsc_start(struct gsm_network *net); diff --git a/include/osmocom/smpp/Makefile.am b/include/osmocom/smpp/Makefile.am new file mode 100644 index 0000000..5ad34ad --- /dev/null +++ b/include/osmocom/smpp/Makefile.am @@ -0,0 +1,4 @@ +noinst_HEADERS = \ + smpp.h \ + smpp_smsc.h \ + $(NULL) diff --git a/include/osmocom/smpp/smpp.h b/include/osmocom/smpp/smpp.h new file mode 100644 index 0000000..cc0e800 --- /dev/null +++ b/include/osmocom/smpp/smpp.h @@ -0,0 +1,31 @@ +#pragma once + +#include <osmocom/msc/gsm_data.h> + +/* Length limits according to SMPP 3.4 spec including NUL-byte: */ +#define SMPP_SYS_ID_LEN 15 +#define SMPP_PASSWD_LEN 8 + +enum esme_read_state { + READ_ST_IN_LEN = 0, + READ_ST_IN_MSG = 1, +}; + +/*! \brief Ugly wrapper. libsmpp34 should do this itself! */ +#define SMPP34_UNPACK(rc, type, str, data, len) { \ + memset(str, 0, sizeof(*str)); \ + rc = smpp34_unpack(type, str, data, len); } + +#define PACK_AND_SEND(esme, ptr) pack_and_send(esme, (ptr)->command_id, ptr) + +/*! \brief initialize the libsmpp34 data structure for a response */ +#define INIT_RESP(type, resp, req) { \ + memset((resp), 0, sizeof(*(resp))); \ + (resp)->command_length = 0; \ + (resp)->command_id = type; \ + (resp)->command_status = ESME_ROK; \ + (resp)->sequence_number = (req)->sequence_number; } + +uint32_t smpp_msgb_cmdid(struct msgb *msg); +int smpp_openbsc_alloc_init(void *ctx); +int smpp_openbsc_start(struct gsm_network *net); diff --git a/src/libmsc/smpp_smsc.h b/include/osmocom/smpp/smpp_smsc.h similarity index 95% rename from src/libmsc/smpp_smsc.h rename to include/osmocom/smpp/smpp_smsc.h index 76772a3..fb5164f 100644 --- a/src/libmsc/smpp_smsc.h +++ b/include/osmocom/smpp/smpp_smsc.h @@ -1,5 +1,4 @@ -#ifndef _SMPP_SMSC_H -#define _SMPP_SMSC_H +#pragma once
#include <sys/socket.h> #include <netinet/in.h> @@ -8,24 +7,17 @@ #include <osmocom/core/msgb.h> #include <osmocom/core/write_queue.h> #include <osmocom/core/timer.h> +#include <osmocom/smpp/smpp.h>
#include <smpp34.h> #include <smpp34_structs.h> #include <smpp34_params.h>
-#define SMPP_SYS_ID_LEN 15 -#define SMPP_PASSWD_LEN 8 - #define MODE_7BIT 7 #define MODE_8BIT 8
struct msc_a;
-enum esme_read_state { - READ_ST_IN_LEN = 0, - READ_ST_IN_MSG = 1, -}; - struct osmo_smpp_acl;
struct osmo_smpp_addr { @@ -164,4 +156,3 @@
bool smpp_route_smpp_first(); int smpp_try_deliver(struct gsm_sms *sms, struct msc_a *msc_a); -#endif diff --git a/src/Makefile.am b/src/Makefile.am index 4e7cea1..e23ab10 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -25,8 +25,16 @@ libmsc \ $(NULL)
+if BUILD_SMPP + +SUBDIRS += \ + libsmpputil \ + utils \ + $(NULL) + +endif + # Programs SUBDIRS += \ osmo-msc \ - utils \ $(NULL) diff --git a/src/libmsc/Makefile.am b/src/libmsc/Makefile.am index d3b6035..de02a17 100644 --- a/src/libmsc/Makefile.am +++ b/src/libmsc/Makefile.am @@ -20,9 +20,6 @@ $(LIBOSMONETIF_CFLAGS) \ $(NULL)
-noinst_HEADERS = \ - $(NULL) - noinst_LIBRARIES = \ libmsc.a \ $(NULL) @@ -81,16 +78,3 @@ ran_msg_iu.c \ $(NULL) endif - -if BUILD_SMPP -noinst_HEADERS += \ - smpp_smsc.h \ - $(NULL) - -libmsc_a_SOURCES += \ - smpp_smsc.c \ - smpp_openbsc.c \ - smpp_vty.c \ - smpp_utils.c \ - $(NULL) -endif diff --git a/src/libmsc/gsm_04_11.c b/src/libmsc/gsm_04_11.c index 743e272..adc9d88 100644 --- a/src/libmsc/gsm_04_11.c +++ b/src/libmsc/gsm_04_11.c @@ -58,7 +58,7 @@ #include <osmocom/msc/paging.h>
#ifdef BUILD_SMPP -#include "smpp_smsc.h" +#include <osmocom/smpp/smpp_smsc.h> #endif
void *tall_gsms_ctx; @@ -1389,4 +1389,3 @@ trans_free(trans); } } - diff --git a/src/libsmpputil/Makefile.am b/src/libsmpputil/Makefile.am new file mode 100644 index 0000000..b180ddf --- /dev/null +++ b/src/libsmpputil/Makefile.am @@ -0,0 +1,25 @@ +AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir) +AM_CFLAGS= \ + -Wall \ + $(LIBOSMOCORE_CFLAGS) \ + $(LIBOSMOVTY_CFLAGS) \ + $(LIBOSMOSCCP_CFLAGS) \ + $(LIBOSMOGSM_CFLAGS) \ + $(LIBOSMONETIF_CFLAGS) \ + $(LIBOSMOMGCPCLIENT_CFLAGS) \ + $(LIBOSMOGSUPCLIENT_CFLAGS) \ + $(LIBSMPP34_CFLAGS) \ + $(COVERAGE_CFLAGS) \ + $(NULL) + +noinst_HEADERS = \ + $(NULL) + +noinst_LIBRARIES = libsmpputil.a + +libsmpputil_a_SOURCES = \ + smpp_utils.c \ + smpp_vty.c \ + smpp_msc.c \ + smpp_smsc.c \ + $(NULL) diff --git a/src/libmsc/smpp_openbsc.c b/src/libsmpputil/smpp_msc.c similarity index 99% rename from src/libmsc/smpp_openbsc.c rename to src/libsmpputil/smpp_msc.c index 91666a9..090905a 100644 --- a/src/libmsc/smpp_openbsc.c +++ b/src/libsmpputil/smpp_msc.c @@ -48,8 +48,7 @@ #include <osmocom/msc/gsm_subscriber.h> #include <osmocom/msc/vlr.h> #include <osmocom/msc/msc_a.h> - -#include "smpp_smsc.h" +#include <osmocom/smpp/smpp_smsc.h>
#define VSUB_USE_SMPP "SMPP" #define VSUB_USE_SMPP_CMD "SMPP-cmd" @@ -862,4 +861,3 @@
return 0; } - diff --git a/src/libmsc/smpp_smsc.c b/src/libsmpputil/smpp_smsc.c similarity index 96% rename from src/libmsc/smpp_smsc.c rename to src/libsmpputil/smpp_smsc.c index da66074..b03f7be 100644 --- a/src/libmsc/smpp_smsc.c +++ b/src/libsmpputil/smpp_smsc.c @@ -40,15 +40,9 @@ #include <osmocom/core/talloc.h> #include <osmocom/gsm/protocol/gsm_04_11.h>
-#include "smpp_smsc.h" - #include <osmocom/msc/debug.h> #include <osmocom/msc/gsm_data.h> - -/*! \brief Ugly wrapper. libsmpp34 should do this itself! */ -#define SMPP34_UNPACK(rc, type, str, data, len) \ - memset(str, 0, sizeof(*str)); \ - rc = smpp34_unpack(type, str, data, len) +#include <osmocom/smpp/smpp_smsc.h>
enum emse_bind { ESME_BIND_RX = 0x01, @@ -333,18 +327,7 @@ return GSM411_RP_CAUSE_MO_NUM_UNASSIGNED; }
- -/*! \brief initialize the libsmpp34 data structure for a response */ -#define INIT_RESP(type, resp, req) { \ - memset((resp), 0, sizeof(*(resp))); \ - (resp)->command_length = 0; \ - (resp)->command_id = type; \ - (resp)->command_status = ESME_ROK; \ - (resp)->sequence_number = (req)->sequence_number; \ -} - /*! \brief pack a libsmpp34 data strcutrure and send it to the ESME */ -#define PACK_AND_SEND(esme, ptr) pack_and_send(esme, (ptr)->command_id, ptr) static int pack_and_send(struct osmo_esme *esme, uint32_t type, void *ptr) { struct msgb *msg; @@ -394,13 +377,6 @@ return PACK_AND_SEND(esme, &nack); }
-/*! \brief retrieve SMPP command ID from a msgb */ -static inline uint32_t smpp_msgb_cmdid(struct msgb *msg) -{ - uint8_t *tmp = msgb_data(msg) + 4; - return ntohl(*(uint32_t *)tmp); -} - /*! \brief retrieve SMPP sequence number from a msgb */ static inline uint32_t smpp_msgb_seq(struct msgb *msg) { diff --git a/src/libmsc/smpp_utils.c b/src/libsmpputil/smpp_utils.c similarity index 94% rename from src/libmsc/smpp_utils.c rename to src/libsmpputil/smpp_utils.c index 3c7757b..bada972 100644 --- a/src/libmsc/smpp_utils.c +++ b/src/libsmpputil/smpp_utils.c @@ -21,8 +21,16 @@
#include <time.h>
-#include "smpp_smsc.h" #include <osmocom/core/logging.h> +#include <osmocom/netif/stream.h> +#include <osmocom/smpp/smpp_smsc.h> + +/*! \brief retrieve SMPP command ID from a msgb */ +uint32_t smpp_msgb_cmdid(struct msgb *msg) +{ + uint8_t *tmp = msgb_data(msg) + 4; + return ntohl(*(uint32_t *)tmp); +}
int smpp_determine_scheme(uint8_t dcs, uint8_t *data_coding, int *mode) { diff --git a/src/libmsc/smpp_vty.c b/src/libsmpputil/smpp_vty.c similarity index 99% rename from src/libmsc/smpp_vty.c rename to src/libsmpputil/smpp_vty.c index da260a8..40514d4 100644 --- a/src/libmsc/smpp_vty.c +++ b/src/libsmpputil/smpp_vty.c @@ -34,8 +34,7 @@ #include <osmocom/core/talloc.h>
#include <osmocom/msc/vty.h> - -#include "smpp_smsc.h" +#include <osmocom/smpp/smpp_smsc.h>
struct smsc *smsc_from_vty(struct vty *v);
diff --git a/src/osmo-msc/Makefile.am b/src/osmo-msc/Makefile.am index cdc3448..0380d5d 100644 --- a/src/osmo-msc/Makefile.am +++ b/src/osmo-msc/Makefile.am @@ -43,7 +43,6 @@ $(LIBOSMOCTRL_LIBS) \ $(LIBOSMOABIS_LIBS) \ $(LIBOSMONETIF_LIBS) \ - $(LIBSMPP34_LIBS) \ $(LIBOSMORANAP_LIBS) \ $(LIBASN1C_LIBS) \ $(LIBOSMOSIGTRAN_LIBS) \ @@ -52,3 +51,12 @@ $(LIBSQLITE3_LIBS) \ -lsctp \ $(NULL) + +if BUILD_SMPP + +osmo_msc_LDADD += \ + $(top_builddir)/src/libsmpputil/libsmpputil.a \ + $(LIBSMPP34_LIBS) \ + $(NULL) + +endif diff --git a/src/osmo-msc/msc_main.c b/src/osmo-msc/msc_main.c index bdffb41..4ef5948 100644 --- a/src/osmo-msc/msc_main.c +++ b/src/osmo-msc/msc_main.c @@ -60,7 +60,7 @@ #include <osmocom/ctrl/control_if.h> #include <osmocom/ctrl/control_vty.h> #include <osmocom/ctrl/ports.h> -#include <osmocom/msc/smpp.h> +#include <osmocom/smpp/smpp.h> #include <osmocom/sigtran/osmo_ss7.h> #include <osmocom/mgcp_client/mgcp_client.h> #include <osmocom/msc/sgs_iface.h> diff --git a/src/utils/Makefile.am b/src/utils/Makefile.am index cb0faf6..75a2926 100644 --- a/src/utils/Makefile.am +++ b/src/utils/Makefile.am @@ -34,12 +34,16 @@
smpp_mirror_CFLAGS = \ $(LIBOSMOCORE_CFLAGS) \ + $(LIBOSMOSCCP_CFLAGS) \ + $(LIBOSMOMGCPCLIENT_CFLAGS) \ $(LIBSMPP34_CFLAGS) \ $(NULL)
smpp_mirror_LDADD = \ + $(top_builddir)/src/libsmpputil/libsmpputil.a \ $(LIBOSMOCORE_LIBS) \ $(LIBOSMOGSM_LIBS) \ + $(LIBOSMONETIF_LIBS) \ $(LIBSMPP34_LIBS) \ $(NULL) endif diff --git a/src/utils/smpp_mirror.c b/src/utils/smpp_mirror.c index 72d15e3..3593895 100644 --- a/src/utils/smpp_mirror.c +++ b/src/utils/smpp_mirror.c @@ -19,18 +19,11 @@ #include <osmocom/core/write_queue.h>
#include <osmocom/msc/debug.h> +#include <osmocom/smpp/smpp.h>
/* FIXME: merge with smpp_smsc.c */ -#define SMPP_SYS_ID_LEN 16 -enum esme_read_state { - READ_ST_IN_LEN = 0, - READ_ST_IN_MSG = 1, -}; -/* FIXME: merge with smpp_smsc.c */
struct esme { - struct osmo_fd ofd; - uint32_t own_seq_nr;
struct osmo_wqueue wqueue; @@ -45,22 +38,6 @@ };
/* FIXME: merge with smpp_smsc.c */ -#define SMPP34_UNPACK(rc, type, str, data, len) \ - memset(str, 0, sizeof(*str)); \ - rc = smpp34_unpack(type, str, data, len) -#define INIT_RESP(type, resp, req) { \ - memset((resp), 0, sizeof(*(resp))); \ - (resp)->command_length = 0; \ - (resp)->command_id = type; \ - (resp)->command_status = ESME_ROK; \ - (resp)->sequence_number = (req)->sequence_number; \ -} -#define PACK_AND_SEND(esme, ptr) pack_and_send(esme, (ptr)->command_id, ptr) -static inline uint32_t smpp_msgb_cmdid(struct msgb *msg) -{ - uint8_t *tmp = msgb_data(msg) + 4; - return ntohl(*(uint32_t *)tmp); -} static uint32_t esme_inc_seq_nr(struct esme *esme) { esme->own_seq_nr++; diff --git a/tests/db_sms/Makefile.am b/tests/db_sms/Makefile.am index 140ccbf..946d6a2 100644 --- a/tests/db_sms/Makefile.am +++ b/tests/db_sms/Makefile.am @@ -14,7 +14,6 @@ $(LIBOSMOSIGTRAN_CFLAGS) \ $(LIBOSMORANAP_CFLAGS) \ $(LIBOSMONETIF_CFLAGS) \ - $(LIBSMPP34_CFLAGS) \ $(LIBOSMOMGCPCLIENT_CFLAGS) \ $(LIBOSMOGSUPCLIENT_CFLAGS) \ $(LIBSQLITE3_CFLAGS) \ @@ -37,7 +36,6 @@ db_sms_test_LDADD = \ $(top_builddir)/src/libmsc/libmsc.a \ $(top_builddir)/src/libvlr/libvlr.a \ - $(LIBSMPP34_LIBS) \ $(LIBOSMOCORE_LIBS) \ $(LIBOSMOGSM_LIBS) \ $(LIBOSMOVTY_LIBS) \ diff --git a/tests/msc_vlr/Makefile.am b/tests/msc_vlr/Makefile.am index 505b5c7..2ba7180 100644 --- a/tests/msc_vlr/Makefile.am +++ b/tests/msc_vlr/Makefile.am @@ -8,7 +8,6 @@ -ggdb3 \ $(LIBOSMOCORE_CFLAGS) \ $(LIBOSMOGSM_CFLAGS) \ - $(LIBSMPP34_CFLAGS) \ $(LIBOSMOVTY_CFLAGS) \ $(LIBOSMOABIS_CFLAGS) \ $(LIBOSMOSIGTRAN_CFLAGS) \ @@ -32,7 +31,6 @@ LDADD = \ $(top_builddir)/src/libmsc/libmsc.a \ $(top_builddir)/src/libvlr/libvlr.a \ - $(LIBSMPP34_LIBS) \ $(LIBOSMOCORE_LIBS) \ $(LIBOSMOGSM_LIBS) \ $(LIBOSMOVTY_LIBS) \ diff --git a/tests/smpp/Makefile.am b/tests/smpp/Makefile.am index 00090da..fabfd2d 100644 --- a/tests/smpp/Makefile.am +++ b/tests/smpp/Makefile.am @@ -11,6 +11,8 @@ $(LIBOSMOGSM_CFLAGS) \ $(LIBOSMOSCCP_CFLAGS) \ $(LIBOSMOABIS_CFLAGS) \ + $(LIBOSMOSCCP_CFLAGS) \ + $(LIBOSMOMGCPCLIENT_CFLAGS) \ $(COVERAGE_CFLAGS) \ $(LIBSMPP34_CFLAGS) \ $(NULL) @@ -30,10 +32,10 @@
smpp_test_SOURCES = \ smpp_test.c \ - $(top_builddir)/src/libmsc/smpp_utils.c \ $(NULL)
smpp_test_LDADD = \ + $(top_builddir)/src/libsmpputil/libsmpputil.a \ $(LIBOSMOCORE_LIBS) \ $(LIBOSMOGSM_LIBS) \ $(NULL) diff --git a/tests/smpp/smpp_test.c b/tests/smpp/smpp_test.c index 4640a5f..9b94c63 100644 --- a/tests/smpp/smpp_test.c +++ b/tests/smpp/smpp_test.c @@ -22,12 +22,10 @@ #include <stdio.h>
#include <osmocom/msc/debug.h> - +#include <osmocom/smpp/smpp_smsc.h> #include <osmocom/core/application.h> #include <osmocom/core/backtrace.h>
-#include "smpp_smsc.h" - struct coding_test { uint8_t dcs; uint8_t coding; diff --git a/tests/sms_queue/Makefile.am b/tests/sms_queue/Makefile.am index c83a946..d50a8d6 100644 --- a/tests/sms_queue/Makefile.am +++ b/tests/sms_queue/Makefile.am @@ -36,7 +36,6 @@ sms_queue_test_LDADD = \ $(top_builddir)/src/libmsc/libmsc.a \ $(top_builddir)/src/libvlr/libvlr.a \ - $(LIBSMPP34_LIBS) \ $(LIBOSMOCORE_LIBS) \ $(LIBOSMOGSM_LIBS) \ $(LIBOSMOVTY_LIBS) \ diff --git a/tests/stubs.c b/tests/stubs.c index e6ef548..f29a201 100644 --- a/tests/stubs.c +++ b/tests/stubs.c @@ -43,3 +43,11 @@ void osmo_stream_srv_link_set_port(struct osmo_stream_srv_link *link, uint16_t port) {} void osmo_stream_srv_link_set_addr(struct osmo_stream_srv_link *link, const char *addr) {} int sctp_recvmsg(int sd, void *msg, size_t len, void *from, void *fromlen, void *info, int *msg_flags) { return 0; } +struct gsm_sms; +struct msc_a; +struct gsm_trans; +struct osmo_esme; +bool smpp_route_smpp_first() { return false; } +void smpp_esme_put(struct osmo_esme *esme) { return; } +int smpp_try_deliver(struct gsm_sms *sms, struct msc_a *msc_a) { return 0; } +int sms_route_mt_sms(struct gsm_trans *trans, struct gsm_sms *gsms) { return 0; }