package rpcpackage;

enum RpcAgentErrcode {
    RA_BAD_PROTOCOL_TYPE     = -1001;
	RA_PARSE_REQ_FAIL        = -1002;
	RA_PLAT_ENV_ERR          = -1003;
	RA_ENDPOINT_ROUTE_ERR    = -1004;
	RA_PERCENT_BLOCK         = -1005;
	RA_IDCCONAGENT_ERR       = -1006;
	RA_RPC_CALL_ERR          = -1007;
	RA_PARSE_RESP_FAIL       = -1008;
}

message RpcAgentHeader
{
	optional int32      AgentRet = 1;
}

message CallGraph
{
    required bool       isUseCallGraph      = 1 [default = false];
    required int32      IdcRommId           = 2;
    required int32      DeviceType          = 3;
    required int32      ClientVersion       = 4;
    required uint32     CgiUin              = 5;
    required uint32     CgiCmdId            = 6;
    required uint32     GraphID             = 7;
    required uint32     CallGraphNodeID     = 8;
    required uint32     GraphNodeID         = 9;
    required bytes      Svrip               = 10;
    required uint32     Svrport             = 11;
    required uint32     SvrCmdid            = 12;
    required int32      SvrRet              = 13;
    required uint32     SvrCostTimeMs       = 14;
    required int32      SvrHeaderCode       = 15;
    required int32      ClientOssId         = 16;
    required int32      ClientCmdId         = 17;
    required uint32     CallStep            = 18;
}
message Ticket
{
    required bool       isUseTicket         = 1 [default = false];
    required uint32     CgiUin              = 2;
    required bytes      DataTicket          = 3;
}

message ToolTicket
{
	required bool       isUseToolTicket     = 1 [default = false];
	required uint32     CgiUin              = 2;
	required string     ToolTicketJson      = 3;
}

enum AgUserCookieType {
    DELIVER_ONCE        = 1;
    DELIVER_CROSS_PROJ  = 2;
    DELIVER_INSIDE_PROJ = 3;
}

message AgUserCookieItem {
    optional int32            key = 1;
    optional bytes            value = 2;
    optional AgUserCookieType type = 3 [default = DELIVER_ONCE];
}

message AgUserCookie {
    repeated AgUserCookieItem items = 1;
}

message CgiInfo
{
	required uint32     CgiUin				= 1;
	required uint32     CgiCmdId            = 2;
	required uint32		SvrType				= 3;
}

message CallObj
{
	required uint64     HeaederUin          = 1;
	required int32      CmdId               = 2;
	required bool       ExistResp           = 3 ;
	required int32      iMagic              = 4;
	optional bytes      oldCookie           = 5;
}

message ExtDyeLogInfo
{
	optional int32 ClientIp					= 1;
	optional int32 ProxyIp					= 2;
}


message RpcAgentReq
{
	required bytes      BodyData            = 1;

	required CallObj    CallObjInfo         = 2;
	required string     CallModuleName      = 3;
	required string     ClientConfName      = 4;
	required int32      RouteMethod         = 5;
	required uint32     RouteKey            = 6;
	required bool       IsUdp               = 7;
	required bool       IsStrict            = 8;
	required bool       IsUseIpPort         = 10 [default = false]; //when true,then RouteMethod is useless
	optional bool       IsUseSlowTimeOut    = 11 [default = false]; //when true,use slow timeout in cli conf

	optional CallGraph  CallGraphInfo       = 21;
	optional Ticket     TicketInfo          = 22;
	optional bytes      Ip                  = 23;
	optional int32      port                = 24;
	optional CgiInfo	stCgiInfo			= 25;   //cgiinfo to dyloginfo,used in oss,percentblock,clientReject
	optional ToolTicket ToolTicketInfo      = 26;
	optional AgUserCookie UserCookie        = 27;
	optional ExtDyeLogInfo extDyeinfo		= 28;    //extdyeloginfo for user define

}

message RpcAgentResp
{
	required bytes      BodyData            = 1;

	optional CallGraph  CallGraphInfo       = 21;
	optional Ticket     TicketInfo          = 22;
}

