1/*
2 * Copyright 2010 Haiku Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _B_URL_SYNCHRONOUS_REQUEST_H_
6#define _B_URL_SYNCHRONOUS_REQUEST_H_
7
8
9#include <UrlRequest.h>
10#include <UrlProtocolListener.h>
11
12
13class BUrlSynchronousRequest : public BUrlRequest, public BUrlProtocolListener {
14public:
15								BUrlSynchronousRequest(BUrl& url);
16	virtual						~BUrlSynchronousRequest() { };
17
18	// Synchronous wait
19	virtual	status_t			Perform();
20	virtual	status_t			WaitUntilCompletion();
21
22	// Protocol hooks
23	virtual	void				ConnectionOpened(BUrlProtocol* caller);
24	virtual void				HostnameResolved(BUrlProtocol* caller,
25									const char* ip);
26	virtual void				ResponseStarted(BUrlProtocol* caller);
27	virtual void				HeadersReceived(BUrlProtocol* caller);
28	virtual void				DataReceived(BUrlProtocol* caller,
29									const char* data, ssize_t size);
30	virtual	void				DownloadProgress(BUrlProtocol* caller,
31									ssize_t bytesReceived, ssize_t bytesTotal);
32	virtual void				UploadProgress(BUrlProtocol* caller,
33									ssize_t bytesSent, ssize_t bytesTotal);
34	virtual void				RequestCompleted(BUrlProtocol* caller,
35									bool success);
36
37
38protected:
39			bool				fRequestComplete;
40};
41
42
43#endif // _B_URL_SYNCHRONOUS_REQUEST_H_
44