Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===-- llvm/Support/HTTPClient.h - HTTP client library ---------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. ///
  9. /// \file
  10. /// This file contains the declarations of the HTTPClient library for issuing
  11. /// HTTP requests and handling the responses.
  12. ///
  13. //===----------------------------------------------------------------------===//
  14.  
  15. #ifndef LLVM_DEBUGINFOD_HTTPCLIENT_H
  16. #define LLVM_DEBUGINFOD_HTTPCLIENT_H
  17.  
  18. #include "llvm/Support/Error.h"
  19. #include "llvm/Support/MemoryBuffer.h"
  20.  
  21. #include <chrono>
  22.  
  23. namespace llvm {
  24.  
  25. enum class HTTPMethod { GET };
  26.  
  27. /// A stateless description of an outbound HTTP request.
  28. struct HTTPRequest {
  29.   SmallString<128> Url;
  30.   SmallVector<std::string, 0> Headers;
  31.   HTTPMethod Method = HTTPMethod::GET;
  32.   bool FollowRedirects = true;
  33.   HTTPRequest(StringRef Url);
  34. };
  35.  
  36. bool operator==(const HTTPRequest &A, const HTTPRequest &B);
  37.  
  38. /// A handler for state updates occurring while an HTTPRequest is performed.
  39. /// Can trigger the client to abort the request by returning an Error from any
  40. /// of its methods.
  41. class HTTPResponseHandler {
  42. public:
  43.   /// Processes an additional chunk of bytes of the HTTP response body.
  44.   virtual Error handleBodyChunk(StringRef BodyChunk) = 0;
  45.  
  46. protected:
  47.   ~HTTPResponseHandler();
  48. };
  49.  
  50. /// A reusable client that can perform HTTPRequests through a network socket.
  51. class HTTPClient {
  52. #ifdef LLVM_ENABLE_CURL
  53.   void *Curl = nullptr;
  54. #endif
  55.  
  56. public:
  57.   HTTPClient();
  58.   ~HTTPClient();
  59.  
  60.   static bool IsInitialized;
  61.  
  62.   /// Returns true only if LLVM has been compiled with a working HTTPClient.
  63.   static bool isAvailable();
  64.  
  65.   /// Must be called at the beginning of a program, while it is a single thread.
  66.   static void initialize();
  67.  
  68.   /// Must be called at the end of a program, while it is a single thread.
  69.   static void cleanup();
  70.  
  71.   /// Sets the timeout for the entire request, in milliseconds. A zero or
  72.   /// negative value means the request never times out.
  73.   void setTimeout(std::chrono::milliseconds Timeout);
  74.  
  75.   /// Performs the Request, passing response data to the Handler. Returns all
  76.   /// errors which occur during the request. Aborts if an error is returned by a
  77.   /// Handler method.
  78.   Error perform(const HTTPRequest &Request, HTTPResponseHandler &Handler);
  79.  
  80.   /// Returns the last received response code or zero if none.
  81.   unsigned responseCode();
  82. };
  83.  
  84. } // end namespace llvm
  85.  
  86. #endif // LLVM_DEBUGINFOD_HTTPCLIENT_H
  87.