diff options
Diffstat (limited to 'openbsc/src/libmsc/smpp_smsc.c')
-rw-r--r-- | openbsc/src/libmsc/smpp_smsc.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/openbsc/src/libmsc/smpp_smsc.c b/openbsc/src/libmsc/smpp_smsc.c index e53749023..bd259186f 100644 --- a/openbsc/src/libmsc/smpp_smsc.c +++ b/openbsc/src/libmsc/smpp_smsc.c @@ -247,6 +247,7 @@ static void esme_destroy(struct osmo_esme *esme) osmo_fd_unregister(&esme->wqueue.bfd); close(esme->wqueue.bfd.fd); } + smpp_cmd_flush_pending(esme); llist_del(&esme->list); talloc_free(esme); } @@ -660,6 +661,7 @@ int smpp_tx_deliver(struct osmo_esme *esme, struct deliver_sm_t *deliver) static int smpp_handle_deliver_resp(struct osmo_esme *esme, struct msgb *msg) { struct deliver_sm_resp_t deliver_r; + struct osmo_smpp_cmd *cmd; int rc; memset(&deliver_r, 0, sizeof(deliver_r)); @@ -671,6 +673,20 @@ static int smpp_handle_deliver_resp(struct osmo_esme *esme, struct msgb *msg) return rc; } + cmd = smpp_cmd_find_by_seqnum(esme, deliver_r.sequence_number); + if (!cmd) { + LOGP(DSMPP, LOGL_ERROR, "[%s] Rx DELIVER-SM RESP !? (%s)\n", + esme->system_id, get_value_string(smpp_status_strs, + deliver_r.command_status)); + return -1; + } + + /* Map SMPP command status to GSM 04.11 cause? */ + if (deliver_r.command_status == ESME_ROK) + smpp_cmd_ack(cmd); + else + smpp_cmd_err(cmd); + LOGP(DSMPP, LOGL_INFO, "[%s] Rx DELIVER-SM RESP (%s)\n", esme->system_id, get_value_string(smpp_status_strs, deliver_r.command_status)); @@ -889,6 +905,7 @@ static int link_accept_cb(struct smsc *smsc, int fd, return -ENOMEM; } + INIT_LLIST_HEAD(&esme->smpp_cmd_list); smpp_esme_get(esme); esme->own_seq_nr = rand(); esme_inc_seq_nr(esme); |