// 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 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.
  required string regex = 2;
}

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;
}

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;

  // ///////////////////////////////////////////////////////////////////////////
  // 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;
}
