15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @fileoverview
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * A class of server log entries.
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)'use strict';
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @suppress {duplicate} */
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var remoting = remoting || {};
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry = function() {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /** @type Object.<string, string> */ this.dict = {};
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_EVENT_NAME_ = 'event-name';
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.VALUE_EVENT_NAME_SESSION_STATE_ =
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'session-state';
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_SESSION_ID_ = 'session-id';
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_ROLE_ = 'role';
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.VALUE_ROLE_CLIENT_ = 'client';
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_SESSION_STATE_ = 'session-state';
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {remoting.ClientSession.State} state
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {string}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.getValueForSessionState = function(state) {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch(state) {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.ClientSession.State.UNKNOWN:
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'unknown';
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.ClientSession.State.CREATED:
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'created';
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.ClientSession.State.CONNECTING:
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'connecting';
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.ClientSession.State.INITIALIZING:
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'initializing';
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.ClientSession.State.CONNECTED:
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'connected';
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.ClientSession.State.CLOSED:
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'closed';
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.ClientSession.State.FAILED:
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'connection-failed';
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.ClientSession.State.CONNECTION_DROPPED:
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'connection-dropped';
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.ClientSession.State.CONNECTION_CANCELED:
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'connection-canceled';
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'undefined-' + state;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_CONNECTION_ERROR_ = 'connection-error';
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {remoting.Error} connectionError
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {string}
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.getValueForError =
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    function(connectionError) {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch(connectionError) {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.Error.NONE:
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'none';
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.Error.INVALID_ACCESS_CODE:
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'invalid-access-code';
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.Error.MISSING_PLUGIN:
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'missing_plugin';
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.Error.AUTHENTICATION_FAILED:
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'authentication-failed';
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.Error.HOST_IS_OFFLINE:
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'host-is-offline';
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.Error.INCOMPATIBLE_PROTOCOL:
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'incompatible-protocol';
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.Error.BAD_PLUGIN_VERSION:
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'bad-plugin-version';
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.Error.NETWORK_FAILURE:
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'network-failure';
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.Error.HOST_OVERLOAD:
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'host-overload';
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.Error.P2P_FAILURE:
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'p2p-failure';
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.Error.UNEXPECTED:
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'unexpected';
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 'unknown-' + connectionError;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_SESSION_DURATION_ = 'session-duration';
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.VALUE_EVENT_NAME_CONNECTION_STATISTICS_ =
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "connection-statistics";
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_VIDEO_BANDWIDTH_ = "video-bandwidth";
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_CAPTURE_LATENCY_ = "capture-latency";
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_ENCODE_LATENCY_ = "encode-latency";
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_DECODE_LATENCY_ = "decode-latency";
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_RENDER_LATENCY_ = "render-latency";
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_ROUNDTRIP_LATENCY_ = "roundtrip-latency";
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_OS_NAME_ = 'os-name';
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.VALUE_OS_NAME_WINDOWS_ = 'Windows';
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.VALUE_OS_NAME_LINUX_ = 'Linux';
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.VALUE_OS_NAME_MAC_ = 'Mac';
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.VALUE_OS_NAME_CHROMEOS_ = 'ChromeOS';
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_OS_VERSION_ = 'os-version';
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_CPU_ = 'cpu';
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_BROWSER_VERSION_ = 'browser-version';
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_WEBAPP_VERSION_ = 'webapp-version';
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.VALUE_EVENT_NAME_SESSION_ID_OLD_ = 'session-id-old';
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.VALUE_EVENT_NAME_SESSION_ID_NEW_ = 'session-id-new';
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.KEY_MODE_ = 'mode';
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.VALUE_MODE_IT2ME_ = 'it2me';
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.VALUE_MODE_ME2ME_ = 'me2me';
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @private */
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.VALUE_MODE_UNKNOWN_ = 'unknown';
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Sets one field in this log entry.
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} key
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} value
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.prototype.set = function(key, value) {
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  this.dict[key] = value;
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Converts this object into an XML stanza.
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {string}
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.prototype.toStanza = function() {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var stanza = '<gr:entry ';
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (var key in this.dict) {
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    stanza += escape(key) + '="' + escape(this.dict[key]) + '" ';
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stanza += '/>';
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return stanza;
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Prints this object on the debug log.
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {number} indentLevel the indentation level
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.prototype.toDebugLog = function(indentLevel) {
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /** @type Array.<string> */ var fields = [];
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (var key in this.dict) {
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fields.push(key + ': ' + this.dict[key]);
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  console.log(Array(indentLevel+1).join("  ") + fields.join(', '));
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Makes a log entry for a change of client session state.
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {remoting.ClientSession.State} state
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {remoting.Error} connectionError
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {remoting.ClientSession.Mode} mode
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {remoting.ServerLogEntry}
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.makeClientSessionStateChange = function(state,
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    connectionError, mode) {
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var entry = new remoting.ServerLogEntry();
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry.set(remoting.ServerLogEntry.KEY_ROLE_,
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            remoting.ServerLogEntry.VALUE_ROLE_CLIENT_);
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry.set(remoting.ServerLogEntry.KEY_EVENT_NAME_,
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            remoting.ServerLogEntry.VALUE_EVENT_NAME_SESSION_STATE_);
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry.set(remoting.ServerLogEntry.KEY_SESSION_STATE_,
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            remoting.ServerLogEntry.getValueForSessionState(state));
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (connectionError != remoting.Error.NONE) {
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    entry.set(remoting.ServerLogEntry.KEY_CONNECTION_ERROR_,
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              remoting.ServerLogEntry.getValueForError(connectionError));
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry.addModeField(mode);
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return entry;
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a session duration to a log entry.
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {number} sessionDuration
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.prototype.addSessionDurationField = function(
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sessionDuration) {
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  this.set(remoting.ServerLogEntry.KEY_SESSION_DURATION_,
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      sessionDuration.toString());
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Makes a log entry for a set of connection statistics.
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns null if all the statistics were zero.
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {remoting.StatsAccumulator} statsAccumulator
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {remoting.ClientSession.Mode} mode
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {?remoting.ServerLogEntry}
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.makeStats = function(statsAccumulator, mode) {
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var entry = new remoting.ServerLogEntry();
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry.set(remoting.ServerLogEntry.KEY_ROLE_,
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            remoting.ServerLogEntry.VALUE_ROLE_CLIENT_);
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry.set(remoting.ServerLogEntry.KEY_EVENT_NAME_,
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            remoting.ServerLogEntry.VALUE_EVENT_NAME_CONNECTION_STATISTICS_);
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry.addModeField(mode);
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var nonZero = false;
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  nonZero |= entry.addStatsField(
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remoting.ServerLogEntry.KEY_VIDEO_BANDWIDTH_,
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remoting.ClientSession.STATS_KEY_VIDEO_BANDWIDTH, statsAccumulator);
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  nonZero |= entry.addStatsField(
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remoting.ServerLogEntry.KEY_CAPTURE_LATENCY_,
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remoting.ClientSession.STATS_KEY_CAPTURE_LATENCY, statsAccumulator);
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  nonZero |= entry.addStatsField(
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remoting.ServerLogEntry.KEY_ENCODE_LATENCY_,
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remoting.ClientSession.STATS_KEY_ENCODE_LATENCY, statsAccumulator);
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  nonZero |= entry.addStatsField(
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remoting.ServerLogEntry.KEY_DECODE_LATENCY_,
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remoting.ClientSession.STATS_KEY_DECODE_LATENCY, statsAccumulator);
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  nonZero |= entry.addStatsField(
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remoting.ServerLogEntry.KEY_RENDER_LATENCY_,
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remoting.ClientSession.STATS_KEY_RENDER_LATENCY, statsAccumulator);
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  nonZero |= entry.addStatsField(
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remoting.ServerLogEntry.KEY_ROUNDTRIP_LATENCY_,
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remoting.ClientSession.STATS_KEY_ROUNDTRIP_LATENCY, statsAccumulator);
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (nonZero) {
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return entry;
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return null;
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds one connection statistic to a log entry.
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} entryKey
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} statsKey
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {remoting.StatsAccumulator} statsAccumulator
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {boolean} whether the statistic is non-zero
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.prototype.addStatsField = function(
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    entryKey, statsKey, statsAccumulator) {
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var val = statsAccumulator.calcMean(statsKey);
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  this.set(entryKey, val.toFixed(2));
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return (val != 0);
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Makes a log entry for a "this session ID is old" event.
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} sessionId
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {remoting.ClientSession.Mode} mode
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {remoting.ServerLogEntry}
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.makeSessionIdOld = function(sessionId, mode) {
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var entry = new remoting.ServerLogEntry();
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry.set(remoting.ServerLogEntry.KEY_ROLE_,
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            remoting.ServerLogEntry.VALUE_ROLE_CLIENT_);
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry.set(remoting.ServerLogEntry.KEY_EVENT_NAME_,
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            remoting.ServerLogEntry.VALUE_EVENT_NAME_SESSION_ID_OLD_);
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry.addSessionIdField(sessionId);
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry.addModeField(mode);
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return entry;
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Makes a log entry for a "this session ID is new" event.
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} sessionId
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {remoting.ClientSession.Mode} mode
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {remoting.ServerLogEntry}
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.makeSessionIdNew = function(sessionId, mode) {
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var entry = new remoting.ServerLogEntry();
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry.set(remoting.ServerLogEntry.KEY_ROLE_,
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            remoting.ServerLogEntry.VALUE_ROLE_CLIENT_);
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry.set(remoting.ServerLogEntry.KEY_EVENT_NAME_,
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            remoting.ServerLogEntry.VALUE_EVENT_NAME_SESSION_ID_NEW_);
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry.addSessionIdField(sessionId);
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  entry.addModeField(mode);
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return entry;
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a session ID field to this log entry.
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} sessionId
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.prototype.addSessionIdField = function(sessionId) {
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  this.set(remoting.ServerLogEntry.KEY_SESSION_ID_, sessionId);
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds fields describing the host to this log entry.
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.prototype.addHostFields = function() {
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var host = remoting.ServerLogEntry.getHostData();
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (host) {
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (host.os_name.length > 0) {
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.set(remoting.ServerLogEntry.KEY_OS_NAME_, host.os_name);
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (host.os_version.length > 0) {
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.set(remoting.ServerLogEntry.KEY_OS_VERSION_, host.os_version);
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (host.cpu.length > 0) {
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.set(remoting.ServerLogEntry.KEY_CPU_, host.cpu);
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Extracts host data from the userAgent string.
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {{os_name:string, os_version:string, cpu:string} | null}
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.getHostData = function() {
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return remoting.ServerLogEntry.extractHostDataFrom(navigator.userAgent);
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Extracts host data from the given userAgent string.
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} s
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {{os_name:string, os_version:string, cpu:string} | null}
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.extractHostDataFrom = function(s) {
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sample userAgent strings:
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 ' +
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   '(KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2'
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.8 ' +
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   '(KHTML, like Gecko) Chrome/17.0.933.0 Safari/535.8'
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.1 ' +
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   '(KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1'
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // 'Mozilla/5.0 (X11; CrOS i686 14.811.154) AppleWebKit/535.1 ' +
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //   '(KHTML, like Gecko) Chrome/14.0.835.204 Safari/535.1'
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var match = new RegExp('Windows NT ([0-9\\.]*)').exec(s);
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (match && (match.length >= 2)) {
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return {
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'os_name': remoting.ServerLogEntry.VALUE_OS_NAME_WINDOWS_,
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'os_version': match[1],
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'cpu': ''
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  match = new RegExp('Linux ([a-zA-Z0-9_]*)').exec(s);
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (match && (match.length >= 2)) {
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return {
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'os_name': remoting.ServerLogEntry.VALUE_OS_NAME_LINUX_,
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'os_version' : '',
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'cpu': match[1]
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  match = new RegExp('([a-zA-Z]*) Mac OS X ([0-9_]*)').exec(s);
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (match && (match.length >= 3)) {
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return {
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'os_name': remoting.ServerLogEntry.VALUE_OS_NAME_MAC_,
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'os_version': match[2].replace(/_/g, '.'),
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'cpu': match[1]
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  match = new RegExp('CrOS ([a-zA-Z0-9]*) ([0-9.]*)').exec(s);
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (match && (match.length >= 3)) {
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return {
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'os_name': remoting.ServerLogEntry.VALUE_OS_NAME_CHROMEOS_,
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'os_version': match[2],
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'cpu': match[1]
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return null;
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a field specifying the browser version to this log entry.
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.prototype.addChromeVersionField = function() {
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var version = remoting.getChromeVersion();
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (version != null) {
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.set(remoting.ServerLogEntry.KEY_BROWSER_VERSION_, version);
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a field specifying the webapp version to this log entry.
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.prototype.addWebappVersionField = function() {
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var manifest = chrome.runtime.getManifest();
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (manifest && manifest.version) {
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.set(remoting.ServerLogEntry.KEY_WEBAPP_VERSION_, manifest.version);
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a field specifying the mode to this log entry.
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {remoting.ClientSession.Mode} mode
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.prototype.addModeField = function(mode) {
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  this.set(remoting.ServerLogEntry.KEY_MODE_,
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      remoting.ServerLogEntry.getModeField(mode));
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Gets the value of the mode field to be put in a log entry.
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {remoting.ClientSession.Mode} mode
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {string}
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ServerLogEntry.getModeField = function(mode) {
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch(mode) {
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.ClientSession.Mode.IT2ME:
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return remoting.ServerLogEntry.VALUE_MODE_IT2ME_;
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case remoting.ClientSession.Mode.ME2ME:
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return remoting.ServerLogEntry.VALUE_MODE_ME2ME_;
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return remoting.ServerLogEntry.VALUE_MODE_UNKNOWN_;
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)