Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / remoting / host / gnubby_auth_handler_posix.h
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 REMOTING_HOST_GNUBBY_AUTH_HANDLER_POSIX_H_
6 #define REMOTING_HOST_GNUBBY_AUTH_HANDLER_POSIX_H_
7
8 #include <map>
9 #include <string>
10
11 #include "base/memory/scoped_ptr.h"
12 #include "base/threading/non_thread_safe.h"
13 #include "net/socket/stream_listen_socket.h"
14 #include "remoting/host/gnubby_auth_handler.h"
15
16 namespace base {
17 class DictionaryValue;
18 }  // namespace base
19
20 namespace remoting {
21
22 namespace protocol {
23 class ClientStub;
24 }  // namespace protocol
25
26 class GnubbySocket;
27
28 class GnubbyAuthHandlerPosix : public GnubbyAuthHandler,
29                                public base::NonThreadSafe,
30                                public net::StreamListenSocket::Delegate {
31  public:
32   explicit GnubbyAuthHandlerPosix(protocol::ClientStub* client_stub);
33   ~GnubbyAuthHandlerPosix() override;
34
35   bool HasActiveSocketForTesting(net::StreamListenSocket* socket) const;
36   int GetConnectionIdForTesting(net::StreamListenSocket* socket) const;
37   GnubbySocket* GetGnubbySocketForTesting(
38       net::StreamListenSocket* socket) const;
39
40  private:
41   typedef std::map<int, GnubbySocket*> ActiveSockets;
42
43   // GnubbyAuthHandler interface.
44   void DeliverClientMessage(const std::string& message) override;
45   void DeliverHostDataMessage(int connection_id,
46                               const std::string& data) const override;
47
48   // StreamListenSocket::Delegate interface.
49   void DidAccept(net::StreamListenSocket* server,
50                  scoped_ptr<net::StreamListenSocket> socket) override;
51   void DidRead(net::StreamListenSocket* socket,
52                const char* data,
53                int len) override;
54   void DidClose(net::StreamListenSocket* socket) override;
55
56   // Create socket for authorization.
57   void CreateAuthorizationSocket();
58
59   // Process a gnubby request.
60   void ProcessGnubbyRequest(int connection_id, const std::string& request_data);
61
62   // Gets an active socket iterator for the connection id in |message|.
63   ActiveSockets::iterator GetSocketForMessage(base::DictionaryValue* message);
64
65   // Send an error and close an active socket.
66   void SendErrorAndCloseActiveSocket(const ActiveSockets::iterator& iter);
67
68   // A request timed out.
69   void RequestTimedOut(int connection_id);
70
71   // Interface through which communication with the client occurs.
72   protocol::ClientStub* client_stub_;
73
74   // Socket used to listen for authorization requests.
75   scoped_ptr<net::StreamListenSocket> auth_socket_;
76
77   // The last assigned gnubby connection id.
78   int last_connection_id_;
79
80   // Sockets by connection id used to process gnubbyd requests.
81   ActiveSockets active_sockets_;
82
83   DISALLOW_COPY_AND_ASSIGN(GnubbyAuthHandlerPosix);
84 };
85
86 }  // namespace remoting
87
88 #endif  // REMOTING_HOST_GNUBBY_AUTH_HANDLER_POSIX_H_