JUCE-7.0.12-0-g4f43011b96 JUCE-7.0.12-0-g4f43011b96
JUCE — C++ application framework with suport for VST, VST3, LV2 audio plug-ins

« « « Anklang Documentation
Loading...
Searching...
No Matches
juce_WebInputStream.cpp
Go to the documentation of this file.
1 /*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 The code included in this file is provided under the terms of the ISC license
11 http://www.isc.org/downloads/software-support-policy/isc-license. Permission
12 To use, copy, modify, and/or distribute this software for any purpose with or
13 without fee is hereby granted provided that the above copyright notice and
14 this permission notice appear in all copies.
15
16 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
17 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
18 DISCLAIMED.
19
20 ==============================================================================
21*/
22
23namespace juce
24{
25
26WebInputStream::WebInputStream (const URL& url, const bool usePost)
27 : pimpl (std::make_unique<Pimpl> (*this, url, usePost))
28{
29}
30
34
35WebInputStream& WebInputStream::withExtraHeaders (const String& extra) { pimpl->withExtraHeaders (extra); return *this; }
36WebInputStream& WebInputStream::withCustomRequestCommand (const String& cmd) { pimpl->withCustomRequestCommand (cmd); return *this; }
37WebInputStream& WebInputStream::withConnectionTimeout (int t) { pimpl->withConnectionTimeout (t); return *this; }
38WebInputStream& WebInputStream::withNumRedirectsToFollow (int num) { pimpl->withNumRedirectsToFollow (num); return *this; }
39StringPairArray WebInputStream::getRequestHeaders() const { return pimpl->getRequestHeaders(); }
40StringPairArray WebInputStream::getResponseHeaders() { connect (nullptr); return pimpl->getResponseHeaders(); }
41bool WebInputStream::isError() const { return pimpl->isError(); }
42void WebInputStream::cancel() { pimpl->cancel(); }
43bool WebInputStream::isExhausted() { return pimpl->isExhausted(); }
44int64 WebInputStream::getPosition() { return pimpl->getPosition(); }
45int64 WebInputStream::getTotalLength() { connect (nullptr); return pimpl->getTotalLength(); }
46int WebInputStream::read (void* buffer, int bytes) { connect (nullptr); return pimpl->read (buffer, bytes); }
47bool WebInputStream::setPosition (int64 pos) { return pimpl->setPosition (pos); }
48int WebInputStream::getStatusCode() { connect (nullptr); return pimpl->getStatusCode(); }
49
51{
52 if (hasCalledConnect)
53 return ! isError();
54
55 hasCalledConnect = true;
56 return pimpl->connect (listener);
57}
58
59StringPairArray WebInputStream::parseHttpHeaders (const String& headerData)
60{
62 auto headerLines = StringArray::fromLines (headerData);
63
64 for (const auto& headersEntry : headerLines)
65 {
66 if (headersEntry.isNotEmpty())
67 {
68 const auto key = headersEntry.upToFirstOccurrenceOf (": ", false, false);
69
70 auto value = [&headersEntry, &headerPairs, &key]
71 {
72 const auto currentValue = headersEntry.fromFirstOccurrenceOf (": ", false, false);
73 const auto previousValue = headerPairs [key];
74
75 if (previousValue.isNotEmpty())
76 return previousValue + "," + currentValue;
77
78 return currentValue;
79 }();
80
81 headerPairs.set (key, value);
82 }
83 }
84
85 return headerPairs;
86}
87
88void WebInputStream::createHeadersAndPostData (const URL& aURL,
89 String& headers,
90 MemoryBlock& data,
92{
93 aURL.createHeadersAndPostData (headers, data, addParametersToBody);
94}
95
102
103} // namespace juce
static StringArray fromLines(StringRef stringToBreakUp)
Returns an array containing the lines in a given string.
A container for holding a set of strings which are keyed by another string.
The JUCE String class!
Definition juce_String.h:53
Represents a URL and has a bunch of useful functions to manipulate it.
Definition juce_URL.h:38
Used to receive callbacks for POST data send progress.
virtual bool postDataSendProgress(WebInputStream &request, int bytesSent, int totalBytes)
This method will be called periodically with updates on POST data upload progress.
An InputStream which can be used to read from a given URL.
WebInputStream & withConnectionTimeout(int timeoutInMs)
Specify the connection time-out.
~WebInputStream() override
Destructor.
WebInputStream & withExtraHeaders(const String &extraHeaders)
Add extra headers to the HTTP request.
bool setPosition(int64 wantedPos) override
Tries to move the current read position of the stream.
WebInputStream & withNumRedirectsToFollow(int numRedirects)
Specify the number of redirects to be followed.
int getStatusCode()
Returns the status code returned by the HTTP server.
bool isExhausted() override
Returns true if the stream has no more data to read.
int64 getTotalLength() override
Returns the total number of bytes available for reading in this stream.
bool connect(Listener *listener)
Wait until the first byte is ready for reading.
StringPairArray getRequestHeaders() const
Returns a StringPairArray of the request headers.
WebInputStream & withCustomRequestCommand(const String &customRequestCommand)
Override the HTTP command that is sent.
int read(void *destBuffer, int maxBytesToRead) override
Reads some data from the stream into a memory buffer.
bool isError() const
Returns true if there was an error during the connection attempt.
WebInputStream(const URL &url, bool addParametersToRequestBody)
Creates a new WebInputStream which can be used to read from a URL.
void cancel()
Will cancel a blocking read and prevent any subsequent connection attempts.
StringPairArray getResponseHeaders()
Returns a StringPairArray of response headers.
int64 getPosition() override
Returns the offset of the next byte that will be read from the stream.
JUCE Namespace.
Type unalignedPointerCast(void *ptr) noexcept
Casts a pointer to another type via void*, which suppresses the cast-align warning which sometimes ar...
Definition juce_Memory.h:88
long long int64
A platform-independent 64-bit integer type.