21 #ifndef __RELIABILITY_LAYER_H
22 #define __RELIABILITY_LAYER_H
48 #if USE_SLIDING_WINDOW_CONGESTION_CONTROL!=1
50 #define INCLUDE_TIMESTAMP_WITH_DATAGRAMS 1
53 #define INCLUDE_TIMESTAMP_WITH_DATAGRAMS 0
57 #define NUMBER_OF_ORDERED_STREAMS 32 // 2^5
59 #define RESEND_TREE_ORDER 32
64 class PluginInterface2;
75 #if PREALLOCATE_LARGE_MESSAGES==1
79 unsigned int splitPacketsArrived;
93 void Reset(
const char *file,
unsigned int line);
133 void Reset(
bool resetVariables,
int MTUSize,
bool _useSecurity );
183 unsigned bitsPerSecondLimit,
215 #if INCLUDE_TIMESTAMP_WITH_DATAGRAMS==1
248 bool IsSendThrottled(
int MTUSize );
251 void UpdateWindowFromPacketloss(
CCTimeType time );
257 BitSize_t GetMaxMessageHeaderLengthBits(
void );
261 void GetSHA1(
unsigned char *
const buffer,
unsigned int nbytes,
char code[
SHA1_LENGTH ] );
264 bool CheckSHA1(
char code[
SHA1_LENGTH ],
unsigned char *
const buffer,
unsigned int nbytes );
300 void InsertPacketIntoResendList(
InternalPacket *internalPacket,
CCTimeType time,
bool firstResend,
bool modifyUnacknowledgedBytes );
303 void FreeMemory(
bool freeAllImmediately );
306 void FreeThreadSafeMemory(
void );
309 void InitializeVariables(
void );
312 bool IsExpiredTime(
unsigned int input,
CCTimeType currentTime)
const;
315 void UpdateNextActionTime(
void);
325 unsigned int GetResendListDataSize(
void)
const;
328 void UpdateThreadedMemory(
void);
330 void CalculateHistogramAckSize(
void);
336 int splitMessageProgressInterval;
339 struct MessageNumberNode
342 MessageNumberNode *next;
344 struct DatagramHistoryNode
346 DatagramHistoryNode() {}
347 DatagramHistoryNode(MessageNumberNode *_head,
CCTimeType ts
349 head(_head), timeSent(ts)
351 MessageNumberNode *head;
360 struct UnreliableWithAckReceiptNode
362 UnreliableWithAckReceiptNode() {}
364 datagramNumber(_datagramNumber), sendReceiptSerial(_sendReceiptSerial), nextActionTime(_nextActionTime)
376 MessageNumberNode* AddSubsequentToDatagramHistory(MessageNumberNode *messageNumberNode,
DatagramSequenceNumberType messageNumber);
382 InternalPacket *resendLinkedListHead;
383 InternalPacket *unreliableLinkedListHead;
384 void RemoveFromUnreliableLinkedList(InternalPacket *internalPacket);
385 void AddToUnreliableLinkedList(InternalPacket *internalPacket);
408 void InitHeapWeights(
void);
420 bool deadConnection, cheater;
426 RakNetStatistics statistics;
478 bool resetReceivedPackets;
482 #if INCLUDE_TIMESTAMP_WITH_DATAGRAMS==1
487 unsigned char ackPingIndex;
495 bool bandwidthExceededStatistic;
499 long long throughputCapCountdown;
501 unsigned receivePacketCount;
511 unsigned short remotePortRakNetWasStartedOn_PS3;
512 unsigned int extraSocketOptions;
526 #if USE_SLIDING_WINDOW_CONGESTION_CONTROL==1
529 SLNet::CCRakNetUDT congestionManager;
535 bool ResendBufferOverflow(
void)
const;
536 void ValidateResendList(
void)
const;
537 void ResetPacketsAndDatagrams(
void);
538 void PushPacket(
CCTimeType time, InternalPacket *internalPacket,
bool isReliable);
539 void PushDatagram(
void);
540 bool TagMostRecentPushAsSecondOfPacketPair(
void);
541 void ClearPacketsAndDatagrams(
void);
542 void MoveToListHead(InternalPacket *internalPacket);
543 void RemoveFromList(InternalPacket *internalPacket,
bool modifyUnacknowledgedBytes);
544 void AddToListTail(InternalPacket *internalPacket,
bool modifyUnacknowledgedBytes);
545 void PopListHead(
bool modifyUnacknowledgedBytes);
546 bool IsResendQueueEmpty(
void)
const;
548 void SendACKs(RakNetSocket2 *s, SystemAddress &systemAddress,
CCTimeType time, RakNetRandom *rnr, BitStream &updateBitStream);
558 double totalUserDataBytesAcked;
566 int countdownToNextPacketPair;
567 InternalPacket* AllocateFromInternalPacketPool(
void);
568 void ReleaseToInternalPacketPool(InternalPacket *ip);
572 bool remoteSystemNeedsBAndAS;
574 unsigned int GetMaxDatagramSizeExcludingMessageHeaderBytes(
void);
575 BitSize_t GetMaxDatagramSizeExcludingMessageHeaderBits(
void);
578 void AllocInternalPacketData(InternalPacket *internalPacket, InternalPacketRefCountedData **refCounter,
unsigned char *externallyAllocatedPtr,
unsigned char *ourOffset);
580 void AllocInternalPacketData(InternalPacket *internalPacket,
unsigned char *externallyAllocatedPtr);
582 void AllocInternalPacketData(InternalPacket *internalPacket,
unsigned int numBytes,
bool allowStack,
const char *file,
unsigned int line);
583 void FreeInternalPacketData(InternalPacket *internalPacket,
const char *file,
unsigned int line);
589 #if LIBCAT_SECURITY==1
591 cat::AuthenticatedEncryption* GetAuthenticatedEncryption(
void) {
return &auth_enc; }
594 cat::AuthenticatedEncryption auth_enc;
596 #endif // LIBCAT_SECURITY