+ * trace
+ */
+void chan_trace_header(struct mISDNport *mISDNport, class PmISDN *port, char *msgtext, int direction)
+{
+ /* init trace with given values */
+ start_trace(mISDNport?mISDNport->portnum:0,
+ (mISDNport)?((mISDNport->ifport)?mISDNport->ifport->interface:NULL):NULL,
+ port?numberrize_callerinfo(port->p_callerinfo.id, port->p_callerinfo.ntype):NULL,
+ port?port->p_dialinginfo.id:NULL,
+ direction,
+ CATEGORY_CH,
+ port?port->p_serial:0,
+ msgtext);
+}
+
+
+/*
+ * layer trace header
+ */
+static struct isdn_message {
+ char *name;
+ unsigned long value;
+} isdn_message[] = {
+ {"TIMEOUT", CC_TIMEOUT},
+ {"SETUP", CC_SETUP},
+ {"SETUP_ACK", CC_SETUP_ACKNOWLEDGE},
+ {"PROCEEDING", CC_PROCEEDING},
+ {"ALERTING", CC_ALERTING},
+ {"CONNECT", CC_CONNECT},
+ {"CONNECT RES", CC_CONNECT},
+ {"CONNECT_ACK", CC_CONNECT_ACKNOWLEDGE},
+ {"DISCONNECT", CC_DISCONNECT},
+ {"RELEASE", CC_RELEASE},
+ {"RELEASE_COMP", CC_RELEASE_COMPLETE},
+ {"INFORMATION", CC_INFORMATION},
+ {"PROGRESS", CC_PROGRESS},
+ {"NOTIFY", CC_NOTIFY},
+ {"SUSPEND", CC_SUSPEND},
+ {"SUSPEND_ACK", CC_SUSPEND_ACKNOWLEDGE},
+ {"SUSPEND_REJ", CC_SUSPEND_REJECT},
+ {"RESUME", CC_RESUME},
+ {"RESUME_ACK", CC_RESUME_ACKNOWLEDGE},
+ {"RESUME_REJ", CC_RESUME_REJECT},
+ {"HOLD", CC_HOLD},
+ {"HOLD_ACK", CC_HOLD_ACKNOWLEDGE},
+ {"HOLD_REJ", CC_HOLD_REJECT},
+ {"RETRIEVE", CC_RETRIEVE},
+ {"RETRIEVE_ACK", CC_RETRIEVE_ACKNOWLEDGE},
+ {"RETRIEVE_REJ", CC_RETRIEVE_REJECT},
+ {"FACILITY", CC_FACILITY},
+ {"STATUS", CC_STATUS},
+ {"RESTART", CC_RESTART},
+ {"RELEASE_CR", CC_RELEASE_CR},
+ {"NEW_CR", CC_NEW_CR},
+ {"DL_ESTABLISH", DL_ESTABLISH},
+ {"DL_RELEASE", DL_RELEASE},
+ {"PH_ACTIVATE", PH_ACTIVATE},
+ {"PH_DEACTIVATE", PH_DEACTIVATE},
+
+ {NULL, 0},
+};
+static char *isdn_prim[4] = {
+ " REQUEST",
+ " CONFIRM",
+ " INDICATION",
+ " RESPONSE",
+};
+void l1l2l3_trace_header(struct mISDNport *mISDNport, class PmISDN *port, unsigned long prim, int direction)
+{
+ int i;
+ char msgtext[64] = "<<UNKNOWN MESSAGE>>";
+
+ /* select message and primitive text */
+ i = 0;
+ while(isdn_message[i].name)
+ {
+ if (isdn_message[i].value == (prim&0xffffff00))
+ {
+ SCPY(msgtext, isdn_message[i].name);
+ break;
+ }
+ i++;
+ }
+ SCAT(msgtext, isdn_prim[prim&0x00000003]);
+
+ /* add direction */
+ if (direction && (prim&0xffffff00)!=CC_NEW_CR && (prim&0xffffff00)!=CC_RELEASE_CR)
+ {
+ 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:0,
+ mISDNport?mISDNport->ifport->interface:NULL,
+ port?numberrize_callerinfo(port->p_callerinfo.id, port->p_callerinfo.ntype):NULL,
+ port?port->p_dialinginfo.id:NULL,
+ direction,
+ CATEGORY_CH,
+ port?port->p_serial:0,
+ msgtext);
+}
+
+
+/*