try to work around CCM interop, UNTESTED! Someone with a CCM needs to test this
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@2497 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
09acc271c7
commit
19471f4a8f
|
@ -687,7 +687,7 @@ H323Channel * MyH323Connection::CreateRealTimeLogicalChannel(const H323Capabilit
|
||||||
cout << " -- SessionID: " << sessionID << endl;
|
cout << " -- SessionID: " << sessionID << endl;
|
||||||
cout << " -- Direction: " << dir << 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
|
/** This callback function is invoked once upon creation of each
|
||||||
|
@ -720,6 +720,63 @@ BOOL MyH323Connection::OnStartLogicalChannel(H323Channel & channel)
|
||||||
return TRUE;
|
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 */
|
/** IMPLEMENTATION OF C FUNCTIONS */
|
||||||
|
|
||||||
|
@ -1102,5 +1159,3 @@ void h323_native_bridge(const char *token, char *them, char *capability)
|
||||||
|
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -253,6 +253,26 @@ class MyH323Connection : public H323Connection {
|
||||||
BOOL bridging; // Used to help determine which IP to use
|
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
|
* The MyProcess is a necessary descendant PProcess class so that the H323EndPoint
|
||||||
* objected to be created from within that class. (Who owns main() problem).
|
* objected to be created from within that class. (Who owns main() problem).
|
||||||
|
@ -269,4 +289,3 @@ class MyProcess : public PProcess {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -49,17 +49,14 @@ allow=gsm ; Always allow GSM, it's cool :)
|
||||||
; Default context gets used in siutations where you are using
|
; Default context gets used in siutations where you are using
|
||||||
; the GK routed model or no type=user was found. This gives you
|
; 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
|
; the ability to either play an invalid message or to simply not
|
||||||
; use user authentication at all. Also, if a call is accepted for
|
; use user authentication at all.
|
||||||
; a prefix or e164 number that cannot be matched to any of the
|
|
||||||
; following sections, it will be sent here.
|
|
||||||
;
|
;
|
||||||
;context=default
|
;context=default
|
||||||
;
|
;
|
||||||
; H.323 Alias definitions
|
; H.323 Alias definitions
|
||||||
;
|
;
|
||||||
; Type 'h323' will register aliases to the endpoint
|
; Type 'h323' will register aliases to the endpoint
|
||||||
; and Gatekeeper, if there is one. It will also offer
|
; and Gatekeeper, if there is one.
|
||||||
; itself as a gateway for prefixes.
|
|
||||||
;
|
;
|
||||||
; Example: if someone calls time@your.asterisk.box.com
|
; Example: if someone calls time@your.asterisk.box.com
|
||||||
; Asterisk will send the call to the extension 'time'
|
; 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
|
; Keyword's 'prefix' and 'e164' are only make sense when
|
||||||
; used with a gatekeeper. You can specify either a prefix
|
; used with a gatekeeper. You can specify either a prefix
|
||||||
; or E.164 this endpoint is responsible for terminating.
|
; 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
|
; Example: The H.323 alias 'det-gw' will tell the gatekeeper
|
||||||
; to route any call with the prefix 1248 to this alias. Keyword
|
; to route any call with the prefix 1248 to this alias. Keyword
|
||||||
|
|
Reference in New Issue