FreeRDP/winpr/libwinpr/utils/wlog/PacketMessage.h

123 lines
2.8 KiB
C

/**
* WinPR: Windows Portable Runtime
* WinPR Logger
*
* Copyright 2013 Marc-Andre Moreau <marcandre.moreau@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef WINPR_WLOG_PACKET_MESSAGE_PRIVATE_H
#define WINPR_WLOG_PACKET_MESSAGE_PRIVATE_H
#include <winpr/wlog.h>
#include "wlog/wlog.h"
#define PCAP_MAGIC_NUMBER 0xA1B2C3D4
struct _wPcapHeader
{
UINT32 magic_number; /* magic number */
UINT16 version_major; /* major version number */
UINT16 version_minor; /* minor version number */
INT32 thiszone; /* GMT to local correction */
UINT32 sigfigs; /* accuracy of timestamps */
UINT32 snaplen; /* max length of captured packets, in octets */
UINT32 network; /* data link type */
};
typedef struct _wPcapHeader wPcapHeader;
struct _wPcapRecordHeader
{
UINT32 ts_sec; /* timestamp seconds */
UINT32 ts_usec; /* timestamp microseconds */
UINT32 incl_len; /* number of octets of packet saved in file */
UINT32 orig_len; /* actual length of packet */
};
typedef struct _wPcapRecordHeader wPcapRecordHeader;
typedef struct _wPcapRecord wPcapRecord;
struct _wPcapRecord
{
wPcapRecordHeader header;
void* data;
UINT32 length;
wPcapRecord* next;
};
struct _wPcap
{
FILE* fp;
char* name;
BOOL write;
int file_size;
int record_count;
wPcapHeader header;
wPcapRecord* head;
wPcapRecord* tail;
wPcapRecord* record;
};
typedef struct _wPcap wPcap;
wPcap* Pcap_Open(char* name, BOOL write);
void Pcap_Close(wPcap* pcap);
void Pcap_Flush(wPcap* pcap);
struct _wEthernetHeader
{
BYTE Destination[6];
BYTE Source[6];
UINT16 Type;
};
typedef struct _wEthernetHeader wEthernetHeader;
struct _wIPv4Header
{
BYTE Version;
BYTE InternetHeaderLength;
BYTE TypeOfService;
UINT16 TotalLength;
UINT16 Identification;
BYTE InternetProtocolFlags;
UINT16 FragmentOffset;
BYTE TimeToLive;
BYTE Protocol;
UINT16 HeaderChecksum;
UINT32 SourceAddress;
UINT32 DestinationAddress;
};
typedef struct _wIPv4Header wIPv4Header;
struct _wTcpHeader
{
UINT16 SourcePort;
UINT16 DestinationPort;
UINT32 SequenceNumber;
UINT32 AcknowledgementNumber;
BYTE Offset;
BYTE Reserved;
BYTE TcpFlags;
UINT16 Window;
UINT16 Checksum;
UINT16 UrgentPointer;
};
typedef struct _wTcpHeader wTcpHeader;
int WLog_PacketMessage_Write(wPcap* pcap, void* data, DWORD length, DWORD flags);
#endif /* WINPR_WLOG_PACKET_MESSAGE_PRIVATE_H */