#ifndef _NU_SERVER_H_ #define _NU_SERVER_H_ #include #include #include #include #include #include #include #include typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; typedef int64_t QWORD; #define SKIPSTRING( str ) ((BYTE*)(str)) + 1 + strlen( (str) ) // Get Network byte order half word #define GETNWORD(addr) (*((BYTE*)(addr)) | 256 * ((BYTE*)(addr))[1] ) #include "nu_defines.h" #define SMB_MAXREQUESTS 16 typedef struct { BYTE netbios_command; BYTE netbios_flags; WORD netbios_size; DWORD Protocol; /* Protocol identifier 0xFF,"SMB" */ BYTE Command; /* Command Code, look below */ BYTE Status[4]; BYTE Flags; WORD Flags2; WORD Pad[6]; /* Ensure 12 bytes len */ WORD TreeID; WORD ProcessID; WORD UserID; WORD MultiplexID; } SMB_HEADER; typedef struct { BYTE WordCount; WORD Buffer[0]; } SMB_PARAMS; typedef struct { WORD ByteCount; BYTE Buffer[0]; } SMB_BYTES; typedef struct { SMB_PARAMS *params; SMB_BYTES *bytes; } SMB_DATA; typedef struct { BYTE WordCount; /* 19 + SetupCount */ BYTE TotalParameterCount [2]; BYTE TotalDataCount [2]; BYTE MaxParameterCount [2]; /* For now we only support packets */ BYTE MaxDataCount [2]; /* with TotalXXCount == MaxXXCount */ BYTE MaxSetupCount; BYTE Reserved; BYTE Flags [2]; BYTE Timeout [4]; BYTE Reserved2 [2]; BYTE ParameterCount [2]; BYTE ParameterOffset [2]; BYTE DataCount [2]; BYTE DataOffset [2]; BYTE SetupCount; BYTE Reserved3; BYTE Setup[0]; } SMB_PARAMS_TRANSACTION; typedef struct { BYTE *params; DWORD paramc; BYTE *data; DWORD datac; } SMB_TRANSACTION_BYTES; typedef struct { BYTE WordCount; /* 14 + SetupCount */ BYTE TotalParameterCount [2]; BYTE TotalDataCount [2]; BYTE MaxParameterCount [2]; BYTE MaxDataCount [2]; BYTE MaxSetupCount; BYTE Reserved; BYTE Flags [2]; BYTE Timeout [4]; BYTE Reserved2 [2]; BYTE ParameterCount [2]; BYTE ParameterOffset [2]; BYTE DataCount [2]; BYTE DataOffset [2]; BYTE SetupCount; BYTE Reserved3; BYTE Setup [0]; } SMB_PARAMS_TRANSACTION2; typedef struct { BYTE cmd; SMB_COMMAND_FLAG flags; SMB_STATUS (*handler)(SMB_HEADER **header, SMB_DATA *data); } SMB_COMMAND_HANDLER; #endif