1f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org/*
2f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *  Copyright 2006 The WebRTC Project Authors. All rights reserved.
3f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *
4f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *  Use of this source code is governed by a BSD-style license
5f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *  that can be found in the LICENSE file in the root of the source
6f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *  tree. An additional intellectual property rights grant can be found
7f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *  in the file PATENTS.  All contributing project authors may
8f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org */
10f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
11f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#ifndef _HTTPREQUEST_H_
12f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#define _HTTPREQUEST_H_
13f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
14f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/httpclient.h"
15f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/logging.h"
16f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/proxyinfo.h"
17f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/socketserver.h"
18f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/thread.h"
19f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/sslsocketfactory.h"  // Deprecated include
20f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
21f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgnamespace rtc {
22f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
23f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org///////////////////////////////////////////////////////////////////////////////
24f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org// HttpRequest
25f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org///////////////////////////////////////////////////////////////////////////////
26f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
27f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgclass FirewallManager;
28f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgclass MemoryStream;
29f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
30f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgclass HttpRequest {
31f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgpublic:
32f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  HttpRequest(const std::string &user_agent);
3367186fe00cc68cbe03aa66d17fb4962458ca96d2kwiberg@webrtc.org  ~HttpRequest();
34f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
35f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  void Send();
36f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
37f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  void set_proxy(const ProxyInfo& proxy) {
38f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org    proxy_ = proxy;
39f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  }
40f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  void set_firewall(FirewallManager * firewall) {
41f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org    firewall_ = firewall;
42f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  }
43f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
44f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  // The DNS name of the host to connect to.
45f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  const std::string& host() { return host_; }
46f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  void set_host(const std::string& host) { host_ = host; }
47f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
48f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  // The port to connect to on the target host.
49f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  int port() { return port_; }
50f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  void set_port(int port) { port_ = port; }
51f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
52f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org   // Whether the request should use SSL.
53f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  bool secure() { return secure_; }
54f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  void set_secure(bool secure) { secure_ = secure; }
55f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
56f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  // Returns the redirect when redirection occurs
57f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  const std::string& response_redirect() { return response_redirect_; }
58f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
59f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  // Time to wait on the download, in ms.  Default is 5000 (5s)
60f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  int timeout() { return timeout_; }
61f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  void set_timeout(int timeout) { timeout_ = timeout; }
62f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
63f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  // Fail redirects to allow analysis of redirect urls, etc.
64f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  bool fail_redirect() const { return fail_redirect_; }
65f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  void set_fail_redirect(bool fail_redirect) { fail_redirect_ = fail_redirect; }
66f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
67f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  HttpRequestData& request() { return client_.request(); }
68f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  HttpResponseData& response() { return client_.response(); }
69f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  HttpErrorType error() { return error_; }
70f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
71f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgprotected:
72f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  void set_error(HttpErrorType error) { error_ = error; }
73f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
74f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgprivate:
75f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  ProxyInfo proxy_;
76f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  FirewallManager * firewall_;
77f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  std::string host_;
78f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  int port_;
79f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  bool secure_;
80f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  int timeout_;
81f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  bool fail_redirect_;
82f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  HttpClient client_;
83f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  HttpErrorType error_;
84f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  std::string response_redirect_;
85f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org};
86f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
87f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org///////////////////////////////////////////////////////////////////////////////
88f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org// HttpMonitor
89f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org///////////////////////////////////////////////////////////////////////////////
90f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
91f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgclass HttpMonitor : public sigslot::has_slots<> {
92f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgpublic:
93f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  HttpMonitor(SocketServer *ss);
94f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
95f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  void reset() {
96f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org    complete_ = false;
97f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org    error_ = HE_DEFAULT;
98f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  }
99f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
100f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  bool done() const { return complete_; }
101f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  HttpErrorType error() const { return error_; }
102f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
103f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  void Connect(HttpClient* http);
104f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  void OnHttpClientComplete(HttpClient * http, HttpErrorType error);
105f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
106f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgprivate:
107f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  bool complete_;
108f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  HttpErrorType error_;
109f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org  SocketServer *ss_;
110f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org};
111f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
112f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org///////////////////////////////////////////////////////////////////////////////
113f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
114f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org}  // namespace rtc_
115f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org
116f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#endif  // _HTTPREQUEST_H_
117