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.
5 #ifndef REMOTING_HOST_GNUBBY_AUTH_HANDLER_POSIX_H_
6 #define REMOTING_HOST_GNUBBY_AUTH_HANDLER_POSIX_H_
11 #include "base/macros.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "base/threading/non_thread_safe.h"
14 #include "net/base/completion_callback.h"
15 #include "net/socket/stream_socket.h"
16 #include "remoting/host/gnubby_auth_handler.h"
19 class DictionaryValue
;
23 class UnixDomainServerSocket
;
30 } // namespace protocol
34 class GnubbyAuthHandlerPosix
: public GnubbyAuthHandler
,
35 public base::NonThreadSafe
{
37 explicit GnubbyAuthHandlerPosix(protocol::ClientStub
* client_stub
);
38 ~GnubbyAuthHandlerPosix() override
;
40 size_t GetActiveSocketsMapSizeForTest() const;
42 void SetRequestTimeoutForTest(const base::TimeDelta
& timeout
);
45 typedef std::map
<int, GnubbySocket
*> ActiveSockets
;
47 // GnubbyAuthHandler interface.
48 void DeliverClientMessage(const std::string
& message
) override
;
49 void DeliverHostDataMessage(int connection_id
,
50 const std::string
& data
) const override
;
52 // Starts listening for connection.
55 // Called when a connection is accepted.
56 void OnAccepted(int result
);
58 // Called when a GnubbySocket has done reading.
59 void OnReadComplete(int connection_id
);
61 // Create socket for authorization.
62 void CreateAuthorizationSocket();
64 // Process a gnubby request.
65 void ProcessGnubbyRequest(int connection_id
, const std::string
& request_data
);
67 // Gets an active socket iterator for the connection id in |message|.
68 ActiveSockets::iterator
GetSocketForMessage(base::DictionaryValue
* message
);
70 // Send an error and closes an active socket.
71 void SendErrorAndCloseActiveSocket(const ActiveSockets::iterator
& iter
);
73 // A request timed out.
74 void RequestTimedOut(int connection_id
);
76 // Interface through which communication with the client occurs.
77 protocol::ClientStub
* client_stub_
;
79 // Socket used to listen for authorization requests.
80 scoped_ptr
<net::UnixDomainServerSocket
> auth_socket_
;
82 // A temporary holder for an accepted connection.
83 scoped_ptr
<net::StreamSocket
> accept_socket_
;
85 // The last assigned gnubby connection id.
86 int last_connection_id_
;
88 // Sockets by connection id used to process gnubbyd requests.
89 ActiveSockets active_sockets_
;
91 // Timeout used for a request.
92 base::TimeDelta request_timeout_
;
94 DISALLOW_COPY_AND_ASSIGN(GnubbyAuthHandlerPosix
);
97 } // namespace remoting
99 #endif // REMOTING_HOST_GNUBBY_AUTH_HANDLER_POSIX_H_