diff --git a/src/lib/enet/enet.pp b/src/lib/enet/enet.pp
index bfc7befdaf353f6e26342e529d045b4f42c6da96..055f5bb6378eea249cc6db24a160ea9c64c6d182 100644 (file)
--- a/src/lib/enet/enet.pp
+++ b/src/lib/enet/enet.pp
-{$mode objfpc}
-unit enet;
-
-
-{
- ENet - Reliable UDP networking library
-
- FreePascal DLL header: enet.pp
- Copyright (c) 2015 Dmitry D. Chernov aka Black Doomer
-
- Original file: enet.h
- Copyright (c) 2002-2014 Lee Salzman
-
- Version 1 for 1.3.12: 25.02.2015
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-}
-
-interface
-
-uses
- enetplatform, enettypes, enetprotocol, enetlist, enetcallbacks;
-
-const
- ENET_VERSION_MAJOR = 1;
- ENET_VERSION_MINOR = 3;
- ENET_VERSION_PATCH = 12;
-
- ENET_HOST_ANY = 0;
- ENET_HOST_BROADCAST : LongWord = $FFFFFFFF;
- ENET_PORT_ANY = 0;
-
- ENET_BUFFER_MAXIMUM = 1 + 2 * ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS;
-
- ENET_HOST_RECEIVE_BUFFER_SIZE = 256 * 1024;
- ENET_HOST_SEND_BUFFER_SIZE = 256 * 1024;
- ENET_HOST_BANDWIDTH_THROTTLE_INTERVAL = 1000;
- ENET_HOST_DEFAULT_MTU = 1400;
- ENET_HOST_DEFAULT_MAXIMUM_PACKET_SIZE = 32 * 1024 * 1024;
- ENET_HOST_DEFAULT_MAXIMUM_WAITING_DATA = 32 * 1024 * 1024;
-
- ENET_PEER_DEFAULT_ROUND_TRIP_TIME = 500;
- ENET_PEER_DEFAULT_PACKET_THROTTLE = 32;
- ENET_PEER_PACKET_THROTTLE_SCALE = 32;
- ENET_PEER_PACKET_THROTTLE_COUNTER = 7;
- ENET_PEER_PACKET_THROTTLE_ACCELERATION = 2;
- ENET_PEER_PACKET_THROTTLE_DECELERATION = 2;
- ENET_PEER_PACKET_THROTTLE_INTERVAL = 5000;
- ENET_PEER_PACKET_LOSS_SCALE = 1 shl 16;
- ENET_PEER_PACKET_LOSS_INTERVAL = 10000;
- ENET_PEER_WINDOW_SIZE_SCALE = 64 * 1024;
- ENET_PEER_TIMEOUT_LIMIT = 32;
- ENET_PEER_TIMEOUT_MINIMUM = 5000;
- ENET_PEER_TIMEOUT_MAXIMUM = 30000;
- ENET_PEER_PING_INTERVAL = 500;
- ENET_PEER_UNSEQUENCED_WINDOWS = 64;
- ENET_PEER_UNSEQUENCED_WINDOW_SIZE = 1024;
- ENET_PEER_FREE_UNSEQUENCED_WINDOWS = 32;
- ENET_PEER_RELIABLE_WINDOWS = 16;
- ENET_PEER_RELIABLE_WINDOW_SIZE = $1000;
- ENET_PEER_FREE_RELIABLE_WINDOWS = 8;
-
-type
- //enums
- ENetSocketType = ( ENET_SOCKET_TYPE_STREAM = 1,
- ENET_SOCKET_TYPE_DATAGRAM = 2 );
- ENetSocketWait = ( ENET_SOCKET_WAIT_NONE = 0,
- ENET_SOCKET_WAIT_SEND = 1,
- ENET_SOCKET_WAIT_RECEIVE = 2,
- ENET_SOCKET_WAIT_INTERRUPT = 4 );
- ENetSocketOption = ( ENET_SOCKOPT_NONBLOCK = 1,
- ENET_SOCKOPT_BROADCAST = 2,
- ENET_SOCKOPT_RCVBUF = 3,
- ENET_SOCKOPT_SNDBUF = 4,
- ENET_SOCKOPT_REUSEADDR = 5,
- ENET_SOCKOPT_RCVTIMEO = 6,
- ENET_SOCKOPT_SNDTIMEO = 7,
- ENET_SOCKOPT_ERROR = 8,
- ENET_SOCKOPT_NODELAY = 9 );
- ENetSocketShutdown = ( ENET_SOCKET_SHUTDOWN_READ,
- ENET_SOCKET_SHUTDOWN_WRITE,
- ENET_SOCKET_SHUTDOWN_READ_WRITE );
-
-Const
- ENET_PACKET_FLAG_RELIABLE = 1;
- ENET_PACKET_FLAG_UNSEQUENCED = 2;
- ENET_PACKET_FLAG_NO_ALLOCATE = 4;
- ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT = 8;
- ENET_PACKET_FLAG_SENT = 256;
-
-Type
- ENetPeerState = ( ENET_PEER_STATE_DISCONNECTED,
- ENET_PEER_STATE_CONNECTING,
- ENET_PEER_STATE_ACKNOWLEDGING_CONNECT,
- ENET_PEER_STATE_CONNECTION_PENDING,
- ENET_PEER_STATE_CONNECTION_SUCCEEDED,
- ENET_PEER_STATE_CONNECTED,
- ENET_PEER_STATE_DISCONNECT_LATER,
- ENET_PEER_STATE_DISCONNECTING,
- ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT,
- ENET_PEER_STATE_ZOMBIE );
-
- ENetEventType = ( ENET_EVENT_TYPE_NONE,
- ENET_EVENT_TYPE_CONNECT,
- ENET_EVENT_TYPE_DISCONNECT,
- ENET_EVENT_TYPE_RECEIVE );
-
- //definitions
- ENetVersion = enet_uint32;
-
- //structs pointers
- pENetAddress = ^ENetAddress;
- pENetPacket = ^ENetPacket;
- pENetAcknowledgement = ^ENetAcknowledgement;
- pENetOutgoingCommand = ^ENetOutgoingCommand;
- pENetIncomingCommand = ^ENetIncomingCommand;
- pENetChannel = ^ENetChannel;
- pENetPeer = ^ENetPeer;
- pENetCompressor = ^ENetCompressor;
- pENetHost = ^ENetHost;
- pENetEvent = ^ENetEvent;
-
- //callbacks
- ENetPacketFreeCallback = procedure( packet: pENetPacket ); cdecl;
- ENetChecksumCallback = function( const buffers: pENetBuffer; bufferCount: enet_size_t ): enet_uint32; cdecl;
- ENetInterceptCallback = function( host: pENetHost; event: pENetEvent ): enet_int; cdecl;
-
-{$PACKRECORDS C}
-
- //structs
- ENetAddress = record
- host : enet_uint32;
- port : enet_uint16;
- end;
- ENetPacket = record
- referenceCount : enet_size_t;
- flags : enet_uint32;
- data : penet_uint8;
- dataLength : enet_size_t;
- freeCallback : ENetPacketFreeCallback;
- userData : Pointer;
- end;
- ENetAcknowledgement = record
- acknowledgementList : ENetListNode;
- sentTime : enet_uint32;
- command : TENetProtocol;
- end;
- ENetOutgoingCommand = record
- outgoingCommandList : ENetListNode;
- reliableSequenceNumber : enet_uint16;
- unreliableSequenceNumber : enet_uint16;
- sentTime : enet_uint32;
- roundTripTimeout : enet_uint32;
- roundTripTimeoutLimit : enet_uint32;
- fragmentOffset : enet_uint32;
- fragmentLength : enet_uint16;
- sendAttempts : enet_uint16;
- command : TENetProtocol;
- packet : pENetPacket;
- end;
- ENetIncomingCommand = record
- incomingCommandList : ENetListNode;
- reliableSequenceNumber : enet_uint16;
- unreliableSequenceNumber : enet_uint16;
- command : TENetProtocol;
- fragmentCount : enet_uint32;
- fragmentsRemaining : enet_uint32;
- fragments : penet_uint32;
- packet : pENetPacket;
- end;
- ENetChannel = record
- outgoingReliableSequenceNumber : enet_uint16;
- outgoingUnreliableSequenceNumber : enet_uint16;
- usedReliableWindows : enet_uint16;
- reliableWindows : array[ 0..ENET_PEER_RELIABLE_WINDOWS-1 ] of enet_uint16;
- incomingReliableSequenceNumber : enet_uint16;
- incomingUnreliableSequenceNumber : enet_uint16;
- incomingReliableCommands : TENetList;
- incomingUnreliableCommands : TENetList;
- end;
- ENetPeer = record
- dispatchList : ENetListNode;
- host : pENetHost;
- outgoingPeerID : enet_uint16;
- incomingPeerID : enet_uint16;
- connectID : enet_uint32;
- outgoingSessionID : enet_uint8;
- incomingSessionID : enet_uint8;
- address : ENetAddress;
- data : Pointer;
- state : ENetPeerState;
- channels : pENetChannel;
- channelCount : enet_size_t;
- incomingBandwidth : enet_uint32;
- outgoingBandwidth : enet_uint32;
- incomingBandwidthThrottleEpoch : enet_uint32;
- outgoingBandwidthThrottleEpoch : enet_uint32;
- incomingDataTotal : enet_uint32;
- outgoingDataTotal : enet_uint32;
- lastSendTime : enet_uint32;
- lastReceiveTime : enet_uint32;
- nextTimeout : enet_uint32;
- earliestTimeout : enet_uint32;
- packetLossEpoch : enet_uint32;
- packetsSent : enet_uint32;
- packetsLost : enet_uint32;
- packetLoss : enet_uint32;
- packetLossVariance : enet_uint32;
- packetThrottle : enet_uint32;
- packetThrottleLimit : enet_uint32;
- packetThrottleCounter : enet_uint32;
- packetThrottleEpoch : enet_uint32;
- packetThrottleAcceleration : enet_uint32;
- packetThrottleDeceleration : enet_uint32;
- packetThrottleInterval : enet_uint32;
- pingInterval : enet_uint32;
- timeoutLimit : enet_uint32;
- timeoutMinimum : enet_uint32;
- timeoutMaximum : enet_uint32;
- lastRoundTripTime : enet_uint32;
- lowestRoundTripTime : enet_uint32;
- lastRoundTripTimeVariance : enet_uint32;
- highestRoundTripTimeVariance : enet_uint32;
- roundTripTime : enet_uint32;
- roundTripTimeVariance : enet_uint32;
- mtu : enet_uint32;
- windowSize : enet_uint32;
- reliableDataInTransit : enet_uint32;
- outgoingReliableSequenceNumber : enet_uint16;
- acknowledgements : TENetList;
- sentReliableCommands : TENetList;
- sentUnreliableCommands : TENetList;
- outgoingReliableCommands : TENetList;
- outgoingUnreliableCommands : TENetList;
- dispatchedCommands : TENetList;
- needsDispatch : enet_int;
- incomingUnsequencedGroup : enet_uint16;
- outgoingUnsequencedGroup : enet_uint16;
- unsequencedWindow : array[ 0..(ENET_PEER_UNSEQUENCED_WINDOW_SIZE div 32)-1 ] of enet_uint32;
- eventData : enet_uint32;
- totalWaitingData : enet_size_t;
- end;
- ENetCompressor = record
- context : Pointer;
- compress : function( context: Pointer; const inBuffers: pENetBuffer; inBufferCount, inLimit: enet_size_t; outData: penet_uint8; outLimit: enet_size_t ): enet_size_t; cdecl;
- decompress : function( context: Pointer; const inData: penet_uint8; inLimit: enet_size_t; outData: penet_uint8; outLimit: enet_size_t ): enet_size_t; cdecl;
- destroy : procedure( context: Pointer ); cdecl;
- end;
- ENetHost = record
- socket : ENetSocket;
- address : ENetAddress;
- incomingBandwidth : enet_uint32;
- outgoingBandwidth : enet_uint32;
- bandwidthThrottleEpoch : enet_uint32;
- mtu : enet_uint32;
- randomSeed : enet_uint32;
- recalculateBandwidthLimits : enet_int;
- peers : pENetPeer;
- peerCount : enet_size_t;
- channelLimit : enet_size_t;
- serviceTime : enet_uint32;
- dispatchQueue : TENetList;
- continueSending : enet_int;
- packetSize : enet_size_t;
- headerFlags : enet_uint16;
- commands : array[ 0..ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS-1 ] of TENetProtocol;
- commandCount : enet_size_t;
- buffers : array[ 0..ENET_BUFFER_MAXIMUM-1 ] of ENetBuffer;
- bufferCount : enet_size_t;
- checksum : ENetChecksumCallback;
- compressor : ENetCompressor;
- packetData : array[ 0..1, 0..ENET_PROTOCOL_MAXIMUM_MTU-1 ] of enet_uint8;
- receivedAddress : ENetAddress;
- receivedData : penet_uint8;
- receivedDataLength : enet_size_t;
- totalSentData : enet_uint32;
- totalSentPackets : enet_uint32;
- totalReceivedData : enet_uint32;
- totalReceivedPackets : enet_uint32;
- intercept : ENetInterceptCallback;
- connectedPeers : enet_size_t;
- bandwidthLimitedPeers : enet_size_t;
- duplicatePeers : enet_size_t;
- maximumPacketSize : enet_size_t;
- maximumWaitingData : enet_size_t;
- end;
- ENetEvent = record
- kind : ENetEventType; //originally "type", which conflicts
- peer : pENetPeer;
- channelID : enet_uint8;
- data : enet_uint32;
- packet : pENetPacket;
- end;
-
-{$PACKRECORDS DEFAULT}
-
-//inline macros
-function ENET_VERSION_CREATE( const major, minor, patch: LongInt ): ENetVersion; inline;
-function ENET_VERSION_GET_MAJOR( const version: ENetVersion ): LongInt; inline;
-function ENET_VERSION_GET_MINOR( const version: ENetVersion ): LongInt; inline;
-function ENET_VERSION_GET_PATCH( const version: ENetVersion ): LongInt; inline;
-function ENET_VERSION(): ENetVersion; inline;
-
-//external
{$MACRO ON}
-{$DEFINE libraryENet := cdecl; external 'enet'}
-
-function enet_initialize(): enet_int; libraryENet;
-function enet_initialize_with_callbacks( version: ENetVersion; const inits: pENetCallbacks ): enet_int; libraryENet;
-procedure enet_deinitialize(); libraryENet;
-function enet_linked_version(): ENetVersion; libraryENet;
-
-function enet_time_get(): enet_uint32; libraryENet;
-procedure enet_time_set( newTimeBase: enet_uint32 ); libraryENet;
-
-function enet_socket_create( kind: ENetSocketType ): ENetSocket; libraryENet;
-function enet_socket_bind( socket: ENetSocket; const address: pENetAddress ): enet_int; libraryENet;
-function enet_socket_get_address( socket: ENetSocket; address: pENetAddress ): enet_int; libraryENet;
-function enet_socket_listen( socket: ENetSocket; backlog: enet_int ): enet_int; libraryENet;
-function enet_socket_accept( socket: ENetSocket; address: pENetAddress ): ENetSocket; libraryENet;
-function enet_socket_connect( socket: ENetSocket; const address: pENetAddress ): enet_int; libraryENet;
-function enet_socket_send( socket: ENetSocket; const address: pENetAddress; const buffers: pENetBuffer; bufferCount: enet_size_t ): enet_int; libraryENet;
-function enet_socket_receive( socket: ENetSocket; address: pENetAddress; buffers: pENetBuffer; bufferCount: enet_size_t ): enet_int; libraryENet;
-function enet_socket_wait( socket: ENetSocket; condition: penet_uint32; timeout: enet_uint32 ): enet_int; libraryENet;
-function enet_socket_set_option( socket: ENetSocket; option: ENetSocketOption; value: enet_int ): enet_int; libraryENet;
-function enet_socket_get_option( socket: ENetSocket; option: ENetSocketOption; value: penet_int ): enet_int; libraryENet;
-function enet_socket_shutdown( socket: ENetSocket; how: ENetSocketShutdown ): enet_int; libraryENet;
-procedure enet_socket_destroy( socket: ENetSocket ); libraryENet;
-function enet_socketset_select( maxSocket: ENetSocket; readSet: pENetSocketSet; writeSet: pENetSocketSet; timeout: enet_uint32 ): enet_int; libraryENet;
-
-function enet_address_set_host( address: pENetAddress; const hostName: PChar ): enet_int; libraryENet;
-function enet_address_get_host_ip( const address: pENetAddress; hostName: PChar; nameLength: enet_size_t ): enet_int; libraryENet;
-function enet_address_get_host( const address: pENetAddress; hostName: PChar; nameLength: enet_size_t ): enet_int; libraryENet;
-
-function enet_packet_create( const data: Pointer; dataLength: enet_size_t; flags: enet_uint32 ): pENetPacket; libraryENet;
-procedure enet_packet_destroy( packet: pENetPacket ); libraryENet;
-function enet_packet_resize( packet: pENetPacket; dataLength: enet_size_t ): enet_int; libraryENet;
-function enet_crc32( const buffers: pENetBuffer; bufferCount: enet_size_t ): enet_uint32; libraryENet;
-
-function enet_host_create( const address: pENetAddress; peerCount, channelLimit: enet_size_t; incomingBandwidth, outgoingBandwidth: enet_uint32 ): pENetHost; libraryENet;
-procedure enet_host_destroy( host: pENetHost ); libraryENet;
-function enet_host_connect( host: pENetHost; const address: pENetAddress; channelCount: enet_size_t; data: enet_uint32 ): pENetPeer; libraryENet;
-function enet_host_check_events( host: pENetHost; event: pENetEvent ): enet_int; libraryENet;
-function enet_host_service( host: pENetHost; event: pENetEvent; timeout: enet_uint32 ): enet_int; libraryENet;
-procedure enet_host_flush( host: pENetHost ); libraryENet;
-procedure enet_host_widecast( host: pENetHost; channelID: enet_uint8; packet: pENetPacket ); libraryENet name 'enet_host_broadcast'; //renamed due to names conflict
-procedure enet_host_compress( host: pENetHost; const compressor: pENetCompressor ); libraryENet;
-function enet_host_compress_with_range_coder( host: pENetHost ): enet_int; libraryENet;
-procedure enet_host_channel_limit( host: pENetHost; channelLimit: enet_size_t ); libraryENet;
-procedure enet_host_bandwidth_limit( host: pENetHost; incomingBandwidth, outgoingBandwidth: enet_uint32 ); libraryENet;
-
-function enet_peer_send( peer: pENetPeer; channelID: enet_uint8; packet: pENetPacket ): enet_int; libraryENet;
-function enet_peer_receive( peer: pENetPeer; channelID: penet_uint8 ): pENetPacket; libraryENet;
-procedure enet_peer_ping( peer: pENetPeer ); libraryENet;
-procedure enet_peer_ping_frequency( peer: pENetPeer; pingInterval: enet_uint32 ); libraryENet name 'enet_peer_ping_interval'; //renamed due to names conflict
-procedure enet_peer_timeout( peer: pENetPeer; timeoutLimit, timeoutMinimum, timeoutMaximum: enet_uint32 ); libraryENet;
-procedure enet_peer_reset( peer: pENetPeer ); libraryENet;
-procedure enet_peer_disconnect( peer: pENetPeer; data: enet_uint32 ); libraryENet;
-procedure enet_peer_disconnect_now( peer: pENetPeer; data: enet_uint32 ); libraryENet;
-procedure enet_peer_disconnect_later( peer: pENetPeer; data: enet_uint32 ); libraryENet;
-procedure enet_peer_throttle_configure( peer: pENetPeer; interval, acceleration, deceleration: enet_uint32 ); libraryENet;
-
-function enet_range_coder_create(): Pointer; libraryENet;
-procedure enet_range_coder_destroy( context: Pointer ); libraryENet;
-function enet_range_coder_compress( context: Pointer; const inBuffers: pENetBuffer; inBufferCount, inLiit: enet_size_t; outData: penet_uint8; outLimit: enet_size_t ): enet_size_t; libraryENet;
-function enet_range_coder_decompress( context: Pointer; const inData: penet_uint8; inLimit: enet_size_t; outData: penet_uint8; outLimit: enet_size_t ): enet_size_t; libraryENet;
-
-implementation
-
-function ENET_VERSION_CREATE( const major, minor, patch: LongInt ): ENetVersion; inline;
- begin Result := (major shl 16) or (minor shl 8) or patch;
- end;
-
-function ENET_VERSION_GET_MAJOR( const version: ENetVersion ): LongInt; inline;
- begin Result := (version shr 16) and $FF;
- end;
-
-function ENET_VERSION_GET_MINOR( const version: ENetVersion ): LongInt; inline;
- begin Result := (version shr 8) and $FF;
- end;
-
-function ENET_VERSION_GET_PATCH( const version: ENetVersion ): LongInt; inline;
- begin Result := version and $FF;
- end;
-
-function ENET_VERSION(): ENetVersion; inline;
- begin Result := ENET_VERSION_CREATE( ENET_VERSION_MAJOR, ENET_VERSION_MINOR, ENET_VERSION_PATCH );
- end;
-
-end.
-
+{.$DEFINE LIBENET_WINDOZE_STATIC}
+
+{$IFDEF WIN32}
+ {$DEFINE MSWINDOWS}
+{$ENDIF}
+
+{$IFDEF MSWINDOWS}
+ {$IFDEF LIBENET_WINDOZE_STATIC}
+ {$LINKLIB libenet.a}
+ {$LINKLIB libwinmm.a}
+ {$LINKLIB libws2_32.a}
+ {$LINKLIB libkernel32.a}
+ {$LINKLIB libm.a}
+ {$LINKLIB libmingwex.a}
+ {$LINKLIB libmingw32.a}
+ {$LINKLIB libmsvcrt.a}
+ {$LINKLIB libgcc.a}
+ {$DEFINE libraryENet := cdecl; external}
+ {$ENDIF}
+{$ELSE}
+ {$IFDEF DARWIN}
+ {$LINKLIB libenet}
+ {$DEFINE libraryENet := cdecl; external}
+ {$ENDIF}
+{$ENDIF}
+
+
+{$INCLUDE 'ENet-Pascal/enet.pp'}