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/strings/string_piece.h"
11#include "net/test/embedded_test_server/http_request.h"
12
13namespace net {
14
15class StreamListenSocket;
16
17namespace test_server {
18
19class HttpConnection;
20class HttpResponse;
21
22// Calblack called when a request is parsed. Response should be sent
23// using HttpConnection::SendResponse() on the |connection| argument.
24typedef base::Callback<void(HttpConnection* connection,
25                            scoped_ptr<HttpRequest> request)>
26    HandleRequestCallback;
27
28// Wraps the connection socket. Accepts incoming data and sends responses.
29// If a valid request is parsed, then |callback_| is invoked.
30class HttpConnection {
31 public:
32  HttpConnection(scoped_ptr<StreamListenSocket> socket,
33                 const HandleRequestCallback& callback);
34  ~HttpConnection();
35
36  // Sends the HTTP response to the client.
37  void SendResponse(scoped_ptr<HttpResponse> response) const;
38
39 private:
40  friend class EmbeddedTestServer;
41
42  // Accepts raw chunk of data from the client. Internally, passes it to the
43  // HttpRequestParser class. If a request is parsed, then |callback_| is
44  // called.
45  void ReceiveData(const base::StringPiece& data);
46
47  scoped_ptr<StreamListenSocket> socket_;
48  const HandleRequestCallback callback_;
49  HttpRequestParser request_parser_;
50
51  DISALLOW_COPY_AND_ASSIGN(HttpConnection);
52};
53
54}  // namespace test_server
55}  // namespace net
56
57#endif  // NET_TEST_EMBEDDED_TEST_SERVER_HTTP_CONNECTION_H_
58