aboutsummaryrefslogtreecommitdiffstats
path: root/src/libmsc/smpp_openbsc.c
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@gnumonks.org>2017-08-07 14:01:10 +0100
committerNeels Hofmeyr <neels@hofmeyr.de>2017-08-27 02:33:48 +0200
commitfdc9966a900886df7578f6d46de63929d7e73785 (patch)
tree1d8d1b945b82f2651b416a0b8117406ba89dc5cd /src/libmsc/smpp_openbsc.c
parent26d3db8a32d9e90829d69282e38cb091db27bfc0 (diff)
libmsc: remove 'deferred' parameter in sms_route_mt_sms()
No need to cache the sms object, just cache what we need into the smpp_cmd structure. This simplifies what that I introduced in 93ffbd0029d1 ("libmsc: send RP-ACK to MS after ESME sends SMPP DELIVER-SM-RESP"). Change-Id: Iba5f864f9bb963baff95969e306b1b7cff00c1e3
Diffstat (limited to 'src/libmsc/smpp_openbsc.c')
-rw-r--r--src/libmsc/smpp_openbsc.c30
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;
}