libbnetapi: Disallow instantiation of BUrlRequest subclasses directly

This API change forces all creation of BUrlRequest to be done via
BUrlProtocolRoster::MakeRequest(). This allows the structure of protocol
addons to be altered without breaking ABI for client applications.

Change-Id: I1785c9136c50d19eaa9e57cb9d259ed8d88a5b56
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3080
Reviewed-by: waddlesplash <[email protected]>
This commit is contained in:
Leorize
2020-10-12 06:36:00 +00:00
committed by Adrien Destugues
parent 26ca2e3226
commit e67a4284c0
8 changed files with 121 additions and 71 deletions
+7 -3
View File
@@ -11,17 +11,21 @@
#define _B_DATA_REQUEST_H_
#include <UrlProtocolRoster.h>
#include <UrlRequest.h>
class BDataRequest: public BUrlRequest {
public:
const BUrlResult& Result() const;
private:
friend class BUrlProtocolRoster;
BDataRequest(const BUrl& url,
BUrlProtocolListener* listener = NULL,
BUrlContext* context = NULL);
const BUrlResult& Result() const;
private:
status_t _ProtocolLoop();
status_t _ProtocolLoop();
private:
BUrlResult fResult;
};
+8 -4
View File
@@ -10,19 +10,23 @@
#include <UrlRequest.h>
#include <UrlProtocolRoster.h>
class BFileRequest : public BUrlRequest {
public:
BFileRequest(const BUrl& url,
BUrlProtocolListener* listener = NULL,
BUrlContext* context = NULL);
virtual ~BFileRequest();
const BUrlResult& Result() const;
void SetDisableListener(bool disable);
void SetDisableListener(bool disable);
private:
friend class BUrlProtocolRoster;
BFileRequest(const BUrl& url,
BUrlProtocolListener* listener = NULL,
BUrlContext* context = NULL);
status_t _ProtocolLoop();
private:
BUrlResult fResult;
+7 -3
View File
@@ -9,13 +9,11 @@
#include <deque>
#include <NetworkRequest.h>
#include <UrlProtocolRoster.h>
class BGopherRequest : public BNetworkRequest {
public:
BGopherRequest(const BUrl& url,
BUrlProtocolListener* listener = NULL,
BUrlContext* context = NULL);
virtual ~BGopherRequest();
status_t Stop();
@@ -23,6 +21,12 @@ public:
void SetDisableListener(bool disable);
private:
friend class BUrlProtocolRoster;
BGopherRequest(const BUrl& url,
BUrlProtocolListener* listener = NULL,
BUrlContext* context = NULL);
status_t _ProtocolLoop();
void _SendRequest();
+10 -6
View File
@@ -14,6 +14,7 @@
#include <HttpResult.h>
#include <NetworkAddress.h>
#include <NetworkRequest.h>
#include <UrlProtocolRoster.h>
namespace BPrivate {
@@ -24,12 +25,6 @@ namespace BPrivate {
class BHttpRequest : public BNetworkRequest {
public:
BHttpRequest(const BUrl& url,
bool ssl = false,
const char* protocolName = "HTTP",
BUrlProtocolListener* listener = NULL,
BUrlContext* context = NULL);
BHttpRequest(const BHttpRequest& other);
virtual ~BHttpRequest();
void SetMethod(const char* const method);
@@ -64,6 +59,15 @@ public:
static int16 StatusCodeClass(int16 code);
private:
friend class BUrlProtocolRoster;
BHttpRequest(const BUrl& url,
bool ssl = false,
const char* protocolName = "HTTP",
BUrlProtocolListener* listener = NULL,
BUrlContext* context = NULL);
BHttpRequest(const BHttpRequest& other);
void _ResetOptions();
status_t _ProtocolLoop();
status_t _MakeRequest();