Move structs to new crate

This commit is contained in:
Artemis Tosini 2024-09-10 01:50:47 +00:00
parent c3b17bafdf
commit fa7556a813
Signed by: artemist
GPG key ID: ADFFE553DCBB831E
9 changed files with 397 additions and 235 deletions

9
Cargo.lock generated
View file

@ -1952,6 +1952,7 @@ dependencies = [
"snafu",
"tokio",
"vapore-proto",
"vapore-struct",
]
[[package]]
@ -1971,6 +1972,14 @@ dependencies = [
"protobuf-codegen",
]
[[package]]
name = "vapore-struct"
version = "0.1.0"
dependencies = [
"bitflags",
"num_enum",
]
[[package]]
name = "version_check"
version = "0.9.5"

View file

@ -4,14 +4,17 @@ members = [
"client",
"lib",
"proto",
"struct",
]
[workspace.package]
version = "0.1.0"
[workspace.dependencies]
bitflags = "2.6.0"
color-eyre = "0.6"
env_logger = "0.11"
keyvalues-serde = "0.2"
log = "0.4"
num_enum = "0.7.3"
protobuf = "3.5.1"

View file

@ -6,14 +6,14 @@ version.workspace = true
[dependencies]
async-tungstenite = { version = "0.27.0", features = ["tokio-rustls-native-certs"] }
base64 = "0.22.1"
bitflags = "2.6.0"
bitflags.workspace = true
color-eyre.workspace = true
flate2 = "1.0.33"
futures = "0.3.30"
hex = "0.4.3"
keyvalues-serde.workspace = true
log.workspace = true
num_enum = "0.7.3"
num_enum.workspace = true
protobuf.workspace = true
rand = "0.8.5"
reqwest = { version = "0.12", features = ["rustls-tls-native-roots"], default-features = false}
@ -22,6 +22,7 @@ serde = { version = "1.0.209", features = ["derive"] }
snafu = "0.8.4"
tokio = { version = "1.39", features = ["rt", "rt-multi-thread", "macros", "time"]}
vapore-proto.path = "../proto"
vapore-struct.path = "../struct"
[dev-dependencies]
dialoguer = "0.11.0"

View file

