|
|
/*++
Copyright (C) Microsoft Corporation, 2001
Module Name:
HttpRTS.hxx
Abstract:
HTTP2 RTS packets support functions.
Author:
KamenM 09-07-01 Created
Revision History:
--*/
#if _MSC_VER >= 1200
#pragma once
#endif
#ifndef __HTTPRTS_HXX__
#define __HTTPRTS_HXX__
const int BaseRTSSizeAndPadding = FIELD_OFFSET(rpcconn_tunnel_settings, Cmd) + ConstPadN(FIELD_OFFSET(rpcconn_tunnel_settings, Cmd), 4); // 4 because it goes on the wire
const int HTTPSendContextSize = sizeof(HTTP2SendContext); const int HTTPSendContextSizeAndPadding = SIZE_OF_OBJECT_AND_PADDING(HTTP2SendContext); const int BaseRTSCommandSize = FIELD_OFFSET(TunnelSettingsCommand, u);
extern const int ClientAddressSizes[];
inline HTTP2SendContext *GetSendContextFromRTSPacket ( IN rpcconn_tunnel_settings *Packet ) { ASSERT(Packet->common.PTYPE == rpc_rts); return (HTTP2SendContext *)((BYTE *)Packet - HTTPSendContextSizeAndPadding); }
inline rpcconn_tunnel_settings *GetRTSPacketFromSendContext ( IN HTTP2SendContext *SendContext ) { return (rpcconn_tunnel_settings *)((BYTE *)SendContext + HTTPSendContextSizeAndPadding); }
const rpcconn_common RTSTemplate = { OSF_RPC_V20_VERS, OSF_RPC_V20_VERS_MINOR, rpc_rts, PFC_FIRST_FRAG | PFC_LAST_FRAG, { NDR_LOCAL_CHAR_DREP | NDR_LOCAL_INT_DREP, NDR_LOCAL_FP_DREP, 0, 0 }, 0, 0, 0 };
inline void InitializeSendContextAndBaseRTS ( IN HTTP2SendContext *SendContext, IN ULONG ExtraBytes ) { rpcconn_tunnel_settings *RTS = GetRTSPacketFromSendContext(SendContext);
#if DBG
SendContext->ListEntryUsed = FALSE; #endif
SendContext->maxWriteBuffer = BaseRTSSizeAndPadding + ExtraBytes; SendContext->pWriteBuffer = (BUFFER)RTS; SendContext->TrafficType = http2ttRTS; SendContext->u.SyncEvent = NULL; SendContext->Flags = 0; SendContext->UserData = 0;
RpcpMemoryCopy(RTS, &RTSTemplate, sizeof(rpcconn_common)); RTS->common.frag_length = BaseRTSSizeAndPadding + ExtraBytes; RTS->Flags = 0; #if DBG
RTS->NumberOfSettingCommands = 0xFFFF; #endif
}
inline HTTP2SendContext *AllocateAndInitializeRTSPacket ( IN ULONG ExtraBytes ) { ULONG MemorySize; HTTP2SendContext *SendContext;
MemorySize = HTTPSendContextSizeAndPadding + BaseRTSSizeAndPadding + ExtraBytes // extra space for the commands
;
SendContext = (HTTP2SendContext *)RpcAllocateBuffer(MemorySize); if (SendContext) { InitializeSendContextAndBaseRTS(SendContext, ExtraBytes); }
return SendContext; }
#if DBG
inline void VerifyValidSendContext ( IN HTTP2SendContext *SendContext ) { ASSERT((SendContext->TrafficType == http2ttRTS) || (SendContext->TrafficType == http2ttData) || (SendContext->TrafficType == http2ttRaw)); } #else // DBG
inline void VerifyValidSendContext ( IN HTTP2SendContext *SendContext ) { } #endif // DBG
inline void FreeRTSPacket ( HTTP2SendContext *SendContext ) { VerifyValidSendContext(SendContext); RpcFreeBuffer(SendContext); }
inline BOOL IsRTSPacket ( IN BYTE *Packet ) { return (((rpcconn_common *)Packet)->PTYPE == rpc_rts); }
inline void FreeSendContextAndPossiblyData ( IN HTTP2SendContext *SendContext ) { if (SendContext->pWriteBuffer == (BYTE *)SendContext + HTTPSendContextSizeAndPadding) RpcFreeBuffer(SendContext); else { RpcFreeBuffer(SendContext->pWriteBuffer); RpcFreeBuffer(SendContext); } }
inline HTTP2SendContext *AllocateAndInitializeContextFromPacket ( IN BYTE *Packet, IN ULONG PacketLength ) { HTTP2SendContext *SendContext;
SendContext = (HTTP2SendContext *)RpcAllocateBuffer(HTTPSendContextSize); if (SendContext) { #if DBG
SendContext->ListEntryUsed = FALSE; #endif
SendContext->maxWriteBuffer = PacketLength; SendContext->pWriteBuffer = (BUFFER)Packet; if (IsRTSPacket(Packet)) SendContext->TrafficType = http2ttRTS; else SendContext->TrafficType = http2ttData; SendContext->u.SyncEvent = NULL; SendContext->Flags = 0; SendContext->UserData = 0; } return SendContext; }
inline TunnelSettingsCommand *SkipCommand ( IN TunnelSettingsCommand *CurrentCommandPtr, IN int CurrentCommand ) { return (TunnelSettingsCommand *) ((BYTE *)CurrentCommandPtr + BaseRTSCommandSize + SIZE_OF_RTS_CMD_AND_PADDING(CurrentCommand)); }
inline void CopyClientAddress ( IN ChannelSettingClientAddress *TargetClientAddress, IN ChannelSettingClientAddress *SourceClientAddress ) { TargetClientAddress->AddressType = SourceClientAddress->AddressType;
if (SourceClientAddress->AddressType == catIPv4) { RpcpCopyIPv4Address((SOCKADDR_IN *)SourceClientAddress->u.IPv4Address, (SOCKADDR_IN *)TargetClientAddress->u.IPv4Address); } else { RpcpCopyIPv6Address((SOCKADDR_IN6 *)SourceClientAddress->u.IPv4Address, (SOCKADDR_IN6 *)TargetClientAddress->u.IPv4Address); } }
BYTE *ValidateRTSPacketCommon ( IN BYTE *Packet, IN ULONG PacketLength );
RPC_STATUS CheckPacketForForwarding ( IN BYTE *Packet, IN ULONG PacketLength, IN ForwardDestinations CurrentLocation );
// N.B. To be called only on packets coming
// from a trusted source (i.e. we know the Flags
// field will be there). If it is not trusted,
// use UntrustedIsPingPacket
inline BOOL TrustedIsPingPacket ( IN BYTE *Packet ) { rpcconn_tunnel_settings *RTS;
RTS = (rpcconn_tunnel_settings *)Packet; return RTS->Flags & RTS_FLAG_PING; }
BOOL UntrustedIsPingPacket ( IN BYTE *Packet, IN ULONG PacketLength );
BOOL IsOtherCmdPacket ( IN BYTE *Packet, IN ULONG PacketLength );
BOOL IsEchoPacket ( IN BYTE *Packet, IN ULONG PacketLength );
HTTP2SendContext *AllocateAndInitializePingPacket ( void );
HTTP2SendContext *AllocateAndInitializePingPacketWithSize ( IN ULONG TotalPacketSize );
RPC_STATUS ParseAndFreePingPacket ( IN BYTE *Packet, IN ULONG PacketLength );
ULONG GetD1_A1TotalLength ( void );
HTTP2SendContext *AllocateAndInitializeEmptyRTS ( void );
RPC_STATUS ParseAndFreeEmptyRTS ( IN BYTE *Packet, IN ULONG PacketLength );
RPC_STATUS ParseEmptyRTS ( IN BYTE *Packet, IN ULONG PacketLength );
HTTP2SendContext *AllocateAndInitializeEmptyRTSWithDestination ( IN ForwardDestinations Destination );
RPC_STATUS ParseEmptyRTSWithDestination ( IN BYTE *Packet, IN ULONG PacketLength, IN ForwardDestinations ExpectedDestination );
RPC_STATUS ParseAndFreeEmptyRTSWithDestination ( IN BYTE *Packet, IN ULONG PacketLength, IN ForwardDestinations ExpectedDestination );
inline BOOL IsEmptyRTS ( IN BYTE *Packet, IN ULONG PacketLength ) { RPC_STATUS RpcStatus;
RpcStatus = ParseEmptyRTS(Packet, PacketLength );
return (RpcStatus == RPC_S_OK); }
inline BOOL IsEmptyRTSWithDestination ( IN BYTE *Packet, IN ULONG PacketLength, IN ForwardDestinations ExpectedDestination ) { RPC_STATUS RpcStatus;
RpcStatus = ParseEmptyRTSWithDestination(Packet, PacketLength, ExpectedDestination );
return (RpcStatus == RPC_S_OK); }
HTTP2SendContext *AllocateAndInitializeD1_A1 ( IN ULONG ProtocolVersion, IN HTTP2Cookie *ConnectionCookie, IN HTTP2Cookie *ChannelCookie, IN ULONG ClientReceiveWindow );
RPC_STATUS ParseAndFreeD1_A1 ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *ProtocolVersion, OUT HTTP2Cookie *ConnectionCookie, OUT HTTP2Cookie *ChannelCookie, OUT ULONG *ClientReceiveWindow );
HTTP2SendContext *AllocateAndInitializeD1_A2 ( IN ULONG ProtocolVersion, IN HTTP2Cookie *ConnectionCookie, IN HTTP2Cookie *ChannelCookie, IN ULONG ChannelLifetime, IN ULONG ProxyReceiveWindow );
RPC_STATUS ParseD1_A2 ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *ProtocolVersion, OUT HTTP2Cookie *ConnectionCookie, OUT HTTP2Cookie *ChannelCookie, OUT ULONG *ChannelLifetime, OUT ULONG *ProxyReceiveWindow );
HTTP2SendContext *AllocateAndInitializeD1_B1 ( IN ULONG ProtocolVersion, IN HTTP2Cookie *ConnectionCookie, IN HTTP2Cookie *ChannelCookie, IN ULONG ChannelLifetime, IN ULONG ClientKeepAliveInterval, IN HTTP2Cookie *AssociationGroupId );
RPC_STATUS ParseAndFreeD1_B1 ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *ProtocolVersion, OUT HTTP2Cookie *ConnectionCookie, OUT HTTP2Cookie *ChannelCookie, OUT ULONG *ChannelLifetime, OUT HTTP2Cookie *AssociationGroupId, OUT ULONG *ClientKeepAliveInterval );
HTTP2SendContext *AllocateAndInitializeD1_B2 ( IN ULONG ProtocolVersion, IN HTTP2Cookie *ConnectionCookie, IN HTTP2Cookie *ChannelCookie, IN ULONG ReceiveWindowSize, IN ULONG ConnectionTimeout, IN HTTP2Cookie *AssociationGroupId, IN ChannelSettingClientAddress *ClientAddress );
RPC_STATUS ParseD1_B2 ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *ProtocolVersion, OUT HTTP2Cookie *ConnectionCookie, OUT HTTP2Cookie *ChannelCookie, OUT ULONG *ReceiveWindowSize, OUT ULONG *ConnectionTimeout, OUT HTTP2Cookie *AssociationGroupId, OUT ChannelSettingClientAddress *ClientAddress );
typedef enum tagHTTP2FirstServerPacketType { http2fsptD1_A2 = 0, http2fsptD1_B2, http2fsptD2_A2, http2fsptD4_A4 } HTTP2FirstServerPacketType;
RPC_STATUS GetFirstServerPacketType ( IN BYTE *Packet, IN ULONG PacketLength, OUT HTTP2FirstServerPacketType *PacketType );
typedef enum tagHTTP2ClientOpenedPacketType { http2coptD2_A4 = 0, http2coptD3_A4, http2coptD4_A2, // (same as D5/A2 btw)
http2coptD4_A6, http2coptD5_A6, http2coptD4_A10, http2coptD5_B3 } HTTP2ClientOpenedPacketType;
RPC_STATUS GetClientOpenedPacketType ( IN BYTE *Packet, IN ULONG PacketLength, OUT HTTP2ClientOpenedPacketType *PacketType );
typedef enum tagHTTP2ServerOpenedPacketType { http2soptD2_A6orD3_A2 = 0, http2soptD2_B1, http2soptD4_A8, http2soptD5_A8, http2soptD4_A8orD5_A8, http2soptD2_A6, http2soptD3_A2 } HTTP2ServerOpenedPacketType;
RPC_STATUS GetServerOpenedPacketType ( IN BYTE *Packet, IN ULONG PacketLength, OUT HTTP2ServerOpenedPacketType *PacketType );
typedef enum tagHTTP2OtherCmdPacketType { http2ocptKeepAliveChange = 0 } HTTP2OtherCmdPacketType;
RPC_STATUS GetOtherCmdPacketType ( IN BYTE *Packet, IN ULONG PacketLength, OUT HTTP2OtherCmdPacketType *PacketType );
typedef enum tagHTTP2ServerOutChannelOtherCmdPacketType { http2sococptFlowControl = 0, http2sococptPingTrafficSentNotify } HTTP2ServerOutChannelOtherCmdPacketType;
RPC_STATUS GetServerOutChannelOtherCmdPacketType ( IN BYTE *Packet, IN ULONG PacketLength, OUT HTTP2ServerOutChannelOtherCmdPacketType *PacketType );
HTTP2SendContext *AllocateAndInitializeResponseHeader ( void );
HTTP2SendContext *AllocateAndInitializeD1_A3 ( IN ULONG ProxyConnectionTimeout );
RPC_STATUS ParseAndFreeD1_A3 ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *ProxyConnectionTimeout );
HTTP2SendContext *AllocateAndInitializeD1_B3 ( IN ULONG ReceiveWindowSize, IN ULONG UpdatedProtocolVersion );
RPC_STATUS ParseAndFreeD1_B3 ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *ReceiveWindowSize, OUT ULONG *UpdatedProtocolVersion );
HTTP2SendContext *AllocateAndInitializeD1_C1 ( IN ULONG UpdatedProtocolVersion, IN ULONG InProxyReceiveWindowSize, IN ULONG InProxyConnectionTimeout );
RPC_STATUS ParseD1_C1 ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *UpdatedProtocolVersion, OUT ULONG *InProxyReceiveWindowSize, OUT ULONG *InProxyConnectionTimeout );
RPC_STATUS ParseAndFreeD1_C2 ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *UpdatedProtocolVersion, OUT ULONG *InProxyReceiveWindowSize, OUT ULONG *InProxyConnectionTimeout );
HTTP2SendContext *AllocateAndInitializeD2_A1 ( IN ULONG ProtocolVersion, IN HTTP2Cookie *ConnectionCookie, IN HTTP2Cookie *OldChannelCookie, IN HTTP2Cookie *InChannelCookie );
HTTP2SendContext *AllocateAndInitializeD2_A1 ( IN ULONG ProtocolVersion, IN HTTP2Cookie *ConnectionCookie, IN HTTP2Cookie *OldChannelCookie, IN HTTP2Cookie *NewChannelCookie );
RPC_STATUS ParseAndFreeD2_A1 ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *ProtocolVersion, OUT HTTP2Cookie *ConnectionCookie, OUT HTTP2Cookie *OldChannelCookie, OUT HTTP2Cookie *NewChannelCookie );
inline HTTP2SendContext *AllocateAndInitializeD3_A1 ( IN ULONG ProtocolVersion, IN HTTP2Cookie *ConnectionCookie, IN HTTP2Cookie *OldChannelCookie, IN HTTP2Cookie *NewChannelCookie ) { return AllocateAndInitializeD2_A1 ( ProtocolVersion, ConnectionCookie, OldChannelCookie, NewChannelCookie ); }
inline RPC_STATUS ParseAndFreeD3_A1 ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *ProtocolVersion, OUT HTTP2Cookie *ConnectionCookie, OUT HTTP2Cookie *OldChannelCookie, OUT HTTP2Cookie *NewChannelCookie ) { return ParseAndFreeD2_A1 ( Packet, PacketLength, ProtocolVersion, ConnectionCookie, OldChannelCookie, NewChannelCookie ); }
HTTP2SendContext *AllocateAndInitializeD2_A2 ( IN ULONG ProtocolVersion, IN HTTP2Cookie *ConnectionCookie, IN HTTP2Cookie *OldChannelCookie, IN HTTP2Cookie *NewChannelCookie, IN ULONG ReceiveWindowSize, IN ULONG ConnectionTimeout );
RPC_STATUS ParseD2_A2 ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *ProtocolVersion, OUT HTTP2Cookie *ConnectionCookie, OUT HTTP2Cookie *OldChannelCookie, OUT HTTP2Cookie *NewChannelCookie, OUT ULONG *ReceiveWindowSize, OUT ULONG *ConnectionTimeout );
HTTP2SendContext *AllocateAndInitializeD2_A3 ( IN ForwardDestinations Destination, IN ULONG ProtocolVersion, IN ULONG ReceiveWindowSize, IN ULONG ConnectionTimeout );
BOOL IsD2_A3Packet ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *ProtocolVersion );
RPC_STATUS ParseAndFreeD2_A4 ( IN BYTE *Packet, IN ULONG PacketLength, IN ForwardDestinations ExpectedDestination, OUT ULONG *ProtocolVersion, OUT ULONG *ReceiveWindowSize, OUT ULONG *ConnectionTimeout );
HTTP2SendContext *AllocateAndInitializeD2_A5 ( IN HTTP2Cookie *NewChannelCookie );
RPC_STATUS ParseD2_A5 ( IN BYTE *Packet, IN ULONG PacketLength, OUT HTTP2Cookie *NewChannelCookie );
RPC_STATUS ParseAndFreeD2_A6 ( IN BYTE *Packet, IN ULONG PacketLength, OUT HTTP2Cookie *NewChannelCookie );
HTTP2SendContext *AllocateAndInitializeD2_B2 ( IN ULONG ServerReceiveWindow );
RPC_STATUS ParseAndFreeD2_B2 ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *ServerReceiveWindow );
inline HTTP2SendContext *AllocateAndInitializeD3_A2 ( IN HTTP2Cookie *NewChannelCookie ) { // D3/A2 is same as D2/A5 and D2/A6
return AllocateAndInitializeD2_A5 (NewChannelCookie); }
inline RPC_STATUS ParseAndFreeD3_A2 ( IN BYTE *Packet, IN ULONG PacketLength, OUT HTTP2Cookie *NewChannelCookie ) { // D3/A2 is same as D2/A5 and D2/A6
return ParseAndFreeD2_A6 (Packet, PacketLength, NewChannelCookie ); }
inline BOOL IsD2_A4OrD3_A4 ( IN BYTE *Packet, IN ULONG PacketLength ) { // D3/A4 is an empty RTS with destination for the client
return (IsEmptyRTSWithDestination (Packet, PacketLength, fdClient ) == FALSE); }
inline RPC_STATUS ParseAndFreeD3_A4 ( IN BYTE *Packet, IN ULONG PacketLength ) { // D3/A4 is an empty RTS packet with destination
return ParseAndFreeEmptyRTSWithDestination (Packet, PacketLength, fdClient ); }
inline HTTP2SendContext *AllocateAndInitializeD3_A5 ( IN HTTP2Cookie *NewChannelCookie ) { // D3/A5 is same as D2/A5 and D2/A6
return AllocateAndInitializeD2_A5 (NewChannelCookie); }
inline RPC_STATUS ParseAndFreeD3_A5 ( IN BYTE *Packet, IN ULONG PacketLength, OUT HTTP2Cookie *NewChannelCookie ) { // D3/A5 is same as D2/A5 and D2/A6
return ParseAndFreeD2_A6 (Packet, PacketLength, NewChannelCookie ); }
inline HTTP2SendContext *AllocateAndInitializeD4_A1 ( void ) { HTTP2SendContext *SendContext;
SendContext = AllocateAndInitializeEmptyRTSWithDestination (fdClient); if (SendContext) { GetRTSPacketFromSendContext(SendContext)->Flags = RTS_FLAG_RECYCLE_CHANNEL; }
return SendContext; }
RPC_STATUS ParseAndFreeD4_A2 ( IN BYTE *Packet, IN ULONG PacketLength );
ULONG GetD4_A3TotalLength ( void );
ULONG GetD4_A11TotalLength ( void );
HTTP2SendContext *AllocateAndInitializeD4_A3 ( IN ULONG ProtocolVersion, IN HTTP2Cookie *ConnectionCookie, IN HTTP2Cookie *OldChannelCookie, IN HTTP2Cookie *NewChannelCookie, IN ULONG ClientReceiveWindow );
RPC_STATUS ParseAndFreeD4_A3 ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *ProtocolVersion, OUT HTTP2Cookie *ConnectionCookie, OUT HTTP2Cookie *OldChannelCookie, OUT HTTP2Cookie *NewChannelCookie, OUT ULONG *ClientReceiveWindow );
RPC_STATUS ParseD4_A3 ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *ProtocolVersion, OUT HTTP2Cookie *ConnectionCookie, OUT HTTP2Cookie *OldChannelCookie, OUT HTTP2Cookie *NewChannelCookie, OUT ULONG *ClientReceiveWindow );
HTTP2SendContext *AllocateAndInitializeD4_A4 ( IN ULONG ProtocolVersion, IN HTTP2Cookie *ConnectionCookie, IN HTTP2Cookie *OldChannelCookie, IN HTTP2Cookie *NewChannelCookie, IN ULONG ChannelLifetime, IN ULONG ProxyReceiveWindow, IN ULONG ProxyConnectionTimeout );
RPC_STATUS ParseD4_A4 ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *ProtocolVersion, OUT HTTP2Cookie *ConnectionCookie, OUT HTTP2Cookie *OldChannelCookie, OUT HTTP2Cookie *NewChannelCookie, OUT ULONG *ChannelLifetime, OUT ULONG *ProxyReceiveWindow, OUT ULONG *ProxyConnectionTimeout );
inline HTTP2SendContext *AllocateAndInitializeD5_A4 ( IN HTTP2Cookie *NewChannelCookie ) { // D5/A4 is same as D3/A5
return AllocateAndInitializeD3_A5 (NewChannelCookie); }
inline RPC_STATUS ParseAndFreeD5_A4 ( IN BYTE *Packet, IN ULONG PacketLength, OUT HTTP2Cookie *NewChannelCookie ) { // D5/A4 is same as D3/A5
return ParseAndFreeD3_A5 (Packet, PacketLength, NewChannelCookie ); }
HTTP2SendContext *AllocateAndInitializeD4_A5 ( IN ForwardDestinations Destination, IN ULONG ProtocolVersion, IN ULONG ConnectionTimeout );
RPC_STATUS ParseAndFreeD4_A6 ( IN BYTE *Packet, IN ULONG PacketLength, IN ForwardDestinations ExpectedDestination, OUT ULONG *ProtocolVersion, OUT ULONG *ConnectionTimeout );
HTTP2SendContext *AllocateAndInitializeD4_A7 ( IN ForwardDestinations Destination, IN HTTP2Cookie *NewChannelCookie, IN ULONG ProtocolVersion );
RPC_STATUS ParseAndFreeD4_A8 ( IN BYTE *Packet, IN ULONG PacketLength, IN ForwardDestinations ExpectedDestination, OUT HTTP2Cookie *NewChannelCookie );
BOOL IsNewD4_A7Packet ( IN BYTE *Packet, IN ULONG PacketLength, IN ForwardDestinations ExpectedDestination, OUT ULONG *ProtocolVersion );
void ConvertNewD4_A7ToD4_A8 ( IN OUT BYTE *Packet, IN OUT ULONG *PacketLength );
HTTP2SendContext *AllocateAndInitializeD4_A9 ( void );
RPC_STATUS ParseD4_A9 ( IN BYTE *Packet, IN ULONG PacketLength );
RPC_STATUS ParseAndFreeD4_A9 ( IN BYTE *Packet, IN ULONG PacketLength );
inline HTTP2SendContext *AllocateAndInitializeD4_A10 ( void ) { return AllocateAndInitializeD4_A9(); }
inline RPC_STATUS ParseD4_A10 ( IN BYTE *Packet, IN ULONG PacketLength ) { return ParseD4_A9 (Packet, PacketLength); }
inline RPC_STATUS ParseAndFreeD4_A10 ( IN BYTE *Packet, IN ULONG PacketLength ) { return ParseAndFreeD4_A9 (Packet, PacketLength); }
inline BOOL IsD4_A10 ( IN BYTE *Packet, IN ULONG PacketLength ) { return (ParseD4_A10(Packet, PacketLength) == RPC_S_OK); }
inline RPC_STATUS ParseAndFreeD4_A11 ( IN BYTE *Packet, IN ULONG PacketLength ) { // same as D4/A10
return ParseAndFreeD4_A10 (Packet, PacketLength); }
HTTP2SendContext *AllocateAndInitializeD5_A5 ( IN ForwardDestinations Destination );
RPC_STATUS ParseD5_A6 ( IN BYTE *Packet, IN ULONG PacketLength, IN ForwardDestinations ExpectedDestination );
RPC_STATUS ParseAndFreeD5_A6 ( IN BYTE *Packet, IN ULONG PacketLength, IN ForwardDestinations ExpectedDestination );
inline BOOL IsD5_A6 ( IN BYTE *Packet, IN ULONG PacketLength, IN ForwardDestinations ExpectedDestination ) { return (ParseD5_A6(Packet, PacketLength, ExpectedDestination) == RPC_S_OK); }
inline RPC_STATUS ParseAndFreeD5_A8 ( IN BYTE *Packet, IN ULONG PacketLength, IN ForwardDestinations ExpectedDestination, OUT HTTP2Cookie *NewChannelCookie ) { return ParseAndFreeD4_A8 (Packet, PacketLength, ExpectedDestination, NewChannelCookie ); }
HTTP2SendContext *AllocateAndInitializeD5_B1orB2 ( IN BOOL IsAckOrNak );
RPC_STATUS ParseAndFreeD5_B1orB2 ( IN BYTE *Packet, IN ULONG PacketLength, OUT BOOL *IsAckOrNak );
inline HTTP2SendContext *AllocateAndInitializeD5_B3 ( void ) { HTTP2SendContext *SendContext; SendContext = AllocateAndInitializeD5_B1orB2(TRUE); if (SendContext) GetRTSPacketFromSendContext(SendContext)->Flags |= RTS_FLAG_EOF;
return SendContext; }
RPC_STATUS ParseAndFreeD5_B3 ( IN BYTE *Packet, IN ULONG PacketLength );
HTTP2SendContext *AllocateAndInitializeKeepAliveChangePacket ( IN ULONG NewKeepAliveInterval );
RPC_STATUS ParseAndFreeKeepAliveChangePacket ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *NewKeepAliveInterval );
HTTP2SendContext *AllocateAndInitializeFlowControlAckPacket ( IN ULONG BytesReceivedForAck, IN ULONG WindowForAck, IN HTTP2Cookie *CookieForChannel );
HTTP2SendContext *AllocateAndInitializeFlowControlAckPacketWithDestination ( IN ForwardDestinations Destination, IN ULONG BytesReceivedForAck, IN ULONG WindowForAck, IN HTTP2Cookie *CookieForChannel );
RPC_STATUS ParseAndFreeFlowControlAckPacket ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *BytesReceivedForAck, OUT ULONG *WindowForAck, OUT HTTP2Cookie *CookieForChannel );
RPC_STATUS ParseAndFreeFlowControlAckPacketWithDestination ( IN BYTE *Packet, IN ULONG PacketLength, IN ForwardDestinations ExpectedDestination, OUT ULONG *BytesReceivedForAck, OUT ULONG *WindowForAck, OUT HTTP2Cookie *CookieForChannel );
RPC_STATUS ParseFlowControlAckPacketWithDestination ( IN BYTE *Packet, IN ULONG PacketLength, IN ForwardDestinations ExpectedDestination, OUT ULONG *BytesReceivedForAck, OUT ULONG *WindowForAck, OUT HTTP2Cookie *CookieForChannel );
HTTP2SendContext *AllocateAndInitializePingTrafficSentNotifyPacket ( IN ULONG PingTrafficSentBytes );
RPC_STATUS ParseAndFreePingTrafficSentNotifyPacket ( IN BYTE *Packet, IN ULONG PacketLength, OUT ULONG *PingTrafficSentBytes );
#endif // __HTTPRTS_HXX__
|