Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(447)

Side by Side Diff: remoting/host/host_status_sender.h

Issue 18075003: Host offline status reporting. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « remoting/host/host_exit_codes.cc ('k') | remoting/host/host_status_sender.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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_STATUS_SENDER_H_
6 #define REMOTING_HOST_STATUS_SENDER_H_
7
8 #include <string>
9
10 #include "base/compiler_specific.h"
11 #include "base/memory/ref_counted.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "remoting/base/rsa_key_pair.h"
14 #include "remoting/host/host_exit_codes.h"
15 #include "remoting/jingle_glue/signal_strategy.h"
16
17 namespace base {
18 class MessageLoopProxy;
19 } // namespace base
20
21 namespace buzz {
22 class XmlElement;
23 } // namespace buzz
24
25 namespace remoting {
26
27 class RsaKeyPair;
28 class IqSender;
29
30 // HostStatusSender sends the host status to the Chromoting Bot.
31 // Each host status stanza looks as follows:
32 //
33 // <cli:iq type="set" to="user@gmail.com/chromoting123123"
34 // id="123" xmlns:cli="jabber:client">
35 // <rem:host-status rem:hostid="0"
36 // rem:status="OFFLINE" rem:exit-code="INVALID_HOST_CONFIGURATION"
37 // xmlns:rem="google:remoting">
38 // <rem:signature rem:time="1372878097">.signature.</rem:signature>
39 // <rem:host-version>30.0.1554.0</rem:host-version>
40 // <rem:log><rem:entry cpu="x86_64" event-name="host-status"
41 // host-version="30.0.1560.0" os-name="Linux" role="host"/>
42 // </rem:log>
43 // </rem:host-status>
44 // </cli:iq>
45 //
46 // The signature is a base-64 encoded SHA-1 hash, signed with the host's
47 // private RSA key. The message being signed contains the full Jid (e.g.
48 // "user@gmail.com/chromoting123123"), the timestamp, the host status,
49 // and the exit code.
50 class HostStatusSender : SignalStrategy::Listener {
51 public:
52
53 enum HostStatus {
54 OFFLINE = 0,
55 ONLINE = 1
56 };
57
58 HostStatusSender(const std::string& host_id,
59 SignalStrategy* signal_strategy,
60 scoped_refptr<RsaKeyPair> key_pair,
61 const std::string& directory_bot_jid);
62 virtual ~HostStatusSender();
63
64 // SignalStrategy::Listener interface.
65 virtual void OnSignalStrategyStateChange(
66 SignalStrategy::State state) OVERRIDE;
67 virtual bool OnSignalStrategyIncomingStanza(
68 const buzz::XmlElement* stanza) OVERRIDE;
69
70 // APIs for sending host status XMPP messages to the chromoting bot.
71 // status: the reason (exit code) why the host is offline.
72 void SendOnlineStatus();
73 void SendOfflineStatus(HostExitCodes exit_code);
74
75 inline static const char* HostStatusToString(HostStatus host_status) {
76 return host_status_strings_[host_status];
77 }
78
79 private:
80 // Helper method for sending either an online or an offline status message.
81 void SendHostStatus(HostStatus status, HostExitCodes exit_code);
82
83 // Helper method to compose host status stanzas.
84 scoped_ptr<buzz::XmlElement> CreateHostStatusMessage(
85 HostStatus status, HostExitCodes exit_code);
86
87 // Helper method to create the signature blob used in the host status stanza.
88 scoped_ptr<buzz::XmlElement> CreateSignature(
89 HostStatus status, HostExitCodes exit_code);
90
91 std::string host_id_;
92 SignalStrategy* signal_strategy_;
93 scoped_refptr<RsaKeyPair> key_pair_;
94 std::string directory_bot_jid_;
95 scoped_ptr<IqSender> iq_sender_;
96
97 // The string representation of the HostStatus values.
98 static const char* const host_status_strings_[2];
99
100 DISALLOW_COPY_AND_ASSIGN(HostStatusSender);
101 };
102
103 } // namespace remoting
104
105 #endif // REMOTING_HOST_STATUS_SENDER_H_
OLDNEW
« no previous file with comments | « remoting/host/host_exit_codes.cc ('k') | remoting/host/host_status_sender.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698