Commits

Didrole committed 65cebcb

Stuff

Comments (0)

Files changed (23)

Open Steamworks/AppsCommon.h

 	uint32 E;
 };
 
+const int k_cubAppProofOfPurchaseKeyMax = 64;			// max bytes of a legacy cd key we support
+
 #pragma pack( push, 8 )
 //-----------------------------------------------------------------------------
 // Purpose: called when new information about an app has arrived
 
 	EResult m_eResult;
 	AppId_t m_nAppID;
-	char m_szCDKey[64];	
+	char m_rgchKey[ k_cubAppProofOfPurchaseKeyMax ];	
 };
 #pragma pack( pop )
 

Open Steamworks/EResult.h

 // General result codes
 typedef enum EResult
 {
-	k_EResultOK	= 1,							// success
-	k_EResultFail = 2,							// generic failure 
-	k_EResultNoConnection = 3,					// no/failed network connection
-	//	k_EResultNoConnectionRetry = 4,				// OBSOLETE - removed
-	k_EResultInvalidPassword = 5,				// password/ticket is invalid
-	k_EResultLoggedInElsewhere = 6,				// same user logged in elsewhere
-	k_EResultInvalidProtocolVer = 7,			// protocol version is incorrect
-	k_EResultInvalidParam = 8,					// a parameter is incorrect
-	k_EResultFileNotFound = 9,					// file was not found
-	k_EResultBusy = 10,							// called method busy - action not taken
-	k_EResultInvalidState = 11,					// called object was in an invalid state
-	k_EResultInvalidName = 12,					// name is invalid
-	k_EResultInvalidEmail = 13,					// email is invalid
-	k_EResultDuplicateName = 14,				// name is not unique
-	k_EResultAccessDenied = 15,					// access is denied
-	k_EResultTimeout = 16,						// operation timed out
-	k_EResultBanned = 17,						// VAC2 banned
-	k_EResultAccountNotFound = 18,				// account not found
-	k_EResultInvalidSteamID = 19,				// steamID is invalid
-	k_EResultServiceUnavailable = 20,			// The requested service is currently unavailable
-	k_EResultNotLoggedOn = 21,					// The user is not logged on
-	k_EResultPending = 22,						// Request is pending (may be in process, or waiting on third party)
-	k_EResultEncryptionFailure = 23,			// Encryption or Decryption failed
-	k_EResultInsufficientPrivilege = 24,		// Insufficient privilege
-	k_EResultLimitExceeded = 25,				// Too much of a good thing
-	k_EResultRevoked = 26,						// Access has been revoked (used for revoked guest passes)
-	k_EResultExpired = 27,						// License/Guest pass the user is trying to access is expired
-	k_EResultAlreadyRedeemed = 28,				// Guest pass has already been redeemed by account, cannot be acked again
-	k_EResultDuplicateRequest = 29,				// The request is a duplicate and the action has already occurred in the past, ignored this time
-	k_EResultAlreadyOwned = 30,					// All the games in this guest pass redemption request are already owned by the user
-	k_EResultIPNotFound = 31,					// IP address not found
-	k_EResultPersistFailed = 32,				// failed to write change to the data store
-	k_EResultLockingFailed = 33,				// failed to acquire access lock for this operation
+	k_EResultOK	= 1,										// success
+	k_EResultFail = 2,										// generic failure 
+	k_EResultNoConnection = 3,								// no/failed network connection
+	//	k_EResultNoConnectionRetry = 4,						// OBSOLETE - removed
+	k_EResultInvalidPassword = 5,							// password/ticket is invalid
+	k_EResultLoggedInElsewhere = 6,							// same user logged in elsewhere
+	k_EResultInvalidProtocolVer = 7,						// protocol version is incorrect
+	k_EResultInvalidParam = 8,								// a parameter is incorrect
+	k_EResultFileNotFound = 9,								// file was not found
+	k_EResultBusy = 10,										// called method busy - action not taken
+	k_EResultInvalidState = 11,								// called object was in an invalid state
+	k_EResultInvalidName = 12,								// name is invalid
+	k_EResultInvalidEmail = 13,								// email is invalid
+	k_EResultDuplicateName = 14,							// name is not unique
+	k_EResultAccessDenied = 15,								// access is denied
+	k_EResultTimeout = 16,									// operation timed out
+	k_EResultBanned = 17,									// VAC2 banned
+	k_EResultAccountNotFound = 18,							// account not found
+	k_EResultInvalidSteamID = 19,							// steamID is invalid
+	k_EResultServiceUnavailable = 20,						// The requested service is currently unavailable
+	k_EResultNotLoggedOn = 21,								// The user is not logged on
+	k_EResultPending = 22,									// Request is pending (may be in process, or waiting on third party)
+	k_EResultEncryptionFailure = 23,						// Encryption or Decryption failed
+	k_EResultInsufficientPrivilege = 24,					// Insufficient privilege
+	k_EResultLimitExceeded = 25,							// Too much of a good thing
+	k_EResultRevoked = 26,									// Access has been revoked (used for revoked guest passes)
+	k_EResultExpired = 27,									// License/Guest pass the user is trying to access is expired
+	k_EResultAlreadyRedeemed = 28,							// Guest pass has already been redeemed by account, cannot be acked again
+	k_EResultDuplicateRequest = 29,							// The request is a duplicate and the action has already occurred in the past, ignored this time
+	k_EResultAlreadyOwned = 30,								// All the games in this guest pass redemption request are already owned by the user
+	k_EResultIPNotFound = 31,								// IP address not found
+	k_EResultPersistFailed = 32,							// failed to write change to the data store
+	k_EResultLockingFailed = 33,							// failed to acquire access lock for this operation
 	k_EResultLogonSessionReplaced = 34,
 	k_EResultConnectFailed = 35,
 	k_EResultHandshakeFailed = 36,
 	k_EResultIOFailure = 37,
 	k_EResultRemoteDisconnect = 38,
-	k_EResultShoppingCartNotFound = 39,			// failed to find the shopping cart requested
-	k_EResultBlocked = 40,						// a user didn't allow it
-	k_EResultIgnored = 41,						// target is ignoring sender
-	k_EResultNoMatch = 42,						// nothing matching the request found
+	k_EResultShoppingCartNotFound = 39,						// failed to find the shopping cart requested
+	k_EResultBlocked = 40,									// a user didn't allow it
+	k_EResultIgnored = 41,									// target is ignoring sender
+	k_EResultNoMatch = 42,									// nothing matching the request found
 	k_EResultAccountDisabled = 43,
-	k_EResultServiceReadOnly = 44,				// this service is not accepting content changes right now
-	k_EResultAccountNotFeatured = 45,			// account doesn't have value, so this feature isn't available
-	k_EResultAdministratorOK = 46,				// allowed to take this action, but only because requester is admin
-	k_EResultContentVersion = 47,				// A Version mismatch in content transmitted within the Steam protocol.
-	k_EResultTryAnotherCM = 48,					// The current CM can't service the user making a request, user should try another.
-	k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
-	k_EResultAlreadyLoggedInElsewhere = 50,		// You are already logged in elsewhere, you must wait
-	k_EResultSuspended = 51,					// Long running operation (content download) suspended/paused
-	k_EResultCancelled = 52,					// Operation canceled (typically by user: content download)
-	k_EResultDataCorruption = 53,				// Operation canceled because data is ill formed or unrecoverable
-	k_EResultDiskFull = 54,						// Operation canceled - not enough disk space.
-	k_EResultRemoteCallFailed = 55,				// an remote call or IPC call failed
-	k_EResultPasswordUnset = 56,				// Password could not be verified as it's unset server side
-	k_EResultPSNAccountUnlinked = 57,			// Attempt to logon from a PS3 failed because the PSN online id is not linked to a Steam account
-	k_EResultPSNTicketInvalid = 58,				// PSN ticket was invalid
-	k_EResultPSNAccountAlreadyLinked = 59,		// PSN account is already linked to some other account, must explicitly request to replace/delete the link first
-	k_EResultRemoteFileConflict = 60,			// The sync cannot resume due to a conflict between the local and remote files
-	k_EResultIllegalPassword = 61,				// The requested new password is not legal
-	k_EResultSameAsPreviousValue = 62,			// new value is the same as the old one ( secret question and answer )
-	k_EResultAccountLogonDenied = 63,			// account login denied due to 2nd factor authentication failure
-	k_EResultCannotUseOldPassword = 64,			// The requested new password is not legal
-	k_EResultInvalidLoginAuthCode = 65,			// account login denied due to auth code invalid
-	k_EResultAccountLogonDeniedNoMail = 66,		// account login denied due to 2nd factor auth failure - and no mail has been sent
-	k_EResultHardwareNotCapableOfIPT = 67,		// 
-	k_EResultIPTInitError = 68,					// 
-	k_EResultParentalControlRestrictions = 69,	// Operation failed due to parental control restrictions for current user
-	k_EResultFacebookQueryError = 70,			// Facebook query returned an error
-	k_EResultExpiredLoginAuthCode = 71,			// Expired Login Auth Code
-	k_EResultIPLoginRestrictionFailed = 72,		// IP Login Restriction Failed
-	k_EResultAccountLocked = 73,				// Account Locked Down
-	k_EResultVerifiedEmailRequired = 74,		// Account Logon Denied Verified Email Required
-	k_EResultNoMatchingURL = 75,				// No matching URL
-	k_EResultBadResponse = 76,					// Bad response
+	k_EResultServiceReadOnly = 44,							// this service is not accepting content changes right now
+	k_EResultAccountNotFeatured = 45,						// account doesn't have value, so this feature isn't available
+	k_EResultAdministratorOK = 46,							// allowed to take this action, but only because requester is admin
+	k_EResultContentVersion = 47,							// A Version mismatch in content transmitted within the Steam protocol.
+	k_EResultTryAnotherCM = 48,								// The current CM can't service the user making a request, user should try another.
+	k_EResultPasswordRequiredToKickSession = 49,			// You are already logged in elsewhere, this cached credential login has failed.
+	k_EResultAlreadyLoggedInElsewhere = 50,					// You are already logged in elsewhere, you must wait
+	k_EResultSuspended = 51,								// Long running operation (content download) suspended/paused
+	k_EResultCancelled = 52,								// Operation canceled (typically by user: content download)
+	k_EResultDataCorruption = 53,							// Operation canceled because data is ill formed or unrecoverable
+	k_EResultDiskFull = 54,									// Operation canceled - not enough disk space.
+	k_EResultRemoteCallFailed = 55,							// an remote call or IPC call failed
+	k_EResultPasswordUnset = 56,							// Password could not be verified as it's unset server side
+	k_EResultPSNAccountUnlinked = 57,						// Attempt to logon from a PS3 failed because the PSN online id is not linked to a Steam account
+	k_EResultPSNTicketInvalid = 58,							// PSN ticket was invalid
+	k_EResultPSNAccountAlreadyLinked = 59,					// PSN account is already linked to some other account, must explicitly request to replace/delete the link first
+	k_EResultRemoteFileConflict = 60,						// The sync cannot resume due to a conflict between the local and remote files
+	k_EResultIllegalPassword = 61,							// The requested new password is not legal
+	k_EResultSameAsPreviousValue = 62,						// new value is the same as the old one ( secret question and answer )
+	k_EResultAccountLogonDenied = 63,						// account login denied due to 2nd factor authentication failure
+	k_EResultCannotUseOldPassword = 64,						// The requested new password is not legal
+	k_EResultInvalidLoginAuthCode = 65,						// account login denied due to auth code invalid
+	k_EResultAccountLogonDeniedNoMail = 66,					// account login denied due to 2nd factor auth failure - and no mail has been sent
+	k_EResultHardwareNotCapableOfIPT = 67,					// 
+	k_EResultIPTInitError = 68,								// 
+	k_EResultParentalControlRestrictions = 69,				// Operation failed due to parental control restrictions for current user
+	k_EResultFacebookQueryError = 70,						// Facebook query returned an error
+	k_EResultExpiredLoginAuthCode = 71,						// Expired Login Auth Code
+	k_EResultIPLoginRestrictionFailed = 72,					// IP Login Restriction Failed
+	k_EResultAccountLockedDown = 73,						// Account Locked Down
+	k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,	// Account Logon Denied Verified Email Required
+	k_EResultNoMatchingURL = 75,							// No matching URL
+	k_EResultBadResponse = 76,								// Bad response
 } EResult;
 
 #endif // ERESULT_H

