windows-nt/Source/XPSP1/NT/termsrv/remdsk/rds/as/h/s20.h
2020-09-26 16:20:57 +08:00

193 lines
4.4 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// Share 2.0 Interface
//
#ifndef _H_S20
#define _H_S20
BOOL S20_Init(void);
void S20_Term(void);
//
// We can send to one person or broadcast to everyone listening to the
// app sharing channel. The userID for one person is the mcsID, we get it
// in S20 create/join/respond packets along with name + caps.
//
PS20DATAPACKET S20_AllocDataPkt(UINT streamID, UINT nodeID, UINT len);
void S20_FreeDataPkt(PS20DATAPACKET pPacket);
void S20_SendDataPkt(UINT streamID, UINT nodeID, PS20DATAPACKET pPacket);
//
// API FUNCTION: S20_UTEventProc
//
// DESCRIPTION:
//
// Handles NET_EVENTS
//
// PARAMETERS: standard UT event handler
//
// RETURNS: standard UT event handler
//
BOOL CALLBACK S20_UTEventProc(LPVOID userData, UINT event, UINT_PTR data1, UINT_PTR data2);
//
//
// CONSTANTS
//
//
//
// States
//
typedef enum
{
S20_TERM = 0,
S20_INIT,
S20_ATTACH_PEND,
S20_JOIN_PEND,
S20_NO_SHARE,
S20_SHARE_PEND,
S20_SHARE_STARTING,
S20_IN_SHARE,
S20_NUM_STATES
}
S20_STATE;
#define S20_MAX_QUEUED_CONTROL_PACKETS 20
//
// These pool sizes and latencies control how DC Share T120 flow control
// behaves. They are tuned for performance so you had better understand
// what you are doing if you change them!
//
// For example, can you explain why any setting other than 0 for the medium
// priority will break DC Share? If not then go and read/understand
// amgcflo.c and then look at how DC-Share will interact with it.
//
// To summarize:
//
// We don't control the top priority or medium priority pools because they
// carry non-spoilable data that must therefore flow at a lower bandwidth
// than the transport. In fact, applying back pressure to these streams
// will cause DC-Share to fail in some cases.
//
// Low priority is where flow control really takes effect, since we want
// the pipe to open right up (to 200K per ping) over fast transports but
// to throttle back (to 1K per second possibly!) over slow transports.
//
//
#define S20_LATENCY_TOP_PRIORITY 0
#define S20_LATENCY_HIGH_PRIORITY 0
#define S20_LATENCY_MEDIUM_PRIORITY 0
#define S20_LATENCY_LOW_PRIORITY 7000
#define S20_SIZE_TOP_PRIORITY 0
#define S20_SIZE_HIGH_PRIORITY 0
#define S20_SIZE_MEDIUM_PRIORITY 0
#define S20_SIZE_LOW_PRIORITY 99000
//
//
// MACROS
//
//
#define S20_GET_CREATOR(A) ((TSHR_UINT16)(A & 0xFFFF))
//
//
// TYPEDEFS
//
//
typedef struct tagS20CONTROLPACKETQENTRY
{
UINT what;
TSHR_UINT32 correlator;
UINT who;
UINT priority;
}
S20CONTROLPACKETQENTRY;
typedef S20CONTROLPACKETQENTRY * PS20CONTROLPACKETQENTRY;
//
//
// PROTOTYPES
//
//
BOOL S20CreateOrJoinShare(
UINT what,
UINT callID);
void S20LeaveOrEndShare(void);
UINT S20MakeControlPacket(
UINT what,
UINT correlator,
UINT who,
PS20PACKETHEADER * ppPacket,
LPUINT pLength,
UINT priority);
UINT S20FlushSendOrQueueControlPacket(
UINT what,
UINT correlator,
UINT who,
UINT priority);
UINT S20FlushAndSendControlPacket(
UINT what,
UINT correlator,
UINT who,
UINT priority);
UINT S20SendControlPacket(
PS20PACKETHEADER pPacket,
UINT length,
UINT priority);
UINT S20SendQueuedControlPackets(void);
void S20AttachConfirm(NET_UID userID, NET_RESULT result, UINT callID);
void S20DetachIndication(NET_UID userID, UINT callID);
void S20LeaveIndication(NET_CHANNEL_ID channelID, UINT callID);
void S20JoinConfirm(PNET_JOIN_CNF_EVENT pEvent);
void S20SendIndication(PNET_SEND_IND_EVENT pEvent);
void S20Flow(UINT priority, UINT newBufferSize);
void S20CreateMsg(PS20CREATEPACKET pS20Packet);
void S20JoinMsg(PS20JOINPACKET pS20Packet);
void S20RespondMsg(PS20RESPONDPACKET pS20Packet);
void S20DeleteMsg(PS20DELETEPACKET pS20Packet);
void S20LeaveMsg(PS20LEAVEPACKET pS20Packet);
void S20EndMsg(PS20ENDPACKET pS20Packet);
void S20DataMsg(PS20DATAPACKET pS20Packet);
void S20CollisionMsg(PS20COLLISIONPACKET pS20Packet);
BOOL S20MaybeAddNewParty(MCSID mcsID,
UINT lenCaps,
UINT lenName,
LPBYTE pData);
void S20MaybeIssuePersonDelete(MCSID mcsID);
UINT S20NewCorrelator(void);
NET_PRIORITY S20StreamToS20Priority(UINT streamID);
#endif // _H_S20