From f43eecbab3cd171bd81b41e403d304c6ae65a76e Mon Sep 17 00:00:00 2001
From: James Zhang <jzhang@sangoma.com>
Date: Fri, 30 Sep 2011 10:25:21 -0400
Subject: [PATCH] ftdm_ss7: Adding OPC and Call Reference Number to SIP
 x-headers

---
 libs/freetdm/mod_freetdm/mod_freetdm.c            | 15 +++++++++++++++
 .../ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c  |  8 ++++++++
 2 files changed, 23 insertions(+)

diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c
index caee4dcec9..8501bb1ce2 100755
--- a/libs/freetdm/mod_freetdm/mod_freetdm.c
+++ b/libs/freetdm/mod_freetdm/mod_freetdm.c
@@ -1760,6 +1760,21 @@ ftdm_status_t ftdm_channel_from_event(ftdm_sigmsg_t *sigmsg, switch_core_session
 
 		switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-Screen", "%d", channel_caller_data->screen);
 		switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-Presentation", "%d", channel_caller_data->pres);
+		
+		var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_opc");
+		if (!ftdm_strlen_zero(var_value)) {
+			switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-OPC", "%s", var_value);
+		}
+		
+		var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_lac");
+		if (!ftdm_strlen_zero(var_value)) {
+			switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-LAC", "%s", var_value);
+		}
+		
+		var_value = ftdm_sigmsg_get_var(sigmsg, "ss7_crn");
+		if (!ftdm_strlen_zero(var_value)) {
+			switch_channel_set_variable_printf(channel, "sip_h_X-FreeTDM-CRN", "%s", var_value);
+		}
 	}
 
 	/* Add any call variable to the dial plan */
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c
index 213c4c8d4d..41e0129919 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_handle.c
@@ -219,6 +219,14 @@ ftdm_status_t handle_con_ind(uint32_t suInstId, uint32_t spInstId, uint32_t circ
 			sprintf(var, "%d", sngss7_info->circuit->cic);
 			sngss7_add_var(sngss7_info, "ss7_cic", var);
 
+			sprintf(var, "%d", g_ftdm_sngss7_data.cfg.isupIntf[sngss7_info->circuit->infId].spc );
+			sngss7_add_var(sngss7_info, "ss7_opc", var);
+			
+			if (siConEvnt->callRef.callId.pres) {
+				sprintf(var, "%u", (unsigned int)siConEvnt->callRef.callId.val);
+				sngss7_add_var(sngss7_info, "ss7_crn", var);
+			}
+			
 			if (sngss7_info->circuit->transparent_iam) {
 				sngss7_save_iam(ftdmchan, siConEvnt);
 			}