Open Steamworks/FriendsCommon.h

 //-----------------------------------------------------------------------------
 enum EChatRoomEnterResponse
 {
-	k_EChatRoomEnterResponseSuccess = 1,		// Success
-	k_EChatRoomEnterResponseDoesntExist = 2,	// Chat doesn't exist (probably closed)
-	k_EChatRoomEnterResponseNotAllowed = 3,		// General Denied - You don't have the permissions needed to join the chat
-	k_EChatRoomEnterResponseFull = 4,			// Chat room has reached its maximum size
-	k_EChatRoomEnterResponseError = 5,			// Unexpected Error
-	k_EChatRoomEnterResponseBanned = 6,			// You are banned from this chat room and may not join
-	k_EChatRoomEnterResponseLimited = 7,		// Joining this chat is not allowed because you are a limited user (no value on account)
-	k_EChatRoomEnterResponseClanDisabled = 8,	// Attempt to join a clan chat when the clan is locked or disabled
-	k_EChatRoomEnterResponseCommunityBan = 9,	// Attempt to join a chat when the user has a community lock on their account
-	k_EChatRoomEnterResponseMemberBlockedYou = 10, // Join failed - some member in the chat has blocked you from joining
-	k_EChatRoomEnterResponseYouBlockedMember = 11, // Join failed - you have blocked some member already in the chat
-	k_EChatRoomEnterResponseNoRankingDataLobby = 12,
-	k_EChatRoomEnterResponseNoRankingDataUser = 13,
-	k_EChatRoomEnterResponseRankOutOfRange = 14,
+	k_EChatRoomEnterResponseSuccess = 1,				// Success
+	k_EChatRoomEnterResponseDoesntExist = 2,			// Chat doesn't exist (probably closed)
+	k_EChatRoomEnterResponseNotAllowed = 3,				// General Denied - You don't have the permissions needed to join the chat
+	k_EChatRoomEnterResponseFull = 4,					// Chat room has reached its maximum size
+	k_EChatRoomEnterResponseError = 5,					// Unexpected Error
+	k_EChatRoomEnterResponseBanned = 6,					// You are banned from this chat room and may not join
+	k_EChatRoomEnterResponseLimited = 7,				// Joining this chat is not allowed because you are a limited user (no value on account)
+	k_EChatRoomEnterResponseClanDisabled = 8,			// Attempt to join a clan chat when the clan is locked or disabled
+	k_EChatRoomEnterResponseCommunityBan = 9,			// Attempt to join a chat when the user has a community lock on their account
+	k_EChatRoomEnterResponseMemberBlockedYou = 10,		// Join failed - some member in the chat has blocked you from joining
+	k_EChatRoomEnterResponseYouBlockedMember = 11,		// Join failed - you have blocked some member already in the chat
+	k_EChatRoomEnterResponseNoRankingDataLobby = 12,	// There is no ranking data available for the lobby 
+	k_EChatRoomEnterResponseNoRankingDataUser = 13,		// There is no ranking data available for the user
+	k_EChatRoomEnterResponseRankOutOfRange = 14,		// The user is out of the allowable ranking range
 };
 
 enum EChatAction
 //-----------------------------------------------------------------------------
 enum EUserRestriction
 {
-	k_nUserRestrictionNone		= 0,	// no known chat/content restriction
-	k_nUserRestrictionUnknown	= 1,	// we don't know yet (user offline)
-	k_nUserRestrictionAnyChat	= 2,	// user is not allowed to (or can't) send/recv any chat
-	k_nUserRestrictionVoiceChat	= 4,	// user is not allowed to (or can't) send/recv voice chat
-	k_nUserRestrictionGroupChat	= 8,	// user is not allowed to (or can't) send/recv group chat
-	k_nUserRestrictionRating	= 16,	// user is too young according to rating in current region
+	k_nUserRestrictionNone			= 0,	// no known chat/content restriction
+	k_nUserRestrictionUnknown		= 1,	// we don't know yet (user offline)
+	k_nUserRestrictionAnyChat		= 2,	// user is not allowed to (or can't) send/recv any chat
+	k_nUserRestrictionVoiceChat		= 4,	// user is not allowed to (or can't) send/recv voice chat
+	k_nUserRestrictionGroupChat		= 8,	// user is not allowed to (or can't) send/recv group chat
+	k_nUserRestrictionRating		= 16,	// user is too young according to rating in current region
+	k_nUserRestrictionGameInvites	= 32,	// user cannot send or recv game invites (e.g. mobile)
+	k_nUserRestrictionTrading		= 64,	// user cannot participate in trading (console, mobile)
 };
 
 enum EOverlayToStoreFlag
 // maximum number of groups a single user is allowed
 const int k_cFriendsGroupLimit = 100;
 
