Diff
Modified: freeswitch/branches/gmaruzz/mod_celliax/celliax.h (14627 => 14628)
--- freeswitch/branches/gmaruzz/mod_celliax/celliax.h 2009-08-24 22:02:22 UTC (rev 14627)
+++ freeswitch/branches/gmaruzz/mod_celliax/celliax.h 2009-08-24 23:24:17 UTC (rev 14628)
@@ -428,7 +428,7 @@
private_t *find_available_celliax_interface_rr(private_t * tech_pvt_calling);
int remote_party_is_ringing(private_t * tech_pvt);
int remote_party_is_early_media(private_t * tech_pvt);
-int celliax_answer(private_t * tech_pvt, char *id, char *value);
+//int celliax_answer(private_t * tech_pvt, char *id, char *value);
int celliax_transfer(private_t * tech_pvt, char *id, char *value);
int celliax_socket_create_and_bind(private_t * tech_pvt, int *which_port);
@@ -491,3 +491,6 @@
#define ast_setstate(x, y) ERRORA("ast_setstate: %p, %d\n", SKYPIAX_P_LOG, (void *)x, y);
int celliax_serial_read(private_t * tech_pvt);
+int celliax_answer(private_t * tech_pvt);
+int celliax_serial_answer(private_t * tech_pvt);
+int celliax_serial_answer_AT(private_t * tech_pvt);
Modified: freeswitch/branches/gmaruzz/mod_celliax/celliax_protocol.c (14627 => 14628)
--- freeswitch/branches/gmaruzz/mod_celliax/celliax_protocol.c 2009-08-24 22:02:22 UTC (rev 14627)
+++ freeswitch/branches/gmaruzz/mod_celliax/celliax_protocol.c 2009-08-24 23:24:17 UTC (rev 14628)
@@ -72,6 +72,7 @@
return s;
}
+#ifdef NOTDEF
int celliax_signaling_read(private_t * tech_pvt)
{
char read_from_pipe[4096];
@@ -428,7 +429,7 @@
tech_pvt->skype_callflow = SKYPIAX_STATE_UP;
if (!strlen(tech_pvt->session_uuid_str)) {
DEBUGA_SKYPE("New Inbound Channel!\n\n\n\n", SKYPIAX_P_LOG);
- new_inbound_channel(tech_pvt);
+ celliax_answer(tech_pvt);
} else {
DEBUGA_SKYPE("Outbound Channel Answered! session_uuid_str=%s\n", SKYPIAX_P_LOG, tech_pvt->session_uuid_str);
outbound_channel_answered(tech_pvt);
@@ -494,6 +495,7 @@
} //read_from_pipe
return 0;
}
+#endif// NOTDEF
void *celliax_do_tcp_srv_thread_func(void *obj)
{
@@ -1390,42 +1392,6 @@
DEBUGA_SKYPE("OUT destroyed disp\n", SKYPIAX_P_LOG);
celliax_sleep(1000);
}
-
-void *celliax_do_skypeapi_thread_func(void *obj)
-{
-
- private_t *tech_pvt = obj;
- //if (celliax_present(SkypiaxHandles))
- if (1) {
- while (running) {
- int res;
- //celliax_sleep(1000000); //1 sec
- //DEBUGA_SKYPE("ciao!\n", SKYPIAX_P_LOG);
- res=celliax_serial_read(tech_pvt);
- if (res == -1) { //manage the graceful interface shutdown
- tech_pvt->controldev_dead = 1;
- close(tech_pvt->controldevfd);
- ERRORA("celliax_serial_monitor failed, declaring %s dead\n", SKYPIAX_P_LOG,
- tech_pvt->controldevice_name);
- } else if (tech_pvt->controldevprotocol != PROTOCOL_NO_SERIAL
- && tech_pvt->interface_state == SKYPIAX_STATE_RING) {
- if (option_debug)
- WARNINGA("INCOMING RING, let's take the incoming call\n", SKYPIAX_P_LOG);
- //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);
- running = 0;
- return NULL;
- }
- //running = 0;
- return NULL;
-
-}
#endif // WIN32
@@ -3219,6 +3185,22 @@
}
+int celliax_serial_answer(private_t * tech_pvt)
+{
+ if (tech_pvt->controldevprotocol == PROTOCOL_AT)
+ return celliax_serial_answer_AT(tech_pvt);
+#ifdef CELLIAX_FBUS2
+ if (tech_pvt->controldevprotocol == PROTOCOL_FBUS2)
+ return celliax_serial_answer_FBUS2(tech_pvt);
+#endif /* CELLIAX_FBUS2 */
+#ifdef CELLIAX_CVM
+ if (tech_pvt->controldevprotocol == PROTOCOL_CVM_BUSMAIL)
+ return celliax_serial_answer_CVM_BUSMAIL(tech_pvt);
+#endif /* CELLIAX_CVM */
+ return -1;
+}
+
+
int celliax_serial_answer_AT(private_t * tech_pvt)
{
int res;
@@ -3371,8 +3353,58 @@
}
+/*! \brief Answer incoming call,
+ * Part of PBX interface */
+int celliax_answer(private_t * tech_pvt)
+{
+ int res;
+ if (option_debug) {
+ DEBUGA_PBX("ENTERING FUNC\n", SKYPIAX_P_LOG);
+ }
+ /* do something to actually answer the call, if needed (eg. pick up the phone) */
+ if (tech_pvt->controldevprotocol != PROTOCOL_NO_SERIAL) {
+ if (celliax_serial_answer(tech_pvt)) {
+ ERRORA("celliax_answer FAILED\n", SKYPIAX_P_LOG);
+ if (option_debug) {
+ DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
+ }
+ return -1;
+ }
+ }
+ tech_pvt->interface_state = SKYPIAX_STATE_UP;
+ tech_pvt->phone_callflow = CALLFLOW_CALL_ACTIVE;
+ while (tech_pvt->interface_state == SKYPIAX_STATE_RING) {
+ usleep(10000); //10msec
+ }
+ if (tech_pvt->interface_state != SKYPIAX_STATE_UP) {
+ ERRORA("call answering failed\n", SKYPIAX_P_LOG);
+ res = -1;
+ } else {
+ if (option_debug)
+ DEBUGA_PBX("call answered\n", SKYPIAX_P_LOG);
+ res = 0;
+#ifdef CELLIAX_PORTAUDIO
+ speex_echo_state_reset(tech_pvt->stream->echo_state);
+#endif // CELLIAX_PORTAUDIO
+
+ new_inbound_channel(tech_pvt);
+ if (tech_pvt->owner) {
+ DEBUGA_PBX("going to send SKYPIAX_STATE_UP\n", SKYPIAX_P_LOG);
+ ast_setstate(tech_pvt->owner, SKYPIAX_STATE_UP);
+ //ast_queue_control(tech_pvt->owner, SKYPIAX_CONTROL_ANSWER);
+ //celliax_queue_control(tech_pvt->owner, SKYPIAX_CONTROL_ANSWER);
+ DEBUGA_PBX("just sent SKYPIAX_STATE_UP\n", SKYPIAX_P_LOG);
+ }
+ }
+ if (option_debug) {
+ DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
+ }
+ return res;
+}
+
+
#ifdef NOTDEF
int celliax_serial_call_AT(private_t * tech_pvt, char *dstr)
{
@@ -3600,4 +3632,5 @@
+
#endif// NOTDEF
Modified: freeswitch/branches/gmaruzz/mod_celliax/mod_celliax.c (14627 => 14628)
--- freeswitch/branches/gmaruzz/mod_celliax/mod_celliax.c 2009-08-24 22:02:22 UTC (rev 14627)
+++ freeswitch/branches/gmaruzz/mod_celliax/mod_celliax.c 2009-08-24 23:24:17 UTC (rev 14628)
@@ -642,9 +642,11 @@
return SWITCH_STATUS_FALSE;
}
+
tech_pvt->read_frame.flags = SFF_NONE;
*frame = NULL;
+ goto cng; //FIXME FIXME FIXME
if (!celliax_audio_read(tech_pvt)) {
ERRORA("celliax_audio_read ERROR\n", SKYPIAX_P_LOG);
@@ -723,11 +725,13 @@
#endif
sent = frame->datalen;
+#ifdef NOTDEF //FIXME
#ifdef WIN32
switch_file_write(tech_pvt->audioskypepipe[1], frame->data, &sent);
#else /* WIN32 */
sent = write(tech_pvt->audioskypepipe[1], frame->data, sent);
#endif /* WIN32 */
+#endif //NOTDEF
if (sent != frame->datalen && sent != -1) {
DEBUGA_SKYPE("CLI PIPE write %d\n", SKYPIAX_P_LOG, sent);
}
@@ -2051,6 +2055,7 @@
return SWITCH_STATUS_SUCCESS;
}
+#ifdef NOTDEF
int celliax_answer(private_t * tech_pvt, char *id, char *value)
{
char msg_to_skype[1024];
@@ -2127,6 +2132,7 @@
switch_mutex_unlock(globals.mutex);
return 0;
}
+#endif// NOTDEF
int celliax_transfer(private_t * tech_pvt, char *id, char *value)
{
char msg_to_skype[1024];
@@ -2247,6 +2253,43 @@
return 0;
}
+void *celliax_do_skypeapi_thread_func(void *obj)
+{
+
+ private_t *tech_pvt = obj;
+ //if (celliax_present(SkypiaxHandles))
+ if (1) {
+ while (running) {
+ int res;
+ //celliax_sleep(1000000); //1 sec
+ //DEBUGA_SKYPE("ciao!\n", SKYPIAX_P_LOG);
+ res=celliax_serial_read(tech_pvt);
+ if (res == -1) { //manage the graceful interface shutdown
+ tech_pvt->controldev_dead = 1;
+ close(tech_pvt->controldevfd);
+ ERRORA("celliax_serial_monitor failed, declaring %s dead\n", SKYPIAX_P_LOG,
+ tech_pvt->controldevice_name);
+ } else if (tech_pvt->controldevprotocol != PROTOCOL_NO_SERIAL
+ && tech_pvt->interface_state == SKYPIAX_STATE_RING) {
+ WARNINGA("INCOMING RING, let's take the incoming call\n", SKYPIAX_P_LOG);
+ celliax_answer(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);
+ running = 0;
+ return NULL;
+ }
+ //running = 0;
+ return NULL;
+
+}
+
/* For Emacs:
* Local Variables:
* mode:c