#include "Replicator.RockyItem.h" #include "Item.h" #include "VMProtectSDK.h" #include "NetPmc.h" #include "ClientReplicator.h" #include "v8datamodel/DataModel.h" #include namespace RBX { namespace Network { Replicator::RockyItem::RockyItem(Replicator* replicator, MccReport& report) : Item(*replicator), report(report) {} bool Replicator::RockyItem::write(RakNet::BitStream& bitStream) { writeItemType(bitStream, ItemTypeRocky); bitStream << static_cast(RockeyMccReportClient); bitStream << report.memcheckRunTime; bitStream << report.memcheckDoneTime; bitStream << report.mccRunTime; bitStream << report.badAppRunTime; bitStream << report.localChecksEncoded; return true; } #ifndef RBX_STUDIO_BUILD Replicator::NetPmcResponseItem::NetPmcResponseItem(Replicator* replicator, uint32_t response, uint64_t correct, uint8_t idx) : Item(*replicator) , response(response) , correct(correct) , idx(idx) { } bool Replicator::NetPmcResponseItem::write(RakNet::BitStream& bitStream) { writeItemType(bitStream, ItemTypeRocky); bitStream << static_cast(RockeyNetPmcResponse); bitStream << idx; bitStream << response; bitStream << static_cast(correct); return true; } Replicator::RockyDbgItem::RockyDbgItem(Replicator* replicator, const std::vector& info) : Item(*replicator) , info(info) {} bool Replicator::RockyDbgItem::write(RakNet::BitStream& bitStream) { writeItemType(bitStream, ItemTypeRocky); bitStream << static_cast(RockeyCallInfo); bitStream << static_cast(info.size()); for (size_t i = 0; i < static_cast(info.size()); ++i) { bitStream << info[i].handler; bitStream << info[i].ret; } return true; } #endif #ifdef RBX_RCC_SECURITY Replicator::NetPmcChallengeItem::NetPmcChallengeItem(Replicator* replicator, uint8_t idx) : Item(*replicator) , idx(idx) { } bool Replicator::NetPmcChallengeItem::write(RakNet::BitStream& bitStream) { writeItemType(bitStream, ItemTypeRocky); bitStream << static_cast(RockeyNetPmcChallenge); bitStream << idx; const RBX::Security::NetPmcChallenge& key = RBX::Security::netPmcKeys[idx]; bitStream << key.base; bitStream << key.size; bitStream << key.seed; bitStream << key.result; return true; } #endif void DeserializedRockyItem::process(Replicator& replicator) { #if defined(_WIN32) && !defined(RBX_STUDIO_BUILD) ClientReplicator* rep = rbx_static_cast(&replicator); DataModel::get(rep)->submitTask( boost::bind(&ClientReplicator::doNetPmcCheck, shared_from(rep), idx, challenge), DataModelJob::Write); #endif } shared_ptr Replicator::RockyItem::read(Replicator& replicator, RakNet::BitStream& bitStream) { shared_ptr deserializedData(new DeserializedRockyItem()); ClientReplicator* rep = rbx_static_cast(&replicator); rep->readRockyItem(bitStream, deserializedData->idx, deserializedData->challenge); return deserializedData; } } }