libfreerdp-core: started logging packets to pcap file
authorMarc-André Moreau <marcandre.moreau@gmail.com>
Wed, 9 Oct 2013 03:43:57 +0000 (23:43 -0400)
committerMarc-André Moreau <marcandre.moreau@gmail.com>
Wed, 9 Oct 2013 03:43:57 +0000 (23:43 -0400)
libfreerdp/core/transport.c
libfreerdp/core/transport.h
libfreerdp/core/update.c
winpr/include/winpr/wlog.h
winpr/libwinpr/utils/wlog/ConsoleAppender.c
winpr/libwinpr/utils/wlog/Message.c
winpr/libwinpr/utils/wlog/wlog.c

index e06e928..c734e5f 100644 (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);
index bb573b6..945424b 100644 (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);
index 126439c..14d6bb1 100644 (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);
index 29a9e5a..1fd8b21 100644 (file)
@@ -84,6 +84,12 @@ struct _wLogMessage
        int ImageWidth;
        int ImageHeight;
        int ImageBpp;
+
+       /* Packet Message */
+
+       void* PacketData;
+       int PacketLength;
+       DWORD PacketFlags;
 };
 
 /**
index ec7163c..0b4375a 100644 (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;
 }
index ac7605e..b5c4c11 100644 (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);
 
index aa98d88..c40ca2b 100644 (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;