libfreerdp-core: started logging packets to pcap file

This commit is contained in:
Marc-André Moreau 2013-10-08 23:43:57 -04:00
parent 684db03578
commit a3f0f4c8dc
7 changed files with 45 additions and 14 deletions

View File

@ -497,6 +497,11 @@ int transport_read(rdpTransport* transport, wStream* s)
}
#endif
if (streamPosition + status >= pduLength)
{
WLog_Packet(transport->log, WLOG_TRACE, Stream_Buffer(s), pduLength, 0);
}
return transport_status;
}
@ -532,6 +537,11 @@ int transport_write(rdpTransport* transport, wStream* s)
}
#endif
if (length > 0)
{
WLog_Packet(transport->log, WLOG_TRACE, Stream_Buffer(s), length, 1);
}
while (length > 0)
{
if (transport->layer == TRANSPORT_LAYER_TLS)
@ -841,10 +851,13 @@ rdpTransport* transport_new(rdpSettings* settings)
transport = (rdpTransport*) malloc(sizeof(rdpTransport));
if (transport != NULL)
if (transport)
{
ZeroMemory(transport, sizeof(rdpTransport));
WLog_Init();
transport->log = WLog_Get("com.freerdp.core.transport");
transport->TcpIn = tcp_new(settings);
transport->settings = settings;
@ -873,9 +886,9 @@ rdpTransport* transport_new(rdpSettings* settings)
void transport_free(rdpTransport* transport)
{
if (transport != NULL)
if (transport)
{
SetEvent(transport->stopEvent);
SetEvent(transport->stopEvent);
if (transport->ReceiveBuffer)
Stream_Release(transport->ReceiveBuffer);

View File

@ -36,6 +36,7 @@ typedef struct rdp_transport rdpTransport;
#include "gateway/tsg.h"
#include <winpr/sspi.h>
#include <winpr/wlog.h>
#include <winpr/synch.h>
#include <winpr/thread.h>
#include <winpr/stream.h>
@ -74,6 +75,7 @@ struct rdp_transport
BOOL async;
HANDLE ReadMutex;
HANDLE WriteMutex;
wLog* log;
};
wStream* transport_send_stream_init(rdpTransport* transport, int size);

View File

@ -1557,10 +1557,7 @@ rdpUpdate* update_new(rdpRdp* rdp)
ZeroMemory(update, sizeof(rdpUpdate));
WLog_Init();
update->log = WLog_Get("com.freerdp.update");
WLog_OpenAppender(update->log);
//WLog_SetLogLevel(update->log, WLOG_DEBUG);
update->log = WLog_Get("com.freerdp.core.update");
update->bitmap_update.count = 64;
update->bitmap_update.rectangles = (BITMAP_DATA*) malloc(sizeof(BITMAP_DATA) * update->bitmap_update.count);

View File

@ -84,6 +84,12 @@ struct _wLogMessage
int ImageWidth;
int ImageHeight;
int ImageBpp;
/* Packet Message */
void* PacketData;
int PacketLength;
DWORD PacketFlags;
};
/**

View File

@ -127,12 +127,13 @@ int WLog_ConsoleAppender_WritePacketMessage(wLog* log, wLogConsoleAppender* appe
if (!appender->PacketMessageContext)
{
FullFileName = WLog_Message_GetOutputFileName(PacketId, "pcap");
FullFileName = WLog_Message_GetOutputFileName(-1, "pcap");
appender->PacketMessageContext = (void*) Pcap_Open(FullFileName, TRUE);
free(FullFileName);
}
WLog_PacketMessage_Write((wPcap*) appender->PacketMessageContext, message->Data, message->Length, 0);
WLog_PacketMessage_Write((wPcap*) appender->PacketMessageContext,
message->PacketData, message->PacketLength, message->PacketFlags);
return PacketId;
}

View File

@ -40,7 +40,11 @@ char* WLog_Message_GetOutputFileName(int id, const char* ext)
FilePath = GetKnownSubPath(KNOWN_PATH_TEMP, "wlog");
FileName = (char*) malloc(256);
sprintf_s(FileName, 256, "%u-%d.%s", (unsigned int) ProcessId, id, ext);
if (id >= 0)
sprintf_s(FileName, 256, "%u-%d.%s", (unsigned int) ProcessId, id, ext);
else
sprintf_s(FileName, 256, "%u.%s", (unsigned int) ProcessId, ext);
FullFileName = GetCombinedPath(FilePath, FileName);

View File

@ -174,6 +174,13 @@ int WLog_PrintMessageVA(wLog* log, wLogMessage* message, va_list args)
status = WLog_Write(log, message);
}
}
else if (message->Type == WLOG_MESSAGE_DATA)
{
message->Data = va_arg(args, void*);
message->Length = va_arg(args, int);
status = WLog_WriteData(log, message);
}
else if (message->Type == WLOG_MESSAGE_IMAGE)
{
message->ImageData = va_arg(args, void*);
@ -183,12 +190,13 @@ int WLog_PrintMessageVA(wLog* log, wLogMessage* message, va_list args)
status = WLog_WriteImage(log, message);
}
else if (message->Type == WLOG_MESSAGE_DATA)
else if (message->Type == WLOG_MESSAGE_PACKET)
{
message->Data = va_arg(args, void*);
message->Length = va_arg(args, int);
message->PacketData = va_arg(args, void*);
message->PacketLength = va_arg(args, int);
message->PacketFlags = va_arg(args, int);
status = WLog_WriteData(log, message);
status = WLog_WritePacket(log, message);
}
return status;