Browse Subversion Repository
Diff of /branches/ssh_chacha20poly1305/ttssh2/ttxssh/ttxssh.c
Parent Directory
| Revision Log
| Patch
| 980 |
} |
} |
| 981 |
} |
} |
| 982 |
|
|
| 983 |
|
static void format_line_hexdump(char *buf, int buflen, int addr, int *bytes, int byte_cnt) |
| 984 |
|
{ |
| 985 |
|
int i, c; |
| 986 |
|
char tmp[128]; |
| 987 |
|
|
| 988 |
|
buf[0] = 0; |
| 989 |
|
|
| 990 |
|
/* 先頭のアドレス表示 */ |
| 991 |
|
_snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "%08X : ", addr); |
| 992 |
|
strncat_s(buf, buflen, tmp, _TRUNCATE); |
| 993 |
|
|
| 994 |
|
/* バイナリ表示(4バイトごとに空白を挿入)*/ |
| 995 |
|
for (i = 0; i < byte_cnt; i++) { |
| 996 |
|
if (i > 0 && i % 4 == 0) { |
| 997 |
|
strncat_s(buf, buflen, " ", _TRUNCATE); |
| 998 |
|
} |
| 999 |
|
|
| 1000 |
|
_snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "%02X", bytes[i]); |
| 1001 |
|
strncat_s(buf, buflen, tmp, _TRUNCATE); |
| 1002 |
|
} |
| 1003 |
|
|
| 1004 |
|
/* ASCII表示部分までの空白を補う */ |
| 1005 |
|
_snprintf_s(tmp, sizeof(tmp), _TRUNCATE, " %*s%*s", (16 - byte_cnt) * 2 + 1, " ", (16 - byte_cnt + 3) / 4, " "); |
| 1006 |
|
strncat_s(buf, buflen, tmp, _TRUNCATE); |
| 1007 |
|
|
| 1008 |
|
/* ASCII表示 */ |
| 1009 |
|
for (i = 0; i < byte_cnt; i++) { |
| 1010 |
|
c = bytes[i]; |
| 1011 |
|
if (isprint(c)) { |
| 1012 |
|
_snprintf_s(tmp, sizeof(tmp), _TRUNCATE, "%c", c); |
| 1013 |
|
strncat_s(buf, buflen, tmp, _TRUNCATE); |
| 1014 |
|
} |
| 1015 |
|
else { |
| 1016 |
|
strncat_s(buf, buflen, ".", _TRUNCATE); |
| 1017 |
|
} |
| 1018 |
|
} |
| 1019 |
|
|
| 1020 |
|
//strncat_s(buf, buflen, "\n", _TRUNCATE); |
| 1021 |
|
} |
| 1022 |
|
|
| 1023 |
|
void logprintf_hexdump(PTInstVar pvar, int level, char *data, int len, char *fmt, ...) |
| 1024 |
|
{ |
| 1025 |
|
char buff[4096]; |
| 1026 |
|
va_list params; |
| 1027 |
|
int c, addr; |
| 1028 |
|
int bytes[16], *ptr; |
| 1029 |
|
int byte_cnt; |
| 1030 |
|
int i; |
| 1031 |
|
|
| 1032 |
|
if (level <= pvar->session_settings.LogLevel) { |
| 1033 |
|
va_start(params, fmt); |
| 1034 |
|
vsnprintf_s(buff, sizeof(buff), _TRUNCATE, fmt, params); |
| 1035 |
|
va_end(params); |
| 1036 |
|
|
| 1037 |
|
notify_verbose_message(pvar, buff, level); |
| 1038 |
|
|
| 1039 |
|
addr = 0; |
| 1040 |
|
byte_cnt = 0; |
| 1041 |
|
ptr = bytes; |
| 1042 |
|
for (i = 0; i < len; i++) { |
| 1043 |
|
c = data[i]; |
| 1044 |
|
*ptr++ = c & 0xff; |
| 1045 |
|
byte_cnt++; |
| 1046 |
|
|
| 1047 |
|
if (byte_cnt == 16) { |
| 1048 |
|
format_line_hexdump(buff, sizeof(buff), addr, bytes, byte_cnt); |
| 1049 |
|
notify_verbose_message(pvar, buff, level); |
| 1050 |
|
|
| 1051 |
|
addr += 16; |
| 1052 |
|
byte_cnt = 0; |
| 1053 |
|
ptr = bytes; |
| 1054 |
|
} |
| 1055 |
|
} |
| 1056 |
|
|
| 1057 |
|
if (byte_cnt > 0) { |
| 1058 |
|
format_line_hexdump(buff, sizeof(buff), addr, bytes, byte_cnt); |
| 1059 |
|
notify_verbose_message(pvar, buff, level); |
| 1060 |
|
} |
| 1061 |
|
} |
| 1062 |
|
} |
| 1063 |
|
|
| 1064 |
static void PASCAL FAR TTXOpenTCP(TTXSockHooks FAR * hooks) |
static void PASCAL FAR TTXOpenTCP(TTXSockHooks FAR * hooks) |
| 1065 |
{ |
{ |
| 1066 |
if (pvar->settings.Enabled) { |
if (pvar->settings.Enabled) { |
|
|
Legend:
| Removed from v.6286 |
|
| changed lines |
| |
Added in v.6302 |
|
|
| |