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
diff --git a/src/libmsc/smpp_openbsc.c b/src/libmsc/smpp_openbsc.c
index 67e6638..bf63f6b 100644
--- a/src/libmsc/smpp_openbsc.c
+++ b/src/libmsc/smpp_openbsc.c
@@ -501,7 +501,6 @@
 	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 @@
 		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 @@
 		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 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 @@
 		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 @@
 	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 @@
 }
 
 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 @@
 		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_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 @@
 
 	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;
 }