syntax = "proto3";

package xray.app.proxyman.command;
option csharp_namespace = "Xray.App.Proxyman.Command";
option go_package = "github.com/xtls/xray-core/app/proxyman/command";
option java_package = "com.xray.app.proxyman.command";
option java_multiple_files = true;

import "common/protocol/user.proto";
import "common/serial/typed_message.proto";
import "core/config.proto";

message AddUserOperation {
  xray.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;
  xray.common.serial.TypedMessage operation = 2;
}

message AlterInboundResponse {}

message AddOutboundRequest {
  core.OutboundHandlerConfig outbound = 1;
}

message AddOutboundResponse {}

message RemoveOutboundRequest {
  string tag = 1;
}

message RemoveOutboundResponse {}

message AlterOutboundRequest {
  string tag = 1;
  xray.common.serial.TypedMessage 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 {}