giovatimer.expires = 1 + jiffies;
add_timer(&giovatimer);
- spin_lock_bh(&giovalock);
+ //spin_lock_bh(&giovalock);
for (i = 0; i < giovaindex + 1; i++) {
if (i > MAX_PCM_SUBSTREAMS || giovaindex > MAX_PCM_SUBSTREAMS) {
//spin_unlock_bh(&dpcm->lock);
}
}
- spin_unlock_bh(&giovalock);
+ //spin_unlock_bh(&giovalock);
for (i = 0; i < giovaindex + 1; i++) {
if (i > MAX_PCM_SUBSTREAMS || giovaindex > MAX_PCM_SUBSTREAMS) {
giovatimer.function = snd_card_dummy_pcm_timer_function;
giovatimer.expires = 1 + jiffies;
add_timer(&giovatimer);
- printk("snd-dummy skypopen driver version: 5, %s:%d working on a machine with %dHZ kernel\n", __FILE__, __LINE__, HZ);
+ printk("snd-dummy skypopen driver version: 6, %s:%d working on a machine with %dHZ kernel\n", __FILE__, __LINE__, HZ);
spin_unlock_bh(&giovalock);
}
char *report_incoming_chatmessages;
char *silent_mode;
char *write_silence_when_idle;
+ char *setsockopt;
int calls;
int real_interfaces;
int next_interface;
SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_report_incoming_chatmessages, globals.report_incoming_chatmessages);
SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_silent_mode, globals.silent_mode);
SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_write_silence_when_idle, globals.write_silence_when_idle);
+SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_setsockopt, globals.setsockopt);
static switch_status_t interface_exists(char *the_interface);
static switch_status_t remove_interface(char *the_interface);
} else if (!strcmp(var, "write_silence_when_idle")) {
set_global_write_silence_when_idle(val);
DEBUGA_SKYPE("globals.write_silence_when_idle=%s\n", SKYPOPEN_P_LOG, globals.write_silence_when_idle);
+ } else if (!strcmp(var, "setsockopt")) {
+ set_global_setsockopt(val);
+ DEBUGA_SKYPE("globals.setsockopt=%s\n", SKYPOPEN_P_LOG, globals.setsockopt);
}
}
char *report_incoming_chatmessages = "true";
char *silent_mode = "false";
char *write_silence_when_idle = "true";
+ char *setsockopt = "false";
uint32_t interface_id = 0;
if(globals.context)
silent_mode=globals.silent_mode;
if(globals.write_silence_when_idle)
write_silence_when_idle=globals.write_silence_when_idle;
+ if(globals.setsockopt)
+ setsockopt=globals.setsockopt;
tech_pvt = NULL;
silent_mode = val;
} else if (!strcasecmp(var, "write_silence_when_idle")) {
write_silence_when_idle = val;
+ } else if (!strcasecmp(var, "setsockopt")) {
+ setsockopt = val;
} else if (!strcasecmp(var, "X11-display") || !strcasecmp(var, "X11_display")) {
X11_display = val;
}
}
+ if (!strcmp(setsockopt, "true") || !strcmp(setsockopt, "1")) {
+ globals.SKYPOPEN_INTERFACES[interface_id].setsockopt = 1;
+ } else {
+ globals.SKYPOPEN_INTERFACES[interface_id].setsockopt = 0; //redundant, just in case
+
+ }
+
DEBUGA_SKYPE("interface_id=%d globals.SKYPOPEN_INTERFACES[interface_id].name=%s\n",
SKYPOPEN_P_LOG, interface_id, globals.SKYPOPEN_INTERFACES[interface_id].name);
DEBUGA_SKYPE
DEBUGA_SKYPE
("interface_id=%d globals.SKYPOPEN_INTERFACES[interface_id].write_silence_when_idle=%d\n",
SKYPOPEN_P_LOG, interface_id, globals.SKYPOPEN_INTERFACES[interface_id].write_silence_when_idle);
+ DEBUGA_SKYPE
+ ("interface_id=%d globals.SKYPOPEN_INTERFACES[interface_id].setsockopt=%d\n",
+ SKYPOPEN_P_LOG, interface_id, globals.SKYPOPEN_INTERFACES[interface_id].setsockopt);
WARNINGA("STARTING interface_id=%d\n", SKYPOPEN_P_LOG, interface_id);
globals.SKYPOPEN_INTERFACES[i].report_incoming_chatmessages);
DEBUGA_SKYPE("i=%d globals.SKYPOPEN_INTERFACES[%d].silent_mode=%d\n", SKYPOPEN_P_LOG, i, i, globals.SKYPOPEN_INTERFACES[i].silent_mode);
DEBUGA_SKYPE("i=%d globals.SKYPOPEN_INTERFACES[%d].write_silence_when_idle=%d\n", SKYPOPEN_P_LOG, i, i, globals.SKYPOPEN_INTERFACES[i].write_silence_when_idle);
+ DEBUGA_SKYPE("i=%d globals.SKYPOPEN_INTERFACES[%d].setsockopt=%d\n", SKYPOPEN_P_LOG, i, i, globals.SKYPOPEN_INTERFACES[i].setsockopt);
}
}
}
switch_safe_free(globals.report_incoming_chatmessages);
switch_safe_free(globals.silent_mode);
switch_safe_free(globals.write_silence_when_idle);
+ switch_safe_free(globals.setsockopt);
return SWITCH_STATUS_SUCCESS;
}
switch_buffer_t *read_buffer;
int silent_mode;
int write_silence_when_idle;
+ int setsockopt;
};
sockbufsize = SAMPLES_PER_FRAME * 8;
#endif //WIN32
size = sizeof(int);
- setsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *) &sockbufsize, size);
+ if(tech_pvt->setsockopt){
+ setsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *) &sockbufsize, size);
+ }
sockbufsize = 0;
size = sizeof(int);
sockbufsize = SAMPLES_PER_FRAME * 8;
#endif //WIN32
size = sizeof(int);
- setsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *) &sockbufsize, size);
+ if(tech_pvt->setsockopt){
+ setsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *) &sockbufsize, size);
+ }
sockbufsize = 0;
size = sizeof(int);
getsockopt(s, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, &size);
DEBUGA_SKYPE("TCP_NODELAY is %d\n", SKYPOPEN_P_LOG, flag);
flag = 1;
- setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, size);
+ if(tech_pvt->setsockopt){
+ setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, size);
+ }
flag = 0;
getsockopt(s, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, &size);
DEBUGA_SKYPE("TCP_NODELAY is %d\n", SKYPOPEN_P_LOG, flag);
Window root = -1;
Window win = -1;
int xfd;
+ fd_set xfds;
if (!strlen(tech_pvt->X11_display))
strcpy(tech_pvt->X11_display, getenv("DISPLAY"));
int i;
int continue_is_broken = 0;
int there_were_continues = 0;
+ struct timeval tv;
Atom atom_begin = XInternAtom(disp, "SKYPECONTROLAPI_MESSAGE_BEGIN", False);
Atom atom_continue = XInternAtom(disp, "SKYPECONTROLAPI_MESSAGE", False);
b = buffer;
while (running && tech_pvt->running) {
+
+
+ FD_ZERO(&xfds);
+ FD_SET(xfd, &xfds);
+
+ tv.tv_usec = 100000;
+ tv.tv_sec = 0;
+
+
+
+if (select(xfd+1, &xfds, 0, 0, &tv)){
+
+while(XPending(disp)){
+
+
+
XNextEvent(disp, &an_event);
if (!(running && tech_pvt->running))
break;
}
if (an_event.xclient.message_type == atom_continue) {
if (!strlen(buffer)) {
- DEBUGA_SKYPE
+ WARNINGA
("Got a 'continue' XAtom without a previous 'begin'. It's value (between vertical bars) is=|||%s|||, let's store it and hope next 'begin' will be the good one\n",
SKYPOPEN_P_LOG, buf);
strcat(continuebuffer, buf);
default:
skypopen_sleep(1000); //0.1 msec
break;
- }
- }
+ } //switch event.type
+ } //while XPending
+
+} // if select
+} //while running
+
+
+
+
+
}
} else {
ERRORA("Skype is not running, maybe crashed. Please run/restart Skype and relaunch Skypopen\n", SKYPOPEN_P_LOG);