Home | History | Annotate | Download | only in host
      1 // Copyright (c) 2012 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_SERVER_LOG_ENTRY_H_
      6 #define REMOTING_HOST_SERVER_LOG_ENTRY_H_
      7 
      8 #include <map>
      9 #include <string>
     10 
     11 #include "base/memory/scoped_ptr.h"
     12 #include "remoting/host/host_exit_codes.h"
     13 #include "remoting/host/host_status_sender.h"
     14 #include "remoting/protocol/transport.h"
     15 
     16 namespace buzz {
     17 class XmlElement;
     18 }  // namespace buzz
     19 
     20 namespace remoting {
     21 
     22 class ServerLogEntry {
     23  public:
     24   // The mode of a connection.
     25   enum Mode {
     26     IT2ME,
     27     ME2ME
     28   };
     29 
     30   // Constructs a log stanza. The caller should add one or more log entry
     31   // stanzas as children of this stanza, before sending the log stanza to
     32   // the remoting bot.
     33   static scoped_ptr<buzz::XmlElement> MakeStanza();
     34 
     35   // Constructs a log entry for a session state change.
     36   // Currently this is either connection or disconnection.
     37   static scoped_ptr<ServerLogEntry> MakeForSessionStateChange(bool connection);
     38 
     39   // Constructs a log entry for a heartbeat.
     40   static scoped_ptr<ServerLogEntry> MakeForHeartbeat();
     41 
     42   // Constructs a log entry for a host status message.
     43   static scoped_ptr<ServerLogEntry> MakeForHostStatus(
     44       HostStatusSender::HostStatus host_status, HostExitCodes exit_code);
     45 
     46   ~ServerLogEntry();
     47 
     48   // Adds fields describing the host to this log entry.
     49   void AddHostFields();
     50 
     51   // Adds a field describing the mode of a connection to this log entry.
     52   void AddModeField(Mode mode);
     53 
     54   // Adds a field describing connection type (direct/stun/relay).
     55   void AddConnectionTypeField(protocol::TransportRoute::RouteType type);
     56 
     57   // Converts this object to an XML stanza.
     58   scoped_ptr<buzz::XmlElement> ToStanza() const;
     59 
     60  private:
     61   typedef std::map<std::string, std::string> ValuesMap;
     62 
     63   ServerLogEntry();
     64   void Set(const std::string& key, const std::string& value);
     65 
     66   static const char* GetValueSessionState(bool connected);
     67   static const char* GetValueMode(Mode mode);
     68 
     69   ValuesMap values_map_;
     70 };
     71 
     72 }  // namespace remoting
     73 
     74 #endif
     75