diff options
author | Harald Welte <laforge@gnumonks.org> | 2012-11-08 19:44:08 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2012-11-16 22:00:09 +0100 |
commit | d4bdee79e96906323811ea5832e402855985df88 (patch) | |
tree | c5bd16e6181fa2ea9f57eb2baafc046a2f5b760b /openbsc/src/libmsc/smpp_smsc.c | |
parent | f1033cc752cfeb5f86e6f2357ce62637646f773f (diff) |
SMPP: Implement transaction mode for SUBMIT-SM
WARNING: if the ESME disconnects, osmo_esme gets freed, and
sms->smpp.esme might point to invalid/unallocated memory!
Diffstat (limited to 'openbsc/src/libmsc/smpp_smsc.c')
-rw-r--r-- | openbsc/src/libmsc/smpp_smsc.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/openbsc/src/libmsc/smpp_smsc.c b/openbsc/src/libmsc/smpp_smsc.c index ff6b1f9e5..dd6a2f9e3 100644 --- a/openbsc/src/libmsc/smpp_smsc.c +++ b/openbsc/src/libmsc/smpp_smsc.c @@ -46,6 +46,17 @@ enum emse_bind { ESME_BIND_TX = 0x02, }; +static struct osmo_esme * +esme_by_system_id(const struct smsc *smsc, char *system_id) +{ + struct osmo_esme *e; + + llist_for_each_entry(e, &smsc->esme_list, list) { + if (!strcmp(e->system_id, system_id)) + return e; + } + return NULL; +} #define INIT_RESP(type, resp, req) { \ @@ -280,6 +291,21 @@ static int smpp_handle_enq_link(struct osmo_esme *esme, struct msgb *msg) return PACK_AND_SEND(esme, &enq_r); } +int smpp_tx_submit_r(struct osmo_esme *esme, uint32_t sequence_nr, + uint32_t command_status, char *msg_id) +{ + struct submit_sm_resp_t submit_r; + + memset(&submit_r, 0, sizeof(submit_r)); + submit_r.command_length = 0; + submit_r.command_id = SUBMIT_SM_RESP; + submit_r.command_status = command_status; + submit_r.sequence_number= sequence_nr; + snprintf(submit_r.message_id, sizeof(submit_r.message_id), "%s", msg_id); + + return PACK_AND_SEND(esme, &submit_r); +} + static int smpp_handle_submit(struct osmo_esme *esme, struct msgb *msg) { struct submit_sm_t submit; |