diff options
Diffstat (limited to 'src/libmsc/smpp_openbsc.c')
-rw-r--r-- | src/libmsc/smpp_openbsc.c | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/src/libmsc/smpp_openbsc.c b/src/libmsc/smpp_openbsc.c index 67e663837..bf63f6be9 100644 --- a/src/libmsc/smpp_openbsc.c +++ b/src/libmsc/smpp_openbsc.c @@ -501,7 +501,6 @@ static void smpp_cmd_free(struct osmo_smpp_cmd *cmd) osmo_timer_del(&cmd->response_timer); llist_del(&cmd->list); vlr_subscr_put(cmd->vsub); - sms_free(cmd->sms); talloc_free(cmd); } @@ -524,15 +523,14 @@ void smpp_cmd_ack(struct osmo_smpp_cmd *cmd) goto out; } - trans = trans_find_by_id(conn, GSM48_PDISC_SMS, - cmd->sms->gsm411.transaction_id); + trans = trans_find_by_id(conn, GSM48_PDISC_SMS, cmd->gsm411_trans_id); if (!trans) { LOGP(DSMPP, LOGL_ERROR, "GSM transaction %u is gone\n", - cmd->sms->gsm411.transaction_id); + cmd->gsm411_trans_id); goto out; } - gsm411_send_rp_ack(trans, cmd->sms->gsm411.msg_ref); + gsm411_send_rp_ack(trans, cmd->gsm411_msg_ref); out: smpp_cmd_free(cmd); } @@ -549,18 +547,17 @@ void smpp_cmd_err(struct osmo_smpp_cmd *cmd, uint32_t status) goto out; } - trans = trans_find_by_id(conn, GSM48_PDISC_SMS, - cmd->sms->gsm411.transaction_id); + trans = trans_find_by_id(conn, GSM48_PDISC_SMS, cmd->gsm411_trans_id); if (!trans) { LOGP(DSMPP, LOGL_ERROR, "GSM transaction %u is gone\n", - cmd->sms->gsm411.transaction_id); + cmd->gsm411_trans_id); goto out; } if (smpp_to_gsm411_err(status, &gsm411_cause) < 0) gsm411_cause = GSM411_RP_CAUSE_MO_NET_OUT_OF_ORDER; - gsm411_send_rp_error(trans, cmd->sms->gsm411.msg_ref, gsm411_cause); + gsm411_send_rp_error(trans, cmd->gsm411_msg_ref, gsm411_cause); out: smpp_cmd_free(cmd); } @@ -572,7 +569,7 @@ static void smpp_deliver_sm_cb(void *data) static int smpp_cmd_enqueue(struct osmo_esme *esme, struct vlr_subscr *vsub, struct gsm_sms *sms, - uint32_t sequence_number, bool *deferred) + uint32_t sequence_number) { struct osmo_smpp_cmd *cmd; @@ -581,7 +578,8 @@ static int smpp_cmd_enqueue(struct osmo_esme *esme, return -1; cmd->sequence_nr = sequence_number; - cmd->sms = sms; + cmd->gsm411_msg_ref = sms->gsm411.msg_ref; + cmd->gsm411_trans_id = sms->gsm411.transaction_id; cmd->vsub = vlr_subscr_get(vsub); /* FIXME: No predefined value for this response_timer as specified by @@ -592,7 +590,6 @@ static int smpp_cmd_enqueue(struct osmo_esme *esme, osmo_timer_setup(&cmd->response_timer, smpp_deliver_sm_cb, cmd); osmo_timer_schedule(&cmd->response_timer, 5, 0); llist_add_tail(&cmd->list, &esme->smpp_cmd_list); - *deferred = true; return 0; } @@ -610,8 +607,7 @@ struct osmo_smpp_cmd *smpp_cmd_find_by_seqnum(struct osmo_esme *esme, } static int deliver_to_esme(struct osmo_esme *esme, struct gsm_sms *sms, - struct gsm_subscriber_connection *conn, - bool *deferred) + struct gsm_subscriber_connection *conn) { struct deliver_sm_t deliver; int mode, ret; @@ -693,7 +689,7 @@ static int deliver_to_esme(struct osmo_esme *esme, struct gsm_sms *sms, return ret; return smpp_cmd_enqueue(esme, conn->vsub, sms, - deliver.sequence_number, deferred); + deliver.sequence_number); } static struct smsc *g_smsc; @@ -704,7 +700,7 @@ int smpp_route_smpp_first(struct gsm_sms *sms, struct gsm_subscriber_connection } int smpp_try_deliver(struct gsm_sms *sms, - struct gsm_subscriber_connection *conn, bool *deferred) + struct gsm_subscriber_connection *conn) { struct osmo_esme *esme; struct osmo_smpp_addr dst; @@ -717,7 +713,7 @@ int smpp_try_deliver(struct gsm_sms *sms, rc = smpp_route(g_smsc, &dst, &esme); if (!rc) - rc = deliver_to_esme(esme, sms, conn, deferred); + rc = deliver_to_esme(esme, sms, conn); return rc; } |