syntax = "proto3";
option go_package = "./pb";

package pb;

import "models/model_reverse_proxy.proto";
import "models/rpc_messages.proto";

// 反向代理管理服务
service ReverseProxyService {
	// 创建反向代理
	rpc createReverseProxy (CreateReverseProxyRequest) returns (CreateReverseProxyResponse);

	// 查找反向代理
	rpc findEnabledReverseProxy (FindEnabledReverseProxyRequest) returns (FindEnabledReverseProxyResponse);

	// 查找反向代理配置
	rpc findEnabledReverseProxyConfig (FindEnabledReverseProxyConfigRequest) returns (FindEnabledReverseProxyConfigResponse);

	// 修改反向代理的调度算法
	rpc updateReverseProxyScheduling (UpdateReverseProxySchedulingRequest) returns (RPCSuccess);

	// 修改主要源站信息
	rpc updateReverseProxyPrimaryOrigins (UpdateReverseProxyPrimaryOriginsRequest) returns (RPCSuccess);

	// 修改备用源站信息
	rpc updateReverseProxyBackupOrigins (UpdateReverseProxyBackupOriginsRequest) returns (RPCSuccess);

	// 修改反向代理设置
	rpc updateReverseProxy (UpdateReverseProxyRequest) returns (RPCSuccess);
}

// 创建反向代理
message CreateReverseProxyRequest {
	bytes schedulingJSON = 1; // 可选项，调度设置 @link json:scheduling
	bytes primaryOriginsJSON = 2; // 可选项，主要源站 @link json:origin_refs
	bytes backupOriginsJSON = 3; // 可选项，备用源站 @link json:origin_refs
}

message CreateReverseProxyResponse {
	int64 reverseProxyId = 1; // 反向代理ID
}

// 查找反向代理
message FindEnabledReverseProxyRequest {
	int64 reverseProxyId = 1; // 反向代理ID
}

message FindEnabledReverseProxyResponse {
	ReverseProxy reverseProxy = 1; // 反向代理信息
}

// 查找反向代理配置
message FindEnabledReverseProxyConfigRequest {
	int64 reverseProxyId = 1; // 反向代理ID
}

message FindEnabledReverseProxyConfigResponse {
	bytes reverseProxyJSON = 1; // 反向代理配置
}

// 修改反向代理调度算法
message UpdateReverseProxySchedulingRequest {
	int64 reverseProxyId = 1; // 反向代理ID
	bytes schedulingJSON = 2; // 调度配置 @link json:scheduling
}

// 修改主要源站信息
message UpdateReverseProxyPrimaryOriginsRequest {
	int64 reverseProxyId = 1; // 反向代理ID
	bytes originsJSON = 2; // 源站配置 @link json:origin_refs
}

// 修改备用源站信息
message UpdateReverseProxyBackupOriginsRequest {
	int64 reverseProxyId = 1; // 反向代理ID
	bytes originsJSON = 2; // 源站配置 @link json:origin_refs
}

// 修改反向代理设置
message UpdateReverseProxyRequest {
	int64 reverseProxyId = 1; // 反向代理ID
	int32 requestHostType = 6; // 可选参数，回源主机名类型：0 跟随CDN域名，1跟随源站，2自定义
	string requestHost = 2; // 可选参数，自定义回源主机名
	bool requestHostExcludingPort = 15; // 可选参数，回源主机名中去除端口
	string requestURI = 3; // 可选参数，请求URI
	string stripPrefix = 4; // 可选参数，去除URI前缀
	bool autoFlush = 5; // 可选参数，自动刷新
	repeated string addHeaders = 7; // 可选参数，可以添加的请求报头
	bytes connTimeoutJSON = 8; // 可选参数，连接超时时间
	bytes readTimeoutJSON = 9; // 可选参数，读取超时时间
	bytes idleTimeoutJSON = 10; // 可选参数，空闲连接超时时间
	int32 maxConns = 11; // 可选参数，最大连接数
	int32 maxIdleConns = 12; // 可选参数，最大空闲连接数
	bytes proxyProtocolJSON = 13; // 可选参数，PROXY Protocol设置
	bool followRedirects = 14; // 可选参数，跳转跟随
	bool retry50X = 16; // 可选参数，是否启用50X重试
	bool retry40X = 17; // 可选参数，是否启用40X重试
}