提交 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 {
#define SKYPIAX_CONTROL_ANSWER 2
/*********************************/
#define SKYPIAX_STATE_DOWN 1
#define SKYPIAX_STATE_RING 2
#define SKYPIAX_STATE_DIALING 3
#define SKYPIAX_STATE_BUSY 4
#define SKYPIAX_STATE_UP 5
#define SKYPIAX_STATE_RINGING 6
#define SKYPIAX_STATE_PRERING 7
#define SKYPIAX_STATE_ERROR_DOUBLE_CALL 8
#define SKYPIAX_STATE_SELECTED 9
#define SKYPIAX_STATE_IDLE 0
#define SKYPIAX_STATE_DOWN 1
#define SKYPIAX_STATE_RING 2
#define SKYPIAX_STATE_DIALING 3
#define SKYPIAX_STATE_BUSY 4
#define SKYPIAX_STATE_UP 5
#define SKYPIAX_STATE_RINGING 6
#define SKYPIAX_STATE_PRERING 7
#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 */
#define CALLFLOW_CALL_IDLE SKYPIAX_STATE_DOWN
#define CALLFLOW_INCOMING_RING SKYPIAX_STATE_RING
#define CALLFLOW_CALL_DIALING SKYPIAX_STATE_DIALING
#define CALLFLOW_CALL_LINEBUSY SKYPIAX_STATE_BUSY
#define CALLFLOW_CALL_ACTIVE 300
#define CALLFLOW_INCOMING_HANGUP 100
#define CALLFLOW_CALL_RELEASED 101
#define CALLFLOW_CALL_NOCARRIER 102
#define CALLFLOW_CALL_INFLUX 103
#define CALLFLOW_CALL_INCOMING 104
#define CALLFLOW_CALL_FAILED 105
#define CALLFLOW_CALL_NOSERVICE 106
#define CALLFLOW_CALL_OUTGOINGRESTRICTED 107
#define CALLFLOW_CALL_SECURITYFAIL 108
#define CALLFLOW_CALL_NOANSWER 109
#define CALLFLOW_STATUS_FINISHED 110
#define CALLFLOW_STATUS_CANCELLED 111
#define CALLFLOW_STATUS_FAILED 112
#define CALLFLOW_STATUS_REFUSED 113
#define CALLFLOW_STATUS_RINGING 114
#define CALLFLOW_STATUS_INPROGRESS 115
#define CALLFLOW_STATUS_UNPLACED 116
#define CALLFLOW_STATUS_ROUTING 117
#define CALLFLOW_STATUS_EARLYMEDIA 118
#define SKYPIAX_STATE_HANGUP_REQUESTED 200
//FIXME CALLFLOW_INCOMING_CALLID to be removed
#define CALLFLOW_INCOMING_CALLID 1019
#define CALLFLOW_STATUS_REMOTEHOLD 201
#define CALLFLOW_CALL_IDLE 0
#define CALLFLOW_CALL_DOWN 1
#define CALLFLOW_INCOMING_RING 2
#define CALLFLOW_CALL_DIALING 3
#define CALLFLOW_CALL_LINEBUSY 4
#define CALLFLOW_CALL_ACTIVE 5
#define CALLFLOW_INCOMING_HANGUP 6
#define CALLFLOW_CALL_RELEASED 7
#define CALLFLOW_CALL_NOCARRIER 8
#define CALLFLOW_CALL_INFLUX 9
#define CALLFLOW_CALL_INCOMING 10
#define CALLFLOW_CALL_FAILED 11
#define CALLFLOW_CALL_NOSERVICE 12
#define CALLFLOW_CALL_OUTGOINGRESTRICTED 13
#define CALLFLOW_CALL_SECURITYFAIL 14
#define CALLFLOW_CALL_NOANSWER 15
#define CALLFLOW_STATUS_FINISHED 16
#define CALLFLOW_STATUS_CANCELLED 17
#define CALLFLOW_STATUS_FAILED 18
#define CALLFLOW_STATUS_REFUSED 19
#define CALLFLOW_STATUS_RINGING 20
#define CALLFLOW_STATUS_INPROGRESS 21
#define CALLFLOW_STATUS_UNPLACED 22
#define CALLFLOW_STATUS_ROUTING 23
#define CALLFLOW_STATUS_EARLYMEDIA 24
#define CALLFLOW_INCOMING_CALLID 25
#define CALLFLOW_STATUS_REMOTEHOLD 26
/*********************************/
......@@ -241,6 +243,10 @@ struct private_object {
char transfer_callid_number[50];
char skype_transfer_call_id[512];
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;
......
......@@ -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);
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,
......@@ -231,7 +230,7 @@ int skypiax_signaling_read(private_t * tech_pvt)
//SKYPIAX_P_LOG, message, obj, id, prop, value, where ? where : "NULL");
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)) {
/* we are NOT inside an active call */
DEBUGA_SKYPE("Call %s TRY ANSWER\n", SKYPIAX_P_LOG, id);
......@@ -256,13 +255,13 @@ int skypiax_signaling_read(private_t * tech_pvt)
}
if (!strcasecmp(prop, "CONF_ID") && !strcasecmp(value, "0")) {
//DEBUGA_SKYPE("the skype_call %s is NOT a conference call\n", SKYPIAX_P_LOG, id);
if (tech_pvt->interface_state == SKYPIAX_STATE_DOWN)
tech_pvt->interface_state = SKYPIAX_STATE_PRERING;
//if (tech_pvt->interface_state == SKYPIAX_STATE_DOWN)
//tech_pvt->interface_state = SKYPIAX_STATE_PRERING;
}
if (!strcasecmp(prop, "CONF_ID") && strcasecmp(value, "0")) {
DEBUGA_SKYPE("the skype_call %s is a conference call\n", SKYPIAX_P_LOG, id);
if (tech_pvt->interface_state == SKYPIAX_STATE_DOWN)
tech_pvt->interface_state = SKYPIAX_STATE_PRERING;
//if (tech_pvt->interface_state == SKYPIAX_STATE_DOWN)
//tech_pvt->interface_state = SKYPIAX_STATE_PRERING;
}
if (!strcasecmp(prop, "DTMF")) {
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)
DEBUGA_SKYPE("We missed skype_call %s\n", SKYPIAX_P_LOG, id);
} else if (!strcasecmp(value, "FINISHED")) {
//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)) {
//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);
......@@ -429,7 +427,7 @@ int skypiax_signaling_read(private_t * tech_pvt)
DEBUGA_SKYPE("New Inbound Channel!\n\n\n\n", SKYPIAX_P_LOG);
new_inbound_channel(tech_pvt);
} 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);
}
} else {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论