it2me_native_messaging_host.h revision f2477e01787aa58f445919b809d89e252beef54f
1// Copyright 2013 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_IT2ME_IT2ME_NATIVE_MESSAGING_HOST_H_
6#define REMOTING_HOST_IT2ME_IT2ME_NATIVE_MESSAGING_HOST_H_
7
8#include "base/memory/ref_counted.h"
9#include "base/memory/scoped_ptr.h"
10#include "base/memory/weak_ptr.h"
11#include "remoting/base/auto_thread_task_runner.h"
12#include "remoting/host/it2me/it2me_host.h"
13#include "remoting/host/native_messaging/native_messaging_channel.h"
14
15namespace base {
16class DictionaryValue;
17}  // namespace base
18
19namespace remoting {
20
21// Implementation of the native messaging host process.
22class It2MeNativeMessagingHost : public NativeMessagingChannel::Delegate,
23                                 public It2MeHost::Observer {
24 public:
25  typedef NativeMessagingChannel::SendMessageCallback SendMessageCallback;
26
27  It2MeNativeMessagingHost(scoped_refptr<AutoThreadTaskRunner> task_runner,
28                           scoped_ptr<It2MeHostFactory> factory);
29  virtual ~It2MeNativeMessagingHost();
30
31  // NativeMessagingChannel::Delegate interface.
32  virtual void SetSendMessageCallback(const SendMessageCallback& send_message)
33      OVERRIDE;
34  virtual void ProcessMessage(scoped_ptr<base::DictionaryValue> message)
35      OVERRIDE;
36
37  // It2MeHost::Observer implementation
38  virtual void OnClientAuthenticated(const std::string& client_username)
39      OVERRIDE;
40  virtual void OnStoreAccessCode(const std::string& access_code,
41                                 base::TimeDelta access_code_lifetime) OVERRIDE;
42  virtual void OnNatPolicyChanged(bool nat_traversal_enabled) OVERRIDE;
43  virtual void OnStateChanged(It2MeHostState state) OVERRIDE;
44
45  static void ShutDownHost(NativeMessagingChannel::Delegate* delegate) {
46    It2MeNativeMessagingHost* host =
47        static_cast<It2MeNativeMessagingHost*>(delegate);
48    host->ShutDown();
49  }
50
51  static std::string HostStateToString(It2MeHostState host_state);
52
53 private:
54  // These "Process.." methods handle specific request types. The |response|
55  // dictionary is pre-filled by ProcessMessage() with the parts of the
56  // response already known ("id" and "type" fields).
57  void ProcessHello(const base::DictionaryValue& message,
58                    scoped_ptr<base::DictionaryValue> response);
59  void ProcessConnect(const base::DictionaryValue& message,
60                      scoped_ptr<base::DictionaryValue> response);
61  void ProcessDisconnect(const base::DictionaryValue& message,
62                         scoped_ptr<base::DictionaryValue> response);
63  void SendErrorAndExit(scoped_ptr<base::DictionaryValue> response,
64                        const std::string& description);
65
66  scoped_refptr<AutoThreadTaskRunner> task_runner();
67
68  void ShutDown();
69
70  scoped_ptr<It2MeHostFactory> factory_;
71  scoped_ptr<ChromotingHostContext> host_context_;
72  scoped_refptr<It2MeHost> it2me_host_;
73  SendMessageCallback send_message_;
74
75  // Cached, read-only copies of |it2me_host_| session state.
76  It2MeHostState state_;
77  std::string access_code_;
78  base::TimeDelta access_code_lifetime_;
79  std::string client_username_;
80
81  // IT2Me Talk server configuration used by |it2me_host_| to connect.
82  XmppSignalStrategy::XmppServerConfig xmpp_server_config_;
83
84  // Chromoting Bot JID used by |it2me_host_| to register the host.
85  std::string directory_bot_jid_;
86
87  base::WeakPtr<It2MeNativeMessagingHost> weak_ptr_;
88  base::WeakPtrFactory<It2MeNativeMessagingHost> weak_factory_;
89
90  DISALLOW_COPY_AND_ASSIGN(It2MeNativeMessagingHost);
91};
92
93}  // namespace remoting
94
95#endif  // REMOTING_HOST_IT2ME_IT2ME_NATIVE_MESSAGING_HOST_H_
96