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 17namespace BPrivate { 18 19namespace Network { 20 21 22class BUrlRequest { 23public: 24 25 BUrlRequest(const BUrl& url, 26 BDataIO* output, 27 BUrlProtocolListener* listener, 28 BUrlContext* context, 29 const char* threadName, 30 const char* protocolName); 31 virtual ~BUrlRequest(); 32 33 // URL protocol thread management 34 virtual thread_id Run(); 35 36 virtual status_t Stop(); 37 virtual void SetTimeout(bigtime_t timeout) {} 38 39 // URL protocol parameters modification 40 status_t SetUrl(const BUrl& url); 41 status_t SetContext(BUrlContext* context); 42 status_t SetListener(BUrlProtocolListener* listener); 43 status_t SetOutput(BDataIO* output); 44 45 // URL protocol parameters access 46 const BUrl& Url() const; 47 BUrlContext* Context() const; 48 BUrlProtocolListener* Listener() const; 49 const BString& Protocol() const; 50 BDataIO* Output() const; 51 52 // URL protocol informations 53 bool IsRunning() const; 54 status_t Status() const; 55 virtual const BUrlResult& Result() const = 0; 56 57 58protected: 59 static int32 _ThreadEntry(void* arg); 60 virtual void _ProtocolSetup() {}; 61 virtual status_t _ProtocolLoop() = 0; 62 virtual void _EmitDebug(BUrlProtocolDebugMessage type, 63 const char* format, ...); 64protected: 65 BUrl fUrl; 66 BReference<BUrlContext> fContext; 67 BUrlProtocolListener* fListener; 68 BDataIO* fOutput; 69 70 bool fQuit; 71 bool fRunning; 72 status_t fThreadStatus; 73 thread_id fThreadId; 74 BString fThreadName; 75 BString fProtocol; 76}; 77 78 79} // namespace Network 80 81} // namespace BPrivate 82 83#endif // _B_URL_REQUEST_H_ 84