static int dissect_aim_msg_incoming(tvbuff_t *tvb, packet_info *pinfo, proto_tree *msg_tree) { int offset = 0; const aim_tlv *aim_ch_tlvs; guint16 channel_id; /* ICBM Cookie */ proto_tree_add_item(msg_tree, hf_aim_icbm_cookie, tvb, offset, 8, ENC_NA); offset += 8; /* Message Channel ID */ proto_tree_add_item(msg_tree, hf_aim_message_channel_id, tvb, offset, 2, ENC_BIG_ENDIAN); channel_id = tvb_get_ntohs(tvb, offset); offset += 2; offset = dissect_aim_userinfo(tvb, pinfo, offset, msg_tree); switch(channel_id) { case ICBM_CHANNEL_IM: aim_ch_tlvs = aim_messaging_incoming_ch1_tlvs; break; case ICBM_CHANNEL_RENDEZVOUS: aim_ch_tlvs = aim_messaging_incoming_ch2_tlvs; break; default: return offset; } return dissect_aim_tlv_sequence(tvb, pinfo, offset, msg_tree, aim_ch_tlvs); }
static int dissect_aim_chat_userinfo_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *chat_tree) { int offset = 0; while(tvb_length_remaining(tvb, offset) > 0) { offset = dissect_aim_userinfo(tvb, pinfo, offset, chat_tree); } return offset; }