+const int k_cEnumerateFollowersMax = 50;
+
 // max size on chat messages
 const uint32 k_cchFriendChatMsgMax = 0x3000;
 
 
 #pragma pack( push, 8 )
 
+//-----------------------------------------------------------------------------
+// Purpose: information about user sessions
+//-----------------------------------------------------------------------------
 struct FriendSessionStateInfo_t
 {
-	uint32 m_uOnlineSessionInstances;
-	uint32 m_uPublishedInstanceId;
+	uint32 m_uiOnlineSessionInstances;
+	uint8 m_uiPublishedToFriendsSessionInstance;
 };
 
 
 	enum { k_iCallback = k_iSteamFriendsCallbacks + 46 };
 
 	EResult m_eResult;
-	CSteamID m_steamIDs[50];
+	CSteamID m_steamIDs[ k_cEnumerateFollowersMax ];
 	int32 m_cSteamIDs;
 	int32 m_cTotalResults;
 };

Open Steamworks/GameServerCommon.h

 	int m_cPlayersThatDontLikeCandidate;
 	int m_cPlayersThatCandidateDoesntLike;
 	int m_cClanPlayersThatDontLikeCandidate;
+	CSteamID m_SteamIDCandidate;
 };
 
 

Open Steamworks/IClientAppManager.h

 	virtual bool ShutdownApp( AppId_t unAppID, bool bForce ) = 0;
 
 	virtual EAppState GetAppInstallState( AppId_t unAppID ) = 0;
