286293ec30016674a5c90875afc96243f389e056
[obnox/wireshark/wip.git] / epan / dissectors / packet-aim-popup.c
1 /* packet-aim.c
2  * Routines for AIM Instant Messenger (OSCAR) dissection
3  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
4  *
5  * $Id$
6  *
7  * Wireshark - Network traffic analyzer
8  * By Gerald Combs <gerald@wireshark.org>
9  * Copyright 1998 Gerald Combs
10  *
11  * This program is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU General Public License
13  * as published by the Free Software Foundation; either version 2
14  * of the License, or (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software
23  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24  */
25
26 #ifdef HAVE_CONFIG_H
27 # include "config.h"
28 #endif
29
30 #include <stdlib.h>
31 #include <ctype.h>
32
33 #include <glib.h>
34
35 #include <epan/packet.h>
36 #include <epan/strutil.h>
37
38 #include "packet-aim.h"
39
40 /* SNAC families */
41 #define FAMILY_POPUP      0x0008
42
43
44 #define AIM_POPUP_TLV_MESSAGE_TEXT              0x001
45 #define AIM_POPUP_TLV_URL_STRING                0x002
46 #define AIM_POPUP_TLV_WINDOW_WIDTH              0x003
47 #define AIM_POPUP_TLV_WINDOW_HEIGHT             0x004
48 #define AIM_POPUP_TLV_AUTOHIDE_DELAY    0x005
49
50 const aim_tlv popup_tlvs[] = {
51         { AIM_POPUP_TLV_MESSAGE_TEXT, "Message text (html)", dissect_aim_tlv_value_string },
52         { AIM_POPUP_TLV_URL_STRING, "URL string", dissect_aim_tlv_value_string },
53         { AIM_POPUP_TLV_WINDOW_WIDTH, "Window Width (pixels)", dissect_aim_tlv_value_uint16 },
54         { AIM_POPUP_TLV_WINDOW_HEIGHT, "Window Height (pixels)", dissect_aim_tlv_value_uint16 },
55         { AIM_POPUP_TLV_AUTOHIDE_DELAY, "Autohide delay (seconds)", dissect_aim_tlv_value_uint16 },
56         { 0, NULL, NULL }
57 };
58
59 /* Initialize the protocol and registered fields */
60 static int proto_aim_popup = -1;
61
62 /* Initialize the subtree pointers */
63 static gint ett_aim_popup    = -1;
64
65 static int dissect_aim_popup(tvbuff_t *tvb, packet_info *pinfo, proto_tree *popup_tree)
66 {
67         return dissect_aim_tlv(tvb, pinfo, 0, popup_tree, popup_tlvs);
68 }
69
70 static const aim_subtype aim_fnac_family_popup[] = {
71   { 0x0001, "Error", dissect_aim_snac_error },
72   { 0x0002, "Display Popup Message Server Command" , dissect_aim_popup },
73   { 0, NULL, NULL }
74 };
75
76
77 /* Register the protocol with Wireshark */
78 void
79 proto_register_aim_popup(void)
80 {
81
82 /* Setup protocol subtree array */
83   static gint *ett[] = {
84     &ett_aim_popup,
85   };
86
87 /* Register the protocol name and description */
88   proto_aim_popup = proto_register_protocol("AIM Popup", "AIM Popup", "aim_popup");
89
90 /* Required function calls to register the header fields and subtrees used */
91   proto_register_subtree_array(ett, array_length(ett));
92 }
93
94 void
95 proto_reg_handoff_aim_popup(void)
96 {
97   aim_init_family(proto_aim_popup, ett_aim_popup, FAMILY_POPUP, aim_fnac_family_popup);
98 }