diff options
25 files changed, 114 insertions, 101 deletions
diff --git a/configure.ac b/configure.ac index 21056f913..41e51dad6 100644 --- a/configure.ac +++ b/configure.ac @@ -234,9 +234,11 @@ AC_OUTPUT( 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 4d8063711..b07a00459 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 faf1048dc..adda44c76 100644 --- a/include/osmocom/msc/Makefile.am +++ b/include/osmocom/msc/Makefile.am @@ -45,7 +45,6 @@ noinst_HEADERS = \ 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 bcdac8f0b..000000000 --- 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 000000000..5ad34ad0d --- /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 000000000..cc0e8003a --- /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 index 76772a3ee..fb5164faf 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 @@ struct ran_conn; 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 4e7cea19b..e23ab102c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -25,8 +25,16 @@ SUBDIRS = \ 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 d3b6035e2..de02a1779 100644 --- a/src/libmsc/Makefile.am +++ b/src/libmsc/Makefile.am @@ -20,9 +20,6 @@ AM_CFLAGS = \ $(LIBOSMONETIF_CFLAGS) \ $(NULL) -noinst_HEADERS = \ - $(NULL) - noinst_LIBRARIES = \ libmsc.a \ $(NULL) @@ -81,16 +78,3 @@ libmsc_a_SOURCES += \ 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 743e2722b..adc9d88c8 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 @@ void gsm411_sapi_n_reject(struct msc_a *msc_a) trans_free(trans); } } - diff --git a/src/libsmpputil/Makefile.am b/src/libsmpputil/Makefile.am new file mode 100644 index 000000000..b180ddf6f --- /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 index 91666a9ca..090905a13 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 @@ int smpp_openbsc_start(struct gsm_network *net) return 0; } - diff --git a/src/libmsc/smpp_smsc.c b/src/libsmpputil/smpp_smsc.c index da6607421..b03f7bea3 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 @@ int smpp_route(const struct smsc *smsc, const struct osmo_smpp_addr *dest, struc 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 @@ static int smpp_tx_gen_nack(struct osmo_esme *esme, uint32_t seq, uint32_t statu 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 index 3c7757b9a..bada97217 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 index da260a895..40514d490 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 cdc3448ab..0380d5d1f 100644 --- a/src/osmo-msc/Makefile.am +++ b/src/osmo-msc/Makefile.am @@ -43,7 +43,6 @@ osmo_msc_LDADD = \ $(LIBOSMOCTRL_LIBS) \ $(LIBOSMOABIS_LIBS) \ $(LIBOSMONETIF_LIBS) \ - $(LIBSMPP34_LIBS) \ $(LIBOSMORANAP_LIBS) \ $(LIBASN1C_LIBS) \ $(LIBOSMOSIGTRAN_LIBS) \ @@ -52,3 +51,12 @@ osmo_msc_LDADD = \ $(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 bdffb4104..4ef5948b1 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 cb0faf69f..75a292609 100644 --- a/src/utils/Makefile.am +++ b/src/utils/Makefile.am @@ -34,12 +34,16 @@ smpp_mirror_SOURCES = \ 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 72d15e39d..359389513 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 @@ struct esme { }; /* 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 140ccbfaf..946d6a280 100644 --- a/tests/db_sms/Makefile.am +++ b/tests/db_sms/Makefile.am @@ -14,7 +14,6 @@ AM_CFLAGS = \ $(LIBOSMOSIGTRAN_CFLAGS) \ $(LIBOSMORANAP_CFLAGS) \ $(LIBOSMONETIF_CFLAGS) \ - $(LIBSMPP34_CFLAGS) \ $(LIBOSMOMGCPCLIENT_CFLAGS) \ $(LIBOSMOGSUPCLIENT_CFLAGS) \ $(LIBSQLITE3_CFLAGS) \ @@ -37,7 +36,6 @@ db_sms_test_SOURCES = \ 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 505b5c7b6..2ba718085 100644 --- a/tests/msc_vlr/Makefile.am +++ b/tests/msc_vlr/Makefile.am @@ -8,7 +8,6 @@ AM_CFLAGS = \ -ggdb3 \ $(LIBOSMOCORE_CFLAGS) \ $(LIBOSMOGSM_CFLAGS) \ - $(LIBSMPP34_CFLAGS) \ $(LIBOSMOVTY_CFLAGS) \ $(LIBOSMOABIS_CFLAGS) \ $(LIBOSMOSIGTRAN_CFLAGS) \ @@ -32,7 +31,6 @@ AM_LDFLAGS = \ 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 00090daae..fabfd2da3 100644 --- a/tests/smpp/Makefile.am +++ b/tests/smpp/Makefile.am @@ -11,6 +11,8 @@ AM_CFLAGS = \ $(LIBOSMOGSM_CFLAGS) \ $(LIBOSMOSCCP_CFLAGS) \ $(LIBOSMOABIS_CFLAGS) \ + $(LIBOSMOSCCP_CFLAGS) \ + $(LIBOSMOMGCPCLIENT_CFLAGS) \ $(COVERAGE_CFLAGS) \ $(LIBSMPP34_CFLAGS) \ $(NULL) @@ -30,10 +32,10 @@ check_PROGRAMS = \ 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 4640a5f8d..9b94c63f4 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 c83a9469c..d50a8d6db 100644 --- a/tests/sms_queue/Makefile.am +++ b/tests/sms_queue/Makefile.am @@ -36,7 +36,6 @@ sms_queue_test_SOURCES = \ 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 e6ef548cc..f29a20146 100644 --- a/tests/stubs.c +++ b/tests/stubs.c @@ -43,3 +43,11 @@ char *osmo_stream_srv_link_get_sockname(const struct osmo_stream_srv_link *link) 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; } |