re-apply possible CCM fix. Someone still needs to test this
[asterisk/asterisk.git] / channels / h323 / ast_h323.cpp
index 44e8163..ffb5855 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 */
 
@@ -1097,5 +1154,3 @@ void h323_native_bridge(const char *token, char *them, char *capability)
 
 } /* extern "C" */
 
-
-