+ * trace
+ */
+void chan_trace_header(struct mISDNport *mISDNport, class PmISDN *port, const char *msgtext, int direction)
+{
+ /* init trace with given values */
+ start_trace(mISDNport?mISDNport->portnum:-1,
+ (mISDNport)?((mISDNport->ifport)?mISDNport->ifport->interface:NULL):NULL,
+ port?numberrize_callerinfo(port->p_callerinfo.id, port->p_callerinfo.ntype, options.national, options.international):NULL,
+ port?port->p_dialinginfo.id:NULL,
+ direction,
+ CATEGORY_CH,
+ port?port->p_serial:0,
+ msgtext);
+}
+
+
+/*
+ * layer trace header
+ */
+static struct isdn_message {
+ const char *name;
+ unsigned int value;
+} isdn_message[] = {
+ {"PH_ACTIVATE", L1_ACTIVATE_REQ},
+ {"PH_DEACTIVATE", L1_DEACTIVATE_REQ},
+ {"DL_ESTABLISH", L2_ESTABLISH_REQ},
+ {"DL_RELEASE", L2_RELEASE_REQ},
+ {"UNKNOWN", L3_UNKNOWN_REQ},
+ {"MT_TIMEOUT", L3_TIMEOUT_REQ},
+ {"MT_SETUP", L3_SETUP_REQ},
+ {"MT_SETUP_ACK", L3_SETUP_ACKNOWLEDGE_REQ},
+ {"MT_PROCEEDING", L3_PROCEEDING_REQ},
+ {"MT_ALERTING", L3_ALERTING_REQ},
+ {"MT_CONNECT", L3_CONNECT_REQ},
+ {"MT_CONNECT_ACK", L3_CONNECT_ACKNOWLEDGE_REQ},
+ {"MT_DISCONNECT", L3_DISCONNECT_REQ},
+ {"MT_RELEASE", L3_RELEASE_REQ},
+ {"MT_RELEASE_COMP", L3_RELEASE_COMPLETE_REQ},
+ {"MT_INFORMATION", L3_INFORMATION_REQ},
+ {"MT_PROGRESS", L3_PROGRESS_REQ},
+ {"MT_NOTIFY", L3_NOTIFY_REQ},
+ {"MT_SUSPEND", L3_SUSPEND_REQ},
+ {"MT_SUSPEND_ACK", L3_SUSPEND_ACKNOWLEDGE_REQ},
+ {"MT_SUSPEND_REJ", L3_SUSPEND_REJECT_REQ},
+ {"MT_RESUME", L3_RESUME_REQ},
+ {"MT_RESUME_ACK", L3_RESUME_ACKNOWLEDGE_REQ},
+ {"MT_RESUME_REJ", L3_RESUME_REJECT_REQ},
+ {"MT_HOLD", L3_HOLD_REQ},
+ {"MT_HOLD_ACK", L3_HOLD_ACKNOWLEDGE_REQ},
+ {"MT_HOLD_REJ", L3_HOLD_REJECT_REQ},
+ {"MT_RETRIEVE", L3_RETRIEVE_REQ},
+ {"MT_RETRIEVE_ACK", L3_RETRIEVE_ACKNOWLEDGE_REQ},
+ {"MT_RETRIEVE_REJ", L3_RETRIEVE_REJECT_REQ},
+ {"MT_FACILITY", L3_FACILITY_REQ},
+ {"MT_STATUS", L3_STATUS_REQ},
+ {"MT_RESTART", L3_RESTART_REQ},
+ {"MT_NEW_L3ID", L3_NEW_L3ID_REQ},
+ {"MT_RELEASE_L3ID", L3_RELEASE_L3ID_REQ},
+ {NULL, 0},
+};
+static const char *isdn_prim[4] = {
+ " REQUEST",
+ " CONFIRM",
+ " INDICATION",
+ " RESPONSE",
+};
+void l1l2l3_trace_header(struct mISDNport *mISDNport, class PmISDN *port, unsigned int msg, int direction)
+{
+ int i;
+ char msgtext[64];
+
+ SCPY(msgtext, "<<UNKNOWN MESSAGE>>");
+ /* select message and primitive text */
+ i = 0;
+ while(isdn_message[i].name) {
+// if (msg == L3_NOTIFY_REQ) printf("val = %x %s\n", isdn_message[i].value, isdn_message[i].name);
+ if (isdn_message[i].value == (msg&0xffffff00)) {
+ SCPY(msgtext, isdn_message[i].name);
+ break;
+ }
+ i++;
+ }
+ SCAT(msgtext, isdn_prim[msg&0x00000003]);
+
+ /* add direction */
+ if (direction && (msg&0xffffff00)!=L3_NEW_L3ID_REQ && (msg&0xffffff00)!=L3_RELEASE_L3ID_REQ) {
+ if (mISDNport) {
+ if (mISDNport->ntmode) {
+ if (direction == DIRECTION_OUT)
+ SCAT(msgtext, " N->U");
+ else
+ SCAT(msgtext, " N<-U");
+ } else {
+ if (direction == DIRECTION_OUT)
+ SCAT(msgtext, " U->N");
+ else
+ SCAT(msgtext, " U<-N");
+ }
+ }
+ }
+
+ /* init trace with given values */
+ start_trace(mISDNport?mISDNport->portnum:-1,
+ mISDNport?(mISDNport->ifport?mISDNport->ifport->interface:NULL):NULL,
+ port?numberrize_callerinfo(port->p_callerinfo.id, port->p_callerinfo.ntype, options.national, options.international):NULL,
+ port?port->p_dialinginfo.id:NULL,
+ direction,
+ CATEGORY_CH,
+ port?port->p_serial:0,
+ msgtext);
+}
+
+
+/*