Add a new "prefs_register_protocol()" routine, which is like
[obnox/wireshark/wip.git] / packet-xot.c
1 /* packet-xot.c
2  * Routines for X25 over TCP dissection (RFC 1613)
3  *
4  * Copyright 2000, Paul Ionescu <paul@acorp.ro>
5  *
6  * $Id: packet-xot.c,v 1.2 2001/01/03 06:55:34 guy Exp $
7  *
8  * Ethereal - Network traffic analyzer
9  * By Gerald Combs <gerald@zing.org>
10  * Copyright 1998 Gerald Combs
11  *
12  * 
13  * This program is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU General Public License
15  * as published by the Free Software Foundation; either version 2
16  * of the License, or (at your option) any later version.
17  * 
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  * 
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software
25  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
26  */
27
28 #ifdef HAVE_CONFIG_H
29 # include "config.h"
30 #endif
31
32 #include <stdio.h>
33 #include <stdlib.h>
34 #include <ctype.h>
35
36 #include <string.h>
37 #include <glib.h>
38 #include "packet.h"
39 #include "packet-x25.h"
40
41 #define TCP_PORT_XOT 1998
42
43 static gint proto_xot = -1;
44 static gint ett_xot = -1;
45
46 static void dissect_xot(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
47 {
48   proto_item *ti;
49   proto_tree *xot_tree;
50   guint16 version,len;
51   tvbuff_t   *next_tvb; 
52     
53   CHECK_DISPLAY_AS_DATA(proto_xot, tvb, pinfo, tree);
54
55   pinfo->current_proto = "XOT";
56   if (check_col(pinfo->fd, COL_PROTOCOL)) 
57       col_set_str(pinfo->fd, COL_PROTOCOL, "XOT");
58
59   version = tvb_get_ntohs(tvb,0);
60   len     = tvb_get_ntohs(tvb,2);
61
62   if (check_col(pinfo->fd, COL_INFO)) 
63      col_add_fstr(pinfo->fd, COL_INFO, "XOT Version = %u, size = %u",version,len );
64
65   if (tree) {
66         
67       ti = proto_tree_add_protocol_format(tree, proto_xot, tvb, 0, 4, "X.25 over TCP");
68       xot_tree = proto_item_add_subtree(ti, ett_xot);
69       
70       ti = proto_tree_add_text(xot_tree, tvb, 0,2,"XOT Version : %u %s",version,(version==0?"":" - Unknown version")) ;
71       ti = proto_tree_add_text(xot_tree, tvb, 2,2,"XOT length : %u",len) ;
72   }
73   next_tvb =  tvb_new_subset(tvb,4, -1 , -1);
74   dissect_x25(next_tvb,pinfo,tree);
75 }
76  
77 /* Register the protocol with Ethereal */
78 void proto_register_xot(void)
79 {                 
80
81
82   /* Setup protocol subtree array */
83   static gint *ett[] = {
84     &ett_xot,
85   };
86
87   /* Register the protocol name and description */
88   proto_xot = proto_register_protocol("X.25 over TCP", "XOT", "xot");
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_xot(void)
96 {
97   dissector_add("tcp.port", TCP_PORT_XOT, dissect_xot);
98 }