Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import `in`.dragonbra.javasteam.generated.MsgClientAppUsageEvent
import `in`.dragonbra.javasteam.generated.MsgClientGetLegacyGameKey
import `in`.dragonbra.javasteam.protobufs.steamclient.SteammessagesClientserver.CMsgClientGamesPlayed
import `in`.dragonbra.javasteam.protobufs.steamclient.SteammessagesClientserver.CMsgClientGetAppOwnershipTicket
import `in`.dragonbra.javasteam.protobufs.steamclient.SteammessagesClientserver.CMsgClientRequestEncryptedAppTicket
import `in`.dragonbra.javasteam.protobufs.steamclient.SteammessagesClientserver2.CMsgClientCheckAppBetaPassword
import `in`.dragonbra.javasteam.protobufs.steamclient.SteammessagesClientserver2.CMsgClientGetDepotDecryptionKey
import `in`.dragonbra.javasteam.protobufs.steamclient.SteammessagesClientserver2.CMsgClientRequestFreeLicense
Expand All @@ -22,6 +23,7 @@ import `in`.dragonbra.javasteam.steam.handlers.ClientMsgHandler
import `in`.dragonbra.javasteam.steam.handlers.steamapps.callback.AppOwnershipTicketCallback
import `in`.dragonbra.javasteam.steam.handlers.steamapps.callback.CheckAppBetaPasswordCallback
import `in`.dragonbra.javasteam.steam.handlers.steamapps.callback.DepotKeyCallback
import `in`.dragonbra.javasteam.steam.handlers.steamapps.callback.EncryptedAppTicketCallback
import `in`.dragonbra.javasteam.steam.handlers.steamapps.callback.FreeLicenseCallback
import `in`.dragonbra.javasteam.steam.handlers.steamapps.callback.GameConnectTokensCallback
import `in`.dragonbra.javasteam.steam.handlers.steamapps.callback.GuestPassListCallback
Expand Down Expand Up @@ -94,6 +96,34 @@ class SteamApps : ClientMsgHandler() {
return AsyncJobSingle(client, request.sourceJobID)
}

/**
* Requests an encrypted app ticket for the specified AppID.
* Results are returned in an [EncryptedAppTicketCallback] callback.
*
* @param appId The appid to request the encrypted ticket for.
* @param userdata Optional user data to include in the ticket.
* @return The Job ID of the request. This can be used to find the appropriate [EncryptedAppTicketCallback].
*/
@JavaSteamAddition
@JvmOverloads
fun requestEncryptedAppTicket(appId: Int, userdata: ByteArray? = null): AsyncJobSingle<EncryptedAppTicketCallback> {
val request = ClientMsgProtobuf<CMsgClientRequestEncryptedAppTicket.Builder>(
CMsgClientRequestEncryptedAppTicket::class.java,
EMsg.ClientRequestEncryptedAppTicket
).apply {
sourceJobID = client.getNextJobID()

body.appId = appId
userdata?.let {
body.userdata = ByteString.copyFrom(it)
}
}

client.send(request)

return AsyncJobSingle(client, request.sourceJobID)
}

/**
* Request PICS access tokens for an app or package.
* Results are returned in a [PICSTokensCallback] callback.
Expand Down Expand Up @@ -468,6 +498,7 @@ class SteamApps : ClientMsgHandler() {
EMsg.ClientUpdateGuestPassesList -> GuestPassListCallback(packetMsg)
EMsg.ClientCheckAppBetaPasswordResponse -> CheckAppBetaPasswordCallback(packetMsg)
EMsg.ClientPICSPrivateBetaResponse -> PrivateBetaCallback(packetMsg)
EMsg.ClientRequestEncryptedAppTicketResponse -> EncryptedAppTicketCallback(packetMsg)
else -> null
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package `in`.dragonbra.javasteam.steam.handlers.steamapps.callback

import `in`.dragonbra.javasteam.base.ClientMsgProtobuf
import `in`.dragonbra.javasteam.base.IPacketMsg
import `in`.dragonbra.javasteam.enums.EResult
import `in`.dragonbra.javasteam.protobufs.steamclient.EncryptedAppTicketOuterClass.EncryptedAppTicket
import `in`.dragonbra.javasteam.protobufs.steamclient.SteammessagesClientserver.CMsgClientRequestEncryptedAppTicketResponse
import `in`.dragonbra.javasteam.steam.handlers.steamapps.SteamApps
import `in`.dragonbra.javasteam.steam.steamclient.callbackmgr.CallbackMsg

/**
* This callback is received in response to calling [SteamApps.requestEncryptedAppTicket]
*/
class EncryptedAppTicketCallback(packetMsg: IPacketMsg) : CallbackMsg() {

/**
* Gets the result of requesting the encrypted app ticket.
*/
val result: EResult

/**
* Gets the AppID this ticket is for.
*/
val appID: Int

/**
* Gets the encrypted app ticket, or null if the request failed.
*/
val encryptedAppTicket: EncryptedAppTicket?

init {
val ticketResponse = ClientMsgProtobuf<CMsgClientRequestEncryptedAppTicketResponse.Builder>(
CMsgClientRequestEncryptedAppTicketResponse::class.java,
packetMsg
)
val msg = ticketResponse.body

jobID = ticketResponse.targetJobID

result = EResult.from(msg.eresult)
appID = msg.appId
encryptedAppTicket = if (msg.hasEncryptedAppTicket()) {
msg.encryptedAppTicket
} else {
null
}
}
}