@ -15,7 +15,7 @@ use vapore_proto::{
};
use crate::{
connection::{CMContext, CMSession},
connection::CMSession,
error::{RSAEncryptSnafu, RSAParameterParseSnafu, RSAParseSnafu},
message::CMProtoBufMessage,
platform::generate_machine_id,

View file

@ -1,8 +1,5 @@
use num_enum::TryFromPrimitiveError;
use snafu::prelude::*;
use crate::state::apps::{ELicenseType, EPaymentMethod};
#[derive(Debug, Snafu)]
#[snafu(visibility(pub(crate)))]
pub enum ClientError {
@ -66,14 +63,9 @@ pub enum ClientError {
actual: vapore_proto::enums_clientserver::EMsg,
},
#[snafu(display("Unknown value while parsing enum EPaymentMethod"))]
TryFromEPaymentMethod {
source: TryFromPrimitiveError<EPaymentMethod>,
},
#[snafu(display("Unknown value while parsing enum ELicenseType"))]
TryFromELicenseType {
source: TryFromPrimitiveError<ELicenseType>,
#[snafu(display("Unknown value while parsing enum"))]
TryFromPrimitive {
source: Box<dyn std::error::Error + Send + Sync>,
},
#[snafu(display("Unable to parse RSA key parameters"))]
@ -92,3 +84,15 @@ impl<T> From<std::sync::PoisonError<T>> for ClientError {
ClientError::LockPoisoned
}
}
impl<Enum: num_enum::TryFromPrimitive + 'static> From<num_enum::TryFromPrimitiveError<Enum>>
for ClientError
where
<Enum as num_enum::TryFromPrimitive>::Primitive: Send + Sync,
{
fn from(value: num_enum::TryFromPrimitiveError<Enum>) -> Self {
Self::TryFromPrimitive {
source: Box::new(value),
}
}
}

View file

@ -3,225 +3,14 @@ use std::{
time::{Duration, SystemTime, UNIX_EPOCH},
};
use num_enum::TryFromPrimitive;
use snafu::prelude::*;
use tokio::sync::watch;
use vapore_proto::{
enums_clientserver::EMsg,
steammessages_clientserver::{cmsg_client_license_list, CMsgClientLicenseList},
};
use vapore_struct::enums::{ELicenseFlags, ELicenseType, EPaymentMethod};
use crate::{
connection::CMSession,
error::{TryFromELicenseTypeSnafu, TryFromEPaymentMethodSnafu},
message::{CMProtoBufMessage, CMRawProtoBufMessage},
ClientError,
};
#[repr(u32)]
#[derive(Debug, Copy, Clone, TryFromPrimitive)]
pub enum EPaymentMethod {
None = 0,
ActivationCode = 1,
CreditCard = 2,
Giropay = 3,
PayPal = 4,
Ideal = 5,
PaySafeCard = 6,
Sofort = 7,
GuestPass = 8,
WebMoney = 9,
MoneyBookers = 10,
AliPay = 11,
Yandex = 12,
Kiosk = 13,
Qiwi = 14,
GameStop = 15,
HardwarePromo = 16,
MoPay = 17,
BoletoBancario = 18,
BoaCompraGold = 19,
BancoDoBrasilOnline = 20,
ItauOnline = 21,
BradescoOnline = 22,
Pagseguro = 23,
VisaBrazil = 24,
AmexBrazil = 25,
Aura = 26,
Hipercard = 27,
MastercardBrazil = 28,
DinersCardBrazil = 29,
AuthorizedDevice = 30,
MOLPoints = 31,
ClickAndBuy = 32,
Beeline = 33,
Konbini = 34,
EClubPoints = 35,
CreditCardJapan = 36,
BankTransferJapan = 37,
PayEasy = 38,
Zong = 39,
CultureVoucher = 40,
BookVoucher = 41,
HappymoneyVoucher = 42,
ConvenientStoreVoucher = 43,
GameVoucher = 44,
Multibanco = 45,
Payshop = 46,
MaestroBoaCompra = 47,
OXXO = 48,
ToditoCash = 49,
Carnet = 50,
SPEI = 51,
ThreePay = 52,
IsBank = 53,
Garanti = 54,
Akbank = 55,
YapiKredi = 56,
Halkbank = 57,
BankAsya = 58,
Finansbank = 59,
DenizBank = 60,
PTT = 61,
CashU = 62,
SantanderRio = 63,
AutoGrant = 64,
WebMoneyJapan = 65,
OneCard = 66,
PSE = 67,
Exito = 68,
Efecty = 69,
Paloto = 70,
PinValidda = 71,
MangirKart = 72,
BancoCreditoDePeru = 73,
BBVAContinental = 74,
SafetyPay = 75,
PagoEfectivo = 76,
Trustly = 77,
UnionPay = 78,
BitCoin = 79,
LicensedSite = 80,
BitCash = 81,
NetCash = 82,
Nanaco = 83,
Tenpay = 84,
WeChat = 85,
CashonDelivery = 86,
CreditCardNodwin = 87,
DebitCardNodwin = 88,
NetBankingNodwin = 89,
CashCardNodwin = 90,
WalletNodwin = 91,
MobileDegica = 92,
Naranja = 93,
Cencosud = 94,
Cabal = 95,
PagoFacil = 96,
Rapipago = 97,
BancoNacionaldeCostaRica = 98,
BancoPoplar = 99,
RedPagos = 100,
SPE = 101,
Multicaja = 102,
RedCompra = 103,
ZiraatBank = 104,
VakiflarBank = 105,
KuveytTurkBank = 106,
EkonomiBank = 107,
Pichincha = 108,
PichinchaCash = 109,
Przelewy24 = 110,
Trustpay = 111,
POLi = 112,
MercadoPago = 113,
PayU = 114,
VTCPayWallet = 115,
MrCash = 116,
EPS = 117,
Interac = 118,
VTCPayCards = 119,
VTCPayOnlineBanking = 120,
VisaElectronBoaCompra = 121,
CafeFunded = 122,
OCA = 123,
Lider = 124,
WebMoneySteamCardJapan = 125,
WebMoneySteamCardTopUpJapan = 126,
Toss = 127,
Wallet = 128,
Valve = 129,
MasterComp = 130,
Promotional = 131,
MasterSubscription = 134,
Payco = 135,
MobileWalletJapan = 136,
BoletoFlash = 137,
PIX = 138,
GCash = 139,
KakaoPay = 140,
Dana = 141,
TrueMoney = 142,
TouchnGo = 143,
LinePay = 144,
MerPay = 145,
PayPay = 146,
AlfaClick = 147,
Sberbank = 148,
YooMoney = 149,
Tinkoff = 150,
CashInCIS = 151,
AuPAY = 152,
AliPayHK = 153,
NaverPay = 154,
Linkaja = 155,
ShopeePay = 156,
GrabPay = 157,
PayNow = 158,
OnlineBankingThailand = 159,
CashOptionsThailand = 160,
OEMTicket = 256,
Split = 512,
Complimentary = 1024,
FamilyGroup = 1025,
}
#[derive(Debug, Copy, Clone, TryFromPrimitive)]
#[repr(u32)]
pub enum ELicenseType {
NoLicense = 0,
SinglePurchase = 1,
SinglePurchaseLimitedUse = 2,
RecurringCharge = 3,
RecurringChargeLimitedUse = 4,
RecurringChargeLimitedUseWithOverages = 5,
RecurringOption = 6,
LimitedUseDelayedActivation = 7,
}
bitflags::bitflags! {
pub struct ELicenseFlags: u32 {
const None = 0;
const Renew = 0x01;
const RenewalFailed = 0x02;
const Pending = 0x04;
const Expired = 0x08;
const CancelledByUser = 0x10;
const CancelledByAdmin = 0x20;
const LowViolenceContent = 0x40;
const ImportedFromSteam2 = 0x80;
const ForceRunRestriction = 0x100;
const RegionRestrictionExpired = 0x200;
const CancelledByFriendlyFraudLock = 0x400;
const NotActivated = 0x800;
const PendingRefund = 0x2000;
const Borrowed = 0x4000;
const ReleaseStateOverride = 0x8000;
const CancelledByPartner = 0x40000;
const NonPermanent = 0x80000;
const PreferredOwner = 0x100000;
}
}
use crate::{connection::CMSession, message::CMProtoBufMessage, ClientError};
pub struct License {
pub package_id: u32,
@ -258,16 +47,10 @@ impl TryFrom<cmsg_client_license_list::License> for License {
},
minute_limit: value.minute_limit(),
minutes_used: value.minutes_used(),
payment_method: value
.payment_method()
.try_into()
.context(TryFromEPaymentMethodSnafu {})?,
payment_method: value.payment_method().try_into()?,
flags: ELicenseFlags::from_bits_truncate(value.flags()),
purchase_country_code: value.purchase_country_code().to_string(),
license_type: value
.license_type()
.try_into()
.context(TryFromELicenseTypeSnafu {})?,
license_type: value.license_type().try_into()?,
territory_code: value.territory_code(),
change_number: value.change_number(),
owner_id: value.owner_id(),

View file

@ -1 +1,5 @@
//! Generated data types used by the Steam API.
//! This only includes protobufs, not `*.steamd` files representing raw structs
//! and some enums.
include!(concat!(env!("OUT_DIR"), "/gen/mod.rs"));

9
struct/Cargo.toml Normal file
View file

@ -0,0 +1,9 @@
[package]
name = "vapore-struct"
edition = "2021"
version.workspace = true
[dependencies]
bitflags.workspace = true
num_enum.workspace = true

349
struct/src/lib.rs Normal file
View file

@ -0,0 +1,349 @@
//! Structures from SteamKit2 `*.steamd` files.
//! Currently these are manually copied, but may be autogenerated in the future
pub mod eresult {
use num_enum::{IntoPrimitive, TryFromPrimitive};
#[repr(u32)]
#[derive(Debug, Copy, Clone, TryFromPrimitive, IntoPrimitive)]
enum EResult {
Invalid = 0,
OK = 1,
Fail = 2,
NoConnection = 3,
InvalidPassword = 5,
LoggedInElsewhere = 6,
InvalidProtocolVer = 7,
InvalidParam = 8,
FileNotFound = 9,
Busy = 10,
InvalidState = 11,
InvalidName = 12,
InvalidEmail = 13,
DuplicateName = 14,
AccessDenied = 15,
Timeout = 16,
Banned = 17,
AccountNotFound = 18,
InvalidSteamID = 19,
ServiceUnavailable = 20,
NotLoggedOn = 21,
Pending = 22,
EncryptionFailure = 23,
InsufficientPrivilege = 24,
LimitExceeded = 25,
Revoked = 26,
Expired = 27,
AlreadyRedeemed = 28,
DuplicateRequest = 29,
AlreadyOwned = 30,
IPNotFound = 31,
PersistFailed = 32,
LockingFailed = 33,
LogonSessionReplaced = 34,
ConnectFailed = 35,
HandshakeFailed = 36,
IOFailure = 37,
RemoteDisconnect = 38,
ShoppingCartNotFound = 39,
Blocked = 40,
Ignored = 41,
NoMatch = 42,
AccountDisabled = 43,
ServiceReadOnly = 44,
AccountNotFeatured = 45,
AdministratorOK = 46,
ContentVersion = 47,
TryAnotherCM = 48,
PasswordRequiredToKickSession = 49,
AlreadyLoggedInElsewhere = 50,
Suspended = 51,
Cancelled = 52,
DataCorruption = 53,
DiskFull = 54,
RemoteCallFailed = 55,
PasswordUnset = 56,
ExternalAccountUnlinked = 57,
PSNTicketInvalid = 58,
ExternalAccountAlreadyLinked = 59,
RemoteFileConflict = 60,
IllegalPassword = 61,
SameAsPreviousValue = 62,
AccountLogonDenied = 63,
CannotUseOldPassword = 64,
InvalidLoginAuthCode = 65,
AccountLogonDeniedNoMail = 66,
HardwareNotCapableOfIPT = 67,
IPTInitError = 68,
ParentalControlRestricted = 69,
FacebookQueryError = 70,
ExpiredLoginAuthCode = 71,
IPLoginRestrictionFailed = 72,
AccountLockedDown = 73,
AccountLogonDeniedVerifiedEmailRequired = 74,
NoMatchingURL = 75,
BadResponse = 76,
RequirePasswordReEntry = 77,
ValueOutOfRange = 78,
UnexpectedError = 79,
Disabled = 80,
InvalidCEGSubmission = 81,
RestrictedDevice = 82,
RegionLocked = 83,
RateLimitExceeded = 84,
AccountLoginDeniedNeedTwoFactor = 85,
ItemDeleted = 86,
AccountLoginDeniedThrottle = 87,
TwoFactorCodeMismatch = 88,
TwoFactorActivationCodeMismatch = 89,
AccountAssociatedToMultiplePartners = 90,
NotModified = 91,
NoMobileDevice = 92,
TimeNotSynced = 93,
SMSCodeFailed = 94,
AccountLimitExceeded = 95,
AccountActivityLimitExceeded = 96,
PhoneActivityLimitExceeded = 97,
RefundToWallet = 98,
EmailSendFailure = 99,
NotSettled = 100,
NeedCaptcha = 101,
GSLTDenied = 102,
GSOwnerDenied = 103,
InvalidItemType = 104,
IPBanned = 105,
GSLTExpired = 106,
InsufficientFunds = 107,
TooManyPending = 108,
NoSiteLicensesFound = 109,
WGNetworkSendExceeded = 110,
AccountNotFriends = 111,
LimitedUserAccount = 112,
CantRemoveItem = 113,
AccountDeleted = 114,
ExistingUserCancelledLicense = 115,
CommunityCooldown = 116,
NoLauncherSpecified = 117,
MustAgreeToSSA = 118,
LauncherMigrated = 119,
SteamRealmMismatch = 120,
InvalidSignature = 121,
ParseFailure = 122,
NoVerifiedPhone = 123,
InsufficientBattery = 124,
ChargerRequired = 125,
CachedCredentialInvalid = 126,
PhoneNumberIsVOIP = 127,
NotSupported = 128,
FamilySizeLimitExceeded = 129,
}
}
pub mod enums {
use num_enum::{IntoPrimitive, TryFromPrimitive};
bitflags::bitflags! {
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub struct ELicenseFlags: u32 {
const None = 0;
const Renew = 0x01;
const RenewalFailed = 0x02;
const Pending = 0x04;
const Expired = 0x08;
const CancelledByUser = 0x10;
const CancelledByAdmin = 0x20;
const LowViolenceContent = 0x40;
const ImportedFromSteam2 = 0x80;
const ForceRunRestriction = 0x100;
const RegionRestrictionExpired = 0x200;
const CancelledByFriendlyFraudLock = 0x400;
const NotActivated = 0x800;
const PendingRefund = 0x2000;
const Borrowed = 0x4000;
const ReleaseStateOverride = 0x8000;
const CancelledByPartner = 0x40000;
const NonPermanent = 0x80000;
const PreferredOwner = 0x100000;
}
}
#[derive(Debug, Copy, Clone, TryFromPrimitive, IntoPrimitive)]
#[repr(u32)]
pub enum ELicenseType {
NoLicense = 0,
SinglePurchase = 1,
SinglePurchaseLimitedUse = 2,
RecurringCharge = 3,
RecurringChargeLimitedUse = 4,
RecurringChargeLimitedUseWithOverages = 5,
RecurringOption = 6,
LimitedUseDelayedActivation = 7,
}
#[repr(u32)]
#[derive(Debug, Copy, Clone, TryFromPrimitive, IntoPrimitive)]
pub enum EPaymentMethod {
None = 0,
ActivationCode = 1,
CreditCard = 2,
Giropay = 3,
PayPal = 4,
Ideal = 5,
PaySafeCard = 6,
Sofort = 7,
GuestPass = 8,
WebMoney = 9,
MoneyBookers = 10,
AliPay = 11,
Yandex = 12,
Kiosk = 13,
Qiwi = 14,
GameStop = 15,
HardwarePromo = 16,
MoPay = 17,
BoletoBancario = 18,
BoaCompraGold = 19,
BancoDoBrasilOnline = 20,
ItauOnline = 21,
BradescoOnline = 22,
Pagseguro = 23,
VisaBrazil = 24,
AmexBrazil = 25,
Aura = 26,
Hipercard = 27,
MastercardBrazil = 28,
DinersCardBrazil = 29,
AuthorizedDevice = 30,
MOLPoints = 31,
ClickAndBuy = 32,
Beeline = 33,
Konbini = 34,
EClubPoints = 35,
CreditCardJapan = 36,
BankTransferJapan = 37,
PayEasy = 38,
Zong = 39,
CultureVoucher = 40,
BookVoucher = 41,
HappymoneyVoucher = 42,
ConvenientStoreVoucher = 43,
GameVoucher = 44,
Multibanco = 45,
Payshop = 46,
MaestroBoaCompra = 47,
OXXO = 48,
ToditoCash = 49,
Carnet = 50,
SPEI = 51,
ThreePay = 52,
IsBank = 53,
Garanti = 54,
Akbank = 55,
YapiKredi = 56,
Halkbank = 57,
BankAsya = 58,
Finansbank = 59,
DenizBank = 60,
PTT = 61,
CashU = 62,
SantanderRio = 63,
AutoGrant = 64,
WebMoneyJapan = 65,
OneCard = 66,
PSE = 67,
Exito = 68,
Efecty = 69,
Paloto = 70,
PinValidda = 71,
MangirKart = 72,
BancoCreditoDePeru = 73,
BBVAContinental = 74,
SafetyPay = 75,
PagoEfectivo = 76,
Trustly = 77,
UnionPay = 78,
BitCoin = 79,
LicensedSite = 80,
BitCash = 81,
NetCash = 82,
Nanaco = 83,
Tenpay = 84,
WeChat = 85,
CashonDelivery = 86,
CreditCardNodwin = 87,
DebitCardNodwin = 88,
NetBankingNodwin = 89,
CashCardNodwin = 90,
WalletNodwin = 91,
MobileDegica = 92,
Naranja = 93,
Cencosud = 94,
Cabal = 95,
PagoFacil = 96,
Rapipago = 97,
BancoNacionaldeCostaRica = 98,
BancoPoplar = 99,
RedPagos = 100,
SPE = 101,
Multicaja = 102,
RedCompra = 103,
ZiraatBank = 104,
VakiflarBank = 105,
KuveytTurkBank = 106,
EkonomiBank = 107,
Pichincha = 108,
PichinchaCash = 109,
Przelewy24 = 110,
Trustpay = 111,
POLi = 112,
MercadoPago = 113,
PayU = 114,
VTCPayWallet = 115,
MrCash = 116,
EPS = 117,
Interac = 118,
VTCPayCards = 119,
VTCPayOnlineBanking = 120,
VisaElectronBoaCompra = 121,
CafeFunded = 122,
OCA = 123,
Lider = 124,
WebMoneySteamCardJapan = 125,
WebMoneySteamCardTopUpJapan = 126,
Toss = 127,
Wallet = 128,
Valve = 129,
MasterComp = 130,
Promotional = 131,
MasterSubscription = 134,
Payco = 135,
MobileWalletJapan = 136,
BoletoFlash = 137,
PIX = 138,
GCash = 139,
KakaoPay = 140,
Dana = 141,
TrueMoney = 142,
TouchnGo = 143,
LinePay = 144,
MerPay = 145,
PayPay = 146,
AlfaClick = 147,
Sberbank = 148,
YooMoney = 149,
Tinkoff = 150,
CashInCIS = 151,
AuPAY = 152,
AliPayHK = 153,
NaverPay = 154,
Linkaja = 155,
ShopeePay = 156,
GrabPay = 157,
PayNow = 158,
OnlineBankingThailand = 159,
CashOptionsThailand = 160,
OEMTicket = 256,
Split = 512,
Complimentary = 1024,
FamilyGroup = 1025,
}
}