some fixes, check README
[lcr.git] / mISDN.cpp
index 0abffd6..3c4c23d 100644 (file)
--- a/mISDN.cpp
+++ b/mISDN.cpp
@@ -1382,7 +1382,9 @@ int PmISDN::handler(void)
                        p_m_load = 0;
 
                /* to send data, tone must be active OR crypt messages must be on */
-               if ((p_tone_name[0] || p_m_crypt_msg_loops) && p_m_load < ISDN_LOAD)
+               if ((p_tone_name[0] || p_m_crypt_msg_loops)
+                && (p_m_load < ISDN_LOAD)
+                && (p_state==PORT_STATE_CONNECT || p_m_mISDNport->tones))
                {
                        int tosend = ISDN_LOAD - p_m_load, length; 
 #ifdef SOCKET_MISDN
@@ -1971,7 +1973,7 @@ int PmISDN::message_epoint(unsigned long epoint_id, int message_id, union parame
 #ifdef SOCKET_MISDN
 int mISDN_handler(void)
 {
-       int ret;
+       int ret, work = 0;
        struct mISDNport *mISDNport;
        class PmISDN *isdnport;
        int i;
@@ -2050,6 +2052,7 @@ int mISDN_handler(void)
                                ret = recv(mISDNport->b_stack[i], buffer, sizeof(buffer), 0);
                                if (ret >= MISDN_HEADER_LEN)
                                {
+                                       work = 1;
                                        switch(hh->prim)
                                        {
                                                /* we don't care about confirms, we use rx data to sync tx */
@@ -2060,6 +2063,7 @@ int mISDN_handler(void)
                                                /* we receive audio data, we respond to it AND we send tones */
                                                case PH_DATA_IND:
                                                case DL_DATA_IND:
+                                               case PH_SIGNAL_IND:
                                                case PH_CONTROL_IND:
                                                if (mISDNport->b_port[i])
                                                        mISDNport->b_port[i]->bchannel_receive(hh, buffer+MISDN_HEADER_LEN, ret-MISDN_HEADER_LEN);
@@ -2120,6 +2124,8 @@ int mISDN_handler(void)
                mISDNport = mISDNport->next;
        }
 
+       /* if we received at least one b-frame, we will return 1 */
+       return(work);
 }
 #else
 int mISDN_handler(void)