add LOG_TRANS, proper context for all transactions

Change-Id: I2e60964d7a3c06d051debd1c707051a0eb3101ba
diff --git a/src/libmsc/gsm_04_11.c b/src/libmsc/gsm_04_11.c
index 37d0333..434f878 100644
--- a/src/libmsc/gsm_04_11.c
+++ b/src/libmsc/gsm_04_11.c
@@ -120,11 +120,11 @@
 	osmo_signal_dispatch(SS_SMS, sig_no, &sig);
 }
 
-static int gsm411_sendmsg(struct ran_conn *conn, struct msgb *msg)
+static int gsm411_sendmsg(struct gsm_trans *trans, struct msgb *msg)
 {
-	DEBUGP(DLSMS, "GSM4.11 TX %s\n", msgb_hexdump(msg));
+	LOG_TRANS(trans, LOGL_DEBUG, "GSM4.11 TX %s\n", msgb_hexdump(msg));
 	msg->l3h = msg->data;
-	return msc_tx_dtap(conn, msg);
+	return msc_tx_dtap(trans->conn, msg);
 }
 
 /* Paging callback for MT SMS (Paging is triggered by SMC) */
@@ -136,7 +136,7 @@
 	struct gsm_sms *sms = trans->sms.sms;
 	int rc = 0;
 
-	DEBUGP(DLSMS, "paging_cb_mmsms_est_req(hooknum=%u, event=%u)\n", hooknum, event);
+	LOG_TRANS(trans, LOGL_DEBUG, "%s(%s)\n", __func__, event == GSM_PAGING_SUCCEEDED ? "success" : "expired");
 
 	if (hooknum != GSM_HOOK_RR_PAGING)
 		return -EINVAL;
@@ -184,22 +184,19 @@
 
 	/* Check if connection is already established */
 	if (trans->conn != NULL) {
-		LOGP(DLSMS, LOGL_DEBUG, "Using an existing connection "
-			"for %s\n", vlr_subscr_name(trans->vsub));
+		LOG_TRANS(trans, LOGL_DEBUG, "Using an existing connection\n");
 		return gsm411_smc_recv(&trans->sms.smc_inst,
 			GSM411_MMSMS_EST_CNF, NULL, 0);
 	}
 
 	/* Initiate Paging procedure */
-	LOGP(DLSMS, LOGL_DEBUG, "Initiating Paging procedure "
-		"for %s due to MMSMS_EST_REQ\n", vlr_subscr_name(trans->vsub));
+	LOG_TRANS(trans, LOGL_DEBUG, "Initiating Paging due to MMSMS_EST_REQ\n");
 	trans->paging_request = subscr_request_conn(trans->vsub,
 						    paging_cb_mmsms_est_req,
 						    trans, "MT SMS",
 						    SGSAP_SERV_IND_SMS);
 	if (!trans->paging_request) {
-		LOGP(DLSMS, LOGL_ERROR, "Failed to initiate Paging "
-			"procedure for %s\n", vlr_subscr_name(trans->vsub));
+		LOG_TRANS(trans, LOGL_ERROR, "Failed to initiate Paging\n");
 		/* Inform SMC about channel establishment failure */
 		gsm411_smc_recv(&trans->sms.smc_inst,
 			GSM411_MMSMS_REL_IND, NULL, 0);
@@ -222,9 +219,9 @@
 	gh->msg_type = msg_type;
 	OMSC_LINKID_CB(msg) = trans->dlci;
 
-	DEBUGP(DLSMS, "sending CP message (trans=%x)\n", trans->transaction_id);
+	LOG_TRANS(trans, LOGL_DEBUG, "sending CP message (trans=%x)\n", trans->transaction_id);
 
-	return gsm411_sendmsg(trans->conn, msg);
+	return gsm411_sendmsg(trans, msg);
 }
 
 /* mm_send: receive MMCCSMS sap message from SMC */
@@ -244,12 +241,12 @@
 		rc = gsm411_cp_sendmsg(msg, trans, cp_msg_type);
 		break;
 	case GSM411_MMSMS_REL_REQ:
-		DEBUGP(DLSMS, "Got MMSMS_REL_REQ, destroying transaction.\n");
+		LOG_TRANS(trans, LOGL_DEBUG, "Got MMSMS_REL_REQ, destroying transaction.\n");
 		msgb_free(msg);
 		trans_free(trans);
 		break;
 	default:
