try to work around CCM interop, UNTESTED! Someone with a CCM needs to test this
authorJeremy McNamara <jj@nufone.net>
Sat, 20 Mar 2004 14:14:00 +0000 (14:14 +0000)
committerJeremy McNamara <jj@nufone.net>
Sat, 20 Mar 2004 14:14:00 +0000 (14:14 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2497 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/h323/ast_h323.cpp
channels/h323/ast_h323.h
channels/h323/h323.conf.sample

index e55b938..9dbc1aa 100755 (executable)
@@ -687,7 +687,7 @@ H323Channel * MyH323Connection::CreateRealTimeLogicalChannel(const H323Capabilit
                cout << "               -- SessionID: " << sessionID << endl;
                cout << "               -- Direction: " << dir << endl;
        }
-       return new H323_ExternalRTPChannel(*this, capability, dir, sessionID, externalIpAddress, externalPort);
+       return new MyH323_ExternalRTPChannel(*this, capability, dir, sessionID, externalIpAddress, externalPort);
 }
 
 /** This callback function is invoked once upon creation of each
@@ -720,6 +720,63 @@ BOOL MyH323Connection::OnStartLogicalChannel(H323Channel & channel)
        return TRUE;    
 }
 
+/* MyH323_ExternalRTPChannel */
+MyH323_ExternalRTPChannel::MyH323_ExternalRTPChannel(MyH323Connection & connection,
+                                                                                                       const H323Capability & capability,
+                                                                                                       Directions direction,
+                                                                                                       unsigned sessionID,
+                                                                                                       const PIPSocket::Address & ip,
+                                                                                                       WORD dataPort)
+       : H323_ExternalRTPChannel(connection, capability, direction, sessionID, ip, dataPort)
+{
+       if (h323debug) {
+               cout << "       == New H.323 ExternalRTPChannel created." << endl;
+       }
+       return;
+}
+
+MyH323_ExternalRTPChannel::~MyH323_ExternalRTPChannel()
+{
+       if (h323debug) {
+               cout << "       == H.323 ExternalRTPChannel deleted." << endl;
+       }
+       return;
+}
+
+BOOL MyH323_ExternalRTPChannel::OnReceivedPDU(
+                               const H245_H2250LogicalChannelParameters & param,
+                               unsigned & errorCode)
+{
+       if (h323debug) {
+               cout << "       MyH323_ExternalRTPChannel::OnReceivedPDU " << endl;
+       }
+       return H323_ExternalRTPChannel::OnReceivedPDU( param, errorCode );
+}
+
+BOOL MyH323_ExternalRTPChannel::OnReceivedAckPDU(
+                               const H245_H2250LogicalChannelAckParameters & param)
+{
+
+       PIPSocket::Address remoteIpAddress;             // IP Address of remote endpoint
+       WORD                       remotePort;                  // remote endpoint Data port (control is dataPort+1)
+
+       if (h323debug) {
+               cout << "       MyH323_ExternalRTPChannel::OnReceivedAckPDU " << endl;
+       }
+
+       if (H323_ExternalRTPChannel::OnReceivedAckPDU( param )) {
+               GetRemoteAddress(remoteIpAddress, remotePort);
+               if (h323debug) {
+                       cout << "               -- remoteIpAddress: " << remoteIpAddress << endl;
+                       cout << "               -- remotePort: " << remotePort << endl;
+               }
+               /* Notify Asterisk of remote RTP information */
+               on_start_logical_channel(connection.GetCallReference(), (const char *)remoteIpAddress.AsString(), remotePort);
+               return TRUE;
+       }
+       return FALSE;
+}
+
 
 /** IMPLEMENTATION OF C FUNCTIONS */
 
@@ -1102,5 +1159,3 @@ void h323_native_bridge(const char *token, char *them, char *capability)
 
 } /* extern "C" */
 
-
-
index e079d96..91ebab0 100755 (executable)
@@ -253,6 +253,26 @@ class MyH323Connection : public H323Connection {
        BOOL                       bridging;                    // Used to help determine which IP to use
 };
 
+class MyH323_ExternalRTPChannel : public H323_ExternalRTPChannel {
+
+       PCLASSINFO(MyH323_ExternalRTPChannel, H323_ExternalRTPChannel);
+
+       public:
+
+    MyH323_ExternalRTPChannel(MyH323Connection &, const H323Capability &, Directions,
+                                               unsigned, const PIPSocket::Address &, WORD);
+
+       ~MyH323_ExternalRTPChannel();
+
+    BOOL OnReceivedPDU(
+      const H245_H2250LogicalChannelParameters & param, /// Acknowledgement PDU
+      unsigned & errorCode                              /// Error on failure
+    );
+
+    BOOL OnReceivedAckPDU(const H245_H2250LogicalChannelAckParameters & param);
+
+};
+
 /**
  * The MyProcess is a necessary descendant PProcess class so that the H323EndPoint 
  * objected to be created from within that class. (Who owns main() problem). 
@@ -269,4 +289,3 @@ class MyProcess : public PProcess {
        
 };
 
-
index 8d1e655..811647a 100755 (executable)
@@ -49,17 +49,14 @@ allow=gsm           ; Always allow GSM, it's cool :)
 ; Default context gets used in siutations where you are using 
 ; the GK routed model or no type=user was found. This gives you 
 ; the ability to either play an invalid message or to simply not 
-; use user authentication at all. Also, if a call is accepted for
-; a prefix or e164 number that cannot be matched to any of the
-; following sections, it will be sent here.
+; use user authentication at all.
 ;
 ;context=default
 ;
 ; H.323 Alias definitions
 ;
 ; Type 'h323' will register aliases to the endpoint
-; and Gatekeeper, if there is one. It will also offer
-; itself as a gateway for prefixes.
+; and Gatekeeper, if there is one.
 ;
 ; Example: if someone calls time@your.asterisk.box.com
 ; Asterisk will send the call to the extension 'time' 
@@ -72,11 +69,6 @@ allow=gsm            ; Always allow GSM, it's cool :)
 ; Keyword's 'prefix' and 'e164' are only make sense when
 ; used with a gatekeeper. You can specify either a prefix 
 ; or E.164 this endpoint is responsible for terminating.
-; In the case of a prefix or e164, the context specified
-; in that section will receive the called extension. E164
-; numbers are matched before prefixes, so you can have
-; a prefix covering a general case, and a specific E164 in
-; another context.
 ; 
 ; Example: The H.323 alias 'det-gw' will tell the gatekeeper
 ; to route any call with the prefix 1248 to this alias. Keyword