186 lines
6.7 KiB
C
186 lines
6.7 KiB
C
|
//=============================================================================
|
||
|
// T127 PDU Types
|
||
|
//=============================================================================
|
||
|
|
||
|
typedef enum T127_PDU_TYPES
|
||
|
{
|
||
|
T127_FILE_OFFER = 0x0,
|
||
|
T127_FILE_ACCEPT = 0x8,
|
||
|
T127_FILE_REJECT = 0x10,
|
||
|
T127_FILE_REQUEST = 0x18,
|
||
|
T127_FILE_DENY = 0x20,
|
||
|
T127_FILE_ERROR = 0x28,
|
||
|
T127_FILE_ABORT = 0x30,
|
||
|
T127_FILE_START = 0x38,
|
||
|
T127_FILE_DATA = 0x40,
|
||
|
T127_DIRECTORY_REQUEST = 0x48,
|
||
|
T127_DIRECTORY_RESPONSE = 0x50,
|
||
|
T127_MBFT_PRIVILEGE_REQUEST = 0x58,
|
||
|
T127_MBFT_PRIVILEGE_ASSIGN = 0x60,
|
||
|
T127_MBFT_NONSTANDARD = 0x68,
|
||
|
T127_PRIVATE_CHANNEL_JOIN_INVITE = 0x70,
|
||
|
T127_PRIVATE_CHANNEL_JOIN_RESPONSE = 0x78
|
||
|
} T127_PDUS;
|
||
|
|
||
|
#pragma pack(1)
|
||
|
|
||
|
typedef struct _T_T127_FILE_PDU_HEADER
|
||
|
{
|
||
|
BYTE pduType;
|
||
|
WORD fileHandle; // File size in bytes
|
||
|
} T127_FILE_PDU_HEADER;
|
||
|
|
||
|
typedef struct _T_T127_FILE_DATA_BLOCK_HEADER
|
||
|
{
|
||
|
BYTE EOFFlag;
|
||
|
WORD FileDataSize; // File size in bytes
|
||
|
}T127_FILE_DATA_BLOCK_HEADER;
|
||
|
|
||
|
|
||
|
typedef struct _T_T127_PRIVATE_CHANNEL_INVITE
|
||
|
{
|
||
|
BYTE pduType;
|
||
|
WORD ControlChannel;
|
||
|
WORD DataChannel;
|
||
|
BYTE EncodingMode;
|
||
|
}T127_PRIVATE_CHANNEL_INVITE;
|
||
|
|
||
|
typedef struct _T_T127_PRIVATE_CHANNEL_RESPONSE
|
||
|
{
|
||
|
BYTE pduType;
|
||
|
WORD ControlChannel;
|
||
|
BYTE Response;
|
||
|
}T127_PRIVATE_CHANNEL_RESPONSE;
|
||
|
|
||
|
typedef struct _T_T127_FILE_START_DATA_BLOCK_HEADER
|
||
|
{
|
||
|
BYTE EOFFlag;
|
||
|
WORD CompressionFormat;
|
||
|
WORD FileDataSize; // File size in bytes
|
||
|
}T127_FILE_START_DATA_BLOCK_HEADER;
|
||
|
|
||
|
typedef struct _T_T127_FILE_DATA_HEADER
|
||
|
{
|
||
|
T127_FILE_PDU_HEADER PDUHeader;
|
||
|
T127_FILE_DATA_BLOCK_HEADER DataHeader; // File size in bytes
|
||
|
} T127_FILE_DATA_HEADER;
|
||
|
|
||
|
typedef struct _T_127_FILE_ERROR_HEADER
|
||
|
{
|
||
|
T127_FILE_PDU_HEADER PDUHeader;
|
||
|
BYTE errorCode;
|
||
|
} T127_FILE_ERROR_HEADER;
|
||
|
|
||
|
typedef struct _T_T127_FILE_HEADER
|
||
|
{
|
||
|
DWORD presentFields;
|
||
|
BYTE FileHeader;
|
||
|
} T127_FILE_HEADER;
|
||
|
|
||
|
typedef struct _T_T127_FILE_START_PDU
|
||
|
{
|
||
|
WORD FileHandle;
|
||
|
}T127_FILE_START_PDU;
|
||
|
|
||
|
typedef struct _T_T127_FILE_ABORT_PDU
|
||
|
{
|
||
|
WORD pduType_PresentFields;
|
||
|
WORD dataChannel;
|
||
|
WORD transmitterUserId;
|
||
|
WORD fileHandle;
|
||
|
} T127_FILE_ABORT_PDU;
|
||
|
|
||
|
typedef struct _T_T127_PRIVILEGE_REQUEST_PDU
|
||
|
{
|
||
|
BYTE pduType;
|
||
|
BYTE nPrivileges;
|
||
|
BYTE privileges[3]; // 6/2 privileges.
|
||
|
} T127_PRIVILEGE_REQUEST_PDU;
|
||
|
|
||
|
typedef struct _T_T127_FILE_OFFER_PDU
|
||
|
{
|
||
|
WORD ChannelID;
|
||
|
WORD FileHandle;
|
||
|
WORD RosterInstance;
|
||
|
BYTE AckFlag;
|
||
|
} T127_FILE_OFFER_PDU;
|
||
|
|
||
|
typedef struct _T_FILE_HEADER_INFO
|
||
|
{
|
||
|
BYTE pduType;
|
||
|
PSTR fileName;
|
||
|
LONG fileNameSize;
|
||
|
LONG fileSize;
|
||
|
LONG pduSize;
|
||
|
BYTE nBytesForFileSize;
|
||
|
|
||
|
} FILE_HEADER_INFO;
|
||
|
typedef struct
|
||
|
{
|
||
|
|
||
|
unsigned wASNuser_visible_string_present :1; // 00000000 00000000 00000000 0000000? 0000 0001
|
||
|
unsigned wASNFileHeader_pathname_present :1; // 00000000 00000000 00000000 000000?0 0000 0002
|
||
|
unsigned wASNenvironment_present :1; // 00000000 00000000 00000000 00000?00 0000 0004
|
||
|
unsigned wASNcompression_present :1; // 00000000 00000000 00000000 0000?000 0000 0008
|
||
|
unsigned wASNcharacter_set_present :1; // 00000000 00000000 00000000 000?0000 0000 0010
|
||
|
unsigned wASNrecipient_present :1; // 00000000 00000000 00000000 00?00000 0000 0020
|
||
|
unsigned wASNoperating_system_present :1; // 00000000 00000000 00000000 0?000000 0000 0040
|
||
|
unsigned wASNmachine_present :1; // 00000000 00000000 00000000 ?0000000 0000 0080
|
||
|
unsigned wASNapplication_reference_present :1; // 00000000 00000000 0000000? 00000000 0000 0100
|
||
|
unsigned wASNstructure_present :1; // 00000000 00000000 000000?0 00000000 0000 0200
|
||
|
unsigned wASNprivate_use_present :1; // 00000000 00000000 00000?00 00000000 0000 0400
|
||
|
unsigned :1; // 00000000 00000000 0000X000 00000000 0000 0800
|
||
|
unsigned wASNaccess_control_present :1; // 00000000 00000000 000?0000 00000000 0000 1000
|
||
|
unsigned wASNfuture_filesize_present :1; // 00000000 00000000 00?00000 00000000 0000 2000
|
||
|
unsigned wASNfilesize_present :1; // 00000000 00000000 0?000000 00000000 0000 4000
|
||
|
unsigned :3; // 00000000 000000XX X0000000 00000000 0003 8000
|
||
|
unsigned wASNdate_and_time_of_last_read_access_present :1; // 00000000 00000?00 00000000 00000000 0004 0000
|
||
|
unsigned wASNdate_and_time_of_last_modification_present :1; // 00000000 0000?000 00000000 00000000 0008 0000
|
||
|
unsigned wASNdate_and_time_of_creation_present :1; // 00000000 000?0000 00000000 00000000 0010 0000
|
||
|
unsigned :1; // 00000000 00X00000 00000000 00000000 0020 0000
|
||
|
unsigned wASNcontents_type_present :1; // 00000000 0?000000 00000000 00000000 0040 0000
|
||
|
unsigned wASNpermitted_actions_present :1; // 00000000 ?0000000 00000000 00000000 0080 0000
|
||
|
unsigned wASNfilename_present :1; // 0000000? 00000000 00000000 00000000 0100 0000
|
||
|
unsigned wASNprotocol_version_present :1; // 000000?0 00000000 00000000 00000000 0200 0000
|
||
|
|
||
|
}T127_FILE_OFFER_PRESENT_FIELDS;
|
||
|
|
||
|
#pragma pack()
|
||
|
|
||
|
typedef enum T127_file_header_fields
|
||
|
{
|
||
|
user_visible_string_present = 0x00000001,//0x00010000, //0x00000001
|
||
|
FileHeader_pathname_present = 0x00000002,//0x00020000, //0x00000002
|
||
|
environment_present = 0x00000004,//0x00040000, //0x00000004
|
||
|
compression_present = 0x00000008,//0x00080000, //0x00000008
|
||
|
character_set_present = 0x00000010,//0x00100000, //0x00000010
|
||
|
recipient_present = 0x00000020,//0x00200000, //0x00000020
|
||
|
operating_system_present = 0x00000040,//0x00400000, //0x00000040
|
||
|
machine_present = 0x00000080,//0x00800000, //0x00000080
|
||
|
application_reference_present = 0x00000100,//0x00010000, //0x00000100
|
||
|
structure_present = 0x00000200,//0x00020000, //0x00000200
|
||
|
private_use_present = 0x00000400,//0x00040000, //0x00000400
|
||
|
access_control_present = 0x00001000,//0x00100000, //0x00001000
|
||
|
future_filesize_present = 0x00002000,//0x00200000, //0x00002000
|
||
|
filesize_present = 0x00004000,//0x00400000, //0x00004000
|
||
|
date_and_time_of_last_read_access_present= 0x00040000,//0x00000400, //0x00040000
|
||
|
date_and_time_of_last_modification_present= 0x00080000,//0x00000800, //0x00080000
|
||
|
date_and_time_of_creation_present = 0x00100000,//0x00001000, //0x00100000
|
||
|
contents_type_present = 0x00400000,//0x00004000, //0x00400000
|
||
|
permitted_actions_present = 0x00800000,//0x00000800, //0x00800000
|
||
|
filename_present = 0x01000000,//0x00000001, //0x01000000
|
||
|
protocol_version_present = 0x02000000 //0x00000002 //0x02000000
|
||
|
}T127_FILE_HEADER_FIELDS;
|
||
|
|
||
|
|
||
|
VOID GetFileHeaderSize (FILE_HEADER_INFO* fileHeader);
|
||
|
BYTE GetLengthFieldSize (ULONG length);
|
||
|
VOID SetLengthField(BYTE * pBuff, BYTE sizeOfLength, ULONG lengthOfField);
|
||
|
BYTE* GetFileInfo (LPSTR lpEncodedBuffer, BYTE * lpszFileName, LONG * FileSize, ULONG* FileDateTime );
|
||
|
|
||
|
#define SWAPWORD(a) (WORD)(HIBYTE(LOWORD(a)) | (LOBYTE(LOWORD(a)) << 8))
|
||
|
|
||
|
#define MIN_ASNDynamicChannelID 1001
|
||
|
#define MAX_ASNDynamicChannelID 65535
|
||
|
#define SIZE_OF_DATE_TIME_STRING 14 // yyyymmddhhmmss
|