Re: [Openh323gk-users] partynumber vs e164 problem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Tuesday 03 June 2003 14:15, mostafa ibrahim wrote:
> ARJ:ip:port|"NUM"dialeddigits|........   normal
> ARJ:ip:port|e164:"NUM"partynumber|.....  current
> is there any work around from the gatekeeper to solve this problem?
> is there any suggested solution ?

I've been playing with this Siemens product a year ago. As I remember it, you 
can change the numbering scheme on the RG2500. Something about the fields. 
Can't remember exactly.

If you can't figure out how to change the above, I've attached a patch I used 
when connecting to a surpass switch. It rewrites e164 partynumber to 
dialeddigits. It's not a pretty patch but it worked againts a Siemens Surpass 
switch.

- -- 
Regards,
Tais M. Hansen
ComX
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (GNU/Linux)

iD8DBQE+3JrI2TEAILET3McRAgB0AJ4vGblsRPapnmc2NsVe5uW3WmnlMgCeNxLm
9OLGdvCai3s784VIHwNZiic=
=aP+I
-----END PGP SIGNATURE-----
Index: GkClient.cxx
===================================================================
RCS file: /cvsroot/openh323gk/openh323gk/GkClient.cxx,v
retrieving revision 1.11.4.43
diff -u -4 -p -r1.11.4.43 GkClient.cxx
--- GkClient.cxx	11 Mar 2003 01:57:29 -0000	1.11.4.43
+++ GkClient.cxx	3 Jun 2003 12:52:49 -0000
@@ -304,9 +304,9 @@ void GkClient::BuildFullRRQ(H225_Registr
 
 	rrq.m_callSignalAddress.SetSize(1);
 	rrq.m_callSignalAddress[0] = *m_callAddr;
 
-	rrq.m_terminalType.IncludeOptionalField(H225_EndpointType::e_gatekeeper);
+	//rrq.m_terminalType.IncludeOptionalField(H225_EndpointType::e_gatekeeper);
 
 	PINDEX as, p;
 	PString t(GkConfig()->GetString(EndpointSection, "Type", "gateway").ToLower());
 	if (t[0] == 't') {
Index: ProxyChannel.cxx
===================================================================
RCS file: /cvsroot/openh323gk/openh323gk/ProxyChannel.cxx,v
retrieving revision 1.39.2.91
diff -u -4 -p -r1.39.2.91 ProxyChannel.cxx
--- ProxyChannel.cxx	14 May 2003 02:27:28 -0000	1.39.2.91
+++ ProxyChannel.cxx	3 Jun 2003 12:52:49 -0000
@@ -867,8 +867,28 @@ bool CallSignalSocket::OnSetup(H225_Setu
 		// TODO: check the Setup_UUIE by gkauth modules
 
 		PString sourceString(Setup.HasOptionalField(H225_Setup_UUIE::e_sourceAddress) ? AsString(Setup.m_sourceAddress) : PString());
 
+		if( sourceString.Left( 5 ) == "E164:"
+		    && sourceString.Right( 12 ) == ":partyNumber" )
+		{
+			PTRACE( 3, "CXNET\tSiemens Surpass partyNumber format detected; rewriting sourceString." );
+			PString cxnet_srcStringReformed;
+			cxnet_srcStringReformed = sourceString.Mid( 5, 8 ) + ":dialedDigits";
+			sourceString = cxnet_srcStringReformed;
+			PTRACE( 3, "CXNET\tsourceString: '" << sourceString << "'" );
+		}
+		
+		if( destinationString.Left( 5 ) == "E164:"
+		    && destinationString.Right( 12 ) == ":partyNumber" )
+		{
+			PTRACE( 3, "CXNET\tSiemens Surpass partyNumber format detected; rewriting destinationString." );
+			PString cxnet_dstStringReformed;
+			cxnet_dstStringReformed = destinationString.Mid( 5, 8 ) + ":dialedDigits";
+			destinationString = cxnet_dstStringReformed;
+			PTRACE( 3, "CXNET\tdestinationString: '" << destinationString << "'" );
+		}
+		
 		// if I'm behind NAT and the call is from parent, always use H.245 routed
 		bool h245Routed = RasThread->IsGKRoutedH245() || (fromParent && RasThread->GetGkClient()->IsNATed());
 		// workaround for bandwidth, as OpenH323 library :p
 		CallRec *call = new CallRec(Setup.m_callIdentifier, Setup.m_conferenceID, destinationString, sourceString, 100000, h245Routed);
Index: RasTbl.cxx
===================================================================
RCS file: /cvsroot/openh323gk/openh323gk/RasTbl.cxx,v
retrieving revision 1.50.2.56
diff -u -4 -p -r1.50.2.56 RasTbl.cxx
--- RasTbl.cxx	21 Mar 2003 11:08:39 -0000	1.50.2.56
+++ RasTbl.cxx	3 Jun 2003 12:52:49 -0000
@@ -247,11 +247,46 @@ void EndpointRec::Update(const H225_RasM
 // due to strange bug of gcc, I have to pass pointer instead of reference
 bool EndpointRec::CompareAlias(const H225_ArrayOf_AliasAddress *a) const
 {
 	for (PINDEX i = 0; i < a->GetSize(); i++)
+	{
 		for (PINDEX j = 0; j < m_terminalAliases.GetSize(); j++)
+		{
+			PTRACE( 3, "CXNET\ta[i] = '" << (*a)[i] << "'" );
+			PTRACE( 3, "CXNET\tm_terminalAliases[j] = '" << m_terminalAliases[j] << "'" );
 			if ((*a)[i] == m_terminalAliases[j])
+			{
+				PTRACE( 3, "CXNET\tMatch found." );
 				return true;
+			}
+			else
+			{
+				PTRACE( 3, "CXNET\tNo match - Testing for Siemens Surpass partyNumber format." );
+				PString cxnet_CalledAlias, cxnet_TerminalAlias;
+				cxnet_CalledAlias = AsString((*a)[i]);
+				cxnet_TerminalAlias = AsString(m_terminalAliases[j]);
+				PTRACE( 3, "CXNET\tcxnet_CalledAlias = '" << cxnet_CalledAlias << "'" );
+				PTRACE( 3, "CXNET\tcxnet_TerminalAlias = '" << cxnet_TerminalAlias << "'" );
+				
+				if( cxnet_CalledAlias.Left( 5 ) == "E164:"
+				    && cxnet_CalledAlias.Right( 12 ) == ":partyNumber" )
+				{
+					PTRACE( 3, "CXNET\tSiemens Surpass partyNumber format detected in cxnet_CalledAlias." );
+
+					PString cxnet_ReformedAlias;
+					cxnet_ReformedAlias = cxnet_CalledAlias.Mid( 5, 8 ) + ":dialedDigits";
+					PTRACE( 3, "CXNET\tcxnet_ReformedAlias: '" << cxnet_ReformedAlias << "'" );
+					
+					if( cxnet_ReformedAlias == cxnet_TerminalAlias )
+					{
+						PTRACE( 3, "CXNET\tMatch found." );
+						return true;
+					}
+				}
+			}
+		}
+	}
+	PTRACE( 3, "CXNET\tNo match." );
 	return false;
 }
 
 EndpointRec *EndpointRec::Unregister()

[Index of Archives]     [SIP]     [Open H.323]     [Gnu Gatekeeper]     [Asterisk PBX]     [ISDN Cause Codes]     [Yosemite News]

  Powered by Linux