+	virtual uint32 GetAppBuildID( AppId_t unAppID ) = 0;
 
 	// /!\ IPC is broken for this function
 	virtual bool GetAppSizeOnDisk( AppId_t unAppID, uint64 *pullAppSize, uint64 *pullUnk ) = 0;
 	virtual AppId_t GetDownloadingAppID() = 0;
 	virtual bool ChangeAppPriority( AppId_t unAppID, EAppDownloadPriority ePriority ) = 0;
 
-	virtual bool AddSteam2Update( AppId_t unAppID ) = 0;
-	virtual bool RemoveSteam2Update( AppId_t unAppID ) = 0;
-	virtual bool StalledSteam2Update( AppId_t unAppID ) = 0;
-
 	virtual bool BHasLocalContentServer() = 0;
 
 	virtual bool BuildBackup( AppId_t unAppID, uint64 ullMaxFileSize, const char *cszBackupPath ) = 0;

Open Steamworks/IClientEngine.h

 class IClientScreenshots;
 class IClientAudio;
 class IClientUnifiedMessages;
+class IClientStreamLauncher;
 
 abstract_class UNSAFE_INTERFACE IClientEngine
 {
 
 	virtual IClientAudio *GetIClientAudio( HSteamUser hSteamUser, HSteamPipe hSteamPipe, char const* pchVersion ) = 0;
 	virtual IClientUnifiedMessages *GetIClientUnifiedMessages( HSteamUser hSteamUser, HSteamPipe hSteamPipe, char const* pchVersion ) = 0;
+	virtual IClientStreamLauncher *GetIClientStreamLauncher( HSteamUser hSteamUser, HSteamPipe hSteamPipe, char const* pchVersion ) = 0;
 };
 
 #endif // ICLIENTENGINE_H

Open Steamworks/IClientRemoteStorage.h

 	
 	virtual SteamAPICall_t CommitPublishedFileUpdate( AppId_t nAppId, ERemoteStorageFileRoot eRemoteStorageFileRoot, JobID_t hUpdateRequest ) = 0;
 	
-	virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, bool bUseNewCallback ) = 0; // Old callback id = 1310, new callback id = 1318
+	virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, bool bUseNewCallback, uint32 ) = 0; // Old callback id = 1310, new callback id = 1318
 	virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
 	virtual SteamAPICall_t EnumerateUserPublishedFiles( AppId_t nAppId, uint32 uStartIndex, ERemoteStoragePublishedFileSortOrder eOrder ) = 0;
 	virtual SteamAPICall_t SubscribePublishedFile( AppId_t nAppId, PublishedFileId_t unPublishedFileId ) = 0;

Open Steamworks/IClientStreamLauncher.h

+//==========================  Open Steamworks  ================================
+//
+// This file is part of the Open Steamworks project. All individuals associated
+// with this project do not claim ownership of the contents
+// 
+// The code, comments, and all related files, projects, resources,
+// redistributables included with this project are Copyright Valve Corporation.
+// Additionally, Valve, the Valve logo, Half-Life, the Half-Life logo, the
+// Lambda logo, Steam, the Steam logo, Team Fortress, the Team Fortress logo,
+// Opposing Force, Day of Defeat, the Day of Defeat logo, Counter-Strike, the
+// Counter-Strike logo, Source, the Source logo, and Counter-Strike Condition
+// Zero are trademarks and or registered trademarks of Valve Corporation.
+// All other trademarks are property of their respective owners.
+//
+//=============================================================================
+
+#ifndef ICLIENTSTREAMLAUNCHER_H
+#define ICLIENTSTREAMLAUNCHER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "SteamTypes.h"
+#include "StreamLauncherCommon.h"
+
+abstract_class UNSAFE_INTERFACE IClientStreamLauncher
+{
+public:
+	virtual EStreamLauncherResult StartStreaming( const char *cszFilePath ) = 0;
+	virtual void StopStreaming() = 0;
+};
+
+#endif // ICLIENTSTREAMLAUNCHER_H

Open Steamworks/IClientUser.h

 
 	virtual bool BSteamGuardNewMachineNotification() = 0;
 	virtual RTime32 GetSteamGuardEnabledTime() = 0;
