/*---------------------------------------------------------------------------* Project: Horizon File: ssl_Connection.h Copyright (C)2009 Nintendo Co., Ltd. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Rev: 38552 $ *---------------------------------------------------------------------------*/ #ifndef NN_SSL_SSL_CONNECTION_H_ #define NN_SSL_SSL_CONNECTION_H_ #include #include #include #include #include #include #include #include #include #include #ifdef __cplusplus namespace nn { namespace ssl { /* Please see man pages for details */ class Connection : private nn::util::NonCopyable { public: //---------------------------------------- // // /* Please see man pages for details */ explicit Connection(s32 socketDesc); /* Please see man pages for details */ explicit Connection(); /* Please see man pages for details */ virtual ~Connection(void); /* Please see man pages for details */ bool AssignSocket(s32 socketDesc); /* Please see man pages for details */ nn::Result SetServerCertBuffer(uptr bufferAddress, size_t bufferSize); /* Please see man pages for details    */ nn::Result Initialize(const char* pServerName, u32 verifyOpt = VERIFY_NONE); /* Please see man pages for details */ nn::Result AssignServer(const char* pServerName, u32 verifyOpt = VERIFY_NONE){return Initialize(pServerName, verifyOpt);} /* Please see man pages for details */ nn::Result Shutdown(void); // //---------------------------------------- // // /* Please see man pages for details */ nn::Result DoHandshake(void); /* Please see man pages for details */ nn::Result DoHandshake( size_t* pServerCertSize, u32* pServerCertNum = NULL); // //---------------------------------------- // // /* Please see man pages for details */ nn::Result Read(u8* pDataBuf, size_t dataBufSize, size_t* pReadSizeCourier = NULL); /* Please see man pages for details */ nn::Result Peek(u8* pDataBuf, size_t dataBufSize, size_t* pReadSizeCourier = NULL); /* Please see man pages for details */ nn::Result Write(const u8* pDataBuf, size_t dataBufSize, size_t* pWrittenDataSizeCourier = NULL); // //---------------------------------------- // // /* Please see man pages for details */ nn::Result SetServerCertStore(CertStore& certStore); /* Please see man pages for details */ nn::Result SetClientCert(ClientCert& clientCert); /* Please see man pages for details */ nn::Result SetCRLStore(CrlStore& crlStore); /* Please see man pages for details */ nn::Result AddEVPolicyId( const char* pPolicyId ); // /* Please see man pages for details */ nn::Result DisableVerifyOptionForDebug( u32 excludeVerifyOptions ); /* Please see man pages for details */ nn::Result GetCipherInfo( char* pVersionBuf, size_t versionBufSize, char* pCipherKindStrBuf, size_t cipherKindStrBufSize, s32* pAlgBits, s32* pEffectiveBits ); /* */ nn::Result GetCertVerifyErrors( u32* pCertVerifyErrors ); #ifdef NDEBUG_ENABLE /* */ ConnectionHandle GetConnectionHandle(){return m_connectHandle;} #endif private: /* Please see man pages for details */ bool m_isAssigned; NN_PADDING3; /* Please see man pages for details */ s32 m_socket; /* Please see man pages for details */ ConnectionHandle m_connectHandle; /* Please see man pages for details */ nn::Handle m_privateIpcSession; /* Please see man pages for details */ ConnectionIpc m_privateIpcClient; /* Please see man pages for details */ nn::os::TransferMemoryBlock m_serverCertBuffer; /* Please see man pages for details */ bool IsAssigned(){return m_isAssigned;} /* Please see man pages for details */ Result AssignPrivateIpcClient( void ); /* Please see man pages for details */ Result ShutdownConnection( void ); }; } // end of namespace ssl } // end of namespace nn #endif // __cplusplus #include /* Please see man pages for details */ /* Please see man pages for details */ NN_UTIL_DETAIL_CLIBIMPL_DEFINE_BUFFER_CLASS(nnsslConnection, nn::ssl::Connection, 56, u32); /* Please see man pages for details */ NN_EXTERN_C bool nnsslConnectionAssignSocket(nnsslConnection* this_, s32 socket); /* Please see man pages for details */ NN_EXTERN_C nnResult nnsslConnectionAssignServer(nnsslConnection* this_, const char* pServerName, u32 verifyOpt); /* Please see man pages for details */ NN_EXTERN_C nnResult nnsslConnectionSetServerCertBuffer(nnsslConnection* this_, uptr bufferAddress, size_t bufferSize); /* Please see man pages for details */ NN_EXTERN_C nnResult nnsslConnectionShutdown(nnsslConnection* this_); /* Please see man pages for details */ NN_EXTERN_C nnResult nnsslConnectionDoHandshake(nnsslConnection* this_); /* Please see man pages for details */ NN_EXTERN_C nnResult nnsslConnectionDoHandshakeEx(nnsslConnection* this_, size_t* pServerCertSize, u32* pServerCertNum); /* Please see man pages for details */ NN_EXTERN_C nnResult nnsslConnectionRead(nnsslConnection* this_, u8* pDataBuf, size_t dataBufSize, size_t* pReadSizeCourier); /* Please see man pages for details */ NN_EXTERN_C nnResult nnsslConnectionPeek(nnsslConnection* this_, u8* pDataBuf, size_t dataBufSize, size_t* pReadSizeCourier); /* Please see man pages for details */ NN_EXTERN_C nnResult nnsslConnectionWrite(nnsslConnection* this_, const u8* pDataBuf, size_t dataBufSize, size_t* pWrittenDataSizeCourier); /* Please see man pages for details */ NN_EXTERN_C nnResult nnsslConnectionSetServerCertStore(nnsslConnection* this_, nnsslCertStore* certStore); /* Please see man pages for details */ NN_EXTERN_C nnResult nnsslConnectionSetClientCert(nnsslConnection* this_, nnsslClientCert* pClientCert); /* Please see man pages for details */ NN_EXTERN_C nnResult nnsslConnectionSetCRLStore(nnsslConnection* this_, nnsslCrlStore* crlStore); /* Please see man pages for details */ NN_EXTERN_C nnResult nnsslConnectionDisableVerifyOptionForDebug(nnsslConnection* this_, u32 excludeVerifyOptions); /* Please see man pages for details */ NN_EXTERN_C nnResult nnsslConnectionGetCipherInfo(nnsslConnection* this_, char* pVersionBuf, size_t versionBufSize, char* pCipherKindStrBuf, size_t cipherKindStrBufSize, s32* pAlgBits, s32* pEffectiveBits ); /* Please see man pages for details */ NN_EXTERN_C nnResult nnsslConnectionGetCertVerifyErrors(nnsslConnection* this_, u32* pCertVerifyErrors ); /* */ #endif /* NN_SSL_SSL_CONNECTION_H_ */