mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-03-14 04:54:49 +00:00
skypiax: fixed http://jira.freeswitch.org/browse/MODSKYPIAX-21 on windows, let's check if it works on linux
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12320 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
9247784038
commit
f4bee1f375
@ -940,15 +940,32 @@ static switch_status_t load_config(void)
|
|||||||
|
|
||||||
skypiax_audio_init(&globals.SKYPIAX_INTERFACES[interface_id]);
|
skypiax_audio_init(&globals.SKYPIAX_INTERFACES[interface_id]);
|
||||||
|
|
||||||
|
NOTICA("WAITING max 6 seconds to connect to SKYPE API for interface_id=%d\n", SKYPIAX_P_LOG, interface_id);
|
||||||
i = 0;
|
i = 0;
|
||||||
while (globals.SKYPIAX_INTERFACES[interface_id].SkypiaxHandles.api_connected == 0 && running && i < 60000) { // 60sec FIXME
|
while (globals.SKYPIAX_INTERFACES[interface_id].SkypiaxHandles.api_connected == 0 && running && i < 400) { // 6sec on windows (why ????) FIXME
|
||||||
|
//DEBUGA_SKYPE("interface_id=%d, times=%d\n", SKYPIAX_P_LOG, interface_id, i);
|
||||||
switch_sleep(1000);
|
switch_sleep(1000);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if (globals.SKYPIAX_INTERFACES[interface_id].SkypiaxHandles.api_connected) {
|
if (globals.SKYPIAX_INTERFACES[interface_id].SkypiaxHandles.api_connected) {
|
||||||
NOTICA("STARTED interface_id=%d\n", SKYPIAX_P_LOG, interface_id);
|
NOTICA("SKYPE API connected for interface_id=%d, waiting max 60 seconds for CURRENTUSERHANDLE==%s\n", SKYPIAX_P_LOG, interface_id, globals.SKYPIAX_INTERFACES[interface_id].skype_user);
|
||||||
} else {
|
} else {
|
||||||
ERRORA("FAILED to start interface_id=%d\n", SKYPIAX_P_LOG, interface_id);
|
ERRORA("SKYPE API FAILED to connect for interface_id=%d\n", SKYPIAX_P_LOG, interface_id);
|
||||||
|
running = 0;
|
||||||
|
return SWITCH_STATUS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (globals.SKYPIAX_INTERFACES[interface_id].SkypiaxHandles.currentuserhandle == 0 && running && i < 4000) { // 60sec on windows (why ????) FIXME
|
||||||
|
//DEBUGA_SKYPE("interface_id=%d, times=%d\n", SKYPIAX_P_LOG, interface_id, i);
|
||||||
|
switch_sleep(1000);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if (globals.SKYPIAX_INTERFACES[interface_id].SkypiaxHandles.currentuserhandle) {
|
||||||
|
NOTICA("CURRENTUSERHANDLE ok (%s), interface_id=%d STARTED\n", SKYPIAX_P_LOG, globals.SKYPIAX_INTERFACES[interface_id].skype_user, interface_id);
|
||||||
|
} else {
|
||||||
|
ERRORA("FAILED to find CURRENTUSERHANDLE=%s, FAILED to start interface_id=%d\n", SKYPIAX_P_LOG, globals.SKYPIAX_INTERFACES[interface_id].skype_user, interface_id);
|
||||||
|
running = 0;
|
||||||
return SWITCH_STATUS_FALSE;
|
return SWITCH_STATUS_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -995,8 +1012,10 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_skypiax_load)
|
|||||||
|
|
||||||
running = 1;
|
running = 1;
|
||||||
|
|
||||||
if (load_config() != SWITCH_STATUS_SUCCESS)
|
if (load_config() != SWITCH_STATUS_SUCCESS) {
|
||||||
|
running = 0;
|
||||||
return SWITCH_STATUS_FALSE;
|
return SWITCH_STATUS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
*module_interface = switch_loadable_module_create_module_interface(pool, modname);
|
*module_interface = switch_loadable_module_create_module_interface(pool, modname);
|
||||||
skypiax_endpoint_interface =
|
skypiax_endpoint_interface =
|
||||||
@ -1039,6 +1058,7 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skypiax_shutdown)
|
|||||||
DEBUGA_SKYPE
|
DEBUGA_SKYPE
|
||||||
("got FALSE here, thread probably was already dead. GetLastError returned: %d\n",
|
("got FALSE here, thread probably was already dead. GetLastError returned: %d\n",
|
||||||
SKYPIAX_P_LOG, GetLastError());
|
SKYPIAX_P_LOG, GetLastError());
|
||||||
|
globals.SKYPIAX_INTERFACES[interface_id].skypiax_api_thread=NULL;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
XEvent e;
|
XEvent e;
|
||||||
@ -1057,9 +1077,9 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skypiax_shutdown)
|
|||||||
XSync(tech_pvt->SkypiaxHandles.disp, False);
|
XSync(tech_pvt->SkypiaxHandles.disp, False);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
while (x) {
|
while (x) {//FIXME 2 seconds?
|
||||||
x--;
|
x--;
|
||||||
switch_yield(20000);
|
switch_yield(20000);
|
||||||
}
|
}
|
||||||
if (globals.SKYPIAX_INTERFACES[interface_id].skypiax_signaling_thread) {
|
if (globals.SKYPIAX_INTERFACES[interface_id].skypiax_signaling_thread) {
|
||||||
switch_thread_join(&status,
|
switch_thread_join(&status,
|
||||||
|
@ -136,6 +136,7 @@ struct SkypiaxHandles {
|
|||||||
Window skype_win;
|
Window skype_win;
|
||||||
Display *disp;
|
Display *disp;
|
||||||
Window win;
|
Window win;
|
||||||
|
int currentuserhandle;
|
||||||
int api_connected;
|
int api_connected;
|
||||||
int fdesc[2];
|
int fdesc[2];
|
||||||
};
|
};
|
||||||
@ -148,6 +149,7 @@ struct SkypiaxHandles {
|
|||||||
char win32_acInit_WindowClassName[128];
|
char win32_acInit_WindowClassName[128];
|
||||||
UINT win32_uiGlobal_MsgID_SkypeControlAPIAttach;
|
UINT win32_uiGlobal_MsgID_SkypeControlAPIAttach;
|
||||||
UINT win32_uiGlobal_MsgID_SkypeControlAPIDiscover;
|
UINT win32_uiGlobal_MsgID_SkypeControlAPIDiscover;
|
||||||
|
int currentuserhandle;
|
||||||
int api_connected;
|
int api_connected;
|
||||||
switch_file_t *fdesc[2];
|
switch_file_t *fdesc[2];
|
||||||
};
|
};
|
||||||
|
@ -100,7 +100,7 @@ int skypiax_signaling_read(private_t * tech_pvt)
|
|||||||
where = strsep(stringp, " ");
|
where = strsep(stringp, " ");
|
||||||
strncpy(id, where, sizeof(id) - 1);
|
strncpy(id, where, sizeof(id) - 1);
|
||||||
if (!strcasecmp(id, tech_pvt->skype_user)) {
|
if (!strcasecmp(id, tech_pvt->skype_user)) {
|
||||||
tech_pvt->SkypiaxHandles.api_connected = 1;
|
tech_pvt->SkypiaxHandles.currentuserhandle = 1;
|
||||||
DEBUGA_SKYPE
|
DEBUGA_SKYPE
|
||||||
("Skype MSG: message: %s, currentuserhandle: %s, cuh: %s, skype_user: %s!\n",
|
("Skype MSG: message: %s, currentuserhandle: %s, cuh: %s, skype_user: %s!\n",
|
||||||
SKYPIAX_P_LOG, message, obj, id, tech_pvt->skype_user);
|
SKYPIAX_P_LOG, message, obj, id, tech_pvt->skype_user);
|
||||||
@ -909,6 +909,8 @@ LRESULT APIENTRY skypiax_present(HWND hWindow, UINT uiMessage, WPARAM uiParam,
|
|||||||
lReturnCode = 0;
|
lReturnCode = 0;
|
||||||
fIssueDefProc = 0;
|
fIssueDefProc = 0;
|
||||||
tech_pvt = (private_t *) GetWindowLong(hWindow, GWL_USERDATA);
|
tech_pvt = (private_t *) GetWindowLong(hWindow, GWL_USERDATA);
|
||||||
|
if(!running)
|
||||||
|
return lReturnCode;
|
||||||
switch (uiMessage) {
|
switch (uiMessage) {
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
tech_pvt = (private_t *) ((LPCREATESTRUCT) ulParam)->lpCreateParams;
|
tech_pvt = (private_t *) ((LPCREATESTRUCT) ulParam)->lpCreateParams;
|
||||||
@ -945,8 +947,9 @@ LRESULT APIENTRY skypiax_present(HWND hWindow, UINT uiMessage, WPARAM uiParam,
|
|||||||
tech_pvt->SkypiaxHandles.win32_uiGlobal_MsgID_SkypeControlAPIAttach) {
|
tech_pvt->SkypiaxHandles.win32_uiGlobal_MsgID_SkypeControlAPIAttach) {
|
||||||
switch (ulParam) {
|
switch (ulParam) {
|
||||||
case SKYPECONTROLAPI_ATTACH_SUCCESS:
|
case SKYPECONTROLAPI_ATTACH_SUCCESS:
|
||||||
if (!tech_pvt->SkypiaxHandles.api_connected) {
|
if (!tech_pvt->SkypiaxHandles.currentuserhandle) {
|
||||||
DEBUGA_SKYPE("\n\n\tConnected to Skype API!\n", SKYPIAX_P_LOG);
|
DEBUGA_SKYPE("\n\n\tConnected to Skype API!\n", SKYPIAX_P_LOG);
|
||||||
|
tech_pvt->SkypiaxHandles.api_connected = 1;
|
||||||
tech_pvt->SkypiaxHandles.win32_hGlobal_SkypeAPIWindowHandle = (HWND) uiParam;
|
tech_pvt->SkypiaxHandles.win32_hGlobal_SkypeAPIWindowHandle = (HWND) uiParam;
|
||||||
tech_pvt->SkypiaxHandles.win32_hGlobal_SkypeAPIWindowHandle =
|
tech_pvt->SkypiaxHandles.win32_hGlobal_SkypeAPIWindowHandle =
|
||||||
tech_pvt->SkypiaxHandles.win32_hGlobal_SkypeAPIWindowHandle;
|
tech_pvt->SkypiaxHandles.win32_hGlobal_SkypeAPIWindowHandle;
|
||||||
@ -957,7 +960,7 @@ LRESULT APIENTRY skypiax_present(HWND hWindow, UINT uiMessage, WPARAM uiParam,
|
|||||||
("\n\n\tIf I do not (almost) immediately connect to Skype API,\n\tplease give the Skype client authorization to be connected \n\tby Asterisk and to not ask you again.\n\n",
|
("\n\n\tIf I do not (almost) immediately connect to Skype API,\n\tplease give the Skype client authorization to be connected \n\tby Asterisk and to not ask you again.\n\n",
|
||||||
SKYPIAX_P_LOG);
|
SKYPIAX_P_LOG);
|
||||||
skypiax_sleep(5000);
|
skypiax_sleep(5000);
|
||||||
if (!tech_pvt->SkypiaxHandles.api_connected) {
|
if (!tech_pvt->SkypiaxHandles.currentuserhandle) {
|
||||||
SendMessage(HWND_BROADCAST,
|
SendMessage(HWND_BROADCAST,
|
||||||
tech_pvt->SkypiaxHandles.
|
tech_pvt->SkypiaxHandles.
|
||||||
win32_uiGlobal_MsgID_SkypeControlAPIDiscover,
|
win32_uiGlobal_MsgID_SkypeControlAPIDiscover,
|
||||||
@ -974,7 +977,7 @@ LRESULT APIENTRY skypiax_present(HWND hWindow, UINT uiMessage, WPARAM uiParam,
|
|||||||
case SKYPECONTROLAPI_ATTACH_API_AVAILABLE:
|
case SKYPECONTROLAPI_ATTACH_API_AVAILABLE:
|
||||||
DEBUGA_SKYPE("Skype API available\n", SKYPIAX_P_LOG);
|
DEBUGA_SKYPE("Skype API available\n", SKYPIAX_P_LOG);
|
||||||
skypiax_sleep(5000);
|
skypiax_sleep(5000);
|
||||||
if (!tech_pvt->SkypiaxHandles.api_connected) {
|
if (!tech_pvt->SkypiaxHandles.currentuserhandle) {
|
||||||
SendMessage(HWND_BROADCAST,
|
SendMessage(HWND_BROADCAST,
|
||||||
tech_pvt->SkypiaxHandles.
|
tech_pvt->SkypiaxHandles.
|
||||||
win32_uiGlobal_MsgID_SkypeControlAPIDiscover,
|
win32_uiGlobal_MsgID_SkypeControlAPIDiscover,
|
||||||
@ -1234,12 +1237,14 @@ int skypiax_present(struct SkypiaxHandles *SkypiaxHandles)
|
|||||||
if (status != Success || format_ret != 32 || nitems_ret != 1) {
|
if (status != Success || format_ret != 32 || nitems_ret != 1) {
|
||||||
SkypiaxHandles->skype_win = (Window) - 1;
|
SkypiaxHandles->skype_win = (Window) - 1;
|
||||||
DEBUGA_SKYPE("Skype instance not found\n", SKYPIAX_P_LOG);
|
DEBUGA_SKYPE("Skype instance not found\n", SKYPIAX_P_LOG);
|
||||||
|
tech_pvt->SkypiaxHandles.api_connected = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SkypiaxHandles->skype_win = *(const unsigned long *) prop & 0xffffffff;
|
SkypiaxHandles->skype_win = *(const unsigned long *) prop & 0xffffffff;
|
||||||
DEBUGA_SKYPE("Skype instance found with id #%d\n", SKYPIAX_P_LOG,
|
DEBUGA_SKYPE("Skype instance found with id #%d\n", SKYPIAX_P_LOG,
|
||||||
(unsigned int) SkypiaxHandles->skype_win);
|
(unsigned int) SkypiaxHandles->skype_win);
|
||||||
|
tech_pvt->SkypiaxHandles.api_connected = 1;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user