1ec7d71e6SNiels Sascha Reedijk /* 2ec7d71e6SNiels Sascha Reedijk * Copyright 2021 Haiku Inc. All rights reserved. 3ec7d71e6SNiels Sascha Reedijk * Distributed under the terms of the MIT License. 4ec7d71e6SNiels Sascha Reedijk */ 5ec7d71e6SNiels Sascha Reedijk 6ec7d71e6SNiels Sascha Reedijk #ifndef _NETSERVICES_DEFS_H_ 7ec7d71e6SNiels Sascha Reedijk #define _NETSERVICES_DEFS_H_ 8ec7d71e6SNiels Sascha Reedijk 9ec7d71e6SNiels Sascha Reedijk 10ec7d71e6SNiels Sascha Reedijk #include <ErrorsExt.h> 11ec7d71e6SNiels Sascha Reedijk #include <StringList.h> 12ec7d71e6SNiels Sascha Reedijk #include <Url.h> 13ec7d71e6SNiels Sascha Reedijk 14ec7d71e6SNiels Sascha Reedijk 15ec7d71e6SNiels Sascha Reedijk namespace BPrivate { 16ec7d71e6SNiels Sascha Reedijk 17ec7d71e6SNiels Sascha Reedijk namespace Network { 18ec7d71e6SNiels Sascha Reedijk 19ec7d71e6SNiels Sascha Reedijk 20ec7d71e6SNiels Sascha Reedijk // Standard exceptions 21ec7d71e6SNiels Sascha Reedijk class BUnsupportedProtocol : public BError { 22ec7d71e6SNiels Sascha Reedijk public: 23ec7d71e6SNiels Sascha Reedijk BUnsupportedProtocol(const char* origin, BUrl url, 24ec7d71e6SNiels Sascha Reedijk BStringList supportedProtocols); 25ec7d71e6SNiels Sascha Reedijk BUnsupportedProtocol(BString origin, BUrl url, 26ec7d71e6SNiels Sascha Reedijk BStringList supportedProtocols); 27ec7d71e6SNiels Sascha Reedijk 28ec7d71e6SNiels Sascha Reedijk virtual const char* Message() const noexcept override; 29ec7d71e6SNiels Sascha Reedijk 30ec7d71e6SNiels Sascha Reedijk const BUrl& Url() const; 31ec7d71e6SNiels Sascha Reedijk const BStringList& SupportedProtocols() const; 32ec7d71e6SNiels Sascha Reedijk 33ec7d71e6SNiels Sascha Reedijk private: 34ec7d71e6SNiels Sascha Reedijk BUrl fUrl; 35ec7d71e6SNiels Sascha Reedijk BStringList fSupportedProtocols; 36ec7d71e6SNiels Sascha Reedijk }; 37ec7d71e6SNiels Sascha Reedijk 38ec7d71e6SNiels Sascha Reedijk 39ec7d71e6SNiels Sascha Reedijk class BInvalidUrl : public BError { 40ec7d71e6SNiels Sascha Reedijk public: 41ec7d71e6SNiels Sascha Reedijk BInvalidUrl(const char* origin, BUrl url); 42ec7d71e6SNiels Sascha Reedijk BInvalidUrl(BString origin, BUrl url); 43ec7d71e6SNiels Sascha Reedijk 44ec7d71e6SNiels Sascha Reedijk virtual const char* Message() const noexcept override; 45ec7d71e6SNiels Sascha Reedijk 46ec7d71e6SNiels Sascha Reedijk const BUrl& Url() const; 47ec7d71e6SNiels Sascha Reedijk 48ec7d71e6SNiels Sascha Reedijk private: 49ec7d71e6SNiels Sascha Reedijk BUrl fUrl; 50ec7d71e6SNiels Sascha Reedijk }; 51ec7d71e6SNiels Sascha Reedijk 52ec7d71e6SNiels Sascha Reedijk 533b2aa6c3SNiels Sascha Reedijk class BNetworkRequestError : public BError { 543b2aa6c3SNiels Sascha Reedijk public: 553b2aa6c3SNiels Sascha Reedijk enum ErrorType { 563b2aa6c3SNiels Sascha Reedijk HostnameError, 573b2aa6c3SNiels Sascha Reedijk NetworkError, 583b2aa6c3SNiels Sascha Reedijk ProtocolError, 593b2aa6c3SNiels Sascha Reedijk SystemError, 603b2aa6c3SNiels Sascha Reedijk Canceled 613b2aa6c3SNiels Sascha Reedijk }; 623b2aa6c3SNiels Sascha Reedijk 633b2aa6c3SNiels Sascha Reedijk BNetworkRequestError(const char* origin, ErrorType type, 643b2aa6c3SNiels Sascha Reedijk status_t errorCode = B_OK); 653b2aa6c3SNiels Sascha Reedijk 663b2aa6c3SNiels Sascha Reedijk virtual const char* Message() const noexcept override; 673b2aa6c3SNiels Sascha Reedijk virtual BString DebugMessage() const override; 683b2aa6c3SNiels Sascha Reedijk 693b2aa6c3SNiels Sascha Reedijk ErrorType Type() const noexcept; 703b2aa6c3SNiels Sascha Reedijk status_t ErrorCode() const noexcept; 713b2aa6c3SNiels Sascha Reedijk 723b2aa6c3SNiels Sascha Reedijk private: 733b2aa6c3SNiels Sascha Reedijk ErrorType fErrorType; 743b2aa6c3SNiels Sascha Reedijk status_t fErrorCode = B_OK; 753b2aa6c3SNiels Sascha Reedijk }; 763b2aa6c3SNiels Sascha Reedijk 773b2aa6c3SNiels Sascha Reedijk 78f9d9d202SNiels Sascha Reedijk BString encode_to_base64(const BString& string); 79f9d9d202SNiels Sascha Reedijk 80f9d9d202SNiels Sascha Reedijk 81*60355daeSNiels Sascha Reedijk namespace UrlEvent { 82*60355daeSNiels Sascha Reedijk enum { 83*60355daeSNiels Sascha Reedijk HostNameResolved = '_NHR', 84*60355daeSNiels Sascha Reedijk ConnectionOpened = '_NCO', 85*60355daeSNiels Sascha Reedijk UploadProgress = '_NUP', 86*60355daeSNiels Sascha Reedijk ResponseStarted = '_NRS', 87*60355daeSNiels Sascha Reedijk DownloadProgress = '_NDP', 88*60355daeSNiels Sascha Reedijk BytesWritten = '_NBW', 89*60355daeSNiels Sascha Reedijk RequestCompleted = '_NRC', 90*60355daeSNiels Sascha Reedijk DebugMessage = '_NDB' 91*60355daeSNiels Sascha Reedijk }; 92*60355daeSNiels Sascha Reedijk } 93*60355daeSNiels Sascha Reedijk 94*60355daeSNiels Sascha Reedijk 95*60355daeSNiels Sascha Reedijk namespace UrlEventData { 96*60355daeSNiels Sascha Reedijk extern const char* Id; 97*60355daeSNiels Sascha Reedijk extern const char* HostName; 98*60355daeSNiels Sascha Reedijk extern const char* NumBytes; 99*60355daeSNiels Sascha Reedijk extern const char* TotalBytes; 100*60355daeSNiels Sascha Reedijk extern const char* Success; 101*60355daeSNiels Sascha Reedijk extern const char* DebugType; 102*60355daeSNiels Sascha Reedijk extern const char* DebugMessage; 103*60355daeSNiels Sascha Reedijk } 104*60355daeSNiels Sascha Reedijk 105ec7d71e6SNiels Sascha Reedijk } 106ec7d71e6SNiels Sascha Reedijk 107ec7d71e6SNiels Sascha Reedijk } 108ec7d71e6SNiels Sascha Reedijk 109ec7d71e6SNiels Sascha Reedijk #endif 110