1 #ifndef VG_STEAM_NETWORKING_H
2 #define VG_STEAM_NETWORKING_H
6 #ifdef VALVE_CALLBACK_PACK_SMALL
13 enum ESteamNetworkingConfigScope
15 k_ESteamNetworkingConfig_Global
= 1,
16 k_ESteamNetworkingConfig_SocketsInterface
= 2,
17 k_ESteamNetworkingConfig_ListenSocket
= 3,
18 k_ESteamNetworkingConfig_Connection
= 4,
19 k_ESteamNetworkingConfigScope__Force32Bit
= 0x7fffffff
21 typedef enum ESteamNetworkingConfigScope ESteamNetworkingConfigScope
;
23 enum ESteamNetworkingConfigDataType
25 k_ESteamNetworkingConfig_Int32
= 1,
26 k_ESteamNetworkingConfig_Int64
= 2,
27 k_ESteamNetworkingConfig_Float
= 3,
28 k_ESteamNetworkingConfig_String
= 4,
29 k_ESteamNetworkingConfig_Ptr
= 5,
31 k_ESteamNetworkingConfigDataType__Force32Bit
= 0x7fffffff
33 typedef enum ESteamNetworkingConfigDataType ESteamNetworkingConfigDataType
;
35 enum ESteamNetworkingConfigValue
37 k_ESteamNetworkingConfig_Invalid
= 0,
38 k_ESteamNetworkingConfig_TimeoutInitial
= 24,
39 k_ESteamNetworkingConfig_TimeoutConnected
= 25,
40 k_ESteamNetworkingConfig_SendBufferSize
= 9,
41 k_ESteamNetworkingConfig_ConnectionUserData
= 40,
42 k_ESteamNetworkingConfig_SendRateMin
= 10,
43 k_ESteamNetworkingConfig_SendRateMax
= 11,
44 k_ESteamNetworkingConfig_NagleTime
= 12,
45 k_ESteamNetworkingConfig_IP_AllowWithoutAuth
= 23,
46 k_ESteamNetworkingConfig_MTU_PacketSize
= 32,
47 k_ESteamNetworkingConfig_MTU_DataSize
= 33,
48 k_ESteamNetworkingConfig_Unencrypted
= 34,
49 k_ESteamNetworkingConfig_SymmetricConnect
= 37,
50 k_ESteamNetworkingConfig_LocalVirtualPort
= 38,
51 k_ESteamNetworkingConfig_DualWifi_Enable
= 39,
52 k_ESteamNetworkingConfig_EnableDiagnosticsUI
= 46,
53 k_ESteamNetworkingConfig_FakePacketLoss_Send
= 2,
54 k_ESteamNetworkingConfig_FakePacketLoss_Recv
= 3,
55 k_ESteamNetworkingConfig_FakePacketLag_Send
= 4,
56 k_ESteamNetworkingConfig_FakePacketLag_Recv
= 5,
57 k_ESteamNetworkingConfig_FakePacketReorder_Send
= 6,
58 k_ESteamNetworkingConfig_FakePacketReorder_Recv
= 7,
59 k_ESteamNetworkingConfig_FakePacketReorder_Time
= 8,
60 k_ESteamNetworkingConfig_FakePacketDup_Send
= 26,
61 k_ESteamNetworkingConfig_FakePacketDup_Recv
= 27,
62 k_ESteamNetworkingConfig_FakePacketDup_TimeMax
= 28,
63 k_ESteamNetworkingConfig_PacketTraceMaxBytes
= 41,
64 k_ESteamNetworkingConfig_FakeRateLimit_Send_Rate
= 42,
65 k_ESteamNetworkingConfig_FakeRateLimit_Send_Burst
= 43,
66 k_ESteamNetworkingConfig_FakeRateLimit_Recv_Rate
= 44,
67 k_ESteamNetworkingConfig_FakeRateLimit_Recv_Burst
= 45,
68 k_ESteamNetworkingConfig_Callback_ConnectionStatusChanged
= 201,
69 k_ESteamNetworkingConfig_Callback_AuthStatusChanged
= 202,
70 k_ESteamNetworkingConfig_Callback_RelayNetworkStatusChanged
= 203,
71 k_ESteamNetworkingConfig_Callback_MessagesSessionRequest
= 204,
72 k_ESteamNetworkingConfig_Callback_MessagesSessionFailed
= 205,
73 k_ESteamNetworkingConfig_Callback_CreateConnectionSignaling
= 206,
74 k_ESteamNetworkingConfig_Callback_FakeIPResult
= 207,
75 k_ESteamNetworkingConfig_P2P_STUN_ServerList
= 103,
76 k_ESteamNetworkingConfig_P2P_Transport_ICE_Enable
= 104,
77 k_ESteamNetworkingConfig_P2P_Transport_ICE_Penalty
= 105,
78 k_ESteamNetworkingConfig_P2P_Transport_SDR_Penalty
= 106,
79 k_ESteamNetworkingConfig_SDRClient_ConsecutitivePingTimeoutsFailInitial
= 19,
80 k_ESteamNetworkingConfig_SDRClient_ConsecutitivePingTimeoutsFail
= 20,
81 k_ESteamNetworkingConfig_SDRClient_MinPingsBeforePingAccurate
= 21,
82 k_ESteamNetworkingConfig_SDRClient_SingleSocket
= 22,
83 k_ESteamNetworkingConfig_SDRClient_ForceRelayCluster
= 29,
84 k_ESteamNetworkingConfig_SDRClient_DebugTicketAddress
= 30,
85 k_ESteamNetworkingConfig_SDRClient_ForceProxyAddr
= 31,
86 k_ESteamNetworkingConfig_SDRClient_FakeClusterPing
= 36,
87 k_ESteamNetworkingConfig_LogLevel_AckRTT
= 13,
88 k_ESteamNetworkingConfig_LogLevel_PacketDecode
= 14,
89 k_ESteamNetworkingConfig_LogLevel_Message
= 15,
90 k_ESteamNetworkingConfig_LogLevel_PacketGaps
= 16,
91 k_ESteamNetworkingConfig_LogLevel_P2PRendezvous
= 17,
92 k_ESteamNetworkingConfig_LogLevel_SDRRelayPings
= 18,
93 k_ESteamNetworkingConfig_DELETED_EnumerateDevVars
= 35,
94 k_ESteamNetworkingConfigValue__Force32Bit
= 0x7fffffff
96 typedef enum ESteamNetworkingConfigValue ESteamNetworkingConfigValue
;
99 enum ESteamNetworkingConnectionState
101 k_ESteamNetworkingConnectionState_None
= 0,
102 k_ESteamNetworkingConnectionState_Connecting
= 1,
103 k_ESteamNetworkingConnectionState_FindingRoute
= 2,
104 k_ESteamNetworkingConnectionState_Connected
= 3,
105 k_ESteamNetworkingConnectionState_ClosedByPeer
= 4,
106 k_ESteamNetworkingConnectionState_ProblemDetectedLocally
= 5,
107 k_ESteamNetworkingConnectionState_FinWait
= -1,
108 k_ESteamNetworkingConnectionState_Linger
= -2,
109 k_ESteamNetworkingConnectionState_Dead
= -3,
110 k_ESteamNetworkingConnectionState__Force32Bit
= 0x7fffffff
112 typedef enum ESteamNetworkingConnectionState ESteamNetworkingConnectionState
;
114 enum ESteamNetConnectionEnd
116 k_ESteamNetConnectionEnd_Invalid
= 0,
117 k_ESteamNetConnectionEnd_App_Min
= 1000,
118 k_ESteamNetConnectionEnd_App_Generic
= k_ESteamNetConnectionEnd_App_Min
,
119 k_ESteamNetConnectionEnd_App_Max
= 1999,
120 k_ESteamNetConnectionEnd_AppException_Min
= 2000,
121 k_ESteamNetConnectionEnd_AppException_Generic
=
122 k_ESteamNetConnectionEnd_AppException_Min
,
123 k_ESteamNetConnectionEnd_AppException_Max
= 2999,
124 k_ESteamNetConnectionEnd_Local_Min
= 3000,
125 k_ESteamNetConnectionEnd_Local_OfflineMode
= 3001,
126 k_ESteamNetConnectionEnd_Local_ManyRelayConnectivity
= 3002,
127 k_ESteamNetConnectionEnd_Local_HostedServerPrimaryRelay
= 3003,
128 k_ESteamNetConnectionEnd_Local_NetworkConfig
= 3004,
129 k_ESteamNetConnectionEnd_Local_Rights
= 3005,
130 k_ESteamNetConnectionEnd_Local_P2P_ICE_NoPublicAddresses
= 3006,
132 k_ESteamNetConnectionEnd_Local_Max
= 3999,
133 k_ESteamNetConnectionEnd_Remote_Min
= 4000,
134 k_ESteamNetConnectionEnd_Remote_Timeout
= 4001,
135 k_ESteamNetConnectionEnd_Remote_BadCrypt
= 4002,
136 k_ESteamNetConnectionEnd_Remote_BadCert
= 4003,
137 k_ESteamNetConnectionEnd_Remote_BadProtocolVersion
= 4006,
138 k_ESteamNetConnectionEnd_Remote_P2P_ICE_NoPublicAddresses
= 4007,
140 k_ESteamNetConnectionEnd_Remote_Max
= 4999,
142 k_ESteamNetConnectionEnd_Misc_Min
= 5000,
143 k_ESteamNetConnectionEnd_Misc_Generic
= 5001,
144 k_ESteamNetConnectionEnd_Misc_InternalError
= 5002,
145 k_ESteamNetConnectionEnd_Misc_Timeout
= 5003,
146 k_ESteamNetConnectionEnd_Misc_SteamConnectivity
= 5005,
147 k_ESteamNetConnectionEnd_Misc_NoRelaySessionsToClient
= 5006,
148 k_ESteamNetConnectionEnd_Misc_P2P_Rendezvous
= 5008,
149 k_ESteamNetConnectionEnd_Misc_P2P_NAT_Firewall
= 5009,
150 k_ESteamNetConnectionEnd_Misc_PeerSentNoConnection
= 5010,
152 k_ESteamNetConnectionEnd_Misc_Max
= 5999,
153 k_ESteamNetConnectionEnd__Force32Bit
= 0x7fffffff
155 typedef enum ESteamNetConnectionEnd ESteamNetConnectionEnd
;
157 enum ESteamNetworkingIdentityType
159 k_ESteamNetworkingIdentityType_Invalid
= 0,
160 k_ESteamNetworkingIdentityType_SteamID
= 16,
161 k_ESteamNetworkingIdentityType_IPAddress
= 1,
162 k_ESteamNetworkingIdentityType_GenericString
= 2,
163 k_ESteamNetworkingIdentityType_GenericBytes
= 3,
164 k_ESteamNetworkingIdentityType_UnknownType
= 4,
165 k_ESteamNetworkingIdentityType__Force32bit
= 0x7fffffff,
167 typedef enum ESteamNetworkingIdentityType ESteamNetworkingIdentityType
;
169 enum ESteamNetworkingAvailability
171 k_ESteamNetworkingAvailability_CannotTry
= -102,
172 k_ESteamNetworkingAvailability_Failed
= -101,
173 k_ESteamNetworkingAvailability_Previously
= -100,
174 k_ESteamNetworkingAvailability_Retrying
= -10,
175 k_ESteamNetworkingAvailability_NeverTried
= 1,
176 k_ESteamNetworkingAvailability_Waiting
= 2,
177 k_ESteamNetworkingAvailability_Attempting
= 3,
178 k_ESteamNetworkingAvailability_Current
= 100,
179 k_ESteamNetworkingAvailability_Unknown
= 0,
180 k_ESteamNetworkingAvailability__Force32bit
= 0x7fffffff,
182 typedef enum ESteamNetworkingAvailability ESteamNetworkingAvailability
;
184 /* Handle used to identify a connection to a remote host. */
185 typedef u32 HSteamNetConnection
;
186 HSteamNetConnection
const k_HSteamNetConnection_Invalid
= 0;
189 * Handle used to identify a "listen socket". Unlike traditional
190 * Berkeley sockets, a listen socket and a connection are two
191 * different abstractions.
193 typedef u32 HSteamListenSocket
;
194 HSteamListenSocket
const k_HSteamListenSocket_Invalid
= 0;
196 typedef u32 SteamNetworkingPOPID
;
197 typedef i64 SteamNetworkingMicroseconds
;
200 /* Store an IP and port. IPv6 is always used; IPv4 is represented using
201 * "IPv4-mapped" addresses: IPv4 aa.bb.cc.dd => IPv6 ::ffff:aabb:ccdd
202 * (RFC 4291 section 2.5.5.2.)
204 typedef struct SteamNetworkingIPAddr SteamNetworkingIPAddr
;
205 struct SteamNetworkingIPAddr
211 /* RFC4038, section 4.2 */
212 struct IPv4MappedAddress
217 u8 m_ip
[ 4 ]; /* NOTE: As bytes, i.e. network byte order */
222 u16 m_port
; // Host byte order
225 typedef struct SteamNetworkingIdentity SteamNetworkingIdentity
;
226 struct SteamNetworkingIdentity
228 ESteamNetworkingIdentityType m_eType
;
234 char m_szGenericString
[ 32 ];
235 u8 m_genericBytes
[ 32 ];
236 char m_szUnknownRawString
[ 128 ];
237 SteamNetworkingIPAddr m_ip
;
238 u32 m_reserved
[ 32 ];
245 * "Fake IPs" are assigned to hosts, to make it easier to interface with
246 * older code that assumed all hosts will have an IPv4 address
248 enum ESteamNetworkingFakeIPType
250 k_ESteamNetworkingFakeIPType_Invalid
,
251 k_ESteamNetworkingFakeIPType_NotFake
,
252 k_ESteamNetworkingFakeIPType_GlobalIPv4
,
253 k_ESteamNetworkingFakeIPType_LocalIPv4
,
254 k_ESteamNetworkingFakeIPType__Force32Bit
= 0x7fffffff
256 typedef enum ESteamNetworkingFakeIPType ESteamNetworkingFakeIPType
;
258 /* Set everything to zero. E.g. [::]:0 */
259 void SteamAPI_SteamNetworkingIPAddr_Clear( SteamNetworkingIPAddr
* self
);
261 /* Returns true if the IP is ::0. (Doesn't check port.) */
262 int SteamAPI_SteamNetworkingIPAddr_IsIPv6AllZeros(
263 SteamNetworkingIPAddr
* self
);
266 * Set IPv6 address. IP is interpreted as bytes, so there are no endian issues.
267 * (Same as inaddr_in6.) The IP can be a mapped IPv4 address
269 void SteamAPI_SteamNetworkingIPAddr_SetIPv6( SteamNetworkingIPAddr
* self
,
270 u8
*ipv6
, u16 nPort
);
272 /* Sets to IPv4 mapped address. IP and port are in host byte order. */
273 void SteamAPI_SteamNetworkingIPAddr_SetIPv4( SteamNetworkingIPAddr
* self
,
274 u32 nIP
, u16 nPort
);
276 /* Return true if IP is mapped IPv4 */
277 int SteamAPI_SteamNetworkingIPAddr_IsIPv4( SteamNetworkingIPAddr
* self
);
280 * Returns IP in host byte order (e.g. aa.bb.cc.dd as 0xaabbccdd).
281 * Returns 0 if IP is not mapped IPv4.
283 u32
SteamAPI_SteamNetworkingIPAddr_GetIPv4( SteamNetworkingIPAddr
* self
);
285 /* Set to the IPv6 localhost address ::1, and the specified port. */
286 void SteamAPI_SteamNetworkingIPAddr_SetIPv6LocalHost(
287 SteamNetworkingIPAddr
* self
, u16 nPort
);
290 * Return true if this identity is localhost.
291 * (Either IPv6 ::1, or IPv4 127.0.0.1)
293 int SteamAPI_SteamNetworkingIPAddr_IsLocalHost( SteamNetworkingIPAddr
* self
);
296 * Print to a string, with or without the port. Mapped IPv4 addresses are
297 * printed as dotted decimal (12.34.56.78), otherwise this will print the
298 * canonical form according to RFC5952. If you include the port, IPv6 will be
299 * surrounded by brackets, e.g. [::1:2]:80. Your buffer should be at least
300 * k_cchMaxString bytes to avoid truncation
302 * See also SteamNetworkingIdentityRender
304 void SteamAPI_SteamNetworkingIPAddr_ToString( SteamNetworkingIPAddr
* self
,
305 char *buf
, u32 cbBuf
, int bWithPort
);
308 * Parse an IP address and optional port. If a port is not present, it is set
310 * (This means that you cannot tell if a zero port was explicitly specified.)
312 int SteamAPI_SteamNetworkingIPAddr_ParseString( SteamNetworkingIPAddr
* self
,
313 const char *pszStr
);
315 /* See if two addresses are identical */
316 int SteamAPI_SteamNetworkingIPAddr_IsEqualTo( SteamNetworkingIPAddr
* self
,
317 SteamNetworkingIPAddr
*x
);
320 * Classify address as FakeIP. This function never returns
321 * k_ESteamNetworkingFakeIPType_Invalid.
323 ESteamNetworkingFakeIPType
SteamAPI_SteamNetworkingIPAddr_GetFakeIPType(
324 SteamNetworkingIPAddr
* self
);
326 /* Return true if we are a FakeIP */
327 int SteamAPI_SteamNetworkingIPAddr_IsFakeIP( SteamNetworkingIPAddr
* self
);
330 * In a few places we need to set configuration options on listen sockets and
331 * connections, and have them take effect *before* the listen socket or
332 * connection really starts doing anything. Creating the object and then setting
333 * the options "immediately" after creation doesn't work completely, because
334 * network packets could be received between the time the object is created and
335 * when the options are applied. To set options at creation time in a reliable
336 * way, they must be passed to the creation function. This structure is used to
337 * pass those options.
339 * For the meaning of these fields, see ISteamNetworkingUtils::SetConfigValue.
340 * Basically when the object is created, we just iterate over the list of
341 * options and call ISteamNetworkingUtils::SetConfigValueStruct, where the scope
342 * arguments are supplied by the object being created.
344 typedef struct SteamNetworkingConfigValue_t SteamNetworkingConfigValue_t
;
345 struct SteamNetworkingConfigValue_t
347 /* Which option is being set */
348 ESteamNetworkingConfigValue m_eValue
;
350 /// Which field below did you fill in?
351 ESteamNetworkingConfigDataType m_eDataType
;
359 const char *m_string
; // Points to your '\0'-terminated buffer
364 void SteamAPI_SteamNetworkingConfigValue_t_SetInt32(
365 SteamNetworkingConfigValue_t
* self
,
366 ESteamNetworkingConfigValue eVal
, i32 data
);
368 void SteamAPI_SteamNetworkingConfigValue_t_SetInt64(
369 SteamNetworkingConfigValue_t
* self
,
370 ESteamNetworkingConfigValue eVal
, i64 data
);
372 void SteamAPI_SteamNetworkingConfigValue_t_SetFloat(
373 SteamNetworkingConfigValue_t
* self
,
374 ESteamNetworkingConfigValue eVal
, float data
);
376 void SteamAPI_SteamNetworkingConfigValue_t_SetPtr(
377 SteamNetworkingConfigValue_t
* self
,
378 ESteamNetworkingConfigValue eVal
, void *data
);
380 void SteamAPI_SteamNetworkingConfigValue_t_SetString(
381 SteamNetworkingConfigValue_t
* self
, ESteamNetworkingConfigValue eVal
,
384 typedef void ISteamNetworkingSockets
;
385 typedef struct SteamNetworkingMessage_t SteamNetworkingMessage_t
;
386 typedef struct SteamNetConnectionInfo_t SteamNetConnectionInfo_t
;
390 * Handle used to identify a poll group, used to query many
391 * connections at once efficiently.
393 typedef u32 HSteamNetPollGroup
;
394 HSteamNetPollGroup
const k_HSteamNetPollGroup_Invalid
= 0;
396 ISteamNetworkingSockets
397 *SteamAPI_SteamGameServerNetworkingSockets_SteamAPI_v012(void);
399 ISteamNetworkingSockets
400 *SteamAPI_SteamGameServerNetworkingSockets_SteamAPI(void)
402 return SteamAPI_SteamGameServerNetworkingSockets_SteamAPI_v012();
406 ISteamNetworkingSockets
*SteamAPI_SteamNetworkingSockets_SteamAPI_v012();
407 ISteamNetworkingSockets
*SteamAPI_SteamNetworkingSockets_SteamAPI()
409 return SteamAPI_SteamNetworkingSockets_SteamAPI_v012();
414 * Send the message unreliably. Can be lost. Messages *can* be larger than a
415 * single MTU (UDP packet), but there is no retransmission, so if any piece
416 * of the message is lost, the entire message will be dropped.
418 * The sending API does have some knowledge of the underlying connection, so
419 * if there is no NAT-traversal accomplished or there is a recognized adjustment
420 * happening on the connection, the packet will be batched until the connection
423 * Migration note: This is not exactly the same as k_EP2PSendUnreliable! You
424 * probably want k_ESteamNetworkingSendType_UnreliableNoNagle
426 const int k_nSteamNetworkingSend_Unreliable
= 0;
429 * Disable Nagle's algorithm.
430 * By default, Nagle's algorithm is applied to all outbound messages. This means
431 * that the message will NOT be sent immediately, in case further messages are
432 * sent soon after you send this, which can be grouped together. Any time there
433 * is enough buffered data to fill a packet, the packets will be pushed out
434 * immediately, but partially-full packets not be sent until the Nagle timer
435 * expires. See ISteamNetworkingSockets::FlushMessagesOnConnection,
436 * ISteamNetworkingMessages::FlushMessagesToUser
438 * NOTE: Don't just send every message without Nagle because you want packets to
439 * get there quicker. Make sure you understand the problem that Nagle is
440 * solving before disabling it. If you are sending small messages, often many at
441 * the same time, then it is very likely that it will be more efficient to leave
442 * Nagle enabled. A typical proper use of this flag is when you are sending
443 * what you know will be the last message sent for a while (e.g. the last in the
444 * server simulation tick to a particular client), and you use this flag to
445 * flush all messages.
447 const int k_nSteamNetworkingSend_NoNagle
= 1;
450 * Send a message unreliably, bypassing Nagle's algorithm for this message and
451 * any messages currently pending on the Nagle timer. This is equivalent to
452 * using k_ESteamNetworkingSend_Unreliable and then immediately flushing the
453 * messages using ISteamNetworkingSockets::FlushMessagesOnConnection or
454 * ISteamNetworkingMessages::FlushMessagesToUser. (But using this flag is more
455 * efficient since you only make one API call.)
457 const int k_nSteamNetworkingSend_UnreliableNoNagle
=
458 k_nSteamNetworkingSend_Unreliable
|
459 k_nSteamNetworkingSend_NoNagle
;
461 * If the message cannot be sent very soon (because the connection is still
462 * doing some initial handshaking, route negotiations, etc), then just drop it.
463 * This is only applicable for unreliable messages. Using this flag on reliable
464 * messages is invalid.
466 const int k_nSteamNetworkingSend_NoDelay
= 4;
469 * Send an unreliable message, but if it cannot be sent relatively quickly, just
470 * drop it instead of queuing it. This is useful for messages that are not
471 * useful if they are excessively delayed, such as voice data.
472 * NOTE: The Nagle algorithm is not used, and if the message is not dropped, any
473 * messages waiting on the Nagle timer are immediately flushed.
475 * A message will be dropped under the following circumstances:
476 * - the connection is not fully connected. (E.g. the "Connecting" or
477 * "FindingRoute" states)
478 * - there is a sufficiently large number of messages queued up already such
479 * that the current message will not be placed on the wire in the next
482 * If a message is dropped for these reasons, k_EResultIgnored will be returned.
484 const int k_nSteamNetworkingSend_UnreliableNoDelay
=
485 k_nSteamNetworkingSend_Unreliable
|
486 k_nSteamNetworkingSend_NoDelay
|
487 k_nSteamNetworkingSend_NoNagle
;
490 * Reliable message send. Can send up to
491 * k_cbMaxSteamNetworkingSocketsMessageSizeSend bytes in a single message.
492 * Does fragmentation/re-assembly of messages under the hood, as well as a
493 * sliding window for efficient sends of large chunks of data.
494 * The Nagle algorithm is used. See notes on
495 * k_ESteamNetworkingSendType_Unreliable for more details.
496 * See k_ESteamNetworkingSendType_ReliableNoNagle,
497 * ISteamNetworkingSockets::FlushMessagesOnConnection,
498 * ISteamNetworkingMessages::FlushMessagesToUser
500 * Migration note: This is NOT the same as k_EP2PSendReliable, it's more like
501 * k_EP2PSendReliableWithBuffering
503 const int k_nSteamNetworkingSend_Reliable
= 8;
506 * Send a message reliably, but bypass Nagle's algorithm.
508 * Migration note: This is equivalent to k_EP2PSendReliable
510 const int k_nSteamNetworkingSend_ReliableNoNagle
=
511 k_nSteamNetworkingSend_Reliable
|
512 k_nSteamNetworkingSend_NoNagle
;
515 HSteamListenSocket
SteamAPI_ISteamNetworkingSockets_CreateListenSocketIP(
516 ISteamNetworkingSockets
*self
,
517 SteamNetworkingIPAddr
*localAddress
, int nOptions
,
518 SteamNetworkingConfigValue_t
*pOptions
);
520 HSteamNetConnection
SteamAPI_ISteamNetworkingSockets_ConnectByIPAddress(
521 ISteamNetworkingSockets
*self
,
522 SteamNetworkingIPAddr
*address
, int nOptions
,
523 SteamNetworkingConfigValue_t
*pOptions
);
526 EResult
SteamAPI_ISteamNetworkingSockets_AcceptConnection(
527 ISteamNetworkingSockets
*self
,
528 HSteamNetConnection hConn
);
530 int SteamAPI_ISteamNetworkingSockets_CloseConnection(
531 ISteamNetworkingSockets
*self
,
532 HSteamNetConnection hPeer
, int nReason
, const char *pszDebug
,
535 int SteamAPI_ISteamNetworkingSockets_GetListenSocketAddress(
536 ISteamNetworkingSockets
*self
, HSteamListenSocket hSocket
,
537 SteamNetworkingIPAddr
*address
);
539 int SteamAPI_ISteamNetworkingSockets_CloseConnection(
540 ISteamNetworkingSockets
*self
,
541 HSteamNetConnection hPeer
, int nReason
, const char *pszDebug
,
544 int SteamAPI_ISteamNetworkingSockets_CloseListenSocket(
545 ISteamNetworkingSockets
*self
, HSteamListenSocket hSocket
);
547 EResult
SteamAPI_ISteamNetworkingSockets_SendMessageToConnection(
548 ISteamNetworkingSockets
* self
,
549 HSteamNetConnection hConn
, const void *pData
, u32 cbData
, int nSendFlags
,
550 i64
* pOutMessageNumber
);
552 void SteamAPI_ISteamNetworkingSockets_SendMessages(
553 ISteamNetworkingSockets
* self
,
554 int nMessages
, SteamNetworkingMessage_t
*const *pMessages
,
555 i64
*pOutMessageNumberOrResult
);
557 EResult
SteamAPI_ISteamNetworkingSockets_FlushMessagesOnConnection(
558 ISteamNetworkingSockets
* self
,
559 HSteamNetConnection hConn
);
561 int SteamAPI_ISteamNetworkingSockets_ReceiveMessagesOnConnection(
562 ISteamNetworkingSockets
* self
,
563 HSteamNetConnection hConn
,
564 SteamNetworkingMessage_t
**ppOutMessages
,
571 HSteamNetPollGroup
SteamAPI_ISteamNetworkingSockets_CreatePollGroup(
572 ISteamNetworkingSockets
*self
);
574 int SteamAPI_ISteamNetworkingSockets_DestroyPollGroup(
575 ISteamNetworkingSockets
*self
,
576 HSteamNetPollGroup hPollGroup
);
578 int SteamAPI_ISteamNetworkingSockets_SetConnectionPollGroup(
579 ISteamNetworkingSockets
*self
,
580 HSteamNetConnection hConn
, HSteamNetPollGroup hPollGroup
);
582 int SteamAPI_ISteamNetworkingSockets_ReceiveMessagesOnPollGroup(
583 ISteamNetworkingSockets
*self
,
584 HSteamNetPollGroup hPollGroup
, SteamNetworkingMessage_t
**ppOutMessages
,
587 * Returns basic information about the high-level state of the connection.
588 * Returns false if the connection handle is invalid.
590 int SteamAPI_ISteamNetworkingSockets_GetConnectionInfo(
591 ISteamNetworkingSockets
* self
,
592 HSteamNetConnection hConn
, SteamNetConnectionInfo_t
* pInfo
);
594 int SteamAPI_ISteamNetworkingSockets_GetDetailedConnectionStatus(
595 ISteamNetworkingSockets
* self
,
596 HSteamNetConnection hConn
, char *pszBuf
, int cbBuf
);
598 int SteamAPI_ISteamNetworkingSockets_SetConnectionUserData(
599 ISteamNetworkingSockets
* self
, HSteamNetConnection hPeer
, i64 nUserData
);
601 i64
SteamAPI_ISteamNetworkingSockets_GetConnectionUserData(
602 ISteamNetworkingSockets
* self
, HSteamNetConnection hPeer
);
604 int SteamAPI_ISteamNetworkingSockets_GetListenSocketAddress(
605 ISteamNetworkingSockets
* self
,
606 HSteamListenSocket hSocket
, SteamNetworkingIPAddr
*address
);
608 enum{ k_cchSteamNetworkingMaxConnectionCloseReason
= 128 };
609 enum{ k_cchSteamNetworkingMaxConnectionDescription
= 128 };
610 enum{ k_cchSteamNetworkingMaxConnectionAppName
= 32 };
611 enum{ k_nSteamNetworkConnectionInfoFlags_Unauthenticated
= 1 };
612 enum{ k_nSteamNetworkConnectionInfoFlags_Unencrypted
= 2 };
613 enum{ k_nSteamNetworkConnectionInfoFlags_LoopbackBuffers
= 4 };
614 enum{ k_nSteamNetworkConnectionInfoFlags_Fast
= 8 };
615 enum{ k_nSteamNetworkConnectionInfoFlags_Relayed
= 16 };
616 enum{ k_nSteamNetworkConnectionInfoFlags_DualWifi
= 32 };
618 /* Describe the state of a connection. */
619 struct SteamNetConnectionInfo_t
622 * Who is on the other end? Depending on the connection type and phase of the
623 * connection, we might not know
625 SteamNetworkingIdentity m_identityRemote
;
627 /* Arbitrary user data set by the local application code */
631 * Handle to listen socket this was connected on, or
632 * k_HSteamListenSocket_Invalid if we initiated the connection
634 HSteamListenSocket m_hListenSocket
;
637 * Remote address. Might be all 0's if we don't know it, or if this is N/A.
638 * (E.g. Basically everything except direct UDP connection.)
640 SteamNetworkingIPAddr m_addrRemote
;
643 /* What data center is the remote host in? (0 if we don't know.) */
644 SteamNetworkingPOPID m_idPOPRemote
;
647 * What relay are we using to communicate with the remote host?
648 * (0 if not applicable.)
650 SteamNetworkingPOPID m_idPOPRelay
;
652 /* High level state of the connection */
653 ESteamNetworkingConnectionState m_eState
;
656 * Basic cause of the connection termination or problem.
657 * See ESteamNetConnectionEnd for the values used
662 * Human-readable, but non-localized explanation for connection
663 * termination or problem. This is intended for debugging /
664 * diagnostic purposes only, not to display to users. It might
665 * have some details specific to the issue.
667 char m_szEndDebug
[ k_cchSteamNetworkingMaxConnectionCloseReason
];
670 * Debug description. This includes the internal connection ID,
671 * connection type (and peer information), and any name
672 * given to the connection by the app. This string is used in various
673 * internal logging messages.
675 * Note that the connection ID *usually* matches the HSteamNetConnection
676 * handle, but in certain cases with symmetric connections it might not.
678 char m_szConnectionDescription
679 [ k_cchSteamNetworkingMaxConnectionDescription
];
681 /* Misc flags. Bitmask of k_nSteamNetworkConnectionInfoFlags_Xxxx */
684 /* Internal stuff, room to change API easily */
689 * Quick connection state, pared down to something you could call
690 * more frequently without it being too big of a perf hit.
692 struct SteamNetConnectionRealTimeStatus_t
694 /* High level state of the connection */
695 ESteamNetworkingConnectionState m_eState
;
697 /* Current ping (ms) */
701 * Connection quality measured locally, 0...1.
702 * (Percentage of packets delivered end-to-end in order).
704 float m_flConnectionQualityLocal
;
706 /* Packet delivery success rate as observed from remote host */
707 float m_flConnectionQualityRemote
;
709 /* Current data rates from recent history. */
710 float m_flOutPacketsPerSec
;
711 float m_flOutBytesPerSec
;
712 float m_flInPacketsPerSec
;
713 float m_flInBytesPerSec
;
716 * Estimate rate that we believe that we can send data to our peer.
717 * Note that this could be significantly higher than m_flOutBytesPerSec,
718 * meaning the capacity of the channel is higher than you are sending data.
721 int m_nSendRateBytesPerSecond
;
724 * Number of bytes pending to be sent. This is data that you have recently
725 * requested to be sent but has not yet actually been put on the wire. The
726 * reliable number ALSO includes data that was previously placed on the wire,
727 * but has now been scheduled for re-transmission. Thus, it's possible to
728 * observe m_cbPendingReliable increasing between two checks, even if no
729 * calls were made to send reliable data between the checks. Data that is
730 * awaiting the Nagle delay will appear in these numbers.
732 int m_cbPendingUnreliable
;
733 int m_cbPendingReliable
;
736 * Number of bytes of reliable data that has been placed the wire, but
737 * for which we have not yet received an acknowledgment, and thus we may
738 * have to re-transmit.
740 int m_cbSentUnackedReliable
;
743 * If you queued a message right now, approximately how long would that
744 * message wait in the queue before we actually started putting its data on
745 * the wire in a packet?
747 * In general, data that is sent by the application is limited by the
748 * bandwidth of the channel. If you send data faster than this, it must be
749 * queued and put on the wire at a metered rate. Even sending a small amount
750 * of data (e.g. a few MTU, say ~3k) will require some of the data to be
753 * Ignoring multiple lanes,the estimated delay will be approximately equal to
755 * ( m_cbPendingUnreliable+m_cbPendingReliable ) /
756 * m_nSendRateBytesPerSecond
758 * plus or minus one MTU. It depends on how much time has elapsed since the
759 * last packet was put on the wire. For example, the queue might have *just*
760 * been emptied, and the last packet placed on the wire, and we are exactly
761 * up against the send rate limit. In that case we might need to wait for
762 * one packet's worth of time to elapse before we can send again. On the
763 * other extreme, the queue might have data in it waiting for Nagle. (This
764 * will always be less than one packet, because as soon as we have a complete
765 * packet we would send it.) In that case, we might be ready to send data
766 * now, and this value will be 0.
768 * This value is only valid if multiple lanes are not used. If multiple lanes
769 * are in use, then the queue time will be different for each lane, and you
770 * must use the value in SteamNetConnectionRealTimeLaneStatus_t.
772 * Nagle delay is ignored for the purposes of this calculation.
774 SteamNetworkingMicroseconds m_usecQueueTime
;
776 // Internal stuff, room to change API easily
784 enum { k_iSteamNetConnectionStatusChangedCallBack
=
785 k_iSteamNetworkingSocketsCallbacks
+ 1 };
787 typedef struct SteamNetConnectionStatusChangedCallback_t
788 SteamNetConnectionStatusChangedCallback_t
;
789 struct SteamNetConnectionStatusChangedCallback_t
791 /// Connection handle
792 HSteamNetConnection m_hConn
;
794 /// Full connection info
795 SteamNetConnectionInfo_t m_info
;
797 /// Previous state. (Current state is in m_info.m_eState)
798 ESteamNetworkingConnectionState m_eOldState
;
801 enum { k_iSteamNetAuthenticationStatus
=
802 k_iSteamNetworkingSocketsCallbacks
+ 2 };
804 typedef struct SteamNetAuthenticationStatus_t SteamNetAuthenticationStatus_t
;
805 struct SteamNetAuthenticationStatus_t
808 ESteamNetworkingAvailability m_eAvail
;
810 /// Non-localized English language status. For diagnostic/debugging
812 char m_debugMsg
[ 256 ];
817 /* This does not have packing specified in the steamnetworkingtypes.h, it seems
819 struct SteamNetworkingMessage_t
827 * Size of the payload.
831 HSteamNetConnection m_conn
;
834 * For inbound messages: Who sent this to us?
835 * For outbound messages on connections: not used.
836 * For outbound messages on the ad-hoc ISteamNetworkingMessages interface:
837 * who should we send this to?
839 SteamNetworkingIdentity m_identityPeer
;
842 * For messages received on connections, this is the user data
843 * associated with the connection.
845 * This is *usually* the same as calling GetConnection() and then
846 * fetching the user data associated with that connection, but for
847 * the following subtle differences:
849 * - This user data will match the connection's user data at the time
850 * is captured at the time the message is returned by the API.
851 * If you subsequently change the userdata on the connection,
852 * this won't be updated.
853 * - This is an inline call, so it's *much* faster.
854 * - You might have closed the connection, so fetching the user data
855 * would not be possible.
857 * Not used when sending messages.
862 * Local timestamp when the message was received
863 * Not used for outbound messages.
865 SteamNetworkingMicroseconds m_usecTimeReceived
;
868 * Message number assigned by the sender. This is not used for outbound
869 * messages. Note that if multiple lanes are used, each lane has its own
870 * message numbers, which are assigned sequentially, so messages from
871 * different lanes will share the same numbers.
873 i64 m_nMessageNumber
;
876 * Function used to free up m_pData. This mechanism exists so that
877 * apps can create messages with buffers allocated from their own
878 * heap, and pass them into the library. This function will
879 * usually be something like:
881 * free( pMsg->m_pData );
883 void (*m_pfnFreeData
)( SteamNetworkingMessage_t
*pMsg
);
886 * Function to used to decrement the internal reference count and, if
887 * it's zero, release the message. You should not set this function pointer,
888 * or need to access this directly! Use the Release() function instead!
890 void (*m_pfnRelease
)( SteamNetworkingMessage_t
*pMsg
);
893 * When using ISteamNetworkingMessages, the channel number the message was
894 * received on (Not used for messages sent or received on "connections")
899 * Bitmask of k_nSteamNetworkingSend_xxx flags.
900 * For received messages, only the k_nSteamNetworkingSend_Reliable bit is
902 * For outbound messages, all bits are relevant
907 * Arbitrary user data that you can use when sending messages using
908 * ISteamNetworkingUtils::AllocateMessage and
909 * ISteamNetworkingSockets::SendMessage.
910 * (The callback you set in m_pfnFreeData might use this field.)
912 * Not used for received messages.
917 * For outbound messages, which lane to use? See
918 * ISteamNetworkingSockets::ConfigureConnectionLanes.
919 * For inbound messages, what lane was the message received on?
925 void SteamAPI_SteamNetworkingMessage_t_Release(SteamNetworkingMessage_t
* self
);
934 static const char *string_ESteamNetworkingConnectionState(
935 ESteamNetworkingConnectionState s
)
939 case k_ESteamNetworkingConnectionState_None
: return "None"; break;
940 case k_ESteamNetworkingConnectionState_Connecting
:
943 case k_ESteamNetworkingConnectionState_FindingRoute
:
944 return "Finding route";
946 case k_ESteamNetworkingConnectionState_Connected
:
949 case k_ESteamNetworkingConnectionState_ClosedByPeer
:
950 return "Closed By Peer";
952 case k_ESteamNetworkingConnectionState_ProblemDetectedLocally
:
953 return "Problem detected locally";
955 case k_ESteamNetworkingConnectionState_FinWait
:
958 case k_ESteamNetworkingConnectionState_Linger
:
961 case k_ESteamNetworkingConnectionState_Dead
:
964 case k_ESteamNetworkingConnectionState__Force32Bit
:
965 return "Force 32 Bit";
972 static const char *string_ESteamNetworkingAvailability(
973 ESteamNetworkingAvailability s
)
977 case k_ESteamNetworkingAvailability_CannotTry
:
980 case k_ESteamNetworkingAvailability_Failed
:
983 case k_ESteamNetworkingAvailability_Previously
:
986 case k_ESteamNetworkingAvailability_Retrying
:
989 case k_ESteamNetworkingAvailability_NeverTried
:
990 return "Never tried";
992 case k_ESteamNetworkingAvailability_Waiting
:
995 case k_ESteamNetworkingAvailability_Attempting
:
998 case k_ESteamNetworkingAvailability_Current
:
1001 case k_ESteamNetworkingAvailability_Unknown
:
1010 #endif /* VG_STEAM_NETWORKING_H */