forked from wolfSSL/wolfssl
change sniffer decode data to pointer to pointer
This commit is contained in:
@ -2915,7 +2915,8 @@ static int HaveMoreInput(SnifferSession* session, const byte** sslFrame,
|
|||||||
/* Process Message(s) from sslFrame */
|
/* Process Message(s) from sslFrame */
|
||||||
/* return Number of bytes on success, 0 for no data yet, and -1 on error */
|
/* return Number of bytes on success, 0 for no data yet, and -1 on error */
|
||||||
static int ProcessMessage(const byte* sslFrame, SnifferSession* session,
|
static int ProcessMessage(const byte* sslFrame, SnifferSession* session,
|
||||||
int sslBytes, byte* data, const byte* end,char* error)
|
int sslBytes, byte** data, const byte* end,
|
||||||
|
char* error)
|
||||||
{
|
{
|
||||||
const byte* sslBegin = sslFrame;
|
const byte* sslBegin = sslFrame;
|
||||||
const byte* recordEnd; /* end of record indicator */
|
const byte* recordEnd; /* end of record indicator */
|
||||||
@ -3041,8 +3042,14 @@ doPart:
|
|||||||
ret = ssl->buffers.clearOutputBuffer.length;
|
ret = ssl->buffers.clearOutputBuffer.length;
|
||||||
TraceGotData(ret);
|
TraceGotData(ret);
|
||||||
if (ret) { /* may be blank message */
|
if (ret) { /* may be blank message */
|
||||||
XMEMCPY(&data[decoded],
|
*data = realloc(*data, decoded + ret);
|
||||||
ssl->buffers.clearOutputBuffer.buffer, ret);
|
if (*data == NULL) {
|
||||||
|
SetError(MEMORY_STR, error, session,
|
||||||
|
FATAL_ERROR_STATE);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
XMEMCPY(*data + decoded,
|
||||||
|
ssl->buffers.clearOutputBuffer.buffer, ret);
|
||||||
TraceAddedData(ret, decoded);
|
TraceAddedData(ret, decoded);
|
||||||
decoded += ret;
|
decoded += ret;
|
||||||
ssl->buffers.clearOutputBuffer.length = 0;
|
ssl->buffers.clearOutputBuffer.length = 0;
|
||||||
@ -3144,7 +3151,7 @@ static int RemoveFatalSession(IpInfo* ipInfo, TcpInfo* tcpInfo,
|
|||||||
|
|
||||||
/* Passes in an IP/TCP packet for decoding (ethernet/localhost frame) removed */
|
/* Passes in an IP/TCP packet for decoding (ethernet/localhost frame) removed */
|
||||||
/* returns Number of bytes on success, 0 for no data yet, and -1 on error */
|
/* returns Number of bytes on success, 0 for no data yet, and -1 on error */
|
||||||
int ssl_DecodePacket(const byte* packet, int length, byte* data, char* error)
|
int ssl_DecodePacket(const byte* packet, int length, byte** data, char* error)
|
||||||
{
|
{
|
||||||
TcpInfo tcpInfo;
|
TcpInfo tcpInfo;
|
||||||
IpInfo ipInfo;
|
IpInfo ipInfo;
|
||||||
|
@ -296,7 +296,7 @@ int main(int argc, char** argv)
|
|||||||
packetNumber++;
|
packetNumber++;
|
||||||
if (packet) {
|
if (packet) {
|
||||||
|
|
||||||
byte data[65535+16384]; /* may have a partial 16k record cached */
|
byte* data = NULL;
|
||||||
|
|
||||||
if (header.caplen > 40) { /* min ip(20) + min tcp(20) */
|
if (header.caplen > 40) { /* min ip(20) + min tcp(20) */
|
||||||
packet += frame;
|
packet += frame;
|
||||||
@ -305,7 +305,7 @@ int main(int argc, char** argv)
|
|||||||
else
|
else
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ret = ssl_DecodePacket(packet, header.caplen, data, err);
|
ret = ssl_DecodePacket(packet, header.caplen, &data, err);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
printf("ssl_Decode ret = %d, %s\n", ret, err);
|
printf("ssl_Decode ret = %d, %s\n", ret, err);
|
||||||
hadBadPacket = 1;
|
hadBadPacket = 1;
|
||||||
@ -313,6 +313,8 @@ int main(int argc, char** argv)
|
|||||||
if (ret > 0) {
|
if (ret > 0) {
|
||||||
data[ret] = 0;
|
data[ret] = 0;
|
||||||
printf("SSL App Data(%d:%d):%s\n", packetNumber, ret, data);
|
printf("SSL App Data(%d:%d):%s\n", packetNumber, ret, data);
|
||||||
|
free(data);
|
||||||
|
data = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (saveFile)
|
else if (saveFile)
|
||||||
|
@ -56,7 +56,7 @@ SSL_SNIFFER_API int ssl_SetNamedPrivateKey(const char* name,
|
|||||||
|
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
SSL_SNIFFER_API int ssl_DecodePacket(const unsigned char* packet, int length,
|
SSL_SNIFFER_API int ssl_DecodePacket(const unsigned char* packet, int length,
|
||||||
unsigned char* data, char* error);
|
unsigned char** data, char* error);
|
||||||
|
|
||||||
WOLFSSL_API
|
WOLFSSL_API
|
||||||
SSL_SNIFFER_API int ssl_Trace(const char* traceFile, char* error);
|
SSL_SNIFFER_API int ssl_Trace(const char* traceFile, char* error);
|
||||||
|
Reference in New Issue
Block a user