]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
ftmod_misdn: misdn_write() workaround for signalling drivers that do not use write...
authorStefan Knoblich <stkn@openisdn.net>
Fri, 23 Mar 2012 00:00:26 +0000 (01:00 +0100)
committerStefan Knoblich <stkn@openisdn.net>
Fri, 23 Mar 2012 00:21:55 +0000 (01:21 +0100)
Wait till the channel is actually ready to send data.

Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
libs/freetdm/src/ftmod/ftmod_misdn/ftmod_misdn.c

index 3080de52f2871f6550576b5881b53137e5e029c1..410722fd532d4b8e118416733a6a0a8bb2984dc1 100644 (file)
@@ -1261,6 +1261,7 @@ static FIO_WRITE_FUNCTION(misdn_write)
        struct mISDNhead *hh = (struct mISDNhead *)wbuf;
        int size = *datalen;
        int retval = 0;
+       ftdm_wait_flag_t wflags;
 
        assert(priv);
 
@@ -1284,6 +1285,15 @@ static FIO_WRITE_FUNCTION(misdn_write)
        memcpy(wbuf + MISDN_HEADER_LEN, data, size);
        size += MISDN_HEADER_LEN;
 
+       /* wait for channel to get ready */
+       wflags = FTDM_WRITE;
+       retval = misdn_wait(ftdmchan, &wflags, 20);
+       if (retval) {
+               /* timeout, io error */
+               *datalen = 0;
+               return FTDM_FAIL;
+       }
+
 #ifdef MISDN_DEBUG_IO
        ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "mISDN writing %d bytes to channel socket %d [dev.ch: %d.%d]\n",
                size, ftdmchan->sockfd, priv->addr.dev, priv->addr.channel);