diff options
author | Pablo Neira Ayuso <pablo@gnumonks.org> | 2017-08-07 14:01:10 +0100 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2017-08-27 02:33:48 +0200 |
commit | fdc9966a900886df7578f6d46de63929d7e73785 (patch) | |
tree | 1d8d1b945b82f2651b416a0b8117406ba89dc5cd /src | |
parent | 26d3db8a32d9e90829d69282e38cb091db27bfc0 (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')
-rw-r--r-- | src/libmsc/gsm_04_11.c | 19 | ||||
-rw-r--r-- | src/libmsc/smpp_openbsc.c | 30 | ||||
-rw-r--r-- | src/libmsc/smpp_smsc.h | 5 |
3 files changed, 24 insertions, 30 deletions
diff --git a/src/libmsc/gsm_04_11.c b/src/libmsc/gsm_04_11.c index 0cd1b653f..88a668537 100644 --- a/src/libmsc/gsm_04_11.c +++ b/src/libmsc/gsm_04_11.c @@ -280,8 +280,7 @@ static int gsm340_gen_sms_deliver_tpdu(struct msgb *msg, struct gsm_sms *sms) } static int sms_route_mt_sms(struct gsm_subscriber_connection *conn, - struct gsm_sms *gsms, uint8_t sms_mti, - bool *deferred) + struct gsm_sms *gsms, uint8_t sms_mti) { int rc; @@ -295,7 +294,7 @@ static int sms_route_mt_sms(struct gsm_subscriber_connection *conn, * delivery of the SMS. */ if (smpp_first) { - rc = smpp_try_deliver(gsms, conn, deferred); + rc = smpp_try_deliver(gsms, conn); if (rc == GSM411_RP_CAUSE_MO_NUM_UNASSIGNED) /* unknown subscriber, try local */ goto try_local; @@ -324,7 +323,7 @@ try_local: return GSM411_RP_CAUSE_MO_NUM_UNASSIGNED; } - rc = smpp_try_deliver(gsms, conn, deferred); + rc = smpp_try_deliver(gsms, conn); if (rc == GSM411_RP_CAUSE_MO_NUM_UNASSIGNED) { rate_ctr_inc(&conn->network->msc_ctrs->ctr[MSC_CTR_SMS_NO_RECEIVER]); } else if (rc < 0) { @@ -365,7 +364,7 @@ try_local: /* process an incoming TPDU (called from RP-DATA) * return value > 0: RP CAUSE for ERROR; < 0: silent error; 0 = success */ static int gsm340_rx_tpdu(struct gsm_trans *trans, struct msgb *msg, - uint32_t gsm411_msg_ref, bool *deferred) + uint32_t gsm411_msg_ref) { struct gsm_subscriber_connection *conn = trans->conn; uint8_t *smsp = msgb_sms(msg); @@ -486,10 +485,9 @@ static int gsm340_rx_tpdu(struct gsm_trans *trans, struct msgb *msg, /* FIXME: This looks very wrong */ send_signal(0, NULL, gsms, 0); - rc = sms_route_mt_sms(conn, gsms, sms_mti, deferred); + rc = sms_route_mt_sms(conn, gsms, sms_mti); out: - if (!deferred) - sms_free(gsms); + sms_free(gsms); return rc; } @@ -542,7 +540,6 @@ static int gsm411_rx_rp_ud(struct msgb *msg, struct gsm_trans *trans, uint8_t dst_len, uint8_t *dst, uint8_t tpdu_len, uint8_t *tpdu) { - bool deferred = false; int rc = 0; if (src_len && src) @@ -559,8 +556,8 @@ static int gsm411_rx_rp_ud(struct msgb *msg, struct gsm_trans *trans, DEBUGP(DLSMS, "DST(%u,%s)\n", dst_len, osmo_hexdump(dst, dst_len)); - rc = gsm340_rx_tpdu(trans, msg, rph->msg_ref, &deferred); - if (rc == 0 && !deferred) + rc = gsm340_rx_tpdu(trans, msg, rph->msg_ref); + if (rc == 0) return gsm411_send_rp_ack(trans, rph->msg_ref); else if (rc > 0) return gsm411_send_rp_error(trans, rph->msg_ref, rc); 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; } diff --git a/src/libmsc/smpp_smsc.h b/src/libmsc/smpp_smsc.h index fded236d6..0f1d35cc1 100644 --- a/src/libmsc/smpp_smsc.h +++ b/src/libmsc/smpp_smsc.h @@ -89,8 +89,9 @@ struct osmo_smpp_route { struct osmo_smpp_cmd { struct llist_head list; struct vlr_subscr *vsub; - struct gsm_sms *sms; uint32_t sequence_nr; + uint32_t gsm411_msg_ref; + uint8_t gsm411_trans_id; struct osmo_timer_list response_timer; }; @@ -161,5 +162,5 @@ struct gsm_subscriber_connection; int smpp_route_smpp_first(struct gsm_sms *sms, struct gsm_subscriber_connection *conn); int smpp_try_deliver(struct gsm_sms *sms, - struct gsm_subscriber_connection *conn, bool *deferred); + struct gsm_subscriber_connection *conn); #endif |