fix rtp timer initialisation.
implement alerting-indication option and channel variable. implement progress-indication option and channel variable. git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15905 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
922e1d65ce
commit
c0b178bdef
|
@ -1,5 +1,7 @@
|
||||||
|
fix rtp timer initialisation.
|
||||||
fix to build with trunk changes.
|
implement alerting-indication option and channel variable.
|
||||||
|
implement progress-indication option and channel variable.
|
||||||
|
fix short DTMF warnings.
|
||||||
remove SWITCH_RTP_FLAG_AUTOADJ because its not work correctly and not do anything reliable in our cases.
|
remove SWITCH_RTP_FLAG_AUTOADJ because its not work correctly and not do anything reliable in our cases.
|
||||||
fix faststart in progress handling
|
fix faststart in progress handling
|
||||||
fixxxxes
|
fixxxxes
|
||||||
|
|
|
@ -12,6 +12,8 @@
|
||||||
<param name="h245tunneling" value="true"/> <!-- optional -->
|
<param name="h245tunneling" value="true"/> <!-- optional -->
|
||||||
<param name="h245insetup" value="true"/> <!-- optional -->
|
<param name="h245insetup" value="true"/> <!-- optional -->
|
||||||
<param name="jitter-size" value="60"/> <!-- optional -->
|
<param name="jitter-size" value="60"/> <!-- optional -->
|
||||||
|
<param name="progress-indication" value="8"/> <!-- optional - PI value in progress message-->
|
||||||
|
<param name="alerting-indication" value="8"/> <!-- optional - PI value in alerting message-->
|
||||||
</settings>
|
</settings>
|
||||||
<listeners>
|
<listeners>
|
||||||
<listener name="default">
|
<listener name="default">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Version 0.0.13
|
Version 0.0.16
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "mod_h323.h"
|
#include "mod_h323.h"
|
||||||
|
@ -361,6 +361,8 @@ switch_status_t FSH323EndPoint::ReadConfig(int reload){
|
||||||
}
|
}
|
||||||
|
|
||||||
switch_xml_t xmlSettings = switch_xml_child(cfg, "settings");
|
switch_xml_t xmlSettings = switch_xml_child(cfg, "settings");
|
||||||
|
m_pi = 8;
|
||||||
|
m_ai = 0;
|
||||||
if (xmlSettings) {
|
if (xmlSettings) {
|
||||||
for (switch_xml_t xmlParam = switch_xml_child(xmlSettings, "param"); xmlParam != NULL; xmlParam = xmlParam->next) {
|
for (switch_xml_t xmlParam = switch_xml_child(xmlSettings, "param"); xmlParam != NULL; xmlParam = xmlParam->next) {
|
||||||
const char *var = switch_xml_attr_soft(xmlParam, "name");
|
const char *var = switch_xml_attr_soft(xmlParam, "name");
|
||||||
|
@ -405,8 +407,11 @@ switch_status_t FSH323EndPoint::ReadConfig(int reload){
|
||||||
m_gkPrefixes.AppendString(val);
|
m_gkPrefixes.AppendString(val);
|
||||||
} else if (!strcasecmp(var, "gk-retry")) {
|
} else if (!strcasecmp(var, "gk-retry")) {
|
||||||
m_gkretry = atoi(val);
|
m_gkretry = atoi(val);
|
||||||
}
|
} else if (!strcasecmp(var, "progress-indication")) {
|
||||||
|
m_pi = atoi(val);
|
||||||
|
} else if (!strcasecmp(var, "alerting-indication")) {
|
||||||
|
m_ai = atoi(val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -821,6 +826,89 @@ bool FSH323Connection::OnAlerting(const H323SignalPDU &alertingPDU, const PStrin
|
||||||
return ( status == SWITCH_STATUS_SUCCESS);
|
return ( status == SWITCH_STATUS_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FSH323Connection::AnsweringCall(AnswerCallResponse response){
|
||||||
|
|
||||||
|
PTRACE(4, "mod_h323\t======>FSH323Connection::AnsweringCall ["<<*this<<"]");
|
||||||
|
|
||||||
|
switch (response) {
|
||||||
|
case AnswerCallDeferredWithMedia:{
|
||||||
|
PTRACE(2, "H323\tAnswering call: " << response);
|
||||||
|
if (!Lock())
|
||||||
|
return;
|
||||||
|
if (!mediaWaitForConnect) {
|
||||||
|
// create a new facility PDU if doing AnswerDeferredWithMedia
|
||||||
|
H323SignalPDU want245PDU;
|
||||||
|
H225_Progress_UUIE & prog = want245PDU.BuildProgress(*this);
|
||||||
|
PBoolean sendPDU = TRUE;
|
||||||
|
|
||||||
|
if (SendFastStartAcknowledge(prog.m_fastStart))
|
||||||
|
prog.IncludeOptionalField(H225_Progress_UUIE::e_fastStart);
|
||||||
|
else {
|
||||||
|
// See if aborted call
|
||||||
|
if (connectionState == ShuttingDownConnection){
|
||||||
|
Unlock();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Do early H.245 start
|
||||||
|
H225_Facility_UUIE & fac = *want245PDU.BuildFacility(*this, FALSE, H225_FacilityReason::e_startH245);
|
||||||
|
earlyStart = TRUE;
|
||||||
|
if (!h245Tunneling && (controlChannel == NULL)) {
|
||||||
|
if (!StartControlChannel()){
|
||||||
|
Unlock();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fac.IncludeOptionalField(H225_Facility_UUIE::e_h245Address);
|
||||||
|
controlChannel->SetUpTransportPDU(fac.m_h245Address, TRUE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sendPDU = FALSE;
|
||||||
|
}
|
||||||
|
const char *vpi = switch_channel_get_variable(m_fsChannel, "progress-indication");
|
||||||
|
unsigned pi = 8;
|
||||||
|
if (vpi){
|
||||||
|
pi = atoi(vpi);
|
||||||
|
}
|
||||||
|
else pi = m_endpoint->m_pi;
|
||||||
|
if ((pi< 1) || (pi > 8)||(pi == 7)) pi = 8;
|
||||||
|
want245PDU.GetQ931().SetProgressIndicator(pi);
|
||||||
|
if (sendPDU) {
|
||||||
|
HandleTunnelPDU(&want245PDU);
|
||||||
|
WriteSignalPDU(want245PDU);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
InternalEstablishedConnectionCheck();
|
||||||
|
Unlock();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
case AnswerCallPending :{
|
||||||
|
if (alertingPDU != NULL) {
|
||||||
|
if (!Lock())
|
||||||
|
return;
|
||||||
|
// send Q931 Alerting PDU
|
||||||
|
PTRACE(3, "H225\tSending Alerting PDU");
|
||||||
|
|
||||||
|
const char *vai = switch_channel_get_variable(m_fsChannel, "alerting-indication");
|
||||||
|
unsigned ai = 0;
|
||||||
|
if (vai){
|
||||||
|
ai = atoi(vai);
|
||||||
|
}
|
||||||
|
else ai = m_endpoint->m_ai;
|
||||||
|
if ((ai< 0) || (ai > 8)||(ai == 7)) ai = 8;
|
||||||
|
if (ai > 0)
|
||||||
|
(*alertingPDU).GetQ931().SetProgressIndicator(ai);
|
||||||
|
|
||||||
|
HandleTunnelPDU(alertingPDU);
|
||||||
|
WriteSignalPDU(*alertingPDU);
|
||||||
|
alertingTime = PTime();
|
||||||
|
InternalEstablishedConnectionCheck();
|
||||||
|
Unlock();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default :H323Connection::AnsweringCall(response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void FSH323Connection::OnEstablished(){
|
void FSH323Connection::OnEstablished(){
|
||||||
|
|
||||||
PTRACE(4, "mod_h323\t======>PFSH323Connection::OnEstablished ["<<*this<<"]");
|
PTRACE(4, "mod_h323\t======>PFSH323Connection::OnEstablished ["<<*this<<"]");
|
||||||
|
@ -1229,6 +1317,7 @@ PBoolean FSH323_ExternalRTPChannel::Start(){
|
||||||
m_switchCodec = NULL;
|
m_switchCodec = NULL;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
switch_channel_set_variable(m_fsChannel,"timer_name","soft");
|
||||||
} else {
|
} else {
|
||||||
switch_core_session_set_video_read_codec(m_fsSession, m_switchCodec);
|
switch_core_session_set_video_read_codec(m_fsSession, m_switchCodec);
|
||||||
switch_channel_set_flag(m_fsChannel, CF_VIDEO);
|
switch_channel_set_flag(m_fsChannel, CF_VIDEO);
|
||||||
|
@ -1278,11 +1367,13 @@ PBoolean FSH323_ExternalRTPChannel::Start(){
|
||||||
PTRACE(4, "mod_h323\t------------------->samples_per_packet = "<<m_switchCodec->implementation->samples_per_packet);
|
PTRACE(4, "mod_h323\t------------------->samples_per_packet = "<<m_switchCodec->implementation->samples_per_packet);
|
||||||
PTRACE(4, "mod_h323\t------------------->actual_samples_per_second = "<<m_switchCodec->implementation->actual_samples_per_second);
|
PTRACE(4, "mod_h323\t------------------->actual_samples_per_second = "<<m_switchCodec->implementation->actual_samples_per_second);
|
||||||
|
|
||||||
if (!m_conn->m_startRTP) {
|
if ((!m_conn->m_startRTP)&&(GetDirection() == IsReceiver)) {
|
||||||
flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_DATAWAIT|SWITCH_RTP_FLAG_AUTO_CNG|SWITCH_RTP_FLAG_RAW_WRITE);
|
flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_DATAWAIT|SWITCH_RTP_FLAG_AUTO_CNG|SWITCH_RTP_FLAG_RAW_WRITE);
|
||||||
|
PTRACE(4, "mod_h323\t------------------->timer_name = "<<switch_channel_get_variable(m_fsChannel, "timer_name"));
|
||||||
if ((var = switch_channel_get_variable(m_fsChannel, "timer_name"))) {
|
if ((var = switch_channel_get_variable(m_fsChannel, "timer_name"))) {
|
||||||
timer_name = (char *) var;
|
timer_name = (char *) var;
|
||||||
}
|
}
|
||||||
|
PTRACE(4, "mod_h323\t------------------->timer_name = "<<timer_name);
|
||||||
tech_pvt->rtp_session = switch_rtp_new((const char *)m_RTPlocalIP,
|
tech_pvt->rtp_session = switch_rtp_new((const char *)m_RTPlocalIP,
|
||||||
m_RTPlocalPort,
|
m_RTPlocalPort,
|
||||||
(const char *)m_RTPremoteIP,
|
(const char *)m_RTPremoteIP,
|
||||||
|
|
|
@ -126,6 +126,7 @@ struct FSListener {
|
||||||
PString gatekeeper;
|
PString gatekeeper;
|
||||||
};
|
};
|
||||||
class FSGkRegThread;
|
class FSGkRegThread;
|
||||||
|
|
||||||
class FSH323EndPoint:public H323EndPoint {
|
class FSH323EndPoint:public H323EndPoint {
|
||||||
|
|
||||||
PCLASSINFO(FSH323EndPoint, H323EndPoint);
|
PCLASSINFO(FSH323EndPoint, H323EndPoint);
|
||||||
|
@ -156,7 +157,8 @@ class FSH323EndPoint:public H323EndPoint {
|
||||||
}
|
}
|
||||||
FSH323Connection * FSMakeCall(const PString & dest,void *userData);
|
FSH323Connection * FSMakeCall(const PString & dest,void *userData);
|
||||||
list <FSListener> m_listeners;
|
list <FSListener> m_listeners;
|
||||||
|
int m_ai;
|
||||||
|
int m_pi;
|
||||||
protected:
|
protected:
|
||||||
PStringList m_gkPrefixes;
|
PStringList m_gkPrefixes;
|
||||||
switch_endpoint_interface_t *m_freeswitch;
|
switch_endpoint_interface_t *m_freeswitch;
|
||||||
|
@ -168,7 +170,6 @@ class FSH323EndPoint:public H323EndPoint {
|
||||||
bool m_h245insetup;
|
bool m_h245insetup;
|
||||||
int m_gkretry;
|
int m_gkretry;
|
||||||
FSGkRegThread* m_thread;
|
FSGkRegThread* m_thread;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -219,6 +220,7 @@ class FSH323Connection:public H323Connection {
|
||||||
void setRemoteAddress(const char* remoteIP, WORD remotePort);
|
void setRemoteAddress(const char* remoteIP, WORD remotePort);
|
||||||
virtual void OnSetLocalCapabilities();
|
virtual void OnSetLocalCapabilities();
|
||||||
virtual bool OnAlerting(const H323SignalPDU &alertingPDU, const PString &user);
|
virtual bool OnAlerting(const H323SignalPDU &alertingPDU, const PString &user);
|
||||||
|
virtual void AnsweringCall(AnswerCallResponse response);
|
||||||
virtual void OnEstablished();
|
virtual void OnEstablished();
|
||||||
bool SetLocalCapabilities();
|
bool SetLocalCapabilities();
|
||||||
static bool decodeCapability(const H323Capability& capability, const char** dataFormat, int* payload = 0, PString* capabName = 0);
|
static bool decodeCapability(const H323Capability& capability, const char** dataFormat, int* payload = 0, PString* capabName = 0);
|
||||||
|
|
Loading…
Reference in New Issue