afd547b368
* Remove the BUrlRequest class, which was only delegating work to BUrlProtocol and subclasses * Rename BUrlProtocol to BUrlRequest, and BUrlRequestHttp to BHttpRequest * Creating a request is now done through the BUrlProtocolRoster. For now there is just a static MakeRequest method, this will be completed when we get to actually allowing add-ons to provide different request handlers. This allows cleanup of the API for requests: * Remove the universal SetOption method with constants, and have dedicated setters for each protocol option. * Setters can now have multiple parameters, for example you can give BHTTPRequest a BDataIO and a known size * In this case, the BHttpRequest will not use HTTP chunked transfers, which were always used before and made most servers unhappy (tested and failed with lighttpd, google accounts and github).
99 lines
2.4 KiB
C++
99 lines
2.4 KiB
C++
/*
|
|
* Copyright 2010 Haiku Inc. All rights reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef _B_URL_REQUEST_H_
|
|
#define _B_URL_REQUEST_H_
|
|
|
|
|
|
#include <Url.h>
|
|
#include <UrlResult.h>
|
|
#include <UrlContext.h>
|
|
#include <UrlProtocolListener.h>
|
|
#include <OS.h>
|
|
|
|
|
|
class BUrlRequest {
|
|
public:
|
|
BUrlRequest(const BUrl& url,
|
|
BUrlProtocolListener* listener,
|
|
BUrlContext* context,
|
|
BUrlResult& result,
|
|
const char* threadName,
|
|
const char* protocolName);
|
|
virtual ~BUrlRequest();
|
|
|
|
// URL protocol thread management
|
|
virtual thread_id Run();
|
|
virtual status_t Pause();
|
|
virtual status_t Resume();
|
|
virtual status_t Stop();
|
|
|
|
// URL protocol parameters modification
|
|
status_t SetUrl(const BUrl& url);
|
|
status_t SetResult(BUrlResult& result);
|
|
status_t SetContext(BUrlContext* context);
|
|
status_t SetListener(BUrlProtocolListener* listener);
|
|
|
|
// URL protocol parameters access
|
|
const BUrl& Url() const;
|
|
BUrlResult& Result() const;
|
|
BUrlContext* Context() const;
|
|
BUrlProtocolListener* Listener() const;
|
|
const BString& Protocol() const;
|
|
|
|
// URL protocol informations
|
|
bool IsRunning() const;
|
|
status_t Status() const;
|
|
virtual const char* StatusString(status_t threadStatus)
|
|
const;
|
|
|
|
|
|
protected:
|
|
static int32 _ThreadEntry(void* arg);
|
|
virtual status_t _ProtocolLoop();
|
|
virtual void _EmitDebug(BUrlProtocolDebugMessage type,
|
|
const char* format, ...);
|
|
|
|
// URL result parameters access
|
|
BMallocIO& _ResultRawData();
|
|
BHttpHeaders& _ResultHeaders();
|
|
void _SetResultStatusCode(int32 statusCode);
|
|
BString& _ResultStatusText();
|
|
|
|
protected:
|
|
BUrl fUrl;
|
|
BUrlResult& fResult;
|
|
BUrlContext* fContext;
|
|
BUrlProtocolListener* fListener;
|
|
|
|
bool fQuit;
|
|
bool fRunning;
|
|
status_t fThreadStatus;
|
|
thread_id fThreadId;
|
|
BString fThreadName;
|
|
BString fProtocol;
|
|
};
|
|
|
|
|
|
// TODO: Rename, this is in the global namespace.
|
|
enum {
|
|
B_PROT_THREAD_STATUS__BASE = 0,
|
|
B_PROT_SUCCESS = B_PROT_THREAD_STATUS__BASE,
|
|
B_PROT_RUNNING,
|
|
B_PROT_PAUSED,
|
|
B_PROT_ABORTED,
|
|
B_PROT_SOCKET_ERROR,
|
|
B_PROT_CONNECTION_FAILED,
|
|
B_PROT_CANT_RESOLVE_HOSTNAME,
|
|
B_PROT_WRITE_FAILED,
|
|
B_PROT_READ_FAILED,
|
|
B_PROT_NO_MEMORY,
|
|
B_PROT_PROTOCOL_ERROR,
|
|
// Thread status over this one are guaranteed to be
|
|
// errors
|
|
B_PROT_THREAD_STATUS__END
|
|
};
|
|
|
|
#endif // _B_URL_REQUEST_H_
|