Author: gmaruzz Date: Mon Dec 15 05:05:50 2008 New Revision: 10765 Log: skypiax: multiline on linux Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax.h freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax_protocol.c Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c ============================================================================== --- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c (original) +++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c Mon Dec 15 05:05:50 2008 @@ -595,6 +595,7 @@ { char *cf = "skypiax.conf"; switch_xml_t cfg, xml, global_settings, param, interfaces, myinterface; + skypiax_interface_t *p = NULL; switch_mutex_init(&globals.mutex, SWITCH_MUTEX_NESTED, skypiax_module_pool); if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) { @@ -672,6 +673,8 @@ char *fail_dial_regex = NULL; char *enable_callerid = "true"; char *X11_display = NULL; + char *tcp_cli_port = NULL; + char *tcp_srv_port = NULL; uint32_t interface_id = 0, to = 0, max = 0; @@ -695,6 +698,10 @@ fail_dial_regex = val; } else if (!strcasecmp(var, "hold-music")) { hold_music = val; + } else if (!strcasecmp(var, "tcp_cli_port")) { + tcp_cli_port = val; + } else if (!strcasecmp(var, "tcp_srv_port")) { + tcp_srv_port = val; } else if (!strcasecmp(var, "X11-display") || !strcasecmp(var, "X11_display")) { X11_display = val; } else if (!strcasecmp(var, "max_digits") || !strcasecmp(var, "max-digits")) { @@ -710,7 +717,17 @@ "interface missing REQUIRED param 'X11_display'\n"); continue; } + if (!tcp_cli_port) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, + "interface missing REQUIRED param 'tcp_cli_port'\n"); + continue; + } + if (!tcp_srv_port) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, + "interface missing REQUIRED param 'tcp_srv_port'\n"); + continue; + } if (!id) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "interface missing REQUIRED param 'id'\n"); @@ -771,13 +788,25 @@ } else { switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].name, "N/A"); } + globals.SKYPIAX_INTERFACES[interface_id].tcp_cli_port = atoi(tcp_cli_port); + globals.SKYPIAX_INTERFACES[interface_id].tcp_srv_port = atoi(tcp_srv_port); + //switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].tcp_cli_port, tcp_cli_port); + //switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].tcp_srv_port, tcp_srv_port); switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].X11_display, X11_display); switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].context, context); switch_set_string(globals.SKYPIAX_INTERFACES[interface_id].dialplan, dialplan); + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "interface_id=%d globals.SKYPIAX_INTERFACES[interface_id].X11_display=%s\n", interface_id, globals.SKYPIAX_INTERFACES[interface_id].X11_display); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, + "interface_id=%d globals.SKYPIAX_INTERFACES[interface_id].tcp_cli_port=%d\n", + interface_id, globals.SKYPIAX_INTERFACES[interface_id].tcp_cli_port); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, + "interface_id=%d globals.SKYPIAX_INTERFACES[interface_id].tcp_srv_port=%d\n", + interface_id, globals.SKYPIAX_INTERFACES[interface_id].tcp_srv_port); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "interface_id=%d globals.SKYPIAX_INTERFACES[interface_id].name=%s\n", interface_id, globals.SKYPIAX_INTERFACES[interface_id].name); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax.h ============================================================================== --- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax.h (original) +++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax.h Mon Dec 15 05:05:50 2008 @@ -148,6 +148,8 @@ char hold_music[256]; char type[256]; char X11_display[256]; + int tcp_cli_port; + int tcp_srv_port; struct AsteriskHandles AsteriskHandlesAst; int interface_state; /*!< \brief 'state' of the interface (channel) */ Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax_protocol.c ============================================================================== --- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax_protocol.c (original) +++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax_protocol.c Mon Dec 15 05:05:50 2008 @@ -27,9 +27,9 @@ HANDLE volatile win32_hGlobal_PromptConsoleHandle = NULL; #else /* NOT WIN32 */ #define SKYPE_X11_BUF_SIZE 512 -Window skype_win = (Window) - 1; -static XErrorHandler old_handler = 0; -static int xerror = 0; +//Window skype_win = (Window) - 1; +//static XErrorHandler old_handler = 0; +//static int xerror = 0; #endif /* WIN32 */ @@ -72,7 +72,7 @@ memset(&my_addr, 0, sizeof(my_addr)); my_addr.sin_family = AF_INET; my_addr.sin_addr.s_addr = htonl(0x7f000001); /* use the localhost */ - my_addr.sin_port = htons(5556); //FIXME configurable! + my_addr.sin_port = htons(p->tcp_srv_port); //FIXME configurable! if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { ERRORA("socket Error\n", SKYPIAX_P_LOG); @@ -235,7 +235,7 @@ memset(&my_addr, 0, sizeof(my_addr)); my_addr.sin_family = AF_INET; my_addr.sin_addr.s_addr = htonl(0x7f000001); /* use the localhost */ - my_addr.sin_port = htons(5558); //FIXME configurable! + my_addr.sin_port = htons(p->tcp_cli_port); //FIXME configurable! if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { ERRORA("socket Error\n", SKYPIAX_P_LOG); @@ -635,6 +635,7 @@ } #else /* NOT WIN32 */ +#if 0 int X11_errors_handler(Display * dpy, XErrorEvent * err) { (void) dpy; @@ -656,6 +657,7 @@ XSetErrorHandler(old_handler); return (xerror != BadValue) && (xerror != BadWindow); } +#endif int skypiax_skype_send_message(struct AsteriskHandles *AsteriskHandlesAst, const char *message_P) @@ -664,7 +666,7 @@ Window w_P; Display *disp; Window handle_P; - struct skypiax_interface *p = NULL; + //struct skypiax_interface *p = NULL; w_P = AsteriskHandlesAst->skype_win; disp = AsteriskHandlesAst->disp; @@ -675,7 +677,7 @@ unsigned int pos = 0; unsigned int len = strlen(message_P); XEvent e; - int ok; + //int ok; memset(&e, 0, sizeof(e)); e.xclient.type = ClientMessage; @@ -684,7 +686,7 @@ e.xclient.window = handle_P; e.xclient.format = 8; - X11_errors_trap(); + //X11_errors_trap(); //XLockDisplay(disp); do { unsigned int i; @@ -698,17 +700,17 @@ XSync(disp, False); //XUnlockDisplay(disp); - ok = X11_errors_untrap(); + //ok = X11_errors_untrap(); - if (!ok) - DEBUGA_SKYPE("Sending message failed with status %d\n", SKYPIAX_P_LOG, xerror); + //if (!ok) DEBUGA_SKYPE("Sending message failed with status %d\n", SKYPIAX_P_LOG, xerror); - return ok; + //return ok; + return 1; } -int skypiax_skype_present(Display * disp) +int skypiax_skype_present(struct AsteriskHandles *AsteriskHandlesAst) { - Atom skype_inst = XInternAtom(disp, "_SKYPE_INSTANCE", True); + Atom skype_inst = XInternAtom(AsteriskHandlesAst->disp, "_SKYPE_INSTANCE", True); Atom type_ret; int format_ret; @@ -718,25 +720,25 @@ int status; struct skypiax_interface *p = NULL; - X11_errors_trap(); + //X11_errors_trap(); //XLockDisplay(disp); status = - XGetWindowProperty(disp, DefaultRootWindow(disp), skype_inst, 0, 1, False, XA_WINDOW, + XGetWindowProperty(AsteriskHandlesAst->disp, DefaultRootWindow(AsteriskHandlesAst->disp), skype_inst, 0, 1, False, XA_WINDOW, &type_ret, &format_ret, &nitems_ret, &bytes_after_ret, &prop); //XUnlockDisplay(disp); - X11_errors_untrap(); + //X11_errors_untrap(); /* sanity check */ if (status != Success || format_ret != 32 || nitems_ret != 1) { - skype_win = (Window) - 1; + AsteriskHandlesAst->skype_win = (Window) - 1; DEBUGA_SKYPE("Skype instance not found\n", SKYPIAX_P_LOG); return 0; } - skype_win = *(const unsigned long *) prop & 0xffffffff; + AsteriskHandlesAst->skype_win = *(const unsigned long *) prop & 0xffffffff; //DEBUGA_SKYPE("Skype instance found with id #%x\n", SKYPIAX_P_LOG, DEBUGA_SKYPE("Skype instance found with id #%d\n", SKYPIAX_P_LOG, - (unsigned int) skype_win); + (unsigned int) AsteriskHandlesAst->skype_win); return 1; } @@ -798,7 +800,9 @@ //FIXME pthread_cleanup_push(skypiax_skype_clean_disp, &xfd); DEBUGA_SKYPE("PUSH disp %d\n", SKYPIAX_P_LOG, xfd); - if (skypiax_skype_present(disp)) { + AsteriskHandlesAst->disp = disp; + + if (skypiax_skype_present(AsteriskHandlesAst)) { root = DefaultRootWindow(disp); win = XCreateSimpleWindow(disp, root, 0, 0, 1, 1, 0, @@ -806,11 +810,10 @@ DefaultScreen (disp))); - DEBUGA_SKYPE("skype_win=%d win=%d\n", SKYPIAX_P_LOG, (unsigned int) skype_win, - (unsigned int) win); + //DEBUGA_SKYPE("skype_win=%d win=%d\n", SKYPIAX_P_LOG, (unsigned int) skype_win, (unsigned int) win); - AsteriskHandlesAst->skype_win = skype_win; - AsteriskHandlesAst->disp = disp; + //AsteriskHandlesAst->skype_win = skype_win; + //AsteriskHandlesAst->disp = disp; AsteriskHandlesAst->win = win; snprintf(buf, SKYPE_X11_BUF_SIZE, "NAME skypiax"); @@ -1309,10 +1312,10 @@ DEBUGA_SKYPE("started tcp_cli_thread thread.\n", SKYPIAX_P_LOG); } switch_sleep(100000); - sprintf(msg_to_skype, "ALTER CALL %s SET_OUTPUT PORT=\"5556\"", id); + sprintf(msg_to_skype, "ALTER CALL %s SET_OUTPUT PORT=\"%d\"", id, p->tcp_srv_port); skypiax_skype_write(p, msg_to_skype); switch_sleep(100000); - sprintf(msg_to_skype, "ALTER CALL %s SET_INPUT PORT=\"5558\"", id); + sprintf(msg_to_skype, "ALTER CALL %s SET_INPUT PORT=\"%d\"", id, p->tcp_cli_port); skypiax_skype_write(p, msg_to_skype); switch_sleep(100000); }