-	virtual bool GetSteamGuardHistoryEntry( int32 iEntryIndex, RTime32 *puTimestamp, uint32 *puIP, bool *pbIsRemembered ) = 0;
+	virtual bool GetSteamGuardHistoryEntry( int32 iEntryIndex, RTime32 *puTimestamp, uint32 *puIP, bool *pbIsRemembered, char *pchGeolocInfo, int32 cchGeolocInfo ) = 0;
+	virtual void SetSteamGuardNewMachineDialogResponse( bool bIsApproved, bool bIsWizardComplete ) = 0;
 
 	virtual bool BAccountCanUseIPT() = 0;
 	virtual void ChangeTwoFactorAuthOptions( int32 eOption ) = 0;
 	virtual bool GetAppOwnershipInfo( AppId_t unAppId, RTime32* pRTime32Created, char* pchCountry ) = 0; // Use a 3 bytes buffer for the country
 	
 	virtual void SendGameWebCallback( AppId_t unAppId, const char *szData ) = 0;
+	
+	virtual bool BIsCurrentlyStreaming() = 0;
+	virtual void RequestStopStreaming() = 0;
+	virtual void OnBigPictureStreamingResult( bool, void * ) = 0;
+	virtual void OnBigPictureStreamingDone() = 0;
 };
 
 #endif // ICLIENTUSER_H

Open Steamworks/IClientUtils.h

 	virtual void GamepadTextInputClosed( HSteamPipe hSteamPipe, bool, const char * ) = 0;
 
 	virtual void SetSpew( ESpewGroup eSpewGroup, int32 iSpewLevel, int32 iLogLevel ) = 0;
+	
+	virtual bool BDownloadsDisabled() = 0;
 };
 
 #endif // ICLIENTUTILS_H

Open Steamworks/ISteamApps005.h

 	virtual void InstallDLC( AppId_t nAppID ) = 0;
 	virtual void UninstallDLC( AppId_t nAppID ) = 0;
 	
-	virtual void RequestAppProofOfPurchaseKey( AppId_t nDLCAppID ) = 0;
+	// Request cd-key for yourself or owned DLC. If you are interested in this
+	// data then make sure you provide us with a list of valid keys to be distributed
+	// to users when they purchase the game, before the game ships.
+	// You'll receive an AppProofOfPurchaseKeyResponse_t callback when
+	// the key is available (which may be immediately).
+	virtual void RequestAppProofOfPurchaseKey( AppId_t nAppID ) = 0;
 	
 	virtual bool GetCurrentBetaName( char *pchName, int32 cchNameBufferSize ) = 0;
 	virtual bool MarkContentCorrupt( bool bCorrupt ) = 0;
 	
 	virtual uint32 GetInstalledDepots( AppId_t puDepots[], uint32 cuDepotsMax ) = 0;
-	virtual uint32 GetAppInstallDir( char *pchPath, uint32 cchPath ) = 0;
+	virtual uint32 GetAppInstallDir( AppId_t nAppID, char *pchPath, uint32 cchPath ) = 0;
 };
 
 

Open Steamworks/ISteamFriends011.h

 	virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
 	virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
 
+	// following apis
 	virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
 	virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
-	virtual SteamAPICall_t EnumerateFollowingList( uint32 uStartIndex ) = 0;
+	virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
 };
 
 

Open Steamworks/ISteamFriends012.h

 	virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
 	virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
 
+	// following apis
 	virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
 	virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
-	virtual SteamAPICall_t EnumerateFollowingList( uint32 uStartIndex ) = 0;
+	virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
 };
 
 

Open Steamworks/ISteamFriends013.h

 	virtual bool ReplyToFriendMessage( CSteamID steamIDFriend, const char *pchMsgToSend ) = 0;
 	virtual int GetFriendMessage( CSteamID steamIDFriend, int iMessageID, void *pvData, int cubData, EChatEntryType *peChatEntryType ) = 0;
 
+	// following apis
 	virtual SteamAPICall_t GetFollowerCount( CSteamID steamID ) = 0;
 	virtual SteamAPICall_t IsFollowing( CSteamID steamID ) = 0;
-	virtual SteamAPICall_t EnumerateFollowingList( uint32 uStartIndex ) = 0;
+	virtual SteamAPICall_t EnumerateFollowingList( uint32 unStartIndex ) = 0;
 };
 
 

Open Steamworks/ISteamRemoteStorage008.h

 	virtual bool	SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
 
 	virtual GID_t FileWriteStreamOpen( const char *pchFile ) = 0;
+	virtual EResult FileWriteStreamWriteChunk( GID_t hStream, const void *pvData, int32 cubData ) = 0;
 	virtual EResult FileWriteStreamClose( GID_t hStream ) = 0;
 	virtual EResult FileWriteStreamCancel( GID_t hStream ) = 0;
-	virtual EResult FileWriteStreamWriteChunk( GID_t hStream, const void *pvData, int32 cubData ) = 0;
 
 	// file information
 	virtual bool	FileExists( const char *pchFile ) = 0;

Open Steamworks/ISteamRemoteStorage009.h

 	virtual bool	SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
 
 	virtual GID_t FileWriteStreamOpen( const char *pchFile ) = 0;
+	virtual EResult FileWriteStreamWriteChunk( GID_t hStream, const void *pvData, int32 cubData ) = 0;
 	virtual EResult FileWriteStreamClose( GID_t hStream ) = 0;
 	virtual EResult FileWriteStreamCancel( GID_t hStream ) = 0;
-	virtual EResult FileWriteStreamWriteChunk( GID_t hStream, const void *pvData, int32 cubData ) = 0;
 
 	// file information
 	virtual bool	FileExists( const char *pchFile ) = 0;

Open Steamworks/ISteamRemoteStorage011.h

