hrev46283 adds 2 changesets to branch 'master' old head: 076952bc292644a6ed162cc49ddcd8cd3c47505b new head: c52c444c2733032679528e83572e8f2f6d576a13 overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=c52c444+%5E076952b ---------------------------------------------------------------------------- f678220: Move UrlResult to HttpResult * Remove the fRawData field, as handling it is too complicated (it's not easy to have proper copy semantics on a BDataIO) and it's not used anyway, as the listener DataReceived call is enough to get the data and handle it. * All the remaining fields are HTTP-only, so rename the class to HttpResult and attach it to HttpRequest instead of UrlRequest. c52c444: Add file: protocol handler. [ Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> ] ---------------------------------------------------------------------------- 15 files changed, 317 insertions(+), 263 deletions(-) headers/os/net/FileRequest.h | 29 +++++ headers/os/net/HttpRequest.h | 12 +- headers/os/net/HttpResult.h | 55 +++++++++ headers/os/net/UrlRequest.h | 11 -- headers/os/net/UrlResult.h | 56 --------- src/kits/network/libnetapi/FileRequest.cpp | 56 +++++++++ src/kits/network/libnetapi/HttpRequest.cpp | 55 ++++++--- src/kits/network/libnetapi/HttpResult.cpp | 104 ++++++++++++++++ src/kits/network/libnetapi/Jamfile | 5 +- .../UrlProtocolAsynchronousListener.cpp | 11 +- .../libnetapi/UrlProtocolDispatchingListener.cpp | 6 +- src/kits/network/libnetapi/UrlProtocolRoster.cpp | 6 + src/kits/network/libnetapi/UrlRequest.cpp | 51 +------- src/kits/network/libnetapi/UrlResult.cpp | 121 ------------------- .../network/libnetapi/UrlSynchronousRequest.cpp | 2 - ############################################################################ Commit: f6782201f0dd84204dacf7b1f018f56d9594d972 URL: http://cgit.haiku-os.org/haiku/commit/?id=f678220 Author: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> Date: Thu Oct 24 15:26:17 2013 UTC Move UrlResult to HttpResult * Remove the fRawData field, as handling it is too complicated (it's not easy to have proper copy semantics on a BDataIO) and it's not used anyway, as the listener DataReceived call is enough to get the data and handle it. * All the remaining fields are HTTP-only, so rename the class to HttpResult and attach it to HttpRequest instead of UrlRequest. ---------------------------------------------------------------------------- diff --git a/headers/os/net/HttpRequest.h b/headers/os/net/HttpRequest.h index b55ce59..2c4248c 100644 --- a/headers/os/net/HttpRequest.h +++ b/headers/os/net/HttpRequest.h @@ -12,6 +12,7 @@ #include <HttpAuthentication.h> #include <HttpForm.h> #include <HttpHeaders.h> +#include <HttpResult.h> #include <NetBuffer.h> #include <NetworkAddress.h> #include <UrlRequest.h> @@ -48,6 +49,9 @@ public: const ssize_t size = -1); void AdoptHeaders(BHttpHeaders* const headers); + const BHttpResult& Result() const; + const char* StatusString(status_t threadStatus) const; + static bool IsInformationalStatusCode(int16 code); static bool IsSuccessStatusCode(int16 code); static bool IsRedirectionStatusCode(int16 code); @@ -55,8 +59,6 @@ public: static bool IsServerErrorStatusCode(int16 code); static int16 StatusCodeClass(int16 code); - virtual const char* StatusString(status_t threadStatus) const; - private: void _ResetOptions(); status_t _ProtocolLoop(); @@ -73,6 +75,11 @@ private: void _AddOutputBufferLine(const char* line); + // URL result parameters access + BPositionIO* _ResultRawData(); + BHttpHeaders& _ResultHeaders(); + void _SetResultStatusCode(int32 statusCode); + BString& _ResultStatusText(); private: BAbstractSocket* fSocket; @@ -91,6 +98,7 @@ private: // Request status BHttpHeaders fOutputHeaders; + BHttpResult fResult; // Request state/events enum { diff --git a/headers/os/net/HttpResult.h b/headers/os/net/HttpResult.h new file mode 100644 index 0000000..88f5de0 --- /dev/null +++ b/headers/os/net/HttpResult.h @@ -0,0 +1,55 @@ +/* + * Copyright 2010 Haiku Inc. All rights reserved. + * Distributed under the terms of the MIT License. + */ +#ifndef _B_URL_RESULT_H_ +#define _B_URL_RESULT_H_ + + +#include <iostream> + +#include <DataIO.h> +#include <HttpHeaders.h> +#include <String.h> +#include <Url.h> + + +class BUrlRequest; + + +class BHttpResult { + friend class BHttpRequest; + +public: + BHttpResult(const BUrl& url); + BHttpResult(const BHttpResult& other); + ~BHttpResult(); + + // Result parameters modifications + void SetUrl(const BUrl& url); + + // Result parameters access + const BUrl& Url() const; + + // HTTP-Specific stuff + const BHttpHeaders& Headers() const; + const BString& StatusText() const; + int32 StatusCode() const; + + // Result tests + bool HasHeaders() const; + + // Overloaded members + BHttpResult& operator=(const BHttpResult& other); + +private: + BUrl fUrl; + + // TODO: HTTP specific stuff should not live here. + BHttpHeaders fHeaders; + int32 fStatusCode; + BString fStatusString; +}; + + +#endif // _B_URL_RESULT_H_ diff --git a/headers/os/net/UrlRequest.h b/headers/os/net/UrlRequest.h index d0b2eb7..870b124 100644 --- a/headers/os/net/UrlRequest.h +++ b/headers/os/net/UrlRequest.h @@ -7,7 +7,6 @@ #include <Url.h> -#include <UrlResult.h> #include <UrlContext.h> #include <UrlProtocolListener.h> #include <OS.h> @@ -30,13 +29,11 @@ public: // 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; - const BUrlResult& Result() const; BUrlContext* Context() const; BUrlProtocolListener* Listener() const; const BString& Protocol() const; @@ -53,16 +50,8 @@ protected: 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; diff --git a/headers/os/net/UrlResult.h b/headers/os/net/UrlResult.h deleted file mode 100644 index 773e88b..0000000 --- a/headers/os/net/UrlResult.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2010 Haiku Inc. All rights reserved. - * Distributed under the terms of the MIT License. - */ -#ifndef _B_URL_RESULT_H_ -#define _B_URL_RESULT_H_ - - -#include <iostream> - -#include <DataIO.h> -#include <HttpHeaders.h> -#include <String.h> -#include <Url.h> - - -class BUrlRequest; - - -class BUrlResult { - friend class BUrlRequest; - -public: - BUrlResult(const BUrl& url); - BUrlResult(const BUrlResult& other); - - // Result parameters modifications - void SetUrl(const BUrl& url); - - // Result parameters access - const BUrl& Url() const; - const BMallocIO& RawData() const; - const BHttpHeaders& Headers() const; - const BString& StatusText() const; - int32 StatusCode() const; - - // Result tests - bool HasHeaders() const; - - // Overloaded members - BUrlResult& operator=(const BUrlResult& other); - friend std::ostream& operator<<(std::ostream& out, - const BUrlResult& result); - -private: - BUrl fUrl; - BMallocIO fRawData; - BHttpHeaders fHeaders; - // TODO: HTTP specific stuff should not live here. - - int32 fStatusCode; - BString fStatusString; -}; - - -#endif // _B_URL_RESULT_H_ diff --git a/src/kits/network/libnetapi/HttpRequest.cpp b/src/kits/network/libnetapi/HttpRequest.cpp index 2e3e0bd..7b19990 100644 --- a/src/kits/network/libnetapi/HttpRequest.cpp +++ b/src/kits/network/libnetapi/HttpRequest.cpp @@ -20,7 +20,7 @@ #include <HttpRequest.h> -static const int32 kHttpProtocolReceiveBufferSize = 1024; +static const int32 kHttpBufferSize = 4096; static const char* kHttpProtocolThreadStrStatus[ B_PROT_HTTP_THREAD_STATUS__END - B_PROT_THREAD_STATUS__END] = { @@ -36,6 +36,7 @@ BHttpRequest::BHttpRequest(const BUrl& url, bool ssl, const char* protocolName, fSSL(ssl), fRequestMethod(B_HTTP_GET), fHttpVersion(B_HTTP_11), + fResult(url), fRequestStatus(kRequestInitialState), fOptHeaders(NULL), fOptPostFields(NULL), @@ -244,6 +245,13 @@ BHttpRequest::StatusString(status_t threadStatus) const } +const BHttpResult& +BHttpRequest::Result() const +{ + return fResult; +} + + void BHttpRequest::_ResetOptions() { @@ -284,8 +292,6 @@ BHttpRequest::_ProtocolLoop() fOutputHeaders.Clear(); fHeaders.Clear(); _ResultHeaders().Clear(); - _ResultRawData().Seek(SEEK_SET, 0); - _ResultRawData().SetSize(0); if (!_ResolveHostName()) { _EmitDebug(B_URL_PROTOCOL_DEBUG_ERROR, @@ -459,13 +465,15 @@ BHttpRequest::_MakeRequest() { BFile upFile(currentField->File().Path(), B_READ_ONLY); - char readBuffer[1024]; + char readBuffer[kHttpBufferSize]; ssize_t readSize; - readSize = upFile.Read(readBuffer, 1024); + readSize = upFile.Read(readBuffer, + sizeof(readBuffer)); while (readSize > 0) { fSocket->Write(readBuffer, readSize); - readSize = upFile.Read(readBuffer, 1024); + readSize = upFile.Read(readBuffer, + sizeof(readBuffer)); } } break; @@ -486,7 +494,7 @@ BHttpRequest::_MakeRequest() && fOptInputData != NULL) { for(;;) { - char outputTempBuffer[1024]; + char outputTempBuffer[kHttpBufferSize]; ssize_t read = fOptInputData->Read(outputTempBuffer, sizeof(outputTempBuffer)); @@ -557,7 +565,7 @@ BHttpRequest::_MakeRequest() _ParseHeaders(); if (fRequestStatus >= kRequestHeadersReceived) { - receiveBufferSize = kHttpProtocolReceiveBufferSize; + receiveBufferSize = kHttpBufferSize; _ResultHeaders() = fHeaders; //! ProtocolHook:HeadersReceived @@ -651,16 +659,6 @@ BHttpRequest::_MakeRequest() bytesTotal); } - ssize_t dataWrite = _ResultRawData().Write(inputTempBuffer, - bytesRead); - - if (dataWrite != bytesRead) { - _EmitDebug(B_URL_PROTOCOL_DEBUG_ERROR, - "Unable to write %dbytes of data (%d).", bytesRead, - dataWrite); - return B_PROT_NO_MEMORY; - } - if (bytesTotal > 0 && bytesReceived >= bytesTotal) receiveEnd = true; @@ -896,3 +894,24 @@ BHttpRequest::_AddOutputBufferLine(const char* line) _EmitDebug(B_URL_PROTOCOL_DEBUG_HEADER_OUT, "%s", line); fOutputBuffer << line << "\r\n"; } + + +BHttpHeaders& +BHttpRequest::_ResultHeaders() +{ + return fResult.fHeaders; +} + + +void +BHttpRequest::_SetResultStatusCode(int32 statusCode) +{ + fResult.fStatusCode = statusCode; +} + + +BString& +BHttpRequest::_ResultStatusText() +{ + return fResult.fStatusString; +} diff --git a/src/kits/network/libnetapi/HttpResult.cpp b/src/kits/network/libnetapi/HttpResult.cpp new file mode 100644 index 0000000..6e48505 --- /dev/null +++ b/src/kits/network/libnetapi/HttpResult.cpp @@ -0,0 +1,104 @@ +/* + * Copyright 2010 Haiku Inc. All rights reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * Christophe Huriaux, c.huriaux@xxxxxxxxx + */ + + +#include <HttpResult.h> +#include <Debug.h> + + +using std::ostream; + + +BHttpResult::BHttpResult(const BUrl& url) + : + fUrl(url), + fHeaders(), + fStatusCode(0) +{ +} + + +BHttpResult::BHttpResult(const BHttpResult& other) + : + fUrl(other.fUrl), + fHeaders(other.fHeaders), + fStatusCode(other.fStatusCode), + fStatusString(other.fStatusString) +{ +} + + +BHttpResult::~BHttpResult() +{ +} + + +// #pragma mark Result parameters modifications + + +void +BHttpResult::SetUrl(const BUrl& url) +{ + fUrl = url; +} + + +// #pragma mark Result parameters access + + +const BUrl& +BHttpResult::Url() const +{ + return fUrl; +} + + +const BHttpHeaders& +BHttpResult::Headers() const +{ + return fHeaders; +} + + +int32 +BHttpResult::StatusCode() const +{ + return fStatusCode; +} + + +const BString& +BHttpResult::StatusText() const +{ + return fStatusString; +} + + +// #pragma mark Result tests + + +bool +BHttpResult::HasHeaders() const +{ + return (fHeaders.CountHeaders() > 0); +} + + +// #pragma mark Overloaded members + + +BHttpResult& +BHttpResult::operator=(const BHttpResult& other) +{ + fUrl = other.fUrl; + fHeaders = other.fHeaders; + fStatusCode = other.fStatusCode; + fStatusString = other.fStatusString; + + return *this; +} diff --git a/src/kits/network/libnetapi/UrlProtocolAsynchronousListener.cpp b/src/kits/network/libnetapi/UrlProtocolAsynchronousListener.cpp index b91d0fb..e23c33b 100644 --- a/src/kits/network/libnetapi/UrlProtocolAsynchronousListener.cpp +++ b/src/kits/network/libnetapi/UrlProtocolAsynchronousListener.cpp @@ -99,9 +99,14 @@ BUrlProtocolAsynchronousListener::MessageReceived(BMessage* message) case B_URL_PROTOCOL_DATA_RECEIVED: { const char* data; - ssize_t size; - message->FindData("url:data", B_STRING_TYPE, - reinterpret_cast<const void**>(&data), &size); + ssize_t size = 0; + if(message->FindData("url:data", B_STRING_TYPE, + reinterpret_cast<const void**>(&data), &size) != B_OK) + { + printf("BOGUS DATA MESSAGE\n"); + message->PrintToStream(); + return; + } DataReceived(caller, data, size); } diff --git a/src/kits/network/libnetapi/UrlProtocolDispatchingListener.cpp b/src/kits/network/libnetapi/UrlProtocolDispatchingListener.cpp index 0043cfa..088f74e 100644 --- a/src/kits/network/libnetapi/UrlProtocolDispatchingListener.cpp +++ b/src/kits/network/libnetapi/UrlProtocolDispatchingListener.cpp @@ -10,6 +10,8 @@ #include <UrlProtocolDispatchingListener.h> #include <Debug.h> +#include <assert.h> + const char* kUrlProtocolMessageType = "be:urlProtocolMessageType"; const char* kUrlProtocolCaller = "be:urlProtocolCaller"; @@ -76,7 +78,9 @@ BUrlProtocolDispatchingListener::DataReceived(BUrlRequest* caller, const char* data, ssize_t size) { BMessage message(B_URL_PROTOCOL_NOTIFICATION); - message.AddData("url:data", B_STRING_TYPE, data, size, true, 1); + status_t result = message.AddData("url:data", B_STRING_TYPE, data, size, + true, 1); + assert(result == B_OK); _SendMessage(&message, B_URL_PROTOCOL_DATA_RECEIVED, caller); } diff --git a/src/kits/network/libnetapi/UrlRequest.cpp b/src/kits/network/libnetapi/UrlRequest.cpp index de51565..add7361 100644 --- a/src/kits/network/libnetapi/UrlRequest.cpp +++ b/src/kits/network/libnetapi/UrlRequest.cpp @@ -31,7 +31,6 @@ BUrlRequest::BUrlRequest(const BUrl& url, BUrlProtocolListener* listener, BUrlContext* context, const char* threadName, const char* protocolName) : fUrl(url), - fResult(url), fContext(context), fListener(listener), fQuit(false), @@ -127,17 +126,6 @@ BUrlRequest::SetUrl(const BUrl& url) status_t -BUrlRequest::SetResult(BUrlResult& result) -{ - if (IsRunning()) - return B_ERROR; - - fResult = result; - return B_OK; -} - - -status_t BUrlRequest::SetContext(BUrlContext* context) { if (IsRunning()) @@ -169,13 +157,6 @@ BUrlRequest::Url() const } -const BUrlResult& -BUrlRequest::Result() const -{ - return fResult; -} - - BUrlContext* BUrlRequest::Context() const { @@ -240,9 +221,11 @@ BUrlRequest::_ThreadEntry(void* arg) urlProtocol->fRunning = false; urlProtocol->fThreadStatus = protocolLoopExitStatus; - if (urlProtocol->fListener != NULL) + if (urlProtocol->fListener != NULL) { urlProtocol->fListener->RequestCompleted(urlProtocol, protocolLoopExitStatus == B_PROT_SUCCESS); + printf("Notified to %p\n", urlProtocol->fListener); + } return B_OK; } @@ -274,31 +257,3 @@ BUrlRequest::_EmitDebug(BUrlProtocolDebugMessage type, fListener->DebugMessage(this, type, debugMsg); va_end(arguments); } - - -BMallocIO& -BUrlRequest::_ResultRawData() -{ - return fResult.fRawData; -} - - -BHttpHeaders& -BUrlRequest::_ResultHeaders() -{ - return fResult.fHeaders; -} - - -void -BUrlRequest::_SetResultStatusCode(int32 statusCode) -{ - fResult.fStatusCode = statusCode; -} - - -BString& -BUrlRequest::_ResultStatusText() -{ - return fResult.fStatusString; -} diff --git a/src/kits/network/libnetapi/UrlResult.cpp b/src/kits/network/libnetapi/UrlResult.cpp deleted file mode 100644 index bdc20a4..0000000 --- a/src/kits/network/libnetapi/UrlResult.cpp +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright 2010 Haiku Inc. All rights reserved. - * Distributed under the terms of the MIT License. - * - * Authors: - * Christophe Huriaux, c.huriaux@xxxxxxxxx - */ - - -#include <UrlResult.h> -#include <Debug.h> - - -using std::ostream; - - -BUrlResult::BUrlResult(const BUrl& url) - : - fUrl(url), - fRawData(), - fHeaders(), - fStatusCode(0) -{ -} - - -BUrlResult::BUrlResult(const BUrlResult& other) - : - fUrl(), - fRawData(), - fHeaders() -{ - *this = other; -} - - -// #pragma mark Result parameters modifications - - -void -BUrlResult::SetUrl(const BUrl& url) -{ - fUrl = url; -} - - -// #pragma mark Result parameters access - - -const BUrl& -BUrlResult::Url() const -{ - return fUrl; -} - - -const BMallocIO& -BUrlResult::RawData() const -{ - return fRawData; -} - - -const BHttpHeaders& -BUrlResult::Headers() const -{ - return fHeaders; -} - - -int32 -BUrlResult::StatusCode() const -{ - return fStatusCode; -} - - -const BString& -BUrlResult::StatusText() const -{ - return fStatusString; -} - - -// #pragma mark Result tests - - -bool -BUrlResult::HasHeaders() const -{ - return (fHeaders.CountHeaders() > 0); -} - - -// #pragma mark Overloaded operators - - -BUrlResult& -BUrlResult::operator=(const BUrlResult& other) -{ - fUrl = other.fUrl; - fHeaders = other.fHeaders; - - fRawData.SetSize(other.fRawData.BufferLength()); - fRawData.WriteAt(0, other.fRawData.Buffer(), other.fRawData.BufferLength()); - // FIXME this makes a copy of the data, it would be better to share it - - fStatusCode = other.fStatusCode; - - return *this; -} - - -ostream& -operator<<(ostream& out, const BUrlResult& result) -{ - out.write(reinterpret_cast<const char*>(result.fRawData.Buffer()), - result.fRawData.BufferLength()); - - return out; -} diff --git a/src/kits/network/libnetapi/UrlSynchronousRequest.cpp b/src/kits/network/libnetapi/UrlSynchronousRequest.cpp index 54437ee..c58479e 100644 --- a/src/kits/network/libnetapi/UrlSynchronousRequest.cpp +++ b/src/kits/network/libnetapi/UrlSynchronousRequest.cpp @@ -45,8 +45,6 @@ BUrlSynchronousRequest::WaitUntilCompletion() while (!fRequestComplete) snooze(10000); - fResult = fWrappedRequest.Result(); - return B_OK; } ############################################################################ Revision: hrev46283 Commit: c52c444c2733032679528e83572e8f2f6d576a13 URL: http://cgit.haiku-os.org/haiku/commit/?id=c52c444 Author: Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> Date: Thu Oct 24 15:31:25 2013 UTC Add file: protocol handler. ---------------------------------------------------------------------------- diff --git a/headers/os/net/FileRequest.h b/headers/os/net/FileRequest.h new file mode 100644 index 0000000..49c5974 --- /dev/null +++ b/headers/os/net/FileRequest.h @@ -0,0 +1,29 @@ +/* + * Copyright 2013 Haiku Inc. All rights reserved. + * Distributed under the terms of the MIT License. + */ +#ifndef _B_FILE_REQUEST_H_ +#define _B_FILE_REQUEST_H_ + + +#include <deque> + + +#include <UrlRequest.h> + + +class BFileRequest : public BUrlRequest { +public: + BFileRequest(const BUrl& url, + BUrlProtocolListener* listener = NULL, + BUrlContext* context = NULL); + virtual ~BFileRequest(); + + void SetDisableListener(bool disable); + +private: + status_t _ProtocolLoop(); +}; + + +#endif // _B_FILE_REQUEST_H_ diff --git a/src/kits/network/libnetapi/FileRequest.cpp b/src/kits/network/libnetapi/FileRequest.cpp new file mode 100644 index 0000000..a57b155 --- /dev/null +++ b/src/kits/network/libnetapi/FileRequest.cpp @@ -0,0 +1,56 @@ +/* + * Copyright 2013 Haiku Inc. All rights reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * Adrien Destugues, pulkomandy@xxxxxxxxxxxxx + */ + + +#include <new> +#include <stdlib.h> + +#include <arpa/inet.h> + +#include <File.h> +#include <FileRequest.h> + + +BFileRequest::BFileRequest(const BUrl& url, BUrlProtocolListener* listener, + BUrlContext* context) + : + BUrlRequest(url, listener, context, "BUrlProtocol.File", "file") +{ +} + + +BFileRequest::~BFileRequest() +{ +} + + +status_t +BFileRequest::_ProtocolLoop() +{ + // FIXME error handling (file does not exists, etc.) + BFile file(fUrl.Path().String(), B_READ_ONLY); + + if(file.InitCheck() != B_OK) + return B_PROT_CONNECTION_FAILED; + + // Send all notifications to listener, if any + if (fListener != NULL) { + fListener->ConnectionOpened(this); + off_t size = 0; + file.GetSize(&size); + fListener->DownloadProgress(this, size, size); + + size_t chunkSize; + char chunk[4096]; + while((chunkSize = file.Read(chunk, sizeof(chunk))) > 0) + fListener->DataReceived(this, chunk, chunkSize); + } + + return B_PROT_SUCCESS; +} + diff --git a/src/kits/network/libnetapi/Jamfile b/src/kits/network/libnetapi/Jamfile index ec079c2..bea137c 100644 --- a/src/kits/network/libnetapi/Jamfile +++ b/src/kits/network/libnetapi/Jamfile @@ -58,8 +58,12 @@ for architectureObject in [ MultiArchSubDirSetup ] { HttpHeaders.cpp HttpForm.cpp HttpRequest.cpp + HttpResult.cpp HttpTime.cpp + # TODO: another add-on for file:// (a much simpler one) + FileRequest.cpp + $(md5Sources) Url.cpp @@ -69,7 +73,6 @@ for architectureObject in [ MultiArchSubDirSetup ] { UrlProtocolListener.cpp UrlProtocolRoster.cpp UrlRequest.cpp - UrlResult.cpp UrlSynchronousRequest.cpp : diff --git a/src/kits/network/libnetapi/UrlProtocolRoster.cpp b/src/kits/network/libnetapi/UrlProtocolRoster.cpp index 2e2a6c9..830bd2b 100644 --- a/src/kits/network/libnetapi/UrlProtocolRoster.cpp +++ b/src/kits/network/libnetapi/UrlProtocolRoster.cpp @@ -12,6 +12,7 @@ #include <new> #include <UrlRequest.h> +#include <FileRequest.h> #include <HttpRequest.h> #include <Debug.h> @@ -27,7 +28,12 @@ BUrlProtocolRoster::MakeRequest(const BUrl& url, } else if (url.Protocol() == "https") { return new(std::nothrow) BHttpRequest(url, true, "HTTPS", listener, context); + } else if (url.Protocol() == "file") { + puts("*** FILE URL"); + return new(std::nothrow) BFileRequest(url, listener, context); } + puts("*** UNKNOWN protocol"); + return NULL; }