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