* Routines for the Point-to-Point Tunnelling Protocol (PPTP) (RFC 2637)
* Brad Robel-Forrest <brad.robel-forrest@watchguard.com>
*
- * $Id: packet-pptp.c,v 1.8 2000/01/20 07:31:29 guy Exp $
+ * $Id: packet-pptp.c,v 1.13 2000/11/19 08:54:02 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
#include <glib.h>
#include "packet.h"
+static int proto_pptp = -1;
+static int hf_pptp_message_type = -1;
+
static gint ett_pptp = -1;
+#define TCP_PORT_PPTP 1723
+
+#define MAGIC_COOKIE 0x1A2B3C4D
+
#define NUM_MSG_TYPES 3
#define msgtype2str(t) \
((t < NUM_MSG_TYPES) ? msgtypestr[t] : "UNKNOWN-MESSAGES-TYPE")
guint32 recv_acm;
};
-void
+static void
dissect_pptp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct pptp_hdr * hdr = (struct pptp_hdr *)(pd + offset);
guint16 len;
guint16 cntrl_type;
-
+
+ OLD_CHECK_DISPLAY_AS_DATA(proto_pptp, pd, offset, fd, tree);
+
if (check_col(fd, COL_PROTOCOL))
- col_add_str(fd, COL_PROTOCOL, "PPTP");
+ col_set_str(fd, COL_PROTOCOL, "PPTP");
len = pntohs(&hdr->len);
cntrl_type = pntohs(&hdr->cntrl_type);
if (IS_DATA_IN_FRAME(offset) && tree) {
guint16 msg_type;
+ guint32 cookie;
proto_item * ti;
proto_tree * pptp_tree;
- ti = proto_tree_add_text(tree, offset, len, "PPTP Control Channel");
+ ti = proto_tree_add_item(tree, proto_pptp, NullTVB, offset, len, FALSE);
pptp_tree = proto_item_add_subtree(ti, ett_pptp);
- proto_tree_add_text(pptp_tree, offset, sizeof(hdr->len),
+ proto_tree_add_text(pptp_tree, NullTVB, offset, sizeof(hdr->len),
"Length: %u", len);
offset += sizeof(hdr->len);
msg_type = pntohs(&hdr->type);
- proto_tree_add_text(pptp_tree, offset, sizeof(hdr->type),
- "Message type: %s (%u)", msgtype2str(msg_type), msg_type);
+ proto_tree_add_uint_format(pptp_tree, hf_pptp_message_type, NullTVB,
+ offset, sizeof(hdr->type),
+ msg_type,
+ "Message type: %s (%u)",
+ msgtype2str(msg_type), msg_type);
+
offset += sizeof(hdr->type);
- proto_tree_add_text(pptp_tree, offset, sizeof(hdr->cookie),
- "Cookie: %#08x", pntohl(&hdr->cookie));
+ cookie = pntohl(&hdr->cookie);
+
+ if (cookie == MAGIC_COOKIE)
+ proto_tree_add_text(pptp_tree, NullTVB, offset, sizeof(hdr->cookie),
+ "Cookie: %#08x (correct)", cookie);
+ else
+ proto_tree_add_text(pptp_tree, NullTVB, offset, sizeof(hdr->cookie),
+ "Cookie: %#08x (incorrect)", cookie);
offset += sizeof(hdr->cookie);
- proto_tree_add_text(pptp_tree, offset, sizeof(hdr->cntrl_type),
+ proto_tree_add_text(pptp_tree, NullTVB, offset, sizeof(hdr->cntrl_type),
"Control type: %s (%u)", cntrltype2str(cntrl_type), cntrl_type);
offset += sizeof(hdr->cntrl_type);
- proto_tree_add_text(pptp_tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(pptp_tree, NullTVB, offset, sizeof(hdr->resv),
"Reserved: %u", pntohs(&hdr->resv));
offset += sizeof(hdr->resv);
if (cntrl_type < NUM_CNTRL_TYPES)
( *(strfuncs[cntrl_type].func))(pd, offset, fd, pptp_tree);
else
- dissect_data(pd, offset, fd, pptp_tree);
+ old_dissect_data(pd, offset, fd, pptp_tree);
}
}
static void
dissect_unknown(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
- dissect_data(pd, offset, fd, tree);
+ old_dissect_data(pd, offset, fd, tree);
}
static void
guint32 frame;
guint32 bearer;
- proto_tree_add_text(tree, offset, sizeof(hdr->major_ver) + sizeof(hdr->minor_ver),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->major_ver) + sizeof(hdr->minor_ver),
"Protocol version: %u.%u", hdr->major_ver, hdr->minor_ver );
offset += sizeof(hdr->major_ver) + sizeof(hdr->minor_ver);
- proto_tree_add_text(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->resv),
"Reserved: %u", pntohs(&hdr->resv));
offset += sizeof(hdr->resv);
frame = pntohl(&hdr->frame);
- proto_tree_add_text(tree, offset, sizeof(hdr->frame),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->frame),
"Framing capabilities: %s (%u)", frametype2str(frame), frame);
offset += sizeof(hdr->frame);
bearer = pntohl(&hdr->bearer);
- proto_tree_add_text(tree, offset, sizeof(hdr->bearer),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->bearer),
"Bearer capabilities: %s (%u)", bearertype2str(bearer), bearer);
offset += sizeof(hdr->bearer);
- proto_tree_add_text(tree, offset, sizeof(hdr->max_chan),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->max_chan),
"Maximum channels: %u", pntohs(&hdr->max_chan));
offset += sizeof(hdr->max_chan);
- proto_tree_add_text(tree, offset, sizeof(hdr->firm_rev),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->firm_rev),
"Firmware revision: %u", pntohs(&hdr->firm_rev));
offset += sizeof(hdr->firm_rev);
- proto_tree_add_text(tree, offset, sizeof(hdr->host),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->host),
"Hostname: %s", hdr->host);
offset += sizeof(hdr->host);
- proto_tree_add_text(tree, offset, sizeof(hdr->vendor),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->vendor),
"Vendor: %s", hdr->vendor);
}
guint32 frame;
guint32 bearer;
- proto_tree_add_text(tree, offset, sizeof(hdr->major_ver) + sizeof(hdr->minor_ver),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->major_ver) + sizeof(hdr->minor_ver),
"Protocol version: %u.%u", hdr->major_ver, hdr->minor_ver );
offset += sizeof(hdr->major_ver) + sizeof(hdr->minor_ver);
- proto_tree_add_text(tree, offset, sizeof(hdr->result),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->result),
"Result: %s (%u)", cntrlresulttype2str(hdr->result), hdr->result);
offset += sizeof(hdr->result);
- proto_tree_add_text(tree, offset, sizeof(hdr->error),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->error),
"Error: %s (%u)", errortype2str(hdr->error), hdr->error);
offset += sizeof(hdr->error);
frame = pntohl(&hdr->frame);
- proto_tree_add_text(tree, offset, sizeof(hdr->frame),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->frame),
"Framing capabilities: %s (%u)", frametype2str(frame), frame);
offset += sizeof(hdr->frame);
bearer = pntohl(&hdr->bearer);
- proto_tree_add_text(tree, offset, sizeof(hdr->bearer),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->bearer),
"Bearer capabilities: %s (%u)", bearertype2str(bearer), bearer);
offset += sizeof(hdr->bearer);
- proto_tree_add_text(tree, offset, sizeof(hdr->max_chan),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->max_chan),
"Maximum channels: %u", pntohs(&hdr->max_chan));
offset += sizeof(hdr->max_chan);
- proto_tree_add_text(tree, offset, sizeof(hdr->firm_rev),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->firm_rev),
"Firmware revision: %u", pntohs(&hdr->firm_rev));
offset += sizeof(hdr->firm_rev);
- proto_tree_add_text(tree, offset, sizeof(hdr->host),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->host),
"Hostname: %s", hdr->host);
offset += sizeof(hdr->host);
- proto_tree_add_text(tree, offset, sizeof(hdr->vendor),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->vendor),
"Vendor: %s", hdr->vendor);
}
dissect_stop_req(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct stop_req * hdr = (struct stop_req *)(pd + offset);
- proto_tree_add_text(tree, offset, sizeof(hdr->reason),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->reason),
"Reason: %s (%u)", reasontype2str(hdr->reason), hdr->reason);
offset += sizeof(hdr->reason);
- proto_tree_add_text(tree, offset, sizeof(hdr->resv0),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->resv0),
"Reserved: %u", hdr->resv0);
offset += sizeof(hdr->resv0);
- proto_tree_add_text(tree, offset, sizeof(hdr->resv1),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->resv1),
"Reserved: %u", pntohs(&hdr->resv1));
offset += sizeof(hdr->resv1);
}
dissect_stop_reply(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct stop_reply * hdr = (struct stop_reply *)(pd + offset);
- proto_tree_add_text(tree, offset, sizeof(hdr->result),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->result),
"Result: %s (%u)", stopresulttype2str(hdr->result), hdr->result);
offset += sizeof(hdr->result);
- proto_tree_add_text(tree, offset, sizeof(hdr->error),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->error),
"Error: %s (%u)", errortype2str(hdr->error), hdr->error);
offset += sizeof(hdr->error);
- proto_tree_add_text(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->resv),
"Reserved: %u", pntohs(&hdr->resv));
offset += sizeof(hdr->resv);
}
dissect_echo_req(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct echo_req * hdr = (struct echo_req *)(pd + offset);
- proto_tree_add_text(tree, offset, sizeof(hdr->ident),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->ident),
"Identifier: %u", pntohl(&hdr->ident));
offset += sizeof(hdr->ident);
}
dissect_echo_reply(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct echo_reply * hdr = (struct echo_reply *)(pd + offset);
- proto_tree_add_text(tree, offset, sizeof(hdr->ident),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->ident),
"Identifier: %u", pntohl(&hdr->ident));
offset += sizeof(hdr->ident);
- proto_tree_add_text(tree, offset, sizeof(hdr->result),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->result),
"Result: %s (%u)", echoresulttype2str(hdr->result), hdr->result);
offset += sizeof(hdr->result);
- proto_tree_add_text(tree, offset, sizeof(hdr->error),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->error),
"Error: %s (%u)", errortype2str(hdr->error), hdr->error);
offset += sizeof(hdr->error);
- proto_tree_add_text(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->resv),
"Reserved: %u", pntohs(&hdr->resv));
offset += sizeof(hdr->resv);
}
guint32 bearer;
guint32 frame;
- proto_tree_add_text(tree, offset, sizeof(hdr->call_id),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->call_id),
"Call ID: %u", pntohs(&hdr->call_id));
offset += sizeof(hdr->call_id);
- proto_tree_add_text(tree, offset, sizeof(hdr->call_serial),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->call_serial),
"Call Serial Number: %u", pntohs(&hdr->call_serial));
offset += sizeof(hdr->call_serial);
- proto_tree_add_text(tree, offset, sizeof(hdr->min_bps),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->min_bps),
"Minimum BPS: %u", pntohl(&hdr->min_bps));
offset += sizeof(hdr->min_bps);
- proto_tree_add_text(tree, offset, sizeof(hdr->max_bps),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->max_bps),
"Maximum BPS: %u", pntohl(&hdr->max_bps));
offset += sizeof(hdr->max_bps);
bearer = pntohl(&hdr->bearer);
- proto_tree_add_text(tree, offset, sizeof(hdr->bearer),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->bearer),
"Bearer capabilities: %s (%u)", bearertype2str(bearer), bearer);
offset += sizeof(hdr->bearer);
frame = pntohl(&hdr->frame);
- proto_tree_add_text(tree, offset, sizeof(hdr->frame),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->frame),
"Framing capabilities: %s (%u)", frametype2str(frame), frame);
offset += sizeof(hdr->frame);
- proto_tree_add_text(tree, offset, sizeof(hdr->win_size),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->win_size),
"Receive window size: %u", pntohs(&hdr->win_size));
offset += sizeof(hdr->win_size);
- proto_tree_add_text(tree, offset, sizeof(hdr->delay),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->delay),
"Processing delay: %u", pntohs(&hdr->delay));
offset += sizeof(hdr->delay);
- proto_tree_add_text(tree, offset, sizeof(hdr->phone_len),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->phone_len),
"Phone number length: %u", pntohs(&hdr->phone_len));
offset += sizeof(hdr->phone_len);
- proto_tree_add_text(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->resv),
"Reserved: %u", pntohs(&hdr->resv));
offset += sizeof(hdr->resv);
- proto_tree_add_text(tree, offset, sizeof(hdr->phone),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->phone),
"Phone number: %s", hdr->phone);
offset += sizeof(hdr->phone);
- proto_tree_add_text(tree, offset, sizeof(hdr->subaddr),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->subaddr),
"Subaddress: %s", hdr->subaddr);
offset += sizeof(hdr->subaddr);
}
dissect_out_reply(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct out_reply * hdr = (struct out_reply *)(pd + offset);
- proto_tree_add_text(tree, offset, sizeof(hdr->call_id),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->call_id),
"Call ID: %u", pntohs(&hdr->call_id));
offset += sizeof(hdr->call_id);
- proto_tree_add_text(tree, offset, sizeof(hdr->peer_id),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->peer_id),
"Peer's call ID: %u", pntohs(&hdr->peer_id));
offset += sizeof(hdr->peer_id);
- proto_tree_add_text(tree, offset, sizeof(hdr->result),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->result),
"Result: %s (%u)", outresulttype2str(hdr->result), hdr->result);
offset += sizeof(hdr->result);
- proto_tree_add_text(tree, offset, sizeof(hdr->error),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->error),
"Error: %s (%u)", errortype2str(hdr->error), hdr->error);
offset += sizeof(hdr->error);
- proto_tree_add_text(tree, offset, sizeof(hdr->cause),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->cause),
"Cause code: %u", pntohs(&hdr->cause));
offset += sizeof(hdr->cause);
- proto_tree_add_text(tree, offset, sizeof(hdr->speed),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->speed),
"Connect speed: %u", pntohl(&hdr->speed));
offset += sizeof(hdr->speed);
- proto_tree_add_text(tree, offset, sizeof(hdr->win_size),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->win_size),
"Receive window size: %u", pntohs(&hdr->win_size));
offset += sizeof(hdr->win_size);
- proto_tree_add_text(tree, offset, sizeof(hdr->delay),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->delay),
"Processing delay: %u", pntohs(&hdr->delay));
offset += sizeof(hdr->delay);
- proto_tree_add_text(tree, offset, sizeof(hdr->channel_id),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->channel_id),
"Physical channel ID: %u", pntohl(&hdr->channel_id));
offset += sizeof(hdr->channel_id);
}
struct in_req * hdr = (struct in_req *)(pd + offset);
guint32 bearer;
- proto_tree_add_text(tree, offset, sizeof(hdr->call_id),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->call_id),
"Call ID: %u", pntohs(&hdr->call_id));
offset += sizeof(hdr->call_id);
- proto_tree_add_text(tree, offset, sizeof(hdr->call_serial),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->call_serial),
"Call serial number: %u", pntohs(&hdr->call_serial));
offset += sizeof(hdr->call_serial);
bearer = pntohl(&hdr->bearer);
- proto_tree_add_text(tree, offset, sizeof(hdr->bearer),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->bearer),
"Bearer capabilities: %s (%u)", bearertype2str(bearer), bearer);
offset += sizeof(hdr->bearer);
- proto_tree_add_text(tree, offset, sizeof(hdr->channel_id),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->channel_id),
"Physical channel ID: %u", pntohl(&hdr->channel_id));
offset += sizeof(hdr->channel_id);
- proto_tree_add_text(tree, offset, sizeof(hdr->dialed_len),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->dialed_len),
"Dialed number length: %u", pntohs(&hdr->dialed_len));
offset += sizeof(hdr->dialed_len);
- proto_tree_add_text(tree, offset, sizeof(hdr->dialing_len),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->dialing_len),
"Dialing number length: %u", pntohs(&hdr->dialing_len));
offset += sizeof(hdr->dialing_len);
- proto_tree_add_text(tree, offset, sizeof(hdr->dialed),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->dialed),
"Dialed number: %s", hdr->dialed);
offset += sizeof(hdr->dialed);
- proto_tree_add_text(tree, offset, sizeof(hdr->dialing),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->dialing),
"Dialing number: %s", hdr->dialing);
offset += sizeof(hdr->dialing);
- proto_tree_add_text(tree, offset, sizeof(hdr->subaddr),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->subaddr),
"Subaddress: %s", hdr->subaddr);
offset += sizeof(hdr->subaddr);
}
dissect_in_reply(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct in_reply * hdr = (struct in_reply *)(pd + offset);
- proto_tree_add_text(tree, offset, sizeof(hdr->call_id),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->call_id),
"Call ID: %u", pntohs(&hdr->call_id));
offset += sizeof(hdr->call_id);
- proto_tree_add_text(tree, offset, sizeof(hdr->peer_id),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->peer_id),
"Peer's call ID: %u", pntohs(&hdr->peer_id));
offset += sizeof(hdr->peer_id);
- proto_tree_add_text(tree, offset, sizeof(hdr->result),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->result),
"Result: %s (%u)", inresulttype2str(hdr->result), hdr->result);
offset += sizeof(hdr->result);
- proto_tree_add_text(tree, offset, sizeof(hdr->error),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->error),
"Error: %s (%u)", errortype2str(hdr->error), hdr->error);
offset += sizeof(hdr->error);
- proto_tree_add_text(tree, offset, sizeof(hdr->win_size),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->win_size),
"Receive window size: %u", pntohs(&hdr->win_size));
offset += sizeof(hdr->win_size);
- proto_tree_add_text(tree, offset, sizeof(hdr->delay),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->delay),
"Processing delay: %u", pntohs(&hdr->delay));
offset += sizeof(hdr->delay);
- proto_tree_add_text(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->resv),
"Reserved: %u", hdr->resv);
offset += sizeof(hdr->resv);
}
struct in_connected * hdr = (struct in_connected *)(pd + offset);
guint32 frame;
- proto_tree_add_text(tree, offset, sizeof(hdr->peer_id),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->peer_id),
"Peer's call ID: %u", pntohs(&hdr->peer_id));
offset += sizeof(hdr->peer_id);
- proto_tree_add_text(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->resv),
"Reserved: %u", pntohs(&hdr->resv));
offset += sizeof(hdr->resv);
- proto_tree_add_text(tree, offset, sizeof(hdr->speed),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->speed),
"Connect speed: %u", pntohl(&hdr->speed));
offset += sizeof(hdr->speed);
- proto_tree_add_text(tree, offset, sizeof(hdr->win_size),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->win_size),
"Receive window size: %u", pntohs(&hdr->win_size));
offset += sizeof(hdr->win_size);
- proto_tree_add_text(tree, offset, sizeof(hdr->delay),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->delay),
"Processing delay: %u", pntohs(&hdr->delay));
offset += sizeof(hdr->delay);
frame = pntohl(&hdr->frame);
- proto_tree_add_text(tree, offset, sizeof(hdr->frame),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->frame),
"Framing capabilities: %s (%u)", frametype2str(frame), frame);
offset += sizeof(hdr->frame);
}
dissect_clear_req(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct clear_req * hdr = (struct clear_req *)(pd + offset);
- proto_tree_add_text(tree, offset, sizeof(hdr->call_id),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->call_id),
"Call ID: %u", pntohs(&hdr->call_id));
offset += sizeof(hdr->call_id);
- proto_tree_add_text(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->resv),
"Reserved: %u", pntohs(&hdr->resv));
offset += sizeof(hdr->resv);
}
dissect_disc_notify(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct disc_notify * hdr = (struct disc_notify *)(pd + offset);
- proto_tree_add_text(tree, offset, sizeof(hdr->call_id),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->call_id),
"Call ID: %u", pntohs(&hdr->call_id));
offset += sizeof(hdr->call_id);
- proto_tree_add_text(tree, offset, sizeof(hdr->result),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->result),
"Result: %s (%u)", discresulttype2str(hdr->result), hdr->result);
offset += sizeof(hdr->result);
- proto_tree_add_text(tree, offset, sizeof(hdr->error),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->error),
"Error: %s (%u)", errortype2str(hdr->error), hdr->error);
offset += sizeof(hdr->error);
- proto_tree_add_text(tree, offset, sizeof(hdr->cause),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->cause),
"Cause code: %u", pntohs(&hdr->cause));
offset += sizeof(hdr->cause);
- proto_tree_add_text(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->resv),
"Reserved: %u", pntohs(&hdr->resv));
offset += sizeof(hdr->resv);
- proto_tree_add_text(tree, offset, sizeof(hdr->stats),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->stats),
"Call statistics: %s", hdr->stats);
offset += sizeof(hdr->stats);
}
dissect_error_notify(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct error_notify * hdr = (struct error_notify *)(pd + offset);
- proto_tree_add_text(tree, offset, sizeof(hdr->peer_id),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->peer_id),
"Peer's call ID: %u", pntohs(&hdr->peer_id));
offset += sizeof(hdr->peer_id);
- proto_tree_add_text(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->resv),
"Reserved: %u", pntohs(&hdr->resv));
offset += sizeof(hdr->resv);
- proto_tree_add_text(tree, offset, sizeof(hdr->crc),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->crc),
"CRC errors: %u", pntohl(&hdr->crc));
offset += sizeof(hdr->crc);
- proto_tree_add_text(tree, offset, sizeof(hdr->frame),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->frame),
"Framing errors: %u", pntohl(&hdr->frame));
offset += sizeof(hdr->frame);
- proto_tree_add_text(tree, offset, sizeof(hdr->hardware),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->hardware),
"Hardware overruns: %u", pntohl(&hdr->hardware));
offset += sizeof(hdr->hardware);
- proto_tree_add_text(tree, offset, sizeof(hdr->buffer),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->buffer),
"Buffer overruns: %u", pntohl(&hdr->buffer));
offset += sizeof(hdr->buffer);
- proto_tree_add_text(tree, offset, sizeof(hdr->timeout),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->timeout),
"Time-out errors: %u", pntohl(&hdr->timeout));
offset += sizeof(hdr->timeout);
- proto_tree_add_text(tree, offset, sizeof(hdr->alignment),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->alignment),
"Alignment errors: %u", pntohl(&hdr->alignment));
offset += sizeof(hdr->alignment);
}
dissect_set_link(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct set_link * hdr = (struct set_link *)(pd + offset);
- proto_tree_add_text(tree, offset, sizeof(hdr->peer_id),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->peer_id),
"Peer's call ID: %u", pntohs(&hdr->peer_id));
offset += sizeof(hdr->peer_id);
- proto_tree_add_text(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->resv),
"Reserved: %u", pntohs(&hdr->resv));
offset += sizeof(hdr->resv);
- proto_tree_add_text(tree, offset, sizeof(hdr->send_acm),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->send_acm),
"Send ACCM: %#08x", pntohl(&hdr->send_acm));
offset += sizeof(hdr->send_acm);
- proto_tree_add_text(tree, offset, sizeof(hdr->recv_acm),
+ proto_tree_add_text(tree, NullTVB, offset, sizeof(hdr->recv_acm),
"Recv ACCM: %#08x", pntohl(&hdr->recv_acm));
offset += sizeof(hdr->recv_acm);
}
&ett_pptp,
};
+ static hf_register_info hf[] = {
+ { &hf_pptp_message_type,
+ { "Message Type", "pptp.type",
+ FT_UINT16, BASE_HEX, NULL, 0x0,
+ "PPTP message type" }}
+ };
+
+ proto_pptp = proto_register_protocol("Point-to-Point Tunnelling Protocol",
+ "pptp");
+ proto_register_field_array(proto_pptp, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
}
+
+void
+proto_reg_handoff_pptp(void)
+{
+ old_dissector_add("tcp.port", TCP_PORT_PPTP, dissect_pptp);
+}