+//==========================  Open Steamworks  ================================
+//
+// This file is part of the Open Steamworks project. All individuals associated
+// with this project do not claim ownership of the contents
+// 
+// The code, comments, and all related files, projects, resources,
+// redistributables included with this project are Copyright Valve Corporation.
+// Additionally, Valve, the Valve logo, Half-Life, the Half-Life logo, the
+// Lambda logo, Steam, the Steam logo, Team Fortress, the Team Fortress logo,
+// Opposing Force, Day of Defeat, the Day of Defeat logo, Counter-Strike, the
+// Counter-Strike logo, Source, the Source logo, and Counter-Strike Condition
+// Zero are trademarks and or registered trademarks of Valve Corporation.
+// All other trademarks are property of their respective owners.
+//
+//=============================================================================
+
+#ifndef ISTEAMREMOTESTORAGE011_H
+#define ISTEAMREMOTESTORAGE011_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "SteamTypes.h"
+#include "RemoteStorageCommon.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Functions for accessing, reading and writing files stored remotely 
+//			and cached locally
+//-----------------------------------------------------------------------------
+abstract_class ISteamRemoteStorage011
+{
+public:
+	// NOTE
+	//
+	// Filenames are case-insensitive, and will be converted to lowercase automatically.
+	// So "foo.bar" and "Foo.bar" are the same file, and if you write "Foo.bar" then
+	// iterate the files, the filename returned will be "foo.bar".
+	//
+
+	// file operations
+	virtual bool	FileWrite( const char *pchFile, const void *pvData, int32 cubData ) = 0;
+	virtual int32	FileRead( const char *pchFile, void *pvData, int32 cubDataToRead ) = 0;
+	virtual bool	FileForget( const char *pchFile ) = 0;
+	virtual bool	FileDelete( const char *pchFile ) = 0;
+	virtual SteamAPICall_t FileShare( const char *pchFile ) = 0;
+	virtual bool	SetSyncPlatforms( const char *pchFile, ERemoteStoragePlatform eRemoteStoragePlatform ) = 0;
+
+	virtual GID_t FileWriteStreamOpen( const char *pchFile ) = 0;
+	virtual EResult FileWriteStreamWriteChunk( GID_t hStream, const void *pvData, int32 cubData ) = 0;
+	virtual EResult FileWriteStreamClose( GID_t hStream ) = 0;
+	virtual EResult FileWriteStreamCancel( GID_t hStream ) = 0;
+
+	// file information
+	virtual bool	FileExists( const char *pchFile ) = 0;
+	virtual bool	FilePersisted( const char *pchFile ) = 0;
+	virtual int32	GetFileSize( const char *pchFile ) = 0;
+	virtual int64	GetFileTimestamp( const char *pchFile ) = 0;
+	virtual ERemoteStoragePlatform GetSyncPlatforms( const char *pchFile ) = 0;
+
+	// iteration
+	virtual int32 GetFileCount() = 0;
+	virtual const char *GetFileNameAndSize( int iFile, int32 *pnFileSizeInBytes ) = 0;
+
+	// configuration management
+	virtual bool GetQuota( int32 *pnTotalBytes, int32 *puAvailableBytes ) = 0;
+	virtual bool IsCloudEnabledForAccount() = 0;
+	virtual bool IsCloudEnabledForApp() = 0;
+	virtual void SetCloudEnabledForApp( bool bEnabled ) = 0;
+
+	// user generated content
+	virtual SteamAPICall_t UGCDownload( UGCHandle_t hContent, uint32 uUnk ) = 0; // Returns a RemoteStorageDownloadUGCResult_t callback
+	virtual bool GetUGCDownloadProgress( UGCHandle_t hContent, uint32 *puDownloadedBytes, uint32 *puTotalBytes ) = 0;
+	virtual bool	GetUGCDetails( UGCHandle_t hContent, AppId_t *pnAppID, char **ppchName, int32 *pnFileSizeInBytes, CSteamID *pSteamIDOwner ) = 0;
+	virtual int32	UGCRead( UGCHandle_t hContent, void *pvData, int32 cubDataToRead, uint32 uOffset ) = 0;
+
+	// user generated content iteration
+	virtual int32	GetCachedUGCCount() = 0;
+	virtual UGCHandle_t GetCachedUGCHandle( int32 iCachedContent ) = 0;
+
+	// publishing UGC
+	virtual SteamAPICall_t PublishWorkshopFile( const char *pchFile, const char *pchPreviewFile, AppId_t nConsumerAppId, const char *pchTitle, const char *pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags, EWorkshopFileType eWorkshopFileType ) = 0;
+	virtual JobID_t CreatePublishedFileUpdateRequest( PublishedFileId_t unPublishedFileId ) = 0;
+	virtual bool UpdatePublishedFileFile( JobID_t hUpdateRequest, const char *pchFile ) = 0;
+	virtual bool UpdatePublishedFilePreviewFile( JobID_t hUpdateRequest, const char *pchPreviewFile ) = 0;
+	virtual bool UpdatePublishedFileTitle( JobID_t hUpdateRequest, const char *pchTitle ) = 0;
+	virtual bool UpdatePublishedFileDescription( JobID_t hUpdateRequest, const char *pchDescription ) = 0;
+	virtual bool UpdatePublishedFileVisibility( JobID_t hUpdateRequest, ERemoteStoragePublishedFileVisibility eVisibility ) = 0;
+	virtual bool UpdatePublishedFileTags( JobID_t hUpdateRequest, SteamParamStringArray_t *pTags ) = 0;
+	virtual SteamAPICall_t CommitPublishedFileUpdate( JobID_t hUpdateRequest ) = 0;
+
+	virtual SteamAPICall_t GetPublishedFileDetails( PublishedFileId_t unPublishedFileId, uint32 ) = 0;
+	virtual SteamAPICall_t DeletePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+	virtual SteamAPICall_t EnumerateUserPublishedFiles( uint32 uStartIndex ) = 0;
+	virtual SteamAPICall_t SubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+	virtual SteamAPICall_t EnumerateUserSubscribedFiles( uint32 uStartIndex ) = 0;
+	virtual SteamAPICall_t UnsubscribePublishedFile( PublishedFileId_t unPublishedFileId ) = 0;
+	
+	virtual bool UpdatePublishedFileSetChangeDescription( JobID_t hUpdateRequest, const char *cszDescription ) = 0;
+	virtual SteamAPICall_t GetPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+	virtual SteamAPICall_t UpdateUserPublishedItemVote( PublishedFileId_t unPublishedFileId, bool bVoteUp ) = 0;
+	virtual SteamAPICall_t GetUserPublishedItemVoteDetails( PublishedFileId_t unPublishedFileId ) = 0;
+	virtual SteamAPICall_t EnumerateUserSharedWorkshopFiles( AppId_t nAppId, CSteamID creatorSteamID, uint32 uStartIndex, SteamParamStringArray_t * pRequiredTags, SteamParamStringArray_t * pExcludedTags ) = 0;
+	virtual SteamAPICall_t PublishVideo( EWorkshopVideoProvider eVideoProvider, const char *cszVideoAccountName, const char *cszVideoIdentifier, const char *cszFileName, AppId_t nConsumerAppId, const char *cszTitle, const char *cszDescription, ERemoteStoragePublishedFileVisibility eVisibility, SteamParamStringArray_t *pTags ) = 0;
+	virtual SteamAPICall_t SetUserPublishedFileAction( PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction ) = 0;
+	virtual SteamAPICall_t EnumeratePublishedFilesByUserAction( EWorkshopFileAction eAction, uint32 uStartIndex ) = 0;
+	virtual SteamAPICall_t EnumeratePublishedWorkshopFiles( EWorkshopEnumerationType eType, uint32 uStartIndex, uint32 cDays, uint32 cCount, SteamParamStringArray_t *pTags, SteamParamStringArray_t *pUserTags ) = 0;
+	
+	virtual SteamAPICall_t UGCDownloadToLocation( UGCHandle_t hContent, const char *cszLocation, uint32 uUnk ) = 0;
+};
+
+#endif // ISTEAMREMOTESTORAGE011_H

