summaryrefslogtreecommitdiff
path: root/public/steamnetworkingsockets/isteamnetworkingutils.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/steamnetworkingsockets/isteamnetworkingutils.h')
-rw-r--r--public/steamnetworkingsockets/isteamnetworkingutils.h125
1 files changed, 125 insertions, 0 deletions
diff --git a/public/steamnetworkingsockets/isteamnetworkingutils.h b/public/steamnetworkingsockets/isteamnetworkingutils.h
new file mode 100644
index 0000000..80190e9
--- /dev/null
+++ b/public/steamnetworkingsockets/isteamnetworkingutils.h
@@ -0,0 +1,125 @@
+//====== Copyright Valve Corporation, All rights reserved. ====================
+//
+// Purpose: misc networking utilities
+//
+//=============================================================================
+
+#ifndef ISTEAMNETWORKINGUTILS
+#define ISTEAMNETWORKINGUTILS
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "steamnetworkingtypes.h"
+struct SteamDatagramRelayAuthTicket;
+
+//-----------------------------------------------------------------------------
+/// Misc networking utilities for checking the local networking environment
+/// and estimating pings.
+class ISteamNetworkingUtils
+{
+public:
+
+ /// Fetch current timestamp. These values never go backwards, and
+ /// the initial value is low enough that practically speaking it's
+ /// not necessary to worry about the value wrapping around.
+ virtual SteamNetworkingMicroseconds GetLocalTimestamp() = 0;
+
+ /// Check if the ping data of sufficient recency is available, and if
+ /// it's too old, start refreshing it.
+ ///
+ /// Games that use the ping location information will typically
+ /// want to call this at boot time, to make sure all prerequisites
+ /// are ready. Especially since the first measurement might take
+ /// slightly longer than subsequent measurements.
+ ///
+ /// Returns true if sufficiently recent data is already available.
+ ///
+ /// Returns false if sufficiently recent data is not available. In this
+ /// case, ping measurement is initiated, if it is not already active.
+ /// (You cannot restart a measurement already in progress.)
+ ///
+ /// A FIXME event will be posted when measurement is completed.
+ virtual bool CheckPingDataUpToDate( float flMaxAgeSeconds ) = 0;
+
+ /// Return location info for the current host. Returns the approximate
+ /// age of the data, in seconds, or -1 if no data is available.
+ /// Note that this might return an age older than the age of your game's
+ /// process, if the data was obtained before you game started.
+ ///
+ /// This always return the most up-to-date information we have available
+ /// right now, even if we are in the middle of re-calculating ping times.
+ virtual float GetLocalPingLocation( SteamNetworkPingLocation_t &result ) = 0;
+
+ /// Return true if we are taking ping measurements to update our ping
+ /// location or select optimal routing. Ping measurement typically takes
+ /// a few seconds, perhaps up to 10 seconds.
+ virtual bool IsPingMeasurementInProgress() = 0;
+
+ /// Estimate the round-trip latency between two arbitrary locations, in
+ /// milliseconds. This is a conservative estimate, based on routing through
+ /// the relay network. For most basic connections based on SteamID,
+ /// this ping time will be pretty accurate, since it will be based on the
+ /// route likely to be actually used.
+ ///
+ /// If a direct IP route is used (perhaps via NAT traversal), then the route
+ /// will be different, and the ping time might be better. Or it might actually
+ /// be a bit worse! Standard IP routing is frequently suboptimal!
+ ///
+ /// but even in this case, the estimate obtained using this method is a
+ /// reasonable upper bound on the ping time. (Also it has the advantage
+ /// of returning immediately and not sending any packets.)
+ ///
+ /// In a few cases we might not able to estimate the route. In this case
+ /// a negative value is returned. k_nSteamNetworkingPing_Failed means
+ /// the reason was because of some networking difficulty. (Failure to
+ /// ping, etc) k_nSteamNetworkingPing_Unknown is returned if we cannot
+ /// currently answer the question for some other reason.
+ virtual int EstimatePingTimeBetweenTwoLocations( const SteamNetworkPingLocation_t &location1, const SteamNetworkPingLocation_t &location2 ) = 0;
+
+ /// Same as EstimatePingTime, but assumes that one location is the local host.
+ /// This is a bit faster, especially if you need to calculate a bunch of
+ /// these in a loop to find the fastest one.
+ ///
+ /// In rare cases this might return a slightly different estimate than combining
+ /// GetLocalPingLocation with EstimatePingTimeBetweenTwoLocations. That's because
+ /// this function uses a slightly more complete description
+ virtual int EstimatePingTimeFromLocalHost( const SteamNetworkPingLocation_t &remoteLocation ) = 0;
+
+ // FIXME:
+ //
+ // Check current internet connection status
+
+ //
+ // Low level ticket stuff. I need to get some advice and talk through how this should work
+ // or how best to tuck it away and make it transparent.
+ //
+
+ virtual bool ReceivedTicket( const void *pvTicket, int cbTicket, SteamDatagramRelayAuthTicket *pOutParsedTicket ) = 0;
+ virtual bool HasTicketForServer( CSteamID steamID ) = 0;
+ virtual uint32 GetIPForServerSteamIDFromTicket( CSteamID steamID ) = 0;
+
+ //
+ // Low level network config stuff I haven't figure out how best to tuck away.
+ // Dota and CSGO use it because we have gameservers in the datacenter, and
+ // we need this information to do region selection. But most games won't
+ // need it.
+ //
+
+ /// Fetch directly measured ping time from local host to a particular network PoP.
+ /// Most games will not need to call this.
+ virtual int GetPingToDataCenter( SteamNetworkingPOPID popID, SteamNetworkingPOPID *pViaRelayPoP ) = 0;
+ virtual int GetDirectPingToPOP( SteamNetworkingPOPID popID ) = 0;
+
+ /// Get number of network PoPs in the config
+ virtual int GetPOPCount() = 0;
+
+ /// Get list of all POP IDs
+ virtual int GetPOPList( SteamNetworkingPOPID *list, int nListSz ) = 0;
+};
+#define STEAMNETWORKINGUTILS_VERSION "SteamNetworkingUtils001"
+
+/// Get ISteamNetworkingUtils object. This will eventually go in Steam_api.h with all the rest of its kin
+STEAMDATAGRAMLIB_INTERFACE ISteamNetworkingUtils *SteamNetworkingUtils();
+
+#endif // ISTEAMNETWORKINGUTILS