sent = frame->datalen;
#ifdef WIN32
- switch_file_write(tech_pvt->audioskypepipe[1], frame->data, &sent);
+ //switch_file_write(tech_pvt->audiopipe_cli[1], frame->data, &sent);
#else /* WIN32 */
- sent = write(tech_pvt->audioskypepipe[1], frame->data, sent);
+ //sent = write(tech_pvt->audiopipe_cli[1], frame->data, sent);
#endif /* WIN32 */
+ while(tech_pvt->flag_audio_cli == 1){
+ switch_sleep(100); //1 millisec
+ //NOTICA("write \n", SKYPIAX_P_LOG);
+ }
+ //WARNINGA("write \n", SKYPIAX_P_LOG);
+
+
+ //memcpy(tech_pvt->audiobuf_cli, frame->data, frame->datalen);
+ memcpy(tech_pvt->audiobuf_cli, frame->data, frame->datalen);
+ tech_pvt->flag_audio_cli = 1;
+ //NOTICA("write \n", SKYPIAX_P_LOG);
+
if (sent != frame->datalen && sent != -1) {
DEBUGA_SKYPE("CLI PIPE write %d\n", SKYPIAX_P_LOG, sent);
}
static switch_status_t chat_send(const char *proto, const char *from, const char *to, const char *subject, const char *body, const char *type, const char *hint)
{
//char *user, *host, *f_user = NULL, *ffrom = NULL, *f_host = NULL, *f_resource = NULL;
- char *user, *host, *f_user = NULL, *f_host = NULL, *f_resource = NULL;
+ char *user=NULL, *host, *f_user = NULL, *f_host = NULL, *f_resource = NULL;
//mdl_profile_t *profile = NULL;
private_t * tech_pvt=NULL;
int i=0, found=0, tried=0;
}
#ifndef WIN32
WARNINGA("SHUTDOWN interface_id=%d\n", SKYPIAX_P_LOG, interface_id);
- shutdown(tech_pvt->audioskypepipe[0], 2);
- close(tech_pvt->audioskypepipe[0]);
- shutdown(tech_pvt->audioskypepipe[1], 2);
- close(tech_pvt->audioskypepipe[1]);
- shutdown(tech_pvt->audiopipe[0], 2);
- close(tech_pvt->audiopipe[0]);
- shutdown(tech_pvt->audiopipe[1], 2);
- close(tech_pvt->audiopipe[1]);
+ shutdown(tech_pvt->audiopipe_cli[0], 2);
+ close(tech_pvt->audiopipe_cli[0]);
+ shutdown(tech_pvt->audiopipe_cli[1], 2);
+ close(tech_pvt->audiopipe_cli[1]);
+ shutdown(tech_pvt->audiopipe_srv[0], 2);
+ close(tech_pvt->audiopipe_srv[0]);
+ shutdown(tech_pvt->audiopipe_srv[1], 2);
+ close(tech_pvt->audiopipe_srv[1]);
shutdown(tech_pvt->SkypiaxHandles.fdesc[0], 2);
close(tech_pvt->SkypiaxHandles.fdesc[0]);
shutdown(tech_pvt->SkypiaxHandles.fdesc[1], 2);
i++;
}
/* send the complete frame through the pipe to our code waiting for incoming audio */
- howmany = skypiax_pipe_write(tech_pvt->audiopipe[1], totalbuf, SAMPLES_PER_FRAME * sizeof(short));
+ //howmany = skypiax_pipe_write(tech_pvt->audiopipe_srv[1], totalbuf, SAMPLES_PER_FRAME * sizeof(short));
+ while(tech_pvt->flag_audio_srv == 1){
+ switch_sleep(100); //1 millisec
+ //NOTICA("write \n", SKYPIAX_P_LOG);
+ }
+ //WARNINGA("read \n", SKYPIAX_P_LOG);
+
+
+ howmany = SAMPLES_PER_FRAME * sizeof(short);
+ memcpy(tech_pvt->audiobuf_srv, totalbuf, SAMPLES_PER_FRAME * sizeof(short));
+ tech_pvt->flag_audio_srv = 1;
+ //NOTICA("read \n", SKYPIAX_P_LOG);
if (howmany != SAMPLES_PER_FRAME * sizeof(short)) {
ERRORA("howmany is %d, but was expected to be %d\n", SKYPIAX_P_LOG,
howmany, (int) (SAMPLES_PER_FRAME * sizeof(short)));
/* let's send some frame in the pipes, so both tcp_cli and tcp_srv will have an occasion to die */
kill_cli_size = SAMPLES_PER_FRAME * sizeof(short);
- len = skypiax_pipe_write(tech_pvt->audiopipe[1], kill_cli_buff, kill_cli_size);
+ len = skypiax_pipe_write(tech_pvt->audiopipe_srv[1], kill_cli_buff, kill_cli_size);
kill_cli_size = SAMPLES_PER_FRAME * sizeof(short);
- len = skypiax_pipe_write(tech_pvt->audioskypepipe[1], kill_cli_buff, kill_cli_size);
- tech_pvt->interface_state = SKYPIAX_STATE_DOWN;
+ len = skypiax_pipe_write(tech_pvt->audiopipe_cli[1], kill_cli_buff, kill_cli_size);
+ //tech_pvt->interface_state = SKYPIAX_STATE_DOWN;
kill_cli_size = SAMPLES_PER_FRAME * sizeof(short);
- len = skypiax_pipe_write(tech_pvt->audiopipe[1], kill_cli_buff, kill_cli_size);
+ len = skypiax_pipe_write(tech_pvt->audiopipe_srv[1], kill_cli_buff, kill_cli_size);
kill_cli_size = SAMPLES_PER_FRAME * sizeof(short);
- len = skypiax_pipe_write(tech_pvt->audioskypepipe[1], kill_cli_buff, kill_cli_size);
+ len = skypiax_pipe_write(tech_pvt->audiopipe_cli[1], kill_cli_buff, kill_cli_size);
+ tech_pvt->flag_audio_cli = 1; //let's send some frame in the pipes, so both tcp_cli and tcp_srv will have an occasion to die
+ skypiax_sleep(200);
+ tech_pvt->flag_audio_srv = 1; //let's send some frame in the pipes, so both tcp_cli and tcp_srv will have an occasion to die
+ skypiax_sleep(200);
+ tech_pvt->interface_state = SKYPIAX_STATE_DOWN;
+ tech_pvt->flag_audio_cli = 1; //let's send some frame in the pipes, so both tcp_cli and tcp_srv will have an occasion to die
+ skypiax_sleep(200);
+ tech_pvt->flag_audio_srv = 1; //let's send some frame in the pipes, so both tcp_cli and tcp_srv will have an occasion to die
+ skypiax_sleep(200);
DEBUGA_SKYPE("Skype incoming audio GONE\n", SKYPIAX_P_LOG);
skypiax_close_socket(fd);
}
while (s > 0 && (fd = accept(s, (struct sockaddr *) &remote_addr, &sin_size)) > 0) {
DEBUGA_SKYPE("ACCEPTED here you send me %d\n", SKYPIAX_P_LOG, tech_pvt->tcp_cli_port);
#ifndef WIN32
- fcntl(tech_pvt->audioskypepipe[0], F_SETFL, O_NONBLOCK);
- fcntl(tech_pvt->audioskypepipe[1], F_SETFL, O_NONBLOCK);
+ fcntl(tech_pvt->audiopipe_cli[0], F_SETFL, O_NONBLOCK);
+ fcntl(tech_pvt->audiopipe_cli[1], F_SETFL, O_NONBLOCK);
#endif //WIN32
if (!(running && tech_pvt->running))
fdselect = fd;
FD_SET(fdselect, &fs);
- rt = select(fdselect + 1, NULL, &fs, NULL, &to);
+ //rt = select(fdselect + 1, NULL, &fs, NULL, &to);
#else
/* on *unix and cygwin we select from the real pipe */
- fdselect = tech_pvt->audioskypepipe[0];
- FD_SET(fdselect, &fs);
+ //XXX fdselect = tech_pvt->audiopipe_cli[0];
+ //XXX FD_SET(fdselect, &fs);
- rt = select(fdselect + 1, &fs, NULL, NULL, &to);
+ //rt = select(fdselect + 1, &fs, NULL, NULL, &to);
#endif
+ fdselect = fd;
+ FD_SET(fdselect, &fs);
+
+ //XXX rt = select(fdselect + 1, NULL, &fs, NULL, &to);
+ while(tech_pvt->flag_audio_cli == 0){
+ skypiax_sleep(100); //1 millisec
+ //NOTICA("write \n", SKYPIAX_P_LOG);
+ }
+ //ERRORA("write \n", SKYPIAX_P_LOG);
+
+ rt = 1;
if (rt > 0) {
int counter;
/* until we drained the pipe to empty */
- for (counter = 0; counter < 10; counter++) {
+ //for (counter = 0; counter < 10; counter++) {
+ for (counter = 0; counter < 1; counter++) {
/* read from the pipe the audio frame we are supposed to send out */
- got = skypiax_pipe_read(tech_pvt->audioskypepipe[0], cli_in, SAMPLES_PER_FRAME * sizeof(short));
+ //got = skypiax_pipe_read(tech_pvt->audiopipe_cli[0], cli_in, SAMPLES_PER_FRAME * sizeof(short));
+
+
+ got = SAMPLES_PER_FRAME * sizeof(short);
+ memcpy(cli_in, tech_pvt->audiobuf_cli, SAMPLES_PER_FRAME * sizeof(short));
+ tech_pvt->flag_audio_cli = 0;
+
+
+
+
if (got == -1)
break;
{
unsigned int samples;
- samples = skypiax_pipe_read(tech_pvt->audiopipe[0], tech_pvt->read_frame.data, SAMPLES_PER_FRAME * sizeof(short));
+ while(tech_pvt->flag_audio_srv == 0){
+ skypiax_sleep(100); //1 millisec
+ //NOTICA("read \n", SKYPIAX_P_LOG);
+ }
+ //ERRORA("read \n", SKYPIAX_P_LOG);
+ //samples = skypiax_pipe_read(tech_pvt->audiopipe_srv[0], tech_pvt->read_frame.data, SAMPLES_PER_FRAME * sizeof(short));
+ samples = SAMPLES_PER_FRAME * sizeof(short);
+ memcpy(tech_pvt->read_frame.data, tech_pvt->audiobuf_srv, SAMPLES_PER_FRAME * sizeof(short));
+ tech_pvt->flag_audio_srv = 0;
if (samples != SAMPLES_PER_FRAME * sizeof(short)) {
if (samples)
int skypiax_audio_init(private_t * tech_pvt)
{
switch_status_t rv;
- rv = switch_file_pipe_create(&tech_pvt->audiopipe[0], &tech_pvt->audiopipe[1], skypiax_module_pool);
- rv = switch_file_pipe_create(&tech_pvt->audioskypepipe[0], &tech_pvt->audioskypepipe[1], skypiax_module_pool);
+ rv = switch_file_pipe_create(&tech_pvt->audiopipe_srv[0], &tech_pvt->audiopipe_srv[1], skypiax_module_pool);
+ rv = switch_file_pipe_create(&tech_pvt->audiopipe_cli[0], &tech_pvt->audiopipe_cli[1], skypiax_module_pool);
return 0;
}
#else /* WIN32 */
int skypiax_audio_init(private_t * tech_pvt)
{
- if (pipe(tech_pvt->audiopipe)) {
- fcntl(tech_pvt->audiopipe[0], F_SETFL, O_NONBLOCK);
- fcntl(tech_pvt->audiopipe[1], F_SETFL, O_NONBLOCK);
+ if (pipe(tech_pvt->audiopipe_srv)) {
+ fcntl(tech_pvt->audiopipe_srv[0], F_SETFL, O_NONBLOCK);
+ fcntl(tech_pvt->audiopipe_srv[1], F_SETFL, O_NONBLOCK);
}
- if (pipe(tech_pvt->audioskypepipe)) {
- fcntl(tech_pvt->audioskypepipe[0], F_SETFL, O_NONBLOCK);
- fcntl(tech_pvt->audioskypepipe[1], F_SETFL, O_NONBLOCK);
+ if (pipe(tech_pvt->audiopipe_cli)) {
+ fcntl(tech_pvt->audiopipe_cli[0], F_SETFL, O_NONBLOCK);
+ fcntl(tech_pvt->audiopipe_cli[1], F_SETFL, O_NONBLOCK);
}
/* this pipe is the audio fd for asterisk to poll on during a call. FS do not use it */
- tech_pvt->skypiax_sound_capt_fd = tech_pvt->audiopipe[0];
+ tech_pvt->skypiax_sound_capt_fd = tech_pvt->audiopipe_srv[0];
return 0;
}