static void dissect_minecraft_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint8 type, guint32 offset, guint32 length) { gboolean c2s; // if (check_col(pinfo->cinfo, COL_PROTOCOL)) // col_set_str(pinfo->cinfo, COL_PROTOCOL, PROTO_TAG_MC); /* Clear out stuff in the info column */ // if(check_col(pinfo->cinfo,COL_INFO)){ // col_clear(pinfo->cinfo,COL_INFO); // } c2s = TRUE;//pinfo->match_port == pinfo->destport; // if (check_col(pinfo->cinfo, COL_INFO)) { // col_add_fstr(pinfo->cinfo, COL_INFO, "%s: %s", // c2s ? "C -> S" : "S -> C", // val_to_str(type, packettypenames, "Unknown Type:0x%02x") // ); //} if ( tree ) { mc_item = proto_tree_add_protocol_format(tree, proto_minecraft, tvb, offset, length, "MC Packet: 0x%02x \"%s\"", type, val_to_str(type, packettypenames, "Unknown")); mc_tree = proto_item_add_subtree(mc_item, ett_mc); proto_tree_add_item(mc_tree, hf_mc_type, tvb, offset, 1, FALSE); proto_tree_add_text(mc_tree, tvb, offset, length, "Direction: %s", c2s?"Client -> Server":"Server -> Client"); proto_tree_add_item(mc_tree, hf_mc_data, tvb, offset, length, FALSE); switch (type) { case 0x01: add_login_details(mc_tree, tvb, pinfo, offset, c2s); break; case 0x02: add_handshake_details(mc_tree, tvb, pinfo, offset, c2s); break; case 0x03: add_chat_details(mc_tree, tvb, pinfo, offset); break; case 0x04: add_time_details(mc_tree, tvb, pinfo, offset); break; case 0x06: add_spawn_details(mc_tree, tvb, pinfo, offset); break; case 0x08: add_update_health_details(mc_tree, tvb, pinfo, offset); break; case 0x09: add_respawn_details(mc_tree, tvb, pinfo, offset); break; case 0x0A: add_loaded_details(mc_tree, tvb, pinfo, offset); break; case 0x0B: add_player_position_details(mc_tree, tvb, pinfo, offset); break; case 0x0C: add_player_look_details(mc_tree, tvb, pinfo, offset); break; case 0x0D: add_player_move_look_details(mc_tree, tvb, pinfo, offset); break; case 0x0E: add_block_dig_details(mc_tree, tvb, pinfo, offset); break; case 0x0F: add_place_details(mc_tree, tvb, pinfo, offset); break; case 0x10: add_change_slot_selection(mc_tree, tvb, pinfo, offset, c2s); break; case 0x12: add_animation_details(mc_tree, tvb, pinfo, offset); break; case 0x14: add_named_entity_spawn_details(mc_tree, tvb, pinfo, offset); break; case 0x15: add_pickup_spawn_details(mc_tree, tvb, pinfo, offset); break; case 0x16: add_collect_item_details(mc_tree, tvb, pinfo, offset); break; case 0x17: add_object_vehicle_details(mc_tree, tvb, pinfo, offset); break; case 0x18: add_mobspawn_details(mc_tree, tvb, pinfo, offset); break; case 0x1D: add_destroy_entity_details(mc_tree, tvb, pinfo, offset); break; case 0x1F: add_relative_entity_move_details(mc_tree, tvb, pinfo, offset); break; case 0x20: add_entity_look_details(mc_tree, tvb, pinfo, offset); break; case 0x21: add_relative_entity_move_look_details(mc_tree, tvb, pinfo, offset); break; case 0x26: add_entity_status_details(mc_tree, tvb, pinfo, offset); break; /* ... */ case 0x32: add_pre_chunk_details(mc_tree, tvb, pinfo, offset); break; case 0x33: add_map_chunk_details(mc_tree, tvb, pinfo, offset); break; case 0x35: add_block_change_details(mc_tree, tvb, pinfo, offset); break; case 0x6B: add_creative_inventory_action_details(mc_tree, tvb, pinfo, offset); break; case 0x3b: add_complex_entity_details(mc_tree, tvb, pinfo, offset); break; case 0x82: add_update_sign_details(mc_tree, tvb, pinfo, offset); break; case 0xc8: add_increment_statistic_details(mc_tree, tvb, pinfo, offset); break; case 0xc9: add_player_list_details(mc_tree, tvb, pinfo, offset); break; case 0xff: add_kick_details(mc_tree, tvb, pinfo, offset); break; } } }
static void dissect_minecraft_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint8 type, guint32 offset, guint32 length) { if (check_col(pinfo->cinfo, COL_PROTOCOL)) col_set_str(pinfo->cinfo, COL_PROTOCOL, PROTO_TAG_MC); /* Clear out stuff in the info column */ // if(check_col(pinfo->cinfo,COL_INFO)){ // col_clear(pinfo->cinfo,COL_INFO); // } if (check_col(pinfo->cinfo, COL_INFO)) { col_add_fstr(pinfo->cinfo, COL_INFO, pinfo->match_port == pinfo->destport ? "C->S" : "S->C" ": %d > %d Info Type:[%s]", pinfo->srcport, pinfo->destport, val_to_str(type, packettypenames, "Unknown Type:0x%02x")); } if ( tree ) { mc_item = proto_tree_add_item(tree, proto_minecraft, tvb, offset, length, FALSE); mc_tree = proto_item_add_subtree(mc_item, ett_mc); proto_tree_add_item(mc_tree, hf_mc_type, tvb, offset, 1, FALSE); proto_tree_add_item(mc_tree, hf_mc_data, tvb, offset, length, FALSE); switch (type) { case 0x01: add_login_details(mc_tree, tvb, pinfo, offset); break; case 0x02: add_handshake_details(mc_tree, tvb, pinfo, offset); break; case 0x03: add_chat_details(mc_tree, tvb, pinfo, offset); break; case 0x04: add_time_details(mc_tree, tvb, pinfo, offset); break; case 0x06: add_spawn_details(mc_tree, tvb, pinfo, offset); break; case 0x0A: add_loaded_details(mc_tree, tvb, pinfo, offset); break; case 0x0B: add_player_position_details(mc_tree, tvb, pinfo, offset); break; case 0x0C: add_player_look_details(mc_tree, tvb, pinfo, offset); break; case 0x0D: add_player_move_look_details(mc_tree, tvb, pinfo, offset); break; case 0x0E: add_block_dig_details(mc_tree, tvb, pinfo, offset); break; case 0x0F: add_place_details(mc_tree, tvb, pinfo, offset); break; case 0x10: add_block_item_switch_details(mc_tree, tvb, pinfo, offset); break; case 0x11: add_add_to_inventory_details(mc_tree, tvb, pinfo, offset); break; case 0x12: add_arm_animation_details(mc_tree, tvb, pinfo, offset); break; case 0x14: add_named_entity_spawn_details(mc_tree, tvb, pinfo, offset); break; case 0x15: add_pickup_spawn_details(mc_tree, tvb, pinfo, offset); break; case 0x16: add_collect_item_details(mc_tree, tvb, pinfo, offset); break; case 0x17: add_object_vehicle_details(mc_tree, tvb, pinfo, offset); break; case 0x1D: add_destroy_entity_details(mc_tree, tvb, pinfo, offset); break; case 0x1F: add_relative_entity_move_details(mc_tree, tvb, pinfo, offset); break; case 0x20: add_entity_look_details(mc_tree, tvb, pinfo, offset); break; case 0x21: add_relative_entity_move_look_details(mc_tree, tvb, pinfo, offset); break; /* ... */ case 0x32: add_pre_chunk_details(mc_tree, tvb, pinfo, offset); break; case 0x33: add_map_chunk_details(mc_tree, tvb, pinfo, offset); break; case 0x35: add_block_change_details(mc_tree, tvb, pinfo, offset); break; case 0x3b: add_complex_entity_details(mc_tree, tvb, pinfo, offset); break; } } }