117 lines
4.2 KiB
C
117 lines
4.2 KiB
C
#include "protocol_constants.h"
|
|
#include "protocol_tree.h"
|
|
#include "protocol_tree_internal.h"
|
|
#include "protocol.h"
|
|
|
|
|
|
void tree_server_slp(proto_tree *packet_tree, tvbuff_t *tvb, packet_info *pinfo _U_, const void *data, guint length){
|
|
uint32_t varint;
|
|
int8_t varlen;
|
|
varlen=VarIntToUint(data, &varint, length);//PacketID
|
|
if(varlen>0){
|
|
proto_item_append_text(proto_tree_get_parent(proto_tree_get_parent_tree(packet_tree)), ", PID: 0x%X", varint);
|
|
proto_tree_add_uint(packet_tree, hf_protocol_packetid_sb_slp, tvb, 0, varlen, varint);
|
|
}
|
|
}
|
|
void tree_client_slp(proto_tree *packet_tree, tvbuff_t *tvb, packet_info *pinfo _U_, const void *data, guint length){
|
|
guint readed;
|
|
uint32_t varint;
|
|
int8_t varlen;
|
|
readed=varlen=VarIntToUint(data, &varint, length);//PacketID
|
|
if(varlen>0){
|
|
proto_item_append_text(proto_tree_get_parent(proto_tree_get_parent_tree(packet_tree)), ", PID: 0x%X", varint);
|
|
proto_tree_add_uint(packet_tree, hf_protocol_packetid_cb_slp, tvb, 0, varlen, varint);
|
|
switch(varint){
|
|
case 0x00:
|
|
varlen=VarIntToUint(data+readed, &varint, length-readed);//String length
|
|
proto_tree_add_uint(packet_tree, hf_string_length, tvb, readed, varlen, varint);
|
|
readed+=varlen;
|
|
|
|
gchar *addr=wmem_alloc(pinfo->pool, varint+1);
|
|
memcpy(addr, data+readed, varint);
|
|
addr[varint]=0x00;
|
|
readed+=varint;
|
|
|
|
proto_item_set_text(
|
|
proto_tree_add_item(packet_tree, hf_server_address, tvb, readed-varint, varint+2, FALSE),
|
|
"Response: %s:%hu", addr, g_ntohs(*(uint16_t*)(data+readed)));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void tree_server_login(proto_tree *packet_tree, tvbuff_t *tvb, packet_info *pinfo, const void *data, guint length){
|
|
guint readed;
|
|
uint32_t varint;
|
|
int8_t varlen;
|
|
readed=varlen=VarIntToUint(data, &varint, length);//PacketID
|
|
if(varlen>0){
|
|
proto_item_append_text(proto_tree_get_parent(proto_tree_get_parent_tree(packet_tree)), ", PID: 0x%X", varint);
|
|
proto_tree_add_uint(packet_tree, hf_protocol_packetid_sb_login, tvb, 0, varlen, varint);
|
|
switch(varint){
|
|
case PID_SB_LOGIN_START:
|
|
STR_TO_TREE(hf_player_name);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
void tree_client_login(proto_tree *packet_tree, tvbuff_t *tvb, packet_info *pinfo, const void *data, guint length){
|
|
guint readed;
|
|
uint32_t varint;
|
|
int8_t varlen;
|
|
readed=varlen=VarIntToUint(data, &varint, length);//PacketID
|
|
if(varlen>0){
|
|
proto_item_append_text(proto_tree_get_parent(proto_tree_get_parent_tree(packet_tree)), ", PID: 0x%X", varint);
|
|
proto_tree_add_uint(packet_tree, hf_protocol_packetid_cb_login, tvb, 0, varlen, varint);
|
|
switch(varint){
|
|
case PID_CB_LOGIN_SUCCESS:
|
|
varlen=VarIntToUint(data+readed, &varint, length);//String length
|
|
|
|
STR_TO_TREE(hf_uuid);
|
|
|
|
STR_TO_TREE(hf_player_name);
|
|
break;
|
|
case PID_CB_LOGIN_SET_COMPRESSION:
|
|
varlen=VarIntToUint(data+readed, &varint, length);//Threshold
|
|
proto_tree_add_int(packet_tree, hf_compression_trxld, tvb, readed, varlen, (int32_t)varint);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void tree_server_handshake(proto_tree *packet_tree, tvbuff_t *tvb, packet_info *pinfo _U_, const void *data, guint length){
|
|
guint readed;
|
|
uint32_t varint;
|
|
int8_t varlen;
|
|
readed=varlen=VarIntToUint(data, &varint, length);//PacketID
|
|
if(varlen>0){
|
|
proto_item_append_text(proto_tree_get_parent(proto_tree_get_parent_tree(packet_tree)), ", PID: 0x%X", varint);
|
|
proto_tree_add_uint(packet_tree, hf_protocol_packetid_sb_hs, tvb, 0, varlen, varint);
|
|
switch(varint){
|
|
case 0x00:
|
|
varlen=VarIntToUint(data+readed, &varint, length-readed);//Protocol version
|
|
proto_tree_add_uint(packet_tree, hf_protocol_version, tvb, readed, varlen, varint);
|
|
readed+=varlen;
|
|
|
|
varlen=VarIntToUint(data+readed, &varint, length-readed);//String length
|
|
proto_tree_add_uint(packet_tree, hf_string_length, tvb, readed, varlen, varint);
|
|
readed+=varlen;
|
|
|
|
gchar *addr=wmem_alloc(pinfo->pool, varint+1);
|
|
memcpy(addr, data+readed, varint);
|
|
addr[varint]=0x00;
|
|
readed+=varint;
|
|
|
|
proto_item_set_text(
|
|
proto_tree_add_item(packet_tree, hf_server_address, tvb, readed-varint, varint+2, FALSE),
|
|
"Address: %s:%hu", addr, be16toh(*(uint16_t*)(data+readed)));
|
|
readed+=2;//Skip short
|
|
|
|
varlen=VarIntToUint(data+readed, &varint, length-readed);//Next State
|
|
proto_tree_add_uint(packet_tree, hf_hs_next_state, tvb, readed, varlen, varint);
|
|
break;
|
|
}
|
|
}
|
|
return;
|
|
}
|