|
|
|
@ -687,7 +687,7 @@ H323Channel * MyH323Connection::CreateRealTimeLogicalChannel(const H323Capabilit
|
|
|
|
|
cout << " -- SessionID: " << sessionID << endl;
|
|
|
|
|
cout << " -- Direction: " << dir << endl;
|
|
|
|
|
}
|
|
|
|
|
return new MyH323_ExternalRTPChannel(*this, capability, dir, sessionID, externalIpAddress, externalPort);
|
|
|
|
|
return new H323_ExternalRTPChannel(*this, capability, dir, sessionID, externalIpAddress, externalPort);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** This callback function is invoked once upon creation of each
|
|
|
|
@ -720,63 +720,6 @@ 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 */
|
|
|
|
|
|
|
|
|
@ -943,7 +886,10 @@ int h323_start_listener(int listenPort, struct sockaddr_in bindaddr)
|
|
|
|
|
|
|
|
|
|
int h323_set_alias(struct oh323_alias *alias)
|
|
|
|
|
{
|
|
|
|
|
char *p;
|
|
|
|
|
char *num;
|
|
|
|
|
PString h323id(alias->name);
|
|
|
|
|
PString e164(alias->e164);
|
|
|
|
|
|
|
|
|
|
if (!h323_end_point_exist()) {
|
|
|
|
|
cout << "ERROR: [h323_set_alias] No Endpoint, this is bad!" << endl;
|
|
|
|
@ -954,26 +900,18 @@ int h323_set_alias(struct oh323_alias *alias)
|
|
|
|
|
endPoint->AddAliasName(h323id);
|
|
|
|
|
endPoint->RemoveAliasName(localProcess->GetUserName());
|
|
|
|
|
|
|
|
|
|
if(alias->e164) {
|
|
|
|
|
struct e164_number *num = alias->e164;
|
|
|
|
|
while(num) {
|
|
|
|
|
if(strlen(num->number)) {
|
|
|
|
|
cout << " == Adding E.164 \"" << num->number << "\" to endpoint" << endl;
|
|
|
|
|
endPoint->AddAliasName(num->number);
|
|
|
|
|
}
|
|
|
|
|
num = num->next;
|
|
|
|
|
}
|
|
|
|
|
if (!e164.IsEmpty()) {
|
|
|
|
|
cout << " == Adding E.164 \"" << e164 << "\" to endpoint" << endl;
|
|
|
|
|
endPoint->AddAliasName(e164);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(alias->prefix) {
|
|
|
|
|
struct e164_number *num = alias->prefix;
|
|
|
|
|
if (strlen(alias->prefix)) {
|
|
|
|
|
p = alias->prefix;
|
|
|
|
|
num = strsep(&p, ",");
|
|
|
|
|
while(num) {
|
|
|
|
|
if(strlen(num->number)) {
|
|
|
|
|
cout << " == Adding Prefix \"" << num->number << "\" to endpoint" << endl;
|
|
|
|
|
endPoint->SupportedPrefixes += PString(num->number);
|
|
|
|
|
endPoint->SetGateway();
|
|
|
|
|
}
|
|
|
|
|
num = num->next;
|
|
|
|
|
cout << " == Adding Prefix \"" << num << "\" to endpoint" << endl;
|
|
|
|
|
endPoint->SupportedPrefixes += PString(num);
|
|
|
|
|
endPoint->SetGateway();
|
|
|
|
|
num = strsep(&p, ",");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1159,3 +1097,5 @@ void h323_native_bridge(const char *token, char *them, char *capability)
|
|
|
|
|
|
|
|
|
|
} /* extern "C" */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|