Login Service Protocol¶
Packet format¶
All the packet sent and received by this service follows the following packet layout :
+0x00 : Size_Packet [BYTE]
+0x01 : Opcode_Packet [BYTE]
+0x02 : ProtoBuff_Data // Depends of the opcode
Opcodes list¶
0x01 (VerifyProtocolReq)¶
The client (WAR.exe) send this packet after the connection.
Protocol buffer message types (VerifyProtocolReq.proto) :
message VerifyProtocolReq {
required uint32 protocol_version = 1;
required uint32 product_id = 2;
required bytes client_public_key = 3;
}
You must answer with opcode 0x02 (VerifyProtocolReply).
0x02 (VerifyProtocolReply)¶
This opcode is for the answer of opcode 0x01.
Protocol buffer message types (VerifyProtocolReply.proto) :
message VerifyProtocolReply {
required ResultCode result_code = 1;
optional bytes iv1 = 2;
optional bytes iv2 = 3;
}
The result code must be RES_SUCESS, and the iv1, and iv2, can be something random like : iv1 = “x42” * 16 and iv2 = “x42” * 16.
0x05 (AuthSessionTokenReq)¶
After answering with opcode 0x02 (TODO CONFIRM ALL CASES), this opcode will be received.
Protocol buffer message types (AuthSessionTokenReq.proto) :
message AuthSessionTokenReq {
required bytes session_token = 1;
}
You must answer with opcode 0x06 (AuthSessionTokenReply).
0x06 (AuthSessionTokenReply)¶
This opcode is for the answer of opcode 0x05.
Protocol buffer message types (AuthSessionTokenReply.proto) :
message AuthSessionTokenReply {
required ResultCode result_code = 1;
}
The result code must be RES_SUCESS.
0x07 (GetCharSummaryListReq)¶
No ProtoBuff_Data for this opcode.
Answer with opcode 0x08 (GetCharSummaryListReply).
0x08 (GetCharSummaryListReply)¶
Protocol buffer message types (GetCharSummaryListReply.proto) :
message GetCharSummaryListReply {
required ResultCode result_code = 1;
repeated CharSummary summary_list = 2;
}
CharSummary¶
Protocol buffer message types (CharSummary.proto) :
message CharSummary {
required uint32 server_id = 1;
required uint32 character_id = 2;
required int64 last_played_time = 3;
optional string xml_data = 4;
}
TODO describe
0x09 (GetClusterList)¶
No ProtoBuff_Data for this opcode.
Answer with opcode 0x0A (GetClusterListReply).
0x0A (GetClusterListReply)¶
This opcode is the answer of 0x09.
Protocol buffer message types (GetClusterListReply.proto) :
message GetClusterListReply {
required ResultCode result_code = 1;
repeated ClusterInfo cluster_list = 2;
}
ClusterInfo¶
Protocol buffer message types (ClusterInfo.proto) :
message ClusterInfo {
required uint32 cluster_id = 1;
required string cluster_name = 2;
optional string lobby_host = 3;
optional uint32 lobby_port = 4;
optional uint32 cluster_pop = 5;
optional uint32 max_cluster_pop = 6;
optional ClusterPopStatus cluster_pop_status = 7;
required uint32 language_id = 8;
required ClusterStatus cluster_status = 9;
repeated ServerInfo server_list = 10;
repeated ClusterProp property_list = 11;
}
In cluster_id put the REALM_ID, in cluster_name put REALM_NAME, in lobby host put ip address of your World Service and service port in lobby_port.
ServerInfo¶
Protocol buffer message types (ServerInfo.proto) :
message ServerInfo {
required uint32 server_id = 1;
required string server_name = 2;
}
Put REALM_ID in server_id and REALM_NAME in server_name.
ClusterProp¶
TODO
Protocol buffer message types (ClusterProp.proto) :
message ClusterProp {
required string prop_name = 1;
required string prop_value = 2;
}
And finally set the result_code to RES_SUCESS.
0x0B (MetricEventNotify)¶
Protocol buffer message types (MetricEventNotify.proto) :
message MetricEventNotify {
required uint32 event_id = 1;
optional bytes event_data = 2;
}
Don’t know how to deal with this stuff (TODO).
0x0C (GetAcctPropListReply)¶
This opcode is for the answer of opcode 0x0D.
Protocol buffer message types (GetAcctPropListReply.proto) :
message GetAcctPropListReply {
required ResultCode result_code = 1;
repeated AcctProp prop_list = 2;
}
Protocol buffer message types (AcctProp.proto) :
message AcctProp {
required uint32 property_id = 1;
required int32 property_value = 2;
}
No informations related to property_id and property_value (TODO).
You can answer just by setting the result_code to RES_SUCESS.
0x0D (GetAccountProperties)¶
Nothing related to the proto inside WAR.exe has been found so this proto is maybe wrong.
Protocol buffer message types (GetAccountProperties.proto) :
message GetAcctPropListReq {
repeated AcctProp prop_list = 1;
}
You must answer with opcode 0x0C (GetAcctPropListReply)
All data inside packet use the Google’s data interchange format [1].
References¶
[1] | https://code.google.com/p/protobuf/ |