syntax = "proto3";

package v2ray.core.app.proxyman.command;
option csharp_namespace = "V2Ray.Core.App.Proxyman.Command";
option go_package = "github.com/v2fly/v2ray-core/v5/app/proxyman/command";
option java_package = "com.v2ray.core.app.proxyman.command";
option java_multiple_files = true;

import "common/protocol/user.proto";
import "google/protobuf/any.proto";
import "common/protoext/extensions.proto";
import "config.proto";

message AddUserOperation {
  v2ray.core.common.protocol.User user = 1;
}

message RemoveUserOperation {
  string email = 1;
}

message AddInboundRequest {
  core.InboundHandlerConfig inbound = 1;
}

message AddInboundResponse {}

message RemoveInboundRequest {
  string tag = 1;
}

message RemoveInboundResponse {}

message AlterInboundRequest {
  string tag = 1;
  google.protobuf.Any operation = 2;
}

message AlterInboundResponse {}

message AddOutboundRequest {
  core.OutboundHandlerConfig outbound = 1;
}

message AddOutboundResponse {}

message RemoveOutboundRequest {
  string tag = 1;
}

message RemoveOutboundResponse {}

message AlterOutboundRequest {
  string tag = 1;
  google.protobuf.Any operation = 2;
}

message AlterOutboundResponse {}

service HandlerService {
  rpc AddInbound(AddInboundRequest) returns (AddInboundResponse) {}

  rpc RemoveInbound(RemoveInboundRequest) returns (RemoveInboundResponse) {}

  rpc AlterInbound(AlterInboundRequest) returns (AlterInboundResponse) {}

  rpc AddOutbound(AddOutboundRequest) returns (AddOutboundResponse) {}

  rpc RemoveOutbound(RemoveOutboundRequest) returns (RemoveOutboundResponse) {}

  rpc AlterOutbound(AlterOutboundRequest) returns (AlterOutboundResponse) {}
}

message Config {
  option (v2ray.core.common.protoext.message_opt).type = "grpcservice";
  option (v2ray.core.common.protoext.message_opt).short_name = "proxyman";
}