-		LOGP(DLSMS, LOGL_NOTICE, "Unhandled MMCCSMS msg 0x%x\n", msg_type);
+		LOG_TRANS(trans, LOGL_NOTICE, "Unhandled MMCCSMS msg 0x%x\n", msg_type);
 		msgb_free(msg);
 		rc = -EINVAL;
 	}
@@ -268,10 +265,10 @@
 	return gsm411_smc_send(&trans->sms.smc_inst, msg_type, msg);
 }
 
-static int gsm340_rx_sms_submit(struct gsm_sms *gsms)
+static int gsm340_rx_sms_submit(struct gsm_trans *trans, struct gsm_sms *gsms)
 {
 	if (db_sms_store(gsms) != 0) {
-		LOGP(DLSMS, LOGL_ERROR, "Failed to store SMS in Database\n");
+		LOG_TRANS(trans, LOGL_ERROR, "Failed to store SMS in Database\n");
 		return GSM411_RP_CAUSE_MO_NET_OUT_OF_ORDER;
 	}
 	/* dispatch a signal to tell higher level about it */
@@ -290,7 +287,7 @@
 
 /* generate a msgb containing an 03.40 9.2.2.1 SMS-DELIVER TPDU derived from
  * struct gsm_sms, returns total size of TPDU */
-static int gsm340_gen_sms_deliver_tpdu(struct msgb *msg, struct gsm_sms *sms)
+static int gsm340_gen_sms_deliver_tpdu(struct gsm_trans *trans, struct msgb *msg, struct gsm_sms *sms)
 {
 	uint8_t *smsp;
 	uint8_t oa[12];	/* max len per 03.40 */
@@ -353,8 +350,8 @@
 		memcpy(smsp, sms->user_data, sms->user_data_len);
 		break;
 	default:
-		LOGP(DLSMS, LOGL_NOTICE, "Unhandled Data Coding Scheme: 0x%02X\n",
-		     sms->data_coding_scheme);
+		LOG_TRANS(trans, LOGL_NOTICE, "Unhandled Data Coding Scheme: 0x%02X\n",
+			  sms->data_coding_scheme);
 		break;
 	}
 
@@ -362,7 +359,7 @@
 }
 
 /* As defined by GSM 03.40, Section 9.2.2.3. */