Open Steamworks/ISteamStreamLauncher001.h

+//==========================  Open Steamworks  ================================
+//
+// This file is part of the Open Steamworks project. All individuals associated
+// with this project do not claim ownership of the contents
+// 
+// The code, comments, and all related files, projects, resources,
+// redistributables included with this project are Copyright Valve Corporation.
+// Additionally, Valve, the Valve logo, Half-Life, the Half-Life logo, the
+// Lambda logo, Steam, the Steam logo, Team Fortress, the Team Fortress logo,
+// Opposing Force, Day of Defeat, the Day of Defeat logo, Counter-Strike, the
+// Counter-Strike logo, Source, the Source logo, and Counter-Strike Condition
+// Zero are trademarks and or registered trademarks of Valve Corporation.
+// All other trademarks are property of their respective owners.
+//
+//=============================================================================
+
+#ifndef ISTEAMSTREAMLAUNCHER001_H
+#define ISTEAMSTREAMLAUNCHER001_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "SteamTypes.h"
+#include "StreamLauncherCommon.h"
+
+abstract_class ISteamStreamLauncher001
+{
+public:
+	virtual EStreamLauncherResult StartStreaming( const char *cszFilePath ) = 0;
+	virtual void StopStreaming() = 0;
+};
+
+#endif // ISTEAMSTREAMLAUNCHER001_H
+ 

Open Steamworks/Open Steamworks.vcproj

 					>
 				</File>
 				<File
+					RelativePath=".\IClientStreamLauncher.h"
+					>
+				</File>
+				<File
+					RelativePath=".\IClientUnifiedMessages.h"
+					>
+				</File>
+				<File
 					RelativePath=".\IClientUser.h"
 					>
 				</File>
 						>
 					</File>
 					<File
+						RelativePath=".\ISteamRemoteStorage011.h"
+						>
+					</File>
+					<File
 						RelativePath=".\RemoteStorageCommon.h"
 						>
 					</File>
 						>
 					</File>
 				</Filter>
+				<Filter
+					Name="ISteamUnifiedMessages"
+					>
+					<File
+						RelativePath=".\ISteamUnifiedMessages001.h"
+						>
+					</File>
+					<File
+						RelativePath=".\UnifiedMessagesCommon.h"
+						>
+					</File>
+				</Filter>
+				<Filter
+					Name="ISteamStreamLauncher"
+					>
+					<File
+						RelativePath=".\ISteamStreamLauncher001.h"
+						>
+					</File>
+					<File
+						RelativePath=".\StreamLauncherCommon.h"
+						>
+					</File>
+				</Filter>
 			</Filter>
 		</Filter>
 		<Filter

Open Steamworks/RemoteStorageCommon.h

 #define STEAMREMOTESTORAGE_INTERFACE_VERSION_008 "STEAMREMOTESTORAGE_INTERFACE_VERSION008"
 #define STEAMREMOTESTORAGE_INTERFACE_VERSION_009 "STEAMREMOTESTORAGE_INTERFACE_VERSION009"
 #define STEAMREMOTESTORAGE_INTERFACE_VERSION_010 "STEAMREMOTESTORAGE_INTERFACE_VERSION010"
+#define STEAMREMOTESTORAGE_INTERFACE_VERSION_011 "STEAMREMOTESTORAGE_INTERFACE_VERSION011"
 
 #define CLIENTREMOTESTORAGE_INTERFACE_VERSION "CLIENTREMOTESTORAGE_INTERFACE_VERSION001"
 
 
 // A handle to a piece of user generated content
 typedef uint64 UGCHandle_t;
+typedef uint64 PublishedFileUpdateHandle_t;
 typedef uint64 PublishedFileId_t;
 const UGCHandle_t k_UGCHandleInvalid = 0xffffffffffffffffull;
+const PublishedFileUpdateHandle_t k_PublishedFileUpdateHandleInvalid = 0xffffffffffffffffull;
 
 const uint32 k_cchPublishedDocumentTitleMax = 128 + 1;
 const uint32 k_cchPublishedDocumentDescriptionMax = 8000;
