// Copyright 2011 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Common utilities used by all channel related protos.
// This is also publicly visible to all channel implementors.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package ipc.invalidation;

message ChannelMessageEncoding {
    // What kind of encoding is used for network_message
  enum MessageEncoding {
    // Raw proto encoding
    PROTOBUF_BINARY_FORMAT = 1;

    // JSPB-encoding: https://sites.google.com/a/google.com/jspblite/Home
    PROTOBUF_JSON_FORMAT = 2;
  }
}

message NetworkEndpointId {
  enum NetworkAddress {
    TEST = 1;  // A delivery service for testing

    // Low numbers reserved.
    ANDROID = 113;  // Android delivery service using c2dm / http.
  }
  optional NetworkAddress network_address = 1;
  optional bytes client_address = 2;

  // Optional. When true, the client is considered offline but the
  // client_address is maintained so that the client can potentially be reached.
  // When false or undefined, the client is considered online.
  optional bool is_offline = 3;
}