-static int gsm340_gen_sms_status_report_tpdu(struct msgb *msg,
+static int gsm340_gen_sms_status_report_tpdu(struct gsm_trans *trans, struct msgb *msg,
 					     struct gsm_sms *sms)
 {
 	unsigned int old_msg_len = msg->len;
@@ -402,16 +399,16 @@
 	/* From GSM 03.40, Section 9.2.3.15, 0x00 means OK. */
 	*smsp = 0x00;
 
-	LOGP(DLSMS, LOGL_INFO, "sending status report for SMS reference %x\n",
-	     sms->msg_ref);
+	LOG_TRANS(trans, LOGL_INFO, "sending status report for SMS reference %x\n",
+		  sms->msg_ref);
 
 	return msg->len - old_msg_len;
 }
 
-static int sms_route_mt_sms(struct ran_conn *conn,
-			    struct gsm_sms *gsms)
+static int sms_route_mt_sms(struct gsm_trans *trans, struct gsm_sms *gsms)
 {
 	int rc;
+	struct ran_conn *conn = trans->conn;
 
 #ifdef BUILD_SMPP
 	int smpp_first = smpp_route_smpp_first(gsms, conn);
@@ -428,8 +425,7 @@
 			/* unknown subscriber, try local */
 			goto try_local;
 		if (rc < 0) {
-	 		LOGP(DLSMS, LOGL_ERROR, "%s: SMS delivery error: %d.",
-			     vlr_subscr_name(conn->vsub), rc);
+			LOG_TRANS(trans, LOGL_ERROR, "SMS delivery error: %d.", rc);
 	 		rc = GSM411_RP_CAUSE_MO_TEMP_FAIL;
 			/* rc will be logged by gsm411_send_rp_error() */
 			rate_ctr_inc(&conn->network->msc_ctrs->ctr[
@@ -455,8 +451,7 @@
 		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) {
-	 		LOGP(DLSMS, LOGL_ERROR, "%s: SMS delivery error: %d.",
-			     vlr_subscr_name(conn->vsub), rc);
+			LOG_TRANS(trans, LOGL_ERROR, "SMS delivery error: %d.", rc);
 	 		rc = GSM411_RP_CAUSE_MO_TEMP_FAIL;
 			/* rc will be logged by gsm411_send_rp_error() */
 			rate_ctr_inc(&conn->network->msc_ctrs->ctr[
@@ -515,11 +510,11 @@
 	/* length in bytes of the destination address */
 	da_len_bytes = 2 + *smsp/2 + *smsp%2;
 	if (da_len_bytes > 12) {
-		LOGP(DLSMS, LOGL_ERROR, "Destination Address > 12 bytes ?!?\n");
+		LOG_TRANS(trans, LOGL_ERROR, "Destination Address > 12 bytes ?!?\n");
 		rc = GSM411_RP_CAUSE_SEMANT_INC_MSG;
 		goto out;
 	} else if (da_len_bytes < 4) {
-		LOGP(DLSMS, LOGL_ERROR, "Destination Address < 4 bytes ?!?\n");
+		LOG_TRANS(trans, LOGL_ERROR, "Destination Address < 4 bytes ?!?\n");
 		rc = GSM411_RP_CAUSE_SEMANT_INC_MSG;
 		goto out;
 	}
@@ -560,8 +555,7 @@
 		sms_vp = 0;
 		break;
 	default:
-		LOGP(DLSMS, LOGL_NOTICE,
-		     "SMS Validity period not implemented: 0x%02x\n", sms_vpf);
+		LOG_TRANS(trans, LOGL_NOTICE, "SMS Validity period not implemented: 0x%02x\n", sms_vpf);
 		rc = GSM411_RP_CAUSE_MO_NET_OUT_OF_ORDER;
 		goto out;
 	}
@@ -583,21 +577,22 @@
 
 	OSMO_STRLCPY_ARRAY(gsms->src.addr, conn->vsub->msisdn);
 
-	LOGP(DLSMS, LOGL_INFO, "RX SMS: Sender: %s, MTI: 0x%02x, VPF: 0x%02x, "
-	     "MR: 0x%02x PID: 0x%02x, DCS: 0x%02x, DA: %s, "
-	     "UserDataLength: 0x%02x, UserData: \"%s\"\n",
-	     vlr_subscr_name(conn->vsub), sms_mti, sms_vpf, gsms->msg_ref,
-	     gsms->protocol_id, gsms->data_coding_scheme, gsms->dst.addr,
-	     gsms->user_data_len,
-			sms_alphabet == DCS_7BIT_DEFAULT ? gsms->text :
-				osmo_hexdump(gsms->user_data, gsms->user_data_len));
+	LOG_TRANS(trans, LOGL_INFO,
+		  "MO SMS -- MTI: 0x%02x, VPF: 0x%02x, "
+		  "MR: 0x%02x PID: 0x%02x, DCS: 0x%02x, DA: %s, "
+		  "UserDataLength: 0x%02x, UserData: \"%s\"\n",
+		  sms_mti, sms_vpf, gsms->msg_ref,
+		  gsms->protocol_id, gsms->data_coding_scheme, gsms->dst.addr,
+		  gsms->user_data_len,
+		  sms_alphabet == DCS_7BIT_DEFAULT ? gsms->text :
+		  osmo_hexdump(gsms->user_data, gsms->user_data_len));
 
 	gsms->validity_minutes = gsm340_validity_period(sms_vpf, sms_vp);
 
 	/* FIXME: This looks very wrong */
 	send_signal(0, NULL, gsms, 0);
 
-	rc = sms_route_mt_sms(conn, gsms);
+	rc = sms_route_mt_sms(trans, gsms);
 
 	/*
 	 * This SMS got routed through SMPP or no receiver exists.
@@ -607,15 +602,15 @@
 	switch (sms_mti) {
 	case GSM340_SMS_SUBMIT_MS2SC:
 		/* MS is submitting a SMS */
-		rc = gsm340_rx_sms_submit(gsms);
+		rc = gsm340_rx_sms_submit(trans, gsms);
 		break;
 	case GSM340_SMS_COMMAND_MS2SC:
 	case GSM340_SMS_DELIVER_REP_MS2SC:
-		LOGP(DLSMS, LOGL_NOTICE, "Unimplemented MTI 0x%02x\n", sms_mti);
+		LOG_TRANS(trans, LOGL_NOTICE, "Unimplemented MTI 0x%02x\n", sms_mti);
 		rc = GSM411_RP_CAUSE_IE_NOTEXIST;
 		break;
 	default:
-		LOGP(DLSMS, LOGL_NOTICE, "Undefined MTI 0x%02x\n", sms_mti);
+		LOG_TRANS(trans, LOGL_NOTICE, "Undefined MTI 0x%02x\n", sms_mti);
 		rc = GSM411_RP_CAUSE_IE_NOTEXIST;
 		break;
 	}
@@ -646,7 +641,7 @@
 {
 	struct msgb *msg = gsm411_msgb_alloc();
 
-	DEBUGP(DLSMS, "TX: SMS RP ACK\n");
+	LOG_TRANS(trans, LOGL_DEBUG, "TX: SMS RP ACK\n");
 
 	return gsm411_rp_sendmsg(&trans->sms.smr_inst, msg, GSM411_MT_RP_ACK_MT,
 		msg_ref, GSM411_SM_RL_REPORT_REQ);
@@ -659,7 +654,7 @@
 
 	msgb_tv_put(msg, 1, cause);
 
-	LOGP(DLSMS, LOGL_NOTICE, "TX: SMS RP ERROR, cause %d (%s)\n", cause,
+	LOG_TRANS(trans, LOGL_NOTICE, "TX: SMS RP ERROR, cause %d (%s)\n", cause,
 		get_value_string(gsm411_rp_cause_strs, cause));
 
 	return gsm411_rp_sendmsg(&trans->sms.smr_inst, msg,
@@ -711,14 +706,14 @@
 	if (rpud_len)
 		rp_ud = &rph->data[1+src_len+1+dst_len+1];
 
-	DEBUGP(DLSMS, "RX_RP-DATA: src_len=%u, dst_len=%u ud_len=%u\n",
+	LOG_TRANS(trans, LOGL_DEBUG, "RX_RP-DATA: src_len=%u, dst_len=%u ud_len=%u\n",
 		src_len, dst_len, rpud_len);
 
 	if (src_len && src)
-		LOGP(DLSMS, LOGL_ERROR, "RP-DATA (MO) with SRC ?!?\n");
+		LOG_TRANS(trans, LOGL_ERROR, "RP-DATA (MO) with SRC ?!?\n");
 
 	if (!dst_len || !dst || !rpud_len || !rp_ud) {
-		LOGP(DLSMS, LOGL_ERROR,
+		LOG_TRANS(trans, LOGL_ERROR,
 			"RP-DATA (MO) without DST or TPDU ?!?\n");
 		gsm411_send_rp_error(trans, rph->msg_ref,
 				     GSM411_RP_CAUSE_INV_MAND_INF);
@@ -727,12 +722,12 @@
 
 	msg->l4h = rp_ud;
 
-	DEBUGP(DLSMS, "DST(%u,%s)\n", dst_len, osmo_hexdump(dst, dst_len));
+	LOG_TRANS(trans, LOGL_DEBUG, "DST(%u,%s)\n", dst_len, osmo_hexdump(dst, dst_len));
 
 	return gsm411_rx_rp_ud(msg, trans, rph, dst, dst_len);
 }
 
-static struct gsm_sms *sms_report_alloc(struct gsm_sms *sms)
+static struct gsm_sms *sms_report_alloc(struct gsm_sms *sms, struct gsm_trans *trans)
 {
 	struct gsm_sms *sms_report;
 	int len;
@@ -757,7 +752,7 @@
 		       "id:%.08llu sub:000 dlvrd:000 submit date:YYMMDDhhmm done date:YYMMDDhhmm stat:DELIVRD err:000 text:%.20s",
 		       sms->id, sms->text);
 	sms_report->user_data_len = len;
-	LOGP(DLSMS, LOGL_NOTICE, "%s\n", sms_report->user_data);
+	LOG_TRANS(trans, LOGL_NOTICE, "%s\n", sms_report->user_data);
 
 	/* This represents a sms report. */
 	sms_report->is_report = true;
@@ -765,25 +760,24 @@
 	return sms_report;
 }
 
-static void sms_status_report(struct gsm_sms *gsms,
-			      struct ran_conn *conn)
+static void sms_status_report(struct gsm_sms *gsms, struct gsm_trans *trans)
 {
 	struct gsm_sms *sms_report;
 	int rc;
 
-	sms_report = sms_report_alloc(gsms);
+	sms_report = sms_report_alloc(gsms, trans);
 
-	rc = sms_route_mt_sms(conn, sms_report);
+	rc = sms_route_mt_sms(trans, sms_report);
 	if (rc < 0) {
-		LOGP(DLSMS, LOGL_ERROR,
-		     "Failed to send status report! err=%d\n", rc);
+		LOG_TRANS(trans, LOGL_ERROR, "Failed to send status report! err=%d\n", rc);
+		return;
 	}
 
 	/* No route via SMPP, send the GSM 03.40 status-report now. */
 	if (sms_report->receiver)
-		gsm340_rx_sms_submit(sms_report);
+		gsm340_rx_sms_submit(trans, sms_report);
 
-	LOGP(DLSMS, LOGL_NOTICE, "Status report has been sent\n");
+	LOG_TRANS(trans, LOGL_NOTICE, "Status report has been sent\n");
 
 	sms_free(sms_report);
 }
@@ -804,7 +798,7 @@
 	}
 
 	if (!sms) {
-		LOGP(DLSMS, LOGL_ERROR, "RX RP-ACK but no sms in transaction?!?\n");
+		LOG_TRANS(trans, LOGL_ERROR, "RX RP-ACK but no sms in transaction?!?\n");
 		return gsm411_send_rp_error(trans, rph->msg_ref,
 					    GSM411_RP_CAUSE_PROTOCOL_ERR);
 	}
@@ -815,7 +809,7 @@
 	send_signal(S_SMS_DELIVERED, trans, sms, 0);
 
 	if (sms->status_rep_req)
-		sms_status_report(sms, trans->conn);
+		sms_status_report(sms, trans);
 
 	sms_free(sms);
 	trans->sms.sms = NULL;
@@ -835,9 +829,8 @@
 	 * successfully receive the SMS.  We need to investigate
 	 * the cause and take action depending on it */
 
-	LOGP(DLSMS, LOGL_NOTICE, "%s: RX SMS RP-ERROR, cause %d:%d (%s)\n",
-	     vlr_subscr_name(trans->conn->vsub), cause_len, cause,
-	     get_value_string(gsm411_rp_cause_strs, cause));
+	LOG_TRANS(trans, LOGL_NOTICE, "RX SMS RP-ERROR, cause %d:%d (%s)\n",
+		      cause_len, cause, get_value_string(gsm411_rp_cause_strs, cause));
 
 	if (trans->net->sms_over_gsup) {
 		/* Forward towards SMSC via GSUP */
@@ -845,8 +838,7 @@
 	}
 
 	if (!sms) {
-		LOGP(DLSMS, LOGL_ERROR,
-			"RX RP-ERR, but no sms in transaction?!?\n");
+		LOG_TRANS(trans, LOGL_ERROR, "RX RP-ERR, but no sms in transaction?!?\n");
 		return -EINVAL;
 #if 0
 		return gsm411_send_rp_error(trans, rph->msg_ref,
@@ -905,15 +897,15 @@
 
 	switch (msg_type) {
 	case GSM411_MT_RP_DATA_MO:
-		DEBUGP(DLSMS, "RX SMS RP-DATA (MO)\n");
+		LOG_TRANS(trans, LOGL_DEBUG, "RX SMS RP-DATA (MO)\n");
 		rc = gsm411_rx_rp_data(msg, trans, rp_data);
 		break;
 	case GSM411_MT_RP_SMMA_MO:
-		DEBUGP(DLSMS, "RX SMS RP-SMMA\n");
+		LOG_TRANS(trans, LOGL_DEBUG, "RX SMS RP-SMMA\n");
 		rc = gsm411_rx_rp_smma(msg, trans, rp_data);
 		break;
 	default:
-		LOGP(DLSMS, LOGL_NOTICE, "Invalid RP type 0x%02x\n", msg_type);
+		LOG_TRANS(trans, LOGL_NOTICE, "Invalid RP type 0x%02x\n", msg_type);
 		rc = -EINVAL;
 		break;
 	}
@@ -931,15 +923,15 @@
 
 	switch (msg_type) {
 	case GSM411_MT_RP_ACK_MO:
-		DEBUGP(DLSMS, "RX SMS RP-ACK (MO)\n");
+		LOG_TRANS(trans, LOGL_DEBUG, "RX SMS RP-ACK (MO)\n");
 		rc = gsm411_rx_rp_ack(trans, rp_data);
 		break;
 	case GSM411_MT_RP_ERROR_MO:
-		DEBUGP(DLSMS, "RX SMS RP-ERROR (MO)\n");
+		LOG_TRANS(trans, LOGL_DEBUG, "RX SMS RP-ERROR (MO)\n");
 		rc = gsm411_rx_rp_error(trans, rp_data);
 		break;
 	default:
-		LOGP(DLSMS, LOGL_NOTICE, "Invalid RP type 0x%02x\n", msg_type);
+		LOG_TRANS(trans, LOGL_NOTICE, "Invalid RP type 0x%02x\n", msg_type);
 		rc = -EINVAL;
 		break;
 	}
@@ -967,7 +959,7 @@
 			rc = gsm411_rx_rl_report(msg, gh, trans);
 		break;
 	default:
-		LOGP(DLSMS, LOGL_NOTICE, "Unhandled SM-RL message 0x%x\n", msg_type);
+		LOG_TRANS(trans, LOGL_NOTICE, "Unhandled SM-RL message 0x%x\n", msg_type);
 		rc = -EINVAL;
 	}
 
@@ -988,21 +980,21 @@
 	switch (msg_type) {
 	case GSM411_MNSMS_EST_IND:
 	case GSM411_MNSMS_DATA_IND:
-		DEBUGP(DLSMS, "MNSMS-DATA/EST-IND\n");
+		LOG_TRANS(trans, LOGL_DEBUG, "MNSMS-DATA/EST-IND\n");
 		rc = gsm411_smr_recv(&trans->sms.smr_inst, msg_type, msg);
 		break;
 	case GSM411_MNSMS_ERROR_IND:
 		if (gh)
-			DEBUGP(DLSMS, "MNSMS-ERROR-IND, cause %d (%s)\n",
+			LOG_TRANS(trans, LOGL_DEBUG, "MNSMS-ERROR-IND, cause %d (%s)\n",
 				gh->data[0],
 				get_value_string(gsm411_cp_cause_strs,
 				gh->data[0]));
 		else
-			DEBUGP(DLSMS, "MNSMS-ERROR-IND, no cause\n");
+			LOG_TRANS(trans, LOGL_DEBUG, "MNSMS-ERROR-IND, no cause\n");
 		rc = gsm411_smr_recv(&trans->sms.smr_inst, msg_type, msg);
 		break;
 	default:
-		LOGP(DLSMS, LOGL_NOTICE, "Unhandled MNCCSMS msg 0x%x\n", msg_type);
+		LOG_TRANS(trans, LOGL_NOTICE, "Unhandled MNCCSMS msg 0x%x\n", msg_type);
 		rc = -EINVAL;
 	}
 
@@ -1015,7 +1007,7 @@
 	/* Allocate a new transaction */
 	struct gsm_trans *trans = trans_alloc(net, vsub, GSM48_PDISC_SMS, tid, new_callref++);
 	if (!trans) {
-		LOGP(DLSMS, LOGL_ERROR, "No memory for transaction\n");
+		LOG_TRANS(trans, LOGL_ERROR, "No memory for transaction\n");
 		return NULL;
 	}
 
@@ -1058,15 +1050,13 @@
 					       struct vlr_subscr *vsub)
 {
 	struct ran_conn *conn;
-	struct gsm_trans *trans;
+	struct gsm_trans *trans = NULL;
 	int tid;
 
-	LOGP(DLSMS, LOGL_INFO, "Going to send a MT SMS\n");
-
 	/* Generate a new transaction ID */
 	tid = trans_assign_trans_id(net, vsub, GSM48_PDISC_SMS);
 	if (tid == -1) {
-		LOGP(DLSMS, LOGL_ERROR, "No available transaction IDs\n");
+		LOG_TRANS(trans, LOGL_ERROR, "No available transaction IDs\n");
 		return NULL;
 	}
 
@@ -1078,9 +1068,11 @@
 	if (!trans)
 		return NULL;
 
+	LOG_TRANS(trans, LOGL_INFO, "Going to send a MT SMS\n");
+
 	/* Assign a unique SM-RP Message Reference */
 	if (gsm411_assign_sm_rp_mr(trans) != 0) {
-		LOGP(DLSMS, LOGL_ERROR, "Failed to assign SM-RP-MR\n");
+		LOG_TRANS(trans, LOGL_ERROR, "Failed to assign SM-RP-MR\n");
 		trans_free(trans);
 		return NULL;
 	}
@@ -1138,10 +1130,10 @@
 
 	if (sms->is_report) {
 		/* generate the 03.40 SMS-STATUS-REPORT TPDU */
-		rc = gsm340_gen_sms_status_report_tpdu(msg, sms);
+		rc = gsm340_gen_sms_status_report_tpdu(trans, msg, sms);
 	} else {
 		/* generate the 03.40 SMS-DELIVER TPDU */
-		rc = gsm340_gen_sms_deliver_tpdu(msg, sms);
+		rc = gsm340_gen_sms_deliver_tpdu(trans, msg, sms);
 	}
 	if (rc < 0) {
 		send_signal(S_SMS_UNKNOWN_ERROR, trans, sms, 0);
@@ -1216,16 +1208,13 @@
 		return -EIO;
 		/* FIXME: send some error message */
 
-	DEBUGP(DLSMS, "receiving data (trans_id=%x, msg_type=%s)\n", transaction_id,
-	       gsm48_pdisc_msgtype_name(gsm48_hdr_pdisc(gh), gsm48_hdr_msg_type(gh)));
-
 	trans = trans_find_by_id(conn, GSM48_PDISC_SMS, transaction_id);
 
 	/*
 	 * A transaction we created but don't know about?
 	 */
 	if (!trans && (transaction_id & 0x8) == 0) {
-		LOGP(DLSMS, LOGL_ERROR, "trans_id=%x allocated by us but known "
+		LOG_TRANS(trans, LOGL_ERROR, "trans_id=%x allocated by us but known "
 			"to us anymore. We are ignoring it, maybe a CP-ERROR "
 			"from a MS?\n",
 			transaction_id);
@@ -1246,6 +1235,9 @@
 		cm_service_request_concludes(conn, msg);
 	}
 
+	LOG_TRANS(trans, LOGL_DEBUG, "receiving SMS message %s\n",
+		  gsm48_pdisc_msgtype_name(gsm48_hdr_pdisc(gh), gsm48_hdr_msg_type(gh)));
+
 	/* 5.4: For MO, if a CP-DATA is received for a new
 	 * transaction, equals reception of an implicit
 	 * last CP-ACK for previous transaction */
@@ -1263,7 +1255,7 @@
 			if (!ptrans)
 				continue;
 
-			DEBUGP(DLSMS, "Implicit CP-ACK for trans_id=%x\n", i);
+			LOG_TRANS(ptrans, LOGL_DEBUG, "Implicit CP-ACK for trans_id=%x\n", i);
 
 			/* Finish it for good */
 			trans_free(ptrans);
@@ -1291,7 +1283,7 @@
 	trans->sms.smc_inst.mm_send = NULL;
 
 	if (trans->sms.sms) {
-		LOGP(DLSMS, LOGL_ERROR, "Transaction contains SMS.\n");
+		LOG_TRANS(trans, LOGL_ERROR, "Freeing transaction that still contains an SMS -- discarding\n");
 		send_signal(S_SMS_UNKNOWN_ERROR, trans, trans->sms.sms, 0);
 		sms_free(trans->sms.sms);
 		trans->sms.sms = NULL;
@@ -1316,7 +1308,7 @@
 
 		sms = trans->sms.sms;
 		if (!sms) {
-			LOGP(DLSMS, LOGL_ERROR, "SAPI Reject but no SMS.\n");
+			LOG_TRANS(trans, LOGL_ERROR, "SAPI Reject but no SMS.\n");
 			continue;
 		}