+const uint32 k_cchPublishedDocumentChangeDescriptionMax = 256;
 const uint32 k_unEnumeratePublishedFilesMaxResults = 50;
 const uint32 k_cchTagListMax = 1024 + 1;
 const uint32 k_cchFilenameMax = 260;
+const uint32 k_cchPublishedFileURLMax = 256;
 
 enum ERemoteStorageFileRoot
 {
 
 enum EWorkshopFileType
 {
-	// TODO: Reverse this enum
+	k_EWorkshopFileTypeCommunity = 0,
+	k_EWorkshopFileTypeMicrotransaction = 1,
+	k_EWorkshopFileTypeCollection = 2,
+	k_EWorkshopFileTypeArt = 3,
+	k_EWorkshopFileTypeVideo = 4,
+	k_EWorkshopFileTypeScreenshot = 5,
+};
+
+enum EWorkshopVote
+{
+	k_EWorkshopVoteUnvoted = 0,
+	k_EWorkshopVoteFor = 1,
+	k_EWorkshopVoteAgainst = 2,
 };
 
 enum EWorkshopVideoProvider
 
 enum EWorkshopEnumerationType
 {
-	k_EWorkshopEnumerationTypeTopRated = 0,
-	k_EWorkshopEnumerationTypeMostRecent = 1,
+	k_EWorkshopEnumerationTypeRankedByVote = 0,
+	k_EWorkshopEnumerationTypeRecent = 1,
 	k_EWorkshopEnumerationTypeTrending = 2,
-	k_EWorkshopEnumerationTypeFavoritedByFriends = 3,
+	k_EWorkshopEnumerationTypeFavoritesOfFriends = 3,
 	k_EWorkshopEnumerationTypeVotedByFriends = 4,
-	k_EWorkshopEnumerationTypeCreatedByFriends = 5,
-	k_EWorkshopEnumerationTypeCreatedByFollowed = 6,
+	k_EWorkshopEnumerationTypeContentByFriends = 5,
+	k_EWorkshopEnumerationTypeRecentFromFollowedUsers = 6,
 };
 
 enum EPublishedFileInfoMatchingFileType
 };
 
 //-----------------------------------------------------------------------------
-// Purpose: The result of a call to GetCREItemVoteSummary()
+// Purpose: The result of GetPublishedItemVoteDetails
 //-----------------------------------------------------------------------------
 struct RemoteStorageGetPublishedItemVoteDetailsResult_t
 {
 
 	EResult m_eResult;
 	PublishedFileId_t m_unPublishedFileId;
-	int32 m_cVotesFor;
-	int32 m_cVotesAgainst;
-	int32 m_cReports;
+	int32 m_nVotesFor;
+	int32 m_nVotesAgainst;
+	int32 m_nReports;
 	float m_fScore; // [0-1.0]
 };
 

Open Steamworks/SteamTypes.h

 	SHARE_MANUAL = 2,
 } ShareType_t;
 
+typedef uint64 AssetClassId_t;
+const AssetClassId_t k_ulAssetClassIdInvalid = 0x0;
+
+typedef uint32 PhysicalItemId_t;
+const PhysicalItemId_t k_uPhysicalItemIdInvalid = 0x0;
+
 // this is baked into client messages and interfaces as an int, 
 // make sure we never break this.  AppIds and DepotIDs also presently
 // share the same namespace, but since we'd like to change that in the future
 	k_iSteamScreenshotsCallbacks = 2300,
 	k_iClientAudioCallbacks = 2400,
 	k_iSteamUnifiedMessagesCallbacks = 2500,
+	k_iClientUnifiedMessagesCallbacks = 2600,
 };
 
 

Open Steamworks/Steamclient.h

 #include "ISteamRemoteStorage008.h"
 #include "ISteamRemoteStorage009.h"
 #include "ISteamRemoteStorage010.h"
+#include "ISteamRemoteStorage011.h"
 
 // content server
 #include "ISteamContentServer001.h"
 // unified messages
 #include "ISteamUnifiedMessages001.h"
 
+// stream launcher
+#include "ISteamStreamLauncher001.h"
+
 #ifndef NO_ICLIENT
 // client interfaces
 #include "IClientEngine.h"
 #include "IClientHTTP.h"
 #include "IClientConfigStore.h"
 #include "IClientUnifiedMessages.h"
+#include "IClientStreamLauncher.h"
 #endif // NO_ICLIENT
 
 // callback

Open Steamworks/StreamLauncherCommon.h

+ //==========================  Open Steamworks  ================================
+//
+// This file is part of the Open Steamworks project. All individuals associated
+// with this project do not claim ownership of the contents
+// 
+// The code, comments, and all related files, projects, resources,
+// redistributables included with this project are Copyright Valve Corporation.
+// Additionally, Valve, the Valve logo, Half-Life, the Half-Life logo, the
+// Lambda logo, Steam, the Steam logo, Team Fortress, the Team Fortress logo,
+// Opposing Force, Day of Defeat, the Day of Defeat logo, Counter-Strike, the
+// Counter-Strike logo, Source, the Source logo, and Counter-Strike Condition
+// Zero are trademarks and or registered trademarks of Valve Corporation.
+// All other trademarks are property of their respective owners.
+//
+//=============================================================================
+
+#ifndef STREAMLAUNCHERCOMMON_H
+#define STREAMLAUNCHERCOMMON_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+// versions
+#define CLIENTSTREAMLAUNCHER_INTERFACE_VERSION "CLIENTSTREAMLAUNCHER_INTERFACE_VERSION001"
+#define STEAMSTREAMLAUNCHER_INTERFACE_VERSION_001 "STEAMSTREAMLAUNCHER_INTERFACE_VERSION001"
+
+enum EStreamLauncherResult
+{
+	// TODO: Reverse this enum
+};
+
+// callbacks
+#pragma pack( push, 8 )
+
+
+#pragma pack( pop )
+
+
+#endif // STREAMLAUNCHERCOMMON_H