// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This protocol buffer defines the message format between the probe clients
// and the probe servers.

syntax = "proto2";

package chrome_browser_net;

// Chrome requires this.
option optimize_for = LITE_RUNTIME;

// Next available id: 10.
message ProbePacket {
  enum Type {
    UNKNOWN = 0;
    HELLO_REQUEST = 1;
    HELLO_REPLY = 2;
    PROBE_REQUEST = 3;
    PROBE_REPLY = 4;
  }

  message Header {
    required uint32 version = 1;
    optional uint32 checksum = 2;
    optional Type type = 3;
  }

  message Token {
    required uint64 timestamp_micros = 1;
    required bytes hash = 2;  // 16-byte MD5 hash value for authorization.
  }

  optional Header header = 1;
  optional Token token = 2;              // For authorization.
  // For differentiating different batches of packets.
  optional uint32 group_id = 3;
  optional uint32 packet_index = 4;      // Packet index in each batch.
  optional uint32 probe_size_bytes = 5;  // Specify the probe packet size.
  // Time duration between sending two consecutive packets.
  optional uint32 pacing_interval_micros = 6;
  // Total number of probe packets to send from the server.
  optional uint32 number_probe_packets = 7;
  optional int64 server_processing_micros = 9;
  optional bytes padding = 8;
}