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_msg_outgoing(tvbuff_t *tvb, packet_info *pinfo, proto_tree *msg_tree) { int offset = 0; const aim_tlv *aim_ch_tlvs = NULL; guint16 channel_id; guchar buddyname[MAX_BUDDYNAME_LENGTH+1]; int buddyname_length; /* ICBM Cookie */ proto_tree_add_item(msg_tree, hf_aim_icbm_cookie, tvb, offset, 8, ENC_NA); offset += 8; /* Message Channel ID */ channel_id = tvb_get_ntohs(tvb, offset); proto_tree_add_item(msg_tree, hf_aim_message_channel_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; /* Add the outgoing username to the info column */ buddyname_length = aim_get_buddyname(buddyname, tvb, offset, offset + 1); col_append_fstr(pinfo->cinfo, COL_INFO, " to: %s", format_text(buddyname, buddyname_length)); offset = dissect_aim_buddyname(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_tlv_value_rendezvous(proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo) { int offset = 0; proto_tree *entry = proto_item_add_subtree(ti, ett_aim_rendezvous_data); proto_tree_add_item(entry, hf_aim_rendezvous_msg_type, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; proto_tree_add_item(entry, hf_aim_icbm_cookie, tvb, offset, 8, ENC_NA); offset += 8; offset = dissect_aim_capability(entry, tvb, offset); return dissect_aim_tlv_sequence(tvb, pinfo, offset, entry, aim_rendezvous_tlvs); }
static int dissect_aim_invitation_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *invite_tree) { return dissect_aim_tlv_sequence(tvb, pinfo, 0, invite_tree, aim_onlinebuddy_tlvs); }
static int dissect_aim_buddylist_rights_repl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *buddy_tree) { return dissect_aim_tlv_sequence(tvb, pinfo, 0, buddy_tree, aim_buddylist_tlvs); }
static int dissect_aim_location_rightsinfo(tvbuff_t *tvb, packet_info *pinfo, proto_tree *loc_tree) { return dissect_aim_tlv_sequence(tvb, pinfo, 0, loc_tree, aim_location_rights_tlvs); }