MCPC_dissect/protocol_tree_play.c

97 lines
3.7 KiB
C

#include "protocol.h"
#include "protocol_constants.h"
#include "protocol_tree.h"
#include "protocol_tree_internal.h"
void tree_server_play(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: %u", varint);
proto_tree_add_uint(packet_tree, hf_protocol_packetid_sb, tvb, 0, varlen, varint);
switch(varint){
case PID_SB_PLAY_RESOURCE_PACK_STAT:
varlen=VarIntToUint(data, &varint, length);
proto_tree_add_int(packet_tree, hf_resourcepack_state, tvb, readed, 1, varint);
break;
case PID_SB_PLAY_PLUGIN_MESSAGE:
STR_TO_TREE(hf_channel_name);
break;
}
}
}
void tree_client_play(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: %u", varint);
proto_tree_add_uint(packet_tree, hf_protocol_packetid_cb, tvb, 0, varlen, varint);
switch(varint){
case PID_CB_PLAY_JOIN_GAME:
proto_tree_add_int(packet_tree, hf_entity_id, tvb, readed, 4, be32toh(*(int32_t*)(data+readed)));
readed+=4;
proto_item_set_text(
proto_tree_add_item(packet_tree, proto_mcpc, tvb, readed, 1, FALSE),
"Gamemode: %hhu", *(uint8_t*)(data+readed));
readed+=1;
proto_item_set_text(
proto_tree_add_item(packet_tree, proto_mcpc, tvb, readed, 4, FALSE),
"Dimension: %d", be32toh(*(int32_t*)(data+readed)));
readed+=4;
proto_tree_add_uint(packet_tree, hf_difficulty, tvb, readed, 1, *(uint8_t*)(data+readed));
readed+=1;
proto_item_set_text(
proto_tree_add_item(packet_tree, proto_mcpc, tvb, readed, 1, FALSE),
"Max Players: %hhu", *(uint8_t*)(data+readed));
readed+=1;
CUSTOM_STR_TO_TREE("Level Type: %s");
proto_item_set_text(
proto_tree_add_item(packet_tree, proto_mcpc, tvb, readed, 1, FALSE),
"Reduced Debug Info: %s", *(uint8_t*)(data+readed) ? "true" : "false");
break;
case PID_CB_PLAY_RESPAWN:
proto_item_set_text(
proto_tree_add_item(packet_tree, proto_mcpc, tvb, readed, 4, FALSE),
"Dimension: %d", be32toh(*(int32_t*)(data+readed)));
readed+=4;
proto_tree_add_int(packet_tree, hf_difficulty, tvb, readed, 4, *(uint8_t*)data+readed);
readed+=1;
proto_item_set_text(
proto_tree_add_item(packet_tree, proto_mcpc, tvb, readed, 1, FALSE),
"Gamemode: %hhu", *(uint8_t*)(data+readed));
readed+=1;
CUSTOM_STR_TO_TREE("Level Type: %s");
break;
case PID_CB_PLAY_SERVER_DIFFICULTY:
proto_tree_add_int(packet_tree, hf_difficulty, tvb, readed, 4, *(uint8_t*)(data+readed));
readed+=1;
break;
case PID_CB_PLAY_RESOURCE_PACK_SEND:
CUSTOM_STR_TO_TREE("URL: %s");
CUSTOM_STR_TO_TREE("Hash (SHA-1): %s");
break;
case PID_CB_PLAY_CHUNK_DATA:
proto_item_set_text(
proto_tree_add_item(packet_tree, proto_mcpc, tvb, readed, 1, FALSE),
"Chunk X: %d", be32toh(*(int32_t*)(data+readed)));
readed+=4;
proto_item_set_text(
proto_tree_add_item(packet_tree, proto_mcpc, tvb, readed, 1, FALSE),
"Chunk Z: %d", be32toh(*(int32_t*)(data+readed)));
readed+=4;
proto_item_set_text(
proto_tree_add_item(packet_tree, proto_mcpc, tvb, readed, 1, FALSE),
"Ground-Up Continuous: %s", *(uint8_t*)(data+readed) ? "true" : "false");
readed+=1;
break;
case PID_CB_PLAY_PLUGIN_MESSAGE:
STR_TO_TREE(hf_channel_name);
break;
}
}
}