Modified: freeswitch/branches/gmaruzz/mod_celliax/celliax.h (14673 => 14674)
--- freeswitch/branches/gmaruzz/mod_celliax/celliax.h 2009-08-29 08:12:44 UTC (rev 14673)
+++ freeswitch/branches/gmaruzz/mod_celliax/celliax.h 2009-08-29 12:07:23 UTC (rev 14674)
@@ -119,7 +119,7 @@
#define WARNINGA(...) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][WARNINGA %-5d][%-10s][%2d,%2d,%2d] " __VA_ARGS__ );
#define NOTICA(...) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "rev "SKYPIAX_SVN_VERSION "[%p|%-7lx][NOTICA %-5d][%-10s][%2d,%2d,%2d] " __VA_ARGS__ );
-#define SKYPIAX_P_LOG NULL, (unsigned long)55, __LINE__, tech_pvt ? tech_pvt->name ? tech_pvt->name : "none" : "none", -1, tech_pvt ? tech_pvt->interface_state : -1, tech_pvt ? tech_pvt->skype_callflow : -1
+#define SKYPIAX_P_LOG NULL, (unsigned long)55, __LINE__, tech_pvt ? tech_pvt->name ? tech_pvt->name : "none" : "none", -1, tech_pvt ? tech_pvt->interface_state : -1, tech_pvt ? tech_pvt->phone_callflow : -1
/*********************************/
#define SKYPIAX_CAUSE_NORMAL 1
@@ -175,6 +175,7 @@
#define CALLFLOW_STATUS_EARLYMEDIA 24
#define CALLFLOW_INCOMING_CALLID 25
#define CALLFLOW_STATUS_REMOTEHOLD 26
+#define CALLFLOW_CALL_REMOTEANSWER 27
/*********************************/
@@ -544,6 +545,9 @@
int celliax_serial_hangup(private_t * tech_pvt);
int celliax_serial_hangup_AT(private_t * tech_pvt);
int celliax_hangup(private_t * tech_pvt);
+int celliax_serial_call(private_t * tech_pvt, char *dstr);
+int celliax_serial_call_AT(private_t * tech_pvt, char *dstr);
+
#ifdef CELLIAX_ALSA
int alsa_init(private_t * tech_pvt);
int alsa_shutdown(private_t * tech_pvt);
Modified: freeswitch/branches/gmaruzz/mod_celliax/celliax_protocol.c (14673 => 14674)
--- freeswitch/branches/gmaruzz/mod_celliax/celliax_protocol.c 2009-08-29 08:12:44 UTC (rev 14673)
+++ freeswitch/branches/gmaruzz/mod_celliax/celliax_protocol.c 2009-08-29 12:07:23 UTC (rev 14674)
@@ -2191,24 +2191,24 @@
}
if ((strcmp(tech_pvt->line_array.result[i], tech_pvt->at_call_active) == 0)) {
- tech_pvt->phone_callflow = CALLFLOW_CALL_ACTIVE;
- if (option_debug > 1)
- DEBUGA_SKYPE("|%s| CALLFLOW_CALL_ACTIVE\n", SKYPIAX_P_LOG,
- tech_pvt->line_array.result[i]);
+ tech_pvt->phone_callflow = CALLFLOW_CALL_ACTIVE;
+ DEBUGA_SKYPE("|%s| CALLFLOW_CALL_ACTIVE\n", SKYPIAX_P_LOG,
+ tech_pvt->line_array.result[i]);
- if (tech_pvt->owner && tech_pvt->interface_state == CALLFLOW_CALL_DIALING) {
- DEBUGA_PBX("just received a remote ANSWER\n", SKYPIAX_P_LOG);
- if (tech_pvt->owner->state != SKYPIAX_STATE_UP) {
- celliax_queue_control(tech_pvt->owner, SKYPIAX_CONTROL_RINGING);
- DEBUGA_PBX("just sent SKYPIAX_CONTROL_RINGING\n", SKYPIAX_P_LOG);
- DEBUGA_PBX("going to send SKYPIAX_CONTROL_ANSWER\n", SKYPIAX_P_LOG);
- celliax_queue_control(tech_pvt->owner, SKYPIAX_CONTROL_ANSWER);
- DEBUGA_PBX("just sent SKYPIAX_CONTROL_ANSWER\n", SKYPIAX_P_LOG);
- }
- } else {
- }
- tech_pvt->interface_state = SKYPIAX_STATE_UP;
- DEBUGA_PBX("just interface_state UP\n", SKYPIAX_P_LOG);
+ if (tech_pvt->interface_state == CALLFLOW_CALL_DIALING) {
+ DEBUGA_PBX("just received a remote ANSWER\n", SKYPIAX_P_LOG);
+ if (tech_pvt->phone_callflow == SKYPIAX_STATE_UP) {
+ //celliax_queue_control(tech_pvt->owner, SKYPIAX_CONTROL_RINGING);
+ DEBUGA_PBX("just sent SKYPIAX_CONTROL_RINGING\n", SKYPIAX_P_LOG);
+ DEBUGA_PBX("going to send SKYPIAX_CONTROL_ANSWER\n", SKYPIAX_P_LOG);
+ //celliax_queue_control(tech_pvt->owner, SKYPIAX_CONTROL_ANSWER);
+ tech_pvt->interface_state = CALLFLOW_CALL_REMOTEANSWER;
+ DEBUGA_PBX("just sent SKYPIAX_CONTROL_ANSWER\n", SKYPIAX_P_LOG);
+ }
+ } else {
+ }
+ //tech_pvt->interface_state = SKYPIAX_STATE_UP;
+ //DEBUGA_PBX("just interface_state UP\n", SKYPIAX_P_LOG);
}
if ((strcmp(tech_pvt->line_array.result[i], tech_pvt->at_call_calling) == 0)) {
@@ -3236,6 +3236,59 @@
return 0;
}
+
+int celliax_serial_call(private_t * tech_pvt, char *dstr)
+{
+ if (tech_pvt->controldevprotocol == PROTOCOL_AT)
+ return celliax_serial_call_AT(tech_pvt, dstr);
+#ifdef CELLIAX_FBUS2
+ if (tech_pvt->controldevprotocol == PROTOCOL_FBUS2)
+ return celliax_serial_call_FBUS2(tech_pvt, dstr);
+#endif /* CELLIAX_FBUS2 */
+ if (tech_pvt->controldevprotocol == PROTOCOL_NO_SERIAL)
+ return 0;
+#ifdef CELLIAX_CVM
+ if (tech_pvt->controldevprotocol == PROTOCOL_CVM_BUSMAIL)
+ return celliax_serial_call_CVM_BUSMAIL(tech_pvt, dstr);
+#endif /* CELLIAX_CVM */
+ return -1;
+}
+
+int celliax_serial_call_AT(private_t * tech_pvt, char *dstr)
+{
+ int res;
+ char at_command[256];
+
+ if (option_debug)
+ DEBUGA_PBX("Dialing %s\n", SKYPIAX_P_LOG, dstr);
+ memset(at_command, 0, sizeof(at_command));
+ tech_pvt->phone_callflow = CALLFLOW_CALL_DIALING;
+ tech_pvt->interface_state = SKYPIAX_STATE_DIALING;
+ //ast_uri_decode(dstr);
+/*
+ size_t fixdstr = strspn(dstr, AST_DIGIT_ANYDIG);
+ if (fixdstr == 0) {
+ ERRORA("dial command failed because of invalid dial number. dial string was: %s\n",
+ SKYPIAX_P_LOG, dstr);
+ return -1;
+ }
+*/
+ //dstr[fixdstr] = '\0';
+ sprintf(at_command, "%s%s%s", tech_pvt->at_dial_pre_number, dstr, tech_pvt->at_dial_post_number);
+ DEBUGA_PBX("Dialstring %s\n", SKYPIAX_P_LOG, at_command);
+ res = celliax_serial_write_AT_expect(tech_pvt, at_command, tech_pvt->at_dial_expect);
+ if (res) {
+ ERRORA("dial command failed, dial string was: %s\n", SKYPIAX_P_LOG, at_command);
+ return -1;
+ }
+ // jet - early audio
+ //if (tech_pvt->at_early_audio) {
+ //ast_queue_control(tech_pvt->owner, AST_CONTROL_ANSWER);
+ //}
+
+ return 0;
+}
+
int ucs2_to_utf8(private_t * tech_pvt, char *ucs2_in, char *utf8_out,
size_t outbytesleft)
{
@@ -3405,9 +3458,7 @@
return 0;
}
- if (option_debug) {
- DEBUGA_PBX("ENTERING FUNC\n", SKYPIAX_P_LOG);
- }
+ DEBUGA_SKYPE("ENTERING FUNC\n", SKYPIAX_P_LOG);
#ifdef NOTDEF
/* shutdown the serial monitoring thread */
@@ -4550,7 +4601,7 @@
int celliax_call(private_t * tech_pvt, char *rdest, int timeout)
{
- char msg_to_skype[1024];
+ //char msg_to_skype[1024];
//celliax_sleep(5000);
DEBUGA_SKYPE("Calling Skype, rdest is: %s\n", SKYPIAX_P_LOG, rdest);
@@ -4559,7 +4610,8 @@
//celliax_signaling_write(tech_pvt, "SET AEC OFF");
//celliax_sleep(10000);
- sprintf(msg_to_skype, "CALL %s", rdest);
+celliax_serial_call(tech_pvt, rdest);
+ //sprintf(msg_to_skype, "CALL %s", rdest);
//if (celliax_signaling_write(tech_pvt, msg_to_skype) < 0) {
//ERRORA("failed to communicate with Skype client, now exit\n", SKYPIAX_P_LOG);
//return -1;
Modified: freeswitch/branches/gmaruzz/mod_celliax/mod_celliax.c (14673 => 14674)
--- freeswitch/branches/gmaruzz/mod_celliax/mod_celliax.c 2009-08-29 08:12:44 UTC (rev 14673)
+++ freeswitch/branches/gmaruzz/mod_celliax/mod_celliax.c 2009-08-29 12:07:23 UTC (rev 14674)
@@ -712,7 +712,6 @@
teletone_dtmf_get(&tech_pvt->dtmf_detect, digit_str, sizeof(digit_str));
if (digit_str[0]) {
- NOTICA("DTMF DETECTED: [%s]\n", SKYPIAX_P_LOG, digit_str);
switch_time_t new_dtmf_timestamp = switch_time_now();
if((new_dtmf_timestamp - tech_pvt->old_dtmf_timestamp) > 350000) { //FIXME: make it configurable
char *p = digit_str;
@@ -958,6 +957,7 @@
tech_pvt = find_available_celliax_interface_rr(NULL);
if (tech_pvt)
found = 1;
+ DEBUGA_SKYPE("FOUND one available skype interface RR\n", SKYPIAX_P_LOG);
}
for (i = 0; !found && i < SKYPIAX_MAX_INTERFACES; i++) {
@@ -1941,6 +1941,8 @@
}
if (channel) {
switch_channel_mark_answered(channel);
+tech_pvt->phone_callflow = SKYPIAX_STATE_UP;
+tech_pvt->interface_state = SKYPIAX_STATE_UP;
//DEBUGA_SKYPE("skype_call: %s, answered\n", SKYPIAX_P_LOG, id);
} else {
ERRORA("No channel???\n", SKYPIAX_P_LOG);
@@ -2388,8 +2390,14 @@
//FIXME if (!celliax_new(p, AST_STATE_RING, tech_pvt->context)) {
//FIXME ERRORA("celliax_new failed! BAD BAD BAD\n", CELLIAX_P_LOG);
//FIXME }
+ } else if (tech_pvt->interface_state == CALLFLOW_CALL_REMOTEANSWER) {
+ WARNINGA("REMOTE PARTY ANSWERED\n", SKYPIAX_P_LOG);
+outbound_channel_answered(tech_pvt);
+ //new_inbound_channel(tech_pvt);
+ //FIXME if (!celliax_new(p, AST_STATE_RING, tech_pvt->context)) {
+ //FIXME ERRORA("celliax_new failed! BAD BAD BAD\n", CELLIAX_P_LOG);
+ //FIXME }
}
-
}
} else {
ERRORA("Skype is not running, maybe crashed. Please run/restart Skype and relaunch Skypiax\n", SKYPIAX_P_LOG);