1// Copyright 2014 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 EXTENSIONS_BROWSER_API_SOCKETS_TCP_SERVER_SOCKETS_TCP_SERVER_API_H_
6#define EXTENSIONS_BROWSER_API_SOCKETS_TCP_SERVER_SOCKETS_TCP_SERVER_API_H_
7
8#include "extensions/browser/api/socket/socket_api.h"
9#include "extensions/common/api/sockets_tcp_server.h"
10
11namespace extensions {
12class ResumableTCPServerSocket;
13}
14
15namespace extensions {
16namespace core_api {
17
18class TCPServerSocketAsyncApiFunction : public SocketAsyncApiFunction {
19 protected:
20  virtual ~TCPServerSocketAsyncApiFunction();
21
22  virtual scoped_ptr<SocketResourceManagerInterface>
23      CreateSocketResourceManager() OVERRIDE;
24
25  ResumableTCPServerSocket* GetTcpSocket(int socket_id);
26};
27
28class SocketsTcpServerCreateFunction : public TCPServerSocketAsyncApiFunction {
29 public:
30  DECLARE_EXTENSION_FUNCTION("sockets.tcpServer.create",
31                             SOCKETS_TCP_SERVER_CREATE)
32
33  SocketsTcpServerCreateFunction();
34
35 protected:
36  virtual ~SocketsTcpServerCreateFunction();
37
38  // AsyncApiFunction:
39  virtual bool Prepare() OVERRIDE;
40  virtual void Work() OVERRIDE;
41
42 private:
43  FRIEND_TEST_ALL_PREFIXES(SocketsTcpServerUnitTest, Create);
44  scoped_ptr<sockets_tcp_server::Create::Params> params_;
45};
46
47class SocketsTcpServerUpdateFunction : public TCPServerSocketAsyncApiFunction {
48 public:
49  DECLARE_EXTENSION_FUNCTION("sockets.tcpServer.update",
50                             SOCKETS_TCP_SERVER_UPDATE)
51
52  SocketsTcpServerUpdateFunction();
53
54 protected:
55  virtual ~SocketsTcpServerUpdateFunction();
56
57  // AsyncApiFunction:
58  virtual bool Prepare() OVERRIDE;
59  virtual void Work() OVERRIDE;
60
61 private:
62  scoped_ptr<sockets_tcp_server::Update::Params> params_;
63};
64
65class SocketsTcpServerSetPausedFunction
66    : public TCPServerSocketAsyncApiFunction {
67 public:
68  DECLARE_EXTENSION_FUNCTION("sockets.tcpServer.setPaused",
69                             SOCKETS_TCP_SERVER_SETPAUSED)
70
71  SocketsTcpServerSetPausedFunction();
72
73 protected:
74  virtual ~SocketsTcpServerSetPausedFunction();
75
76  // AsyncApiFunction
77  virtual bool Prepare() OVERRIDE;
78  virtual void Work() OVERRIDE;
79
80 private:
81  scoped_ptr<sockets_tcp_server::SetPaused::Params> params_;
82  TCPServerSocketEventDispatcher* socket_event_dispatcher_;
83};
84
85class SocketsTcpServerListenFunction : public TCPServerSocketAsyncApiFunction {
86 public:
87  DECLARE_EXTENSION_FUNCTION("sockets.tcpServer.listen",
88                             SOCKETS_TCP_SERVER_LISTEN)
89
90  SocketsTcpServerListenFunction();
91
92 protected:
93  virtual ~SocketsTcpServerListenFunction();
94
95  // AsyncApiFunction:
96  virtual bool Prepare() OVERRIDE;
97  virtual void Work() OVERRIDE;
98
99 private:
100  scoped_ptr<sockets_tcp_server::Listen::Params> params_;
101  TCPServerSocketEventDispatcher* socket_event_dispatcher_;
102};
103
104class SocketsTcpServerDisconnectFunction
105    : public TCPServerSocketAsyncApiFunction {
106 public:
107  DECLARE_EXTENSION_FUNCTION("sockets.tcpServer.disconnect",
108                             SOCKETS_TCP_SERVER_DISCONNECT)
109
110  SocketsTcpServerDisconnectFunction();
111
112 protected:
113  virtual ~SocketsTcpServerDisconnectFunction();
114
115  // AsyncApiFunction:
116  virtual bool Prepare() OVERRIDE;
117  virtual void Work() OVERRIDE;
118
119 private:
120  scoped_ptr<sockets_tcp_server::Disconnect::Params> params_;
121};
122
123class SocketsTcpServerCloseFunction : public TCPServerSocketAsyncApiFunction {
124 public:
125  DECLARE_EXTENSION_FUNCTION("sockets.tcpServer.close",
126                             SOCKETS_TCP_SERVER_CLOSE)
127
128  SocketsTcpServerCloseFunction();
129
130 protected:
131  virtual ~SocketsTcpServerCloseFunction();
132
133  // AsyncApiFunction:
134  virtual bool Prepare() OVERRIDE;
135  virtual void Work() OVERRIDE;
136
137 private:
138  scoped_ptr<sockets_tcp_server::Close::Params> params_;
139};
140
141class SocketsTcpServerGetInfoFunction : public TCPServerSocketAsyncApiFunction {
142 public:
143  DECLARE_EXTENSION_FUNCTION("sockets.tcpServer.getInfo",
144                             SOCKETS_TCP_SERVER_GETINFO)
145
146  SocketsTcpServerGetInfoFunction();
147
148 protected:
149  virtual ~SocketsTcpServerGetInfoFunction();
150
151  // AsyncApiFunction:
152  virtual bool Prepare() OVERRIDE;
153  virtual void Work() OVERRIDE;
154
155 private:
156  scoped_ptr<sockets_tcp_server::GetInfo::Params> params_;
157};
158
159class SocketsTcpServerGetSocketsFunction
160    : public TCPServerSocketAsyncApiFunction {
161 public:
162  DECLARE_EXTENSION_FUNCTION("sockets.tcpServer.getSockets",
163                             SOCKETS_TCP_SERVER_GETSOCKETS)
164
165  SocketsTcpServerGetSocketsFunction();
166
167 protected:
168  virtual ~SocketsTcpServerGetSocketsFunction();
169
170  // AsyncApiFunction:
171  virtual bool Prepare() OVERRIDE;
172  virtual void Work() OVERRIDE;
173};
174
175}  // namespace core_api
176}  // namespace extensions
177
178#endif  // EXTENSIONS_BROWSER_API_SOCKETS_TCP_SERVER_SOCKETS_TCP_SERVER_API_H_
179