Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

337 lines
7.3 KiB

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. //
  4. // Copyright (c) 1996, 1997 Microsoft Corporation
  5. //
  6. //
  7. // Module Name:
  8. // recv.h
  9. //
  10. // Abstract:
  11. //
  12. //
  13. // Author:
  14. //
  15. // P Porzuczek
  16. //
  17. // Environment:
  18. //
  19. // Revision History:
  20. //
  21. //
  22. //////////////////////////////////////////////////////////////////////////////
  23. #ifndef _RECV_H_
  24. #define _RECV_H_
  25. ///////////////////////////////////////////////////////////////////////////////////////
  26. //
  27. // some character values
  28. //
  29. #define FRAME_ESCAPE 0xDB
  30. #define FRAME_END 0xC0
  31. #define TRANS_FRAME_END 0xDC
  32. #define TRANS_FRAME_ESCAPE 0xDD
  33. #define PROTO_ID 0x00
  34. #define PROTO_ID_OLD 0x03
  35. #define NORMAL_COMPRESSED_HEADER 4
  36. #define IP_ID_SIZE 2
  37. #define UDP_CHKSUM_SIZE 2
  38. #define PACKET_COMPRESSED(x) (x & 0x80)
  39. #define IP_STREAM_INDEX(x) (x & 0x7f)
  40. #define NABTSIP_MAX_PACKET 1514
  41. #define NABTSIP_MAX_LOOKAHEAD (NABTSIP_MAX_PACKET - ETHERNET_HEADER_SIZE)
  42. #define NABTSIP_MAX_PAYLOAD (NABTSIP_MAX_LOOKAHEAD + MPEG_CRC_SIZE)
  43. #define MPEG_CRC_SIZE 4
  44. #define ETHERNET_HEADER_SIZE 14
  45. #define ETHERNET_LENGTH_OF_ADDRESS 6
  46. ///////////////////////////////////////////////////////////////////////////////////////
  47. //
  48. //
  49. //
  50. //
  51. // Size of the ethernet address
  52. //
  53. typedef struct _Header802_3
  54. {
  55. UCHAR DestAddress[ETHERNET_LENGTH_OF_ADDRESS];
  56. UCHAR SourceAddress[ETHERNET_LENGTH_OF_ADDRESS];
  57. UCHAR Type[2];
  58. } Header802_3, * PHeader802_3;
  59. ///////////////////////////////////////////////////////////////////////////////////////
  60. //
  61. //
  62. //
  63. #define htons(x) ((((x) >> 8) & 0x00FF) | (((x) << 8) & 0xFF00))
  64. ///////////////////////////////////////////////////////////////////////////////////////
  65. //
  66. //
  67. //
  68. #define NabtsNtoHl(l) \
  69. ( ( ((l) >> 24) & 0x000000FFL ) | \
  70. ( ((l) >> 8) & 0x0000FF00L ) | \
  71. ( ((l) << 8) & 0x00FF0000L ) | \
  72. ( ((l) << 24) & 0xFF000000L ) )
  73. ///////////////////////////////////////////////////////////////////////////////////////
  74. //
  75. //
  76. //
  77. #define NabtsNtoHs(s) \
  78. ( ( ((s) >> 8) & 0x00FF ) | \
  79. ( ((s) << 8) & 0xFF00 ) )
  80. ///////////////////////////////////////////////////////////////////////////////////////
  81. //
  82. // IP Compression States.
  83. //
  84. typedef enum
  85. {
  86. NABTS_CS_UNCOMPRESSED = 0,
  87. NABTS_CS_COMPRESSED,
  88. NABTS_CS_CHKCRC
  89. };
  90. ///////////////////////////////////////////////////////////////////////////////////////
  91. //
  92. //
  93. //
  94. struct _C
  95. {
  96. UCHAR uc[4];
  97. };
  98. ///////////////////////////////////////////////////////////////////////////////////////
  99. //
  100. //
  101. //
  102. struct _L
  103. {
  104. ULONG ul;
  105. };
  106. ///////////////////////////////////////////////////////////////////////////////////////
  107. //
  108. //
  109. //
  110. typedef union
  111. {
  112. struct _C c;
  113. struct _L l;
  114. }CL, *PCL;
  115. ///////////////////////////////////////////////////////////////////////////////////////
  116. //
  117. // NABTSIP Group Range
  118. //
  119. #define NABTSIP_GROUP_ID_RANGE_LOW 0
  120. #define NABTSIP_GROUP_ID_RANGE_HI 4096
  121. ///////////////////////////////////////////////////////////////////////////////////////
  122. //
  123. //
  124. //
  125. //#define NAB_STREAM_LIFE (LONGLONG)1000 * 1000 * 10 * 60 * 30 // 30 Minutes
  126. #define NAB_STREAM_LIFE (LONGLONG)1000 * 1000 * 10 * 60 * 10 // 10 Minutes
  127. #define NAB_STATUS_INTERVAL (LONGLONG)1000 * 1000 * 10 * 60 * 1 // 1 Minutes
  128. #define NAB_STREAM_SIGNATURE ((CSHORT)0xab05)
  129. ///////////////////////////////////////////////////////////////////////////////////////
  130. //
  131. // Frame states.
  132. //
  133. typedef enum
  134. {
  135. NABTS_FS_SYNC,
  136. NABTS_FS_SYNC_PROTO,
  137. NABTS_FS_COMPRESSION,
  138. NABTS_FS_COLLECT,
  139. NABTS_FS_COLLECT_ESCAPE
  140. };
  141. ///////////////////////////////////////////////////////////////////////////////////////
  142. //
  143. // Frame states.
  144. //
  145. typedef struct _AddrIP
  146. {
  147. UCHAR ucHighMSB;
  148. UCHAR ucHighLSB;
  149. UCHAR ucLowMSB;
  150. UCHAR ucLowLSB;
  151. } AddrIP, * PAddrIP;
  152. ///////////////////////////////////////////////////////////////////////////////////////
  153. //
  154. // IP Header
  155. //
  156. typedef struct _HeaderIP
  157. {
  158. UCHAR ucVersHlen;
  159. UCHAR ucServiceType;
  160. UCHAR ucTotalLenHigh;
  161. UCHAR ucTotalLenLow;
  162. UCHAR ucIDHigh;
  163. UCHAR ucIDLow;
  164. UCHAR ucFlags;
  165. UCHAR ucOffsetLow;
  166. UCHAR ucTimeToLive;
  167. UCHAR ucProtocol;
  168. UCHAR ucChecksumHigh;
  169. UCHAR ucChecksumLow;
  170. AddrIP ipaddrSrc;
  171. AddrIP ipaddrDst;
  172. } HeaderIP, * PHeaderIP;
  173. ///////////////////////////////////////////////////////////////////////////////////////
  174. //
  175. //
  176. //
  177. typedef struct _HeaderUDP
  178. {
  179. UCHAR ucSourcePortMSB;
  180. UCHAR ucSourcePortLSB;
  181. UCHAR ucDestPortMSB;
  182. UCHAR ucDestPortLSB;
  183. UCHAR ucMsgLenHigh;
  184. UCHAR ucMsgLenLow;
  185. UCHAR ucChecksumHigh;
  186. UCHAR ucChecksumLow;
  187. } HeaderUDP, *PHeaderUDP;
  188. ///////////////////////////////////////////////////////////////////////////////////////
  189. //
  190. //
  191. //
  192. typedef struct _IP_CACHE {
  193. HeaderIP ipHeader;
  194. HeaderUDP udpHeader;
  195. LARGE_INTEGER liLastUsed;
  196. } NAB_HEADER_CACHE, *PNAB_HEADER_CACHE;
  197. //
  198. // IP Compression State Struct.
  199. //
  200. typedef struct _NAB_IP_COMPRESSION
  201. {
  202. ULONG usCompressionState;
  203. USHORT uscbRequiredSize;
  204. USHORT uscbHeaderOffset;
  205. USHORT usrgCompressedHeader[3];
  206. LARGE_INTEGER liLastUsed;
  207. }NAB_COMPRESSION_STATE, *PNAB_COMPRESSION_STATE;
  208. ///////////////////////////////////////////////////////////////////////////////////////
  209. //
  210. // NabtsIp Stream Context.
  211. //
  212. #define MAX_IP_STREAMS 128
  213. #define MAX_STREAM_PAYLOAD 1600
  214. typedef struct _NAB_STREAM
  215. {
  216. ULONG ulType;
  217. ULONG ulSize;
  218. ULONG ulProtoID;
  219. BOOLEAN fUsed;
  220. ULONG groupID;
  221. PUCHAR pszBuffer;
  222. ULONG ulcbSize;
  223. ULONG ulOffset;
  224. ULONG ulFrameState;
  225. LIST_ENTRY Linkage;
  226. ULONG ulIPStreamIndex;
  227. PHW_STREAM_REQUEST_BLOCK pSrb;
  228. NAB_COMPRESSION_STATE NabCState[MAX_IP_STREAMS];
  229. NAB_HEADER_CACHE NabHeader[MAX_IP_STREAMS];
  230. ULONG ulMpegCrc;
  231. ULONG ulCrcBytesIndex;
  232. ULONG ulLastCrcBytes;
  233. LARGE_INTEGER liLastTimeUsed;
  234. CHAR rgBuf[MAX_STREAM_PAYLOAD];
  235. } NAB_STREAM, *PNAB_STREAM;
  236. ///////////////////////////////////////////////////////////////////////////////////////
  237. //
  238. //
  239. // Prototypes
  240. //
  241. //
  242. VOID
  243. vCheckNabStreamLife (
  244. PSLIP_FILTER pFilter
  245. );
  246. NTSTATUS
  247. ntCreateNabStreamContext(
  248. PSLIP_FILTER pFilter,
  249. ULONG groupID,
  250. PNAB_STREAM *ppNabStream
  251. );
  252. NTSTATUS
  253. ntGetNdisPacketForStream (
  254. PSLIP_FILTER pFilter,
  255. PNAB_STREAM pNabStream
  256. );
  257. VOID
  258. vDestroyNabStreamContext(
  259. PSLIP_FILTER pUser,
  260. PNAB_STREAM pNabStream,
  261. BOOLEAN fRemoveFromList
  262. );
  263. NTSTATUS
  264. ntAllocateNabStreamContext(
  265. PNAB_STREAM *ppNabStream
  266. );
  267. NTSTATUS
  268. ntNabtsRecv(
  269. PSLIP_FILTER pFilter,
  270. PNABTSFEC_BUFFER pNabData
  271. );
  272. VOID
  273. CancelNabStreamSrb (
  274. PSLIP_FILTER pFilter,
  275. PHW_STREAM_REQUEST_BLOCK pSrb
  276. );
  277. VOID
  278. DeleteNabStreamQueue (
  279. PSLIP_FILTER pFilter
  280. );
  281. VOID
  282. MpegCrcUpdate (
  283. ULONG * crc,
  284. UINT uiCount,
  285. UCHAR * pText
  286. );
  287. #endif