struct trace trace;
char trace_string[MAX_TRACE_ELEMENTS * 100 + 400];
-static const char *spaces[11] = {
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- "",
-};
+static const char *spaces = " ";
/*
* initializes a new trace
*/
void _start_trace(const char *__file, int __line, int port, struct interface *interface, const char *caller, const char *dialing, int direction, int category, int serial, const char *name)
{
+ struct timeval current_time;
+
if (trace.name[0])
PERROR("trace already started (name=%s) in file %s line %d\n", trace.name, __file, __line);
memset(&trace, 0, sizeof(struct trace));
SCPY(trace.name, name);
if (!trace.name[0])
SCPY(trace.name, "<unknown>");
- trace.sec = now_tv.tv_sec;
- trace.usec = now_tv.tv_usec;
+ gettimeofday(¤t_time, NULL);
+ trace.sec = current_time.tv_sec;
+ trace.usec = current_time.tv_usec;
}
/* check for required name value */
if (!name)
goto nostring;
- if (!name[0])
- {
+ if (!name[0]) {
nostring:
PERROR("trace with name=%s gets element with no string\n", trace.name);
return;
SCPY(trace.element[trace.elements].name, name);
if (sub) if (sub[0])
SCPY(trace.element[trace.elements].sub, sub);
- if (fmt) if (fmt[0])
- {
+ if (fmt) if (fmt[0]) {
va_start(args, fmt);
VUNPRINT(trace.element[trace.elements].value, sizeof(trace.element[trace.elements].value)-1, fmt, args);
va_end(args);
return(NULL);
/* filter trace */
- if (port && trace.port)
+ if (port >= 0 && trace.port >= 0)
if (port != trace.port) return(NULL);
if (interface) if (interface[0] && trace.interface[0])
if (!!strcasecmp(interface, trace.interface)) return(NULL);
if (!(category & trace.category)) return(NULL);
/* head */
- if (detail >= 3)
- {
+ if (detail >= 3) {
SCAT(trace_string, "------------------------------------------------------------------------------\n");
/* "Port: 1 (BRI PTMP TE)" */
- if (trace.port)
- {
+ if (trace.port >= 0) {
mISDNport = mISDNport_first;
- while(mISDNport)
- {
+ while(mISDNport) {
if (mISDNport->portnum == trace.port)
break;
mISDNport = mISDNport->next;
}
- if (mISDNport)
- {
+ if (mISDNport) {
SPRINT(buffer, "Port: %d (%s %s %s)", trace.port, (mISDNport->pri)?"PRI":"BRI", (mISDNport->ptp)?"PTP":"PTMP", (mISDNport->ntmode)?"NT":"TE");
/* copy interface, if we have a port */
if (mISDNport->ifport) if (mISDNport->ifport->interface)
} else
SCAT(trace_string, "Port: ---");
- if (trace.interface[0])
- {
+ if (trace.interface[0]) {
/* " Interface: 'Ext'" */
SPRINT(buffer, " Interface: '%s'", trace.interface);
SCAT(trace_string, buffer);
} else
SCAT(trace_string, " Interface: ---");
- if (trace.caller[0])
- {
+ if (trace.caller[0]) {
/* " Caller: '021256493'" */
SPRINT(buffer, " Caller: '%s'\n", trace.caller);
SCAT(trace_string, buffer);
SPRINT(buffer, "Time: %02d.%02d.%02d %02d:%02d:%02d.%03d", tm->tm_mday, tm->tm_mon+1, tm->tm_year%100, tm->tm_hour, tm->tm_min, tm->tm_sec, trace.usec/1000);
SCAT(trace_string, buffer);
- if (trace.direction)
- {
+ if (trace.direction) {
/* " Direction: out" */
SPRINT(buffer, " Direction: %s", (trace.direction==DIRECTION_OUT)?"OUT":"IN");
SCAT(trace_string, buffer);
} else
SCAT(trace_string, " Direction: ---");
- if (trace.dialing[0])
- {
+ if (trace.dialing[0]) {
/* " Dialing: '57077'" */
SPRINT(buffer, " Dialing: '%s'\n", trace.dialing);
SCAT(trace_string, buffer);
SCAT(trace_string, "------------------------------------------------------------------------------\n");
}
- if (detail < 3)
- {
+ if (detail < 3) {
tm = localtime(&ti);
SPRINT(buffer, "%02d.%02d.%02d %02d:%02d:%02d.%03d ", tm->tm_mday, tm->tm_mon+1, tm->tm_year%100, tm->tm_hour, tm->tm_min, tm->tm_sec, trace.usec/1000);
SCAT(trace_string, buffer);
}
/* "CH(45): CC_SETUP (net->user)" */
- switch (trace.category)
- { case CATEGORY_CH:
+ switch (trace.category) {
+ case CATEGORY_CH:
SCAT(trace_string, "CH");
break;
SCAT(trace_string, buffer);
/* elements */
- switch(detail)
- {
+ switch(detail) {
case 1: /* brief */
- if (trace.port)
- {
+ if (trace.port >= 0) {
SPRINT(buffer, " port %d", trace.port);
SCAT(trace_string, buffer);
}
i = 0;
- while(i < trace.elements)
- {
+ while(i < trace.elements) {
SPRINT(buffer, " %s", trace.element[i].name);
if (i) if (!strcmp(trace.element[i].name, trace.element[i-1].name))
buffer[0] = '\0';
case 3: /* long */
SCAT(trace_string, "\n");
i = 0;
- while(i < trace.elements)
- {
- SPRINT(buffer, " %s%s", trace.element[i].name, spaces[strlen(trace.element[i].name)]);
+ while(i < trace.elements) {
+ SPRINT(buffer, " %s%s", trace.element[i].name, &spaces[strlen(trace.element[i].name)]);
if (i) if (!strcmp(trace.element[i].name, trace.element[i-1].name))
SPRINT(buffer, " ");
SCAT(trace_string, buffer);
if (trace.element[i].sub[0])
- SPRINT(buffer, " : %s%s = ", trace.element[i].sub, spaces[strlen(trace.element[i].sub)]);
+ SPRINT(buffer, " : %s%s = ", trace.element[i].sub, &spaces[strlen(trace.element[i].sub)]);
else
SPRINT(buffer, " : ");
SCAT(trace_string, buffer);
FILE *fp;
struct admin_list *admin;
struct admin_queue *response, **responsep; /* response pointer */
+ int ret;
if (!trace.name[0])
PERROR("trace not started in file %s line %d\n", __file, __line);
- if (options.deb || options.log[0])
- {
- string = print_trace(1, 0, NULL, NULL, NULL, 0);
- if (string)
- {
+ if (options.deb || options.log[0]) {
+ string = print_trace(1, -1, NULL, NULL, NULL, 0);
+ if (string) {
/* process debug */
if (options.deb)
- debug(NULL, 0, "trace", string);
+ debug(NULL, 0, "TRACE", string);
/* process log */
- if (options.log[0])
- {
+ if (options.log[0]) {
fp = fopen(options.log, "a");
- if (fp)
- {
- fwrite(string, strlen(string), 1, fp);
+ if (fp) {
+ ret = fwrite(string, strlen(string), 1, fp);
fclose(fp);
}
}
/* process admin */
admin = admin_first;
- while(admin)
- {
- if (admin->trace.detail)
- {
+ while(admin) {
+ if (admin->trace.detail) {
string = print_trace(admin->trace.detail, admin->trace.port, admin->trace.interface, admin->trace.caller, admin->trace.dialing, admin->trace.category);
- if (string)
- {
+ if (string) {
/* seek to end of response list */
response = admin->response;
responsep = &admin->response;
- while(response)
- {
+ while(response) {
responsep = &response->next;
response = response->next;
}