LMMS
Loading...
Searching...
No Matches
juce_URL.h
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
26class WebInputStream;
27
28//==============================================================================
38{
39public:
40 //==============================================================================
42 URL();
43
50 URL (const String& url);
51
53 explicit URL (File localFile);
54
60 bool operator== (const URL&) const;
61 bool operator!= (const URL&) const;
62
63 //==============================================================================
72 String toString (bool includeGetParameters) const;
73
75 bool isEmpty() const noexcept;
76
78 bool isWellFormed() const;
79
84 String getDomain() const;
85
96 String getSubPath (bool includeGetParameters = false) const;
97
101 String getQueryString() const;
102
108 String getScheme() const;
109
111 bool isLocalFile() const;
112
122 File getLocalFile() const;
123
132 String getFileName() const;
133
138 int getPort() const;
139
147 JUCE_NODISCARD URL withNewDomainAndPath (const String& newFullPath) const;
148
156 JUCE_NODISCARD URL withNewSubPath (const String& newPath) const;
157
162 URL getParentURL() const;
163
176 URL getChildURL (const String& subPath) const;
177
178 //==============================================================================
189 JUCE_NODISCARD URL withParameter (const String& parameterName,
190 const String& parameterValue) const;
191
198 JUCE_NODISCARD URL withParameters (const StringPairArray& parametersToAdd) const;
199
211 JUCE_NODISCARD URL withFileToUpload (const String& parameterName,
212 const File& fileToUpload,
213 const String& mimeType) const;
214
225 JUCE_NODISCARD URL withDataToUpload (const String& parameterName,
226 const String& filename,
227 const MemoryBlock& fileContentToUpload,
228 const String& mimeType) const;
229
241
255
264 JUCE_NODISCARD URL withPOSTData (const String& postData) const;
265
274 JUCE_NODISCARD URL withPOSTData (const MemoryBlock& postData) const;
275
277 String getPostData() const { return postData.toString(); }
278
281
282 //==============================================================================
287 bool launchInDefaultBrowser() const;
288
289 //==============================================================================
293 static bool isProbablyAWebsiteURL (const String& possibleURL);
294
298 static bool isProbablyAnEmailAddress (const String& possibleEmailAddress);
299
300 //==============================================================================
302 {
303 inAddress,
304 inPostData
305 };
306
322 {
323 public:
331
332 //==============================================================================
337 JUCE_NODISCARD InputStreamOptions withProgressCallback (std::function<bool (int bytesSent, int totalBytes)> progressCallback) const;
338
344
350 JUCE_NODISCARD InputStreamOptions withConnectionTimeoutMs (int connectionTimeoutMs) const;
351
356
361
367
376
377 //==============================================================================
379 std::function<bool (int, int)> getProgressCallback() const noexcept { return progressCallback; }
386
387 private:
388 //==============================================================================
390
391 std::function<bool (int, int)> progressCallback = nullptr;
395 int* statusCode = nullptr;
398 };
399
418 std::unique_ptr<InputStream> createInputStream (const InputStreamOptions& options) const;
419
425 std::unique_ptr<OutputStream> createOutputStream() const;
426
427 //==============================================================================
428 class DownloadTask;
429
432 {
433 virtual ~DownloadTaskListener() = default;
434
438 virtual void finished (DownloadTask* task, bool success) = 0;
439
444 virtual void progress (DownloadTask* task, int64 bytesDownloaded, int64 totalLength);
445 };
446
451 {
452 public:
456 bool usePost = false;
457
460
469
472
475
476 private:
477 template <typename Member, typename Value>
479 {
480 auto copy = *this;
481 copy.*member = std::forward<Value> (value);
482 return copy;
483 }
484 };
485
491 {
492 public:
494
498 virtual ~DownloadTask();
499
505
508
510 bool isFinished() const { return finished; }
511
518 int statusCode() const { return httpCode; }
519
521 inline bool hadError() const { return error; }
522
525
526 protected:
528 bool finished = false, error = false;
529 int httpCode = -1;
531
533
534 private:
535 friend class URL;
536 static std::unique_ptr<DownloadTask> createFallbackDownloader (const URL&, const File&, const DownloadTaskOptions&);
537
538 public:
539 #if JUCE_IOS
541 static void juce_iosURLSessionNotify (const String&);
542 #endif
543
544 private:
546 };
547
549 [[deprecated ("Use the overload with a DownloadTaskOptions argument instead")]]
550 std::unique_ptr<DownloadTask> downloadToFile (const File& targetLocation,
551 String extraHeaders = String(),
552 DownloadTaskListener* listener = nullptr,
553 bool usePostCommand = false);
554
564 std::unique_ptr<DownloadTask> downloadToFile (const File& targetLocation,
565 const DownloadTaskOptions& options);
566
567 //==============================================================================
582 bool readEntireBinaryStream (MemoryBlock& destData,
583 bool usePostCommand = false) const;
584
600 String readEntireTextStream (bool usePostCommand = false) const;
601
615 std::unique_ptr<XmlElement> readEntireXmlStream (bool usePostCommand = false) const;
616
617 //==============================================================================
636 static String addEscapeChars (const String& stringToAddEscapeCharsTo,
637 bool isParameter,
638 bool roundBracketsAreLegal = true);
639
649 static String removeEscapeChars (const String& stringToRemoveEscapeCharsFrom);
650
656 static URL createWithoutParsing (const String& url);
657
658 //==============================================================================
659 #ifndef DOXYGEN
660 using OpenStreamProgressCallback = bool (void* context, int bytesSent, int totalBytes);
661
666 [[deprecated ("New code should use the method which takes an InputStreamOptions argument instead.")]]
667 std::unique_ptr<InputStream> createInputStream (bool doPostLikeRequest,
668 OpenStreamProgressCallback* progressCallback = nullptr,
669 void* progressCallbackContext = nullptr,
670 String extraHeaders = {},
671 int connectionTimeOutMs = 0,
672 StringPairArray* responseHeaders = nullptr,
673 int* statusCode = nullptr,
674 int numRedirectsToFollow = 5,
675 String httpRequestCmd = {}) const;
676 #endif
677
678private:
679 //==============================================================================
680 #if JUCE_IOS
681 struct Bookmark : public ReferenceCountedObject
682 {
683 using Ptr = ReferenceCountedObjectPtr<Bookmark>;
684
685 Bookmark (void*);
686 ~Bookmark();
687
688 void* data;
689 };
690
691 Bookmark::Ptr bookmark;
692
693 friend void setURLBookmark (URL&, void*);
694 friend void* getURLBookmark (URL&);
695 #endif
696
697 //==============================================================================
699 {
700 Upload (const String&, const String&, const String&, const File&, MemoryBlock*);
703 std::unique_ptr<MemoryBlock> data;
704
706 };
707
708 //==============================================================================
709 friend class WebInputStream;
710
711 URL (const String&, int);
712 void init();
713 void addParameter (const String&, const String&);
714 bool hasBodyDataToSend() const;
715 void createHeadersAndPostData (String&, MemoryBlock&, bool) const;
716 URL withUpload (Upload*) const;
717
718 static ParameterHandling toHandling (bool);
719 static File fileFromFileSchemeURL (const URL&);
720 String getDomainInternal (bool) const;
721
722 //==============================================================================
726
728
729 //==============================================================================
731};
732
733} // namespace juce
#define copy(x)
Definition ADnoteParameters.cpp:1011
#define noexcept
Definition DistrhoDefines.h:72
Definition juce_File.h:45
Definition juce_MemoryBlock.h:33
Definition juce_ReferenceCountedArray.h:51
Definition juce_StringArray.h:35
Definition juce_String.h:53
Definition juce_StringPairArray.h:35
Definition juce_URL.h:491
bool finished
Definition juce_URL.h:528
DownloadTaskListener Listener
Definition juce_URL.h:493
bool hadError() const
Definition juce_URL.h:521
int64 contentLength
Definition juce_URL.h:527
friend class URL
Definition juce_URL.h:535
int64 getLengthDownloaded() const
Definition juce_URL.h:507
int httpCode
Definition juce_URL.h:529
File targetLocation
Definition juce_URL.h:530
int64 downloaded
Definition juce_URL.h:527
bool error
Definition juce_URL.h:528
bool isFinished() const
Definition juce_URL.h:510
File getTargetLocation() const
Definition juce_URL.h:524
int statusCode() const
Definition juce_URL.h:518
int64 getTotalLength() const
Definition juce_URL.h:504
static std::unique_ptr< DownloadTask > createFallbackDownloader(const URL &, const File &, const DownloadTaskOptions &)
Definition juce_URL.h:451
String extraHeaders
Definition juce_URL.h:453
String sharedContainer
Definition juce_URL.h:454
JUCE_NODISCARD auto withUsePost(bool value) const
Definition juce_URL.h:474
JUCE_NODISCARD auto withExtraHeaders(String value) const
Definition juce_URL.h:459
DownloadTaskListener * listener
Definition juce_URL.h:455
JUCE_NODISCARD DownloadTaskOptions with(Member &&member, Value &&value) const
Definition juce_URL.h:478
JUCE_NODISCARD auto withListener(DownloadTaskListener *value) const
Definition juce_URL.h:471
JUCE_NODISCARD auto withSharedContainer(String value) const
Definition juce_URL.h:468
bool usePost
Definition juce_URL.h:456
Definition juce_URL.h:322
std::function< bool(int, int)> progressCallback
Definition juce_URL.h:391
const ParameterHandling parameterHandling
Definition juce_URL.h:389
int getNumRedirectsToFollow() const noexcept
Definition juce_URL.h:384
String extraHeaders
Definition juce_URL.h:392
int * statusCode
Definition juce_URL.h:395
JUCE_NODISCARD InputStreamOptions withExtraHeaders(const String &extraHeaders) const
Definition juce_URL.cpp:574
int connectionTimeOutMs
Definition juce_URL.h:393
String getHttpRequestCmd() const noexcept
Definition juce_URL.h:385
JUCE_NODISCARD InputStreamOptions withResponseHeaders(StringPairArray *responseHeaders) const
Definition juce_URL.cpp:584
JUCE_NODISCARD InputStreamOptions withStatusCode(int *statusCode) const
Definition juce_URL.cpp:589
std::function< bool(int, int)> getProgressCallback() const noexcept
Definition juce_URL.h:379
JUCE_NODISCARD InputStreamOptions withNumRedirectsToFollow(int numRedirectsToFollow) const
Definition juce_URL.cpp:594
int numRedirectsToFollow
Definition juce_URL.h:396
JUCE_NODISCARD InputStreamOptions withConnectionTimeoutMs(int connectionTimeoutMs) const
Definition juce_URL.cpp:579
ParameterHandling getParameterHandling() const noexcept
Definition juce_URL.h:378
StringPairArray * getResponseHeaders() const noexcept
Definition juce_URL.h:382
String httpRequestCmd
Definition juce_URL.h:397
int getConnectionTimeoutMs() const noexcept
Definition juce_URL.h:381
String getExtraHeaders() const noexcept
Definition juce_URL.h:380
InputStreamOptions(ParameterHandling parameterHandling)
Definition juce_URL.cpp:567
JUCE_NODISCARD InputStreamOptions withProgressCallback(std::function< bool(int bytesSent, int totalBytes)> progressCallback) const
Definition juce_URL.cpp:569
JUCE_NODISCARD InputStreamOptions withHttpRequestCmd(const String &httpRequestCmd) const
Definition juce_URL.cpp:599
StringPairArray * responseHeaders
Definition juce_URL.h:394
int * getStatusCode() const noexcept
Definition juce_URL.h:383
Definition juce_URL.h:38
JUCE_NODISCARD URL withParameter(const String &parameterName, const String &parameterValue) const
Definition juce_URL.cpp:667
static URL createWithoutParsing(const String &url)
Definition juce_URL.cpp:100
File getLocalFile() const
Definition juce_URL.cpp:255
bool isWellFormed() const
Definition juce_URL.cpp:213
bool readEntireBinaryStream(MemoryBlock &destData, bool usePostCommand=false) const
Definition juce_URL.cpp:636
int getPort() const
Definition juce_URL.cpp:300
URL withUpload(Upload *) const
Definition juce_URL.cpp:705
JUCE_NODISCARD URL withDataToUpload(const String &parameterName, const String &filename, const MemoryBlock &fileContentToUpload, const String &mimeType) const
Definition juce_URL.cpp:724
String getFileName() const
Definition juce_URL.cpp:260
URL getChildURL(const String &subPath) const
Definition juce_URL.cpp:334
static String removeEscapeChars(const String &stringToRemoveEscapeCharsFrom)
Definition juce_URL.cpp:732
friend class WebInputStream
Definition juce_URL.h:709
static String addEscapeChars(const String &stringToAddEscapeCharsTo, bool isParameter, bool roundBracketsAreLegal=true)
Definition juce_URL.cpp:761
ParameterHandling
Definition juce_URL.h:302
String toString(bool includeGetParameters) const
Definition juce_URL.cpp:200
std::unique_ptr< OutputStream > createOutputStream() const
Definition juce_URL.cpp:620
String getSubPath(bool includeGetParameters=false) const
Definition juce_URL.cpp:224
URL getParentURL() const
Definition juce_URL.cpp:327
String getDomainInternal(bool) const
Definition juce_URL.cpp:430
String getQueryString() const
Definition juce_URL.cpp:236
ReferenceCountedArray< Upload > filesToUpload
Definition juce_URL.h:727
JUCE_NODISCARD URL withNewSubPath(const String &newPath) const
Definition juce_URL.cpp:314
const MemoryBlock & getPostDataAsMemoryBlock() const noexcept
Definition juce_URL.h:280
static File fileFromFileSchemeURL(const URL &)
Definition juce_URL.cpp:271
JUCE_NODISCARD URL withNewDomainAndPath(const String &newFullPath) const
Definition juce_URL.cpp:307
String getPostData() const
Definition juce_URL.h:277
String readEntireTextStream(bool usePostCommand=false) const
Definition juce_URL.cpp:650
bool isEmpty() const noexcept
Definition juce_URL.cpp:208
std::unique_ptr< InputStream > createInputStream(const InputStreamOptions &options) const
Definition juce_URL.cpp:605
const StringArray & getParameterValues() const noexcept
Definition juce_URL.h:254
std::unique_ptr< DownloadTask > downloadToFile(const File &targetLocation, String extraHeaders=String(), DownloadTaskListener *listener=nullptr, bool usePostCommand=false)
Definition juce_URL.cpp:824
bool(void *context, int bytesSent, int totalBytes) OpenStreamProgressCallback
Definition juce_URL.h:660
String getDomain() const
Definition juce_URL.cpp:219
static ParameterHandling toHandling(bool)
Definition juce_URL.cpp:266
bool isLocalFile() const
Definition juce_URL.cpp:250
void addParameter(const String &, const String &)
Definition juce_URL.cpp:194
JUCE_NODISCARD URL withFileToUpload(const String &parameterName, const File &fileToUpload, const String &mimeType) const
Definition juce_URL.cpp:717
bool hasBodyDataToSend() const
Definition juce_URL.cpp:341
JUCE_NODISCARD URL withParameters(const StringPairArray &parametersToAdd) const
Definition juce_URL.cpp:675
void createHeadersAndPostData(String &, MemoryBlock &, bool) const
Definition juce_URL.cpp:346
const StringArray & getParameterNames() const noexcept
Definition juce_URL.h:240
String url
Definition juce_URL.h:723
std::unique_ptr< XmlElement > readEntireXmlStream(bool usePostCommand=false) const
Definition juce_URL.cpp:661
StringArray parameterValues
Definition juce_URL.h:725
String getScheme() const
Definition juce_URL.cpp:244
MemoryBlock postData
Definition juce_URL.h:724
URL()
Definition juce_URL.cpp:27
StringArray parameterNames
Definition juce_URL.h:725
Definition juce_Value.h:51
static char filename[]
Definition features.c:5
static PuglViewHint int value
Definition pugl.h:1708
JSAMPIMAGE data
Definition jpeglib.h:945
#define JUCE_NODISCARD
Definition juce_CompilerSupport.h:108
#define JUCE_LEAK_DETECTOR(OwnerClass)
Definition juce_LeakedObjectDetector.h:138
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
#define JUCE_API
Definition juce_StandardHeader.h:152
Definition carla_juce.cpp:31
long long int64
Definition juce_MathsFunctions.h:54
Definition juce_URL.h:432
virtual void progress(DownloadTask *task, int64 bytesDownloaded, int64 totalLength)
virtual ~DownloadTaskListener()=default
virtual void finished(DownloadTask *task, bool success)=0
Definition juce_URL.h:699
String mimeType
Definition juce_URL.h:701
String parameterName
Definition juce_URL.h:701
Upload(const String &, const String &, const String &, const File &, MemoryBlock *)
Definition juce_URL.cpp:698
File file
Definition juce_URL.h:702
String filename
Definition juce_URL.h:701
std::unique_ptr< MemoryBlock > data
Definition juce_URL.h:703
ZCONST uch * init
Definition extract.c:2392
#define const
Definition zconf.h:137