提交 e3095522 authored 作者: Giovanni Maruzzelli's avatar Giovanni Maruzzelli

skypiax: more stability, no dangling channels, MODSKYPIAX-42, added 'sk list'…

skypiax: more stability, no dangling channels, MODSKYPIAX-42, added 'sk list' statistics (thanks Seven Du) MODENDP-236

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@14533 d0543943-73ff-0310-b7d9-9358b9ac24b2
上级 5b9fc559
...@@ -91,45 +91,47 @@ typedef enum { ...@@ -91,45 +91,47 @@ typedef enum {
#define SKYPIAX_CONTROL_ANSWER 2 #define SKYPIAX_CONTROL_ANSWER 2
/*********************************/ /*********************************/
#define SKYPIAX_STATE_DOWN 1 #define SKYPIAX_STATE_IDLE 0
#define SKYPIAX_STATE_RING 2 #define SKYPIAX_STATE_DOWN 1
#define SKYPIAX_STATE_DIALING 3 #define SKYPIAX_STATE_RING 2
#define SKYPIAX_STATE_BUSY 4 #define SKYPIAX_STATE_DIALING 3
#define SKYPIAX_STATE_UP 5 #define SKYPIAX_STATE_BUSY 4
#define SKYPIAX_STATE_RINGING 6 #define SKYPIAX_STATE_UP 5
#define SKYPIAX_STATE_PRERING 7 #define SKYPIAX_STATE_RINGING 6
#define SKYPIAX_STATE_ERROR_DOUBLE_CALL 8 #define SKYPIAX_STATE_PRERING 7
#define SKYPIAX_STATE_SELECTED 9 #define SKYPIAX_STATE_ERROR_DOUBLE_CALL 8
#define SKYPIAX_STATE_SELECTED 9
#define SKYPIAX_STATE_HANGUP_REQUESTED 10
#define SKYPIAX_STATE_PREANSWER 11
/*********************************/ /*********************************/
/* call flow from the device */ /* call flow from the device */
#define CALLFLOW_CALL_IDLE SKYPIAX_STATE_DOWN #define CALLFLOW_CALL_IDLE 0
#define CALLFLOW_INCOMING_RING SKYPIAX_STATE_RING #define CALLFLOW_CALL_DOWN 1
#define CALLFLOW_CALL_DIALING SKYPIAX_STATE_DIALING #define CALLFLOW_INCOMING_RING 2
#define CALLFLOW_CALL_LINEBUSY SKYPIAX_STATE_BUSY #define CALLFLOW_CALL_DIALING 3
#define CALLFLOW_CALL_ACTIVE 300 #define CALLFLOW_CALL_LINEBUSY 4
#define CALLFLOW_INCOMING_HANGUP 100 #define CALLFLOW_CALL_ACTIVE 5
#define CALLFLOW_CALL_RELEASED 101 #define CALLFLOW_INCOMING_HANGUP 6
#define CALLFLOW_CALL_NOCARRIER 102 #define CALLFLOW_CALL_RELEASED 7
#define CALLFLOW_CALL_INFLUX 103 #define CALLFLOW_CALL_NOCARRIER 8
#define CALLFLOW_CALL_INCOMING 104 #define CALLFLOW_CALL_INFLUX 9
#define CALLFLOW_CALL_FAILED 105 #define CALLFLOW_CALL_INCOMING 10
#define CALLFLOW_CALL_NOSERVICE 106 #define CALLFLOW_CALL_FAILED 11
#define CALLFLOW_CALL_OUTGOINGRESTRICTED 107 #define CALLFLOW_CALL_NOSERVICE 12
#define CALLFLOW_CALL_SECURITYFAIL 108 #define CALLFLOW_CALL_OUTGOINGRESTRICTED 13
#define CALLFLOW_CALL_NOANSWER 109 #define CALLFLOW_CALL_SECURITYFAIL 14
#define CALLFLOW_STATUS_FINISHED 110 #define CALLFLOW_CALL_NOANSWER 15
#define CALLFLOW_STATUS_CANCELLED 111 #define CALLFLOW_STATUS_FINISHED 16
#define CALLFLOW_STATUS_FAILED 112 #define CALLFLOW_STATUS_CANCELLED 17
#define CALLFLOW_STATUS_REFUSED 113 #define CALLFLOW_STATUS_FAILED 18
#define CALLFLOW_STATUS_RINGING 114 #define CALLFLOW_STATUS_REFUSED 19
#define CALLFLOW_STATUS_INPROGRESS 115 #define CALLFLOW_STATUS_RINGING 20
#define CALLFLOW_STATUS_UNPLACED 116 #define CALLFLOW_STATUS_INPROGRESS 21
#define CALLFLOW_STATUS_ROUTING 117 #define CALLFLOW_STATUS_UNPLACED 22
#define CALLFLOW_STATUS_EARLYMEDIA 118 #define CALLFLOW_STATUS_ROUTING 23
#define SKYPIAX_STATE_HANGUP_REQUESTED 200 #define CALLFLOW_STATUS_EARLYMEDIA 24
//FIXME CALLFLOW_INCOMING_CALLID to be removed #define CALLFLOW_INCOMING_CALLID 25
#define CALLFLOW_INCOMING_CALLID 1019 #define CALLFLOW_STATUS_REMOTEHOLD 26
#define CALLFLOW_STATUS_REMOTEHOLD 201
/*********************************/ /*********************************/
...@@ -241,6 +243,10 @@ struct private_object { ...@@ -241,6 +243,10 @@ struct private_object {
char transfer_callid_number[50]; char transfer_callid_number[50];
char skype_transfer_call_id[512]; char skype_transfer_call_id[512];
int running; int running;
unsigned long ib_calls;
unsigned long ob_calls;
unsigned long ib_failed_calls;
unsigned long ob_failed_calls;
}; };
typedef struct private_object private_t; typedef struct private_object private_t;
......
...@@ -62,7 +62,6 @@ int skypiax_socket_create_and_bind(private_t * tech_pvt, int *which_port) ...@@ -62,7 +62,6 @@ int skypiax_socket_create_and_bind(private_t * tech_pvt, int *which_port)
tech_pvt->tcp_cli_port, tech_pvt->tcp_srv_port); tech_pvt->tcp_cli_port, tech_pvt->tcp_srv_port);
return -1; return -1;
} }
//usleep(100);
} }
DEBUGA_SKYPE("SUCCESS! *which_port=%d, tech_pvt->tcp_cli_port=%d, tech_pvt->tcp_srv_port=%d\n", SKYPIAX_P_LOG, *which_port, tech_pvt->tcp_cli_port, DEBUGA_SKYPE("SUCCESS! *which_port=%d, tech_pvt->tcp_cli_port=%d, tech_pvt->tcp_srv_port=%d\n", SKYPIAX_P_LOG, *which_port, tech_pvt->tcp_cli_port,
...@@ -231,7 +230,7 @@ int skypiax_signaling_read(private_t * tech_pvt) ...@@ -231,7 +230,7 @@ int skypiax_signaling_read(private_t * tech_pvt)
//SKYPIAX_P_LOG, message, obj, id, prop, value, where ? where : "NULL"); //SKYPIAX_P_LOG, message, obj, id, prop, value, where ? where : "NULL");
if (!strcasecmp(prop, "PARTNER_HANDLE")) { if (!strcasecmp(prop, "PARTNER_HANDLE")) {
if (!strlen(tech_pvt->skype_call_id) || !strlen(tech_pvt->session_uuid_str)) { if (tech_pvt->interface_state != SKYPIAX_STATE_SELECTED && (!strlen(tech_pvt->skype_call_id) || !strlen(tech_pvt->session_uuid_str)) ) {
//if (!strlen(tech_pvt->skype_call_id)) { //if (!strlen(tech_pvt->skype_call_id)) {
/* we are NOT inside an active call */ /* we are NOT inside an active call */
DEBUGA_SKYPE("Call %s TRY ANSWER\n", SKYPIAX_P_LOG, id); DEBUGA_SKYPE("Call %s TRY ANSWER\n", SKYPIAX_P_LOG, id);
...@@ -256,13 +255,13 @@ int skypiax_signaling_read(private_t * tech_pvt) ...@@ -256,13 +255,13 @@ int skypiax_signaling_read(private_t * tech_pvt)
} }
if (!strcasecmp(prop, "CONF_ID") && !strcasecmp(value, "0")) { if (!strcasecmp(prop, "CONF_ID") && !strcasecmp(value, "0")) {
//DEBUGA_SKYPE("the skype_call %s is NOT a conference call\n", SKYPIAX_P_LOG, id); //DEBUGA_SKYPE("the skype_call %s is NOT a conference call\n", SKYPIAX_P_LOG, id);
if (tech_pvt->interface_state == SKYPIAX_STATE_DOWN) //if (tech_pvt->interface_state == SKYPIAX_STATE_DOWN)
tech_pvt->interface_state = SKYPIAX_STATE_PRERING; //tech_pvt->interface_state = SKYPIAX_STATE_PRERING;
} }
if (!strcasecmp(prop, "CONF_ID") && strcasecmp(value, "0")) { if (!strcasecmp(prop, "CONF_ID") && strcasecmp(value, "0")) {
DEBUGA_SKYPE("the skype_call %s is a conference call\n", SKYPIAX_P_LOG, id); DEBUGA_SKYPE("the skype_call %s is a conference call\n", SKYPIAX_P_LOG, id);
if (tech_pvt->interface_state == SKYPIAX_STATE_DOWN) //if (tech_pvt->interface_state == SKYPIAX_STATE_DOWN)
tech_pvt->interface_state = SKYPIAX_STATE_PRERING; //tech_pvt->interface_state = SKYPIAX_STATE_PRERING;
} }
if (!strcasecmp(prop, "DTMF")) { if (!strcasecmp(prop, "DTMF")) {
DEBUGA_SKYPE("Call %s received a DTMF: %s\n", SKYPIAX_P_LOG, id, value); DEBUGA_SKYPE("Call %s received a DTMF: %s\n", SKYPIAX_P_LOG, id, value);
...@@ -338,7 +337,6 @@ int skypiax_signaling_read(private_t * tech_pvt) ...@@ -338,7 +337,6 @@ int skypiax_signaling_read(private_t * tech_pvt)
DEBUGA_SKYPE("We missed skype_call %s\n", SKYPIAX_P_LOG, id); DEBUGA_SKYPE("We missed skype_call %s\n", SKYPIAX_P_LOG, id);
} else if (!strcasecmp(value, "FINISHED")) { } else if (!strcasecmp(value, "FINISHED")) {
//DEBUGA_SKYPE("skype_call %s now is DOWN\n", SKYPIAX_P_LOG, id); //DEBUGA_SKYPE("skype_call %s now is DOWN\n", SKYPIAX_P_LOG, id);
//usleep(150000);//150msec, let's give the TCP sockets time to timeout
if (!strcasecmp(tech_pvt->skype_call_id, id)) { if (!strcasecmp(tech_pvt->skype_call_id, id)) {
//tech_pvt->skype_callflow = CALLFLOW_STATUS_FINISHED; //tech_pvt->skype_callflow = CALLFLOW_STATUS_FINISHED;
DEBUGA_SKYPE("skype_call %s is MY call, now I'm going DOWN\n", SKYPIAX_P_LOG, id); DEBUGA_SKYPE("skype_call %s is MY call, now I'm going DOWN\n", SKYPIAX_P_LOG, id);
...@@ -429,7 +427,7 @@ int skypiax_signaling_read(private_t * tech_pvt) ...@@ -429,7 +427,7 @@ int skypiax_signaling_read(private_t * tech_pvt)
DEBUGA_SKYPE("New Inbound Channel!\n\n\n\n", SKYPIAX_P_LOG); DEBUGA_SKYPE("New Inbound Channel!\n\n\n\n", SKYPIAX_P_LOG);
new_inbound_channel(tech_pvt); new_inbound_channel(tech_pvt);
} else { } else {
DEBUGA_SKYPE("Outbound Channel Answered!\n", SKYPIAX_P_LOG); DEBUGA_SKYPE("Outbound Channel Answered! session_uuid_str=%s\n", SKYPIAX_P_LOG, tech_pvt->session_uuid_str);
outbound_channel_answered(tech_pvt); outbound_channel_answered(tech_pvt);
} }
} else { } else {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论