From c7ec49abe0af8e8cc68b55601cb9525cc707d954 Mon Sep 17 00:00:00 2001 From: Rohan Singh Date: Wed, 20 Jan 2021 10:25:43 -0500 Subject: [PATCH] Steamworks SDK 1.51 --- Facepunch.Steamworks.Test/steam_api.dll | Bin 239392 -> 239904 bytes Facepunch.Steamworks.Test/steam_api64.dll | Bin 264480 -> 265504 bytes Facepunch.Steamworks/Generated/CustomEnums.cs | 4 - .../Generated/Interfaces/ISteamController.cs | 6 +- .../Generated/Interfaces/ISteamFriends.cs | 10 + .../Generated/Interfaces/ISteamInput.cs | 6 +- .../Interfaces/ISteamNetworkingMessages.cs | 12 +- .../Interfaces/ISteamNetworkingSockets.cs | 12 +- .../Interfaces/ISteamNetworkingUtils.cs | 6 +- .../Generated/Interfaces/ISteamUGC.cs | 51 ++- .../Generated/Interfaces/ISteamUtils.cs | 12 - .../Generated/SteamCallbacks.cs | 25 -- .../Generated/SteamConstants.cs | 7 - Facepunch.Steamworks/Generated/SteamEnums.cs | 150 ++++++++- .../Generated/SteamStructFunctions.cs | 12 + Facepunch.Steamworks/SteamVideo.cs | 5 - Facepunch.Steamworks/steam_api.dll | Bin 239392 -> 239904 bytes Facepunch.Steamworks/steam_api64.dll | Bin 264480 -> 265504 bytes Generator/steam_sdk/isteamapplist.h | 4 +- Generator/steam_sdk/isteamcontroller.h | 64 +++- Generator/steam_sdk/isteamfriends.h | 5 +- Generator/steam_sdk/isteamgameserver.h | 15 - Generator/steam_sdk/isteaminput.h | 85 ++++- Generator/steam_sdk/isteamnetworking.h | 8 +- .../steam_sdk/isteamnetworkingmessages.h | 91 +++--- Generator/steam_sdk/isteamnetworkingsockets.h | 96 ++++-- Generator/steam_sdk/isteamnetworkingutils.h | 61 ++-- Generator/steam_sdk/isteamremotestorage.h | 2 +- Generator/steam_sdk/isteamugc.h | 6 +- Generator/steam_sdk/isteamutils.h | 11 +- Generator/steam_sdk/steam_api.json | 300 ++++++++++++++---- Generator/steam_sdk/steam_api_flat.h | 31 +- Generator/steam_sdk/steam_gameserver.h | 28 +- Generator/steam_sdk/steamclientpublic.h | 6 +- Generator/steam_sdk/steamnetworkingtypes.h | 80 +++-- .../linux32/libsteam_api.so | Bin 405224 -> 409801 bytes .../linux64/libsteam_api.so | Bin 404222 -> 404759 bytes .../osx/libsteam_api.bundle | Bin 425264 -> 453312 bytes UnityPlugin/redistributable_bin/steam_api.dll | Bin 239392 -> 239904 bytes UnityPlugin/redistributable_bin/steam_api.lib | Bin 352036 -> 354776 bytes .../redistributable_bin/win64/steam_api64.dll | Bin 264480 -> 265504 bytes .../redistributable_bin/win64/steam_api64.lib | Bin 349016 -> 351730 bytes 42 files changed, 882 insertions(+), 329 deletions(-) diff --git a/Facepunch.Steamworks.Test/steam_api.dll b/Facepunch.Steamworks.Test/steam_api.dll index a3a661afc2974f027d14e4b736bc54d427e22542..8fb32b4c1c2c8527bcc404e4bc9cd06de1cd7860 100644 GIT binary patch delta 18313 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 delta 17906 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 WRqpUZ<3F1jy)<{zjS;P!@BSZJjNNSj diff --git a/Facepunch.Steamworks.Test/steam_api64.dll b/Facepunch.Steamworks.Test/steam_api64.dll index 2fc976a1d052079a36468129eb3bfb9fad877bca..c6e55cf6aa51e47aec5abc6ad2661bee47200a59 100644 GIT binary patch delta 40165 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 Hm4*Ke%bobN delta 39849 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%0AA_v1mdgx}(Fv&|{`NQvLe9oR zPpE|s#%YjFx%h)T7Ld%hR%&maRPPI6c=ai^1m%gRIR5#<$=YMuhL3@)WgcFU&stI` z0UrS=&&9Sgyth*>z6{da%W%aH7Hz@>4qbe^fL%kb!tOt+EM8d1!ciWJBhJ%@E*R_^ z!q6gS%rAoRgJRCxWao<(trQ-T%kaz+b`zg&qw#`EY*L<-i^ctZqoa}oaS_N_vKTjX zsP_doTyupj#C#s&56jeU3dKJOE zvOMA+$t5+hJhERw7Rz(_lEv~IzKw>(^4z_Yi{$}(E1wm_6G6(w^3Z%S<>Kn+4D}0n za{dJ`mBpRSEFNrT@pvzg7MGh@{KU*+d9c>{lk$9WGntV*IhzWS#qaYK(G!mF zoxb`kyZcrrXS-Xe{%bwoF8=1#vKn90hr4;Y+)2OHuGho*uU@Iy*1Ntj_~hBW`?BWU(I-D=T-^BR z(yGR1W(D=XxnuoX9^>}+AAa2T>3R)bUJ|&Z`f0vR{VC0PA%B>B6560c%M0DzjvwCk z@xXnnuJ79xvc6+s(VxYyCG;Lt^uXusw-y&!TRd*<*>cm0!#&S;dF3BHFGcqJg3Ij5 z`nzR2*EN~f=ZBYOWPY;DrOCv&>hUcPjULq`F?*fy{>w$%Z;d*AZo}xV2UE@+jQ_5m zckhNF`#Ut+efid@&+b)!8QN_|M5is;QzC*c?0D+8!iC9Ut!?_(t;VE$<~McL`)&)y zf0wr6&cw**h4%_;#?JKW{$Z{^ZuK*I&BQ zzVwGj;hxj~mrXfiyYKhKi#y%QnKozk^e(q<)T}%5ic^!(?^!(-ef9MVz5Q=SENrlC zPjqVTp;?_*#1D<0{II4)+6&o{jcuz|8(lUGKXNZ^h>PdduB+eTDYY<}-yGN%%bH5AWq|y^%HT`o^Vgr*|uL zoS9;Ed;Qn${qA18)$qsa=Vv+1D~+7A+tMc_p;uA*-tIeI`Fq8py|21->lNwMZc{?9 l0fWP*9GE|^)BSTshDQraa>EyHUp^X`;?&mjV7<4O{WpDjMV|lw diff --git a/Facepunch.Steamworks/Generated/CustomEnums.cs b/Facepunch.Steamworks/Generated/CustomEnums.cs index ab2360a..6d85281 100644 --- a/Facepunch.Steamworks/Generated/CustomEnums.cs +++ b/Facepunch.Steamworks/Generated/CustomEnums.cs @@ -191,8 +191,6 @@ namespace Steamworks HTML_UpdateToolTip = 4525, HTML_HideToolTip = 4526, HTML_BrowserRestarted = 4527, - BroadcastUploadStart = 4604, - BroadcastUploadStop = 4605, GetVideoURLResult = 4611, GetOPFSettingsResult = 4624, SteamInventoryResultReady = 4700, @@ -403,8 +401,6 @@ namespace Steamworks { CallbackType.HTML_UpdateToolTip, typeof( HTML_UpdateToolTip_t )}, { CallbackType.HTML_HideToolTip, typeof( HTML_HideToolTip_t )}, { CallbackType.HTML_BrowserRestarted, typeof( HTML_BrowserRestarted_t )}, - { CallbackType.BroadcastUploadStart, typeof( BroadcastUploadStart_t )}, - { CallbackType.BroadcastUploadStop, typeof( BroadcastUploadStop_t )}, { CallbackType.GetVideoURLResult, typeof( GetVideoURLResult_t )}, { CallbackType.GetOPFSettingsResult, typeof( GetOPFSettingsResult_t )}, { CallbackType.SteamInventoryResultReady, typeof( SteamInventoryResultReady_t )}, diff --git a/Facepunch.Steamworks/Generated/Interfaces/ISteamController.cs b/Facepunch.Steamworks/Generated/Interfaces/ISteamController.cs index 1ff01b2..d93dccf 100644 --- a/Facepunch.Steamworks/Generated/Interfaces/ISteamController.cs +++ b/Facepunch.Steamworks/Generated/Interfaces/ISteamController.cs @@ -15,9 +15,9 @@ namespace Steamworks SetupInterface( IsGameServer ); } - [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamController_v007", CallingConvention = Platform.CC)] - internal static extern IntPtr SteamAPI_SteamController_v007(); - public override IntPtr GetUserInterfacePointer() => SteamAPI_SteamController_v007(); + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamController_v008", CallingConvention = Platform.CC)] + internal static extern IntPtr SteamAPI_SteamController_v008(); + public override IntPtr GetUserInterfacePointer() => SteamAPI_SteamController_v008(); #region FunctionMeta diff --git a/Facepunch.Steamworks/Generated/Interfaces/ISteamFriends.cs b/Facepunch.Steamworks/Generated/Interfaces/ISteamFriends.cs index 4cdd6d8..eb3538a 100644 --- a/Facepunch.Steamworks/Generated/Interfaces/ISteamFriends.cs +++ b/Facepunch.Steamworks/Generated/Interfaces/ISteamFriends.cs @@ -852,5 +852,15 @@ namespace Steamworks return returnValue; } + #region FunctionMeta + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialogConnectString", CallingConvention = Platform.CC)] + private static extern void _ActivateGameOverlayInviteDialogConnectString( IntPtr self, [MarshalAs( UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof( Utf8StringToNative ) )] string pchConnectString ); + + #endregion + internal void ActivateGameOverlayInviteDialogConnectString( [MarshalAs( UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof( Utf8StringToNative ) )] string pchConnectString ) + { + _ActivateGameOverlayInviteDialogConnectString( Self, pchConnectString ); + } + } } diff --git a/Facepunch.Steamworks/Generated/Interfaces/ISteamInput.cs b/Facepunch.Steamworks/Generated/Interfaces/ISteamInput.cs index 02c1980..e2dac0d 100644 --- a/Facepunch.Steamworks/Generated/Interfaces/ISteamInput.cs +++ b/Facepunch.Steamworks/Generated/Interfaces/ISteamInput.cs @@ -15,9 +15,9 @@ namespace Steamworks SetupInterface( IsGameServer ); } - [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamInput_v001", CallingConvention = Platform.CC)] - internal static extern IntPtr SteamAPI_SteamInput_v001(); - public override IntPtr GetUserInterfacePointer() => SteamAPI_SteamInput_v001(); + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamInput_v002", CallingConvention = Platform.CC)] + internal static extern IntPtr SteamAPI_SteamInput_v002(); + public override IntPtr GetUserInterfacePointer() => SteamAPI_SteamInput_v002(); #region FunctionMeta diff --git a/Facepunch.Steamworks/Generated/Interfaces/ISteamNetworkingMessages.cs b/Facepunch.Steamworks/Generated/Interfaces/ISteamNetworkingMessages.cs index 2033e5c..715c34a 100644 --- a/Facepunch.Steamworks/Generated/Interfaces/ISteamNetworkingMessages.cs +++ b/Facepunch.Steamworks/Generated/Interfaces/ISteamNetworkingMessages.cs @@ -15,12 +15,12 @@ namespace Steamworks SetupInterface( IsGameServer ); } - [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamNetworkingMessages_v002", CallingConvention = Platform.CC)] - internal static extern IntPtr SteamAPI_SteamNetworkingMessages_v002(); - public override IntPtr GetUserInterfacePointer() => SteamAPI_SteamNetworkingMessages_v002(); - [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamGameServerNetworkingMessages_v002", CallingConvention = Platform.CC)] - internal static extern IntPtr SteamAPI_SteamGameServerNetworkingMessages_v002(); - public override IntPtr GetServerInterfacePointer() => SteamAPI_SteamGameServerNetworkingMessages_v002(); + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamNetworkingMessages_SteamAPI_v002", CallingConvention = Platform.CC)] + internal static extern IntPtr SteamAPI_SteamNetworkingMessages_SteamAPI_v002(); + public override IntPtr GetUserInterfacePointer() => SteamAPI_SteamNetworkingMessages_SteamAPI_v002(); + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamGameServerNetworkingMessages_SteamAPI_v002", CallingConvention = Platform.CC)] + internal static extern IntPtr SteamAPI_SteamGameServerNetworkingMessages_SteamAPI_v002(); + public override IntPtr GetServerInterfacePointer() => SteamAPI_SteamGameServerNetworkingMessages_SteamAPI_v002(); #region FunctionMeta diff --git a/Facepunch.Steamworks/Generated/Interfaces/ISteamNetworkingSockets.cs b/Facepunch.Steamworks/Generated/Interfaces/ISteamNetworkingSockets.cs index 61e402e..46e5b17 100644 --- a/Facepunch.Steamworks/Generated/Interfaces/ISteamNetworkingSockets.cs +++ b/Facepunch.Steamworks/Generated/Interfaces/ISteamNetworkingSockets.cs @@ -15,12 +15,12 @@ namespace Steamworks SetupInterface( IsGameServer ); } - [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamNetworkingSockets_v009", CallingConvention = Platform.CC)] - internal static extern IntPtr SteamAPI_SteamNetworkingSockets_v009(); - public override IntPtr GetUserInterfacePointer() => SteamAPI_SteamNetworkingSockets_v009(); - [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamGameServerNetworkingSockets_v009", CallingConvention = Platform.CC)] - internal static extern IntPtr SteamAPI_SteamGameServerNetworkingSockets_v009(); - public override IntPtr GetServerInterfacePointer() => SteamAPI_SteamGameServerNetworkingSockets_v009(); + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamNetworkingSockets_SteamAPI_v009", CallingConvention = Platform.CC)] + internal static extern IntPtr SteamAPI_SteamNetworkingSockets_SteamAPI_v009(); + public override IntPtr GetUserInterfacePointer() => SteamAPI_SteamNetworkingSockets_SteamAPI_v009(); + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamGameServerNetworkingSockets_SteamAPI_v009", CallingConvention = Platform.CC)] + internal static extern IntPtr SteamAPI_SteamGameServerNetworkingSockets_SteamAPI_v009(); + public override IntPtr GetServerInterfacePointer() => SteamAPI_SteamGameServerNetworkingSockets_SteamAPI_v009(); #region FunctionMeta diff --git a/Facepunch.Steamworks/Generated/Interfaces/ISteamNetworkingUtils.cs b/Facepunch.Steamworks/Generated/Interfaces/ISteamNetworkingUtils.cs index 7251479..f1cd609 100644 --- a/Facepunch.Steamworks/Generated/Interfaces/ISteamNetworkingUtils.cs +++ b/Facepunch.Steamworks/Generated/Interfaces/ISteamNetworkingUtils.cs @@ -15,9 +15,9 @@ namespace Steamworks SetupInterface( IsGameServer ); } - [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamNetworkingUtils_v003", CallingConvention = Platform.CC)] - internal static extern IntPtr SteamAPI_SteamNetworkingUtils_v003(); - public override IntPtr GetGlobalInterfacePointer() => SteamAPI_SteamNetworkingUtils_v003(); + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamNetworkingUtils_SteamAPI_v003", CallingConvention = Platform.CC)] + internal static extern IntPtr SteamAPI_SteamNetworkingUtils_SteamAPI_v003(); + public override IntPtr GetGlobalInterfacePointer() => SteamAPI_SteamNetworkingUtils_SteamAPI_v003(); #region FunctionMeta diff --git a/Facepunch.Steamworks/Generated/Interfaces/ISteamUGC.cs b/Facepunch.Steamworks/Generated/Interfaces/ISteamUGC.cs index ab3ece4..0a6d7c2 100644 --- a/Facepunch.Steamworks/Generated/Interfaces/ISteamUGC.cs +++ b/Facepunch.Steamworks/Generated/Interfaces/ISteamUGC.cs @@ -15,12 +15,12 @@ namespace Steamworks SetupInterface( IsGameServer ); } - [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamUGC_v014", CallingConvention = Platform.CC)] - internal static extern IntPtr SteamAPI_SteamUGC_v014(); - public override IntPtr GetUserInterfacePointer() => SteamAPI_SteamUGC_v014(); - [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamGameServerUGC_v014", CallingConvention = Platform.CC)] - internal static extern IntPtr SteamAPI_SteamGameServerUGC_v014(); - public override IntPtr GetServerInterfacePointer() => SteamAPI_SteamGameServerUGC_v014(); + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamUGC_v015", CallingConvention = Platform.CC)] + internal static extern IntPtr SteamAPI_SteamUGC_v015(); + public override IntPtr GetUserInterfacePointer() => SteamAPI_SteamUGC_v015(); + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamGameServerUGC_v015", CallingConvention = Platform.CC)] + internal static extern IntPtr SteamAPI_SteamGameServerUGC_v015(); + public override IntPtr GetServerInterfacePointer() => SteamAPI_SteamGameServerUGC_v015(); #region FunctionMeta @@ -90,6 +90,45 @@ namespace Steamworks return returnValue; } + #region FunctionMeta + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCNumTags", CallingConvention = Platform.CC)] + private static extern uint _GetQueryUGCNumTags( IntPtr self, UGCQueryHandle_t handle, uint index ); + + #endregion + internal uint GetQueryUGCNumTags( UGCQueryHandle_t handle, uint index ) + { + var returnValue = _GetQueryUGCNumTags( Self, handle, index ); + return returnValue; + } + + #region FunctionMeta + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCTag", CallingConvention = Platform.CC)] + [return: MarshalAs( UnmanagedType.I1 )] + private static extern bool _GetQueryUGCTag( IntPtr self, UGCQueryHandle_t handle, uint index, uint indexTag, IntPtr pchValue, uint cchValueSize ); + + #endregion + internal bool GetQueryUGCTag( UGCQueryHandle_t handle, uint index, uint indexTag, out string pchValue ) + { + IntPtr mempchValue = Helpers.TakeMemory(); + var returnValue = _GetQueryUGCTag( Self, handle, index, indexTag, mempchValue, (1024 * 32) ); + pchValue = Helpers.MemoryToString( mempchValue ); + return returnValue; + } + + #region FunctionMeta + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCTagDisplayName", CallingConvention = Platform.CC)] + [return: MarshalAs( UnmanagedType.I1 )] + private static extern bool _GetQueryUGCTagDisplayName( IntPtr self, UGCQueryHandle_t handle, uint index, uint indexTag, IntPtr pchValue, uint cchValueSize ); + + #endregion + internal bool GetQueryUGCTagDisplayName( UGCQueryHandle_t handle, uint index, uint indexTag, out string pchValue ) + { + IntPtr mempchValue = Helpers.TakeMemory(); + var returnValue = _GetQueryUGCTagDisplayName( Self, handle, index, indexTag, mempchValue, (1024 * 32) ); + pchValue = Helpers.MemoryToString( mempchValue ); + return returnValue; + } + #region FunctionMeta [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_ISteamUGC_GetQueryUGCPreviewURL", CallingConvention = Platform.CC)] [return: MarshalAs( UnmanagedType.I1 )] diff --git a/Facepunch.Steamworks/Generated/Interfaces/ISteamUtils.cs b/Facepunch.Steamworks/Generated/Interfaces/ISteamUtils.cs index 30b643e..b1a39b8 100644 --- a/Facepunch.Steamworks/Generated/Interfaces/ISteamUtils.cs +++ b/Facepunch.Steamworks/Generated/Interfaces/ISteamUtils.cs @@ -102,18 +102,6 @@ namespace Steamworks return returnValue; } - #region FunctionMeta - [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_ISteamUtils_GetCSERIPPort", CallingConvention = Platform.CC)] - [return: MarshalAs( UnmanagedType.I1 )] - private static extern bool _GetCSERIPPort( IntPtr self, ref uint unIP, ref ushort usPort ); - - #endregion - internal bool GetCSERIPPort( ref uint unIP, ref ushort usPort ) - { - var returnValue = _GetCSERIPPort( Self, ref unIP, ref usPort ); - return returnValue; - } - #region FunctionMeta [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_ISteamUtils_GetCurrentBatteryPower", CallingConvention = Platform.CC)] private static extern byte _GetCurrentBatteryPower( IntPtr self ); diff --git a/Facepunch.Steamworks/Generated/SteamCallbacks.cs b/Facepunch.Steamworks/Generated/SteamCallbacks.cs index 3e90e34..2275a42 100644 --- a/Facepunch.Steamworks/Generated/SteamCallbacks.cs +++ b/Facepunch.Steamworks/Generated/SteamCallbacks.cs @@ -6,31 +6,6 @@ using System.Threading.Tasks; namespace Steamworks.Data { - [StructLayout( LayoutKind.Sequential, Pack = Platform.StructPlatformPackSize )] - internal struct BroadcastUploadStart_t : ICallbackData - { - [MarshalAs(UnmanagedType.I1)] - internal bool IsRTMP; // m_bIsRTMP bool - - #region SteamCallback - public static int _datasize = System.Runtime.InteropServices.Marshal.SizeOf( typeof(BroadcastUploadStart_t) ); - public int DataSize => _datasize; - public CallbackType CallbackType => CallbackType.BroadcastUploadStart; - #endregion - } - - [StructLayout( LayoutKind.Sequential, Pack = Platform.StructPlatformPackSize )] - internal struct BroadcastUploadStop_t : ICallbackData - { - internal BroadcastUploadResult Result; // m_eResult EBroadcastUploadResult - - #region SteamCallback - public static int _datasize = System.Runtime.InteropServices.Marshal.SizeOf( typeof(BroadcastUploadStop_t) ); - public int DataSize => _datasize; - public CallbackType CallbackType => CallbackType.BroadcastUploadStop; - #endregion - } - [StructLayout( LayoutKind.Sequential, Pack = Platform.StructPlatformPackSize )] internal struct SteamServersConnected_t : ICallbackData { diff --git a/Facepunch.Steamworks/Generated/SteamConstants.cs b/Facepunch.Steamworks/Generated/SteamConstants.cs index 9d03ac4..62c7a2d 100644 --- a/Facepunch.Steamworks/Generated/SteamConstants.cs +++ b/Facepunch.Steamworks/Generated/SteamConstants.cs @@ -97,13 +97,6 @@ namespace Steamworks.Data internal static readonly int k_nSteamNetworkingConfig_P2P_Transport_ICE_Enable_Public = 4; internal static readonly int k_nSteamNetworkingConfig_P2P_Transport_ICE_Enable_All = 0x7fffffff; internal static readonly SteamNetworkingPOPID k_SteamDatagramPOPID_dev = ( ( uint ) 'd' << 16 ) | ( ( uint ) 'e' << 8 ) | ( uint ) 'v'; - internal static readonly uint k_unServerFlagNone = 0x00; - internal static readonly uint k_unServerFlagActive = 0x01; - internal static readonly uint k_unServerFlagSecure = 0x02; - internal static readonly uint k_unServerFlagDedicated = 0x04; - internal static readonly uint k_unServerFlagLinux = 0x08; - internal static readonly uint k_unServerFlagPassworded = 0x10; - internal static readonly uint k_unServerFlagPrivate = 0x20; internal static readonly uint k_cbSteamDatagramMaxSerializedTicket = 512; internal static readonly uint k_cbMaxSteamDatagramGameCoordinatorServerLoginAppData = 2048; internal static readonly uint k_cbMaxSteamDatagramGameCoordinatorServerLoginSerialized = 4096; diff --git a/Facepunch.Steamworks/Generated/SteamEnums.cs b/Facepunch.Steamworks/Generated/SteamEnums.cs index c3fb41f..329672c 100644 --- a/Facepunch.Steamworks/Generated/SteamEnums.cs +++ b/Facepunch.Steamworks/Generated/SteamEnums.cs @@ -149,6 +149,9 @@ namespace Steamworks AccountDeleted = 114, ExistingUserCancelledLicense = 115, CommunityCooldown = 116, + NoLauncherSpecified = 117, + MustAgreeToSSA = 118, + LauncherMigrated = 119, } // @@ -316,7 +319,7 @@ namespace Steamworks Comic_UNUSED = 32768, Beta = 65536, Shortcut = 1073741824, - DepotOnly = -2147483648, + DepotOnly_DEPRECATED = -2147483648, } // @@ -489,6 +492,7 @@ namespace Steamworks MDType_HP_Unknown = 80, MDType_HP_WindowsMR = 81, MDType_HP_Reverb = 82, + MDType_HP_ReverbG2 = 1463, MDType_Samsung_Unknown = 90, MDType_Samsung_Odyssey = 91, MDType_Unannounced_Unknown = 100, @@ -1002,10 +1006,10 @@ namespace Steamworks public enum P2PSessionError : int { None = 0, - NotRunningApp = 1, NoRightsToApp = 2, - DestinationNotLoggedIn = 3, Timeout = 4, + NotRunningApp_DELETED = 1, + DestinationNotLoggedIn_DELETED = 3, Max = 5, } @@ -1404,7 +1408,82 @@ namespace Steamworks Switch_Reserved18 = 255, Switch_Reserved19 = 256, Switch_Reserved20 = 257, - Count = 258, + PS5_X = 258, + PS5_Circle = 259, + PS5_Triangle = 260, + PS5_Square = 261, + PS5_LeftBumper = 262, + PS5_RightBumper = 263, + PS5_Option = 264, + PS5_Create = 265, + PS5_Mute = 266, + PS5_LeftPad_Touch = 267, + PS5_LeftPad_Swipe = 268, + PS5_LeftPad_Click = 269, + PS5_LeftPad_DPadNorth = 270, + PS5_LeftPad_DPadSouth = 271, + PS5_LeftPad_DPadWest = 272, + PS5_LeftPad_DPadEast = 273, + PS5_RightPad_Touch = 274, + PS5_RightPad_Swipe = 275, + PS5_RightPad_Click = 276, + PS5_RightPad_DPadNorth = 277, + PS5_RightPad_DPadSouth = 278, + PS5_RightPad_DPadWest = 279, + PS5_RightPad_DPadEast = 280, + PS5_CenterPad_Touch = 281, + PS5_CenterPad_Swipe = 282, + PS5_CenterPad_Click = 283, + PS5_CenterPad_DPadNorth = 284, + PS5_CenterPad_DPadSouth = 285, + PS5_CenterPad_DPadWest = 286, + PS5_CenterPad_DPadEast = 287, + PS5_LeftTrigger_Pull = 288, + PS5_LeftTrigger_Click = 289, + PS5_RightTrigger_Pull = 290, + PS5_RightTrigger_Click = 291, + PS5_LeftStick_Move = 292, + PS5_LeftStick_Click = 293, + PS5_LeftStick_DPadNorth = 294, + PS5_LeftStick_DPadSouth = 295, + PS5_LeftStick_DPadWest = 296, + PS5_LeftStick_DPadEast = 297, + PS5_RightStick_Move = 298, + PS5_RightStick_Click = 299, + PS5_RightStick_DPadNorth = 300, + PS5_RightStick_DPadSouth = 301, + PS5_RightStick_DPadWest = 302, + PS5_RightStick_DPadEast = 303, + PS5_DPad_North = 304, + PS5_DPad_South = 305, + PS5_DPad_West = 306, + PS5_DPad_East = 307, + PS5_Gyro_Move = 308, + PS5_Gyro_Pitch = 309, + PS5_Gyro_Yaw = 310, + PS5_Gyro_Roll = 311, + PS5_DPad_Move = 312, + PS5_Reserved1 = 313, + PS5_Reserved2 = 314, + PS5_Reserved3 = 315, + PS5_Reserved4 = 316, + PS5_Reserved5 = 317, + PS5_Reserved6 = 318, + PS5_Reserved7 = 319, + PS5_Reserved8 = 320, + PS5_Reserved9 = 321, + PS5_Reserved10 = 322, + PS5_Reserved11 = 323, + PS5_Reserved12 = 324, + PS5_Reserved13 = 325, + PS5_Reserved14 = 326, + PS5_Reserved15 = 327, + PS5_Reserved16 = 328, + PS5_Reserved17 = 329, + PS5_Reserved18 = 330, + PS5_Reserved19 = 331, + PS5_Reserved20 = 332, + Count = 333, MaximumPossibleValue = 32767, } @@ -1471,7 +1550,8 @@ namespace Steamworks SwitchProController = 10, MobileTouch = 11, PS3Controller = 12, - Count = 13, + PS5Controller = 13, + Count = 14, MaximumPossibleValue = 255, } @@ -1734,7 +1814,62 @@ namespace Steamworks XBoxOne_DPad_Move = 242, XBox360_DPad_Move = 243, Switch_DPad_Move = 244, - Count = 245, + PS5_X = 245, + PS5_Circle = 246, + PS5_Triangle = 247, + PS5_Square = 248, + PS5_LeftBumper = 249, + PS5_RightBumper = 250, + PS5_Option = 251, + PS5_Create = 252, + PS5_Mute = 253, + PS5_LeftPad_Touch = 254, + PS5_LeftPad_Swipe = 255, + PS5_LeftPad_Click = 256, + PS5_LeftPad_DPadNorth = 257, + PS5_LeftPad_DPadSouth = 258, + PS5_LeftPad_DPadWest = 259, + PS5_LeftPad_DPadEast = 260, + PS5_RightPad_Touch = 261, + PS5_RightPad_Swipe = 262, + PS5_RightPad_Click = 263, + PS5_RightPad_DPadNorth = 264, + PS5_RightPad_DPadSouth = 265, + PS5_RightPad_DPadWest = 266, + PS5_RightPad_DPadEast = 267, + PS5_CenterPad_Touch = 268, + PS5_CenterPad_Swipe = 269, + PS5_CenterPad_Click = 270, + PS5_CenterPad_DPadNorth = 271, + PS5_CenterPad_DPadSouth = 272, + PS5_CenterPad_DPadWest = 273, + PS5_CenterPad_DPadEast = 274, + PS5_LeftTrigger_Pull = 275, + PS5_LeftTrigger_Click = 276, + PS5_RightTrigger_Pull = 277, + PS5_RightTrigger_Click = 278, + PS5_LeftStick_Move = 279, + PS5_LeftStick_Click = 280, + PS5_LeftStick_DPadNorth = 281, + PS5_LeftStick_DPadSouth = 282, + PS5_LeftStick_DPadWest = 283, + PS5_LeftStick_DPadEast = 284, + PS5_RightStick_Move = 285, + PS5_RightStick_Click = 286, + PS5_RightStick_DPadNorth = 287, + PS5_RightStick_DPadSouth = 288, + PS5_RightStick_DPadWest = 289, + PS5_RightStick_DPadEast = 290, + PS5_DPad_Move = 291, + PS5_DPad_North = 292, + PS5_DPad_South = 293, + PS5_DPad_West = 294, + PS5_DPad_East = 295, + PS5_Gyro_Move = 296, + PS5_Gyro_Pitch = 297, + PS5_Gyro_Yaw = 298, + PS5_Gyro_Roll = 299, + Count = 300, MaximumPossibleValue = 32767, } @@ -1953,6 +2088,8 @@ namespace Steamworks Invalid = 0, SteamID = 16, XboxPairwiseID = 17, + SonyPSN = 18, + GoogleStadia = 19, IPAddress = 1, GenericString = 2, GenericBytes = 3, @@ -2090,6 +2227,7 @@ namespace Steamworks Callback_RelayNetworkStatusChanged = 203, Callback_MessagesSessionRequest = 204, Callback_MessagesSessionFailed = 205, + Callback_CreateConnectionSignaling = 206, P2P_STUN_ServerList = 103, P2P_Transport_ICE_Enable = 104, P2P_Transport_ICE_Penalty = 105, diff --git a/Facepunch.Steamworks/Generated/SteamStructFunctions.cs b/Facepunch.Steamworks/Generated/SteamStructFunctions.cs index a1c1147..e816d4e 100644 --- a/Facepunch.Steamworks/Generated/SteamStructFunctions.cs +++ b/Facepunch.Steamworks/Generated/SteamStructFunctions.cs @@ -135,6 +135,18 @@ namespace Steamworks.Data [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamNetworkingIdentity_GetXboxPairwiseID", CallingConvention = Platform.CC)] internal static extern Utf8StringPointer InternalGetXboxPairwiseID( ref NetIdentity self ); + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamNetworkingIdentity_SetPSNID", CallingConvention = Platform.CC)] + internal static extern void InternalSetPSNID( ref NetIdentity self, ulong id ); + + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamNetworkingIdentity_GetPSNID", CallingConvention = Platform.CC)] + internal static extern ulong InternalGetPSNID( ref NetIdentity self ); + + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamNetworkingIdentity_SetStadiaID", CallingConvention = Platform.CC)] + internal static extern void InternalSetStadiaID( ref NetIdentity self, ulong id ); + + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamNetworkingIdentity_GetStadiaID", CallingConvention = Platform.CC)] + internal static extern ulong InternalGetStadiaID( ref NetIdentity self ); + [DllImport( Platform.LibraryName, EntryPoint = "SteamAPI_SteamNetworkingIdentity_SetIPAddr", CallingConvention = Platform.CC)] internal static extern void InternalSetIPAddr( ref NetIdentity self, ref NetAddress addr ); diff --git a/Facepunch.Steamworks/SteamVideo.cs b/Facepunch.Steamworks/SteamVideo.cs index c6eaf43..ac578d3 100644 --- a/Facepunch.Steamworks/SteamVideo.cs +++ b/Facepunch.Steamworks/SteamVideo.cs @@ -22,13 +22,8 @@ namespace Steamworks internal static void InstallEvents() { - Dispatch.Install( x => OnBroadcastStarted?.Invoke() ); - Dispatch.Install( x => OnBroadcastStopped?.Invoke( x.Result ) ); } - public static event Action OnBroadcastStarted; - public static event Action OnBroadcastStopped; - /// /// Return true if currently using Steam's live broadcasting /// diff --git a/Facepunch.Steamworks/steam_api.dll b/Facepunch.Steamworks/steam_api.dll index a3a661afc2974f027d14e4b736bc54d427e22542..8fb32b4c1c2c8527bcc404e4bc9cd06de1cd7860 100644 GIT binary patch delta 18313 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 delta 17906 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 WRqpUZ<3F1jy)<{zjS;P!@BSZJjNNSj diff --git a/Facepunch.Steamworks/steam_api64.dll b/Facepunch.Steamworks/steam_api64.dll index 2fc976a1d052079a36468129eb3bfb9fad877bca..c6e55cf6aa51e47aec5abc6ad2661bee47200a59 100644 GIT binary patch delta 40165 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 Hm4*Ke%bobN delta 39849 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%0AA_v1mdgx}(Fv&|{`NQvLe9oR zPpE|s#%YjFx%h)T7Ld%hR%&maRPPI6c=ai^1m%gRIR5#<$=YMuhL3@)WgcFU&stI` z0UrS=&&9Sgyth*>z6{da%W%aH7Hz@>4qbe^fL%kb!tOt+EM8d1!ciWJBhJ%@E*R_^ z!q6gS%rAoRgJRCxWao<(trQ-T%kaz+b`zg&qw#`EY*L<-i^ctZqoa}oaS_N_vKTjX zsP_doTyupj#C#s&56jeU3dKJOE zvOMA+$t5+hJhERw7Rz(_lEv~IzKw>(^4z_Yi{$}(E1wm_6G6(w^3Z%S<>Kn+4D}0n za{dJ`mBpRSEFNrT@pvzg7MGh@{KU*+d9c>{lk$9WGntV*IhzWS#qaYK(G!mF zoxb`kyZcrrXS-Xe{%bwoF8=1#vKn90hr4;Y+)2OHuGho*uU@Iy*1Ntj_~hBW`?BWU(I-D=T-^BR z(yGR1W(D=XxnuoX9^>}+AAa2T>3R)bUJ|&Z`f0vR{VC0PA%B>B6560c%M0DzjvwCk z@xXnnuJ79xvc6+s(VxYyCG;Lt^uXusw-y&!TRd*<*>cm0!#&S;dF3BHFGcqJg3Ij5 z`nzR2*EN~f=ZBYOWPY;DrOCv&>hUcPjULq`F?*fy{>w$%Z;d*AZo}xV2UE@+jQ_5m zckhNF`#Ut+efid@&+b)!8QN_|M5is;QzC*c?0D+8!iC9Ut!?_(t;VE$<~McL`)&)y zf0wr6&cw**h4%_;#?JKW{$Z{^ZuK*I&BQ zzVwGj;hxj~mrXfiyYKhKi#y%QnKozk^e(q<)T}%5ic^!(?^!(-ef9MVz5Q=SENrlC zPjqVTp;?_*#1D<0{II4)+6&o{jcuz|8(lUGKXNZ^h>PdduB+eTDYY<}-yGN%%bH5AWq|y^%HT`o^Vgr*|uL zoS9;Ed;Qn${qA18)$qsa=Vv+1D~+7A+tMc_p;uA*-tIeI`Fq8py|21->lNwMZc{?9 l0fWP*9GE|^)BSTshDQraa>EyHUp^X`;?&mjV7<4O{WpDjMV|lw diff --git a/Generator/steam_sdk/isteamapplist.h b/Generator/steam_sdk/isteamapplist.h index 45441bb..ae018ad 100644 --- a/Generator/steam_sdk/isteamapplist.h +++ b/Generator/steam_sdk/isteamapplist.h @@ -50,7 +50,7 @@ STEAM_DEFINE_USER_INTERFACE_ACCESSOR( ISteamAppList *, SteamAppList, STEAMAPPLIS //--------------------------------------------------------------------------------- // Purpose: Sent when a new app is installed //--------------------------------------------------------------------------------- -STEAM_CALLBACK_BEGIN( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 ); +STEAM_CALLBACK_BEGIN( SteamAppInstalled_t, k_iSteamAppListCallbacks + 1 ) STEAM_CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs STEAM_CALLBACK_END(1) @@ -58,7 +58,7 @@ STEAM_CALLBACK_END(1) //--------------------------------------------------------------------------------- // Purpose: Sent when an app is uninstalled //--------------------------------------------------------------------------------- -STEAM_CALLBACK_BEGIN( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 ); +STEAM_CALLBACK_BEGIN( SteamAppUninstalled_t, k_iSteamAppListCallbacks + 2 ) STEAM_CALLBACK_MEMBER( 0, AppId_t, m_nAppID ) // ID of the app that installs STEAM_CALLBACK_END(1) diff --git a/Generator/steam_sdk/isteamcontroller.h b/Generator/steam_sdk/isteamcontroller.h index c332749..2c5414b 100644 --- a/Generator/steam_sdk/isteamcontroller.h +++ b/Generator/steam_sdk/isteamcontroller.h @@ -310,6 +310,64 @@ enum EControllerActionOrigin k_EControllerActionOrigin_XBox360_DPad_Move, k_EControllerActionOrigin_Switch_DPad_Move, + // Added in SDK 1.51 + k_EControllerActionOrigin_PS5_X, + k_EControllerActionOrigin_PS5_Circle, + k_EControllerActionOrigin_PS5_Triangle, + k_EControllerActionOrigin_PS5_Square, + k_EControllerActionOrigin_PS5_LeftBumper, + k_EControllerActionOrigin_PS5_RightBumper, + k_EControllerActionOrigin_PS5_Option, //Start + k_EControllerActionOrigin_PS5_Create, //Back + k_EControllerActionOrigin_PS5_Mute, + k_EControllerActionOrigin_PS5_LeftPad_Touch, + k_EControllerActionOrigin_PS5_LeftPad_Swipe, + k_EControllerActionOrigin_PS5_LeftPad_Click, + k_EControllerActionOrigin_PS5_LeftPad_DPadNorth, + k_EControllerActionOrigin_PS5_LeftPad_DPadSouth, + k_EControllerActionOrigin_PS5_LeftPad_DPadWest, + k_EControllerActionOrigin_PS5_LeftPad_DPadEast, + k_EControllerActionOrigin_PS5_RightPad_Touch, + k_EControllerActionOrigin_PS5_RightPad_Swipe, + k_EControllerActionOrigin_PS5_RightPad_Click, + k_EControllerActionOrigin_PS5_RightPad_DPadNorth, + k_EControllerActionOrigin_PS5_RightPad_DPadSouth, + k_EControllerActionOrigin_PS5_RightPad_DPadWest, + k_EControllerActionOrigin_PS5_RightPad_DPadEast, + k_EControllerActionOrigin_PS5_CenterPad_Touch, + k_EControllerActionOrigin_PS5_CenterPad_Swipe, + k_EControllerActionOrigin_PS5_CenterPad_Click, + k_EControllerActionOrigin_PS5_CenterPad_DPadNorth, + k_EControllerActionOrigin_PS5_CenterPad_DPadSouth, + k_EControllerActionOrigin_PS5_CenterPad_DPadWest, + k_EControllerActionOrigin_PS5_CenterPad_DPadEast, + k_EControllerActionOrigin_PS5_LeftTrigger_Pull, + k_EControllerActionOrigin_PS5_LeftTrigger_Click, + k_EControllerActionOrigin_PS5_RightTrigger_Pull, + k_EControllerActionOrigin_PS5_RightTrigger_Click, + k_EControllerActionOrigin_PS5_LeftStick_Move, + k_EControllerActionOrigin_PS5_LeftStick_Click, + k_EControllerActionOrigin_PS5_LeftStick_DPadNorth, + k_EControllerActionOrigin_PS5_LeftStick_DPadSouth, + k_EControllerActionOrigin_PS5_LeftStick_DPadWest, + k_EControllerActionOrigin_PS5_LeftStick_DPadEast, + k_EControllerActionOrigin_PS5_RightStick_Move, + k_EControllerActionOrigin_PS5_RightStick_Click, + k_EControllerActionOrigin_PS5_RightStick_DPadNorth, + k_EControllerActionOrigin_PS5_RightStick_DPadSouth, + k_EControllerActionOrigin_PS5_RightStick_DPadWest, + k_EControllerActionOrigin_PS5_RightStick_DPadEast, + k_EControllerActionOrigin_PS5_DPad_Move, + k_EControllerActionOrigin_PS5_DPad_North, + k_EControllerActionOrigin_PS5_DPad_South, + k_EControllerActionOrigin_PS5_DPad_West, + k_EControllerActionOrigin_PS5_DPad_East, + k_EControllerActionOrigin_PS5_Gyro_Move, + k_EControllerActionOrigin_PS5_Gyro_Pitch, + k_EControllerActionOrigin_PS5_Gyro_Yaw, + k_EControllerActionOrigin_PS5_Gyro_Roll, + + k_EControllerActionOrigin_Count, // If Steam has added support for new controllers origins will go here. k_EControllerActionOrigin_MaximumPossibleValue = 32767, // Origins are currently a maximum of 16 bits. }; @@ -362,6 +420,7 @@ enum ESteamInputType k_ESteamInputType_SwitchProController, k_ESteamInputType_MobileTouch, // Steam Link App On-screen Virtual Controller k_ESteamInputType_PS3Controller, // Currently uses PS4 Origins + k_ESteamInputType_PS5Controller, // Added in SDK 151 k_ESteamInputType_Count, k_ESteamInputType_MaximumPossibleValue = 255, }; @@ -540,7 +599,8 @@ public: // If the user is not in Big Picture Mode it will open up the binding in a new window virtual bool ShowBindingPanel( ControllerHandle_t controllerHandle ) = 0; - // Returns the input type for a particular handle + // Returns the input type for a particular handle - unlike EControllerActionOrigin which update with Steam and may return unrecognized values + // ESteamInputType will remain static and only return valid values from your SDK version virtual ESteamInputType GetInputTypeForHandle( ControllerHandle_t controllerHandle ) = 0; // Returns the associated controller handle for the specified emulated gamepad - can be used with the above 2 functions @@ -567,7 +627,7 @@ public: virtual bool GetControllerBindingRevision( ControllerHandle_t controllerHandle, int *pMajor, int *pMinor ) = 0; }; -#define STEAMCONTROLLER_INTERFACE_VERSION "SteamController007" +#define STEAMCONTROLLER_INTERFACE_VERSION "SteamController008" // Global interface accessor inline ISteamController *SteamController(); diff --git a/Generator/steam_sdk/isteamfriends.h b/Generator/steam_sdk/isteamfriends.h index 520a67f..b7ebc73 100644 --- a/Generator/steam_sdk/isteamfriends.h +++ b/Generator/steam_sdk/isteamfriends.h @@ -358,7 +358,7 @@ public: // Rich invite support. // If the target accepts the invite, a GameRichPresenceJoinRequested_t callback is posted containing the connect string. - // (Or you can configure yout game so that it is passed on the command line instead. This is a deprecated path; ask us if you really need this.) + // (Or you can configure your game so that it is passed on the command line instead. This is a deprecated path; ask us if you really need this.) virtual bool InviteUserToGame( CSteamID steamIDFriend, const char *pchConnectString ) = 0; // recently-played-with friends iteration @@ -419,6 +419,9 @@ public: // to your specified protocol (scheme) uris and instead dispatch a OverlayBrowserProtocolNavigation_t callback to your game. // ActivateGameOverlayToWebPage() must have been called with k_EActivateGameOverlayToWebPageMode_Modal virtual bool RegisterProtocolInOverlayBrowser( const char *pchProtocol ) = 0; + + // Activates the game overlay to open an invite dialog that will send the provided Rich Presence connect string to selected friends + virtual void ActivateGameOverlayInviteDialogConnectString( const char *pchConnectString ) = 0; }; #define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends017" diff --git a/Generator/steam_sdk/isteamgameserver.h b/Generator/steam_sdk/isteamgameserver.h index 8fbd9da..612ef3d 100644 --- a/Generator/steam_sdk/isteamgameserver.h +++ b/Generator/steam_sdk/isteamgameserver.h @@ -12,8 +12,6 @@ #include "steam_api_common.h" -#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1) - //----------------------------------------------------------------------------- // Purpose: Functions for authenticating users via Steam to play on a game server //----------------------------------------------------------------------------- @@ -256,19 +254,6 @@ public: inline ISteamGameServer *SteamGameServer(); STEAM_DEFINE_GAMESERVER_INTERFACE_ACCESSOR( ISteamGameServer *, SteamGameServer, STEAMGAMESERVER_INTERFACE_VERSION ); -// game server flags -const uint32 k_unServerFlagNone = 0x00; -const uint32 k_unServerFlagActive = 0x01; // server has users playing -const uint32 k_unServerFlagSecure = 0x02; // server wants to be secure -const uint32 k_unServerFlagDedicated = 0x04; // server is dedicated -const uint32 k_unServerFlagLinux = 0x08; // linux build -const uint32 k_unServerFlagPassworded = 0x10; // password protected -const uint32 k_unServerFlagPrivate = 0x20; // server shouldn't list on master server and - // won't enforce authentication of users that connect to the server. - // Useful when you run a server where the clients may not - // be connected to the internet but you want them to play (i.e LANs) - - // callbacks #if defined( VALVE_CALLBACK_PACK_SMALL ) #pragma pack( push, 4 ) diff --git a/Generator/steam_sdk/isteaminput.h b/Generator/steam_sdk/isteaminput.h index 84f1b14..66c385b 100644 --- a/Generator/steam_sdk/isteaminput.h +++ b/Generator/steam_sdk/isteaminput.h @@ -329,6 +329,83 @@ enum EInputActionOrigin k_EInputActionOrigin_Switch_Reserved18, k_EInputActionOrigin_Switch_Reserved19, k_EInputActionOrigin_Switch_Reserved20, + + // Added in SDK 1.51 + k_EInputActionOrigin_PS5_X, + k_EInputActionOrigin_PS5_Circle, + k_EInputActionOrigin_PS5_Triangle, + k_EInputActionOrigin_PS5_Square, + k_EInputActionOrigin_PS5_LeftBumper, + k_EInputActionOrigin_PS5_RightBumper, + k_EInputActionOrigin_PS5_Option, //Start + k_EInputActionOrigin_PS5_Create, //Back + k_EInputActionOrigin_PS5_Mute, + k_EInputActionOrigin_PS5_LeftPad_Touch, + k_EInputActionOrigin_PS5_LeftPad_Swipe, + k_EInputActionOrigin_PS5_LeftPad_Click, + k_EInputActionOrigin_PS5_LeftPad_DPadNorth, + k_EInputActionOrigin_PS5_LeftPad_DPadSouth, + k_EInputActionOrigin_PS5_LeftPad_DPadWest, + k_EInputActionOrigin_PS5_LeftPad_DPadEast, + k_EInputActionOrigin_PS5_RightPad_Touch, + k_EInputActionOrigin_PS5_RightPad_Swipe, + k_EInputActionOrigin_PS5_RightPad_Click, + k_EInputActionOrigin_PS5_RightPad_DPadNorth, + k_EInputActionOrigin_PS5_RightPad_DPadSouth, + k_EInputActionOrigin_PS5_RightPad_DPadWest, + k_EInputActionOrigin_PS5_RightPad_DPadEast, + k_EInputActionOrigin_PS5_CenterPad_Touch, + k_EInputActionOrigin_PS5_CenterPad_Swipe, + k_EInputActionOrigin_PS5_CenterPad_Click, + k_EInputActionOrigin_PS5_CenterPad_DPadNorth, + k_EInputActionOrigin_PS5_CenterPad_DPadSouth, + k_EInputActionOrigin_PS5_CenterPad_DPadWest, + k_EInputActionOrigin_PS5_CenterPad_DPadEast, + k_EInputActionOrigin_PS5_LeftTrigger_Pull, + k_EInputActionOrigin_PS5_LeftTrigger_Click, + k_EInputActionOrigin_PS5_RightTrigger_Pull, + k_EInputActionOrigin_PS5_RightTrigger_Click, + k_EInputActionOrigin_PS5_LeftStick_Move, + k_EInputActionOrigin_PS5_LeftStick_Click, + k_EInputActionOrigin_PS5_LeftStick_DPadNorth, + k_EInputActionOrigin_PS5_LeftStick_DPadSouth, + k_EInputActionOrigin_PS5_LeftStick_DPadWest, + k_EInputActionOrigin_PS5_LeftStick_DPadEast, + k_EInputActionOrigin_PS5_RightStick_Move, + k_EInputActionOrigin_PS5_RightStick_Click, + k_EInputActionOrigin_PS5_RightStick_DPadNorth, + k_EInputActionOrigin_PS5_RightStick_DPadSouth, + k_EInputActionOrigin_PS5_RightStick_DPadWest, + k_EInputActionOrigin_PS5_RightStick_DPadEast, + k_EInputActionOrigin_PS5_DPad_North, + k_EInputActionOrigin_PS5_DPad_South, + k_EInputActionOrigin_PS5_DPad_West, + k_EInputActionOrigin_PS5_DPad_East, + k_EInputActionOrigin_PS5_Gyro_Move, + k_EInputActionOrigin_PS5_Gyro_Pitch, + k_EInputActionOrigin_PS5_Gyro_Yaw, + k_EInputActionOrigin_PS5_Gyro_Roll, + k_EInputActionOrigin_PS5_DPad_Move, + k_EInputActionOrigin_PS5_Reserved1, + k_EInputActionOrigin_PS5_Reserved2, + k_EInputActionOrigin_PS5_Reserved3, + k_EInputActionOrigin_PS5_Reserved4, + k_EInputActionOrigin_PS5_Reserved5, + k_EInputActionOrigin_PS5_Reserved6, + k_EInputActionOrigin_PS5_Reserved7, + k_EInputActionOrigin_PS5_Reserved8, + k_EInputActionOrigin_PS5_Reserved9, + k_EInputActionOrigin_PS5_Reserved10, + k_EInputActionOrigin_PS5_Reserved11, + k_EInputActionOrigin_PS5_Reserved12, + k_EInputActionOrigin_PS5_Reserved13, + k_EInputActionOrigin_PS5_Reserved14, + k_EInputActionOrigin_PS5_Reserved15, + k_EInputActionOrigin_PS5_Reserved16, + k_EInputActionOrigin_PS5_Reserved17, + k_EInputActionOrigin_PS5_Reserved18, + k_EInputActionOrigin_PS5_Reserved19, + k_EInputActionOrigin_PS5_Reserved20, k_EInputActionOrigin_Count, // If Steam has added support for new controllers origins will go here. k_EInputActionOrigin_MaximumPossibleValue = 32767, // Origins are currently a maximum of 16 bits. @@ -388,6 +465,7 @@ enum ESteamInputType k_ESteamInputType_SwitchProController, k_ESteamInputType_MobileTouch, // Steam Link App On-screen Virtual Controller k_ESteamInputType_PS3Controller, // Currently uses PS4 Origins + k_ESteamInputType_PS5Controller, // Added in SDK 151 k_ESteamInputType_Count, k_ESteamInputType_MaximumPossibleValue = 255, }; @@ -567,7 +645,8 @@ public: // If the user is not in Big Picture Mode it will open up the binding in a new window virtual bool ShowBindingPanel( InputHandle_t inputHandle ) = 0; - // Returns the input type for a particular handle + // Returns the input type for a particular handle - unlike EInputActionOrigin which update with Steam and may return unrecognized values + // ESteamInputType will remain static and only return valid values from your SDK version virtual ESteamInputType GetInputTypeForHandle( InputHandle_t inputHandle ) = 0; // Returns the associated controller handle for the specified emulated gamepad - can be used with the above 2 functions @@ -600,10 +679,10 @@ public: virtual uint32 GetRemotePlaySessionID( InputHandle_t inputHandle ) = 0; }; -#define STEAMINPUT_INTERFACE_VERSION "SteamInput001" +#define STEAMINPUT_INTERFACE_VERSION "SteamInput002" // Global interface accessor inline ISteamInput *SteamInput(); STEAM_DEFINE_USER_INTERFACE_ACCESSOR( ISteamInput *, SteamInput, STEAMINPUT_INTERFACE_VERSION ); -#endif // ISTEAMINPUT_H +#endif // ISTEAMINPUT_H \ No newline at end of file diff --git a/Generator/steam_sdk/isteamnetworking.h b/Generator/steam_sdk/isteamnetworking.h index 2f14d27..b7e077a 100644 --- a/Generator/steam_sdk/isteamnetworking.h +++ b/Generator/steam_sdk/isteamnetworking.h @@ -17,12 +17,16 @@ enum EP2PSessionError { k_EP2PSessionErrorNone = 0, - k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running - k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser() // corporate firewalls can also block this (NAT traversal is not firewall traversal) // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction + + // The following error codes were removed and will never be sent. + // For privacy reasons, there is no reply if the user is offline or playing another game. + k_EP2PSessionErrorNotRunningApp_DELETED = 1, + k_EP2PSessionErrorDestinationNotLoggedIn_DELETED = 3, + k_EP2PSessionErrorMax = 5 }; diff --git a/Generator/steam_sdk/isteamnetworkingmessages.h b/Generator/steam_sdk/isteamnetworkingmessages.h index a23a386..a12a32f 100644 --- a/Generator/steam_sdk/isteamnetworkingmessages.h +++ b/Generator/steam_sdk/isteamnetworkingmessages.h @@ -5,6 +5,7 @@ #pragma once #include "steamnetworkingtypes.h" +#include "steam_api_common.h" //----------------------------------------------------------------------------- /// The non-connection-oriented interface to send and receive messages @@ -56,7 +57,7 @@ public: /// /// It is guaranteed that reliable messages to the same host on the same channel /// will be be received by the remote host (if they are received at all) exactly once, - /// and in the same order that they were send. + /// and in the same order that they were sent. /// /// NO other order guarantees exist! In particular, unreliable messages may be dropped, /// received out of order with respect to each other and with respect to reliable data, @@ -73,52 +74,55 @@ public: /// Returns: /// - k_EREsultOK on success. /// - k_EResultNoConnection will be returned if the session has failed or was closed by the peer, - /// and k_nSteamNetworkingSend_AutoRestartBrokwnSession is not used. (You can use + /// and k_nSteamNetworkingSend_AutoRestartBrokenSession is not used. (You can use /// GetSessionConnectionInfo to get the details.) In order to acknowledge the broken session /// and start a new one, you must call CloseSessionWithUser - /// - See SendMessageToConnection::SendMessageToConnection for more + /// - See ISteamNetworkingSockets::SendMessageToConnection for more possible return values virtual EResult SendMessageToUser( const SteamNetworkingIdentity &identityRemote, const void *pubData, uint32 cubData, int nSendFlags, int nRemoteChannel ) = 0; /// Reads the next message that has been sent from another user via SendMessageToUser() on the given channel. /// Returns number of messages returned into your list. (0 if no message are available on that channel.) /// - /// When you're done with the message object(s), make sure and call Release()! + /// When you're done with the message object(s), make sure and call SteamNetworkingMessage_t::Release()! virtual int ReceiveMessagesOnChannel( int nLocalChannel, SteamNetworkingMessage_t **ppOutMessages, int nMaxMessages ) = 0; - /// AcceptSessionWithUser() should only be called in response to a SteamP2PSessionRequest_t callback - /// SteamP2PSessionRequest_t will be posted if another user tries to send you a message, and you haven't - /// tried to talk to them. If you don't want to talk to them, just ignore the request. - /// If the user continues to send you messages, SteamP2PSessionRequest_t callbacks will continue to - /// be posted periodically. This may be called multiple times for a single user. + /// Call this in response to a SteamNetworkingMessagesSessionRequest_t callback. + /// SteamNetworkingMessagesSessionRequest_t are posted when a user tries to send you a message, + /// and you haven't tried to talk to them first. If you don't want to talk to them, just ignore + /// the request. If the user continues to send you messages, SteamNetworkingMessagesSessionRequest_t + /// callbacks will continue to be posted periodically. /// - /// Calling SendMessage() on the other user, this implicitly accepts any pending session request. + /// Returns false if there is no session with the user pending or otherwise. If there is an + /// existing active session, this function will return true, even if it is not pending. + /// + /// Calling SendMessageToUser() will implicitly accepts any pending session request to that user. virtual bool AcceptSessionWithUser( const SteamNetworkingIdentity &identityRemote ) = 0; /// Call this when you're done talking to a user to immediately free up resources under-the-hood. - /// If the remote user tries to send data to you again, another P2PSessionRequest_t callback will - /// be posted. + /// If the remote user tries to send data to you again, another SteamNetworkingMessagesSessionRequest_t + /// callback will be posted. /// /// Note that sessions that go unused for a few minutes are automatically timed out. virtual bool CloseSessionWithUser( const SteamNetworkingIdentity &identityRemote ) = 0; /// Call this when you're done talking to a user on a specific channel. Once all /// open channels to a user have been closed, the open session to the user will be - /// closed, and any new data from this user will trigger a SteamP2PSessionRequest_t - /// callback + /// closed, and any new data from this user will trigger a + /// SteamSteamNetworkingMessagesSessionRequest_t callback virtual bool CloseChannelWithUser( const SteamNetworkingIdentity &identityRemote, int nLocalChannel ) = 0; /// Returns information about the latest state of a connection, if any, with the given peer. /// Primarily intended for debugging purposes, but can also be used to get more detailed - /// failure information. (See SendMessageToUser and k_nSteamNetworkingSend_AutoRestartBrokwnSession.) + /// failure information. (See SendMessageToUser and k_nSteamNetworkingSend_AutoRestartBrokenSession.) /// /// Returns the value of SteamNetConnectionInfo_t::m_eState, or k_ESteamNetworkingConnectionState_None /// if no connection exists with specified peer. You may pass nullptr for either parameter if /// you do not need the corresponding details. Note that sessions time out after a while, - /// so if a connection fails, or SendMessageToUser returns SendMessageToUser, you cannot wait + /// so if a connection fails, or SendMessageToUser returns k_EResultNoConnection, you cannot wait /// indefinitely to obtain the reason for failure. virtual ESteamNetworkingConnectionState GetSessionConnectionInfo( const SteamNetworkingIdentity &identityRemote, SteamNetConnectionInfo_t *pConnectionInfo, SteamNetworkingQuickConnectionStatus *pQuickStatus ) = 0; }; -#define STEAMNETWORKINGMESSAGES_VERSION "SteamNetworkingMessages002" +#define STEAMNETWORKINGMESSAGES_INTERFACE_VERSION "SteamNetworkingMessages002" // // Callbacks @@ -139,7 +143,7 @@ struct SteamNetworkingMessagesSessionRequest_t /// SteamNetworkingMessages is primarily intended to make porting UDP code easy.) /// /// Remember: callbacks are asynchronous. See notes on SendMessageToUser, -/// and k_nSteamNetworkingSend_AutoRestartBrokwnSession in particular. +/// and k_nSteamNetworkingSend_AutoRestartBrokenSession in particular. /// /// Also, if a session times out due to inactivity, no callbacks will be posted. The only /// way to detect that this is happening is that querying the session state may return @@ -148,37 +152,48 @@ struct SteamNetworkingMessagesSessionFailed_t { enum { k_iCallback = k_iSteamNetworkingMessagesCallbacks + 2 }; - /// Detailed info about the connection. This will include the + /// Detailed info about the session that failed. + /// SteamNetConnectionInfo_t::m_identityRemote indicates who this session + /// was with. SteamNetConnectionInfo_t m_info; }; #pragma pack(pop) -// -// Global accessor -// +// Global accessors +// Using standalone lib +#ifdef STEAMNETWORKINGSOCKETS_STANDALONELIB -#if defined( STEAMNETWORKINGSOCKETS_PARTNER ) + // Standalone lib. + static_assert( STEAMNETWORKINGMESSAGES_INTERFACE_VERSION[25] == '2', "Version mismatch" ); + STEAMNETWORKINGSOCKETS_INTERFACE ISteamNetworkingMessages *SteamNetworkingMessages_LibV2(); + inline ISteamNetworkingMessages *SteamNetworkingMessages_Lib() { return SteamNetworkingMessages_LibV2(); } - // Standalone lib. Use different symbol name, so that we can dynamically switch between steamclient.dll - // and the standalone lib - STEAMNETWORKINGSOCKETS_INTERFACE ISteamNetworkingMessages *SteamNetworkingMessages_Lib(); - STEAMNETWORKINGSOCKETS_INTERFACE ISteamNetworkingMessages *SteamGameServerNetworkingMessages_Lib(); - inline ISteamNetworkingMessages *SteamNetworkingMessages() { return SteamNetworkingMessages_Lib(); } - inline ISteamNetworkingMessages *SteamGameServerNetworkingMessages() { return SteamGameServerNetworkingMessages_Lib(); } + // If running in context of steam, we also define a gameserver instance. + #ifdef STEAMNETWORKINGSOCKETS_STEAM + STEAMNETWORKINGSOCKETS_INTERFACE ISteamNetworkingMessages *SteamGameServerNetworkingMessages_LibV2(); + inline ISteamNetworkingMessages *SteamGameServerNetworkingMessages_Lib() { return SteamGameServerNetworkingMessages_LibV2(); } + #endif -#elif defined( STEAMNETWORKINGSOCKETS_OPENSOURCE ) + #ifndef STEAMNETWORKINGSOCKETS_STEAMAPI + inline ISteamNetworkingMessages *SteamNetworkingMessages() { return SteamNetworkingMessages_LibV2(); } + #ifdef STEAMNETWORKINGSOCKETS_STEAM + inline ISteamNetworkingMessages *SteamGameServerNetworkingMessages() { return SteamGameServerNetworkingMessages_LibV2(); } + #endif + #endif +#endif - // Opensource GameNetworkingSockets - STEAMNETWORKINGSOCKETS_INTERFACE ISteamNetworkingMessages *SteamNetworkingMessages(); - -#else +// Using Steamworks SDK +#ifdef STEAMNETWORKINGSOCKETS_STEAMAPI // Steamworks SDK - inline ISteamNetworkingMessages *SteamNetworkingMessages(); - STEAM_DEFINE_USER_INTERFACE_ACCESSOR( ISteamNetworkingMessages *, SteamNetworkingMessages, STEAMNETWORKINGMESSAGES_VERSION ); - inline ISteamNetworkingMessages *SteamGameServerNetworkingMessages(); - STEAM_DEFINE_GAMESERVER_INTERFACE_ACCESSOR( ISteamNetworkingMessages *, SteamGameServerNetworkingMessages, STEAMNETWORKINGMESSAGES_VERSION ); + STEAM_DEFINE_USER_INTERFACE_ACCESSOR( ISteamNetworkingMessages *, SteamNetworkingMessages_SteamAPI, STEAMNETWORKINGMESSAGES_INTERFACE_VERSION ); + STEAM_DEFINE_GAMESERVER_INTERFACE_ACCESSOR( ISteamNetworkingMessages *, SteamGameServerNetworkingMessages_SteamAPI, STEAMNETWORKINGMESSAGES_INTERFACE_VERSION ); + + #ifndef STEAMNETWORKINGSOCKETS_STANDALONELIB + inline ISteamNetworkingMessages *SteamNetworkingMessages() { return SteamNetworkingMessages_SteamAPI(); } + inline ISteamNetworkingMessages *SteamGameServerNetworkingMessages() { return SteamGameServerNetworkingMessages_SteamAPI(); } + #endif #endif #endif // ISTEAMNETWORKINGMESSAGES diff --git a/Generator/steam_sdk/isteamnetworkingsockets.h b/Generator/steam_sdk/isteamnetworkingsockets.h index 904ec4b..685edcd 100644 --- a/Generator/steam_sdk/isteamnetworkingsockets.h +++ b/Generator/steam_sdk/isteamnetworkingsockets.h @@ -2,15 +2,14 @@ #ifndef ISTEAMNETWORKINGSOCKETS #define ISTEAMNETWORKINGSOCKETS -#ifdef _WIN32 #pragma once -#endif #include "steamnetworkingtypes.h" +#include "steam_api_common.h" struct SteamNetAuthenticationStatus_t; -class ISteamNetworkingConnectionCustomSignaling; -class ISteamNetworkingCustomSignalingRecvContext; +class ISteamNetworkingConnectionSignaling; +class ISteamNetworkingSignalingRecvContext; //----------------------------------------------------------------------------- /// Lower level networking API. @@ -84,7 +83,7 @@ public: /// setting the options "immediately" after creation. virtual HSteamNetConnection ConnectByIPAddress( const SteamNetworkingIPAddr &address, int nOptions, const SteamNetworkingConfigValue_t *pOptions ) = 0; - /// Like CreateListenSocketIP, but clients will connect using ConnectP2P + /// Like CreateListenSocketIP, but clients will connect using ConnectP2P. /// /// nLocalVirtualPort specifies how clients can connect to this socket using /// ConnectP2P. It's very common for applications to only have one listening socket; @@ -93,7 +92,16 @@ public: /// integer (<1000) unique to each listen socket you create. /// /// If you use this, you probably want to call ISteamNetworkingUtils::InitRelayNetworkAccess() - /// when your app initializes + /// when your app initializes. + /// + /// If you are listening on a dedicated servers in known data center, + /// then you can listen using this function instead of CreateHostedDedicatedServerListenSocket, + /// to allow clients to connect without a ticket. Any user that owns + /// the app and is signed into Steam will be able to attempt to connect to + /// your server. Also, a connection attempt may require the client to + /// be connected to Steam, which is one more moving part that may fail. When + /// tickets are used, then once a ticket is obtained, a client can connect to + /// your server even if they got disconnected from Steam or Steam is offline. /// /// If you need to set any initial config options, pass them here. See /// SteamNetworkingConfigValue_t for more about why this is preferable to @@ -107,6 +115,10 @@ public: /// If you need to set any initial config options, pass them here. See /// SteamNetworkingConfigValue_t for more about why this is preferable to /// setting the options "immediately" after creation. + /// + /// To use your own signaling service, see: + /// - ConnectP2PCustomSignaling + /// - k_ESteamNetworkingConfig_Callback_CreateConnectionSignaling virtual HSteamNetConnection ConnectP2P( const SteamNetworkingIdentity &identityRemote, int nRemoteVirtualPort, int nOptions, const SteamNetworkingConfigValue_t *pOptions ) = 0; /// Accept an incoming connection that has been received on a listen socket. @@ -437,11 +449,11 @@ public: /// other connections.) virtual int ReceiveMessagesOnPollGroup( HSteamNetPollGroup hPollGroup, SteamNetworkingMessage_t **ppOutMessages, int nMaxMessages ) = 0; -#ifdef STEAMNETWORKINGSOCKETS_ENABLE_SDR - // // Clients connecting to dedicated servers hosted in a data center, - // using central-authority-granted tickets. + // using tickets issued by your game coordinator. If you are not + // issuing your own tickets to restrict who can attempt to connect + // to your server, then you won't use these functions. // /// Call this when you receive a ticket from your backend / matchmaking system. Puts the @@ -459,7 +471,10 @@ public: virtual int FindRelayAuthTicketForServer( const SteamNetworkingIdentity &identityGameServer, int nRemoteVirtualPort, SteamDatagramRelayAuthTicket *pOutParsedTicket ) = 0; /// Client call to connect to a server hosted in a Valve data center, on the specified virtual - /// port. You must have placed a ticket for this server into the cache, or else this connect attempt will fail! + /// port. You must have placed a ticket for this server into the cache, or else this connect + /// attempt will fail! If you are not issuing your own tickets, then to connect to a dedicated + /// server via SDR in auto-ticket mode, use ConnectP2P. (The server must be configured to allow + /// this type of connection by listening using CreateListenSocketP2P.) /// /// You may wonder why tickets are stored in a cache, instead of simply being passed as an argument /// here. The reason is to make reconnection to a gameserver robust, even if the client computer loses @@ -522,7 +537,11 @@ public: /// will be determined by the SDR_LISTEN_PORT environment variable. If a UDP port is not /// configured, this call will fail. /// - /// Note that this call MUST be made through the SteamGameServerNetworkingSockets() interface + /// This call MUST be made through the SteamGameServerNetworkingSockets() interface. + /// + /// This function should be used when you are using the ticket generator library + /// to issue your own tickets. Clients connecting to the server on this virtual + /// port will need a ticket, and they must connect using ConnectToHostedDedicatedServer. /// /// If you need to set any initial config options, pass them here. See /// SteamNetworkingConfigValue_t for more about why this is preferable to @@ -560,7 +579,6 @@ public: /// NOTE: The routing blob returned here is not encrypted. Send it to your backend /// and don't share it directly with clients. virtual EResult GetGameCoordinatorServerLogin( SteamDatagramGameCoordinatorServerLogin *pLoginInfo, int *pcbSignedBlob, void *pBlob ) = 0; -#endif // #ifndef STEAMNETWORKINGSOCKETS_ENABLE_SDR // @@ -585,10 +603,10 @@ public: /// This function will immediately construct a connection in the "connecting" /// state. Soon after (perhaps before this function returns, perhaps in another thread), /// the connection will begin sending signaling messages by calling - /// ISteamNetworkingConnectionCustomSignaling::SendSignal. + /// ISteamNetworkingConnectionSignaling::SendSignal. /// /// When the remote peer accepts the connection (See - /// ISteamNetworkingCustomSignalingRecvContext::OnConnectRequest), + /// ISteamNetworkingSignalingRecvContext::OnConnectRequest), /// it will begin sending signaling messages. When these messages are received, /// you can pass them to the connection using ReceivedP2PCustomSignal. /// @@ -603,7 +621,7 @@ public: /// If you need to set any initial config options, pass them here. See /// SteamNetworkingConfigValue_t for more about why this is preferable to /// setting the options "immediately" after creation. - virtual HSteamNetConnection ConnectP2PCustomSignaling( ISteamNetworkingConnectionCustomSignaling *pSignaling, const SteamNetworkingIdentity *pPeerIdentity, int nRemoteVirtualPort, int nOptions, const SteamNetworkingConfigValue_t *pOptions ) = 0; + virtual HSteamNetConnection ConnectP2PCustomSignaling( ISteamNetworkingConnectionSignaling *pSignaling, const SteamNetworkingIdentity *pPeerIdentity, int nRemoteVirtualPort, int nOptions, const SteamNetworkingConfigValue_t *pOptions ) = 0; /// Called when custom signaling has received a message. When your /// signaling channel receives a message, it should save off whatever @@ -614,7 +632,7 @@ public: /// /// - If the signal is associated with existing connection, it is dealt /// with immediately. If any replies need to be sent, they will be - /// dispatched using the ISteamNetworkingConnectionCustomSignaling + /// dispatched using the ISteamNetworkingConnectionSignaling /// associated with the connection. /// - If the message represents a connection request (and the request /// is not redundant for an existing connection), a new connection @@ -634,7 +652,7 @@ public: /// /// If you expect to be using relayed connections, then you probably want /// to call ISteamNetworkingUtils::InitRelayNetworkAccess() when your app initializes - virtual bool ReceivedP2PCustomSignal( const void *pMsg, int cbMsg, ISteamNetworkingCustomSignalingRecvContext *pContext ) = 0; + virtual bool ReceivedP2PCustomSignal( const void *pMsg, int cbMsg, ISteamNetworkingSignalingRecvContext *pContext ) = 0; // // Certificate provision by the application. On Steam, we normally handle all this automatically @@ -664,28 +682,40 @@ protected: }; #define STEAMNETWORKINGSOCKETS_INTERFACE_VERSION "SteamNetworkingSockets009" -// Global accessor. -#if defined( STEAMNETWORKINGSOCKETS_PARTNER ) +// Global accessors +// Using standalone lib +#ifdef STEAMNETWORKINGSOCKETS_STANDALONELIB - // Standalone lib. Use different symbol name, so that we can dynamically switch between steamclient.dll - // and the standalone lib - STEAMNETWORKINGSOCKETS_INTERFACE ISteamNetworkingSockets *SteamNetworkingSockets_Lib(); - STEAMNETWORKINGSOCKETS_INTERFACE ISteamNetworkingSockets *SteamGameServerNetworkingSockets_Lib(); - inline ISteamNetworkingSockets *SteamNetworkingSockets() { return SteamNetworkingSockets_Lib(); } - inline ISteamNetworkingSockets *SteamGameServerNetworkingSockets() { return SteamGameServerNetworkingSockets_Lib(); } + // Standalone lib. + static_assert( STEAMNETWORKINGSOCKETS_INTERFACE_VERSION[24] == '9', "Version mismatch" ); + STEAMNETWORKINGSOCKETS_INTERFACE ISteamNetworkingSockets *SteamNetworkingSockets_LibV9(); + inline ISteamNetworkingSockets *SteamNetworkingSockets_Lib() { return SteamNetworkingSockets_LibV9(); } -#elif defined( STEAMNETWORKINGSOCKETS_OPENSOURCE ) || defined( STEAMNETWORKINGSOCKETS_STREAMINGCLIENT ) + // If running in context of steam, we also define a gameserver instance. + #ifdef STEAMNETWORKINGSOCKETS_STEAM + STEAMNETWORKINGSOCKETS_INTERFACE ISteamNetworkingSockets *SteamGameServerNetworkingSockets_LibV9(); + inline ISteamNetworkingSockets *SteamGameServerNetworkingSockets_Lib() { return SteamGameServerNetworkingSockets_LibV9(); } + #endif - // Opensource GameNetworkingSockets - STEAMNETWORKINGSOCKETS_INTERFACE ISteamNetworkingSockets *SteamNetworkingSockets(); + #ifndef STEAMNETWORKINGSOCKETS_STEAMAPI + inline ISteamNetworkingSockets *SteamNetworkingSockets() { return SteamNetworkingSockets_LibV9(); } + #ifdef STEAMNETWORKINGSOCKETS_STEAM + inline ISteamNetworkingSockets *SteamGameServerNetworkingSockets() { return SteamGameServerNetworkingSockets_LibV9(); } + #endif + #endif +#endif -#else +// Using Steamworks SDK +#ifdef STEAMNETWORKINGSOCKETS_STEAMAPI // Steamworks SDK - inline ISteamNetworkingSockets *SteamNetworkingSockets(); - STEAM_DEFINE_USER_INTERFACE_ACCESSOR( ISteamNetworkingSockets *, SteamNetworkingSockets, STEAMNETWORKINGSOCKETS_INTERFACE_VERSION ); - inline ISteamNetworkingSockets *SteamGameServerNetworkingSockets(); - STEAM_DEFINE_GAMESERVER_INTERFACE_ACCESSOR( ISteamNetworkingSockets *, SteamGameServerNetworkingSockets, STEAMNETWORKINGSOCKETS_INTERFACE_VERSION ); + STEAM_DEFINE_USER_INTERFACE_ACCESSOR( ISteamNetworkingSockets *, SteamNetworkingSockets_SteamAPI, STEAMNETWORKINGSOCKETS_INTERFACE_VERSION ); + STEAM_DEFINE_GAMESERVER_INTERFACE_ACCESSOR( ISteamNetworkingSockets *, SteamGameServerNetworkingSockets_SteamAPI, STEAMNETWORKINGSOCKETS_INTERFACE_VERSION ); + + #ifndef STEAMNETWORKINGSOCKETS_STANDALONELIB + inline ISteamNetworkingSockets *SteamNetworkingSockets() { return SteamNetworkingSockets_SteamAPI(); } + inline ISteamNetworkingSockets *SteamGameServerNetworkingSockets() { return SteamGameServerNetworkingSockets_SteamAPI(); } + #endif #endif /// Callback struct used to notify when a connection has changed state diff --git a/Generator/steam_sdk/isteamnetworkingutils.h b/Generator/steam_sdk/isteamnetworkingutils.h index 0f15f73..2161ec3 100644 --- a/Generator/steam_sdk/isteamnetworkingutils.h +++ b/Generator/steam_sdk/isteamnetworkingutils.h @@ -6,13 +6,11 @@ #ifndef ISTEAMNETWORKINGUTILS #define ISTEAMNETWORKINGUTILS -#ifdef _WIN32 #pragma once -#endif - -#include #include "steamnetworkingtypes.h" +#include "steam_api_common.h" + struct SteamDatagramRelayAuthTicket; struct SteamRelayNetworkStatus_t; @@ -46,8 +44,6 @@ public: // Access to Steam Datagram Relay (SDR) network // -#ifdef STEAMNETWORKINGSOCKETS_ENABLE_SDR - // // Initialization and status check // @@ -196,7 +192,6 @@ public: /// Get list of all POP IDs. Returns the number of entries that were filled into /// your list. virtual int GetPOPList( SteamNetworkingPOPID *list, int nListSz ) = 0; -#endif // #ifdef STEAMNETWORKINGSOCKETS_ENABLE_SDR // // Misc @@ -324,18 +319,23 @@ protected: }; #define STEAMNETWORKINGUTILS_INTERFACE_VERSION "SteamNetworkingUtils003" -// Global accessor. +// Global accessors +// Using standalone lib #ifdef STEAMNETWORKINGSOCKETS_STANDALONELIB // Standalone lib - STEAMNETWORKINGSOCKETS_INTERFACE ISteamNetworkingUtils *SteamNetworkingUtils_Lib(); - inline ISteamNetworkingUtils *SteamNetworkingUtils() { return SteamNetworkingUtils_Lib(); } + static_assert( STEAMNETWORKINGUTILS_INTERFACE_VERSION[22] == '3', "Version mismatch" ); + STEAMNETWORKINGSOCKETS_INTERFACE ISteamNetworkingUtils *SteamNetworkingUtils_LibV3(); + inline ISteamNetworkingUtils *SteamNetworkingUtils_Lib() { return SteamNetworkingUtils_LibV3(); } -#else + #ifndef STEAMNETWORKINGSOCKETS_STEAMAPI + inline ISteamNetworkingUtils *SteamNetworkingUtils() { return SteamNetworkingUtils_LibV3(); } + #endif +#endif - // Steamworks SDK - inline ISteamNetworkingUtils *SteamNetworkingUtils(); - STEAM_DEFINE_INTERFACE_ACCESSOR( ISteamNetworkingUtils *, SteamNetworkingUtils, +// Using Steamworks SDK +#ifdef STEAMNETWORKINGSOCKETS_STEAMAPI + STEAM_DEFINE_INTERFACE_ACCESSOR( ISteamNetworkingUtils *, SteamNetworkingUtils_SteamAPI, /* Prefer user version of the interface. But if it isn't found, then use gameserver one. Yes, this is a completely terrible hack */ SteamInternal_FindOrCreateUserInterface( 0, STEAMNETWORKINGUTILS_INTERFACE_VERSION ) ? @@ -344,6 +344,10 @@ protected: "global", STEAMNETWORKINGUTILS_INTERFACE_VERSION ) + + #ifndef STEAMNETWORKINGSOCKETS_STANDALONELIB + inline ISteamNetworkingUtils *SteamNetworkingUtils() { return SteamNetworkingUtils_SteamAPI(); } + #endif #endif /// A struct used to describe our readiness to use the relay network. @@ -404,10 +408,7 @@ private: // // Internal stuff -#ifdef STEAMNETWORKINGSOCKETS_ENABLE_SDR inline void ISteamNetworkingUtils::InitRelayNetworkAccess() { CheckPingDataUpToDate( 1e10f ); } -#endif - inline bool ISteamNetworkingUtils::SetGlobalConfigValueInt32( ESteamNetworkingConfigValue eValue, int32 val ) { return SetConfigValue( eValue, k_ESteamNetworkingConfig_Global, 0, k_ESteamNetworkingConfig_Int32, &val ); } inline bool ISteamNetworkingUtils::SetGlobalConfigValueFloat( ESteamNetworkingConfigValue eValue, float val ) { return SetConfigValue( eValue, k_ESteamNetworkingConfig_Global, 0, k_ESteamNetworkingConfig_Float, &val ); } inline bool ISteamNetworkingUtils::SetGlobalConfigValueString( ESteamNetworkingConfigValue eValue, const char *val ) { return SetConfigValue( eValue, k_ESteamNetworkingConfig_Global, 0, k_ESteamNetworkingConfig_String, val ); } @@ -431,11 +432,27 @@ inline bool ISteamNetworkingUtils::SetConfigValueStruct( const SteamNetworkingCo return SetConfigValue( opt.m_eValue, eScopeType, scopeObj, opt.m_eDataType, pVal ); } -#if !defined( STEAMNETWORKINGSOCKETS_STATIC_LINK ) && defined( STEAMNETWORKINGSOCKETS_STEAMCLIENT ) -inline void SteamNetworkingIPAddr::ToString( char *buf, size_t cbBuf, bool bWithPort ) const { SteamNetworkingUtils()->SteamNetworkingIPAddr_ToString( *this, buf, cbBuf, bWithPort ); } -inline bool SteamNetworkingIPAddr::ParseString( const char *pszStr ) { return SteamNetworkingUtils()->SteamNetworkingIPAddr_ParseString( this, pszStr ); } -inline void SteamNetworkingIdentity::ToString( char *buf, size_t cbBuf ) const { SteamNetworkingUtils()->SteamNetworkingIdentity_ToString( *this, buf, cbBuf ); } -inline bool SteamNetworkingIdentity::ParseString( const char *pszStr ) { return SteamNetworkingUtils()->SteamNetworkingIdentity_ParseString( this, pszStr ); } +// How to get helper functions. +#if defined( STEAMNETWORKINGSOCKETS_STATIC_LINK ) || defined( STEAMNETWORKINGSOCKETS_STANDALONELIB ) + + // Call direct to static functions + STEAMNETWORKINGSOCKETS_INTERFACE void SteamNetworkingIPAddr_ToString( const SteamNetworkingIPAddr *pAddr, char *buf, size_t cbBuf, bool bWithPort ); + STEAMNETWORKINGSOCKETS_INTERFACE bool SteamNetworkingIPAddr_ParseString( SteamNetworkingIPAddr *pAddr, const char *pszStr ); + STEAMNETWORKINGSOCKETS_INTERFACE void SteamNetworkingIdentity_ToString( const SteamNetworkingIdentity *pIdentity, char *buf, size_t cbBuf ); + STEAMNETWORKINGSOCKETS_INTERFACE bool SteamNetworkingIdentity_ParseString( SteamNetworkingIdentity *pIdentity, size_t sizeofIdentity, const char *pszStr ); + inline void SteamNetworkingIPAddr::ToString( char *buf, size_t cbBuf, bool bWithPort ) const { SteamNetworkingIPAddr_ToString( this, buf, cbBuf, bWithPort ); } + inline bool SteamNetworkingIPAddr::ParseString( const char *pszStr ) { return SteamNetworkingIPAddr_ParseString( this, pszStr ); } + inline void SteamNetworkingIdentity::ToString( char *buf, size_t cbBuf ) const { SteamNetworkingIdentity_ToString( this, buf, cbBuf ); } + inline bool SteamNetworkingIdentity::ParseString( const char *pszStr ) { return SteamNetworkingIdentity_ParseString( this, sizeof(*this), pszStr ); } + +#elif defined( STEAMNETWORKINGSOCKETS_STEAMAPI ) + // Using steamworks SDK - go through SteamNetworkingUtils() + inline void SteamNetworkingIPAddr::ToString( char *buf, size_t cbBuf, bool bWithPort ) const { SteamNetworkingUtils()->SteamNetworkingIPAddr_ToString( *this, buf, cbBuf, bWithPort ); } + inline bool SteamNetworkingIPAddr::ParseString( const char *pszStr ) { return SteamNetworkingUtils()->SteamNetworkingIPAddr_ParseString( this, pszStr ); } + inline void SteamNetworkingIdentity::ToString( char *buf, size_t cbBuf ) const { SteamNetworkingUtils()->SteamNetworkingIdentity_ToString( *this, buf, cbBuf ); } + inline bool SteamNetworkingIdentity::ParseString( const char *pszStr ) { return SteamNetworkingUtils()->SteamNetworkingIdentity_ParseString( this, pszStr ); } +#else + #error "Invalid config" #endif #endif // ISTEAMNETWORKINGUTILS diff --git a/Generator/steam_sdk/isteamremotestorage.h b/Generator/steam_sdk/isteamremotestorage.h index f15d952..81fa2c8 100644 --- a/Generator/steam_sdk/isteamremotestorage.h +++ b/Generator/steam_sdk/isteamremotestorage.h @@ -241,7 +241,7 @@ class ISteamRemoteStorage // The following functions are only necessary on the Playstation 3. On PC & Mac, the Steam client will handle these operations for you // On Playstation 3, the game controls which files are stored in the cloud, via FilePersist, FileFetch, and FileForget. -#if defined(_PS3) || defined(_SERVER) +#if defined(_SERVER) // Connect to Steam and get a list of files in the Cloud - results in a RemoteStorageAppSyncStatusCheck_t callback virtual void GetFileListFromServer() = 0; // Indicate this file should be downloaded in the next sync diff --git a/Generator/steam_sdk/isteamugc.h b/Generator/steam_sdk/isteamugc.h index c86f197..e355d16 100644 --- a/Generator/steam_sdk/isteamugc.h +++ b/Generator/steam_sdk/isteamugc.h @@ -220,6 +220,9 @@ public: // Retrieve an individual result after receiving the callback for querying UGC virtual bool GetQueryUGCResult( UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t *pDetails ) = 0; + virtual uint32 GetQueryUGCNumTags( UGCQueryHandle_t handle, uint32 index ) = 0; + virtual bool GetQueryUGCTag( UGCQueryHandle_t handle, uint32 index, uint32 indexTag, STEAM_OUT_STRING_COUNT( cchValueSize ) char* pchValue, uint32 cchValueSize ) = 0; + virtual bool GetQueryUGCTagDisplayName( UGCQueryHandle_t handle, uint32 index, uint32 indexTag, STEAM_OUT_STRING_COUNT( cchValueSize ) char* pchValue, uint32 cchValueSize ) = 0; virtual bool GetQueryUGCPreviewURL( UGCQueryHandle_t handle, uint32 index, STEAM_OUT_STRING_COUNT(cchURLSize) char *pchURL, uint32 cchURLSize ) = 0; virtual bool GetQueryUGCMetadata( UGCQueryHandle_t handle, uint32 index, STEAM_OUT_STRING_COUNT(cchMetadatasize) char *pchMetadata, uint32 cchMetadatasize ) = 0; virtual bool GetQueryUGCChildren( UGCQueryHandle_t handle, uint32 index, PublishedFileId_t* pvecPublishedFileID, uint32 cMaxEntries ) = 0; @@ -227,7 +230,6 @@ public: virtual uint32 GetQueryUGCNumAdditionalPreviews( UGCQueryHandle_t handle, uint32 index ) = 0; virtual bool GetQueryUGCAdditionalPreview( UGCQueryHandle_t handle, uint32 index, uint32 previewIndex, STEAM_OUT_STRING_COUNT(cchURLSize) char *pchURLOrVideoID, uint32 cchURLSize, STEAM_OUT_STRING_COUNT(cchURLSize) char *pchOriginalFileName, uint32 cchOriginalFileNameSize, EItemPreviewType *pPreviewType ) = 0; virtual uint32 GetQueryUGCNumKeyValueTags( UGCQueryHandle_t handle, uint32 index ) = 0; - virtual bool GetQueryUGCKeyValueTag( UGCQueryHandle_t handle, uint32 index, uint32 keyValueTagIndex, STEAM_OUT_STRING_COUNT(cchKeySize) char *pchKey, uint32 cchKeySize, STEAM_OUT_STRING_COUNT(cchValueSize) char *pchValue, uint32 cchValueSize ) = 0; // Return the first value matching the pchKey. Note that a key may map to multiple values. Returns false if there was an error or no matching value was found. @@ -360,7 +362,7 @@ public: virtual SteamAPICall_t DeleteItem( PublishedFileId_t nPublishedFileID ) = 0; }; -#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION014" +#define STEAMUGC_INTERFACE_VERSION "STEAMUGC_INTERFACE_VERSION015" // Global interface accessor inline ISteamUGC *SteamUGC(); diff --git a/Generator/steam_sdk/isteamutils.h b/Generator/steam_sdk/isteamutils.h index b19526f..fe2cde4 100644 --- a/Generator/steam_sdk/isteamutils.h +++ b/Generator/steam_sdk/isteamutils.h @@ -86,8 +86,8 @@ public: // the destination buffer size should be 4 * height * width * sizeof(char) virtual bool GetImageRGBA( int iImage, uint8 *pubDest, int nDestBufferSize ) = 0; - // returns the IP of the reporting server for valve - currently only used in Source engine games - virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0; + // Deprecated. Do not call this. + STEAM_PRIVATE_API( virtual bool GetCSERIPPort( uint32 *unIP, uint16 *usPort ) = 0; ) // return the amount of battery power left in the current system in % [0..100], 255 for being on AC power virtual uint8 GetCurrentBatteryPower() = 0; @@ -183,9 +183,12 @@ public: // Returns whether this steam client is a Steam China specific client, vs the global client. virtual bool IsSteamChinaLauncher() = 0; - // Initializes text filtering. + // Initializes text filtering, loading dictionaries for the language the game is running in. // unFilterOptions are reserved for future use and should be set to 0 - // Returns false if filtering is unavailable for the language the user is currently running in. + // Returns false if filtering is unavailable for the game's language, in which case FilterText() will act as a passthrough. + // + // Users can customize the text filter behavior in their Steam Account preferences: + // https://store.steampowered.com/account/preferences#CommunityContentPreferences virtual bool InitFilterText( uint32 unFilterOptions = 0 ) = 0; // Filters the provided input message and places the filtered result into pchOutFilteredText, using legally required filtering and additional filtering based on the context and user settings diff --git a/Generator/steam_sdk/steam_api.json b/Generator/steam_sdk/steam_api.json index 6021585..29acc80 100644 --- a/Generator/steam_sdk/steam_api.json +++ b/Generator/steam_sdk/steam_api.json @@ -1,22 +1,5 @@ { "callback_structs": [ - - { - "callback_id": 4604, - "fields": [ - { "fieldname":"m_bIsRTMP", "fieldtype":"bool" } - ], - "struct": "BroadcastUploadStart_t" - }, - - { - "callback_id": 4605, - "fields": [ - { "fieldname":"m_eResult", "fieldtype":"EBroadcastUploadResult" } - ], - "struct": "BroadcastUploadStop_t" - }, - { "callback_id": 101, "fields": [], @@ -1908,13 +1891,6 @@ { "constname":"k_nSteamNetworkingConfig_P2P_Transport_ICE_Enable_Public", "consttype":"int", "constval":"4" }, { "constname":"k_nSteamNetworkingConfig_P2P_Transport_ICE_Enable_All", "consttype":"int", "constval":"0x7fffffff" }, { "constname":"k_SteamDatagramPOPID_dev", "consttype":"SteamNetworkingPOPID", "constval":"( ( uint32 ) 'd' << 16U ) | ( ( uint32 ) 'e' << 8U ) | ( uint32 ) 'v'" }, - { "constname":"k_unServerFlagNone", "consttype":"uint32", "constval":"0x00" }, - { "constname":"k_unServerFlagActive", "consttype":"uint32", "constval":"0x01" }, - { "constname":"k_unServerFlagSecure", "consttype":"uint32", "constval":"0x02" }, - { "constname":"k_unServerFlagDedicated", "consttype":"uint32", "constval":"0x04" }, - { "constname":"k_unServerFlagLinux", "consttype":"uint32", "constval":"0x08" }, - { "constname":"k_unServerFlagPassworded", "consttype":"uint32", "constval":"0x10" }, - { "constname":"k_unServerFlagPrivate", "consttype":"uint32", "constval":"0x20" }, { "constname":"k_cbSteamDatagramMaxSerializedTicket", "consttype":"uint32", "constval":"512" }, { "constname":"k_cbMaxSteamDatagramGameCoordinatorServerLoginAppData", "consttype":"uint32", "constval":"2048" }, { "constname":"k_cbMaxSteamDatagramGameCoordinatorServerLoginSerialized", "consttype":"uint32", "constval":"4096" } @@ -2056,7 +2032,10 @@ { "name":"k_EResultCantRemoveItem", "value":"113" }, { "name":"k_EResultAccountDeleted", "value":"114" }, { "name":"k_EResultExistingUserCancelledLicense", "value":"115" }, - { "name":"k_EResultCommunityCooldown", "value":"116" } + { "name":"k_EResultCommunityCooldown", "value":"116" }, + { "name":"k_EResultNoLauncherSpecified", "value":"117" }, + { "name":"k_EResultMustAgreeToSSA", "value":"118" }, + { "name":"k_EResultLauncherMigrated", "value":"119" } ] }, { @@ -2206,7 +2185,7 @@ { "name":"k_EAppType_Comic_UNUSED", "value":"32768" }, { "name":"k_EAppType_Beta", "value":"65536" }, { "name":"k_EAppType_Shortcut", "value":"1073741824" }, - { "name":"k_EAppType_DepotOnly", "value":"-2147483648" } + { "name":"k_EAppType_DepotOnly_DEPRECATED", "value":"-2147483648" } ] }, { @@ -2361,6 +2340,7 @@ { "name":"k_eEVRHMDType_HP_Unknown", "value":"80" }, { "name":"k_eEVRHMDType_HP_WindowsMR", "value":"81" }, { "name":"k_eEVRHMDType_HP_Reverb", "value":"82" }, + { "name":"k_eEVRHMDType_HP_ReverbG2", "value":"1463" }, { "name":"k_eEVRHMDType_Samsung_Unknown", "value":"90" }, { "name":"k_eEVRHMDType_Samsung_Odyssey", "value":"91" }, { "name":"k_eEVRHMDType_Unannounced_Unknown", "value":"100" }, @@ -2807,10 +2787,10 @@ "enumname": "EP2PSessionError", "values": [ { "name":"k_EP2PSessionErrorNone", "value":"0" }, - { "name":"k_EP2PSessionErrorNotRunningApp", "value":"1" }, { "name":"k_EP2PSessionErrorNoRightsToApp", "value":"2" }, - { "name":"k_EP2PSessionErrorDestinationNotLoggedIn", "value":"3" }, { "name":"k_EP2PSessionErrorTimeout", "value":"4" }, + { "name":"k_EP2PSessionErrorNotRunningApp_DELETED", "value":"1" }, + { "name":"k_EP2PSessionErrorDestinationNotLoggedIn_DELETED", "value":"3" }, { "name":"k_EP2PSessionErrorMax", "value":"5" } ] }, @@ -3213,7 +3193,82 @@ { "name":"k_EInputActionOrigin_Switch_Reserved18", "value":"255" }, { "name":"k_EInputActionOrigin_Switch_Reserved19", "value":"256" }, { "name":"k_EInputActionOrigin_Switch_Reserved20", "value":"257" }, - { "name":"k_EInputActionOrigin_Count", "value":"258" }, + { "name":"k_EInputActionOrigin_PS5_X", "value":"258" }, + { "name":"k_EInputActionOrigin_PS5_Circle", "value":"259" }, + { "name":"k_EInputActionOrigin_PS5_Triangle", "value":"260" }, + { "name":"k_EInputActionOrigin_PS5_Square", "value":"261" }, + { "name":"k_EInputActionOrigin_PS5_LeftBumper", "value":"262" }, + { "name":"k_EInputActionOrigin_PS5_RightBumper", "value":"263" }, + { "name":"k_EInputActionOrigin_PS5_Option", "value":"264" }, + { "name":"k_EInputActionOrigin_PS5_Create", "value":"265" }, + { "name":"k_EInputActionOrigin_PS5_Mute", "value":"266" }, + { "name":"k_EInputActionOrigin_PS5_LeftPad_Touch", "value":"267" }, + { "name":"k_EInputActionOrigin_PS5_LeftPad_Swipe", "value":"268" }, + { "name":"k_EInputActionOrigin_PS5_LeftPad_Click", "value":"269" }, + { "name":"k_EInputActionOrigin_PS5_LeftPad_DPadNorth", "value":"270" }, + { "name":"k_EInputActionOrigin_PS5_LeftPad_DPadSouth", "value":"271" }, + { "name":"k_EInputActionOrigin_PS5_LeftPad_DPadWest", "value":"272" }, + { "name":"k_EInputActionOrigin_PS5_LeftPad_DPadEast", "value":"273" }, + { "name":"k_EInputActionOrigin_PS5_RightPad_Touch", "value":"274" }, + { "name":"k_EInputActionOrigin_PS5_RightPad_Swipe", "value":"275" }, + { "name":"k_EInputActionOrigin_PS5_RightPad_Click", "value":"276" }, + { "name":"k_EInputActionOrigin_PS5_RightPad_DPadNorth", "value":"277" }, + { "name":"k_EInputActionOrigin_PS5_RightPad_DPadSouth", "value":"278" }, + { "name":"k_EInputActionOrigin_PS5_RightPad_DPadWest", "value":"279" }, + { "name":"k_EInputActionOrigin_PS5_RightPad_DPadEast", "value":"280" }, + { "name":"k_EInputActionOrigin_PS5_CenterPad_Touch", "value":"281" }, + { "name":"k_EInputActionOrigin_PS5_CenterPad_Swipe", "value":"282" }, + { "name":"k_EInputActionOrigin_PS5_CenterPad_Click", "value":"283" }, + { "name":"k_EInputActionOrigin_PS5_CenterPad_DPadNorth", "value":"284" }, + { "name":"k_EInputActionOrigin_PS5_CenterPad_DPadSouth", "value":"285" }, + { "name":"k_EInputActionOrigin_PS5_CenterPad_DPadWest", "value":"286" }, + { "name":"k_EInputActionOrigin_PS5_CenterPad_DPadEast", "value":"287" }, + { "name":"k_EInputActionOrigin_PS5_LeftTrigger_Pull", "value":"288" }, + { "name":"k_EInputActionOrigin_PS5_LeftTrigger_Click", "value":"289" }, + { "name":"k_EInputActionOrigin_PS5_RightTrigger_Pull", "value":"290" }, + { "name":"k_EInputActionOrigin_PS5_RightTrigger_Click", "value":"291" }, + { "name":"k_EInputActionOrigin_PS5_LeftStick_Move", "value":"292" }, + { "name":"k_EInputActionOrigin_PS5_LeftStick_Click", "value":"293" }, + { "name":"k_EInputActionOrigin_PS5_LeftStick_DPadNorth", "value":"294" }, + { "name":"k_EInputActionOrigin_PS5_LeftStick_DPadSouth", "value":"295" }, + { "name":"k_EInputActionOrigin_PS5_LeftStick_DPadWest", "value":"296" }, + { "name":"k_EInputActionOrigin_PS5_LeftStick_DPadEast", "value":"297" }, + { "name":"k_EInputActionOrigin_PS5_RightStick_Move", "value":"298" }, + { "name":"k_EInputActionOrigin_PS5_RightStick_Click", "value":"299" }, + { "name":"k_EInputActionOrigin_PS5_RightStick_DPadNorth", "value":"300" }, + { "name":"k_EInputActionOrigin_PS5_RightStick_DPadSouth", "value":"301" }, + { "name":"k_EInputActionOrigin_PS5_RightStick_DPadWest", "value":"302" }, + { "name":"k_EInputActionOrigin_PS5_RightStick_DPadEast", "value":"303" }, + { "name":"k_EInputActionOrigin_PS5_DPad_North", "value":"304" }, + { "name":"k_EInputActionOrigin_PS5_DPad_South", "value":"305" }, + { "name":"k_EInputActionOrigin_PS5_DPad_West", "value":"306" }, + { "name":"k_EInputActionOrigin_PS5_DPad_East", "value":"307" }, + { "name":"k_EInputActionOrigin_PS5_Gyro_Move", "value":"308" }, + { "name":"k_EInputActionOrigin_PS5_Gyro_Pitch", "value":"309" }, + { "name":"k_EInputActionOrigin_PS5_Gyro_Yaw", "value":"310" }, + { "name":"k_EInputActionOrigin_PS5_Gyro_Roll", "value":"311" }, + { "name":"k_EInputActionOrigin_PS5_DPad_Move", "value":"312" }, + { "name":"k_EInputActionOrigin_PS5_Reserved1", "value":"313" }, + { "name":"k_EInputActionOrigin_PS5_Reserved2", "value":"314" }, + { "name":"k_EInputActionOrigin_PS5_Reserved3", "value":"315" }, + { "name":"k_EInputActionOrigin_PS5_Reserved4", "value":"316" }, + { "name":"k_EInputActionOrigin_PS5_Reserved5", "value":"317" }, + { "name":"k_EInputActionOrigin_PS5_Reserved6", "value":"318" }, + { "name":"k_EInputActionOrigin_PS5_Reserved7", "value":"319" }, + { "name":"k_EInputActionOrigin_PS5_Reserved8", "value":"320" }, + { "name":"k_EInputActionOrigin_PS5_Reserved9", "value":"321" }, + { "name":"k_EInputActionOrigin_PS5_Reserved10", "value":"322" }, + { "name":"k_EInputActionOrigin_PS5_Reserved11", "value":"323" }, + { "name":"k_EInputActionOrigin_PS5_Reserved12", "value":"324" }, + { "name":"k_EInputActionOrigin_PS5_Reserved13", "value":"325" }, + { "name":"k_EInputActionOrigin_PS5_Reserved14", "value":"326" }, + { "name":"k_EInputActionOrigin_PS5_Reserved15", "value":"327" }, + { "name":"k_EInputActionOrigin_PS5_Reserved16", "value":"328" }, + { "name":"k_EInputActionOrigin_PS5_Reserved17", "value":"329" }, + { "name":"k_EInputActionOrigin_PS5_Reserved18", "value":"330" }, + { "name":"k_EInputActionOrigin_PS5_Reserved19", "value":"331" }, + { "name":"k_EInputActionOrigin_PS5_Reserved20", "value":"332" }, + { "name":"k_EInputActionOrigin_Count", "value":"333" }, { "name":"k_EInputActionOrigin_MaximumPossibleValue", "value":"32767" } ] }, @@ -3274,7 +3329,8 @@ { "name":"k_ESteamInputType_SwitchProController", "value":"10" }, { "name":"k_ESteamInputType_MobileTouch", "value":"11" }, { "name":"k_ESteamInputType_PS3Controller", "value":"12" }, - { "name":"k_ESteamInputType_Count", "value":"13" }, + { "name":"k_ESteamInputType_PS5Controller", "value":"13" }, + { "name":"k_ESteamInputType_Count", "value":"14" }, { "name":"k_ESteamInputType_MaximumPossibleValue", "value":"255" } ] }, @@ -3533,7 +3589,62 @@ { "name":"k_EControllerActionOrigin_XBoxOne_DPad_Move", "value":"242" }, { "name":"k_EControllerActionOrigin_XBox360_DPad_Move", "value":"243" }, { "name":"k_EControllerActionOrigin_Switch_DPad_Move", "value":"244" }, - { "name":"k_EControllerActionOrigin_Count", "value":"245" }, + { "name":"k_EControllerActionOrigin_PS5_X", "value":"245" }, + { "name":"k_EControllerActionOrigin_PS5_Circle", "value":"246" }, + { "name":"k_EControllerActionOrigin_PS5_Triangle", "value":"247" }, + { "name":"k_EControllerActionOrigin_PS5_Square", "value":"248" }, + { "name":"k_EControllerActionOrigin_PS5_LeftBumper", "value":"249" }, + { "name":"k_EControllerActionOrigin_PS5_RightBumper", "value":"250" }, + { "name":"k_EControllerActionOrigin_PS5_Option", "value":"251" }, + { "name":"k_EControllerActionOrigin_PS5_Create", "value":"252" }, + { "name":"k_EControllerActionOrigin_PS5_Mute", "value":"253" }, + { "name":"k_EControllerActionOrigin_PS5_LeftPad_Touch", "value":"254" }, + { "name":"k_EControllerActionOrigin_PS5_LeftPad_Swipe", "value":"255" }, + { "name":"k_EControllerActionOrigin_PS5_LeftPad_Click", "value":"256" }, + { "name":"k_EControllerActionOrigin_PS5_LeftPad_DPadNorth", "value":"257" }, + { "name":"k_EControllerActionOrigin_PS5_LeftPad_DPadSouth", "value":"258" }, + { "name":"k_EControllerActionOrigin_PS5_LeftPad_DPadWest", "value":"259" }, + { "name":"k_EControllerActionOrigin_PS5_LeftPad_DPadEast", "value":"260" }, + { "name":"k_EControllerActionOrigin_PS5_RightPad_Touch", "value":"261" }, + { "name":"k_EControllerActionOrigin_PS5_RightPad_Swipe", "value":"262" }, + { "name":"k_EControllerActionOrigin_PS5_RightPad_Click", "value":"263" }, + { "name":"k_EControllerActionOrigin_PS5_RightPad_DPadNorth", "value":"264" }, + { "name":"k_EControllerActionOrigin_PS5_RightPad_DPadSouth", "value":"265" }, + { "name":"k_EControllerActionOrigin_PS5_RightPad_DPadWest", "value":"266" }, + { "name":"k_EControllerActionOrigin_PS5_RightPad_DPadEast", "value":"267" }, + { "name":"k_EControllerActionOrigin_PS5_CenterPad_Touch", "value":"268" }, + { "name":"k_EControllerActionOrigin_PS5_CenterPad_Swipe", "value":"269" }, + { "name":"k_EControllerActionOrigin_PS5_CenterPad_Click", "value":"270" }, + { "name":"k_EControllerActionOrigin_PS5_CenterPad_DPadNorth", "value":"271" }, + { "name":"k_EControllerActionOrigin_PS5_CenterPad_DPadSouth", "value":"272" }, + { "name":"k_EControllerActionOrigin_PS5_CenterPad_DPadWest", "value":"273" }, + { "name":"k_EControllerActionOrigin_PS5_CenterPad_DPadEast", "value":"274" }, + { "name":"k_EControllerActionOrigin_PS5_LeftTrigger_Pull", "value":"275" }, + { "name":"k_EControllerActionOrigin_PS5_LeftTrigger_Click", "value":"276" }, + { "name":"k_EControllerActionOrigin_PS5_RightTrigger_Pull", "value":"277" }, + { "name":"k_EControllerActionOrigin_PS5_RightTrigger_Click", "value":"278" }, + { "name":"k_EControllerActionOrigin_PS5_LeftStick_Move", "value":"279" }, + { "name":"k_EControllerActionOrigin_PS5_LeftStick_Click", "value":"280" }, + { "name":"k_EControllerActionOrigin_PS5_LeftStick_DPadNorth", "value":"281" }, + { "name":"k_EControllerActionOrigin_PS5_LeftStick_DPadSouth", "value":"282" }, + { "name":"k_EControllerActionOrigin_PS5_LeftStick_DPadWest", "value":"283" }, + { "name":"k_EControllerActionOrigin_PS5_LeftStick_DPadEast", "value":"284" }, + { "name":"k_EControllerActionOrigin_PS5_RightStick_Move", "value":"285" }, + { "name":"k_EControllerActionOrigin_PS5_RightStick_Click", "value":"286" }, + { "name":"k_EControllerActionOrigin_PS5_RightStick_DPadNorth", "value":"287" }, + { "name":"k_EControllerActionOrigin_PS5_RightStick_DPadSouth", "value":"288" }, + { "name":"k_EControllerActionOrigin_PS5_RightStick_DPadWest", "value":"289" }, + { "name":"k_EControllerActionOrigin_PS5_RightStick_DPadEast", "value":"290" }, + { "name":"k_EControllerActionOrigin_PS5_DPad_Move", "value":"291" }, + { "name":"k_EControllerActionOrigin_PS5_DPad_North", "value":"292" }, + { "name":"k_EControllerActionOrigin_PS5_DPad_South", "value":"293" }, + { "name":"k_EControllerActionOrigin_PS5_DPad_West", "value":"294" }, + { "name":"k_EControllerActionOrigin_PS5_DPad_East", "value":"295" }, + { "name":"k_EControllerActionOrigin_PS5_Gyro_Move", "value":"296" }, + { "name":"k_EControllerActionOrigin_PS5_Gyro_Pitch", "value":"297" }, + { "name":"k_EControllerActionOrigin_PS5_Gyro_Yaw", "value":"298" }, + { "name":"k_EControllerActionOrigin_PS5_Gyro_Roll", "value":"299" }, + { "name":"k_EControllerActionOrigin_Count", "value":"300" }, { "name":"k_EControllerActionOrigin_MaximumPossibleValue", "value":"32767" } ] }, @@ -3724,6 +3835,8 @@ { "name":"k_ESteamNetworkingIdentityType_Invalid", "value":"0" }, { "name":"k_ESteamNetworkingIdentityType_SteamID", "value":"16" }, { "name":"k_ESteamNetworkingIdentityType_XboxPairwiseID", "value":"17" }, + { "name":"k_ESteamNetworkingIdentityType_SonyPSN", "value":"18" }, + { "name":"k_ESteamNetworkingIdentityType_GoogleStadia", "value":"19" }, { "name":"k_ESteamNetworkingIdentityType_IPAddress", "value":"1" }, { "name":"k_ESteamNetworkingIdentityType_GenericString", "value":"2" }, { "name":"k_ESteamNetworkingIdentityType_GenericBytes", "value":"3" }, @@ -3854,6 +3967,7 @@ { "name":"k_ESteamNetworkingConfig_Callback_RelayNetworkStatusChanged", "value":"203" }, { "name":"k_ESteamNetworkingConfig_Callback_MessagesSessionRequest", "value":"204" }, { "name":"k_ESteamNetworkingConfig_Callback_MessagesSessionFailed", "value":"205" }, + { "name":"k_ESteamNetworkingConfig_Callback_CreateConnectionSignaling", "value":"206" }, { "name":"k_ESteamNetworkingConfig_P2P_STUN_ServerList", "value":"103" }, { "name":"k_ESteamNetworkingConfig_P2P_Transport_ICE_Enable", "value":"104" }, { "name":"k_ESteamNetworkingConfig_P2P_Transport_ICE_Penalty", "value":"105" }, @@ -5197,6 +5311,14 @@ { "paramname":"pchProtocol", "paramtype":"const char *" } ], "returntype": "bool" + }, + { + "methodname": "ActivateGameOverlayInviteDialogConnectString", + "methodname_flat": "SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialogConnectString", + "params": [ + { "paramname":"pchConnectString", "paramtype":"const char *" } + ], + "returntype": "void" } ], "version_string": "SteamFriends017" @@ -5267,15 +5389,6 @@ ], "returntype": "bool" }, - { - "methodname": "GetCSERIPPort", - "methodname_flat": "SteamAPI_ISteamUtils_GetCSERIPPort", - "params": [ - { "paramname":"unIP", "paramtype":"uint32 *" }, - { "paramname":"usPort", "paramtype":"uint16 *" } - ], - "returntype": "bool" - }, { "methodname": "GetCurrentBatteryPower", "methodname_flat": "SteamAPI_ISteamUtils_GetCurrentBatteryPower", @@ -8555,7 +8668,7 @@ { "kind": "user", "name": "SteamInput", - "name_flat": "SteamAPI_SteamInput_v001" + "name_flat": "SteamAPI_SteamInput_v002" } ], "classname": "ISteamInput", @@ -8886,14 +8999,14 @@ "returntype": "uint32" } ], - "version_string": "SteamInput001" + "version_string": "SteamInput002" }, { "accessors": [ { "kind": "user", "name": "SteamController", - "name_flat": "SteamAPI_SteamController_v007" + "name_flat": "SteamAPI_SteamController_v008" } ], "classname": "ISteamController", @@ -9216,19 +9329,19 @@ "returntype": "bool" } ], - "version_string": "SteamController007" + "version_string": "SteamController008" }, { "accessors": [ { "kind": "user", "name": "SteamUGC", - "name_flat": "SteamAPI_SteamUGC_v014" + "name_flat": "SteamAPI_SteamUGC_v015" }, { "kind": "gameserver", "name": "SteamGameServerUGC", - "name_flat": "SteamAPI_SteamGameServerUGC_v014" + "name_flat": "SteamAPI_SteamGameServerUGC_v015" } ], "classname": "ISteamUGC", @@ -9300,6 +9413,47 @@ ], "returntype": "bool" }, + { + "methodname": "GetQueryUGCNumTags", + "methodname_flat": "SteamAPI_ISteamUGC_GetQueryUGCNumTags", + "params": [ + { "paramname":"handle", "paramtype":"UGCQueryHandle_t" }, + { "paramname":"index", "paramtype":"uint32" } + ], + "returntype": "uint32" + }, + { + "methodname": "GetQueryUGCTag", + "methodname_flat": "SteamAPI_ISteamUGC_GetQueryUGCTag", + "params": [ + { "paramname":"handle", "paramtype":"UGCQueryHandle_t" }, + { "paramname":"index", "paramtype":"uint32" }, + { "paramname":"indexTag", "paramtype":"uint32" }, + { + "out_string_count": "cchValueSize", + "paramname": "pchValue", + "paramtype": "char *" + }, + { "paramname":"cchValueSize", "paramtype":"uint32" } + ], + "returntype": "bool" + }, + { + "methodname": "GetQueryUGCTagDisplayName", + "methodname_flat": "SteamAPI_ISteamUGC_GetQueryUGCTagDisplayName", + "params": [ + { "paramname":"handle", "paramtype":"UGCQueryHandle_t" }, + { "paramname":"index", "paramtype":"uint32" }, + { "paramname":"indexTag", "paramtype":"uint32" }, + { + "out_string_count": "cchValueSize", + "paramname": "pchValue", + "paramtype": "char *" + }, + { "paramname":"cchValueSize", "paramtype":"uint32" } + ], + "returntype": "bool" + }, { "methodname": "GetQueryUGCPreviewURL", "methodname_flat": "SteamAPI_ISteamUGC_GetQueryUGCPreviewURL", @@ -10025,7 +10179,7 @@ "returntype": "SteamAPICall_t" } ], - "version_string": "STEAMUGC_INTERFACE_VERSION014" + "version_string": "STEAMUGC_INTERFACE_VERSION015" }, { "accessors": [ @@ -11200,13 +11354,13 @@ "accessors": [ { "kind": "user", - "name": "SteamNetworkingMessages", - "name_flat": "SteamAPI_SteamNetworkingMessages_v002" + "name": "SteamNetworkingMessages_SteamAPI", + "name_flat": "SteamAPI_SteamNetworkingMessages_SteamAPI_v002" }, { "kind": "gameserver", - "name": "SteamGameServerNetworkingMessages", - "name_flat": "SteamAPI_SteamGameServerNetworkingMessages_v002" + "name": "SteamGameServerNetworkingMessages_SteamAPI", + "name_flat": "SteamAPI_SteamGameServerNetworkingMessages_SteamAPI_v002" } ], "classname": "ISteamNetworkingMessages", @@ -11276,13 +11430,13 @@ "accessors": [ { "kind": "user", - "name": "SteamNetworkingSockets", - "name_flat": "SteamAPI_SteamNetworkingSockets_v009" + "name": "SteamNetworkingSockets_SteamAPI", + "name_flat": "SteamAPI_SteamNetworkingSockets_SteamAPI_v009" }, { "kind": "gameserver", - "name": "SteamGameServerNetworkingSockets", - "name_flat": "SteamAPI_SteamGameServerNetworkingSockets_v009" + "name": "SteamGameServerNetworkingSockets_SteamAPI", + "name_flat": "SteamAPI_SteamGameServerNetworkingSockets_SteamAPI_v009" } ], "classname": "ISteamNetworkingSockets", @@ -11611,7 +11765,7 @@ "methodname": "ConnectP2PCustomSignaling", "methodname_flat": "SteamAPI_ISteamNetworkingSockets_ConnectP2PCustomSignaling", "params": [ - { "paramname":"pSignaling", "paramtype":"ISteamNetworkingConnectionCustomSignaling *" }, + { "paramname":"pSignaling", "paramtype":"ISteamNetworkingConnectionSignaling *" }, { "paramname":"pPeerIdentity", "paramtype":"const SteamNetworkingIdentity *" }, { "paramname":"nRemoteVirtualPort", "paramtype":"int" }, { "paramname":"nOptions", "paramtype":"int" }, @@ -11625,7 +11779,7 @@ "params": [ { "paramname":"pMsg", "paramtype":"const void *" }, { "paramname":"cbMsg", "paramtype":"int" }, - { "paramname":"pContext", "paramtype":"ISteamNetworkingCustomSignalingRecvContext *" } + { "paramname":"pContext", "paramtype":"ISteamNetworkingSignalingRecvContext *" } ], "returntype": "bool" }, @@ -11662,8 +11816,8 @@ "accessors": [ { "kind": "global", - "name": "SteamNetworkingUtils", - "name_flat": "SteamAPI_SteamNetworkingUtils_v003" + "name": "SteamNetworkingUtils_SteamAPI", + "name_flat": "SteamAPI_SteamNetworkingUtils_SteamAPI_v003" } ], "classname": "ISteamNetworkingUtils", @@ -12928,6 +13082,34 @@ "params": [], "returntype": "const char *" }, + { + "methodname": "SetPSNID", + "methodname_flat": "SteamAPI_SteamNetworkingIdentity_SetPSNID", + "params": [ + { "paramname":"id", "paramtype":"uint64" } + ], + "returntype": "void" + }, + { + "methodname": "GetPSNID", + "methodname_flat": "SteamAPI_SteamNetworkingIdentity_GetPSNID", + "params": [], + "returntype": "uint64" + }, + { + "methodname": "SetStadiaID", + "methodname_flat": "SteamAPI_SteamNetworkingIdentity_SetStadiaID", + "params": [ + { "paramname":"id", "paramtype":"uint64" } + ], + "returntype": "void" + }, + { + "methodname": "GetStadiaID", + "methodname_flat": "SteamAPI_SteamNetworkingIdentity_GetStadiaID", + "params": [], + "returntype": "uint64" + }, { "methodname": "SetIPAddr", "methodname_flat": "SteamAPI_SteamNetworkingIdentity_SetIPAddr", diff --git a/Generator/steam_sdk/steam_api_flat.h b/Generator/steam_sdk/steam_api_flat.h index 9c19f8c..c71e61c 100644 --- a/Generator/steam_sdk/steam_api_flat.h +++ b/Generator/steam_sdk/steam_api_flat.h @@ -167,6 +167,7 @@ S_API bool SteamAPI_ISteamFriends_IsClanOfficialGameGroup( ISteamFriends* self, S_API int SteamAPI_ISteamFriends_GetNumChatsWithUnreadPriorityMessages( ISteamFriends* self ); S_API void SteamAPI_ISteamFriends_ActivateGameOverlayRemotePlayTogetherInviteDialog( ISteamFriends* self, uint64_steamid steamIDLobby ); S_API bool SteamAPI_ISteamFriends_RegisterProtocolInOverlayBrowser( ISteamFriends* self, const char * pchProtocol ); +S_API void SteamAPI_ISteamFriends_ActivateGameOverlayInviteDialogConnectString( ISteamFriends* self, const char * pchConnectString ); // ISteamUtils S_API ISteamUtils *SteamAPI_SteamUtils_v010(); @@ -178,7 +179,6 @@ S_API uint32 SteamAPI_ISteamUtils_GetServerRealTime( ISteamUtils* self ); S_API const char * SteamAPI_ISteamUtils_GetIPCountry( ISteamUtils* self ); S_API bool SteamAPI_ISteamUtils_GetImageSize( ISteamUtils* self, int iImage, uint32 * pnWidth, uint32 * pnHeight ); S_API bool SteamAPI_ISteamUtils_GetImageRGBA( ISteamUtils* self, int iImage, uint8 * pubDest, int nDestBufferSize ); -S_API bool SteamAPI_ISteamUtils_GetCSERIPPort( ISteamUtils* self, uint32 * unIP, uint16 * usPort ); S_API uint8 SteamAPI_ISteamUtils_GetCurrentBatteryPower( ISteamUtils* self ); S_API uint32 SteamAPI_ISteamUtils_GetAppID( ISteamUtils* self ); S_API void SteamAPI_ISteamUtils_SetOverlayNotificationPosition( ISteamUtils* self, ENotificationPosition eNotificationPosition ); @@ -571,7 +571,7 @@ S_API bool SteamAPI_ISteamHTTP_SetHTTPRequestAbsoluteTimeoutMS( ISteamHTTP* self S_API bool SteamAPI_ISteamHTTP_GetHTTPRequestWasTimedOut( ISteamHTTP* self, HTTPRequestHandle hRequest, bool * pbWasTimedOut ); // ISteamInput -S_API ISteamInput *SteamAPI_SteamInput_v001(); +S_API ISteamInput *SteamAPI_SteamInput_v002(); S_API bool SteamAPI_ISteamInput_Init( ISteamInput* self ); S_API bool SteamAPI_ISteamInput_Shutdown( ISteamInput* self ); S_API void SteamAPI_ISteamInput_RunFrame( ISteamInput* self ); @@ -609,7 +609,7 @@ S_API bool SteamAPI_ISteamInput_GetDeviceBindingRevision( ISteamInput* self, Inp S_API uint32 SteamAPI_ISteamInput_GetRemotePlaySessionID( ISteamInput* self, InputHandle_t inputHandle ); // ISteamController -S_API ISteamController *SteamAPI_SteamController_v007(); +S_API ISteamController *SteamAPI_SteamController_v008(); S_API bool SteamAPI_ISteamController_Init( ISteamController* self ); S_API bool SteamAPI_ISteamController_Shutdown( ISteamController* self ); S_API void SteamAPI_ISteamController_RunFrame( ISteamController* self ); @@ -646,14 +646,17 @@ S_API EControllerActionOrigin SteamAPI_ISteamController_TranslateActionOrigin( I S_API bool SteamAPI_ISteamController_GetControllerBindingRevision( ISteamController* self, ControllerHandle_t controllerHandle, int * pMajor, int * pMinor ); // ISteamUGC -S_API ISteamUGC *SteamAPI_SteamUGC_v014(); -S_API ISteamUGC *SteamAPI_SteamGameServerUGC_v014(); +S_API ISteamUGC *SteamAPI_SteamUGC_v015(); +S_API ISteamUGC *SteamAPI_SteamGameServerUGC_v015(); S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUserUGCRequest( ISteamUGC* self, AccountID_t unAccountID, EUserUGCList eListType, EUGCMatchingUGCType eMatchingUGCType, EUserUGCListSortOrder eSortOrder, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ); S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequestPage( ISteamUGC* self, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, uint32 unPage ); S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryAllUGCRequestCursor( ISteamUGC* self, EUGCQuery eQueryType, EUGCMatchingUGCType eMatchingeMatchingUGCTypeFileType, AppId_t nCreatorAppID, AppId_t nConsumerAppID, const char * pchCursor ); S_API UGCQueryHandle_t SteamAPI_ISteamUGC_CreateQueryUGCDetailsRequest( ISteamUGC* self, PublishedFileId_t * pvecPublishedFileID, uint32 unNumPublishedFileIDs ); S_API SteamAPICall_t SteamAPI_ISteamUGC_SendQueryUGCRequest( ISteamUGC* self, UGCQueryHandle_t handle ); S_API bool SteamAPI_ISteamUGC_GetQueryUGCResult( ISteamUGC* self, UGCQueryHandle_t handle, uint32 index, SteamUGCDetails_t * pDetails ); +S_API uint32 SteamAPI_ISteamUGC_GetQueryUGCNumTags( ISteamUGC* self, UGCQueryHandle_t handle, uint32 index ); +S_API bool SteamAPI_ISteamUGC_GetQueryUGCTag( ISteamUGC* self, UGCQueryHandle_t handle, uint32 index, uint32 indexTag, char * pchValue, uint32 cchValueSize ); +S_API bool SteamAPI_ISteamUGC_GetQueryUGCTagDisplayName( ISteamUGC* self, UGCQueryHandle_t handle, uint32 index, uint32 indexTag, char * pchValue, uint32 cchValueSize ); S_API bool SteamAPI_ISteamUGC_GetQueryUGCPreviewURL( ISteamUGC* self, UGCQueryHandle_t handle, uint32 index, char * pchURL, uint32 cchURLSize ); S_API bool SteamAPI_ISteamUGC_GetQueryUGCMetadata( ISteamUGC* self, UGCQueryHandle_t handle, uint32 index, char * pchMetadata, uint32 cchMetadatasize ); S_API bool SteamAPI_ISteamUGC_GetQueryUGCChildren( ISteamUGC* self, UGCQueryHandle_t handle, uint32 index, PublishedFileId_t * pvecPublishedFileID, uint32 cMaxEntries ); @@ -845,8 +848,8 @@ S_API bool SteamAPI_ISteamRemotePlay_BGetSessionClientResolution( ISteamRemotePl S_API bool SteamAPI_ISteamRemotePlay_BSendRemotePlayTogetherInvite( ISteamRemotePlay* self, uint64_steamid steamIDFriend ); // ISteamNetworkingMessages -S_API ISteamNetworkingMessages *SteamAPI_SteamNetworkingMessages_v002(); -S_API ISteamNetworkingMessages *SteamAPI_SteamGameServerNetworkingMessages_v002(); +S_API ISteamNetworkingMessages *SteamAPI_SteamNetworkingMessages_SteamAPI_v002(); +S_API ISteamNetworkingMessages *SteamAPI_SteamGameServerNetworkingMessages_SteamAPI_v002(); S_API EResult SteamAPI_ISteamNetworkingMessages_SendMessageToUser( ISteamNetworkingMessages* self, const SteamNetworkingIdentity & identityRemote, const void * pubData, uint32 cubData, int nSendFlags, int nRemoteChannel ); S_API int SteamAPI_ISteamNetworkingMessages_ReceiveMessagesOnChannel( ISteamNetworkingMessages* self, int nLocalChannel, SteamNetworkingMessage_t ** ppOutMessages, int nMaxMessages ); S_API bool SteamAPI_ISteamNetworkingMessages_AcceptSessionWithUser( ISteamNetworkingMessages* self, const SteamNetworkingIdentity & identityRemote ); @@ -855,8 +858,8 @@ S_API bool SteamAPI_ISteamNetworkingMessages_CloseChannelWithUser( ISteamNetwork S_API ESteamNetworkingConnectionState SteamAPI_ISteamNetworkingMessages_GetSessionConnectionInfo( ISteamNetworkingMessages* self, const SteamNetworkingIdentity & identityRemote, SteamNetConnectionInfo_t * pConnectionInfo, SteamNetworkingQuickConnectionStatus * pQuickStatus ); // ISteamNetworkingSockets -S_API ISteamNetworkingSockets *SteamAPI_SteamNetworkingSockets_v009(); -S_API ISteamNetworkingSockets *SteamAPI_SteamGameServerNetworkingSockets_v009(); +S_API ISteamNetworkingSockets *SteamAPI_SteamNetworkingSockets_SteamAPI_v009(); +S_API ISteamNetworkingSockets *SteamAPI_SteamGameServerNetworkingSockets_SteamAPI_v009(); S_API HSteamListenSocket SteamAPI_ISteamNetworkingSockets_CreateListenSocketIP( ISteamNetworkingSockets* self, const SteamNetworkingIPAddr & localAddress, int nOptions, const SteamNetworkingConfigValue_t * pOptions ); S_API HSteamNetConnection SteamAPI_ISteamNetworkingSockets_ConnectByIPAddress( ISteamNetworkingSockets* self, const SteamNetworkingIPAddr & address, int nOptions, const SteamNetworkingConfigValue_t * pOptions ); S_API HSteamListenSocket SteamAPI_ISteamNetworkingSockets_CreateListenSocketP2P( ISteamNetworkingSockets* self, int nLocalVirtualPort, int nOptions, const SteamNetworkingConfigValue_t * pOptions ); @@ -892,14 +895,14 @@ S_API SteamNetworkingPOPID SteamAPI_ISteamNetworkingSockets_GetHostedDedicatedSe S_API EResult SteamAPI_ISteamNetworkingSockets_GetHostedDedicatedServerAddress( ISteamNetworkingSockets* self, SteamDatagramHostedAddress * pRouting ); S_API HSteamListenSocket SteamAPI_ISteamNetworkingSockets_CreateHostedDedicatedServerListenSocket( ISteamNetworkingSockets* self, int nLocalVirtualPort, int nOptions, const SteamNetworkingConfigValue_t * pOptions ); S_API EResult SteamAPI_ISteamNetworkingSockets_GetGameCoordinatorServerLogin( ISteamNetworkingSockets* self, SteamDatagramGameCoordinatorServerLogin * pLoginInfo, int * pcbSignedBlob, void * pBlob ); -S_API HSteamNetConnection SteamAPI_ISteamNetworkingSockets_ConnectP2PCustomSignaling( ISteamNetworkingSockets* self, ISteamNetworkingConnectionCustomSignaling * pSignaling, const SteamNetworkingIdentity * pPeerIdentity, int nRemoteVirtualPort, int nOptions, const SteamNetworkingConfigValue_t * pOptions ); -S_API bool SteamAPI_ISteamNetworkingSockets_ReceivedP2PCustomSignal( ISteamNetworkingSockets* self, const void * pMsg, int cbMsg, ISteamNetworkingCustomSignalingRecvContext * pContext ); +S_API HSteamNetConnection SteamAPI_ISteamNetworkingSockets_ConnectP2PCustomSignaling( ISteamNetworkingSockets* self, ISteamNetworkingConnectionSignaling * pSignaling, const SteamNetworkingIdentity * pPeerIdentity, int nRemoteVirtualPort, int nOptions, const SteamNetworkingConfigValue_t * pOptions ); +S_API bool SteamAPI_ISteamNetworkingSockets_ReceivedP2PCustomSignal( ISteamNetworkingSockets* self, const void * pMsg, int cbMsg, ISteamNetworkingSignalingRecvContext * pContext ); S_API bool SteamAPI_ISteamNetworkingSockets_GetCertificateRequest( ISteamNetworkingSockets* self, int * pcbBlob, void * pBlob, SteamNetworkingErrMsg & errMsg ); S_API bool SteamAPI_ISteamNetworkingSockets_SetCertificate( ISteamNetworkingSockets* self, const void * pCertificate, int cbCertificate, SteamNetworkingErrMsg & errMsg ); S_API void SteamAPI_ISteamNetworkingSockets_RunCallbacks( ISteamNetworkingSockets* self ); // ISteamNetworkingUtils -S_API ISteamNetworkingUtils *SteamAPI_SteamNetworkingUtils_v003(); +S_API ISteamNetworkingUtils *SteamAPI_SteamNetworkingUtils_SteamAPI_v003(); S_API SteamNetworkingMessage_t * SteamAPI_ISteamNetworkingUtils_AllocateMessage( ISteamNetworkingUtils* self, int cbAllocateBuffer ); S_API void SteamAPI_ISteamNetworkingUtils_InitRelayNetworkAccess( ISteamNetworkingUtils* self ); S_API ESteamNetworkingAvailability SteamAPI_ISteamNetworkingUtils_GetRelayNetworkStatus( ISteamNetworkingUtils* self, SteamRelayNetworkStatus_t * pDetails ); @@ -1043,6 +1046,10 @@ S_API void SteamAPI_SteamNetworkingIdentity_SetSteamID64( SteamNetworkingIdentit S_API uint64 SteamAPI_SteamNetworkingIdentity_GetSteamID64( SteamNetworkingIdentity* self ); S_API bool SteamAPI_SteamNetworkingIdentity_SetXboxPairwiseID( SteamNetworkingIdentity* self, const char * pszString ); S_API const char * SteamAPI_SteamNetworkingIdentity_GetXboxPairwiseID( SteamNetworkingIdentity* self ); +S_API void SteamAPI_SteamNetworkingIdentity_SetPSNID( SteamNetworkingIdentity* self, uint64 id ); +S_API uint64 SteamAPI_SteamNetworkingIdentity_GetPSNID( SteamNetworkingIdentity* self ); +S_API void SteamAPI_SteamNetworkingIdentity_SetStadiaID( SteamNetworkingIdentity* self, uint64 id ); +S_API uint64 SteamAPI_SteamNetworkingIdentity_GetStadiaID( SteamNetworkingIdentity* self ); S_API void SteamAPI_SteamNetworkingIdentity_SetIPAddr( SteamNetworkingIdentity* self, const SteamNetworkingIPAddr & addr ); S_API const SteamNetworkingIPAddr * SteamAPI_SteamNetworkingIdentity_GetIPAddr( SteamNetworkingIdentity* self ); S_API void SteamAPI_SteamNetworkingIdentity_SetLocalHost( SteamNetworkingIdentity* self ); diff --git a/Generator/steam_sdk/steam_gameserver.h b/Generator/steam_sdk/steam_gameserver.h index bec600d..71f681e 100644 --- a/Generator/steam_sdk/steam_gameserver.h +++ b/Generator/steam_sdk/steam_gameserver.h @@ -22,25 +22,29 @@ enum EServerMode eServerModeAuthenticationAndSecure = 3, // Authenticate users, list on the server list and VAC protect clients }; +/// Pass to SteamGameServer_Init to indicate that the same UDP port will be used for game traffic +/// UDP queries. In this case, Steam will not open up a socket to handle server browser queries, +/// and you must use ISteamGameServer::HandleIncomingPacket and ISteamGameServer::GetNextOutgoingPacket +/// to handle packets related to server discovery on your socket. +#define MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE ((uint16)-1) + // Initialize SteamGameServer client and interface objects, and set server properties which may not be changed. // // After calling this function, you should set any additional server parameters, and then // call ISteamGameServer::LogOnAnonymous() or ISteamGameServer::LogOn() // -// - usSteamPort is the local port used to communicate with the steam servers. -// NOTE: unless you are using ver old Steam client binaries, this parameter is ignored, and -// you should pass 0. Gameservers now always use WebSockets to talk to Steam. -// This protocol is TCP-based and thus always uses an ephemeral local port. -// Older steam client binaries used UDP to talk to Steam, and this argument was useful. -// A future version of the SDK will remove this argument. -// - usGamePort is the port that clients will connect to for gameplay. +// - unIP will usually be zero. If you are on a machine with multiple IP addresses, you can pass a non-zero +// value here and the relevant sockets will be bound to that IP. This can be used to ensure that +// the IP you desire is the one used in the server browser. +// - usGamePort is the port that clients will connect to for gameplay. You will usually open up your +// own socket bound to this port. // - usQueryPort is the port that will manage server browser related duties and info // pings from clients. If you pass MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE for usQueryPort, then it // will use "GameSocketShare" mode, which means that the game is responsible for sending and receiving // UDP packets for the master server updater. See references to GameSocketShare in isteamgameserver.h. -// - The version string is usually in the form x.x.x.x, and is used by the master server to detect when the +// - The version string should be in the form x.x.x.x, and is used by the master server to detect when the // server is out of date. (Only servers with the latest version will be listed.) -inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString ); +inline bool SteamGameServer_Init( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString ); // Shutdown SteamGameSeverXxx interfaces, log out, and free resources. S_API void SteamGameServer_Shutdown(); @@ -94,10 +98,10 @@ inline bool CSteamGameServerAPIContext::Init() } #endif -S_API bool S_CALLTYPE SteamInternal_GameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString ); -inline bool SteamGameServer_Init( uint32 unIP, uint16 usSteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString ) +S_API bool S_CALLTYPE SteamInternal_GameServer_Init( uint32 unIP, uint16 usLegacySteamPort, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString ); +inline bool SteamGameServer_Init( uint32 unIP, uint16 usGamePort, uint16 usQueryPort, EServerMode eServerMode, const char *pchVersionString ) { - if ( !SteamInternal_GameServer_Init( unIP, usSteamPort, usGamePort, usQueryPort, eServerMode, pchVersionString ) ) + if ( !SteamInternal_GameServer_Init( unIP, 0, usGamePort, usQueryPort, eServerMode, pchVersionString ) ) return false; return true; diff --git a/Generator/steam_sdk/steamclientpublic.h b/Generator/steam_sdk/steamclientpublic.h index f744263..695bb9c 100644 --- a/Generator/steam_sdk/steamclientpublic.h +++ b/Generator/steam_sdk/steamclientpublic.h @@ -142,6 +142,9 @@ enum EResult k_EResultAccountDeleted = 114, // account has been deleted k_EResultExistingUserCancelledLicense = 115, // A license for this already exists, but cancelled k_EResultCommunityCooldown = 116, // access is denied because of a community cooldown (probably from support profile data resets) + k_EResultNoLauncherSpecified = 117, // No launcher was specified, but a launcher was needed to choose correct realm for operation. + k_EResultMustAgreeToSSA = 118, // User must agree to china SSA or global SSA before login + k_EResultLauncherMigrated = 119, // The specified launcher type is no longer supported; the user should be directed elsewhere }; // Error codes for use with the voice functions @@ -311,7 +314,7 @@ enum EAppType k_EAppType_Beta = 0x10000, // this is a beta version of a game k_EAppType_Shortcut = 0x40000000, // just a shortcut, client side only - k_EAppType_DepotOnly = 0x80000000, // placeholder since depots and apps share the same namespace + k_EAppType_DepotOnly_DEPRECATED = 0x80000000, // there shouldn't be any appinfo for depots }; @@ -556,6 +559,7 @@ enum EVRHMDType k_eEVRHMDType_HP_Unknown = 80, // HP unknown HMD k_eEVRHMDType_HP_WindowsMR = 81, // HP Windows MR headset k_eEVRHMDType_HP_Reverb = 82, // HP Reverb Windows MR headset + k_eEVRHMDType_HP_ReverbG2 = 1463, // HP Reverb G2 Windows MR headset k_eEVRHMDType_Samsung_Unknown = 90, // Samsung unknown HMD k_eEVRHMDType_Samsung_Odyssey = 91, // Samsung Odyssey Windows MR headset diff --git a/Generator/steam_sdk/steamnetworkingtypes.h b/Generator/steam_sdk/steamnetworkingtypes.h index 7a70add..5b35a4e 100644 --- a/Generator/steam_sdk/steamnetworkingtypes.h +++ b/Generator/steam_sdk/steamnetworkingtypes.h @@ -6,26 +6,40 @@ #ifndef STEAMNETWORKINGTYPES #define STEAMNETWORKINGTYPES -#ifdef _WIN32 #pragma once -#endif #include #include +#include "steamtypes.h" +#include "steamclientpublic.h" -//---------------------------------------- -// SteamNetworkingSockets library config -// Compiling in Steam public branch. -#define STEAMNETWORKINGSOCKETS_STEAM -#ifdef STEAMNETWORKINGSOCKETS_STATIC_LINK - #define STEAMNETWORKINGSOCKETS_INTERFACE extern +//----------------------------------------------------------------------------- +// SteamNetworkingSockets config. +//#define STEAMNETWORKINGSOCKETS_STANDALONELIB // Comment this in to support compiling/linking with the standalone library / gamenetworkingsockets opensource +#define STEAMNETWORKINGSOCKETS_STEAMAPI // Compiling/link with steam_api.h and Steamworks SDK +//----------------------------------------------------------------------------- + +#if !defined( STEAMNETWORKINGSOCKETS_OPENSOURCE ) && !defined( STEAMNETWORKINGSOCKETS_STREAMINGCLIENT ) + #define STEAMNETWORKINGSOCKETS_STEAM +#endif +#ifdef NN_NINTENDO_SDK // We always static link on Nintendo + #define STEAMNETWORKINGSOCKETS_STATIC_LINK +#endif +#if defined( STEAMNETWORKINGSOCKETS_STATIC_LINK ) + #define STEAMNETWORKINGSOCKETS_INTERFACE extern "C" +#elif defined( STEAMNETWORKINGSOCKETS_FOREXPORT ) + #ifdef _WIN32 + #define STEAMNETWORKINGSOCKETS_INTERFACE extern "C" __declspec( dllexport ) + #else + #define STEAMNETWORKINGSOCKETS_INTERFACE extern "C" __attribute__((visibility("default"))) + #endif +#else + #ifdef _WIN32 + #define STEAMNETWORKINGSOCKETS_INTERFACE extern "C" __declspec( dllimport ) + #else + #define STEAMNETWORKINGSOCKETS_INTERFACE extern "C" + #endif #endif -#define STEAMNETWORKINGSOCKETS_STEAMCLIENT -#define STEAMNETWORKINGSOCKETS_ENABLE_SDR -#include "steam_api_common.h" -// -//---------------------------------------- - #if defined( VALVE_CALLBACK_PACK_SMALL ) #pragma pack( push, 4 ) @@ -195,18 +209,18 @@ struct SteamNetworkingIPAddr /// (This means that you cannot tell if a zero port was explicitly specified.) inline bool ParseString( const char *pszStr ); + /// RFC4038, section 4.2 + struct IPv4MappedAddress { + uint64 m_8zeros; + uint16 m_0000; + uint16 m_ffff; + uint8 m_ip[ 4 ]; // NOTE: As bytes, i.e. network byte order + }; + union { uint8 m_ipv6[ 16 ]; - #ifndef API_GEN // API generator doesn't understand this. The bindings will just use the accessors - struct // IPv4 "mapped address" (rfc4038 section 4.2) - { - uint64 m_8zeros; - uint16 m_0000; - uint16 m_ffff; - uint8 m_ip[ 4 ]; // NOTE: As bytes, i.e. network byte order - } m_ipv4; - #endif + IPv4MappedAddress m_ipv4; }; uint16 m_port; // Host byte order @@ -659,6 +673,9 @@ struct SteamNetConnectionInfo_t /// connection type (and peer information), and any name /// given to the connection by the app. This string is used in various /// internal logging messages. + /// + /// Note that the connection ID *usually* matches the HSteamNetConnection + /// handle, but in certain cases with symmetric connections it might not. char m_szConnectionDescription[ k_cchSteamNetworkingMaxConnectionDescription ]; /// Internal stuff, room to change API easily @@ -1297,6 +1314,12 @@ enum ESteamNetworkingConfigValue /// See: ISteamNetworkingUtils::SetGlobalCallback_MessagesSessionFailed k_ESteamNetworkingConfig_Callback_MessagesSessionFailed = 205, + /// [global FnSteamNetworkingSocketsCreateConnectionSignaling] Callback that will + /// be invoked when we need to create a signaling object for a connection + /// initiated locally. See: ISteamNetworkingSockets::ConnectP2P, + /// ISteamNetworkingMessages. + k_ESteamNetworkingConfig_Callback_CreateConnectionSignaling = 206, + // // P2P settings // @@ -1600,17 +1623,6 @@ inline const uint8 *SteamNetworkingIdentity::GetGenericBytes( int &cbLen ) const inline bool SteamNetworkingIdentity::operator==(const SteamNetworkingIdentity &x ) const { return m_eType == x.m_eType && m_cbSize == x.m_cbSize && memcmp( m_genericBytes, x.m_genericBytes, m_cbSize ) == 0; } inline void SteamNetworkingMessage_t::Release() { (*m_pfnRelease)( this ); } -#if defined( STEAMNETWORKINGSOCKETS_STATIC_LINK ) || !defined( STEAMNETWORKINGSOCKETS_STEAMCLIENT ) -STEAMNETWORKINGSOCKETS_INTERFACE void SteamNetworkingIPAddr_ToString( const SteamNetworkingIPAddr *pAddr, char *buf, size_t cbBuf, bool bWithPort ); -STEAMNETWORKINGSOCKETS_INTERFACE bool SteamNetworkingIPAddr_ParseString( SteamNetworkingIPAddr *pAddr, const char *pszStr ); -STEAMNETWORKINGSOCKETS_INTERFACE void SteamNetworkingIdentity_ToString( const SteamNetworkingIdentity *pIdentity, char *buf, size_t cbBuf ); -STEAMNETWORKINGSOCKETS_INTERFACE bool SteamNetworkingIdentity_ParseString( SteamNetworkingIdentity *pIdentity, size_t sizeofIdentity, const char *pszStr ); -inline void SteamNetworkingIPAddr::ToString( char *buf, size_t cbBuf, bool bWithPort ) const { SteamNetworkingIPAddr_ToString( this, buf, cbBuf, bWithPort ); } -inline bool SteamNetworkingIPAddr::ParseString( const char *pszStr ) { return SteamNetworkingIPAddr_ParseString( this, pszStr ); } -inline void SteamNetworkingIdentity::ToString( char *buf, size_t cbBuf ) const { SteamNetworkingIdentity_ToString( this, buf, cbBuf ); } -inline bool SteamNetworkingIdentity::ParseString( const char *pszStr ) { return SteamNetworkingIdentity_ParseString( this, sizeof(*this), pszStr ); } -#endif - #endif // #ifndef API_GEN #endif // #ifndef STEAMNETWORKINGTYPES diff --git a/UnityPlugin/redistributable_bin/linux32/libsteam_api.so b/UnityPlugin/redistributable_bin/linux32/libsteam_api.so index 928c5eea4383818ef583f1b279e5db537b3456a9..bb5d4fe80816a4a11408bc7e21abae8dbf45d3db 100644 GIT binary patch delta 111027 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 z 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