static void on_input(netc_t *netc) { DNDSMessage_t *msg; struct session *session; mbuf_t **mbuf_itr; pdu_PR pdu; mbuf_itr = &netc->queue_msg; session = (struct session *)netc->ext_ptr; if (session->state == SESSION_STATE_PURGE) { jlog(L_NOTICE, "purge node: %s", session->cert_name); net_disconnect(netc); return; } while (*mbuf_itr != NULL) { msg = (DNDSMessage_t *)(*mbuf_itr)->ext_buf; DNDSMessage_get_pdu(msg, &pdu); switch (pdu) { case pdu_PR_dnm: /* DNDS protocol */ dispatch_operation(session, msg); break; case pdu_PR_ethernet: /* Ethernet */ forward_ethernet(session, msg); break; default: /* TODO disconnect session */ jlog(L_ERROR, "invalid PDU"); break; } mbuf_del(mbuf_itr, *mbuf_itr); } }
static void on_input(netc_t *netc) { DNDSMessage_t *msg; struct session *session; mbuf_t **mbuf_itr; pdu_PR pdu; mbuf_itr = &netc->queue_msg; session = netc->ext_ptr; while (*mbuf_itr != NULL) { msg = (DNDSMessage_t *)(*mbuf_itr)->ext_buf; DNDSMessage_get_pdu(msg, &pdu); switch (pdu) { case pdu_PR_dsm: dispatch_operation(session, msg); break; default: terminate(session); return; } mbuf_del(mbuf_itr, *mbuf_itr); } }