This commit is contained in:
Riley Labrecque
2020-08-02 09:21:00 -07:00
parent 52dd1a04d6
commit 274fcbbbed
44 changed files with 703 additions and 207 deletions
+10 -1
View File
@@ -1,6 +1,6 @@
================================================================
Copyright © 1996-2019, Valve Corporation, All rights reserved.
Copyright © 1996-2020, Valve Corporation, All rights reserved.
================================================================
@@ -9,6 +9,15 @@ Welcome to the Steamworks SDK. For documentation please see our partner
website at: http://partner.steamgames.com
----------------------------------------------------------------
v1.49 12th June 2020
----------------------------------------------------------------
* Added ISteamApps::BIsTimedTrial() which allows a game to check if user only has limited playtime
* Added ISteamFriends::RegisterProtocolInOverlayBrowser() which will enable dispatching callbacks when the overlay web browser navigates to a registered custom protocol, such as “mygame://<callback data>”
* Added ISteamuserStats::GetAchievementProgressLimits() which lets the game query at run-time the progress-based achievement’s bounds as set by the developers in the Steamworks application settings
* Added tool to demonstrate processing the steam.signatures file that comes in the steam client package.
----------------------------------------------------------------
v1.48a 26th March 2020
----------------------------------------------------------------
+7
View File
@@ -251,6 +251,10 @@ void CSpaceWarClient::DisconnectFromServer()
MsgClientLeavingServer_t msg;
BSendServerData( &msg, sizeof(msg) );
// tell steam china duration control system that we are no longer in a match
SteamUser()->BSetDurationControlOnlineState( k_EDurationControlOnlineState_Offline );
m_eConnectedStatus = k_EClientNotConnected;
}
if ( m_pP2PAuthedGame )
@@ -337,6 +341,9 @@ void CSpaceWarClient::OnReceiveServerAuthenticationResponse( bool bSuccess, uint
// set information so our friends can join the lobby
UpdateRichPresenceConnectionInfo();
// tell steam china duration control system that we are in a match and not to be interrupted
SteamUser()->BSetDurationControlOnlineState( k_EDurationControlOnlineState_OnlineHighPri );
// send a ping, to measure round-trip time
m_ulPingSentTime = m_pGameEngine->GetGameTickCount();
MsgClientPing_t msg;
+15
View File
@@ -105,6 +105,9 @@ public:
// Check if user borrowed this game via Family Sharing, If true, call GetAppOwner() to get the lender SteamID
virtual bool BIsSubscribedFromFamilySharing() = 0;
// check if game is a timed trial with limited playtime
virtual bool BIsTimedTrial( uint32* punSecondsAllowed, uint32* punSecondsPlayed ) = 0;
};
#define STEAMAPPS_INTERFACE_VERSION "STEAMAPPS_INTERFACE_VERSION008"
@@ -198,5 +201,17 @@ struct FileDetailsResult_t
};
//-----------------------------------------------------------------------------
// Purpose: called for games in Timed Trial mode
//-----------------------------------------------------------------------------
struct TimedTrialStatus_t
{
enum { k_iCallback = k_iSteamAppsCallbacks + 30 };
AppId_t m_unAppID; // appID
bool m_bIsOffline; // if true, time allowed / played refers to offline time, not total time
uint32 m_unSecondsAllowed; // how many seconds the app can be played in total
uint32 m_unSecondsPlayed; // how many seconds the app was already played
};
#pragma pack( pop )
#endif // ISTEAMAPPS_H
+16 -11
View File
@@ -127,17 +127,6 @@ enum EUserRestriction
k_nUserRestrictionTrading = 64, // user cannot participate in trading (console, mobile)
};
//-----------------------------------------------------------------------------
// Purpose: information about user sessions
//-----------------------------------------------------------------------------
struct FriendSessionStateInfo_t
{
uint32 m_uiOnlineSessionInstances;
uint8 m_uiPublishedToFriendsSessionInstance;
};
// size limit on chat room or member metadata
const uint32 k_cubChatMetadataMax = 8192;
@@ -425,6 +414,11 @@ public:
// activates game overlay to open the remote play together invite dialog. Invitations will be sent for remote play together
virtual void ActivateGameOverlayRemotePlayTogetherInviteDialog( CSteamID steamIDLobby ) = 0;
// Call this before calling ActivateGameOverlayToWebPage() to have the Steam Overlay Browser block navigations
// 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;
};
#define STEAMFRIENDS_INTERFACE_VERSION "SteamFriends017"
@@ -680,6 +674,17 @@ struct UnreadChatMessagesChanged_t
enum { k_iCallback = k_iSteamFriendsCallbacks + 48 };
};
//-----------------------------------------------------------------------------
// Purpose: Dispatched when an overlay browser instance is navigated to a protocol/scheme registered by RegisterProtocolInOverlayBrowser()
//-----------------------------------------------------------------------------
struct OverlayBrowserProtocolNavigation_t
{
enum { k_iCallback = k_iSteamFriendsCallbacks + 49 };
char rgchURI[ 1024 ];
};
#pragma pack( pop )
#endif // ISTEAMFRIENDS_H
+2
View File
@@ -366,6 +366,8 @@ public:
// Submit the update request by handle
virtual bool SubmitUpdateProperties( SteamInventoryUpdateHandle_t handle, SteamInventoryResult_t * pResultHandle ) = 0;
STEAM_METHOD_DESC(Look up the given token and return a pseudo-Inventory item.)
virtual bool InspectItem( SteamInventoryResult_t *pResultHandle, const char *pchItemToken ) = 0;
};
#define STEAMINVENTORY_INTERFACE_VERSION "STEAMINVENTORY_INTERFACE_V003"
+22
View File
@@ -231,6 +231,10 @@ public:
/// value means more important, and the value you pass is the lowest priority (highest
/// numeric value) you wish to receive callbacks for.
///
/// The value here controls the detail level for most messages. You can control the
/// detail level for various subsystems (perhaps only for certain connections) by
/// adjusting the configuration values k_ESteamNetworkingConfig_LogLevel_Xxxxx.
///
/// Except when debugging, you should only use k_ESteamNetworkingSocketsDebugOutputType_Msg
/// or k_ESteamNetworkingSocketsDebugOutputType_Warning. For best performance, do NOT
/// request a high detail level and then filter out messages in your callback. This incurs
@@ -364,6 +368,24 @@ struct SteamRelayNetworkStatus_t
char m_debugMsg[ 256 ];
};
/// Utility class for printing a SteamNetworkingIdentity.
/// E.g. printf( "Identity is '%s'\n", SteamNetworkingIdentityRender( identity ).c_str() );
struct SteamNetworkingIdentityRender
{
SteamNetworkingIdentityRender( const SteamNetworkingIdentity &x ) { x.ToString( buf, sizeof(buf) ); }
inline const char *c_str() const { return buf; }
private:
char buf[ SteamNetworkingIdentity::k_cchMaxString ];
};
/// Utility class for printing a SteamNetworkingIPAddrRender.
struct SteamNetworkingIPAddrRender
{
SteamNetworkingIPAddrRender( const SteamNetworkingIPAddr &x, bool bWithPort = true ) { x.ToString( buf, sizeof(buf), bWithPort ); }
inline const char *c_str() const { return buf; }
private:
char buf[ SteamNetworkingIPAddr::k_cchMaxString ];
};
///////////////////////////////////////////////////////////////////////////////
//
+6 -1
View File
@@ -197,9 +197,14 @@ public:
STEAM_CALL_RESULT( DurationControl_t )
virtual SteamAPICall_t GetDurationControl() = 0;
// Advise steam china duration control system about the online state of the game.
// This will prevent offline gameplay time from counting against a user's
// playtime limits.
virtual bool BSetDurationControlOnlineState( EDurationControlOnlineState eNewState ) = 0;
};
#define STEAMUSER_INTERFACE_VERSION "SteamUser020"
#define STEAMUSER_INTERFACE_VERSION "SteamUser021"
// Global interface accessor
inline ISteamUser *SteamUser();
+8 -18
View File
@@ -293,28 +293,18 @@ public:
STEAM_FLAT_NAME( GetGlobalStatHistoryDouble )
virtual int32 GetGlobalStatHistory( const char *pchStatName, STEAM_ARRAY_COUNT(cubData) double *pData, uint32 cubData ) = 0;
#ifdef _PS3
// Call to kick off installation of the PS3 trophies. This call is asynchronous, and the results will be returned in a PS3TrophiesInstalled_t
// callback.
virtual bool InstallPS3Trophies() = 0;
// For achievements that have related Progress stats, use this to query what the bounds of that progress are.
// You may want this info to selectively call IndicateAchievementProgress when appropriate milestones of progress
// have been made, to show a progress notification to the user.
STEAM_FLAT_NAME( GetAchievementProgressLimitsInt32 )
virtual bool GetAchievementProgressLimits( const char *pchName, int32 *pnMinProgress, int32 *pnMaxProgress ) = 0;
// Returns the amount of space required at boot to install trophies. This value can be used when comparing the amount of space needed
// by the game to the available space value passed to the game at boot. The value is set during InstallPS3Trophies().
virtual uint64 GetTrophySpaceRequiredBeforeInstall() = 0;
STEAM_FLAT_NAME( GetAchievementProgressLimitsFloat )
virtual bool GetAchievementProgressLimits( const char *pchName, float *pfMinProgress, float *pfMaxProgress ) = 0;
// On PS3, user stats & achievement progress through Steam must be stored with the user's saved game data.
// At startup, before calling RequestCurrentStats(), you must pass the user's stats data to Steam via this method.
// If you do not have any user data, call this function with pvData = NULL and cubData = 0
virtual bool SetUserStatsData( const void *pvData, uint32 cubData ) = 0;
// Call to get the user's current stats data. You should retrieve this data after receiving successful UserStatsReceived_t & UserStatsStored_t
// callbacks, and store the data with the user's save game data. You can call this method with pvData = NULL and cubData = 0 to get the required
// buffer size.
virtual bool GetUserStatsData( void *pvData, uint32 cubData, uint32 *pcubWritten ) = 0;
#endif
};
#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION011"
#define STEAMUSERSTATS_INTERFACE_VERSION "STEAMUSERSTATS_INTERFACE_VERSION012"
// Global interface accessor
inline ISteamUserStats *SteamUserStats();
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+175 -123
View File
@@ -283,6 +283,13 @@
"fields": [],
"struct": "UnreadChatMessagesChanged_t"
},
{
"callback_id": 349,
"fields": [
{ "fieldname":"rgchURI", "fieldtype":"char [1024]" }
],
"struct": "OverlayBrowserProtocolNavigation_t"
},
{
"callback_id": 701,
"fields": [],
@@ -996,6 +1003,16 @@
],
"struct": "FileDetailsResult_t"
},
{
"callback_id": 1030,
"fields": [
{ "fieldname":"m_unAppID", "fieldtype":"AppId_t" },
{ "fieldname":"m_bIsOffline", "fieldtype":"bool" },
{ "fieldname":"m_unSecondsAllowed", "fieldtype":"uint32" },
{ "fieldname":"m_unSecondsPlayed", "fieldtype":"uint32" }
],
"struct": "TimedTrialStatus_t"
},
{
"callback_id": 1202,
"fields": [
@@ -1607,20 +1624,6 @@
],
"struct": "GetOPFSettingsResult_t"
},
{
"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": 5001,
"fields": [],
@@ -1866,6 +1869,12 @@
{ "constname":"k_cchMaxSteamNetworkingPingLocationString", "consttype":"int", "constval":"1024" },
{ "constname":"k_nSteamNetworkingPing_Failed", "consttype":"int", "constval":"- 1" },
{ "constname":"k_nSteamNetworkingPing_Unknown", "consttype":"int", "constval":"- 2" },
{ "constname":"k_nSteamNetworkingConfig_P2P_Transport_ICE_Enable_Default", "consttype":"int", "constval":"- 1" },
{ "constname":"k_nSteamNetworkingConfig_P2P_Transport_ICE_Enable_Disable", "consttype":"int", "constval":"0" },
{ "constname":"k_nSteamNetworkingConfig_P2P_Transport_ICE_Enable_Relay", "consttype":"int", "constval":"1" },
{ "constname":"k_nSteamNetworkingConfig_P2P_Transport_ICE_Enable_Private", "consttype":"int", "constval":"2" },
{ "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" },
@@ -2014,7 +2023,8 @@
{ "name":"k_EResultLimitedUserAccount", "value":"112" },
{ "name":"k_EResultCantRemoveItem", "value":"113" },
{ "name":"k_EResultAccountDeleted", "value":"114" },
{ "name":"k_EResultExistingUserCancelledLicense", "value":"115" }
{ "name":"k_EResultExistingUserCancelledLicense", "value":"115" },
{ "name":"k_EResultCommunityCooldown", "value":"116" }
]
},
{
@@ -2138,7 +2148,8 @@
{ "name":"k_EAppOwnershipFlags_Rental", "value":"131072" },
{ "name":"k_EAppOwnershipFlags_SiteLicense", "value":"262144" },
{ "name":"k_EAppOwnershipFlags_LegacyFreeSub", "value":"524288" },
{ "name":"k_EAppOwnershipFlags_InvalidOSType", "value":"1048576" }
{ "name":"k_EAppOwnershipFlags_InvalidOSType", "value":"1048576" },
{ "name":"k_EAppOwnershipFlags_TimedTrial", "value":"2097152" }
]
},
{
@@ -2376,6 +2387,15 @@
{ "name":"k_EDurationControlNotification_ExitSoon_Night", "value":"7" }
]
},
{
"enumname": "EDurationControlOnlineState",
"values": [
{ "name":"k_EDurationControlOnlineState_Invalid", "value":"0" },
{ "name":"k_EDurationControlOnlineState_Offline", "value":"1" },
{ "name":"k_EDurationControlOnlineState_Online", "value":"2" },
{ "name":"k_EDurationControlOnlineState_OnlineHighPri", "value":"3" }
]
},
{
"enumname": "EGameSearchErrorCode_t",
"values": [
@@ -2859,6 +2879,7 @@
{ "name":"k_EHTTPStatusCode417ExpectationFailed", "value":"417" },
{ "name":"k_EHTTPStatusCode4xxUnknown", "value":"418" },
{ "name":"k_EHTTPStatusCode429TooManyRequests", "value":"429" },
{ "name":"k_EHTTPStatusCode444ConnectionClosed", "value":"444" },
{ "name":"k_EHTTPStatusCode500InternalServerError", "value":"500" },
{ "name":"k_EHTTPStatusCode501NotImplemented", "value":"501" },
{ "name":"k_EHTTPStatusCode502BadGateway", "value":"502" },
@@ -3611,15 +3632,6 @@
{ "name":"k_ESteamItemConsumed", "value":"512" }
]
},
{
"enumname": "ESteamTVRegionBehavior",
"values": [
{ "name":"k_ESteamVideoRegionBehaviorInvalid", "value":"-1" },
{ "name":"k_ESteamVideoRegionBehaviorHover", "value":"0" },
{ "name":"k_ESteamVideoRegionBehaviorClickPopup", "value":"1" },
{ "name":"k_ESteamVideoRegionBehaviorClickSurroundingRegion", "value":"2" }
]
},
{
"enumname": "EParentalFeature",
"values": [
@@ -3709,6 +3721,7 @@
{ "name":"k_ESteamNetConnectionEnd_Local_HostedServerPrimaryRelay", "value":"3003" },
{ "name":"k_ESteamNetConnectionEnd_Local_NetworkConfig", "value":"3004" },
{ "name":"k_ESteamNetConnectionEnd_Local_Rights", "value":"3005" },
{ "name":"k_ESteamNetConnectionEnd_Local_P2P_ICE_NoPublicAddresses", "value":"3006" },
{ "name":"k_ESteamNetConnectionEnd_Local_Max", "value":"3999" },
{ "name":"k_ESteamNetConnectionEnd_Remote_Min", "value":"4000" },
{ "name":"k_ESteamNetConnectionEnd_Remote_Timeout", "value":"4001" },
@@ -3717,6 +3730,7 @@
{ "name":"k_ESteamNetConnectionEnd_Remote_NotLoggedIn", "value":"4004" },
{ "name":"k_ESteamNetConnectionEnd_Remote_NotRunningApp", "value":"4005" },
{ "name":"k_ESteamNetConnectionEnd_Remote_BadProtocolVersion", "value":"4006" },
{ "name":"k_ESteamNetConnectionEnd_Remote_P2P_ICE_NoPublicAddresses", "value":"4007" },
{ "name":"k_ESteamNetConnectionEnd_Remote_Max", "value":"4999" },
{ "name":"k_ESteamNetConnectionEnd_Misc_Min", "value":"5000" },
{ "name":"k_ESteamNetConnectionEnd_Misc_Generic", "value":"5001" },
@@ -3725,10 +3739,26 @@
{ "name":"k_ESteamNetConnectionEnd_Misc_RelayConnectivity", "value":"5004" },
{ "name":"k_ESteamNetConnectionEnd_Misc_SteamConnectivity", "value":"5005" },
{ "name":"k_ESteamNetConnectionEnd_Misc_NoRelaySessionsToClient", "value":"5006" },
{ "name":"k_ESteamNetConnectionEnd_Misc_P2P_Rendezvous", "value":"5008" },
{ "name":"k_ESteamNetConnectionEnd_Misc_P2P_NAT_Firewall", "value":"5009" },
{ "name":"k_ESteamNetConnectionEnd_Misc_Max", "value":"5999" },
{ "name":"k_ESteamNetConnectionEnd__Force32Bit", "value":"2147483647" }
]
},
{
"enumname": "ESteamNetTransportKind",
"values": [
{ "name":"k_ESteamNetTransport_Unknown", "value":"0" },
{ "name":"k_ESteamNetTransport_LoopbackBuffers", "value":"1" },
{ "name":"k_ESteamNetTransport_LocalHost", "value":"2" },
{ "name":"k_ESteamNetTransport_UDP", "value":"3" },
{ "name":"k_ESteamNetTransport_UDPProbablyLocal", "value":"4" },
{ "name":"k_ESteamNetTransport_TURN", "value":"5" },
{ "name":"k_ESteamNetTransport_SDRP2P", "value":"6" },
{ "name":"k_ESteamNetTransport_SDRHostedServer", "value":"7" },
{ "name":"k_ESteamNetTransport_Force32Bit", "value":"2147483647" }
]
},
{
"enumname": "ESteamNetworkingConfigScope",
"values": [
@@ -3775,6 +3805,10 @@
{ "name":"k_ESteamNetworkingConfig_MTU_DataSize", "value":"33" },
{ "name":"k_ESteamNetworkingConfig_Unencrypted", "value":"34" },
{ "name":"k_ESteamNetworkingConfig_EnumerateDevVars", "value":"35" },
{ "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" },
{ "name":"k_ESteamNetworkingConfig_P2P_Transport_SDR_Penalty", "value":"106" },
{ "name":"k_ESteamNetworkingConfig_SDRClient_ConsecutitivePingTimeoutsFailInitial", "value":"19" },
{ "name":"k_ESteamNetworkingConfig_SDRClient_ConsecutitivePingTimeoutsFail", "value":"20" },
{ "name":"k_ESteamNetworkingConfig_SDRClient_MinPingsBeforePingAccurate", "value":"21" },
@@ -4178,7 +4212,7 @@
{
"kind": "user",
"name": "SteamUser",
"name_flat": "SteamAPI_SteamUser_v020"
"name_flat": "SteamAPI_SteamUser_v021"
}
],
"classname": "ISteamUser",
@@ -4443,9 +4477,17 @@
"methodname_flat": "SteamAPI_ISteamUser_GetDurationControl",
"params": [],
"returntype": "SteamAPICall_t"
},
{
"methodname": "BSetDurationControlOnlineState",
"methodname_flat": "SteamAPI_ISteamUser_BSetDurationControlOnlineState",
"params": [
{ "paramname":"eNewState", "paramtype":"EDurationControlOnlineState" }
],
"returntype": "bool"
}
],
"version_string": "SteamUser020"
"version_string": "SteamUser021"
},
{
"accessors": [
@@ -5098,6 +5140,14 @@
{ "paramname":"steamIDLobby", "paramtype":"CSteamID", "paramtype_flat":"uint64_steamid" }
],
"returntype": "void"
},
{
"methodname": "RegisterProtocolInOverlayBrowser",
"methodname_flat": "SteamAPI_ISteamFriends_RegisterProtocolInOverlayBrowser",
"params": [
{ "paramname":"pchProtocol", "paramtype":"const char *" }
],
"returntype": "bool"
}
],
"version_string": "SteamFriends017"
@@ -6862,7 +6912,7 @@
{
"kind": "user",
"name": "SteamUserStats",
"name_flat": "SteamAPI_SteamUserStats_v011"
"name_flat": "SteamAPI_SteamUserStats_v012"
}
],
"classname": "ISteamUserStats",
@@ -7277,9 +7327,29 @@
{ "paramname":"cubData", "paramtype":"uint32" }
],
"returntype": "int32"
},
{
"methodname": "GetAchievementProgressLimits",
"methodname_flat": "SteamAPI_ISteamUserStats_GetAchievementProgressLimitsInt32",
"params": [
{ "paramname":"pchName", "paramtype":"const char *" },
{ "paramname":"pnMinProgress", "paramtype":"int32 *" },
{ "paramname":"pnMaxProgress", "paramtype":"int32 *" }
],
"returntype": "bool"
},
{
"methodname": "GetAchievementProgressLimits",
"methodname_flat": "SteamAPI_ISteamUserStats_GetAchievementProgressLimitsFloat",
"params": [
{ "paramname":"pchName", "paramtype":"const char *" },
{ "paramname":"pfMinProgress", "paramtype":"float *" },
{ "paramname":"pfMaxProgress", "paramtype":"float *" }
],
"returntype": "bool"
}
],
"version_string": "STEAMUSERSTATS_INTERFACE_VERSION011"
"version_string": "STEAMUSERSTATS_INTERFACE_VERSION012"
},
{
"accessors": [
@@ -7510,6 +7580,15 @@
"methodname_flat": "SteamAPI_ISteamApps_BIsSubscribedFromFamilySharing",
"params": [],
"returntype": "bool"
},
{
"methodname": "BIsTimedTrial",
"methodname_flat": "SteamAPI_ISteamApps_BIsTimedTrial",
"params": [
{ "paramname":"punSecondsAllowed", "paramtype":"uint32 *" },
{ "paramname":"punSecondsPlayed", "paramtype":"uint32 *" }
],
"returntype": "bool"
}
],
"version_string": "STEAMAPPS_INTERFACE_VERSION008"
@@ -10873,6 +10952,16 @@
{ "paramname":"pResultHandle", "paramtype":"SteamInventoryResult_t *" }
],
"returntype": "bool"
},
{
"desc": "Look up the given token and return a pseudo-Inventory item.",
"methodname": "InspectItem",
"methodname_flat": "SteamAPI_ISteamInventory_InspectItem",
"params": [
{ "paramname":"pResultHandle", "paramtype":"SteamInventoryResult_t *" },
{ "paramname":"pchItemToken", "paramtype":"const char *" }
],
"returntype": "bool"
}
],
"version_string": "STEAMINVENTORY_INTERFACE_V003"
@@ -10926,82 +11015,6 @@
],
"version_string": "STEAMVIDEO_INTERFACE_V002"
},
{
"accessors": [
{
"kind": "user",
"name": "SteamTV",
"name_flat": "SteamAPI_SteamTV_v001"
}
],
"classname": "ISteamTV",
"fields": [],
"methods": [
{
"methodname": "IsBroadcasting",
"methodname_flat": "SteamAPI_ISteamTV_IsBroadcasting",
"params": [
{ "paramname":"pnNumViewers", "paramtype":"int *" }
],
"returntype": "bool"
},
{
"methodname": "AddBroadcastGameData",
"methodname_flat": "SteamAPI_ISteamTV_AddBroadcastGameData",
"params": [
{ "paramname":"pchKey", "paramtype":"const char *" },
{ "paramname":"pchValue", "paramtype":"const char *" }
],
"returntype": "void"
},
{
"methodname": "RemoveBroadcastGameData",
"methodname_flat": "SteamAPI_ISteamTV_RemoveBroadcastGameData",
"params": [
{ "paramname":"pchKey", "paramtype":"const char *" }
],
"returntype": "void"
},
{
"methodname": "AddTimelineMarker",
"methodname_flat": "SteamAPI_ISteamTV_AddTimelineMarker",
"params": [
{ "paramname":"pchTemplateName", "paramtype":"const char *" },
{ "paramname":"bPersistent", "paramtype":"bool" },
{ "paramname":"nColorR", "paramtype":"uint8" },
{ "paramname":"nColorG", "paramtype":"uint8" },
{ "paramname":"nColorB", "paramtype":"uint8" }
],
"returntype": "void"
},
{
"methodname": "RemoveTimelineMarker",
"methodname_flat": "SteamAPI_ISteamTV_RemoveTimelineMarker",
"params": [],
"returntype": "void"
},
{
"methodname": "AddRegion",
"methodname_flat": "SteamAPI_ISteamTV_AddRegion",
"params": [
{ "paramname":"pchElementName", "paramtype":"const char *" },
{ "paramname":"pchTimelineDataSection", "paramtype":"const char *" },
{ "paramname":"pSteamTVRegion", "paramtype":"const SteamTVRegion_t *" },
{ "paramname":"eSteamTVRegionBehavior", "paramtype":"ESteamTVRegionBehavior" }
],
"returntype": "uint32"
},
{
"methodname": "RemoveRegion",
"methodname_flat": "SteamAPI_ISteamTV_RemoveRegion",
"params": [
{ "paramname":"unRegionHandle", "paramtype":"uint32" }
],
"returntype": "void"
}
],
"version_string": "STEAMTV_INTERFACE_V001"
},
{
"accessors": [
{
@@ -12337,13 +12350,6 @@
],
"struct": "FriendGameInfo_t"
},
{
"fields": [
{ "fieldname":"m_uiOnlineSessionInstances", "fieldtype":"uint32" },
{ "fieldname":"m_uiPublishedToFriendsSessionInstance", "fieldtype":"uint8" }
],
"struct": "FriendSessionStateInfo_t"
},
{
"fields": [
{ "fieldname":"m_szKey", "fieldtype":"char [256]" },
@@ -12624,15 +12630,6 @@
],
"struct": "SteamItemDetails_t"
},
{
"fields": [
{ "fieldname":"unMinX", "fieldtype":"uint32" },
{ "fieldname":"unMinY", "fieldtype":"uint32" },
{ "fieldname":"unMaxX", "fieldtype":"uint32" },
{ "fieldname":"unMaxY", "fieldtype":"uint32" }
],
"struct": "SteamTVRegion_t"
},
{
"consts": [
{ "constname":"k_cchMaxString", "consttype":"int", "constval":"48" }
@@ -12731,7 +12728,7 @@
"consts": [
{ "constname":"k_cchMaxString", "consttype":"int", "constval":"128" },
{ "constname":"k_cchMaxGenericString", "consttype":"int", "constval":"32" },
{ "constname":"k_cchMaxXboxPairwiseID", "consttype":"int", "constval":"32" },
{ "constname":"k_cchMaxXboxPairwiseID", "consttype":"int", "constval":"33" },
{ "constname":"k_cbMaxGenericBytes", "consttype":"int", "constval":"32" }
],
"fields": [
@@ -12893,7 +12890,8 @@
{ "fieldname":"m_eEndReason", "fieldtype":"int" },
{ "fieldname":"m_szEndDebug", "fieldtype":"char [128]" },
{ "fieldname":"m_szConnectionDescription", "fieldtype":"char [128]" },
{ "fieldname":"reserved", "fieldtype":"uint32 [64]" }
{ "fieldname":"m_eTransportKind", "fieldtype":"ESteamNetTransportKind" },
{ "fieldname":"reserved", "fieldtype":"uint32 [63]" }
],
"struct": "SteamNetConnectionInfo_t"
},
@@ -12955,6 +12953,60 @@
],
"struct": "SteamNetworkingConfigValue_t"
},
{
"fields": [
{
"fieldname": "buf",
"fieldtype": "char [8]",
"private": true
}
],
"methods": [
{
"methodname": "c_str",
"methodname_flat": "SteamAPI_SteamNetworkingPOPIDRender_c_str",
"params": [],
"returntype": "const char *"
}
],
"struct": "SteamNetworkingPOPIDRender"
},
{
"fields": [
{
"fieldname": "buf",
"fieldtype": "char [128]",
"private": true
}
],
"methods": [
{
"methodname": "c_str",
"methodname_flat": "SteamAPI_SteamNetworkingIdentityRender_c_str",
"params": [],
"returntype": "const char *"
}
],
"struct": "SteamNetworkingIdentityRender"
},
{
"fields": [
{
"fieldname": "buf",
"fieldtype": "char [48]",
"private": true
}
],
"methods": [
{
"methodname": "c_str",
"methodname_flat": "SteamAPI_SteamNetworkingIPAddrRender_c_str",
"params": [],
"returntype": "const char *"
}
],
"struct": "SteamNetworkingIPAddrRender"
},
{
"fields": [
{ "fieldname":"m_cbSize", "fieldtype":"int" },
+17 -12
View File
@@ -56,7 +56,7 @@ S_API ISteamParties * SteamAPI_ISteamClient_GetISteamParties( ISteamClient* self
S_API ISteamRemotePlay * SteamAPI_ISteamClient_GetISteamRemotePlay( ISteamClient* self, HSteamUser hSteamUser, HSteamPipe hSteamPipe, const char * pchVersion );
// ISteamUser
S_API ISteamUser *SteamAPI_SteamUser_v020();
S_API ISteamUser *SteamAPI_SteamUser_v021();
S_API HSteamUser SteamAPI_ISteamUser_GetHSteamUser( ISteamUser* self );
S_API bool SteamAPI_ISteamUser_BLoggedOn( ISteamUser* self );
S_API uint64_steamid SteamAPI_ISteamUser_GetSteamID( ISteamUser* self );
@@ -88,6 +88,7 @@ S_API bool SteamAPI_ISteamUser_BIsPhoneIdentifying( ISteamUser* self );
S_API bool SteamAPI_ISteamUser_BIsPhoneRequiringVerification( ISteamUser* self );
S_API SteamAPICall_t SteamAPI_ISteamUser_GetMarketEligibility( ISteamUser* self );
S_API SteamAPICall_t SteamAPI_ISteamUser_GetDurationControl( ISteamUser* self );
S_API bool SteamAPI_ISteamUser_BSetDurationControlOnlineState( ISteamUser* self, EDurationControlOnlineState eNewState );
// ISteamFriends
S_API ISteamFriends *SteamAPI_SteamFriends_v017();
@@ -165,6 +166,7 @@ S_API bool SteamAPI_ISteamFriends_IsClanPublic( ISteamFriends* self, uint64_stea
S_API bool SteamAPI_ISteamFriends_IsClanOfficialGameGroup( ISteamFriends* self, uint64_steamid steamIDClan );
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 );
// ISteamUtils
S_API ISteamUtils *SteamAPI_SteamUtils_v009();
@@ -374,7 +376,7 @@ S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_EnumeratePublishedWorkshopFile
S_API SteamAPICall_t SteamAPI_ISteamRemoteStorage_UGCDownloadToLocation( ISteamRemoteStorage* self, UGCHandle_t hContent, const char * pchLocation, uint32 unPriority );
// ISteamUserStats
S_API ISteamUserStats *SteamAPI_SteamUserStats_v011();
S_API ISteamUserStats *SteamAPI_SteamUserStats_v012();
S_API bool SteamAPI_ISteamUserStats_RequestCurrentStats( ISteamUserStats* self );
S_API bool SteamAPI_ISteamUserStats_GetStatInt32( ISteamUserStats* self, const char * pchName, int32 * pData );
S_API bool SteamAPI_ISteamUserStats_GetStatFloat( ISteamUserStats* self, const char * pchName, float * pData );
@@ -418,6 +420,8 @@ S_API bool SteamAPI_ISteamUserStats_GetGlobalStatInt64( ISteamUserStats* self, c
S_API bool SteamAPI_ISteamUserStats_GetGlobalStatDouble( ISteamUserStats* self, const char * pchStatName, double * pData );
S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistoryInt64( ISteamUserStats* self, const char * pchStatName, int64 * pData, uint32 cubData );
S_API int32 SteamAPI_ISteamUserStats_GetGlobalStatHistoryDouble( ISteamUserStats* self, const char * pchStatName, double * pData, uint32 cubData );
S_API bool SteamAPI_ISteamUserStats_GetAchievementProgressLimitsInt32( ISteamUserStats* self, const char * pchName, int32 * pnMinProgress, int32 * pnMaxProgress );
S_API bool SteamAPI_ISteamUserStats_GetAchievementProgressLimitsFloat( ISteamUserStats* self, const char * pchName, float * pfMinProgress, float * pfMaxProgress );
// ISteamApps
S_API ISteamApps *SteamAPI_SteamApps_v008();
@@ -450,6 +454,7 @@ S_API void SteamAPI_ISteamApps_RequestAllProofOfPurchaseKeys( ISteamApps* self )
S_API SteamAPICall_t SteamAPI_ISteamApps_GetFileDetails( ISteamApps* self, const char * pszFileName );
S_API int SteamAPI_ISteamApps_GetLaunchCommandLine( ISteamApps* self, char * pszCommandLine, int cubCommandLine );
S_API bool SteamAPI_ISteamApps_BIsSubscribedFromFamilySharing( ISteamApps* self );
S_API bool SteamAPI_ISteamApps_BIsTimedTrial( ISteamApps* self, uint32 * punSecondsAllowed, uint32 * punSecondsPlayed );
// ISteamNetworking
S_API ISteamNetworking *SteamAPI_SteamNetworking_v006();
@@ -811,6 +816,7 @@ S_API bool SteamAPI_ISteamInventory_SetPropertyBool( ISteamInventory* self, Stea
S_API bool SteamAPI_ISteamInventory_SetPropertyInt64( ISteamInventory* self, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName, int64 nValue );
S_API bool SteamAPI_ISteamInventory_SetPropertyFloat( ISteamInventory* self, SteamInventoryUpdateHandle_t handle, SteamItemInstanceID_t nItemID, const char * pchPropertyName, float flValue );
S_API bool SteamAPI_ISteamInventory_SubmitUpdateProperties( ISteamInventory* self, SteamInventoryUpdateHandle_t handle, SteamInventoryResult_t * pResultHandle );
S_API bool SteamAPI_ISteamInventory_InspectItem( ISteamInventory* self, SteamInventoryResult_t * pResultHandle, const char * pchItemToken );
// ISteamVideo
S_API ISteamVideo *SteamAPI_SteamVideo_v002();
@@ -819,16 +825,6 @@ S_API bool SteamAPI_ISteamVideo_IsBroadcasting( ISteamVideo* self, int * pnNumVi
S_API void SteamAPI_ISteamVideo_GetOPFSettings( ISteamVideo* self, AppId_t unVideoAppID );
S_API bool SteamAPI_ISteamVideo_GetOPFStringForApp( ISteamVideo* self, AppId_t unVideoAppID, char * pchBuffer, int32 * pnBufferSize );
// ISteamTV
S_API ISteamTV *SteamAPI_SteamTV_v001();
S_API bool SteamAPI_ISteamTV_IsBroadcasting( ISteamTV* self, int * pnNumViewers );
S_API void SteamAPI_ISteamTV_AddBroadcastGameData( ISteamTV* self, const char * pchKey, const char * pchValue );
S_API void SteamAPI_ISteamTV_RemoveBroadcastGameData( ISteamTV* self, const char * pchKey );
S_API void SteamAPI_ISteamTV_AddTimelineMarker( ISteamTV* self, const char * pchTemplateName, bool bPersistent, uint8 nColorR, uint8 nColorG, uint8 nColorB );
S_API void SteamAPI_ISteamTV_RemoveTimelineMarker( ISteamTV* self );
S_API uint32 SteamAPI_ISteamTV_AddRegion( ISteamTV* self, const char * pchElementName, const char * pchTimelineDataSection, const SteamTVRegion_t * pSteamTVRegion, ESteamTVRegionBehavior eSteamTVRegionBehavior );
S_API void SteamAPI_ISteamTV_RemoveRegion( ISteamTV* self, uint32 unRegionHandle );
// ISteamParentalSettings
S_API ISteamParentalSettings *SteamAPI_SteamParentalSettings_v001();
S_API bool SteamAPI_ISteamParentalSettings_BIsParentalLockEnabled( ISteamParentalSettings* self );
@@ -1053,6 +1049,15 @@ S_API bool SteamAPI_SteamNetworkingIdentity_ParseString( SteamNetworkingIdentity
// SteamNetworkingMessage_t
S_API void SteamAPI_SteamNetworkingMessage_t_Release( SteamNetworkingMessage_t* self );
// SteamNetworkingPOPIDRender
S_API const char * SteamAPI_SteamNetworkingPOPIDRender_c_str( SteamNetworkingPOPIDRender* self );
// SteamNetworkingIdentityRender
S_API const char * SteamAPI_SteamNetworkingIdentityRender_c_str( SteamNetworkingIdentityRender* self );
// SteamNetworkingIPAddrRender
S_API const char * SteamAPI_SteamNetworkingIPAddrRender_c_str( SteamNetworkingIPAddrRender* self );
// SteamDatagramHostedAddress
S_API void SteamAPI_SteamDatagramHostedAddress_Clear( SteamDatagramHostedAddress* self );
S_API SteamNetworkingPOPID SteamAPI_SteamDatagramHostedAddress_GetPopID( SteamDatagramHostedAddress* self );
+1 -3
View File
@@ -242,7 +242,6 @@ class ISteamParentalSettings;
class ISteamGameSearch;
class ISteamInput;
class ISteamParties;
class ISteamTV;
class ISteamRemotePlay;
//-----------------------------------------------------------------------------
@@ -310,6 +309,7 @@ enum { k_iSteamSTARCallbacks = 5500 };
enum { k_iClientSTARCallbacks = 5600 };
enum { k_iSteamRemotePlayCallbacks = 5700 };
enum { k_iClientCompatCallbacks = 5800 };
enum { k_iSteamChatCallbacks = 5900 };
#ifdef _MSVC_VER
#pragma warning( pop )
@@ -348,7 +348,6 @@ public:
ISteamHTMLSurface* SteamHTMLSurface() const { return m_pSteamHTMLSurface; }
ISteamInventory* SteamInventory() const { return m_pSteamInventory; }
ISteamVideo* SteamVideo() const { return m_pSteamVideo; }
ISteamTV* SteamTV() const { return m_pSteamTV; }
ISteamParentalSettings* SteamParentalSettings() const { return m_pSteamParentalSettings; }
ISteamInput* SteamInput() const { return m_pSteamInput; }
private:
@@ -373,7 +372,6 @@ private:
ISteamHTMLSurface *m_pSteamHTMLSurface;
ISteamInventory *m_pSteamInventory;
ISteamVideo *m_pSteamVideo;
ISteamTV *m_pSteamTV;
ISteamParentalSettings *m_pSteamParentalSettings;
ISteamInput *m_pSteamInput;
};
+29 -3
View File
@@ -141,6 +141,7 @@ enum EResult
k_EResultCantRemoveItem = 113, // item can't be removed
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)
};
// Error codes for use with the voice functions
@@ -246,9 +247,9 @@ enum EAccountType
enum EAppReleaseState
{
k_EAppReleaseState_Unknown = 0, // unknown, required appinfo or license info is missing
k_EAppReleaseState_Unavailable = 1, // even if user 'just' owns it, can see game at all
k_EAppReleaseState_Prerelease = 2, // can be purchased and is visible in games list, nothing else. Common appInfo section released
k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, not play it. AppInfo fully released.
k_EAppReleaseState_Unavailable = 1, // even owners can't see game in library yet, no AppInfo released
k_EAppReleaseState_Prerelease = 2, // app can be purchased and is visible in library, nothing else. Only Common AppInfo section released
k_EAppReleaseState_PreloadOnly = 3, // owners can preload app, but not play it. All AppInfo sections fully released
k_EAppReleaseState_Released = 4, // owners can download and play app.
};
@@ -280,6 +281,7 @@ enum EAppOwnershipFlags
k_EAppOwnershipFlags_SiteLicense = 0x40000, // Is from a site license
k_EAppOwnershipFlags_LegacyFreeSub = 0x80000, // App only owned through Steam's legacy free sub
k_EAppOwnershipFlags_InvalidOSType = 0x100000, // app not supported on current OS version, used to indicate a game is 32-bit on post-catalina. Currently it's own flag so the library will display a notice.
k_EAppOwnershipFlags_TimedTrial = 0x200000, // App is playable only for limited time
};
@@ -504,6 +506,18 @@ static inline bool BIsVRLaunchOptionType( const ELaunchOptionType eType )
}
//-----------------------------------------------------------------------------
// Purpose: true if this launch option is any of the vr launching types
//-----------------------------------------------------------------------------
static inline bool BIsLaunchOptionTypeExemptFromGameTheater( const ELaunchOptionType eType )
{
return eType == k_ELaunchOptionType_Config
|| eType == k_ELaunchOptionType_Server
|| eType == k_ELaunchOptionType_Editor
|| eType == k_ELaunchOptionType_Manual;
}
//-----------------------------------------------------------------------------
// Purpose: code points for VR HMD vendors and models
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN A DATABASE
@@ -693,6 +707,18 @@ enum EDurationControlNotification
};
//
// Specifies a game's online state in relation to duration control
//
enum EDurationControlOnlineState
{
k_EDurationControlOnlineState_Invalid = 0, // nil value
k_EDurationControlOnlineState_Offline = 1, // currently in offline play - single-player, offline co-op, etc.
k_EDurationControlOnlineState_Online = 2, // currently in online play
k_EDurationControlOnlineState_OnlineHighPri = 3, // currently in online play and requests not to be interrupted
};
#pragma pack( push, 1 )
#define CSTEAMID_DEFINED
+4
View File
@@ -34,3 +34,7 @@ S_API bool SteamEncryptedAppTicket_BGetAppDefinedValue( uint8 *rgubTicketDecrypt
S_API const uint8 *SteamEncryptedAppTicket_GetUserVariableData( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, uint32 *pcubUserData );
S_API bool SteamEncryptedAppTicket_BIsTicketSigned( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted, const uint8 *pubRSAKey, uint32 cubRSAKey );
S_API bool SteamEncryptedAppTicket_BIsLicenseBorrowed( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
S_API bool SteamEncryptedAppTicket_BIsLicenseTemporary( uint8 *rgubTicketDecrypted, uint32 cubTicketDecrypted );
+1
View File
@@ -84,6 +84,7 @@ enum EHTTPStatusCode
k_EHTTPStatusCode417ExpectationFailed = 417,
k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
k_EHTTPStatusCode429TooManyRequests = 429,
k_EHTTPStatusCode444ConnectionClosed = 444, // nginx only?
// Server error codes
k_EHTTPStatusCode500InternalServerError = 500,
+106 -14
View File
@@ -22,7 +22,6 @@
#endif
#define STEAMNETWORKINGSOCKETS_STEAMCLIENT
#define STEAMNETWORKINGSOCKETS_ENABLE_SDR
#define STEAMNETWORKINGSOCKETS_ENABLE_P2P
#include "steam_api_common.h"
//
//----------------------------------------
@@ -180,6 +179,8 @@ struct SteamNetworkingIPAddr
/// form according to RFC5952. If you include the port, IPv6 will be surrounded by
/// brackets, e.g. [::1:2]:80. Your buffer should be at least k_cchMaxString bytes
/// to avoid truncation
///
/// See also SteamNetworkingIdentityRender
inline void ToString( char *buf, size_t cbBuf, bool bWithPort ) const;
/// Parse an IP address and optional port. If a port is not present, it is set to 0.
@@ -248,11 +249,13 @@ struct SteamNetworkingIdentity
/// or any other time you need to encode the identity as a string. It has a
/// URL-like format (type:<type-data>). Your buffer should be at least
/// k_cchMaxString bytes big to avoid truncation.
///
/// See also SteamNetworkingIPAddrRender
void ToString( char *buf, size_t cbBuf ) const;
/// Parse back a string that was generated using ToString. If we don't understand the
/// string, but it looks "reasonable" (it matches the pattern type:<type-data> and doesn't
/// have any funcky characters, etc), then we will return true, and the type is set to
/// have any funky characters, etc), then we will return true, and the type is set to
/// k_ESteamNetworkingIdentityType_UnknownType. false will only be returned if the string
/// looks invalid.
bool ParseString( const char *pszStr );
@@ -463,7 +466,7 @@ enum ESteamNetConnectionEnd
// on our end
k_ESteamNetConnectionEnd_Local_HostedServerPrimaryRelay = 3003,
// We're not able to get the network config. This is
// We're not able to get the SDR network config. This is
// *almost* always a local issue, since the network config
// comes from the CDN, which is pretty darn reliable.
k_ESteamNetConnectionEnd_Local_NetworkConfig = 3004,
@@ -472,6 +475,14 @@ enum ESteamNetConnectionEnd
// to do this.
k_ESteamNetConnectionEnd_Local_Rights = 3005,
// ICE P2P rendezvous failed because we were not able to
// determine our "public" address (e.g. reflexive address via STUN)
//
// If relay fallback is available (it always is on Steam), then
// this is only used internally and will not be returned as a high
// level failure.
k_ESteamNetConnectionEnd_Local_P2P_ICE_NoPublicAddresses = 3006,
k_ESteamNetConnectionEnd_Local_Max = 3999,
// 4xxx: Connection failed or ended, and it appears that the
@@ -514,6 +525,15 @@ enum ESteamNetConnectionEnd
// (Probably the code you are running is too old.)
k_ESteamNetConnectionEnd_Remote_BadProtocolVersion = 4006,
// NAT punch failed failed because we never received any public
// addresses from the remote host. (But we did receive some
// signals form them.)
//
// If relay fallback is available (it always is on Steam), then
// this is only used internally and will not be returned as a high
// level failure.
k_ESteamNetConnectionEnd_Remote_P2P_ICE_NoPublicAddresses = 4007,
k_ESteamNetConnectionEnd_Remote_Max = 4999,
// 5xxx: Connection failed for some other reason.
@@ -546,6 +566,21 @@ enum ESteamNetConnectionEnd
// job to open and maintain those sessions.)
k_ESteamNetConnectionEnd_Misc_NoRelaySessionsToClient = 5006,
// While trying to initiate a connection, we never received
// *any* communication from the peer.
//k_ESteamNetConnectionEnd_Misc_ServerNeverReplied = 5007,
// P2P rendezvous failed in a way that we don't have more specific
// information
k_ESteamNetConnectionEnd_Misc_P2P_Rendezvous = 5008,
// NAT punch failed, probably due to NAT/firewall configuration.
//
// If relay fallback is available (it always is on Steam), then
// this is only used internally and will not be returned as a high
// level failure.
k_ESteamNetConnectionEnd_Misc_P2P_NAT_Firewall = 5009,
k_ESteamNetConnectionEnd_Misc_Max = 5999,
k_ESteamNetConnectionEnd__Force32Bit = 0x7fffffff
@@ -1055,6 +1090,39 @@ enum ESteamNetworkingConfigValue
/// (This flag is itself a dev variable.)
k_ESteamNetworkingConfig_EnumerateDevVars = 35,
//
// P2P settings
//
// /// [listen socket int32] When you create a P2P listen socket, we will automatically
// /// open up a UDP port to listen for LAN connections. LAN connections can be made
// /// without any signaling: both sides can be disconnected from the Internet.
// ///
// /// This value can be set to zero to disable the feature.
// k_ESteamNetworkingConfig_P2P_Discovery_Server_LocalPort = 101,
//
// /// [connection int32] P2P connections can perform broadcasts looking for the peer
// /// on the LAN.
// k_ESteamNetworkingConfig_P2P_Discovery_Client_RemotePort = 102,
/// [connection string] Comma-separated list of STUN servers that can be used
/// for NAT piercing. If you set this to an empty string, NAT piercing will
/// not be attempted. Also if "public" candidates are not allowed for
/// P2P_Transport_ICE_Enable, then this is ignored.
k_ESteamNetworkingConfig_P2P_STUN_ServerList = 103,
/// [connection int32] What types of ICE candidates to share with the peer.
/// See k_nSteamNetworkingConfig_P2P_Transport_ICE_Enable_xxx values
k_ESteamNetworkingConfig_P2P_Transport_ICE_Enable = 104,
/// [connection int32] When selecting P2P transport, add various
/// penalties to the scores for selected transports. (Route selection
/// scores are on a scale of milliseconds. The score begins with the
/// route ping time and is then adjusted.)
k_ESteamNetworkingConfig_P2P_Transport_ICE_Penalty = 105,
k_ESteamNetworkingConfig_P2P_Transport_SDR_Penalty = 106,
//k_ESteamNetworkingConfig_P2P_Transport_LANBeacon_Penalty = 107,
//
// Settings for SDR relayed connections
//
@@ -1105,11 +1173,15 @@ enum ESteamNetworkingConfigValue
k_ESteamNetworkingConfig_SDRClient_FakeClusterPing = 36,
//
// Log levels for debuging information. A higher priority
// (lower numeric value) will cause more stuff to be printed.
// Log levels for debugging information of various subsystems.
// Higher numeric values will cause more stuff to be printed.
// See ISteamNetworkingUtils::SetDebugOutputFunction for more
// information
//
// The default for all values is k_ESteamNetworkingSocketsDebugOutputType_Warning.
//
k_ESteamNetworkingConfig_LogLevel_AckRTT = 13, // [connection int32] RTT calculations for inline pings and replies
k_ESteamNetworkingConfig_LogLevel_PacketDecode = 14, // [connection int32] log SNP packets send
k_ESteamNetworkingConfig_LogLevel_PacketDecode = 14, // [connection int32] log SNP packets send/recv
k_ESteamNetworkingConfig_LogLevel_Message = 15, // [connection int32] log each message send/recv
k_ESteamNetworkingConfig_LogLevel_PacketGaps = 16, // [connection int32] dropped packets
k_ESteamNetworkingConfig_LogLevel_P2PRendezvous = 17, // [connection int32] P2P rendezvous messages
@@ -1118,6 +1190,14 @@ enum ESteamNetworkingConfigValue
k_ESteamNetworkingConfigValue__Force32Bit = 0x7fffffff
};
// Bitmask of types to share
const int k_nSteamNetworkingConfig_P2P_Transport_ICE_Enable_Default = -1; // Special value - use user defaults
const int k_nSteamNetworkingConfig_P2P_Transport_ICE_Enable_Disable = 0; // Do not do any ICE work at all or share any IP addresses with peer
const int k_nSteamNetworkingConfig_P2P_Transport_ICE_Enable_Relay = 1; // Relayed connection via TURN server.
const int k_nSteamNetworkingConfig_P2P_Transport_ICE_Enable_Private = 2; // host addresses that appear to be link-local or RFC1918 addresses
const int k_nSteamNetworkingConfig_P2P_Transport_ICE_Enable_Public = 4; // STUN reflexive addresses, or host address that isn't a "private" address
const int k_nSteamNetworkingConfig_P2P_Transport_ICE_Enable_All = 0x7fffffff;
/// In a few places we need to set configuration options on listen sockets and connections, and
/// have them take effect *before* the listen socket or connection really starts doing anything.
/// Creating the object and then setting the options "immediately" after creation doesn't work
@@ -1214,6 +1294,8 @@ inline SteamNetworkingPOPID CalculateSteamNetworkingPOPIDFromString( const char
}
/// Unpack integer to string representation, including terminating '\0'
///
/// See also SteamNetworkingPOPIDRender
template <int N>
inline void GetSteamNetworkingLocationPOPStringFromID( SteamNetworkingPOPID id, char (&szCode)[N] )
{
@@ -1228,6 +1310,16 @@ inline void GetSteamNetworkingLocationPOPStringFromID( SteamNetworkingPOPID id,
/// The POPID "dev" is used in non-production environments for testing.
const SteamNetworkingPOPID k_SteamDatagramPOPID_dev = ( (uint32)'d' << 16U ) | ( (uint32)'e' << 8U ) | (uint32)'v';
/// Utility class for printing a SteamNetworkingPOPID.
struct SteamNetworkingPOPIDRender
{
SteamNetworkingPOPIDRender( SteamNetworkingPOPID x ) { GetSteamNetworkingLocationPOPStringFromID( x, buf ); }
inline const char *c_str() const { return buf; }
private:
char buf[ 8 ];
};
///////////////////////////////////////////////////////////////////////////////
//
// Internal stuff
@@ -1268,14 +1360,14 @@ inline bool SteamNetworkingIdentity::operator==(const SteamNetworkingIdentity &x
inline void SteamNetworkingMessage_t::Release() { (*m_pfnRelease)( this ); }
#if defined( STEAMNETWORKINGSOCKETS_STATIC_LINK ) || !defined( STEAMNETWORKINGSOCKETS_STEAMCLIENT )
STEAMNETWORKINGSOCKETS_INTERFACE void SteamAPI_SteamNetworkingIPAddr_ToString( const SteamNetworkingIPAddr *pAddr, char *buf, size_t cbBuf, bool bWithPort );
STEAMNETWORKINGSOCKETS_INTERFACE bool SteamAPI_SteamNetworkingIPAddr_ParseString( SteamNetworkingIPAddr *pAddr, const char *pszStr );
STEAMNETWORKINGSOCKETS_INTERFACE void SteamAPI_SteamNetworkingIdentity_ToString( const SteamNetworkingIdentity &identity, char *buf, size_t cbBuf );
STEAMNETWORKINGSOCKETS_INTERFACE bool SteamAPI_SteamNetworkingIdentity_ParseString( SteamNetworkingIdentity *pIdentity, size_t sizeofIdentity, const char *pszStr );
inline void SteamNetworkingIPAddr::ToString( char *buf, size_t cbBuf, bool bWithPort ) const { SteamAPI_SteamNetworkingIPAddr_ToString( this, buf, cbBuf, bWithPort ); }
inline bool SteamNetworkingIPAddr::ParseString( const char *pszStr ) { return SteamAPI_SteamNetworkingIPAddr_ParseString( this, pszStr ); }
inline void SteamNetworkingIdentity::ToString( char *buf, size_t cbBuf ) const { SteamAPI_SteamNetworkingIdentity_ToString( *this, buf, cbBuf ); }
inline bool SteamNetworkingIdentity::ParseString( const char *pszStr ) { return SteamAPI_SteamNetworkingIdentity_ParseString( this, sizeof(*this), pszStr ); }
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
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -2
View File
@@ -214,8 +214,7 @@ CGameEngineWin32::CGameEngineWin32( HINSTANCE hInstance, int nShowCommand, int32
// Create a mastering voice
if( FAILED( m_pXAudio2->CreateMasteringVoice( &m_pMasteringVoice, XAUDIO2_DEFAULT_CHANNELS, VOICE_OUTPUT_SAMPLE_RATE ) ) )
{
::MessageBoxA( NULL, "Failed to create mastering voice", "SteamworksExample - Fatal error", MB_OK | MB_ICONERROR );
return;
::MessageBoxA( NULL, "Failed to create mastering voice", "SteamworksExample", MB_OK | MB_ICONERROR );
}
@@ -51,6 +51,9 @@
50E77DF61362190C000FC072 /* mathlite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50E77DE91362190C000FC072 /* mathlite.cpp */; };
50E77DF813621991000FC072 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50E77DF713621991000FC072 /* IOKit.framework */; };
840B387019BB91C50084B9F1 /* htmlsurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 840B386E19BB91C50084B9F1 /* htmlsurface.cpp */; };
A4B5A0FD24906974000E9151 /* RemotePlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4B5A0FC24906974000E9151 /* RemotePlay.cpp */; };
A4B5A101249069C9000E9151 /* remotestoragesync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4B5A0FF249069C9000E9151 /* remotestoragesync.cpp */; };
A4B5A10424906A0E000E9151 /* SimpleProtobuf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4B5A10324906A0E000E9151 /* SimpleProtobuf.cpp */; };
BA60B6B81A82EDD200F4AC4F /* Friends.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA60B6B41A82EDD200F4AC4F /* Friends.cpp */; };
BA60B6B91A82EDD200F4AC4F /* Inventory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BA60B6B61A82EDD200F4AC4F /* Inventory.cpp */; };
F803305119087F9200344590 /* musicplayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F803305019087F9200344590 /* musicplayer.cpp */; };
@@ -160,6 +163,12 @@
50E77DF713621991000FC072 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
840B386E19BB91C50084B9F1 /* htmlsurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = htmlsurface.cpp; sourceTree = "<group>"; };
840B386F19BB91C50084B9F1 /* htmlsurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = htmlsurface.h; sourceTree = "<group>"; };
A4B5A0FC24906974000E9151 /* RemotePlay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemotePlay.cpp; sourceTree = "<group>"; };
A4B5A0FE2490698A000E9151 /* RemotePlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemotePlay.h; sourceTree = "<group>"; };
A4B5A0FF249069C9000E9151 /* remotestoragesync.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remotestoragesync.cpp; sourceTree = "<group>"; };
A4B5A100249069C9000E9151 /* remotestoragesync.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remotestoragesync.h; sourceTree = "<group>"; };
A4B5A10224906A0E000E9151 /* SimpleProtobuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleProtobuf.h; sourceTree = "<group>"; };
A4B5A10324906A0E000E9151 /* SimpleProtobuf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimpleProtobuf.cpp; sourceTree = "<group>"; };
BA60B6B41A82EDD200F4AC4F /* Friends.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Friends.cpp; sourceTree = "<group>"; };
BA60B6B51A82EDD200F4AC4F /* Friends.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Friends.h; sourceTree = "<group>"; };
BA60B6B61A82EDD200F4AC4F /* Inventory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Inventory.cpp; sourceTree = "<group>"; };
@@ -228,6 +237,9 @@
503C6CE71268F49F00B66E3B /* Main.cpp */,
503C6CE81268F49F00B66E3B /* MainMenu.cpp */,
F803305019087F9200344590 /* musicplayer.cpp */,
A4B5A0FC24906974000E9151 /* RemotePlay.cpp */,
A4B5A0FF249069C9000E9151 /* remotestoragesync.cpp */,
A4B5A10324906A0E000E9151 /* SimpleProtobuf.cpp */,
);
name = Source;
sourceTree = "<group>";
@@ -297,6 +309,9 @@
503C6CE91268F49F00B66E3B /* MainMenu.h */,
503C6CEA1268F49F00B66E3B /* Messages.h */,
F803304F19087DA600344590 /* musicplayer.h */,
A4B5A0FE2490698A000E9151 /* RemotePlay.h */,
A4B5A100249069C9000E9151 /* remotestoragesync.h */,
A4B5A10224906A0E000E9151 /* SimpleProtobuf.h */,
);
name = Headers;
sourceTree = "<group>";
@@ -403,6 +418,7 @@
503C6D131268F49F00B66E3B /* glstringosx.mm in Sources */,
503C6D141268F49F00B66E3B /* Leaderboards.cpp in Sources */,
503C6D151268F49F00B66E3B /* Lobby.cpp in Sources */,
A4B5A0FD24906974000E9151 /* RemotePlay.cpp in Sources */,
503C6D161268F49F00B66E3B /* Main.cpp in Sources */,
503C6D171268F49F00B66E3B /* MainMenu.cpp in Sources */,
503C6D191268F49F00B66E3B /* p2pauth.cpp in Sources */,
@@ -426,12 +442,14 @@
BA60B6B91A82EDD200F4AC4F /* Inventory.cpp in Sources */,
50E77DEE1362190C000FC072 /* cglmquery.cpp in Sources */,
50E77DEF1362190C000FC072 /* cglmtex.cpp in Sources */,
A4B5A10424906A0E000E9151 /* SimpleProtobuf.cpp in Sources */,
50E77DF01362190C000FC072 /* dx9asmtogl2.cpp in Sources */,
50E77DF11362190C000FC072 /* dxabstract.cpp in Sources */,
50E77DF21362190C000FC072 /* glmgr.cpp in Sources */,
50E77DF31362190C000FC072 /* glmgrbasics.cpp in Sources */,
50E77DF41362190C000FC072 /* glmgrcocoa.mm in Sources */,
50E77DF51362190C000FC072 /* glmgrext.cpp in Sources */,
A4B5A101249069C9000E9151 /* remotestoragesync.cpp in Sources */,
BA60B6B81A82EDD200F4AC4F /* Friends.cpp in Sources */,
50E77DF61362190C000FC072 /* mathlite.cpp in Sources */,
50D642871461EF3200A5739B /* clanchatroom.cpp in Sources */,
@@ -455,8 +473,9 @@
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.6;
MACOSX_DEPLOYMENT_TARGET = 10.9;
ONLY_ACTIVE_ARCH = NO;
OTHER_CODE_SIGN_FLAGS = "--deep";
PREBINDING = NO;
SDKROOT = macosx10.9;
USER_HEADER_SEARCH_PATHS = ../public;
@@ -475,8 +494,9 @@
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.6;
MACOSX_DEPLOYMENT_TARGET = 10.9;
ONLY_ACTIVE_ARCH = NO;
OTHER_CODE_SIGN_FLAGS = "--deep";
PREBINDING = NO;
SDKROOT = macosx10.9;
USER_HEADER_SEARCH_PATHS = ../public;
@@ -504,7 +524,6 @@
"\"$(SRCROOT)/../lib/osx/release\"",
../redistributable_bin/osx/,
);
MACOSX_DEPLOYMENT_TARGET = 10.6;
PRODUCT_NAME = steamworksexample;
SDKROOT = macosx10.9;
WRAPPER_EXTENSION = app;
@@ -533,7 +552,6 @@
"\"$(SRCROOT)/../lib/osx/release\"",
../redistributable_bin/osx/,
);
MACOSX_DEPLOYMENT_TARGET = 10.6;
PRODUCT_NAME = steamworksexample;
SDKROOT = macosx10.9;
WRAPPER_EXTENSION = app;
Binary file not shown.
Binary file not shown.
+20 -15
View File
@@ -1,15 +1,20 @@
#!/usr/bin/env bash
STEAMROOT="$(cd "${0%/*}" && echo $PWD)"
STEAMEXE=`basename "$0" .sh`
STEAMCMD=`basename "$0" .sh`
UNAME=`uname`
if [ "$UNAME" == "Linux" ]; then
PLATFORM=linux32
export LD_LIBRARY_PATH="$STEAMROOT/$PLATFORM:$LD_LIBRARY_PATH"
STEAMEXE="${STEAMROOT}/linux32/${STEAMCMD}"
PLATFORM="linux32"
export LD_LIBRARY_PATH="$STEAMROOT/$PLATFORM:$LD_LIBRARY_PATH"
else # if [ "$UNAME" == "Darwin" ]; then
PLATFORM=osx
export DYLD_LIBRARY_PATH="$STEAMROOT/$PLATFORM:$DYLD_LIBRARY_PATH"
STEAMEXE="${STEAMROOT}/${STEAMCMD}"
if [ ! -x ${STEAMEXE} ]; then
STEAMEXE="${STEAMROOT}/Steam.AppBundle/Steam/Contents/MacOS/${STEAMCMD}"
fi
export DYLD_LIBRARY_PATH="$STEAMROOT:$DYLD_LIBRARY_PATH"
export DYLD_FRAMEWORK_PATH="$STEAMROOT:$DYLD_FRAMEWORK_PATH"
fi
ulimit -n 2048
@@ -17,19 +22,19 @@ ulimit -n 2048
MAGIC_RESTART_EXITCODE=42
if [ "$DEBUGGER" == "gdb" ] || [ "$DEBUGGER" == "cgdb" ]; then
ARGSFILE=$(mktemp $USER.steam.gdb.XXXX)
ARGSFILE=$(mktemp $USER.steam.gdb.XXXX)
# Set the LD_PRELOAD varname in the debugger, and unset the global version.
if [ "$LD_PRELOAD" ]; then
echo set env LD_PRELOAD=$LD_PRELOAD >> "$ARGSFILE"
echo show env LD_PRELOAD >> "$ARGSFILE"
unset LD_PRELOAD
fi
# Set the LD_PRELOAD varname in the debugger, and unset the global version.
if [ "$LD_PRELOAD" ]; then
echo set env LD_PRELOAD=$LD_PRELOAD >> "$ARGSFILE"
echo show env LD_PRELOAD >> "$ARGSFILE"
unset LD_PRELOAD
fi
$DEBUGGER -x "$ARGSFILE" "$STEAMROOT/$PLATFORM/$STEAMEXE" "$@"
rm "$ARGSFILE"
$DEBUGGER -x "$ARGSFILE" "$STEAMEXE" "$@"
rm "$ARGSFILE"
else
$DEBUGGER "$STEAMROOT/$PLATFORM/$STEAMEXE" "$@"
$DEBUGGER "$STEAMEXE" "$@"
fi
STATUS=$?
@@ -0,0 +1,241 @@
import os
import io
import sys
import re
# wrapper for print
def printw( message ):
print( message )
try:
import Crypto
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA
from Crypto.PublicKey import RSA
except Exception as e:
printw( "Missing required module: "+str(e) )
sys.exit( -1 )
try:
import zlib
except Exception as e:
printw( "Missing required module: "+str(e) )
sys.exit( -1 )
try:
import hashlib
except Exception as e:
printw( "Missing required module: "+str(e) )
sys.exit( -1 )
try:
import ctypes
except Exception as e:
printw( "Missing required module: "+str(e) )
sys.exit( -1 )
def usage():
printw( "usage to verify a signaturefile:"+ sys.argv[0]+ " signaturefile publickeyfile" )
printw( "usage to write a new signaturefile:"+ sys.argv[0]+ " signaturefile publickeyfile privatekeyfile newfilename" )
printw( "" )
def readkeyfile( publickeyfilename ):
# read the public key file.
rawkey = open(publickeyfilename, mode='rb').read()
# import as an RSA key
key = RSA.importKey(rawkey)
return key
def signmessage_add_digest( message, privatekeyfile ):
key = RSA.importKey(open( privatekeyfile, mode='rb' ).read())
h = SHA.new(message)
signer = PKCS1_v1_5.new(key)
signature = signer.sign(h)
sighex = signature.encode("hex")
return "DIGEST:"+sighex.upper()+"\r\n"
def checkdigest( signaturefilename, key ):
with open(signaturefilename, mode='rb') as file:
fileContent = file.read()
# find the start of the digest
idxtodigest = fileContent.find('DIGEST:')
if idxtodigest == 0:
return 0
# the message is everything else
message = fileContent[0:idxtodigest]
digestpart = fileContent[idxtodigest+7:]
digestpart = digestpart.replace("\r\n","")
signature = digestpart.decode("hex")
try:
h = SHA.new(message)
verifier = PKCS1_v1_5.new(key)
if not verifier.verify(h, signature):
return 0
except Exception as e:
printw( "could not verify signature: "+str(e) )
return message
def crchex( crc32 ):
crc32b = ctypes.c_uint32(crc32).value
crc32hex = hex(crc32b).upper().replace("0X","").replace("L","")
lenhex = len(crc32hex)
# pad to 8 chars with leading 0s
padding = 8 - lenhex
while padding:
crc32hex = "0"+crc32hex
padding = padding - 1
# byte swap
crc32hex_reverse = crc32hex[6:8]+crc32hex[4:6]+crc32hex[2:4]+crc32hex[0:2]
return crc32hex_reverse
def parsehashes( message, pathto ):
# now verify all the file hashes
newmessage = ""
lines = message.split("\r\n")
for line in lines:
if len(line) == 0:
break
# parse the line, should be 5 parts
# filename "~SHA1" sha1 ";CRC:" crc32
parts=re.split(';|:|~',line)
if len(parts) != 5:
printw( "The file format is unexpected line:"+line )
break
if parts[1] != "SHA1" or parts[3] != "CRC":
printw( "The file format is unexpected line:"+line )
break
hashprovided = parts[2]
crcprovided = parts[4]
onefile = parts[0]
onefile = onefile.replace("...\\","")
onefilepath = os.path.join( pathto, onefile )
try:
with open(onefilepath, mode='rb') as file:
targetcontent = file.read()
except:
printw( "could not open: "+onefilepath )
continue
# compute sha1 of file
mm = hashlib.sha1()
mm.update(targetcontent)
newhash = mm.hexdigest().upper()
# compute crc32 of file
crc32 = zlib.crc32(targetcontent)
crc32hex = crchex(crc32)
if ( newhash == hashprovided.upper() and
crc32hex == crcprovided.upper() ):
printw( "The hashes are correct for "+onefile )
else:
printw( "The hashes are different for "+onefile+" sha: "+newhash+" "+hashprovided.upper()+" CRC "+crc32hex+" "+crcprovided.upper() )
# accumulate new hashes
linenew = "...\\"+onefile+"~SHA1:"+newhash+";CRC:"+crc32hex+"\r\n"
newmessage += linenew
return newmessage
def signatures_need_update( signaturefilename, publickeyfilename ):
if not os.path.exists( signaturefilename ):
printw( "Signature file does not exist" )
sys.stdout.flush()
return False
pathto = os.path.split(signaturefilename)[0]
if not os.path.exists( publickeyfilename ):
printw( "Public key file does not exist" )
sys.stdout.flush()
return False
key = readkeyfile( publickeyfilename )
message = checkdigest( signaturefilename, key )
if len(message) == 0:
printw( "failed to parse signature file " )
return False
newmessage = parsehashes( message, pathto )
if len(newmessage) == 0:
printw( "failed to parse hashes in signature data " )
return False
return newmessage != message
def write_new_signature_file( signaturefilename, publickeyfilename, privatekeyfilename, newsignaturefilename ):
if not os.path.exists( signaturefilename ):
printw( "Signature file does not exist" )
sys.stdout.flush()
return -1
pathto = os.path.split(signaturefilename)[0]
if not os.path.exists( publickeyfilename ):
printw( "Public key file does not exist" )
sys.stdout.flush()
return -2
if not os.path.exists( privatekeyfilename ):
printw( "Private key file does not exist" )
sys.stdout.flush()
return -3
if os.path.exists( newsignaturefilename ) and not os.access( newsignaturefilename, os.W_OK ):
printw( "new signatures file not writeable " )
sys.stdout.flush()
return -4
key = readkeyfile( publickeyfilename )
message = checkdigest( signaturefilename, key )
if len(message) == 0:
printw( "failed to parse old signature file " )
return -5
newmessage = parsehashes( message, pathto )
if len(newmessage) == 0:
printw( "failed to create new signature data " )
return -6
with open( newsignaturefilename, mode='wb') as file:
file.write( newmessage )
hexdigest = signmessage_add_digest( newmessage, privatekeyfilename )
file.write( hexdigest )
printw( "new signatures file written successfully " )
sys.stdout.flush()
return 0
def main():
if len( sys.argv ) != 5 and len( sys.argv ) != 3:
usage()
sys.exit(2)
# common args
signaturefilename = sys.argv[1]
publickeyfilename = sys.argv[2]
if len( sys.argv ) == 5:
# only if writing a new file
privatekeyfilename = sys.argv[3]
newsignaturefilename = sys.argv[4]
write_new_signature_file( signaturefilename, publickeyfilename, privatekeyfilename, newsignaturefilename )
else:
if signatures_need_update( signaturefilename, publickeyfilename ):
printw( "Some signatures did not match" )
else:
printw( "All signatures matched" )
if __name__ == '__main__':
main()
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.