botw/lib/NintendoSDK/include/nn/nex/client.h

111 lines
3.4 KiB
C++

/**
* @file client.h
* @brief Client implementations for NEX.
*/
#pragma once
#include <nn/nex/system.h>
namespace nn {
namespace nex {
class Credentials;
class EndPoint;
class Message;
class ProtocolCallContext;
class ProtocolRequestBrokerInterface;
class Protocol : public nn::nex::SystemComponent {
public:
enum _Command { Response, Request };
enum _Type {
Client, // implemented in nn::nex::ClientProtocol
Server // implemented in nn::nex::ServerProtocol
};
Protocol(u32);
virtual ~Protocol();
virtual char* GetType() const;
virtual bool IsAKindOf(char const*) const;
virtual void EnforceDeclareSysComponentMacro();
virtual bool BeginInitialization();
virtual bool BeginTermination();
virtual nn::nex::Protocol::_Type GetProtocolType() const = 0;
virtual void EndPointDisconnected(nn::nex::EndPoint*);
virtual void FaultDetected(nn::nex::EndPoint*, u32);
virtual nn::nex::Protocol* Clone() const;
virtual bool Reload();
nn::nex::EndPoint* GetOutgoingConnection() const;
void SetIncomingConnection(nn::nex::EndPoint*);
void SetProtocolID(u16);
void AddMethodID(nn::nex::Message*, u32);
void CopyMembers(nn::nex::Protocol const*);
void AssociateProtocolRequestBroker(nn::nex::ProtocolRequestBrokerInterface*);
void ClearFlag(u32 newFlag);
static void ExtractProtocolKey(nn::nex::Message*, nn::nex::Protocol::_Command&, u16&);
static bool IsOldRVDDLVersion(nn::nex::EndPoint*);
u16 mProtocolID; // _48
u16 _4A;
u32 _4C;
nn::nex::EndPoint* mOutgoingConnection; // _50
nn::nex::ProtocolRequestBrokerInterface* mBrokerInterface; // _58
u32 mFlags; // _60
u32 _64;
nn::nex::EndPoint* mIncomingConnection; // _68
u32 mUseLoopback; // _70 (boolean)
u32 _74;
u64 _78;
u32 _80;
u32 _84;
};
class ClientProtocol : public nn::nex::Protocol {
public:
ClientProtocol(u32);
virtual ~ClientProtocol();
virtual char* GetType() const;
virtual bool IsAKindOf(char const*) const;
virtual void EnforceDeclareSysComponentMacro();
virtual nn::nex::Protocol::_Type GetProtocolType() const = 0;
virtual void ExtractCallSpecificResults(nn::nex::Message*, nn::nex::ProtocolCallContext*) = 0;
virtual nn::nex::ClientProtocol* CreateResponder() const = 0;
virtual void SetDefaultCredentials(nn::nex::Credentials*);
bool SendOverLocalLoopback(nn::nex::ProtocolCallContext*, nn::nex::Message*);
bool SendRMCMessage(nn::nex::ProtocolCallContext*, nn::nex::Message*);
void ProcessResponse(nn::nex::Message*, nn::nex::EndPoint*);
nn::nex::Credentials* mCredentials; // _88
};
class ServerProtocol : public nn::nex::Protocol {
public:
ServerProtocol(u32);
virtual ~ServerProtocol();
virtual char* GetType() const;
virtual bool IsAKindOf(char const*) const;
virtual void EnforceDeclareSysComponentMacro();
virtual nn::nex::Protocol::_Type GetProtocolType() const = 0;
virtual void DispatchProtocolMessage(nn::nex::Message*, nn::nex::Message*, bool*,
nn::nex::EndPoint*) = 0;
virtual void DispatchProtocolMessageWithAttemptCount(u64, nn::nex::Message*, nn::nex::Message*,
bool*, int*, nn::nex::EndPoint*);
virtual bool UseAttemptCountMethod();
};
}; // namespace nex
}; // namespace nn