OpenShot Audio Library | OpenShotAudio  0.6.0
juce_WebInputStream.h
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 
23 namespace juce
24 {
25 
26 //==============================================================================
32 class JUCE_API WebInputStream : public InputStream
33 {
34  public:
44  WebInputStream (const URL& url, bool addParametersToRequestBody);
45 
47  ~WebInputStream() override;
48 
57  WebInputStream& withExtraHeaders (const String& extraHeaders);
58 
69  WebInputStream& withCustomRequestCommand (const String& customRequestCommand);
70 
78  WebInputStream& withConnectionTimeout (int timeoutInMs);
79 
88  WebInputStream& withNumRedirectsToFollow (int numRedirects);
89 
90  //==============================================================================
96  class JUCE_API Listener
97  {
98  public:
100  virtual ~Listener() = default;
101 
110  virtual bool postDataSendProgress (WebInputStream& request, int bytesSent, int totalBytes);
111  };
112 
131  bool connect (Listener* listener);
132 
134  bool isError() const;
135 
137  void cancel();
138 
140  StringPairArray getRequestHeaders() const;
141 
151  StringPairArray getResponseHeaders();
152 
162  int getStatusCode();
163 
164  //==============================================================================
177  int64 getTotalLength() override;
178 
194  int read (void* destBuffer, int maxBytesToRead) override;
195 
197  bool isExhausted() override;
198 
203  int64 getPosition() override;
204 
218  bool setPosition (int64 wantedPos) override;
219 
220  private:
221  static void createHeadersAndPostData (const URL&, String&, MemoryBlock&, bool);
222  static StringPairArray parseHttpHeaders (const String&);
223 
224  class Pimpl;
225  friend class Pimpl;
226 
227  std::unique_ptr<Pimpl> pimpl;
228  bool hasCalledConnect = false;
229 
230  JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WebInputStream)
231 };
232 
233 } // namespace juce