]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
ftmod_misdn: Move misdn_handle_incoming() up.
authorStefan Knoblich <stkn@openisdn.net>
Thu, 22 Mar 2012 23:32:24 +0000 (00:32 +0100)
committerStefan Knoblich <stkn@openisdn.net>
Fri, 23 Mar 2012 00:21:55 +0000 (01:21 +0100)
Only used by misdn_read(), so move it right in front of that one.

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

index 0b07447dd7eac7cd4d02c96a45a76c0bd988476d..a023d83aec9ad9add0a5d2a0663bb05bc332c9cd 100644 (file)
@@ -1079,6 +1079,81 @@ static FIO_WAIT_FUNCTION(misdn_wait)
        return FTDM_SUCCESS;
 }
 
+
+/**
+ * Handle incoming mISDN message on d-channel
+ * @param[in]  ftdmchan
+ * @param[in]  msg_buf
+ * @param[in]  msg_len
+ * @internal
+ */
+static ftdm_status_t misdn_handle_incoming(ftdm_channel_t *ftdmchan, const char *msg_buf, const int msg_len)
+{
+       struct misdn_chan_private *priv = ftdm_chan_io_private(ftdmchan);
+       struct mISDNhead *hh = (struct mISDNhead *)msg_buf;
+       const char *data = msg_buf + sizeof(*hh);
+       int data_len = msg_len - sizeof(*hh);
+
+       assert(msg_buf);
+       assert(priv);
+
+       if (msg_len < sizeof(*hh)) {
+               ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "mISDN message to small (%d < %d bytes)\n",
+                       msg_len, sizeof(*hh));
+               return FTDM_FAIL;
+       }
+
+#ifdef MISDN_DEBUG_EVENTS
+       ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "mISDN %c-channel received '%s' message (id: 0x%x, additional data: %d bytes)\n",
+               ftdm_channel_get_type(ftdmchan) == FTDM_CHAN_TYPE_B ? 'B' : 'D', misdn_event2str(hh->prim), hh->id, data_len);
+#endif
+
+       switch (hh->prim) {
+       /* data events */
+       case PH_DATA_CNF:       /* TX: ack */
+               priv->tx_ack_cnt++;
+               break;
+       case PH_DATA_REQ:       /* TX: request echo (ignore) */
+               break;
+       case PH_DATA_E_IND:     /* RX: e-channel data received (monitoring?) */
+               break;
+
+       /* control requests */
+       case PH_CONTROL_IND:
+               return misdn_handle_ph_control_ind(ftdmchan, hh, data, data_len);
+       case PH_CONTROL_REQ:
+       case PH_CONTROL_CNF:
+               break;
+
+       /* information */
+       case MPH_INFORMATION_IND:
+               return misdn_handle_mph_information_ind(ftdmchan, hh, data, data_len);
+
+       /* channel de-/activation */
+       case PH_ACTIVATE_REQ:   /* Echoed requests, ignore */
+       case PH_DEACTIVATE_REQ:
+               break;
+       case PH_ACTIVATE_IND:
+       case PH_DEACTIVATE_IND: {
+               /* other events, enqueue and let misdn_event_next handle it */
+               struct misdn_span_private *span_priv = ftdm_span_io_private(ftdmchan->span);
+               struct misdn_event evt = { 0 };
+               evt.id = hh->prim;
+
+               misdn_event_queue_push(priv->events, &evt);
+
+               /* wake possible readers */
+               pthread_cond_signal(&span_priv->event_cond);
+               break;
+       }
+       default:        /* error? */
+               ftdm_log(FTDM_LOG_DEBUG, "mISDN channel %d:%d received unknown event %d\n",
+                       ftdm_channel_get_span_id(ftdmchan), ftdm_channel_get_id(ftdmchan), hh->prim);
+               break;
+       }
+       return FTDM_SUCCESS;
+}
+
 /**
  * \brief      Read data
  * \param      ftdmchan        FreeTDM channel
@@ -1755,71 +1830,6 @@ static FIO_SPAN_DESTROY_FUNCTION(misdn_span_destroy)
 }
 
 
-static ftdm_status_t misdn_handle_incoming(ftdm_channel_t *ftdmchan, const char *rbuf, const int size)
-{
-       struct mISDNhead *hh = (struct mISDNhead *)rbuf;
-       struct misdn_chan_private *priv = ftdm_chan_io_private(ftdmchan);
-       const char *data = rbuf + sizeof(*hh);
-       int data_len = size - sizeof(*hh);
-
-       assert(priv);
-
-#ifdef MISDN_DEBUG_EVENTS
-       ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "mISDN channel received '%s' message (additional data: %d bytes)\n",
-               misdn_event2str(hh->prim), data_len);
-#endif
-
-       switch (hh->prim) {
-       /* data events */
-       case PH_DATA_CNF:       /* TX ack */
-               priv->tx_ack_cnt++;
-               break;
-       case PH_DATA_REQ:       /* request echo? */
-               break;
-       case PH_DATA_E_IND:     /* TX/RX ERR(?) */
-               break;
-
-       /* control events */
-       case PH_ACTIVATE_REQ:
-       case PH_DEACTIVATE_REQ:
-               /*
-                * Echoed(?) L2->L1 requests, ignore...
-                * (something broken in mISDN or the way we setup the channel?)
-                */
-               break;
-       case PH_CONTROL_IND:
-               return misdn_handle_ph_control_ind(ftdmchan, hh, data, data_len);
-       case PH_CONTROL_REQ:
-       case PH_CONTROL_CNF:
-               break;
-
-       case MPH_INFORMATION_IND:
-               return misdn_handle_mph_information_ind(ftdmchan, hh, data, data_len);
-
-       case PH_ACTIVATE_IND:
-       case PH_DEACTIVATE_IND:
-               {
-                       /* other events, enqueue and let misdn_event_next handle it */
-                       struct misdn_span_private *span_priv = ftdm_span_io_private(ftdmchan->span);
-                       struct misdn_event evt = { 0 };
-                       evt.id = hh->prim;
-
-                       misdn_event_queue_push(priv->events, &evt);
-
-                       /* wake possible readers */
-                       pthread_cond_signal(&span_priv->event_cond);
-               }
-               break;
-
-       default:        /* error? */
-               ftdm_log(FTDM_LOG_DEBUG, "mISDN channel %d:%d received unknown event %d\n",
-                       ftdm_channel_get_span_id(ftdmchan), ftdm_channel_get_id(ftdmchan), hh->prim);
-               break;
-       }
-       return FTDM_SUCCESS;
-}
-
-
 /**
  * \brief      ftmod_misdn interface
  */