syntax = "proto3";

package v2ray.core.common.protoext;
option csharp_namespace = "V2Ray.Core.Common.ProtoExt";
option go_package = "github.com/v2fly/v2ray-core/v5/common/protoext";
option java_package = "com.v2ray.core.common.protoext";
option java_multiple_files = true;

import "google/protobuf/descriptor.proto";

extend google.protobuf.MessageOptions {
  MessageOpt message_opt = 50000;
}

extend google.protobuf.FieldOptions {
  FieldOpt field_opt = 50000;
}

message MessageOpt{
  repeated string type = 1;
  repeated string short_name = 2;

  string transport_original_name = 86001;

  // allow_restricted_mode_load allow this config to be loaded in restricted mode
  // this is typically used when a an attacker can control the content
  bool allow_restricted_mode_load = 86002;
}

message FieldOpt{
  repeated string any_wants = 1;
  repeated string allowed_values = 2;
  repeated string allowed_value_types = 3;

  // convert_time_read_file_into read a file into another field, and clear this field during input parsing
  string convert_time_read_file_into = 4;
  // forbidden marks a boolean to be inaccessible to user
  bool forbidden = 5;
  // convert_time_resource_loading read a file, and place its resource hash into another field
  string convert_time_resource_loading = 6;
  // convert_time_parse_ip parse a string ip address, and put its binary representation into another field
  string convert_time_parse_ip = 7;
}