http_connection.h revision b2df76ea8fec9e32f6f3718986dba0d95315b29c
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef NET_TEST_EMBEDDED_TEST_SERVER_HTTP_CONNECTION_H_
6#define NET_TEST_EMBEDDED_TEST_SERVER_HTTP_CONNECTION_H_
7
8#include "base/basictypes.h"
9#include "base/callback.h"
10#include "base/memory/ref_counted.h"
11#include "base/strings/string_piece.h"
12#include "net/test/embedded_test_server/http_request.h"
13
14namespace net {
15
16class StreamListenSocket;
17
18namespace test_server {
19
20class HttpConnection;
21class HttpResponse;
22
23// Calblack called when a request is parsed. Response should be sent
24// using HttpConnection::SendResponse() on the |connection| argument.
25typedef base::Callback<void(HttpConnection* connection,
26                            scoped_ptr<HttpRequest> request)>
27    HandleRequestCallback;
28
29// Wraps the connection socket. Accepts incoming data and sends responses.
30// If a valid request is parsed, then |callback_| is invoked.
31class HttpConnection {
32 public:
33  HttpConnection(StreamListenSocket* socket,
34                 const HandleRequestCallback& callback);
35  ~HttpConnection();
36
37  // Sends the HTTP response to the client.
38  void SendResponse(scoped_ptr<HttpResponse> response) const;
39
40 private:
41  friend class EmbeddedTestServer;
42
43  // Accepts raw chunk of data from the client. Internally, passes it to the
44  // HttpRequestParser class. If a request is parsed, then |callback_| is
45  // called.
46  void ReceiveData(const base::StringPiece& data);
47
48  scoped_refptr<StreamListenSocket> socket_;
49  const HandleRequestCallback callback_;
50  HttpRequestParser request_parser_;
51
52  DISALLOW_COPY_AND_ASSIGN(HttpConnection);
53};
54
55}  // namespace test_server
56}  // namespace net
57
58#endif  // NET_TEST_EMBEDDED_TEST_SERVER_HTTP_CONNECTION_H_
59