1 /* 2 * Copyright 2010-2014 Haiku Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef _B_URL_REQUEST_H_ 6 #define _B_URL_REQUEST_H_ 7 8 9 #include <Url.h> 10 #include <UrlContext.h> 11 #include <UrlProtocolListener.h> 12 #include <UrlResult.h> 13 #include <OS.h> 14 #include <Referenceable.h> 15 16 17 #ifndef LIBNETAPI_DEPRECATED 18 namespace BPrivate { 19 20 namespace Network { 21 #endif 22 23 class BUrlRequest { 24 public: 25 #ifdef LIBNETAPI_DEPRECATED 26 BUrlRequest(const BUrl& url, 27 BUrlProtocolListener* listener, 28 BUrlContext* context, 29 const char* threadName, 30 const char* protocolName); 31 #else 32 BUrlRequest(const BUrl& url, 33 BDataIO* output, 34 BUrlProtocolListener* listener, 35 BUrlContext* context, 36 const char* threadName, 37 const char* protocolName); 38 #endif 39 virtual ~BUrlRequest(); 40 41 // URL protocol thread management 42 virtual thread_id Run(); 43 virtual status_t Pause(); 44 virtual status_t Resume(); 45 virtual status_t Stop(); 46 virtual void SetTimeout(bigtime_t timeout) {} 47 48 // URL protocol parameters modification 49 status_t SetUrl(const BUrl& url); 50 status_t SetContext(BUrlContext* context); 51 status_t SetListener(BUrlProtocolListener* listener); 52 #ifndef LIBNETAPI_DEPRECATED 53 status_t SetOutput(BDataIO* output); 54 #endif 55 56 // URL protocol parameters access 57 const BUrl& Url() const; 58 BUrlContext* Context() const; 59 BUrlProtocolListener* Listener() const; 60 const BString& Protocol() const; 61 #ifndef LIBNETAPI_DEPRECATED 62 BDataIO* Output() const; 63 #endif 64 65 // URL protocol informations 66 bool IsRunning() const; 67 status_t Status() const; 68 virtual const BUrlResult& Result() const = 0; 69 70 71 protected: 72 static int32 _ThreadEntry(void* arg); 73 virtual void _ProtocolSetup() {}; 74 virtual status_t _ProtocolLoop() = 0; 75 virtual void _EmitDebug(BUrlProtocolDebugMessage type, 76 const char* format, ...); 77 protected: 78 BUrl fUrl; 79 BReference<BUrlContext> fContext; 80 BUrlProtocolListener* fListener; 81 #ifndef LIBNETAPI_DEPRECATED 82 BDataIO* fOutput; 83 #endif 84 85 bool fQuit; 86 bool fRunning; 87 status_t fThreadStatus; 88 thread_id fThreadId; 89 BString fThreadName; 90 BString fProtocol; 91 }; 92 93 #ifndef LIBNETAPI_DEPRECATED 94 } // namespace Network 95 96 } // namespace BPrivate 97 #endif 98 99 #endif // _B_URL_REQUEST_H_ 100