Refactor UrlRequest/UrlProtocol in the Service Kit
* 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).
This commit is contained in:
@@ -60,8 +60,7 @@ public:
|
||||
|
||||
// Change behavior
|
||||
status_t MarkAsFile(const BString& filename,
|
||||
const BString& mimeType);
|
||||
status_t MarkAsFile(const BString& filename);
|
||||
const BString& mimeType = "");
|
||||
void UnmarkAsFile();
|
||||
status_t CopyBuffer();
|
||||
|
||||
|
||||
@@ -14,22 +14,34 @@
|
||||
#include <HttpHeaders.h>
|
||||
#include <NetBuffer.h>
|
||||
#include <NetworkAddress.h>
|
||||
#include <UrlProtocol.h>
|
||||
#include <UrlRequest.h>
|
||||
|
||||
|
||||
class BAbstractSocket;
|
||||
|
||||
|
||||
class BUrlProtocolHttp : public BUrlProtocol {
|
||||
class BHttpRequest : public BUrlRequest {
|
||||
public:
|
||||
BUrlProtocolHttp(BUrl& url, bool ssl = false,
|
||||
BHttpRequest(const BUrl& url,
|
||||
BUrlResult& result, bool ssl = false,
|
||||
const char *protocolName = "HTTP",
|
||||
BUrlProtocolListener* listener = NULL,
|
||||
BUrlContext* context = NULL,
|
||||
BUrlResult* result = NULL);
|
||||
virtual ~BUrlProtocolHttp();
|
||||
BUrlContext* context = NULL);
|
||||
virtual ~BHttpRequest();
|
||||
|
||||
virtual status_t SetOption(uint32 option, void* value);
|
||||
void SetMethod(int8 method);
|
||||
void SetFollowLocation(bool follow);
|
||||
void SetMaxRedirections(int8 maxRedirections);
|
||||
void SetReferrer(const BString& referrer);
|
||||
void SetUserAgent(const BString& agent);
|
||||
void SetHeaders(BHttpHeaders* headers);
|
||||
void SetDiscardData(bool discard);
|
||||
void SetDisableListener(bool disable);
|
||||
void SetAutoReferrer(bool enable);
|
||||
void SetPostFields(BHttpForm* fields);
|
||||
void SetInputData(BDataIO* data, ssize_t size = -1);
|
||||
void SetUserName(const BString& name);
|
||||
void SetPassword(const BString& password);
|
||||
|
||||
static bool IsInformationalStatusCode(int16 code);
|
||||
static bool IsSuccessStatusCode(int16 code);
|
||||
@@ -89,6 +101,7 @@ private:
|
||||
BHttpHeaders* fOptHeaders;
|
||||
BHttpForm* fOptPostFields;
|
||||
BDataIO* fOptInputData;
|
||||
ssize_t fOptInputDataSize;
|
||||
bool fOptSetCookies : 1;
|
||||
bool fOptFollowLocation : 1;
|
||||
bool fOptDiscardData : 1;
|
||||
@@ -1,136 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010 Haiku Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef _B_URL_PROTOCOL_H_
|
||||
#define _B_URL_PROTOCOL_H_
|
||||
|
||||
|
||||
#include <Url.h>
|
||||
#include <UrlResult.h>
|
||||
#include <UrlContext.h>
|
||||
#include <UrlProtocolListener.h>
|
||||
#include <OS.h>
|
||||
|
||||
|
||||
class BUrlProtocol {
|
||||
public:
|
||||
BUrlProtocol(const BUrl& url,
|
||||
BUrlProtocolListener* listener,
|
||||
BUrlContext* context,
|
||||
BUrlResult* result,
|
||||
const char* threadName,
|
||||
const char* protocolName);
|
||||
virtual ~BUrlProtocol();
|
||||
|
||||
// URL protocol required members
|
||||
// TODO: (stippi) I know it's sometimes appealing to have these
|
||||
// "simplistic" methods that can do anything, but they remove
|
||||
// type-safety. Why not overload SetOption with all possible types?
|
||||
// Like:
|
||||
// SetOption(uint32 option, bool value);
|
||||
// SetOption(uint32 option, int8 value);
|
||||
// SetOption(uint32 option, int16 value);
|
||||
// SetOption(uint32 option, int32 value);
|
||||
// ...
|
||||
// This keeps the calling side even more simple, since it
|
||||
// don't need to do pointer stuff with the parameters. Also, since
|
||||
// this method is forced to be implemented in derived classes, why
|
||||
// is it here at all? Why not have non-virtual setters for specific
|
||||
// things, where the setter is properly named?
|
||||
virtual status_t SetOption(uint32 name, void* value) = 0;
|
||||
|
||||
// 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
|
||||
};
|
||||
|
||||
|
||||
namespace BPrivate {
|
||||
|
||||
class BUrlProtocolOption {
|
||||
public:
|
||||
BUrlProtocolOption(void* value) : fValuePtr(value) { }
|
||||
|
||||
bool Bool() const { return *reinterpret_cast<bool*>(fValuePtr); }
|
||||
int8 Int8() const { return *reinterpret_cast<int8*>(fValuePtr); }
|
||||
int16 Int16() const { return *reinterpret_cast<int16*>(fValuePtr); }
|
||||
int32 Int32() const { return *reinterpret_cast<int32*>(fValuePtr); }
|
||||
char* String() const { return reinterpret_cast<char*>(fValuePtr); }
|
||||
void* Pointer() const { return fValuePtr; }
|
||||
|
||||
private:
|
||||
void* fValuePtr;
|
||||
};
|
||||
|
||||
} // namespace BPrivate
|
||||
|
||||
|
||||
#endif // _B_URL_PROTOCOL_H_
|
||||
@@ -17,18 +17,18 @@ public:
|
||||
bool transparent = false);
|
||||
virtual ~BUrlProtocolAsynchronousListener();
|
||||
|
||||
virtual void ConnectionOpened(BUrlProtocol* caller);
|
||||
virtual void HostnameResolved(BUrlProtocol* caller,
|
||||
virtual void ConnectionOpened(BUrlRequest* caller);
|
||||
virtual void HostnameResolved(BUrlRequest* caller,
|
||||
const char* ip);
|
||||
virtual void ResponseStarted(BUrlProtocol* caller);
|
||||
virtual void HeadersReceived(BUrlProtocol* caller);
|
||||
virtual void DataReceived(BUrlProtocol* caller,
|
||||
virtual void ResponseStarted(BUrlRequest* caller);
|
||||
virtual void HeadersReceived(BUrlRequest* caller);
|
||||
virtual void DataReceived(BUrlRequest* caller,
|
||||
const char* data, ssize_t size);
|
||||
virtual void DownloadProgress(BUrlProtocol* caller,
|
||||
virtual void DownloadProgress(BUrlRequest* caller,
|
||||
ssize_t bytesReceived, ssize_t bytesTotal);
|
||||
virtual void UploadProgress(BUrlProtocol* caller,
|
||||
virtual void UploadProgress(BUrlRequest* caller,
|
||||
ssize_t bytesSent, ssize_t bytesTotal);
|
||||
virtual void RequestCompleted(BUrlProtocol* caller,
|
||||
virtual void RequestCompleted(BUrlRequest* caller,
|
||||
bool success);
|
||||
|
||||
// Synchronous listener access
|
||||
|
||||
@@ -38,26 +38,23 @@ public:
|
||||
const BMessenger& messenger);
|
||||
virtual ~BUrlProtocolDispatchingListener();
|
||||
|
||||
virtual void ConnectionOpened(BUrlProtocol* caller);
|
||||
virtual void HostnameResolved(BUrlProtocol* caller,
|
||||
virtual void ConnectionOpened(BUrlRequest* caller);
|
||||
virtual void HostnameResolved(BUrlRequest* caller,
|
||||
const char* ip);
|
||||
virtual void ResponseStarted(BUrlProtocol* caller);
|
||||
virtual void HeadersReceived(BUrlProtocol* caller);
|
||||
virtual void DataReceived(BUrlProtocol* caller,
|
||||
virtual void ResponseStarted(BUrlRequest* caller);
|
||||
virtual void HeadersReceived(BUrlRequest* caller);
|
||||
virtual void DataReceived(BUrlRequest* caller,
|
||||
const char* data, ssize_t size);
|
||||
virtual void DownloadProgress(BUrlProtocol* caller,
|
||||
virtual void DownloadProgress(BUrlRequest* caller,
|
||||
ssize_t bytesReceived, ssize_t bytesTotal);
|
||||
virtual void UploadProgress(BUrlProtocol* caller,
|
||||
virtual void UploadProgress(BUrlRequest* caller,
|
||||
ssize_t bytesSent, ssize_t bytesTotal);
|
||||
virtual void RequestCompleted(BUrlProtocol* caller,
|
||||
virtual void RequestCompleted(BUrlRequest* caller,
|
||||
bool success);
|
||||
virtual void DebugMessage(BUrlProtocol*,
|
||||
BUrlProtocolDebugMessage,
|
||||
const char*) { }
|
||||
|
||||
private:
|
||||
void _SendMessage(BMessage* message,
|
||||
int8 notification, BUrlProtocol* caller);
|
||||
int8 notification, BUrlRequest* caller);
|
||||
|
||||
private:
|
||||
BMessenger fMessenger;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#include <stddef.h>
|
||||
#include <cstdlib>
|
||||
|
||||
class BUrlProtocol;
|
||||
class BUrlRequest;
|
||||
|
||||
|
||||
enum BUrlProtocolDebugMessage {
|
||||
@@ -24,15 +24,15 @@ enum BUrlProtocolDebugMessage {
|
||||
|
||||
class BUrlProtocolListener {
|
||||
public:
|
||||
/*
|
||||
/**
|
||||
ConnectionOpened()
|
||||
Frequency: Once
|
||||
|
||||
Called when the socket is opened.
|
||||
*/
|
||||
virtual void ConnectionOpened(BUrlProtocol* caller);
|
||||
virtual void ConnectionOpened(BUrlRequest* caller);
|
||||
|
||||
/*
|
||||
/**
|
||||
HostnameResolved(ip)
|
||||
Frequency: Once
|
||||
Parameters: ip String representing the IP address of the resource
|
||||
@@ -40,28 +40,28 @@ public:
|
||||
|
||||
Called when the final IP is discovered
|
||||
*/
|
||||
virtual void HostnameResolved(BUrlProtocol* caller,
|
||||
virtual void HostnameResolved(BUrlRequest* caller,
|
||||
const char* ip);
|
||||
|
||||
/*
|
||||
/**
|
||||
ReponseStarted()
|
||||
Frequency: Once
|
||||
|
||||
Called when the request has been emitted and the server begins to
|
||||
reply. Typically when the HTTP status code is received.
|
||||
*/
|
||||
virtual void ResponseStarted(BUrlProtocol* caller);
|
||||
virtual void ResponseStarted(BUrlRequest* caller);
|
||||
|
||||
/*
|
||||
/**
|
||||
HeadersReceived()
|
||||
Frequency: Once
|
||||
|
||||
Called when all the server response metadata (such as headers) have
|
||||
been read and parsed.
|
||||
*/
|
||||
virtual void HeadersReceived(BUrlProtocol* caller);
|
||||
virtual void HeadersReceived(BUrlRequest* caller);
|
||||
|
||||
/*
|
||||
/**
|
||||
DataReceived(data, size)
|
||||
Frequency: Zero or more
|
||||
Parameters: data Pointer to the data block in memory
|
||||
@@ -69,10 +69,10 @@ public:
|
||||
|
||||
Called each time a full block of data is received.
|
||||
*/
|
||||
virtual void DataReceived(BUrlProtocol* caller,
|
||||
virtual void DataReceived(BUrlRequest* caller,
|
||||
const char* data, ssize_t size);
|
||||
|
||||
/*
|
||||
/**
|
||||
DownloadProgress(bytesReceived, bytesTotal)
|
||||
Frequency: Once or more
|
||||
Parameters: bytesReceived Number of data bytes received
|
||||
@@ -80,10 +80,10 @@ public:
|
||||
|
||||
Called each time a data block is received.
|
||||
*/
|
||||
virtual void DownloadProgress(BUrlProtocol* caller,
|
||||
virtual void DownloadProgress(BUrlRequest* caller,
|
||||
ssize_t bytesReceived, ssize_t bytesTotal);
|
||||
|
||||
/*
|
||||
/**
|
||||
UploadProgress(bytesSent, bytesTotal)
|
||||
Frequency: Once or more
|
||||
Parameters: bytesSent Number of data bytes sent
|
||||
@@ -91,10 +91,10 @@ public:
|
||||
|
||||
Called each time a data block is emitted.
|
||||
*/
|
||||
virtual void UploadProgress(BUrlProtocol* caller,
|
||||
virtual void UploadProgress(BUrlRequest* caller,
|
||||
ssize_t bytesSent, ssize_t bytesTotal);
|
||||
|
||||
/*
|
||||
/**
|
||||
RequestCompleted(success)
|
||||
Frequency: Once
|
||||
Parameters: success true if the resource have been successfully
|
||||
@@ -102,17 +102,17 @@ public:
|
||||
|
||||
Called once the request is complete.
|
||||
*/
|
||||
virtual void RequestCompleted(BUrlProtocol* caller,
|
||||
virtual void RequestCompleted(BUrlRequest* caller,
|
||||
bool success);
|
||||
|
||||
/*
|
||||
/**
|
||||
DebugMessage(type, text)
|
||||
Frequency: zero or more
|
||||
Parameters: type Type of the verbose message (see BUrlProtocolDebug)
|
||||
|
||||
Called each time a debug message is emitted
|
||||
*/
|
||||
virtual void DebugMessage(BUrlProtocol* caller,
|
||||
virtual void DebugMessage(BUrlRequest* caller,
|
||||
BUrlProtocolDebugMessage type,
|
||||
const char* text);
|
||||
};
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright 2013 Haiku Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
|
||||
#ifndef _B_URL_ROSTER_H_
|
||||
#define _B_URL_ROSTER_H_
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
|
||||
class BUrl;
|
||||
class BUrlContext;
|
||||
class BUrlProtocolListener;
|
||||
class BUrlRequest;
|
||||
|
||||
class BUrlProtocolRoster {
|
||||
public:
|
||||
static BUrlRequest* MakeRequest(const BUrl& url,
|
||||
BUrlProtocolListener* listener = NULL,
|
||||
BUrlContext* context = NULL);
|
||||
};
|
||||
|
||||
#endif
|
||||
+67
-38
@@ -6,64 +6,93 @@
|
||||
#define _B_URL_REQUEST_H_
|
||||
|
||||
|
||||
#include <HttpHeaders.h>
|
||||
#include <Url.h>
|
||||
#include <UrlResult.h>
|
||||
#include <UrlContext.h>
|
||||
#include <UrlProtocol.h>
|
||||
#include <UrlProtocolListener.h>
|
||||
|
||||
|
||||
enum {
|
||||
B_NO_HANDLER_FOR_PROTOCOL = B_ERROR
|
||||
};
|
||||
#include <OS.h>
|
||||
|
||||
|
||||
class BUrlRequest {
|
||||
public:
|
||||
BUrlRequest(const BUrl& url,
|
||||
BUrlProtocolListener* listener = NULL,
|
||||
BUrlContext* context = NULL);
|
||||
BUrlRequest(const BUrlRequest& other);
|
||||
BUrlProtocolListener* listener,
|
||||
BUrlContext* context,
|
||||
BUrlResult& result,
|
||||
const char* threadName,
|
||||
const char* protocolName);
|
||||
virtual ~BUrlRequest();
|
||||
|
||||
// Request parameters modification
|
||||
status_t SetUrl(const BUrl& url);
|
||||
void SetContext(BUrlContext* context);
|
||||
void SetProtocolListener(
|
||||
BUrlProtocolListener* listener);
|
||||
bool SetProtocolOption(int32 option,
|
||||
void* value);
|
||||
// Request parameters access
|
||||
const BUrlProtocol* Protocol();
|
||||
const BUrlResult& Result();
|
||||
const BUrl& Url();
|
||||
|
||||
// Request control
|
||||
virtual status_t Start();
|
||||
// URL protocol thread management
|
||||
virtual thread_id Run();
|
||||
virtual status_t Pause();
|
||||
virtual status_t Resume();
|
||||
virtual status_t Abort();
|
||||
virtual status_t Stop();
|
||||
|
||||
// Request informations
|
||||
virtual status_t InitCheck() const;
|
||||
// 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;
|
||||
|
||||
// Overloaded members
|
||||
BUrlRequest& operator=(const BUrlRequest& other);
|
||||
virtual const char* StatusString(status_t threadStatus)
|
||||
const;
|
||||
|
||||
|
||||
protected:
|
||||
BUrlProtocolListener* fListener;
|
||||
BUrlProtocol* fUrlProtocol;
|
||||
BUrlResult fResult;
|
||||
BUrlContext* fContext;
|
||||
BUrl fUrl;
|
||||
status_t fInitStatus;
|
||||
static int32 _ThreadEntry(void* arg);
|
||||
virtual status_t _ProtocolLoop();
|
||||
virtual void _EmitDebug(BUrlProtocolDebugMessage type,
|
||||
const char* format, ...);
|
||||
|
||||
private:
|
||||
status_t _SetupProtocol();
|
||||
// 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_
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
#include <Url.h>
|
||||
|
||||
|
||||
class BUrlProtocol;
|
||||
class BUrlRequest;
|
||||
|
||||
|
||||
class BUrlResult {
|
||||
friend class BUrlProtocol;
|
||||
friend class BUrlRequest;
|
||||
|
||||
public:
|
||||
BUrlResult(const BUrl& url);
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
class BUrlSynchronousRequest : public BUrlRequest, public BUrlProtocolListener {
|
||||
public:
|
||||
BUrlSynchronousRequest(BUrl& url);
|
||||
BUrlSynchronousRequest(BUrlRequest& asynchronousRequest);
|
||||
virtual ~BUrlSynchronousRequest() { };
|
||||
|
||||
// Synchronous wait
|
||||
@@ -20,23 +20,24 @@ public:
|
||||
virtual status_t WaitUntilCompletion();
|
||||
|
||||
// Protocol hooks
|
||||
virtual void ConnectionOpened(BUrlProtocol* caller);
|
||||
virtual void HostnameResolved(BUrlProtocol* caller,
|
||||
virtual void ConnectionOpened(BUrlRequest* caller);
|
||||
virtual void HostnameResolved(BUrlRequest* caller,
|
||||
const char* ip);
|
||||
virtual void ResponseStarted(BUrlProtocol* caller);
|
||||
virtual void HeadersReceived(BUrlProtocol* caller);
|
||||
virtual void DataReceived(BUrlProtocol* caller,
|
||||
virtual void ResponseStarted(BUrlRequest* caller);
|
||||
virtual void HeadersReceived(BUrlRequest* caller);
|
||||
virtual void DataReceived(BUrlRequest* caller,
|
||||
const char* data, ssize_t size);
|
||||
virtual void DownloadProgress(BUrlProtocol* caller,
|
||||
virtual void DownloadProgress(BUrlRequest* caller,
|
||||
ssize_t bytesReceived, ssize_t bytesTotal);
|
||||
virtual void UploadProgress(BUrlProtocol* caller,
|
||||
virtual void UploadProgress(BUrlRequest* caller,
|
||||
ssize_t bytesSent, ssize_t bytesTotal);
|
||||
virtual void RequestCompleted(BUrlProtocol* caller,
|
||||
virtual void RequestCompleted(BUrlRequest* caller,
|
||||
bool success);
|
||||
|
||||
|
||||
protected:
|
||||
bool fRequestComplete;
|
||||
BUrlRequest& fWrappedRequest;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user