+
+void Pss5::process_queue(void)
+{
+ /* when clear forward is scheduled, we abort current state */
+ if (p_m_s_queued_signal == SS5_CLEAR_FORWARD_REQ)
+ new_ss5_state(SS5_STATE_IDLE);
+
+ /* if there is an ongoing signal, we wait until done */
+ if (p_m_s_state != SS5_STATE_IDLE)
+ return;
+
+ /* this shoud not happen */
+ if (!p_m_s_queued_signal)
+ return;
+
+ /* start signal */
+ ss5_trace_header(p_m_mISDNport, this, p_m_s_queued_signal, p_m_b_channel);
+ end_trace();
+ switch(p_m_s_queued_signal) {
+ case SS5_ANSWER_REQ:
+ /* start answer */
+ p_m_s_queued_signal = 0; /* prevent trigger loop */
+ start_signal(SS5_STATE_ANSWER);
+ break;
+ case SS5_BUSY_FLASH_REQ:
+ /* busy flash */
+ p_m_s_queued_signal = 0; /* prevent trigger loop */
+ start_signal(SS5_STATE_BUSY_FLASH);
+ break;
+ case SS5_CLEAR_BACK_REQ:
+ /* clear back */
+ p_m_s_queued_signal = 0; /* prevent trigger loop */
+ start_signal(SS5_STATE_CLEAR_BACK);
+ break;
+ case SS5_CLEAR_FORWARD_REQ:
+ /* clear forward */
+ p_m_s_queued_signal = 0; /* prevent trigger loop */
+ start_signal(SS5_STATE_CLEAR_FORWARD);
+ break;
+ default:
+ PERROR("unhandled event %d\n", p_m_s_queued_signal);
+ p_m_s_queued_signal = 0;
+ }
+}
+