diff --git a/docs/user/netservices/UrlProtocolListener.dox b/docs/user/netservices/UrlProtocolListener.dox index abd48048a4..25c4c1e002 100644 --- a/docs/user/netservices/UrlProtocolListener.dox +++ b/docs/user/netservices/UrlProtocolListener.dox @@ -103,15 +103,13 @@ */ /*! - \fn virtual void BUrlProtocolListener::HeadersReceived(BUrlRequest* caller, - const BUrlResult& result); + \fn virtual void BUrlProtocolListener::HeadersReceived(BUrlRequest* caller) \brief Called when all of the server response metadata (such as headers) have been read and parsed. \b Frequency: Once \param caller The BUrlRequest that invoked this callback. - \param result The BUrlResult associated with the request. */ /*! diff --git a/headers/private/netservices/HttpResult.h b/headers/private/netservices/HttpResult.h index cc79362018..9396c500b9 100644 --- a/headers/private/netservices/HttpResult.h +++ b/headers/private/netservices/HttpResult.h @@ -25,10 +25,12 @@ class BUrlRequest; class BHttpResult: public BUrlResult { friend class BHttpRequest; - + public: BHttpResult(const BUrl& url); +#ifdef LIBNETAPI_DEPRECATED BHttpResult(BMessage*); +#endif BHttpResult(const BHttpResult& other); ~BHttpResult(); @@ -38,7 +40,11 @@ public: // Result parameters access const BUrl& Url() const; BString ContentType() const; +#ifdef LIBNETAPI_DEPRECATED size_t Length() const; +#else + off_t Length() const; +#endif // HTTP-Specific stuff const BHttpHeaders& Headers() const; @@ -51,11 +57,13 @@ public: // Overloaded members BHttpResult& operator=(const BHttpResult& other); +#ifdef LIBNETAPI_DEPRECATED virtual status_t Archive(BMessage*, bool) const; static BArchivable* Instantiate(BMessage*); +#endif private: BUrl fUrl; - + BHttpHeaders fHeaders; int32 fStatusCode; BString fStatusString; diff --git a/headers/private/netservices/UrlProtocolDispatchingListener.h b/headers/private/netservices/UrlProtocolDispatchingListener.h index 768e6a6473..6f32343434 100644 --- a/headers/private/netservices/UrlProtocolDispatchingListener.h +++ b/headers/private/netservices/UrlProtocolDispatchingListener.h @@ -49,8 +49,12 @@ public: virtual void HostnameResolved(BUrlRequest* caller, const char* ip); virtual void ResponseStarted(BUrlRequest* caller); +#ifdef LIBNETAPI_DEPRECATED virtual void HeadersReceived(BUrlRequest* caller, const BUrlResult& result); +#else + virtual void HeadersReceived(BUrlRequest* caller); +#endif virtual void DataReceived(BUrlRequest* caller, const char* data, off_t position, ssize_t size); diff --git a/headers/private/netservices/UrlProtocolListener.h b/headers/private/netservices/UrlProtocolListener.h index 1870490ea7..68a5892e15 100644 --- a/headers/private/netservices/UrlProtocolListener.h +++ b/headers/private/netservices/UrlProtocolListener.h @@ -39,8 +39,12 @@ public: virtual void HostnameResolved(BUrlRequest* caller, const char* ip); virtual void ResponseStarted(BUrlRequest* caller); +#ifdef LIBNETAPI_DEPRECATED virtual void HeadersReceived(BUrlRequest* caller, const BUrlResult& result); +#else + virtual void HeadersReceived(BUrlRequest* caller); +#endif virtual void DataReceived(BUrlRequest* caller, const char* data, off_t position, ssize_t size); diff --git a/headers/private/netservices/UrlResult.h b/headers/private/netservices/UrlResult.h index 594b277256..386a1ef7b9 100644 --- a/headers/private/netservices/UrlResult.h +++ b/headers/private/netservices/UrlResult.h @@ -6,15 +6,12 @@ #define _B_URL_RESULT_H_ -#include #include -#ifndef LIBNETAPI_DEPRECATED -namespace BPrivate { +#ifdef LIBNETAPI_DEPRECATED +#include -namespace Network { -#endif class BUrlResult: public BArchivable { public: @@ -37,10 +34,32 @@ private: size_t fLength; }; -#ifndef LIBNETAPI_DEPRECATED -} // namespace Network +#else -} // namespace BPrivate -#endif +namespace BPrivate { -#endif +namespace Network { + +class BUrlResult { +public: + BUrlResult(); + virtual ~BUrlResult(); + + void SetContentType(BString contentType); + void SetLength(off_t length); + + virtual BString ContentType() const; + virtual off_t Length() const; + +private: + BString fContentType; + off_t fLength; +}; + +} + +} + +#endif // LIBNETAPI_DEPRECATED + +#endif // _B_URL_RESULT_H_ diff --git a/headers/private/netservices/UrlSynchronousRequest.h b/headers/private/netservices/UrlSynchronousRequest.h index 1a56b11d0c..b9f937af1c 100644 --- a/headers/private/netservices/UrlSynchronousRequest.h +++ b/headers/private/netservices/UrlSynchronousRequest.h @@ -30,8 +30,12 @@ public: virtual void HostnameResolved(BUrlRequest* caller, const char* ip); virtual void ResponseStarted(BUrlRequest* caller); +#ifdef LIBNETAPI_DEPRECATED virtual void HeadersReceived(BUrlRequest* caller, const BUrlResult& result); +#else + virtual void HeadersReceived(BUrlRequest* caller); +#endif virtual void DataReceived(BUrlRequest* caller, const char* data, off_t position, ssize_t size); diff --git a/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.cpp b/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.cpp index fd42b94013..aa352ead5b 100644 --- a/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.cpp +++ b/src/add-ons/media/plugins/http_streamer/HTTPMediaIO.cpp @@ -49,7 +49,7 @@ public: fRunning = true; } - void HeadersReceived(BUrlRequest* request, const BUrlResult& result) + void HeadersReceived(BUrlRequest* request) { fAdapterIO->UpdateSize(); } diff --git a/src/apps/haikudepot/server/WebAppInterface.cpp b/src/apps/haikudepot/server/WebAppInterface.cpp index 8622a57437..1001449a41 100644 --- a/src/apps/haikudepot/server/WebAppInterface.cpp +++ b/src/apps/haikudepot/server/WebAppInterface.cpp @@ -58,7 +58,7 @@ public: { } - virtual void HeadersReceived(BUrlRequest* caller, const BUrlResult& result) + virtual void HeadersReceived(BUrlRequest* caller) { } diff --git a/src/apps/haikudepot/util/ToFileUrlProtocolListener.cpp b/src/apps/haikudepot/util/ToFileUrlProtocolListener.cpp index f85e19150c..1ed7b8a943 100644 --- a/src/apps/haikudepot/util/ToFileUrlProtocolListener.cpp +++ b/src/apps/haikudepot/util/ToFileUrlProtocolListener.cpp @@ -51,14 +51,14 @@ ToFileUrlProtocolListener::ResponseStarted(BUrlRequest* caller) void -ToFileUrlProtocolListener::HeadersReceived(BUrlRequest* caller, - const BUrlResult& result) +ToFileUrlProtocolListener::HeadersReceived(BUrlRequest* caller) { // check that the status code is success. Only if it is successful // should the payload be streamed to the file. - const BHttpResult& httpResult = dynamic_cast(result); + const BHttpResult& httpResult = dynamic_cast( + caller->Result()); int32 statusCode = httpResult.StatusCode(); if (!BHttpRequest::IsSuccessStatusCode(statusCode)) { diff --git a/src/apps/haikudepot/util/ToFileUrlProtocolListener.h b/src/apps/haikudepot/util/ToFileUrlProtocolListener.h index 3cc7d37742..fd94f59566 100644 --- a/src/apps/haikudepot/util/ToFileUrlProtocolListener.h +++ b/src/apps/haikudepot/util/ToFileUrlProtocolListener.h @@ -25,8 +25,7 @@ public: void HostnameResolved(BUrlRequest* caller, const char* ip); void ResponseStarted(BUrlRequest* caller); - void HeadersReceived(BUrlRequest* caller, - const BUrlResult& result); + void HeadersReceived(BUrlRequest* caller); void DataReceived(BUrlRequest* caller, const char* data, off_t position, ssize_t size); diff --git a/src/kits/network/libnetapi_deprecated/UrlResult_Deprecated.cpp b/src/kits/network/libnetapi_deprecated/UrlResult_Deprecated.cpp new file mode 100644 index 0000000000..454c71e397 --- /dev/null +++ b/src/kits/network/libnetapi_deprecated/UrlResult_Deprecated.cpp @@ -0,0 +1,85 @@ +/* + * Copyright 2013-2017 Haiku Inc. All rights reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * Adrien Destugues, pulkomandy@pulkomandy.tk + */ + + +#include + + +BUrlResult::BUrlResult() + : + BArchivable(), + fContentType(), + fLength(0) +{ +} + + +BUrlResult::BUrlResult(BMessage* archive) + : + BArchivable(archive) +{ + fContentType = archive->FindString("ContentType"); + fLength = archive->FindInt32("Length"); +} + + +BUrlResult::~BUrlResult() +{ +} + + +status_t +BUrlResult::Archive(BMessage* archive, bool deep) const +{ + status_t result = BArchivable::Archive(archive, deep); + + if (result != B_OK) + return result; + + archive->AddString("ContentType", fContentType); + archive->AddInt32("Length", fLength); + + return B_OK; +} + + +void +BUrlResult::SetContentType(BString contentType) +{ + fContentType = contentType; +} + + +void +BUrlResult::SetLength(size_t length) +{ + fLength = length; +} + + +BString +BUrlResult::ContentType() const +{ + return fContentType; +} + + +size_t +BUrlResult::Length() const +{ + return fLength; +} + + +/*static*/ BArchivable* +BUrlResult::Instantiate(BMessage* archive) +{ + if (!validate_instantiation(archive, "BUrlResult")) + return NULL; + return new BUrlResult(archive); +} diff --git a/src/kits/network/libnetservices/DataRequest.cpp b/src/kits/network/libnetservices/DataRequest.cpp index 79583d7283..bbac28f887 100644 --- a/src/kits/network/libnetservices/DataRequest.cpp +++ b/src/kits/network/libnetservices/DataRequest.cpp @@ -123,7 +123,11 @@ BDataRequest::_ProtocolLoop() fResult.SetLength(length); if (fListener != NULL) { +#ifdef LIBNETAPI_DEPRECATED fListener->HeadersReceived(this, fResult); +#else + fListener->HeadersReceived(this); +#endif if (length > 0) { fListener->DataReceived(this, payload, 0, length); fListener->DownloadProgress(this, length, length); diff --git a/src/kits/network/libnetservices/FileRequest.cpp b/src/kits/network/libnetservices/FileRequest.cpp index 43599f88e3..81fa5c670d 100644 --- a/src/kits/network/libnetservices/FileRequest.cpp +++ b/src/kits/network/libnetservices/FileRequest.cpp @@ -81,7 +81,11 @@ BFileRequest::_ProtocolLoop() return error; fResult.SetLength(size); +#ifdef LIBNETAPI_DEPRECATED fListener->HeadersReceived(this, fResult); +#else + fListener->HeadersReceived(this); +#endif ssize_t chunkSize = 0; char chunk[4096]; @@ -124,7 +128,11 @@ BFileRequest::_ProtocolLoop() if (fListener != NULL) { fListener->ConnectionOpened(this); +#ifdef LIBNETAPI_DEPRECATED fListener->HeadersReceived(this, fResult); +#else + fListener->HeadersReceived(this); +#endif // Add a parent directory entry. fListener->DataReceived(this, "+/,\t..\r\n", transferredSize, 8); diff --git a/src/kits/network/libnetservices/GopherRequest.cpp b/src/kits/network/libnetservices/GopherRequest.cpp index 8713192ee8..2c3d9f2764 100644 --- a/src/kits/network/libnetservices/GopherRequest.cpp +++ b/src/kits/network/libnetservices/GopherRequest.cpp @@ -350,7 +350,11 @@ BGopherRequest::_ProtocolLoop() // we don't really have headers but well... //! ProtocolHook:HeadersReceived if (fListener != NULL) +#ifdef LIBNETAPI_DEPRECATED fListener->HeadersReceived(this, fResult); +#else + fListener->HeadersReceived(this); +#endif } if (_NeedsParsing()) diff --git a/src/kits/network/libnetservices/HttpRequest.cpp b/src/kits/network/libnetservices/HttpRequest.cpp index 36471f6f61..f8d372b6b0 100644 --- a/src/kits/network/libnetservices/HttpRequest.cpp +++ b/src/kits/network/libnetservices/HttpRequest.cpp @@ -672,7 +672,11 @@ BHttpRequest::_MakeRequest() //! ProtocolHook:HeadersReceived if (fListener != NULL && !disableListener) +#ifdef LIBNETAPI_DEPRECATED fListener->HeadersReceived(this, fResult); +#else + fListener->HeadersReceived(this); +#endif if (BString(fHeaders["Transfer-Encoding"]) == "chunked") diff --git a/src/kits/network/libnetservices/HttpResult.cpp b/src/kits/network/libnetservices/HttpResult.cpp index ef8bd6fa7b..85185eafa4 100644 --- a/src/kits/network/libnetservices/HttpResult.cpp +++ b/src/kits/network/libnetservices/HttpResult.cpp @@ -29,6 +29,7 @@ BHttpResult::BHttpResult(const BUrl& url) } +#ifdef LIBNETAPI_DEPRECATED BHttpResult::BHttpResult(BMessage* archive) : BUrlResult(archive), @@ -42,6 +43,7 @@ BHttpResult::BHttpResult(BMessage* archive) archive->FindMessage("http:headers", &headers); fHeaders.PopulateFromArchive(&headers); } +#endif BHttpResult::BHttpResult(const BHttpResult& other) @@ -86,6 +88,7 @@ BHttpResult::ContentType() const } +#ifdef LIBNETAPI_DEPRECATED size_t BHttpResult::Length() const { @@ -115,6 +118,38 @@ BHttpResult::Length() const return result; } +#else + +off_t +BHttpResult::Length() const +{ + const char* length = Headers()["Content-Length"]; + if (length == NULL) + return 0; + + /* NOTE: Not RFC7230 compliant: + * - If Content-Length is a list, all values must be checked and verified + * to be duplicates of each other, but this is currently not supported. + */ + off_t result = 0; + /* strtoull() will ignore a prefixed sign, so we verify that there aren't + * any before continuing (RFC7230 only permits digits). + * + * We can check length[0] directly because header values are trimmed by + * HttpHeader beforehand. */ + if (length[0] != '-' && length[0] != '+') { + errno = 0; + char *endptr = NULL; + result = strtoull(length, &endptr, 10); + /* ERANGE will be signalled if the result is too large (which can + * happen), in that case, return 0. */ + if (errno != 0 || *endptr != '\0') + result = 0; + } + return result; +} +#endif // BNETAPI_DEPRECATED + const BHttpHeaders& BHttpResult::Headers() const @@ -165,6 +200,7 @@ BHttpResult::operator=(const BHttpResult& other) } +#ifdef LIBNETAPI_DEPRECATED status_t BHttpResult::Archive(BMessage* target, bool deep) const { @@ -192,3 +228,4 @@ BHttpResult::Instantiate(BMessage* archive) return new BHttpResult(archive); } +#endif diff --git a/src/kits/network/libnetservices/JamCommon b/src/kits/network/libnetservices/JamCommon index 1233f81026..2f92c299f3 100644 --- a/src/kits/network/libnetservices/JamCommon +++ b/src/kits/network/libnetservices/JamCommon @@ -32,7 +32,6 @@ local sources = UrlProtocolListener.cpp UrlProtocolRoster.cpp UrlRequest.cpp - UrlResult.cpp UrlSynchronousRequest.cpp ; @@ -51,12 +50,14 @@ for architectureObject in [ MultiArchSubDirSetup ] { MergeObject netservices.o : $(sources) + UrlResult_Deprecated.cpp : <$(architecture)>libshared.a ; } else { StaticLibrary [ MultiArchDefaultGristFiles libnetservices.a ] : $(sources) Geolocation.cpp + UrlResult.cpp ; } diff --git a/src/kits/network/libnetservices/UrlProtocolAsynchronousListener.cpp b/src/kits/network/libnetservices/UrlProtocolAsynchronousListener.cpp index 2995b104ce..478bf8dd81 100644 --- a/src/kits/network/libnetservices/UrlProtocolAsynchronousListener.cpp +++ b/src/kits/network/libnetservices/UrlProtocolAsynchronousListener.cpp @@ -102,6 +102,7 @@ BUrlProtocolAsynchronousListener::MessageReceived(BMessage* message) ResponseStarted(caller); break; +#ifdef LIBNETAPI_DEPRECATED case B_URL_PROTOCOL_HEADERS_RECEIVED: { BMessage archive; @@ -115,7 +116,11 @@ BUrlProtocolAsynchronousListener::MessageReceived(BMessage* message) HeadersReceived(caller, *result); delete result; } +#else + case B_URL_PROTOCOL_HEADERS_RECEIVED: + HeadersReceived(caller); break; +#endif case B_URL_PROTOCOL_DATA_RECEIVED: { diff --git a/src/kits/network/libnetservices/UrlProtocolDispatchingListener.cpp b/src/kits/network/libnetservices/UrlProtocolDispatchingListener.cpp index 7fd279c9e6..8561ff5024 100644 --- a/src/kits/network/libnetservices/UrlProtocolDispatchingListener.cpp +++ b/src/kits/network/libnetservices/UrlProtocolDispatchingListener.cpp @@ -72,6 +72,7 @@ BUrlProtocolDispatchingListener::ResponseStarted(BUrlRequest* caller) } +#ifdef LIBNETAPI_DEPRECATED void BUrlProtocolDispatchingListener::HeadersReceived(BUrlRequest* caller, const BUrlResult& result) @@ -87,6 +88,16 @@ BUrlProtocolDispatchingListener::HeadersReceived(BUrlRequest* caller, _SendMessage(&message, B_URL_PROTOCOL_HEADERS_RECEIVED, caller); } +#else + +void +BUrlProtocolDispatchingListener::HeadersReceived(BUrlRequest* caller) +{ + BMessage message(B_URL_PROTOCOL_NOTIFICATION); + _SendMessage(&message, B_URL_PROTOCOL_HEADERS_RECEIVED, caller); +} +#endif // LIBNETAPI_DEPRECATED + void BUrlProtocolDispatchingListener::DataReceived(BUrlRequest* caller, diff --git a/src/kits/network/libnetservices/UrlProtocolListener.cpp b/src/kits/network/libnetservices/UrlProtocolListener.cpp index fd953faa53..7fe7f71695 100644 --- a/src/kits/network/libnetservices/UrlProtocolListener.cpp +++ b/src/kits/network/libnetservices/UrlProtocolListener.cpp @@ -45,11 +45,20 @@ BUrlProtocolListener::ResponseStarted(BUrlRequest*) } +#ifdef LIBNETAPI_DEPRECATED void BUrlProtocolListener::HeadersReceived(BUrlRequest*, const BUrlResult& result) { } +#else + +void +BUrlProtocolListener::HeadersReceived(BUrlRequest*) +{ +} +#endif // LIBNETAPI_DEPRECATED + void BUrlProtocolListener::DataReceived(BUrlRequest*, const char*, off_t, ssize_t) diff --git a/src/kits/network/libnetservices/UrlResult.cpp b/src/kits/network/libnetservices/UrlResult.cpp index 49c70c1cef..ab59915452 100644 --- a/src/kits/network/libnetservices/UrlResult.cpp +++ b/src/kits/network/libnetservices/UrlResult.cpp @@ -10,48 +10,22 @@ #include -#ifndef LIBNETAPI_DEPRECATED using namespace BPrivate::Network; -#endif + BUrlResult::BUrlResult() : - BArchivable(), fContentType(), fLength(0) { } -BUrlResult::BUrlResult(BMessage* archive) - : - BArchivable(archive) -{ - fContentType = archive->FindString("ContentType"); - fLength = archive->FindInt32("Length"); -} - - BUrlResult::~BUrlResult() { } -status_t -BUrlResult::Archive(BMessage* archive, bool deep) const -{ - status_t result = BArchivable::Archive(archive, deep); - - if (result != B_OK) - return result; - - archive->AddString("ContentType", fContentType); - archive->AddInt32("Length", fLength); - - return B_OK; -} - - void BUrlResult::SetContentType(BString contentType) { @@ -60,7 +34,7 @@ BUrlResult::SetContentType(BString contentType) void -BUrlResult::SetLength(size_t length) +BUrlResult::SetLength(off_t length) { fLength = length; } @@ -73,17 +47,8 @@ BUrlResult::ContentType() const } -size_t +off_t BUrlResult::Length() const { return fLength; } - - -/*static*/ BArchivable* -BUrlResult::Instantiate(BMessage* archive) -{ - if (!validate_instantiation(archive, "BUrlResult")) - return NULL; - return new BUrlResult(archive); -} diff --git a/src/kits/network/libnetservices/UrlSynchronousRequest.cpp b/src/kits/network/libnetservices/UrlSynchronousRequest.cpp index 3306e6454f..a5fb25a918 100644 --- a/src/kits/network/libnetservices/UrlSynchronousRequest.cpp +++ b/src/kits/network/libnetservices/UrlSynchronousRequest.cpp @@ -73,12 +73,22 @@ BUrlSynchronousRequest::ResponseStarted(BUrlRequest*) } +#ifdef LIBNETAPI_DEPRECATED void BUrlSynchronousRequest::HeadersReceived(BUrlRequest*, const BUrlResult& result) { PRINT(("SynchronousRequest::HeadersReceived()\n")); } +#else + +void +BUrlSynchronousRequest::HeadersReceived(BUrlRequest*) +{ + PRINT(("SynchronousRequest::HeadersReceived()\n")); +} +#endif // LIBNETAPI_DEPRECATED + void BUrlSynchronousRequest::DataReceived(BUrlRequest*, const char*, diff --git a/src/tests/kits/net/service/HttpTest.cpp b/src/tests/kits/net/service/HttpTest.cpp index 47358af09b..11e251cf77 100644 --- a/src/tests/kits/net/service/HttpTest.cpp +++ b/src/tests/kits/net/service/HttpTest.cpp @@ -58,11 +58,10 @@ public: } virtual void HeadersReceived( - BUrlRequest* caller, - const BUrlResult& result) + BUrlRequest* caller) { const BHttpResult& http_result - = dynamic_cast(result); + = dynamic_cast(caller->Result()); const BHttpHeaders& headers = http_result.Headers(); for (int32 i = 0; i < headers.CountHeaders(); ++i) {