change sniffer decode data to pointer to pointer

This commit is contained in:
toddouska
2015-10-12 18:10:24 -07:00
parent 3a0e25637e
commit 8595890c51
3 changed files with 16 additions and 7 deletions

View File

@ -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;

View File

@ -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)

View File

@ -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);