xref: /haiku/headers/private/netservices/UrlRequest.h (revision 87f4776937505e3014251c9c3434be78ae29d7d0)
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