Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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