/*---------------------------------------------------------------------------* Project: Horizon File: http_Connection.h Copyright (C)2009-2011 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: 38684 $ *---------------------------------------------------------------------------*/ #ifndef NN_HTTP_HTTP_CONNECTION_H_ #define NN_HTTP_HTTP_CONNECTION_H_ #include #include #include #include #include #include #include #include #include #ifdef __cplusplus namespace nn { namespace http { /* Please see man pages for details */ class Connection : private nn::util::NonCopyable { public: //---------------------------------------- // // /* Please see man pages for details */ explicit Connection(void); /* Please see man pages for details */ explicit Connection(const char* pUrl, RequestMethod method = REQUEST_METHOD_GET, bool isUseDefaultProxy = true); /* Please see man pages for details */ virtual ~Connection(void); /* Please see man pages for details */ nn::Result Initialize(const char* pUrl, RequestMethod method = REQUEST_METHOD_GET, bool isUseDefaultProxy = true); /* Please see man pages for details */ nn::Result Finalize(void); // //---------------------------------------- // // /* Please see man pages for details */ nn::Result SetProxy(const char* pProxyName, u16 port, const char* pUserName, const char* pPassword); /* Please see man pages for details */ nn::Result SetBasicAuthorization(const char* pUserName, const char* pPassword); // //---------------------------------------- // // /* Please see man pages for details */ nn::Result Connect(void); /* Please see man pages for details */ nn::Result ConnectAsync(void); /* Please see man pages for details */ nn::Result Cancel(void); /* Please see man pages for details */ nn::Result GetStatus(Status* pStatusBuf) const; /* Please see man pages for details */ nn::Result GetError(ResultCode* pResultCodeBuf) const; /* Please see man pages for details */ nn::Result GetProgress(size_t* pReceivedLen, size_t* pContentLen) const; // //---------------------------------------- // // /* Please see man pages for details */ nn::Result Read(u8* pBodyBuf, size_t bufLen); /* Please see man pages for details */ nn::Result Read(u8* pBodyBuf, size_t bufLen, const nn::fnd::TimeSpan& timeout); /* Please see man pages for details */ nn::Result GetHeaderField(const char* pLabel, char* pFieldBuf, size_t bufSize, size_t* pFieldLengthCourier = NULL) const; /* Please see man pages for details */ nn::Result GetHeaderField(const char* pLabel, char* pFieldBuf, size_t bufSize, const nn::fnd::TimeSpan& timeout, size_t* pFieldLengthCourier = NULL) const; /* Please see man pages for details */ nn::Result GetHeaderAll(char* pHeaderBuf, size_t bufSize, size_t* pLengthCourier = NULL) const; /* Please see man pages for details */ nn::Result GetHeaderAll(char* pHeaderBuf, size_t bufSize, const nn::fnd::TimeSpan& timeout, size_t* pLengthCourier = NULL) const; /* Please see man pages for details */ nn::Result GetStatusCode(s32* pStatusCodeCourier) const; /* Please see man pages for details */ nn::Result GetStatusCode(s32* pStatusCodeCourier, const nn::fnd::TimeSpan& timeout) const; // //---------------------------------------- // // /* Please see man pages for details */ nn::Result AddHeaderField(const char* pLabel, const char* pValue); /* Please see man pages for details */ nn::Result AddPostDataAscii(const char* pLabel, const char* pValue); /* Please see man pages for details */ nn::Result AddPostDataBinary(const char* pLabel, const void* pValue, size_t valueSize); /* Please see man pages for details */ nn::Result AddPostDataRaw(const void* pValue, size_t valueSize); /* Please see man pages for details */ nn::Result SetLazyPostDataSetting( PostDataType dataType ); /* Please see man pages for details */ nn::Result NotifyFinishSendPostData( void ); /* Please see man pages for details */ nn::Result SetPostDataEncoding(EncodingType type); /* Please see man pages for details */ nn::Result SendPostDataAscii(const char* pLabel, const char* pValue); /* Please see man pages for details */ nn::Result SendPostDataAscii(const char* pLabel, const char* pValue, const nn::fnd::TimeSpan& timeout); /* Please see man pages for details */ nn::Result SendPostDataBinary(const char* pLabel, const void* pValue, size_t valueSize); /* Please see man pages for details */ nn::Result SendPostDataBinary(const char* pLabel, const void* pValue, size_t valueSize, const nn::fnd::TimeSpan& timeout); /* Please see man pages for details */ nn::Result SendPostDataRaw(const void* pValue, size_t valueSize); /* Please see man pages for details */ nn::Result SendPostDataRaw(const void* pValue, size_t valueSize, const nn::fnd::TimeSpan& timeout); // //---------------------------------------- // // /* Please see man pages for details */ nn::Result SetRootCa(const u8* pCertData, size_t certDataSize); /* Please see man pages for details */ nn::Result SetRootCa( InternalCaCertId inCaCertName ); /* Please see man pages for details */ nn::Result SetRootCaStore(CertStore& certStore); /* Please see man pages for details */ nn::Result SetClientCert(const u8* pCertData, size_t certDataSize, const u8* pPrivateKeyData, size_t privateKeyDataSize); /* Please see man pages for details */ nn::Result SetClientCert( InternalClientCertId inClientCertName ); /* Please see man pages for details */ nn::Result SetClientCert(ClientCert& clientCert); /* Please see man pages for details */ nn::Result GetSslError(s32* pResultCodeBuf) const; /* Please see man pages for details */ nn::Result SetVerifyOption(u32 verifyOption); /* Please see man pages for details */ nn::Result DisableVerifyOptionForDebug( u32 excludeVerifyOptions ); /* Please see man pages for details */ nn::Result SetRootCaDefault( void ) NN_ATTRIBUTE_DEPRECATED; /* Please see man pages for details */ nn::Result SetClientCertDefault( void ) NN_ATTRIBUTE_DEPRECATED; /* Please see man pages for details */ nn::Result SetKeepAliveAvailability( bool isUseKeepAlive ); // private: /* 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 */ mutable ConnectionIpc m_PrivateIpcClient; /* Please see man pages for details */ nn::Result SetProxyDefault(void); /* Please see man pages for details */ bool IsConnected() const { return (m_ConnectHandle > 0) ? true : false; } /* Please see man pages for details */ Result AssignPrivateIpcClient(); }; } // end of namespace http } // 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(nnhttpConnection, nn::http::Connection, 16, u32); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionInitialize(nnhttpConnection* this_, const char *pUrl, nnHttpRequestMethod method); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionFinalize(nnhttpConnection* this_); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionConnect(nnhttpConnection* this_); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionConnectAsync(nnhttpConnection* this_); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionCancel(nnhttpConnection* this_); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionRead(nnhttpConnection* this_, u8* pBodyBuf, u32 bufLen); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionGetStatus(const nnhttpConnection* this_, nnHttpStatus* pStatusBuf); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionGetProgress(const nnhttpConnection* this_, u32* pReceivedLen, u32* pContentLen); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionGetError(const nnhttpConnection* this_, nnHttpResultCode* pResultCodeBuf); /* Connection settings */ /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionSetProxy(nnhttpConnection* this_, const char* pProxyName, u16 port, const char* pUserName, const char* pPassword); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionSetBasicAuthorization(nnhttpConnection* this_, const char *pUserName, const char *pPassword); /* HTTP request settings */ /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionAddHeaderField(nnhttpConnection* this_, const char* pLabel, const char* pValue); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionAddPostDataAscii(nnhttpConnection* this_, const char* pLabel, const char* pValue); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionAddPostDataBinary(nnhttpConnection* this_, const char* pLabel, const char* pValue, u32 length); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionAddPostDataRaw(nnhttpConnection* this_, const char* pValue, u32 length); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionSetLazyPostDataSetting(nnhttpConnection* this_, nnHttpPostDataType dataType); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionNotifyFinishSendPostData(nnhttpConnection* this_); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionSetPostDataEncoding(nnhttpConnection* this_, nnHttpEncodingType type); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionSendPostDataAscii(nnhttpConnection* this_, const char* pLabel, const char* pValue); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionSendPostDataBinary(nnhttpConnection* this_, const char* pLabel, const void* pValue, size_t length); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionSendPostDataRaw(nnhttpConnection* this_, const void* pValue, u32 length); /* Get HTTP response */ /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionGetHeaderField(const nnhttpConnection* this_, const char* pLabel, char* pFieldBuf, size_t bufSize, size_t* pFieldLengthCourier); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionGetHeaderAll(const nnhttpConnection* this_, char* pHeaderBuf, size_t bufSize, size_t* pLengthCourier); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionGetStatusCode(const nnhttpConnection* this_, s32* pStatusCodeCourier); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionGetSslError(const nnhttpConnection* this_, s32* pResultCodeBuf); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpConnectionSetVerifyOption(nnhttpConnection* this_, u32 verifyOption); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpSetRootCa(nnhttpConnection* this_, const u8 *pCertData, size_t certDataSize); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpSetInternalRootCa( nnhttpConnection* this_, NnHttpInternalCaCertId inCaCertName ); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpSetRootCaStore( nnhttpConnection* this_, nnhttpCertStore* pCertStore); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpSetClientCert(nnhttpConnection* this_, const u8* pCertData, size_t certDataSize, const u8* pPrivateKeyData, size_t privateKeyDataSize); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpSetInternalClientCert(nnhttpConnection* this_, NnHttpInternalClientCertId inClientCertName ); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpSetClientCertObj(nnhttpConnection* this_, nnhttpClientCert* pClientCert); /* Please see man pages for details */ NN_EXTERN_C nnResult nnhttpDisableVerifyOptionForDebug(nnhttpConnection* this_, u32 verifyOption); /* */ #endif /* NN_HTTP_HTTP_CONNECTION_H_ */