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

syntax = "proto2";
option optimize_for = LITE_RUNTIME;

package shill.mobile_operator_db;

message FilterRange {
  // Numerical range to filter a value.
  required uint64 start = 1;
  required uint64 end = 2;
}

message Filter {
  // A filter can be one of the following types.
  enum Type {
    IMSI = 1;
    ICCID = 2;
    SID = 3;
    OPERATOR_NAME = 4;
    MCCMNC = 5;
  };
  required Type type = 1;
  // A regular expression specifying the values that are *accepted* by this
  // filter. The field to be tested is chosen by the |type|.
  // The regular expression should be specified as an extended POSIX regular
  // expression.
  optional string regex = 2;
  // Rather than a regular expression, the filter can be expressed by one
  // or several numerical ranges.
  // The value will be accepted if start <= value <= end for one of the ranges.
  repeated FilterRange range = 3;
}

message LocalizedName {
  required string name = 1;
  // Language is specified with two letter language codes. See xml:lang.
  // If missing, language is assumed to be "en".
  optional string language = 2;
}

message MobileAPN {
  required string apn = 1;
  repeated LocalizedName localized_name = 3;
  optional string gateway = 4;
  optional string username = 5;
  optional string password = 6;
  repeated string dns = 7;

  enum Authentication {
    DEFAULT = 0;
    PAP = 1;
    CHAP = 2;
  }
  optional Authentication authentication = 8;
  optional bool is_attach_apn = 9 [default = false];

  enum IpType {
    UNKNOWN = 0;
    IPV4 = 1;
    IPV6 = 2;
    IPV4V6 = 3;
  }
  optional IpType ip_type = 10;
}

message OnlinePortal {
  enum Method {
    GET = 1;
    POST = 2;
  }
  // Some OnlinePortals are only valid for a restricted set of SIDs/MCCMNCs etc.
  // Use this filter to restrict when the OnlinePortal is valid.
  // The OnlinePortal is assumed to be valid if the filter is not provided.
  optional Filter olp_filter = 1;
  required Method method = 2;
  required string url = 3;
  optional string post_data = 4;
}

message Data {
  // A unique identifier for this M[V]NO.
  required string uuid = 1;
  optional string country = 3;
  // List of localized names for this provider.
  // If provided, the first is chosen as the default.
  repeated LocalizedName localized_name = 4;
  // Indicates that this provider requires roaming and the customer is not
  // charged additional for roaming. This is particularly useful for some MVNOs.
  optional bool requires_roaming = 5 [default = false];
  repeated OnlinePortal olp = 6;
  optional int32 mtu = 7;

  // ///////////////////////////////////////////////////////////////////////////
  // GSM specific properties [21 - 40]

  // MCCMNC is the concatenation of MCC and MNC.
  // MCC is a three digit ITU E.212 Mobile Country Code (e.g. '310' or '409')
  // and MNC is a two or three digit GSM Mobile Network Code.
  repeated string mccmnc = 21;
  repeated MobileAPN mobile_apn = 22;

  // ///////////////////////////////////////////////////////////////////////////
  // CDMA specific properties [41-60]

  repeated string sid = 41;
  repeated string nid = 42;
  optional string activation_code = 43;
}

message MobileVirtualNetworkOperator {
  repeated Filter mvno_filter = 1;
  // When nested under an MNO, the data provided in an MVNO is used to augment
  // the data provided by its MNO. All provided top-level fields in
  // |MobileVirtualNetworkOperator::data| *replace* the corresponding top-level
  // fields in |MobileNetworkOperator::data|. No attempt is made to merge lists
  // etc.
  required Data data = 2;
}

message MobileNetworkOperator {
  required Data data = 1;
  repeated MobileVirtualNetworkOperator mvno = 2;
  // The database inevitably contains some duplicate MobileNetworkOperators that
  // are impossible to distinguish using MCCMNC/name. In such a case, this bool
  // may be set to pick out one of the duplicates as the intended operator.
  // Note that if you're using this property, you should DTRT, and find out why
  // there is an ambiguous entry in the database.
  // TODO(pprabhu): Add a presubmit-hook to ensure that no more than one of the
  // duplicates is earmarked.
  optional bool earmarked = 3;
}

// Top-level message.
// The Database is a single message of type |MobileOperatorDB|.
message MobileOperatorDB {
  repeated MobileNetworkOperator mno = 1;
  repeated MobileVirtualNetworkOperator mvno = 3;
}
