119 lines
2.9 KiB
C
119 lines
2.9 KiB
C
/****************************************************************
|
|
* *
|
|
* Copyright 2001, 2010 Fidelity Information Services, Inc *
|
|
* *
|
|
* This source code contains the intellectual property *
|
|
* of its copyright holder(s), and is made available *
|
|
* under a license. If you do not know the terms of *
|
|
* the license, please stop and do not read further. *
|
|
* *
|
|
****************************************************************/
|
|
|
|
#include "mdef.h"
|
|
#include "cmidef.h"
|
|
#include "gtm_stdio.h"
|
|
#include "gtm_string.h"
|
|
#include "gtm_stat.h"
|
|
#include "gtm_stdlib.h"
|
|
#include "gtm_time.h"
|
|
#include "gtcm_gnp_pktdmp.h"
|
|
|
|
/* dump packet with connection information...*/
|
|
void gtcm_gnp_cpktdmp(FILE *fp, struct CLB *lnk, int sta, unsigned char *buf, size_t len, char *msg)
|
|
{
|
|
char newmsg[512];
|
|
|
|
if ((SIZEOF(newmsg)-strlen(msg)) > 25)
|
|
{
|
|
newmsg[SIZEOF(newmsg)-1] = '\0';
|
|
strcpy(newmsg, "Client: ");
|
|
cmi_peer_info(lnk, &newmsg[strlen(newmsg)], SIZEOF(newmsg)-strlen(newmsg)-1);
|
|
if (strlen(newmsg) && strlen(newmsg) < (strlen(msg) + 3))
|
|
{
|
|
strcat(newmsg, " - ");
|
|
strcat(newmsg, msg);
|
|
}
|
|
gtcm_gnp_pktdmp(fp, lnk, sta, buf, len, newmsg);
|
|
}
|
|
else
|
|
gtcm_gnp_pktdmp(fp, lnk, sta, buf, len, msg);
|
|
}
|
|
|
|
void gtcm_gnp_pktdmp(FILE *fp, struct CLB *lnk, int sta, unsigned char *buf, size_t len, char *msg)
|
|
{
|
|
|
|
char *op;
|
|
unsigned char *chr;
|
|
int count = (int)(len);
|
|
int j;
|
|
int offset = 0;
|
|
time_t ctim;
|
|
struct tm *ltime;
|
|
static char *digs = "0123456789ABCDEF";
|
|
unsigned nibble;
|
|
char linebuf[32 + 1 + 16 + 1];
|
|
|
|
switch (sta)
|
|
{
|
|
case CM_CLB_WRITE:
|
|
op = "write";
|
|
break;
|
|
case CM_CLB_WRITE_URG:
|
|
op = "writeurg";
|
|
break;
|
|
case CM_CLB_READ_URG:
|
|
op = "readurg";
|
|
break;
|
|
case CM_CLB_READ:
|
|
op = "read";
|
|
break;
|
|
case CM_CLB_DISCONNECT:
|
|
op = "disconnect";
|
|
break;
|
|
default:
|
|
op = "*unknown*";
|
|
break;
|
|
}
|
|
chr = buf;
|
|
ctim = time(NULL);
|
|
ltime = localtime(&ctim);
|
|
FPRINTF(fp, "%04d%02d%02d%02d%02d%02d (%s) %s length %d\n",
|
|
ltime->tm_year+1900, ltime->tm_mon + 1, ltime->tm_mday,
|
|
ltime->tm_hour,ltime->tm_min, ltime->tm_sec, op, msg, count);
|
|
|
|
while (count >= 16) {
|
|
linebuf[32] = ' ';
|
|
for (j = 0; j < 16;j++)
|
|
{
|
|
nibble = (chr[j] >> 4) & 0x0f;
|
|
linebuf[j + j] = digs[nibble];
|
|
nibble = chr[j] & 0x0f;
|
|
linebuf[j + j + 1] = digs[nibble];
|
|
linebuf[j + 32 + 1] = ISPRINT_ASCII(chr[j])? chr[j]: '.';
|
|
}
|
|
linebuf[32 + 1 + 16] = '\0';
|
|
FPRINTF(fp, "%.8X %s\n", offset, linebuf);
|
|
count -= 16;
|
|
offset += 16;
|
|
chr += 16;
|
|
}
|
|
if (count)
|
|
{
|
|
/* remainder on last line */
|
|
linebuf[32] = ' ';
|
|
for (j = 0; j < count;j++)
|
|
{
|
|
nibble = (chr[j] >> 4) & 0x0f;
|
|
linebuf[j + j] = digs[nibble];
|
|
nibble = chr[j] & 0x0f;
|
|
linebuf[j +j +1] = digs[nibble];
|
|
linebuf[j + 32 + 1] = ISPRINT_ASCII(chr[j])? chr[j]: '.';
|
|
}
|
|
memset(&linebuf[count + count], ' ' , 2 * (16 - count));
|
|
memset(&linebuf[32 + 1 + count], ' ', 16 - count);
|
|
linebuf[32 + 1 + 16] = '\0';
|
|
FPRINTF(fp, "%.8X %s\n", offset, linebuf);
|
|
}
|
|
fflush(fp);
|
|
}
|