diff -urN ethereal-0.10.6/AUTHORS ethereal-0.10.7/AUTHORS
--- ethereal-0.10.6/AUTHORS	2004-08-12 17:41:25.000000000 -0500
+++ ethereal-0.10.7/AUTHORS	2004-10-20 17:34:15.000000000 -0500
@@ -881,7 +881,7 @@
 	LDP support for draft-martini-l2circuit-trans-mpls, LDP status
 	    code updates, and small LDP cleanups
 	LDP support for draft-martini-l2circuit-encap-mpls for
-            Ethernet-over-MPLS
+	    Ethernet-over-MPLS
 	Fix initialization of ett_slarp in CHDLC dissector
 	LDP PWE updates
 }
@@ -912,7 +912,7 @@
 	Support for decoding additional data, for CHAP, in LCP
 	    Authentication Protocol option
 	Additional vendor (CoSine) for Radius
-        CoSine VSA support for Radius
+	CoSine VSA support for Radius
 	Patches to PPP for CHAP support
 	Patches to packet-x11-keysym.h to clean up 8-bit chars
 	Fixes to take the Vendor-Specific attribute into consideration
@@ -1657,7 +1657,7 @@
 	    identifiers
 }
 
-Dave Richards           <d_m_richards [AT] attbi.com> {
+Dave Richards           <d_m_richards [AT] comcast.net> {
 	BACNET over 802.2
 	BACNET-over-ARCNET fix (it's really BACNET-over-802.2-over-ARCNET)
 }
@@ -1800,6 +1800,7 @@
 
 Mark C. Brown           <mbrown [AT] nosila.net> {
 	Improvements to code that reads HP-UX nettl files
+	Cisco Port Aggregation Protocol support
 }
 
 Can Erkin Acar          <canacar [AT] eee.metu.edu.tr> {
@@ -1907,6 +1908,7 @@
 Giles Scott             <gscott [AT] arubanetworks.com> {
 	Nortel/SynOptics Network Management Protocol support
 	Alteon/Nortel Transparent Proxy Control Protocol support
+	Ethernet MAC Control Frame support
 }
 
 Vincent Jardin          <vincent.jardin [AT] 6wind.com> {
@@ -2067,6 +2069,7 @@
 	SIP sipfrag support
 	SIP statistics tap
 	Show setupframe in RTP and RTCP
+	H.225.0 updates
 }
 
 Christian Wagner        <Christian.Wagner [AT] stud.uni-karlsruhe.de> {
@@ -2109,6 +2112,7 @@
 
 Jelmer Vernooij         <jelmer [AT] samba.org> {
 	AIM enhancements
+	DCOM IRemUnknown and IRemUnknown2 support
 }
 
 Duncan Sargeant         <dunc-ethereal-dev [AT] rcpt.to> {
@@ -2128,13 +2132,15 @@
 	Graceful Restart Mechanism for LDP [RFC3478]
 	Fault Tolerance for LDP [RFC3479]
 	Other LDP enhancements
-        PPP OSI Network Layer Control Protocol [RFC1377]
+	PPP OSI Network Layer Control Protocol [RFC1377]
 	Fix dissecting of CLNS Protocols over Cisco HDLC
 	PWE3 Interface parameter additions and miscelaneous updates
 	    from various IETF PWE3 drafts
 	MPLS PW Control Channel Header
 	Multiprotocol Label Switching Echo [draft-ietf-mpls-lsp-ping-05]
 	MPLS in Generic Routing Encapsulation (GRE)
+	OSPF Traffic Engineering enhancements
+	MP-BGP Updates
 }
 
 Thomas Anders           <thomas.anders [AT] blue-cable.de> {
@@ -2188,13 +2194,42 @@
 	MANOLITO support
 }
 
-M. Ortega y Strupp	<moys@loplof.de> {
+Irene Rüngler          <i.ruengeler [AT] fh-muenster.de {
+        SCTP analysis
+	Support PPID and SCTP port based selection in Decode as
+}
+
+M. Ortega y Strupp	<moys [AT] loplof.de> {
 	ISC DHCP Server 3.0 failover protocol dissection
 }
 
+Kelly Byrd		<kbyrd-ethereal [AT] memcpy.com> {
+	DAAP support
+}
+
+Luis Ontanon		<luis.ontanon.ibm[AT]h3g.it> {
+	RADIUS and ISUP enhancements
+}
+
+Luca Deri	<deri [AT] ntop.org> {
+	NetFlow v9 enhancements
+}
+
+Viorel Suman	<vsuman [AT] avmob.ro> {
+	TALI (RFC 3094) support
+}
 
-And assorted fixes and enhancements by the people listed above and by:
+Alejandro Vaquero	<alejandro.vaquero [AT] verso.com> {
+	RTP graphic analysis
+}
 
+Francesco Fondelli	<fondelli.francesco [AT] tiscali.it> {
+	ICE protocol support
+}
+
+
+And assorted fixes and enhancements by the people listed above
+and by:
 
 Pavel Roskin            <proski [AT] gnu.org>
 Georgi Guninski         <guninski [AT] guninski.com>
@@ -2256,22 +2291,34 @@
 Martin van der Werff	<martin [AT] vanderwerff.org>
 Marco van den Bovenkamp	<marco [AT] linuxgoeroe.dhs.org>
 Ming Zhang		<mingz [AT] ele.uri.edu>
-Kelly Byrd		<kbyrd-ethereal [AT] memcpy.com>
 Neil Piercy		<Neil.Piercy [AT] ipaccess.com>
+Rémi Denis-Courmont	<courmisch [AT] via.ecp.fr>
+Francisco Alcoba	<francisco.alcoba [AT] ericsson.com>
+Thomas Palmer		<tpalmer [AT] elmore.rr.com>
+Mårten Svantesson	<f95-msv [AT] f.kth.se>
+Thomas Boehne		<TBoehne [AT] ADwin.de>
+Steve Sommars		<sommars [AT] lucent.com>
+Olivier Jacques		<olivier.jacques [AT] hp.com>
+Kestutis Kupciunas	<kesha [AT] soften.ktu.lt>
+René Pilz		<rene.pilz [AT] ftw.at>
+Laurent Constantin	<laurent.constantin [AT] aql.fr>
 
 Alain Magloire <alainm[AT]rcsm.ece.mcgill.ca> was kind enough to
 give his permission to use his version of snprintf.c.
 
-Dan Lasley <dlasley[AT]promus.com> gave permission for his dumpit() hex-dump
-routine to be used.
+Dan Lasley <dlasley[AT]promus.com> gave permission for his
+dumpit() hex-dump routine to be used.
 
-Mattia Cazzola <mattiac[AT]alinet.it> provided a patch to the hex dump
-display routine.
+Mattia Cazzola <mattiac[AT]alinet.it> provided a patch to the
+hex dump display routine.
 
 We use the exception module from Kazlib, a C library written by
-Kaz Kylheku <kaz[AT]ashi.footprints.net>. Thanks goes to him for his
-well-written library. The Kazlib home page can be found at
+Kaz Kylheku <kaz[AT]ashi.footprints.net>. Thanks go to him for
+his well-written library. The Kazlib home page can be found at
 http://users.footprints.net/~kaz/kazlib.html
 
-Henrik Brix Andersen <brix[AT]gimp.org> gave permission for his webbrowser 
-calling routine to be used.
+Henrik Brix Andersen <brix[AT]gimp.org> gave permission for his
+webbrowser calling routine to be used.
+
+Christophe Devine <c.devine[at]cr0.net> gave permission for his
+SHA1 routines to be used. 
diff -urN ethereal-0.10.6/AUTHORS-SHORT ethereal-0.10.7/AUTHORS-SHORT
--- ethereal-0.10.6/AUTHORS-SHORT	2004-08-12 18:09:00.000000000 -0500
+++ ethereal-0.10.7/AUTHORS-SHORT	2004-10-20 18:12:32.000000000 -0500
@@ -1,10 +1,9 @@
-﻿
- 
+
 Original Author
 -------- ------
 Gerald Combs            <gerald[AT]ethereal.com>
- 
- 
+
+
 Contributors
 ------------
 Gilbert Ramirez         <gram[AT]alumni.rice.edu> 
@@ -255,7 +254,7 @@
 Andreas Trauer          <andreas.trauer [AT] siemens.com> 
 Ronald Henderson        <Ronald.Henderson [AT] CognicaseUSA.com> 
 Brian Ginsbach          <ginsbach [AT] cray.com> 
-Dave Richards           <d_m_richards [AT] attbi.com> 
+Dave Richards           <d_m_richards [AT] comcast.net> 
 Martin Regner           <martin.regner [AT] chello.se> 
 Jason Greene            <jason [AT] inetgurus.net> 
 Marco Molteni           <mmolteni [AT] cisco.com> 
@@ -361,11 +360,18 @@
 Chris Maynard		<Christopher.Maynard [AT] GTECH.COM> 
 SEKINE Hideki		<sekineh [AT] gf7.so-net.ne.jp> 
 Jeff Connelly		<shellreef+mp2p [AT] gmail.com> 
-M. Ortega y Strupp	<moys@loplof.de> 
- 
-And assorted fixes and enhancements by the people listed above and by:
- 
- 
+Irene Rüngler          <i.ruengeler [AT] fh-muenster.de 
+M. Ortega y Strupp	<moys [AT] loplof.de> 
+Kelly Byrd		<kbyrd-ethereal [AT] memcpy.com> 
+Luis Ontanon		<luis.ontanon.ibm[AT]h3g.it> 
+Luca Deri	<deri [AT] ntop.org> 
+Viorel Suman	<vsuman [AT] avmob.ro> 
+Alejandro Vaquero	<alejandro.vaquero [AT] verso.com> 
+Francesco Fondelli	<fondelli.francesco [AT] tiscali.it> 
+
+And assorted fixes and enhancements by the people listed above
+and by:
+
 Pavel Roskin            <proski [AT] gnu.org>
 Georgi Guninski         <guninski [AT] guninski.com>
 Jason Copenhaver        <jcopenha [AT] typedef.org>
@@ -426,22 +432,34 @@
 Martin van der Werff	<martin [AT] vanderwerff.org>
 Marco van den Bovenkamp	<marco [AT] linuxgoeroe.dhs.org>
 Ming Zhang		<mingz [AT] ele.uri.edu>
-Kelly Byrd		<kbyrd-ethereal [AT] memcpy.com>
 Neil Piercy		<Neil.Piercy [AT] ipaccess.com>
- 
+Rémi Denis-Courmont	<courmisch [AT] via.ecp.fr>
+Francisco Alcoba	<francisco.alcoba [AT] ericsson.com>
+Thomas Palmer		<tpalmer [AT] elmore.rr.com>
+Mårten Svantesson	<f95-msv [AT] f.kth.se>
+Thomas Boehne		<TBoehne [AT] ADwin.de>
+Steve Sommars		<sommars [AT] lucent.com>
+Olivier Jacques		<olivier.jacques [AT] hp.com>
+Kestutis Kupciunas	<kesha [AT] soften.ktu.lt>
+René Pilz		<rene.pilz [AT] ftw.at>
+Laurent Constantin	<laurent.constantin [AT] aql.fr>
+
 Alain Magloire <alainm[AT]rcsm.ece.mcgill.ca> was kind enough to
 give his permission to use his version of snprintf.c.
- 
-Dan Lasley <dlasley[AT]promus.com> gave permission for his dumpit() hex-dump
-routine to be used.
- 
-Mattia Cazzola <mattiac[AT]alinet.it> provided a patch to the hex dump
-display routine.
- 
+
+Dan Lasley <dlasley[AT]promus.com> gave permission for his
+dumpit() hex-dump routine to be used.
+
+Mattia Cazzola <mattiac[AT]alinet.it> provided a patch to the
+hex dump display routine.
+
 We use the exception module from Kazlib, a C library written by
-Kaz Kylheku <kaz[AT]ashi.footprints.net>. Thanks goes to him for his
-well-written library. The Kazlib home page can be found at
+Kaz Kylheku <kaz[AT]ashi.footprints.net>. Thanks go to him for
+his well-written library. The Kazlib home page can be found at
 http://users.footprints.net/~kaz/kazlib.html
- 
-Henrik Brix Andersen <brix[AT]gimp.org> gave permission for his webbrowser 
-calling routine to be used.
+
+Henrik Brix Andersen <brix[AT]gimp.org> gave permission for his
+webbrowser calling routine to be used.
+
+Christophe Devine <c.devine[at]cr0.net> gave permission for his
+SHA1 routines to be used. 
diff -urN ethereal-0.10.6/AUTHORS-SHORT-FORMAT ethereal-0.10.7/AUTHORS-SHORT-FORMAT
--- ethereal-0.10.6/AUTHORS-SHORT-FORMAT	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/AUTHORS-SHORT-FORMAT	2004-10-20 18:12:32.000000000 -0500
@@ -0,0 +1,473 @@
+=for html <pre>
+
+=for man .nf
+
+
+Original Author
+-------- ------
+Gerald Combs            <gerald[AT]ethereal.com>
+
+
+Contributors
+------------
+Gilbert Ramirez         <gram[AT]alumni.rice.edu> 
+Hannes R. Boehm         <hannes[AT]boehm.org> 
+Mike Hall               <mike [AT] hallzone.net> 
+Bobo Rajec              <bobo[AT]bsp-consulting.sk> 
+Laurent Deniel          <laurent.deniel[AT]free.fr> 
+Don Lafontaine          <lafont02[AT]cn.ca> 
+Guy Harris              <guy[AT]alum.mit.edu> 
+Simon Wilkinson         <sxw[AT]dcs.ed.ac.uk> 
+JE<ouml>rg Mayer              <jmayer[AT]loplof.de> 
+Martin Maciaszek        <fastjack[AT]i-s-o.net> 
+Didier Jorand           <Didier.Jorand[AT]alcatel.fr> 
+Jun-ichiro itojun Hagino <itojun[AT]itojun.org> 
+Richard Sharpe          <sharpe[AT]ns.aus.com> 
+John McDermott          <jjm[AT]jkintl.com> 
+Jeff Jahr               <jjahr[AT]shastanets.com> 
+Brad Robel-Forrest      <bradr[AT]watchguard.com> 
+Ashok Narayanan         <ashokn[AT]cisco.com> 
+Aaron Hillegass         <aaron[AT]classmax.com> 
+Jason Lango             <jal[AT]netapp.com> 
+Johan Feyaerts          <Johan.Feyaerts[AT]siemens.com> 
+Olivier Abad            <oabad[AT]noos.fr> 
+Thierry Andry           <Thierry.Andry[AT]advalvas.be> 
+Jeff Foster             <jfoste[AT]woodward.com> 
+Peter Torvals           <petertv[AT]xoommail.com> 
+Christophe Tronche      <ch.tronche[AT]computer.org> 
+Nathan Neulinger        <nneul[AT]umr.edu> 
+Tomislav Vujec          <tvujec[AT]carnet.hr> 
+Kojak                   <kojak[AT]bigwig.net> 
+Uwe Girlich             <Uwe.Girlich[AT]philosys.de> 
+Warren Young            <tangent[AT]mail.com> 
+Heikki Vatiainen        <hessu[AT]cs.tut.fi> 
+Greg Hankins            <gregh[AT]twoguys.org> 
+Jerry Talkington        <jtalkington[AT]users.sourceforge.net> 
+Dave Chapeskie          <dchapes[AT]ddm.on.ca> 
+James Coe               <jammer[AT]cin.net> 
+Bert Driehuis           <driehuis[AT]playbeing.org> 
+Stuart Stanley          <stuarts[AT]mxmail.net> 
+John Thomes             <john[AT]ensemblecom.com> 
+Laurent Cazalet         <laurent.cazalet[AT]mailclub.net> 
+Thomas Parvais          <thomas.parvais[AT]advalvas.be> 
+Gerrit Gehnen           <G.Gehnen[AT]atrie.de> 
+Craig Newell            <craign[AT]cheque.uq.edu.au> 
+Ed Meaney               <emeaney[AT]cisco.com> 
+Dietmar Petras          <DPetras[AT]ELSA.de> 
+Fred Reimer             <fwr[AT]ga.prestige.net> 
+Florian Lohoff          <flo[AT]rfc822.org> 
+Jochen Friedrich        <jochen+ethereal[AT]scram.de> 
+Paul Welchinski         <paul.welchinski[AT]telusplanet.net> 
+Doug Nazar              <nazard[AT]dragoninc.on.ca> 
+Andreas Sikkema         <h323 [AT] ramdyne.nl> 
+Mark Muhlestein         <mmm[AT]netapp.com> 
+Graham Bloice           <graham.bloice[AT]trihedral.com> 
+Ralf Schneider          <ralf.schneider[AT]alcatel.se> 
+Yaniv Kaul              <ykaul[AT]netvision.net.il> 
+Paul Ionescu            <paul[AT]acorp.ro> 
+Mark Burton             <markb[AT]ordern.com> 
+Stefan Raab             <sraab[AT]cisco.com> 
+Mark Clayton            <clayton[AT]shore.net> 
+Michael Rozhavsky       <mike[AT]tochna.technion.ac.il> 
+Dug Song                <dugsong[AT]monkey.org> 
+Michael TE<uuml>xen           <tuexen [AT] fh-muenster.de> 
+Bruce Korb              <bkorb[AT]sco.com> 
+Jose Pedro Oliveira     <jpo[AT]di.uminho.pt> 
+David Frascone          <dave[AT]frascone.com> 
+Peter Kjellerstedt      <pkj[AT]axis.com> 
+Phil Techau             <phil_t[AT]altavista.net> 
+Wes Hardaker            <hardaker[AT]users.sourceforge.net> 
+Robert Tsai             <rtsai[AT]netapp.com> 
+Craig Metz              <cmetz[AT]inner.net> 
+Per Flock               <per.flock[AT]axis.com> 
+Jack Keane              <jkeane[AT]OpenReach.com> 
+Brian Wellington        <bwelling[AT]xbill.org> 
+Santeri Paavolainen     <santtu[AT]ssh.com> 
+Ulrich Kiermayr         <uk[AT]ap.univie.ac.at> 
+Neil Hunter             <neil.hunter[AT]energis-squared.com> 
+Ralf Holzer             <ralf[AT]well.com> 
+Craig Rodrigues         <rodrigc [AT] attbi.com> 
+Ed Warnicke             <hagbard[AT]physics.rutgers.edu> 
+Johan Jorgensen         <johan.jorgensen[AT]axis.com> 
+Frank Singleton         <frank.singleton[AT]ericsson.com> 
+Kevin Shi               <techishi[AT]ms22.hinet.net> 
+Mike Frisch             <mfrisch[AT]isurfer.ca> 
+Burke Lau               <burke_lau[AT]agilent.com> 
+Martti Kuparinen        <martti.kuparinen[AT]iki.fi> 
+David Hampton           <dhampton[AT]mac.com> 
+Kent EngstrE<ouml>m           <kent[AT]unit.liu.se> 
+Ronnie Sahlberg         <ronnie_sahlberg[AT]ozemail.com.au> 
+Borosa Tomislav         <tomislav.borosa[AT]SIEMENS.HR> 
+Alexandre P. Ferreira   <alexandref[AT]tcoip.com.br> 
+Simharajan Srishylam    <Simharajan.Srishylam[AT]netapp.com> 
+Greg Kilfoyle           <gregk[AT]redback.com> 
+James E. Flemer         <jflemer[AT]acm.jhu.edu> 
+Peter Lei               <peterlei[AT]cisco.com> 
+Thomas Gimpel           <thomas.gimpel[AT]ferrari.de> 
+Albert Chin             <china[AT]thewrittenword.com> 
+Charles Levert          <charles[AT]comm.polymtl.ca> 
+Todd Sabin              <tas[AT]webspan.net> 
+Eduardo PE<eacute>rez Ureta     <eperez[AT]dei.inf.uc3m.es> 
+Martin Thomas           <martin_a_thomas[AT]yahoo.com> 
+Hartmut Mueller         <hartmut[AT]wendolene.ping.de> 
+Michal Melerowicz       <Michal.Melerowicz[AT]nokia.com> 
+Hannes Gredler          <hannes[AT]juniper.net> 
+Inoue                   <inoue[AT]ainet.or.jp> 
+Olivier Biot            <ethereal[AT]tiscali.be> 
+Patrick Wolfe           <pjw[AT]zocalo.cellular.ameritech.com> 
+Martin Held             <Martin.Held[AT]icn.siemens.de> 
+Riaan Swart             <rswart[AT]cs.sun.ac.za> 
+Christian Lacunza       <celacunza[AT]gmx.net> 
+Scott Renfro            <scott[AT]renfro.org> 
+Juan Toledo             <toledo[AT]users.sourceforge.net> 
+Jean-Christian Pennetier <jeanchristian.pennetier[AT]rd.francetelecom.fr> 
+Jian Yu                 <bgp4news[AT]yahoo.com> 
+Eran Mann               <emann[AT]opticalaccess.com> 
+Andy Hood               <ajhood [AT] fl.net.au> 
+Randy McEoin            <rmceoin[AT]pe.net> 
+Edgar Iglesias          <edgar.iglesias[AT]axis.com> 
+Martina Obermeier       <Martina.Obermeier[AT]icn.siemens.de> 
+Javier Achirica         <achirica[AT]ttd.net> 
+B. Johannessen          <bob[AT]havoq.com> 
+Thierry Pelle           <thierry.pelle[AT]laposte.net> 
+Francisco Javier Cabello <fjcabello[AT]vtools.es> 
+Laurent Rabret          <laurent.rabret[AT]rd.francetelecom.fr> 
+nuf si                  <gnippiks[AT]yahoo.com> 
+Jeff Morriss            <jeff.morriss[AT]ulticom.com> 
+Aamer Akhter            <aakhter[AT]cisco.com> 
+Pekka Savola            <pekkas[AT]netcore.fi> 
+David Eisner            <cradle[AT]Glue.umd.edu> 
+Steve Dickson           <steved[AT]talarian.com> 
+Markus Seehofer         <mseehofe[AT]nt.hirschmann.de> 
+Lee Berger              <lberger[AT]roy.org> 
+Motonori Shindo         <mshindo[AT]mshindo.net> 
+Terje Krogdahl          <tekr[AT]nextra.com> 
+Jean-Francois Mule      <jfm[AT]cablelabs.com> 
+Thomas Wittwer          <thomas.wittwer[AT]iclip.ch> 
+Matthias Nyffenegger    <matthias.nyffenegger[AT]iclip.ch> 
+Palle Lyckegaard        <Palle[AT]lyckegaard.dk> 
+Nicolas Balkota         <balkota[AT]mac.com> 
+Tom Uijldert            <Tom.Uijldert[AT]cmg.nl> 
+Akira Endoh             <endoh[AT]netmarks.co.jp> 
+Graeme Hewson           <graeme.hewson[AT]oracle.com> 
+Pasi Eronen             <pe[at]iki.fi> 
+Georg von Zezschwitz    <gvz[AT]2scale.net> 
+Steffen Weinreich       <steve[AT]weinreich.org> 
+Marc Milgram            <ethereal[AT]mmilgram.NOSPAMmail.net> 
+Gordon McKinney         <gordon[AT]night-ray.com> 
+Pavel Novotny           <Pavel.Novotny[AT]icn.siemens.de> 
+Shinsuke Suzuki         <suz[AT]kame.net> 
+Andrew C. Feren         <acferen[AT]yahoo.com> 
+Tomas Kukosa            <tomas.kukosa [AT] siemens.com> 
+Andreas Stockmeier      <a.stockmeier[AT]avm.de> 
+Pekka Nikander          <pekka.nikander[AT]nomadiclab.com> 
+Hamish Moffatt          <hamish[AT]cloud.net.au> 
+Kazushi Sugyo           <k-sugyou[AT]nwsl.mesh.ad.jp> 
+Tim Potter              <tpot[AT]samba.org> 
+Raghu Angadi            <rangadi[AT]inktomi.com> 
+Taisuke Sasaki          <sasaki[AT]soft.net.fujitsu.co.jp> 
+Tim Newsham             <newsham[AT]lava.net> 
+Tom Nisbet              <Tnisbet[AT]VisualNetworks.com> 
+Darren New              <dnew[AT]san.rr.com> 
+Pavel Mores             <pvl[AT]uh.cz> 
+Bernd Becker            <bb[AT]bernd-becker.de> 
+Heinz Prantner          <Heinz.Prantner[AT]radisys.com> 
+Irfan Khan              <ikhan[AT]qualcomm.com> 
+Jayaram V.R             <vjayar[AT]cisco.com> 
+Dinesh Dutt             <ddutt[AT]cisco.com> 
+Nagarjuna Venna         <nvenna[AT]Brixnet.com> 
+Jirka Novak             <j.novak[AT]netsystem.cz> 
+Ricardo BarroetaveE<ntilde>a    <rbarroetavena[AT]veufort.com> 
+Alan Harrison           <alanharrison[AT]mail.com> 
+Mike Frantzen           <frantzen[AT]w4g.org> 
+Charlie Duke            <cduke[AT]fvc.com> 
+Alfred Arnold           <Alfred.Arnold[AT]elsa.de> 
+Dermot Bradley          <dermot.bradley[AT]openwave.com> 
+Adam Sulmicki           <adam[AT]cfar.umd.edu> 
+Kari Tiirikainen        <kari.tiirikainen[AT]nokia.com> 
+John Mackenzie          <John.A.Mackenzie[AT]t-online.de> 
+Peter Valchev           <pvalchev[AT]openbsd.org> 
+Alex Rozin              <Arozin[AT]mrv.com> 
+Jouni Malinen           <jkmaline[AT]cc.hut.fi> 
+Paul E. Erkkila         <pee[AT]erkkila.org> 
+Jakob Schlyter          <jakob[AT]openbsd.org> 
+Jim Sienicki            <sienicki[AT]issanni.com> 
+Steven French           <sfrench[AT]us.ibm.com> 
+Diana Eichert           <deicher[AT]sandia.gov> 
+Blair Cooper            <blair[AT]teamon.com> 
+Kikuchi Ayamura         <ayamura[AT]ayamura.org> 
+Didier Gautheron        <dgautheron[AT]magic.fr> 
+Phil Williams           <csypbw[AT]comp.leeds.ac.uk> 
+Kevin Humphries         <khumphries[AT]networld.com> 
+Erik NordstrE<ouml>m          <erik.nordstrom[AT]it.uu.se> 
+Devin Heitmueller       <dheitmueller[AT]netilla.com> 
+Chenjiang Hu            <chu[AT]chiaro.com> 
+Kan Sasaki              <sasaki[AT]fcc.ad.jp> 
+Stefan Wenk             <stefan.wenk[AT]gmx.at> 
+Ruud Linders            <ruud[AT]lucent.com> 
+Andrew Esh              <Andrew.Esh[AT]tricord.com> 
+Greg Morris             <GMORRIS[AT]novell.com> 
+Dirk Steinberg          <dws[AT]dirksteinberg.de> 
+Kari Heikkila           <kari.o.heikkila[AT]nokia.com> 
+Olivier Dreux           <Olivier.Dreux[AT]alcatel.fr> 
+Michael Stiller         <ms[AT]2scale.net> 
+Antti Tuominen          <ajtuomin[AT]tml.hut.fi> 
+Martin Gignac           <lmcgign[AT]mobilitylab.net> 
+John Wells              <wells[AT]ieee.org> 
+Loic Tortay             <tortay[AT]cc.in2p3.fr> 
+Steve Housley           <Steve_Housley[AT]eur.3com.com> 
+Peter Hawkins           <peter[AT]hawkins.emu.id.au> 
+Bill Fumerola           <billf[AT]FreeBSD.org> 
+Chris Waters            <chris[AT]waters.co.nz> 
+Solomon Peachy          <pizza[AT]shaftnet.org> 
+Jaime Fournier          <Jaime.Fournier [AT] hush.com> 
+Markus Steinmann        <ms[AT]seh.de> 
+Tsutomu Mieno           <iitom[AT]utouto.com> 
+Yasuhiro Shirasaki      <yasuhiro[AT]gnome.gr.jp> 
+Anand V. Narwani        <anand[AT]narwani.org> 
+Christopher K. St. John <cks[AT]distributopia.com> 
+Nix                     <nix[AT]esperi.demon.co.uk> 
+Liviu Daia              <Liviu.Daia[AT]imar.ro> 
+Richard Urwin           <richard[AT]soronlin.org.uk> 
+Prabhakar Krishnan      <Prabhakar.Krishnan[AT]netapp.com> 
+Jim McDonough           <jmcd[AT]us.ibm.com> 
+Sergei Shokhor          <sshokhor[AT]uroam.com> 
+Hidetaka Ogawa          <ogawa[AT]bs2.qnes.nec.co.jp> 
+Jan Kratochvil          <short[AT]ucw.cz> 
+Alfred Koebler          <ak[AT]icon-sult.de> 
+Vassilii Khachaturov    <Vassilii.Khachaturov[AT]comverse.com> 
+Bill Studenmund         <wrstuden[AT]wasabisystems.com> 
+Brian Bruns             <camber[AT]ais.org> 
+Flavio Poletti          <flavio[AT]polettix.it> 
+Marcus Haebler          <haeblerm[AT]yahoo.com> 
+Ulf Lamping             <ulf.lamping[AT]web.de> 
+Matthew Smart           <smart[AT]monkey.org> 
+Luke Howard             <lukeh[AT]au.padl.com> 
+PC Drew                 <drewpc[AT]ibsncentral.com> 
+Renzo Tomas             <renzo.toma [AT] xs4all.nl> 
+Clive A. Stubbings      <eth [AT] vjet.demon.co.uk> 
+Steve Langasek          <vorlon [AT] netexpress.net> 
+Brad Hards              <bhards[AT]bigpond.net.au> 
+cjs 2895                <cjs2895[AT]hotmail.com> 
+Lutz Jaenicke           <Lutz.Jaenicke [AT] aet.TU-Cottbus.DE> 
+Senthil Kumar Nagappan  <sknagappan [AT] yahoo.com> 
+Jason House             <jhouse [AT] mitre.org> 
+Peter Fales             <psfales [AT] lucent.com> 
+Fritz Budiyanto         <fritzb88 [AT] yahoo.com> 
+Jean-Baptiste Marchand  <Jean-Baptiste.Marchand [AT] hsc.fr> 
+Andreas Trauer          <andreas.trauer [AT] siemens.com> 
+Ronald Henderson        <Ronald.Henderson [AT] CognicaseUSA.com> 
+Brian Ginsbach          <ginsbach [AT] cray.com> 
+Dave Richards           <d_m_richards [AT] comcast.net> 
+Martin Regner           <martin.regner [AT] chello.se> 
+Jason Greene            <jason [AT] inetgurus.net> 
+Marco Molteni           <mmolteni [AT] cisco.com> 
+James Harris            <jharris [AT] fourhorsemen.org> 
+rmkml                   <rmkml [AT] wanadoo.fr> 
+Anders Broman           <anders.broman [AT] ericsson.com> 
+Christian Falckenberg   <christian.falckenberg [AT] nortelnetworks.com> 
+Huagang Xie             <xie [AT] lids.org> 
+cfs 2895                <cjs2895 [AT] hotmail.com> 
+Pasi Kovanen            <Pasi.Kovanen [AT] tahoenetworks.fi> 
+Teemu Rinta-aho         <teemu.rinta-aho [AT] nomadiclab.com> 
+Martijn Schipper        <martijn.schipper [AT] intersil.com> 
+Wayne Parrott           <wayne_p [AT] pacific.net.au> 
+Laurent Meyer           <laurent.meyer6 [AT] wanadoo.fr> 
+Lars Roland             <Lars.Roland [AT] gmx.net> 
+Miha Jemec              <m.jemec [AT] iskratel.si> 
+Markus Friedl           <markus [AT] openbsd.org> 
+Todd Montgomery         <tmontgom [AT] tibco.com> 
+emre                    <emre [AT] flash.net> 
+Stephen Shelley         <steve.shelley [AT] attbi.com> 
+Erwin Rol               <erwin [AT] erwinrol.com> 
+Duncan Laurie           <duncan [AT] sun.com> 
+Tony Schene             <schene [AT] pcisys.net> 
+Matthijs Melchior       <mmelchior [AT] xs4all.nl> 
+Garth Bushell           <gbushell [AT] elipsan.com> 
+Mark C. Brown           <mbrown [AT] nosila.net> 
+Can Erkin Acar          <canacar [AT] eee.metu.edu.tr> 
+Martin Warnes           <martin.warnes [AT] ntlworld.com> 
+J Bruce Fields          <bfields [AT] fieldses.org> 
+tz                      <tz1 [AT] mac.com> 
+Jeff Liu                <jqliu [AT] broadcom.com> 
+Niels Koot              <Niels.Koot [AT] logicacmg.com> 
+Lionel Ains             <lains [AT] gmx.net> 
+Joakim Wiberg           <jow [AT] hms-networks.com> 
+Jeff Rizzo              <riz [AT] boogers.sf.ca.us> 
+Christoph Wiest         <ch.wiest [AT] tesionmail.de> 
+Xuan Zhang              <xz [AT] aemail4u.com> 
+Thierry Martin          <thierry.martin [AT] accellent-group.com> 
+Oleg Terletsky          <oleg.terletsky [AT] comverse.com> 
+Michael Lum             <mlum [AT] telostech.com> 
+Shiang-Ming Huang       <smhuang [AT] pcs.csie.nctu.edu.tw> 
+Tony Lindstrom          <tony.lindstrom [AT] ericsson.com> 
+Niklas Ogren            <niklas.ogren [AT] 71.se> 
+Jesper Peterson         <jesper [AT] endace.com> 
+Giles Scott             <gscott [AT] arubanetworks.com> 
+Vincent Jardin          <vincent.jardin [AT] 6wind.com> 
+Jean-Michel Fayard      <jean-michel.fayard [AT] moufrei.de> 
+Josef Korelus           <jkor [AT] quick.cz> 
+Brian K. Teravskis      <Brian_Teravskis [AT] Cargill.com> 
+Nathan Jennings         <njen [AT] bellsouth.net> 
+Hans Viens              <hviens [AT] mediatrix.com> 
+Kevin A. Noll           <knoll [AT] poss.com> 
+Emanuele Caratti        <wiz [AT] libero.it> 
+Graeme Reid             <graeme.reid [AT] norwoodsystems.com> 
+Lars Ruoff              <lars.ruoff [AT] sxb.bsf.alcatel.fr> 
+Samuel Qu               <samuel.qu [AT] utstar.com> 
+Baktha Muralitharan     <muralidb [AT] cisco.com> 
+LoE<iuml>c Minier             <lool [AT] dooz.org> 
+Marcel Holtmann         <marcel [AT] holtmann.org> 
+Scott Emberley          <scotte [AT] netinst.com> 
+Brian Fundakowski Feldman <bfeldman [AT] fla.fujitsu.com> 
+Yuriy Sidelnikov        <ysidelnikov [AT] hotmail.com> 
+Matthias Drochner       <M.Drochner [AT] fz-juelich.de> 
+Dave Sclarsky           <dave_sclarsky [AT] cnt.com> 
+Scott Hovis             <scott.hovis [AT] ums.msfc.nasa.gov> 
+David Fort              <david.fort [AT] irisa.fr> 
+Martijn Schipper        <mschipper [AT] globespanvirata.com> 
+Felix Fei               <felix.fei [AT] utstar.com> 
+Christoph Neusch        <christoph.neusch [AT] nortelnetworks.com> 
+Jan Kiszka              <jan.kiszka [AT] web.de> 
+Joshua Craig Douglas    <jdouglas [AT] enterasys.com> 
+Dick Gooris             <gooris [AT] lucent.com> 
+Michael Shuldman        <michaels [AT] inet.no> 
+Tadaaki Nagao           <nagao [AT] iij.ad.jp> 
+Aaron Woo               <woo [AT] itd.nrl.navy.mil> 
+Chris Wilson            <chris [AT] mxtelecom.com> 
+Rolf Fiedler            <Rolf.Fiedler [AT] Innoventif.com> 
+Alastair Maw            <ethereal [AT] almaw.com> 
+Sam Leffler             <sam [AT] errno.com> 
+Martin Mathieson        <martin [AT] arca-technologies.com> 
+Christian Wagner        <Christian.Wagner [AT] stud.uni-karlsruhe.de> 
+Edwin Calo              <calo [AT] fusemail.com> 
+Ian Schorr              <ischorr [AT] comcast.net> 
+Rowan McFarland         <rmcfarla[AT]cisco.com> 
+John Engelhart          <johne [AT] zang.com> 
+Ryuji Somegawa          <ryuji-so [AT] is.aist-nara.ac.jp> 
+metatech                <metatech [AT] flashmail.com> 
+Brian Wheeler           <Brian.Wheeler [AT] arrisi.com> 
+Josh Bailey             <joshbailey [AT] lucent.com> 
+Jelmer Vernooij         <jelmer [AT] samba.org> 
+Duncan Sargeant         <dunc-ethereal-dev [AT] rcpt.to> 
+Love HE<ouml>rnquist E<Aring>strand  <lha [AT] it.su.se> 
+Lukas Pokorny           <maskis [AT] seznam.cz> 
+Carlos Pignataro        <cpignata [AT] cisco.com> 
+Thomas Anders           <thomas.anders [AT] blue-cable.de> 
+Rich Coe                <Richard.Coe [AT] med.ge.com> 
+Dominic BE<eacute>chaz          <bdo [AT] zhwin.ch> 
+Richard van der Hoff     <richardv [AT] mxtelecom.com> 
+Shaun Jackman		<sjackman [AT] telus.net> 
+Jon Oberheide           <jon [AT] oberheide.org> 
+Henry Ptasinski		<henryp [AT] broadcom.com> 
+Roberto Morro		<Roberto.Morro [AT] TILAB.COM> 
+Chris Maynard		<Christopher.Maynard [AT] GTECH.COM> 
+SEKINE Hideki		<sekineh [AT] gf7.so-net.ne.jp> 
+Jeff Connelly		<shellreef+mp2p [AT] gmail.com> 
+Irene RE<uuml>ngler          <i.ruengeler [AT] fh-muenster.de 
+M. Ortega y Strupp	<moys [AT] loplof.de> 
+Kelly Byrd		<kbyrd-ethereal [AT] memcpy.com> 
+Luis Ontanon		<luis.ontanon.ibm[AT]h3g.it> 
+Luca Deri	<deri [AT] ntop.org> 
+Viorel Suman	<vsuman [AT] avmob.ro> 
+Alejandro Vaquero	<alejandro.vaquero [AT] verso.com> 
+Francesco Fondelli	<fondelli.francesco [AT] tiscali.it> 
+
+And assorted fixes and enhancements by the people listed above
+and by:
+
+Pavel Roskin            <proski [AT] gnu.org>
+Georgi Guninski         <guninski [AT] guninski.com>
+Jason Copenhaver        <jcopenha [AT] typedef.org>
+Eric Perie              <eric.perie [AT] colubris.com>
+David Yon               <yon [AT] tacticalsoftware.com>
+Marcio Franco           <franco.marcio [AT] rd.francetelecom.fr>
+Kaloian Stoilov         <kalkata [AT] yahoo.com>
+Steven Lass             <stevenlass [AT] mail.com>
+Gregory Stark           <gsstark [AT] mit.edu>
+Darren Steele           <steeley [AT] steeley.co.uk>
+                        <smhuang [AT] pcs.csie.nctu.edu.tw>
+Michael Kopp            <michael.kopp [AT] isarnet.de>
+Bernd Leibing           <bernd.leibing [AT] kiz.uni-ulm.de>
+Chris Heath             <chris [AT] heathens.co.nz>
+Gisle Vanem             <giva [AT] bgnett.no>
+Ritchie                 <ritchie [AT] tipsybottle.com>
+Aki Immonen             <aki.immonen [AT] golftalma.fi>
+David E. Weekly         <david [AT] weekly.org>
+Steve Ford              <sford [AT] geeky-boy.com>
+Masaki Chikama          <masaki-c [AT] is.aist-nara.ac.jp>
+Mohammad Hanif          <mhanif [AT] nexthop.com>
+Eric Wedel              <ewedel [AT] bluearc.com>
+Reinhard Speyerer       <rspmn [AT] arcor.de>
+Patrick Kursawe         <phosphan [AT] gentoo.org>
+Arsen Chaloyan          <achaloyan [AT] yahoo.com>
+                        <melerski [AT] poczta.onet.pl>
+Arnaud Jacques          <webmaster [AT] securiteinfo.com>
+D. Manzella             <manzella [AT] lucent.com>
+Jari Mustajarvi         <jari.mustajarvi [AT] nokia.com>
+Joost Yervante Damad    <Joost.Damad [AT] siemens.com>
+Pierre Juhen            <pierre.juhen [AT] wanadoo.fr>
+David Richards          <drichards [AT] alum.mit.edu>
+Shusaku Ueda            <ueda [AT] sra.co.jp>
+Jonathan Perkins        <jonathan.perkins [AT] ipaccess.com>
+Holger Schurig          <h.schurig [AT] mn-logistik.de>
+Peter J. Creath         <peter-ethereal [AT] creath.net>
+Magnus Hansson          <mah [AT] hms.se>
+Pavel Kankovsky         <kan [AT] dcit.cz>
+Nick Black              <dank [AT] reflexsecurity.com>
+Bill Guyton             <guyton [AT] bguyton.com>
+Chernishov Yury         <Chernishov [AT] iskrauraltel.ru>
+Thomas Palmer           <Thomas.Palmer [AT] Gunter.AF.mil>
+Clinton Work            <clinton [AT] scripty.com>
+Joe Marcus Clarke       <marcus [AT] marcuscom.com>
+Kendy Kutzner           <kutzner[AT]tm.uka.de>
+James H. Cloos Jr.      <cloos [AT] jhcloos.com>
+Tim Farley              <tfarley[AT]iss.net>
+Daniel Thompson         <daniel.thompson[AT]st.com>
+Chris Jepeway           <thai-dragon[AT]eleven29.com>
+Matthew Bradley         <matthew.bradley [AT] cnsonline.net>
+Nathan Alger            <nathan [AT] wasted.com>
+Stas Grabois            <sagig [AT] radware.com>
+Ainsley Pereira         <APereira [AT] Witness.com>
+Philippe Mazeau         <philippe.mazeau [AT] swissvoice.net>
+Carles Kishimoto        <ckishimo [AT] ac.upc.es>
+Dennis Lim              <Dennis.Lim [AT] motorola.com>
+			<postadal [AT] suse.cz>
+Martin van der Werff	<martin [AT] vanderwerff.org>
+Marco van den Bovenkamp	<marco [AT] linuxgoeroe.dhs.org>
+Ming Zhang		<mingz [AT] ele.uri.edu>
+Neil Piercy		<Neil.Piercy [AT] ipaccess.com>
+RE<eacute>mi Denis-Courmont	<courmisch [AT] via.ecp.fr>
+Francisco Alcoba	<francisco.alcoba [AT] ericsson.com>
+Thomas Palmer		<tpalmer [AT] elmore.rr.com>
+ME<aring>rten Svantesson	<f95-msv [AT] f.kth.se>
+Thomas Boehne		<TBoehne [AT] ADwin.de>
+Steve Sommars		<sommars [AT] lucent.com>
+Olivier Jacques		<olivier.jacques [AT] hp.com>
+Kestutis Kupciunas	<kesha [AT] soften.ktu.lt>
+RenE<eacute> Pilz		<rene.pilz [AT] ftw.at>
+Laurent Constantin	<laurent.constantin [AT] aql.fr>
+
+Alain Magloire <alainm[AT]rcsm.ece.mcgill.ca> was kind enough to
+give his permission to use his version of snprintf.c.
+
+Dan Lasley <dlasley[AT]promus.com> gave permission for his
+dumpit() hex-dump routine to be used.
+
+Mattia Cazzola <mattiac[AT]alinet.it> provided a patch to the
+hex dump display routine.
+
+We use the exception module from Kazlib, a C library written by
+Kaz Kylheku <kaz[AT]ashi.footprints.net>. Thanks go to him for
+his well-written library. The Kazlib home page can be found at
+http://users.footprints.net/~kaz/kazlib.html
+
+Henrik Brix Andersen <brix[AT]gimp.org> gave permission for his
+webbrowser calling routine to be used.
+
+Christophe Devine <c.devine[at]cr0.net> gave permission for his
+SHA1 routines to be used. 
+
+=for html </pre>
+
+=for man .fi
diff -urN ethereal-0.10.6/ChangeLog ethereal-0.10.7/ChangeLog
--- ethereal-0.10.6/ChangeLog	2004-08-12 20:53:43.000000000 -0500
+++ ethereal-0.10.7/ChangeLog	2004-10-20 21:12:51.000000000 -0500
@@ -1,7699 +1,6130 @@
 ------------------------------------------------------------------------
-r11730 | gerald | 2004-08-12 17:46:09 -0500 (Thu, 12 Aug 2004) | 2 lines
+r12364 | gerald | 2004-10-20 21:11:04 -0500 (Wed, 20 Oct 2004) | 2 lines
 Changed paths:
-   M /releases/ethereal-0.10.6/Makefile.am
+   M /releases/ethereal-0.10.7/packaging/nsis/ethereal.nsi
+   M /releases/ethereal-0.10.7/plugins/opsi/packet-opsi.c
+   M /releases/ethereal-0.10.7/plugins/opsi/packet-opsi.h
 
-Add capinfo.rc.in and wiretap.rc.in to the distribution.
+Pull in revision 12363 from the main branch.
 
 ------------------------------------------------------------------------
-r11728 | gerald | 2004-08-12 16:47:47 -0500 (Thu, 12 Aug 2004) | 3 lines
+r12360 | gerald | 2004-10-20 14:13:52 -0500 (Wed, 20 Oct 2004) | 2 lines
 Changed paths:
-   M /releases/ethereal-0.10.6/doc/Makefile.am
-   M /releases/ethereal-0.10.6/make-authors-short.pl
+   M /releases/ethereal-0.10.7/ChangeLog
 
-From Graeme Hewson: Keep the list of authors in the Ethereal man page from 
-wrapping, and fix the title.
+Final update.
 
 ------------------------------------------------------------------------
-r11720 | gerald | 2004-08-11 16:21:44 -0500 (Wed, 11 Aug 2004) | 2 lines
+r12359 | gerald | 2004-10-20 14:07:50 -0500 (Wed, 20 Oct 2004) | 2 lines
 Changed paths:
-   M /releases/ethereal-0.10.6/Makefile.nmake
+   M /releases/ethereal-0.10.7/Makefile.am
+   M /releases/ethereal-0.10.7/Makefile.nmake
+   M /releases/ethereal-0.10.7/NEWS
+   D /releases/ethereal-0.10.7/capinfo.c
+   A /releases/ethereal-0.10.7/capinfos.c (from /trunk/capinfos.c:12358)
+   M /releases/ethereal-0.10.7/configure.in
+   M /releases/ethereal-0.10.7/doc/Makefile.am
+   M /releases/ethereal-0.10.7/doc/Makefile.nmake
+   D /releases/ethereal-0.10.7/doc/capinfo.pod
+   A /releases/ethereal-0.10.7/doc/capinfos.pod (from /trunk/doc/capinfos.pod:12358)
+   M /releases/ethereal-0.10.7/docbook/eug_src/EUG_app_tools.xml
+   M /releases/ethereal-0.10.7/docbook/eug_src/EUG_chapter_build_install.xml
+   M /releases/ethereal-0.10.7/image/Makefile.nmake
+   D /releases/ethereal-0.10.7/image/capinfo.rc.in
+   A /releases/ethereal-0.10.7/image/capinfos.rc.in (from /trunk/image/capinfos.rc.in:12358)
+   M /releases/ethereal-0.10.7/packaging/nsis/Makefile.nmake
+   M /releases/ethereal-0.10.7/packaging/nsis/ethereal.nsi
 
-Update to GTK-Wimp 0.6.1.
+Pull in rev 12358: Rename "capinfo" to "capinfos".
 
 ------------------------------------------------------------------------
-r11719 | gerald | 2004-08-11 15:36:21 -0500 (Wed, 11 Aug 2004) | 3 lines
+r12357 | gerald | 2004-10-20 11:48:58 -0500 (Wed, 20 Oct 2004) | 2 lines
 Changed paths:
-   M /releases/ethereal-0.10.6/Makefile.nmake
+   M /releases/ethereal-0.10.7/ChangeLog
+   M /releases/ethereal-0.10.7/NEWS
 
-Change the "setup" target to download the updated GTK+ libraries described
-at http://mail.gnome.org/archives/gtk-devel-list/2004-August/msg00058.html .
+Update NEWS and ChangeLog for 0.10.7.
 
 ------------------------------------------------------------------------
-r11716 | gerald | 2004-08-11 14:11:06 -0500 (Wed, 11 Aug 2004) | 2 lines
+r12356 | gerald | 2004-10-20 10:30:19 -0500 (Wed, 20 Oct 2004) | 27 lines
 Changed paths:
-   M /releases/ethereal-0.10.6/AUTHORS
-   M /releases/ethereal-0.10.6/epan/column-utils.c
+   M /releases/ethereal-0.10.7
+   M /releases/ethereal-0.10.7/AUTHORS
+   M /releases/ethereal-0.10.7/config.nmake
+   M /releases/ethereal-0.10.7/doc/tethereal.pod
+   M /releases/ethereal-0.10.7/docbook/developer-guide.xml
+   A /releases/ethereal-0.10.7/docbook/edg_src/EDG_chapter_capture.xml (from /trunk/docbook/edg_src/EDG_chapter_capture.xml:12355)
+   M /releases/ethereal-0.10.7/docbook/edg_src/EDG_chapter_env_intro.xml
+   M /releases/ethereal-0.10.7/docbook/edg_src/EDG_chapter_userinterface.xml
+   M /releases/ethereal-0.10.7/epan/dissectors/packet-diameter.c
+   M /releases/ethereal-0.10.7/epan/dissectors/packet-smb.c
+   M /releases/ethereal-0.10.7/epan/libethereal.def
+   M /releases/ethereal-0.10.7/tethereal.c
+   M /releases/ethereal-0.10.7/wiretap/nettl.c
 
-Copy in Neil Piercy's column fixes from the main trunk (r11648).
+Merge in revisions from the main trunk:
 
-------------------------------------------------------------------------
-r11645 | gerald | 2004-08-10 10:11:38 -0500 (Tue, 10 Aug 2004) | 2 lines
-Changed paths:
-   M /releases/ethereal-0.10.6/epan/Makefile.nmake
+12342: Fix a cut/paste error in packet-smb.c.
 
-From Graham Bloice: Allow libethereal.dll to be built after recent changes.
+12343: Fix a compiler warning in packet-diameter.c.
 
-------------------------------------------------------------------------
-r11643 | gerald | 2004-08-10 09:09:30 -0500 (Tue, 10 Aug 2004) | 2 lines
-Changed paths:
-   M /releases/ethereal-0.10.6/capture-wpcap.c
-   M /releases/ethereal-0.10.6/epan/Makefile.am
-   M /releases/ethereal-0.10.6/epan/Makefile.common
-   M /releases/ethereal-0.10.6/epan/Makefile.nmake
-   M /releases/ethereal-0.10.6/epan/dissectors/packet-dhcp-failover.c
+12344: Add range preference functions to libethereal.def.
 
-Pull in changes from revs 11639 - 11642.
+12345: Add AUTHORS-SHORT-FORMAT to the list of files to ignore.
 
-------------------------------------------------------------------------
-r11637 | gerald | 2004-08-09 17:19:03 -0500 (Mon, 09 Aug 2004) | 2 lines
-Changed paths:
-   M /releases/ethereal-0.10.6/epan/Makefile.nmake
-   M /releases/ethereal-0.10.6/epan/addr_resolv.c
-   M /releases/ethereal-0.10.6/epan/addr_resolv.h
+12348: Fix whitespace in EDG_chapter_env_intro.xml.
+
+12349: Add EDG_chapter_capture.xml.
+
+12350: Fix enums recognition in packet-diameter.c.
+
+12351: Fix FDDI bit swap and enhance merging in nettl.c.
+
+12352: Fix packet preamble/finale printing in tethereal.c.
+
+12353: Update the tethereal man page for the previous fix.
+
+12354: Add web GTK resources to the Developer's Guide.
+
+12355: Export bytes_to_str_punct() in libethereal.def.
 
-Rename "resolv" to "addr_resolv".
 
 ------------------------------------------------------------------------
-r11636 | gerald | 2004-08-09 16:02:05 -0500 (Mon, 09 Aug 2004) | 2 lines
+r12341 | gerald | 2004-10-18 10:14:13 -0500 (Mon, 18 Oct 2004) | 2 lines
 Changed paths:
-   A /releases/ethereal-0.10.6 (from /trunk:11635)
+   M /releases/ethereal-0.10.7/AUTHORS
+   M /releases/ethereal-0.10.7/Makefile.am
+   M /releases/ethereal-0.10.7/Makefile.nmake
+   M /releases/ethereal-0.10.7/doc/Makefile.am
+   M /releases/ethereal-0.10.7/doc/Makefile.nmake
+   M /releases/ethereal-0.10.7/docbook/README.txt
+   M /releases/ethereal-0.10.7/docbook/edg_src/EDG_chapter_libraries.xml
+   M /releases/ethereal-0.10.7/epan/dissectors/packet-ber.c
+   M /releases/ethereal-0.10.7/epan/dissectors/packet-bootp.c
+   M /releases/ethereal-0.10.7/epan/dissectors/packet-dcm.c
+   M /releases/ethereal-0.10.7/epan/dissectors/packet-diameter.c
+   M /releases/ethereal-0.10.7/epan/dissectors/packet-gprs-llc.c
+   M /releases/ethereal-0.10.7/epan/dissectors/packet-gsm_a.c
+   M /releases/ethereal-0.10.7/epan/dissectors/packet-kerberos.c
+   M /releases/ethereal-0.10.7/epan/dissectors/packet-rtp.c
+   M /releases/ethereal-0.10.7/epan/dissectors/packet-rtp.h
+   M /releases/ethereal-0.10.7/epan/dissectors/packet-sip.c
+   M /releases/ethereal-0.10.7/epan/dissectors/packet-tcap.c
+   M /releases/ethereal-0.10.7/epan/libethereal.def
+   M /releases/ethereal-0.10.7/epan/prefs-int.h
+   M /releases/ethereal-0.10.7/epan/prefs.c
+   M /releases/ethereal-0.10.7/epan/prefs.h
+   M /releases/ethereal-0.10.7/epan/range.c
+   M /releases/ethereal-0.10.7/epan/range.h
+   M /releases/ethereal-0.10.7/gtk/file_dlg.c
+   M /releases/ethereal-0.10.7/gtk/main.c
+   M /releases/ethereal-0.10.7/gtk/prefs_dlg.c
+   M /releases/ethereal-0.10.7/gtk/print_dlg.c
+   M /releases/ethereal-0.10.7/gtk/range_utils.c
+   M /releases/ethereal-0.10.7/gtk/range_utils.h
+   M /releases/ethereal-0.10.7/gtk/rtp_analysis.c
+   A /releases/ethereal-0.10.7/make-authors-format.pl (from /trunk/make-authors-format.pl:12340)
+   M /releases/ethereal-0.10.7/make-authors-short.pl
+   D /releases/ethereal-0.10.7/make-authors-short2.pl
+   M /releases/ethereal-0.10.7/manuf
+   M /releases/ethereal-0.10.7/merge.c
+   M /releases/ethereal-0.10.7/merge.h
+   M /releases/ethereal-0.10.7/packaging/nsis/Makefile.nmake
+   M /releases/ethereal-0.10.7/packaging/nsis/ethereal.nsi
+   M /releases/ethereal-0.10.7/packet-range.c
+   M /releases/ethereal-0.10.7/packet-range.h
+   A /releases/ethereal-0.10.7/perlnoutf.pl (from /trunk/perlnoutf.pl:12340)
+   M /releases/ethereal-0.10.7/tap-protocolinfo.c
+   A /releases/ethereal-0.10.7/tools/unix2dos.pl (from /trunk/tools/unix2dos.pl:12340)
+   M /releases/ethereal-0.10.7/wiretap/netxray.c
+   M /releases/ethereal-0.10.7/xmlstub.c
+   M /releases/ethereal-0.10.7/xmlstub.h
 
-Branch off the 0.10.6 release.
+Update to the current trunk.
 
 ------------------------------------------------------------------------
-r11633 | jmayer | 2004-08-08 22:18:33 -0500 (Sun, 08 Aug 2004) | 1 line
+r12307 | gerald | 2004-10-15 14:07:01 -0500 (Fri, 15 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/FAQ
-   M /trunk/help/faq.txt
+   A /releases/ethereal-0.10.7 (from /trunk:12306)
+
+Create the 0.10.7 release branch.
 
-Update FAQ again
 ------------------------------------------------------------------------
-r11632 | jmayer | 2004-08-08 22:07:50 -0500 (Sun, 08 Aug 2004) | 4 lines
+r12306 | gerald | 2004-10-15 14:02:47 -0500 (Fri, 15 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-dhcp-failover.c
+   M /trunk/epan/dissectors/packet-cops.c
 
-- Small cosmetic fix to DHCP failover prefs
-- free -> g_free (we are using g_malloc)
-- remove debug prinf
+Fix a cut-and-paste error.
 
 ------------------------------------------------------------------------
-r11631 | guy | 2004-08-08 21:41:41 -0500 (Sun, 08 Aug 2004) | 5 lines
+r12305 | gerald | 2004-10-15 13:30:05 -0500 (Fri, 15 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-dhcp-failover.c
+   M /trunk/Makefile.nmake
+   M /trunk/config.nmake
+   M /trunk/epan/Makefile.nmake
 
-Enable the configurable port number - and make the filter name for the
-protocol "dhcpfo", to match the filter names of its fields; that - or
-changing the long name or abbreviation of the protocol - fixes the core
-dump (which was in a check for a name being legal).
+Updates to reflect revision 4 of ethereal-win32-libs.
 
 ------------------------------------------------------------------------
-r11630 | jmayer | 2004-08-08 20:53:26 -0500 (Sun, 08 Aug 2004) | 8 lines
+r12304 | gerald | 2004-10-15 10:36:12 -0500 (Fri, 15 Oct 2004) | 4 lines
 Changed paths:
-   M /trunk/AUTHORS
-   M /trunk/epan/dissectors/Makefile.common
-   A /trunk/epan/dissectors/packet-dhcp-failover.c
+   M /trunk/Makefile.nmake
+   M /trunk/config.h.win32
+   M /trunk/config.nmake
+   M /trunk/epan/Makefile.nmake
+   M /trunk/epan/dissectors/Makefile.nmake
+   M /trunk/epan/dissectors/packet-kerberos.c
 
-M. Ortega y Strupp      <moys@loplof.de>
-ISC DHCP Server 3.0 failover protocol dissection
+Add support for decoding DES3/CBC/MD5 keys.  Make it disabled by default.
 
-Note: I tried to make the port configurable via prefs
-but failed to do so: It always cashed on startup so it
-is commented out for now.
+Whitespace cleanup.
+
+------------------------------------------------------------------------
+r12303 | gerald | 2004-10-15 10:08:00 -0500 (Fri, 15 Oct 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/libethereal.def
 
+Add range_convert_range and ranges_are_equal.
 
 ------------------------------------------------------------------------
-r11629 | jmayer | 2004-08-08 20:50:49 -0500 (Sun, 08 Aug 2004) | 1 line
+r12302 | jmayer | 2004-10-15 01:51:48 -0500 (Fri, 15 Oct 2004) | 1 line
 Changed paths:
-   M /trunk
+   M /trunk/acinclude.m4
+   M /trunk/configure.in
 
-Add capinfo stuff to svn:ignore
+Dectect MIT-Kerberos as well
 ------------------------------------------------------------------------
-r11628 | tuexen | 2004-08-08 17:36:22 -0500 (Sun, 08 Aug 2004) | 2 lines
+r12301 | guy | 2004-10-15 00:54:33 -0500 (Fri, 15 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/AUTHORS
+   M /trunk/epan/dissectors/packet-tcap.c
 
-Fix typos.
+Don't declare functions inside functions - not all C compilers support
+that.
 
 ------------------------------------------------------------------------
-r11627 | jmayer | 2004-08-08 04:04:37 -0500 (Sun, 08 Aug 2004) | 1 line
+r12300 | guy | 2004-10-14 18:45:09 -0500 (Thu, 14 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/NEWS
+   M /trunk/doc/README.developer
+   M /trunk/epan/dissectors/packet-tcap.c
+   M /trunk/epan/prefs-int.h
+   M /trunk/epan/prefs.c
+   M /trunk/epan/prefs.h
+   M /trunk/epan/range.c
+   M /trunk/epan/range.h
+   M /trunk/gtk/prefs_dlg.c
+
+From Jeff Morriss: PREF_RANGE preference type, for ranges of integers.
 
-Small typo fix
 ------------------------------------------------------------------------
-r11626 | guy | 2004-08-08 01:25:24 -0500 (Sun, 08 Aug 2004) | 4 lines
+r12299 | guy | 2004-10-14 16:59:17 -0500 (Thu, 14 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/gtk/dfilter_expr_dlg.c
+   M /trunk/wiretap/nettl.c
+   M /trunk/wiretap/nettl.h
 
-From Stas Grabois: make the previous change not to show disabled
-protocols in the "Add Expression" and "Decode As" dialogs work with GTK+
-2.x.
+From Mark C. Brown: add 100VG support.
 
 ------------------------------------------------------------------------
-r11625 | gerald | 2004-08-07 23:13:12 -0500 (Sat, 07 Aug 2004) | 2 lines
+r12298 | ulfl | 2004-10-14 13:05:39 -0500 (Thu, 14 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/NEWS
-
-More updates for 0.10.6.
+   M /trunk/docbook/edg_src/EDG_chapter_sources.xml
+   M /trunk/docbook/edg_src/EDG_chapter_tools.xml
 
+from Francisco Alcoba: mention TortoiseSVN diff and patch features
 ------------------------------------------------------------------------
-r11624 | gerald | 2004-08-07 22:56:02 -0500 (Sat, 07 Aug 2004) | 2 lines
+r12297 | tuexen | 2004-10-14 11:23:11 -0500 (Thu, 14 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/gtk/conversations_table.c
-   M /trunk/gtk/hostlist_table.c
+   M /trunk/gtk/decode_as_dlg.c
 
-Put the "copy" button back in the conversation and host list tables.
+Fix bugs to get it working on gtk1 and gtk2.
+Some clean ups.
 
 ------------------------------------------------------------------------
-r11623 | guy | 2004-08-07 20:20:26 -0500 (Sat, 07 Aug 2004) | 8 lines
+r12296 | sahlberg | 2004-10-14 04:51:54 -0500 (Thu, 14 Oct 2004) | 8 lines
 Changed paths:
-   M /trunk/plugins/asn1/packet-asn1.c
-   M /trunk/prefs.c
+   M /trunk/epan/dissectors/packet-kerberos.c
+
+add support in packet-kerberos to use MIT Kerberos API to parse keytabs and decrypt blobs
+if HAVE_KERBEROS and HAVE_MIT_KERBEROS are both defined in config.h
+
+
+Now we need someone to hack up the required automake magic to detect MIT Kerberos and massage the makefiles accordingly.
 
-Map the old one-port "generic ASN.1" TCP/UDP/SCTP port-number
-preferences to the new multi-port ones, so that, instead of complaining
-when the old preferences were seen, we make the port be the one port in
-the new preference.
 
-Make the "message_win" "generic ASN.1" preference an obsolete
-preference, so we silently ignore it rather than complaining about it.
 
 ------------------------------------------------------------------------
-r11622 | guy | 2004-08-06 22:36:20 -0500 (Fri, 06 Aug 2004) | 5 lines
+r12295 | guy | 2004-10-14 03:02:58 -0500 (Thu, 14 Oct 2004) | 9 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-mpls.c
+   M /trunk/epan/dissectors/packet-bootp.c
 
-While we're add it, support the multicast protocol type values for PPP
-and GRE.
+Use "tvb_format_stringzpad()" rather than "tvb_format_text()", as per
+RFC 2132, which says
 
-Put in the RFC number.
+	Options containing NVT ASCII data SHOULD NOT include a trailing
+	NULL; however, the receiver of such options MUST be prepared to
+	      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+	delete trailing nulls if they exist.
+	^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 ------------------------------------------------------------------------
-r11621 | jmayer | 2004-08-06 19:11:16 -0500 (Fri, 06 Aug 2004) | 4 lines
+r12294 | guy | 2004-10-14 02:42:31 -0500 (Thu, 14 Oct 2004) | 8 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-ax4000.c
-   M /trunk/ipproto.c
-   M /trunk/ipproto.h
+   M /trunk/epan/dissectors/packet-cops.c
+
+Get rid of C++ comments.
 
-Add protocol 0xad as AX/4000 Testframe.
-Make packet-ax4000.c use the value from ipproto.h
+Add more COPS client type values from the IANA cops-parameters page.
 
+Get rid of per-dissection static variables - pass them as parameters.
+
+Make functions not used outside packet-cops.c static.
 
 ------------------------------------------------------------------------
-r11620 | jmayer | 2004-08-06 19:07:53 -0500 (Fri, 06 Aug 2004) | 4 lines
+r12293 | guy | 2004-10-13 22:29:35 -0500 (Wed, 13 Oct 2004) | 7 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-mpls.c
+   M /trunk/epan/dissectors/packet-diameter-defs.h
 
-Hanlde 8848 on Ethernet the same as 8847. Not sure that this
-is really correct, but the payload seems to be decoded correctly.
+Add the application ID for credit control, as per
+draft-ietf-aaa-diameter-cc-06.
 
+Indicate where the Diameter application IDs for 3GPP stuff came from.
+
+Update URLs for various Diameter drafts.
 
 ------------------------------------------------------------------------
-r11619 | jmayer | 2004-08-06 16:17:01 -0500 (Fri, 06 Aug 2004) | 1 line
+r12292 | guy | 2004-10-13 18:03:56 -0500 (Wed, 13 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/FAQ
-   M /trunk/help/faq.txt
-   M /trunk/manuf
+   M /trunk/AUTHORS
+
+Give Steve Sommars' real name and work e-mail address.
 
-Update manuf and faq
 ------------------------------------------------------------------------
-r11618 | jmayer | 2004-08-06 16:06:27 -0500 (Fri, 06 Aug 2004) | 13 lines
+r12291 | tuexen | 2004-10-13 03:41:32 -0500 (Wed, 13 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/docbook
-   M /trunk/docbook/GFDPL_appendix.xml
-   M /trunk/docbook/Makefile
-   M /trunk/docbook/README.txt
-   M /trunk/docbook/catalog.xml
-   M /trunk/docbook/custom_layer_pdf.xsl
-   M /trunk/docbook/developer-guide.xml
-   M /trunk/docbook/dfilter2xml.pl
-   M /trunk/docbook/dg-src/EDG_chapter_five.xml
-   M /trunk/docbook/dg-src/EDG_chapter_four.xml
-   M /trunk/docbook/dg-src/EDG_chapter_one.xml
-   M /trunk/docbook/dg-src/EDG_chapter_three.xml
-   M /trunk/docbook/dg-src/EDG_chapter_two.xml
-   M /trunk/docbook/dg-src/EDG_meta_info.xml
-   M /trunk/docbook/ethereal-doc.txt
-   M /trunk/docbook/protocols.xml
-   M /trunk/docbook/ug-src/EUG_app_files.xml
-   M /trunk/docbook/ug-src/EUG_app_howitworks.xml
-   M /trunk/docbook/ug-src/EUG_app_messages.xml
-   M /trunk/docbook/ug-src/EUG_app_protocols.xml
-   M /trunk/docbook/ug-src/EUG_app_tools.xml
-   M /trunk/docbook/ug-src/EUG_chapter_advanced.xml
-   M /trunk/docbook/ug-src/EUG_chapter_build_install.xml
-   M /trunk/docbook/ug-src/EUG_chapter_capture.xml
-   M /trunk/docbook/ug-src/EUG_chapter_customize.xml
-   M /trunk/docbook/ug-src/EUG_chapter_introduction.xml
-   M /trunk/docbook/ug-src/EUG_chapter_io.xml
-   M /trunk/docbook/ug-src/EUG_chapter_statistics.xml
-   M /trunk/docbook/ug-src/EUG_chapter_troubleshoot.xml
-   M /trunk/docbook/ug-src/EUG_chapter_use.xml
-   M /trunk/docbook/ug-src/EUG_chapter_work.xml
-   M /trunk/docbook/ug-src/EUG_meta_info.xml
-   M /trunk/docbook/ug-src/EUG_preface.xml
-   M /trunk/docbook/user-guide.xml
+   M /trunk/epan/dissectors/packet-sctp.c
 
-Svn stuff:
-- Add eol-style native to all text files
-- Add Id attributes
+Make sure that the IPv4 and IPv6 address parameters are always processed to support tabbing.
 
-Add $Id: $ to all text files
+------------------------------------------------------------------------
+r12290 | sahlberg | 2004-10-12 19:21:00 -0500 (Tue, 12 Oct 2004) | 3 lines
+Changed paths:
+   M /trunk/asn1/cms/cms.cnf
+   M /trunk/epan/dissectors/packet-cms.c
 
-Makefile:
-- add several files and directories to make clean
-- Add comments for values on Suse 9.1
+get rid of some compiler warnings for cms
 
-catalog.xml:
-- Add comments for values on Suse 9.1
 
 ------------------------------------------------------------------------
-r11617 | ulfl | 2004-08-06 15:52:48 -0500 (Fri, 06 Aug 2004) | 1 line
+r12289 | sahlberg | 2004-10-12 19:16:42 -0500 (Tue, 12 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/docbook/ug-src/EUG_app_tools.xml
-   M /trunk/docbook/ug-src/EUG_chapter_advanced.xml
-   M /trunk/docbook/user-guide.xml
+   M /trunk/asn1/x509af/x509af.cnf
+   M /trunk/epan/dissectors/packet-x509af.c
+
+get rid of some compiler warnings for X509AF
+
 
-some final review comment from Graeme Hewson, changed version to release 2.00
 ------------------------------------------------------------------------
-r11616 | guy | 2004-08-06 15:12:20 -0500 (Fri, 06 Aug 2004) | 11 lines
+r12288 | sahlberg | 2004-10-12 19:08:44 -0500 (Tue, 12 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-tds.c
+   M /trunk/asn1/h248/MEGACO.asn
+   M /trunk/epan/dissectors/packet-h248.c
 
-From Yaniv Kaul:
+final massaging to get rid of the last remaining compiler warnings for megaco
 
-1. define new TDS packet type (17) - NTLM authentication packet. Call
-the ntlmssp dissector to dissect it when needed.
-2. define new TDS packet type (18) - donno what it is exactly, but it's
-there. Will dissect it someday.
-3. heuristic in netlib_check_login_pkt should also check port 2433.
-4. unify the dissection of msg and err token. They have the same
-structure.
-5. improve the dissection of the above mentioned token.
 
 ------------------------------------------------------------------------
-r11615 | guy | 2004-08-06 14:57:49 -0500 (Fri, 06 Aug 2004) | 4 lines
+r12287 | sahlberg | 2004-10-12 18:56:41 -0500 (Tue, 12 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/epan/Makefile.am
-   A /trunk/epan/addr_resolv.c (from /trunk/epan/resolv.c:11612)
-   A /trunk/epan/addr_resolv.h (from /trunk/epan/resolv.h:11612)
-   M /trunk/epan/column-utils.c
-   M /trunk/epan/dissectors/packet-afs.c
-   M /trunk/epan/dissectors/packet-ap1394.c
-   M /trunk/epan/dissectors/packet-arp.c
-   M /trunk/epan/dissectors/packet-atm.c
-   M /trunk/epan/dissectors/packet-auto_rp.c
-   M /trunk/epan/dissectors/packet-beep.c
-   M /trunk/epan/dissectors/packet-bpdu.c
-   M /trunk/epan/dissectors/packet-chdlc.c
-   M /trunk/epan/dissectors/packet-dec-bpdu.c
-   M /trunk/epan/dissectors/packet-diameter.c
-   M /trunk/epan/dissectors/packet-dns.c
-   M /trunk/epan/dissectors/packet-eigrp.c
-   M /trunk/epan/dissectors/packet-enc.c
-   M /trunk/epan/dissectors/packet-eth.c
-   M /trunk/epan/dissectors/packet-fddi.c
-   M /trunk/epan/dissectors/packet-icmpv6.c
-   M /trunk/epan/dissectors/packet-icp.c
-   M /trunk/epan/dissectors/packet-icq.c
-   M /trunk/epan/dissectors/packet-ieee80211.c
-   M /trunk/epan/dissectors/packet-ip.c
-   M /trunk/epan/dissectors/packet-ipsec.c
-   M /trunk/epan/dissectors/packet-ipv6.c
-   M /trunk/epan/dissectors/packet-ipx.c
-   M /trunk/epan/dissectors/packet-isis-hello.c
-   M /trunk/epan/dissectors/packet-isis-lsp.c
-   M /trunk/epan/dissectors/packet-l2tp.c
-   M /trunk/epan/dissectors/packet-ldp.c
-   M /trunk/epan/dissectors/packet-lwapp.c
-   M /trunk/epan/dissectors/packet-msproxy.c
-   M /trunk/epan/dissectors/packet-nt-tpcp.c
-   M /trunk/epan/dissectors/packet-ntp.c
-   M /trunk/epan/dissectors/packet-pflog.c
-   M /trunk/epan/dissectors/packet-pgm.c
-   M /trunk/epan/dissectors/packet-quake3.c
-   M /trunk/epan/dissectors/packet-radius.c
-   M /trunk/epan/dissectors/packet-rtps.c
-   M /trunk/epan/dissectors/packet-rx.c
-   M /trunk/epan/dissectors/packet-sebek.c
-   M /trunk/epan/dissectors/packet-sll.c
-   M /trunk/epan/dissectors/packet-slowprotocols.c
-   M /trunk/epan/dissectors/packet-smtp.c
-   M /trunk/epan/dissectors/packet-socks.c
-   M /trunk/epan/dissectors/packet-tcp.c
-   M /trunk/epan/dissectors/packet-teredo.c
-   M /trunk/epan/dissectors/packet-udp.c
-   M /trunk/epan/dissectors/packet-wfleet-hdlc.c
-   M /trunk/epan/epan.c
-   M /trunk/epan/ftypes/ftype-bytes.c
-   M /trunk/epan/ftypes/ftype-integer.c
-   M /trunk/epan/ftypes/ftype-ipv4.c
-   M /trunk/epan/packet.c
-   M /trunk/epan/proto.c
-   D /trunk/epan/resolv.c
-   D /trunk/epan/resolv.h
-   M /trunk/epan/to_str.c
-   M /trunk/gtk/capture_dlg.c
-   M /trunk/gtk/conversations_table.c
-   M /trunk/gtk/file_dlg.c
-   M /trunk/gtk/follow_dlg.c
-   M /trunk/gtk/hostlist_table.c
-   M /trunk/gtk/main.c
-   M /trunk/gtk/menu.c
-   M /trunk/gtk/nameres_prefs.c
-   M /trunk/gtk/packet_win.c
-   M /trunk/ipproto.c
-   M /trunk/plugins/acn/packet-acn.c
-   M /trunk/plugins/artnet/packet-artnet.c
-   M /trunk/plugins/asn1/packet-asn1.c
-   M /trunk/plugins/enttec/packet-enttec.c
-   M /trunk/plugins/megaco/packet-megaco.c
-   M /trunk/plugins/mgcp/packet-mgcp.c
-   M /trunk/plugins/pcli/packet-pcli.c
-   M /trunk/plugins/rdm/packet-rdm.c
-   M /trunk/plugins/rtnet/packet-rtnet.c
-   M /trunk/plugins/v5ua/packet-v5ua.c
-   M /trunk/prefs.c
-   M /trunk/tap-iousers.c
-   M /trunk/tethereal.c
-   M /trunk/util.c
+   M /trunk/asn1/h248/packet-h248-template.c
+   M /trunk/epan/dissectors/packet-h248.c
+
+get rid of some more compiler warnings
 
-From Albert Chin: rename resolv.{ch} to addr_resolv.{ch}, so that an
-include of <resolv.h> in any system header file gets the system
-<resolv.h> (needed for builds on Tru64 with GTK+ 1.2[.x]).
 
 ------------------------------------------------------------------------
-r11614 | guy | 2004-08-06 14:35:51 -0500 (Fri, 06 Aug 2004) | 2 lines
+r12286 | sahlberg | 2004-10-12 18:40:51 -0500 (Tue, 12 Oct 2004) | 4 lines
 Changed paths:
-   M /trunk/AUTHORS
-   M /trunk/epan/dissectors/Makefile.common
-   A /trunk/epan/dissectors/packet-manolito.c
+   M /trunk/asn1/h248/MEGACO.asn
+   M /trunk/asn1/h248/h248.cnf
+   M /trunk/epan/dissectors/packet-h248.c
+
+massage the h248 files so that it compiles with asn2eth without warnings
+
 
-From Jeff Connelly: MANOLITO support.
 
 ------------------------------------------------------------------------
-r11613 | guy | 2004-08-06 14:22:04 -0500 (Fri, 06 Aug 2004) | 3 lines
+r12285 | tuexen | 2004-10-12 13:20:51 -0500 (Tue, 12 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/gtk/conversations_table.c
-   M /trunk/gtk/hostlist_table.c
+   M /trunk/AUTHORS
 
-From Ian Schorr: fix a bug where addresses were drawn to the wrong rows
-in the clist, and get rid of some duplicated code.
+Add Comment for Irene Ruengeler.
 
 ------------------------------------------------------------------------
-r11612 | gerald | 2004-08-06 11:25:59 -0500 (Fri, 06 Aug 2004) | 2 lines
+r12284 | tuexen | 2004-10-12 13:18:44 -0500 (Tue, 12 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/Makefile.nmake
+   M /trunk/gtk/decode_as_dlg.c
 
-Update the "setup" target for GLib 2.4.5, GTK+ 2.4.4, and Pango-1.4.1.
+Support PPID and port number based selection for SCTP. From Irene Ruengeler.
 
 ------------------------------------------------------------------------
-r11611 | gerald | 2004-08-06 09:08:54 -0500 (Fri, 06 Aug 2004) | 3 lines
+r12283 | guy | 2004-10-12 13:08:23 -0500 (Tue, 12 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/ChangeLog
-   M /trunk/NEWS
-   M /trunk/config.nmake
-   M /trunk/configure.in
+   M /trunk/epan/column-utils.c
 
-Bump the version to 0.10.6.  Drop in a new ChangeLog, and add the beginnings
-of the release announcement to NEWS.
+From Tomas Kukosa: fix "col_set_str()" to work correctly with fenced
+columns.
 
 ------------------------------------------------------------------------
-r11610 | ulfl | 2004-08-06 02:00:49 -0500 (Fri, 06 Aug 2004) | 1 line
+r12282 | guy | 2004-10-12 13:00:39 -0500 (Tue, 12 Oct 2004) | 7 lines
 Changed paths:
-   M /trunk/docbook/ug-src/EUG_app_files.xml
-   M /trunk/docbook/ug-src/EUG_app_tools.xml
-   M /trunk/docbook/ug-src/EUG_chapter_advanced.xml
-   M /trunk/docbook/ug-src/EUG_chapter_customize.xml
-   M /trunk/docbook/ug-src/EUG_chapter_statistics.xml
-   M /trunk/docbook/ug-src/EUG_preface.xml
-   M /trunk/docbook/user-guide.xml
+   M /trunk/acinclude.m4
+
+From Albert Chin: in a test program, include <glibconfig.h> rather than
+<glib.h> when checking for the format for 64-bit integers, as, on
+Solaris 2.5.1, <glib.h> ends up defining a function that requires stuff
+from glib, and the test program isn't linked with glib - including
+<glibconfig.h> is sufficient to get guint64 defined, and that's all we
+need.
 
-more review comments from Graeme Hewson, increased version to 1.94, added Greame and Martin Regner to the guide's "Acknowledgements"
 ------------------------------------------------------------------------
-r11609 | guy | 2004-08-06 00:34:41 -0500 (Fri, 06 Aug 2004) | 3 lines
+r12281 | guy | 2004-10-12 12:51:13 -0500 (Tue, 12 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-ax4000.c
+   M /trunk/epan/dissectors/packet-per.c
 
-Set the "svn:keywords" and "svn:eol-style" properties to their standard
-values.
+From Ronnie Sahlberg: set a variable before we test it.
 
 ------------------------------------------------------------------------
-r11608 | guy | 2004-08-06 00:32:59 -0500 (Fri, 06 Aug 2004) | 3 lines
+r12280 | guy | 2004-10-12 12:40:31 -0500 (Tue, 12 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-ax4000.c
+   M /trunk/epan/dissectors/packet-cms.c
+   M /trunk/epan/dissectors/packet-cms.h
+   M /trunk/epan/dissectors/packet-h248.c
 
-Put "Spirent" into the initial comment so people are more likely to be
-able to figure out what an AX/4000 is.
+Re-generate with latest asn2eth.
 
 ------------------------------------------------------------------------
-r11607 | gram | 2004-08-05 22:36:28 -0500 (Thu, 05 Aug 2004) | 2 lines
+r12279 | guy | 2004-10-12 12:23:15 -0500 (Tue, 12 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/tethereal.c
+   M /trunk/wiretap/nettl.c
 
-Mention psml as a valid option to -T in the usage statements.
+From Mark C. Brown: support dumping files with the raw ICMP and raw
+ICMPv6 encapsulations.
 
 ------------------------------------------------------------------------
-r11604 | jmayer | 2004-08-05 02:20:00 -0500 (Thu, 05 Aug 2004) | 5 lines
+r12277 | guy | 2004-10-12 03:11:46 -0500 (Tue, 12 Oct 2004) | 6 lines
 Changed paths:
-   M /trunk/AUTHORS
-   M /trunk/epan/dissectors/Makefile.common
-   A /trunk/epan/dissectors/packet-ax4000.c
-
-SEKINE Hideki: Routines for AX/4000 Test Block dissection
+   M /trunk/tools/asn2eth.py
 
-Added HFILL macros to avoid warnings.
+From Tomas Kukosa:
 
+	- avoid assignemnt to None which is deprecated in Python 2.3
+	- fix bug when one field is used both with and without implicit
+	  tag
 
 ------------------------------------------------------------------------
-r11603 | ulfl | 2004-08-05 00:50:32 -0500 (Thu, 05 Aug 2004) | 1 line
+r12276 | guy | 2004-10-12 03:09:07 -0500 (Tue, 12 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/docbook/Makefile
-   M /trunk/docbook/catalog.xml
+   M /trunk/epan/dissectors/packet-pkinit.h
+
+Check in a regenerated file we missed.
 
-some minor comments added, as suggested by Joerg Mayer
 ------------------------------------------------------------------------
-r11602 | ulfl | 2004-08-04 15:41:24 -0500 (Wed, 04 Aug 2004) | 1 line
+r12275 | guy | 2004-10-12 03:05:58 -0500 (Tue, 12 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/docbook/ug-src/EUG_chapter_work.xml
+   M /trunk/wiretap/nettl.c
+
+Correctly update the count of bytes dumped.
 
-minor review comment from Graeme Hewson
 ------------------------------------------------------------------------
-r11601 | ulfl | 2004-08-04 00:09:15 -0500 (Wed, 04 Aug 2004) | 1 line
+r12274 | ulfl | 2004-10-12 01:32:57 -0500 (Tue, 12 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/docbook/ug-src/EUG_chapter_capture.xml
-   M /trunk/docbook/ug-src/EUG_chapter_introduction.xml
-   M /trunk/docbook/ug-src/EUG_chapter_io.xml
-   M /trunk/docbook/ug-src/EUG_chapter_work.xml
+   M /trunk/wiretap/nettl.c
 
-more review comments
+fix MSVC unused magic warning
 ------------------------------------------------------------------------
-r11600 | guy | 2004-08-03 22:13:41 -0500 (Tue, 03 Aug 2004) | 2 lines
+r12273 | ulfl | 2004-10-12 01:27:09 -0500 (Tue, 12 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/epan/dissectors/packet-ntlmssp.c
-
-Fix a URL.
+   M /trunk/docbook/edg_src/EDG_chapter_sources.xml
 
+how to use the ./configure script to build gtk1.x versions for unix builds
 ------------------------------------------------------------------------
-r11599 | ulfl | 2004-08-03 14:17:12 -0500 (Tue, 03 Aug 2004) | 1 line
+r12272 | ulfl | 2004-10-12 01:11:30 -0500 (Tue, 12 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/docbook/ug-src/EUG_chapter_introduction.xml
-   M /trunk/docbook/ug-src/EUG_chapter_use.xml
+   M /trunk/gtk/capture_dlg.c
 
-more minor review comments from Graeme Hewson
+fix a bug reported by venkata sandeep: capture->start->capture files dialog browse function used FILE_SELECTION_OPEN instead of the correct FILE_SELECTION_WRITE_BROWSE. Now you can (again) select and enter the filename to write capture data to.
 ------------------------------------------------------------------------
-r11598 | ulfl | 2004-08-03 11:32:59 -0500 (Tue, 03 Aug 2004) | 1 line
+r12271 | etxrab | 2004-10-12 00:00:37 -0500 (Tue, 12 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/docbook/ug-src/EUG_chapter_capture.xml
-   M /trunk/docbook/user-guide.xml
+   M /trunk/epan/dissectors/packet-h248.c
 
-third part of Graeme Hewsons review comments
+Pretyfy EventName and SignalName
 ------------------------------------------------------------------------
-r11595 | ulfl | 2004-08-03 00:21:35 -0500 (Tue, 03 Aug 2004) | 1 line
+r12270 | etxrab | 2004-10-11 23:59:25 -0500 (Mon, 11 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/docbook/GFDPL_appendix.xml
-   M /trunk/docbook/ug-src/EUG_chapter_introduction.xml
-   M /trunk/docbook/ug-src/EUG_chapter_use.xml
-   M /trunk/docbook/ug-src/EUG_preface.xml
+   M /trunk/asn1/h248/MEGACO.asn
+   M /trunk/asn1/h248/h248.cnf
+   M /trunk/asn1/h248/packet-h248-template.c
 
-first and second part of Graeme Hewsons review comments
+Pretify EventName and SignalName
 ------------------------------------------------------------------------
-r11594 | guy | 2004-08-02 21:52:48 -0500 (Mon, 02 Aug 2004) | 7 lines
+r12269 | guy | 2004-10-11 22:13:17 -0500 (Mon, 11 Oct 2004) | 4 lines
 Changed paths:
-   M /trunk/doc/tethereal.pod
-   M /trunk/tethereal.c
+   M /trunk/epan/prefs.c
+   M /trunk/epan/prefs.h
+   M /trunk/gtk/prefs_dlg.c
 
-Disallow "-f" when not doing a live capture, rather than just ignoring
-the specified filter.
+Check the values of the protocol preferences before fetching them; if
+any are not valid, pop up an alert box and don't dismiss the preferences
+dialog.
+
+------------------------------------------------------------------------
+r12268 | etxrab | 2004-10-11 16:19:12 -0500 (Mon, 11 Oct 2004) | 1 line
+Changed paths:
+   M /trunk/epan/sigcomp-udvm.c
+
+Fix (hopefully) a compiler varning
+------------------------------------------------------------------------
+r12267 | guy | 2004-10-11 13:36:51 -0500 (Mon, 11 Oct 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-h235.c
+   M /trunk/epan/dissectors/packet-h235.h
+   M /trunk/epan/dissectors/packet-h248.c
+   M /trunk/epan/dissectors/packet-ns_cert_exts.c
+   M /trunk/epan/dissectors/packet-pkcs1.c
+   M /trunk/epan/dissectors/packet-pkcs1.h
+   M /trunk/epan/dissectors/packet-pkinit.c
+   M /trunk/epan/dissectors/packet-pkix1explicit.c
+   M /trunk/epan/dissectors/packet-pkix1explicit.h
+   M /trunk/epan/dissectors/packet-pkix1implicit.c
+   M /trunk/epan/dissectors/packet-pkix1implicit.h
+   M /trunk/epan/dissectors/packet-x509af.c
+   M /trunk/epan/dissectors/packet-x509af.h
+   M /trunk/epan/dissectors/packet-x509ce.c
+   M /trunk/epan/dissectors/packet-x509ce.h
+   M /trunk/epan/dissectors/packet-x509if.c
+   M /trunk/epan/dissectors/packet-x509if.h
+   M /trunk/epan/dissectors/packet-x509sat.c
+   M /trunk/epan/dissectors/packet-x509sat.h
 
-Note in the manual that you can't use capture filters when reading a
-capture file, and that read filters might require too much CPU when
-doing a live capture.
+Re-generate a number of ASN.1-based dissectors with the most recent
+version of asn2eth.
 
 ------------------------------------------------------------------------
-r11593 | guy | 2004-08-02 21:30:49 -0500 (Mon, 02 Aug 2004) | 2 lines
+r12266 | guy | 2004-10-11 13:35:26 -0500 (Mon, 11 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-ntlmssp.h
+   M /trunk/plugins/Xplugin_table.h
 
-Fix the properties.
+Constify more pointer arguments.
 
 ------------------------------------------------------------------------
-r11592 | guy | 2004-08-02 21:28:49 -0500 (Mon, 02 Aug 2004) | 3 lines
+r12265 | guy | 2004-10-11 13:34:54 -0500 (Mon, 11 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/Makefile.common
-   M /trunk/epan/dissectors/packet-dcerpc-atsvc.c
-   M /trunk/epan/dissectors/packet-dcerpc-browser.c
-   M /trunk/epan/dissectors/packet-dcerpc-dnsserver.c
-   M /trunk/epan/dissectors/packet-dcerpc-efs.c
-   M /trunk/epan/dissectors/packet-dcerpc-eventlog.c
-   M /trunk/epan/dissectors/packet-dcerpc-initshutdown.c
-   M /trunk/epan/dissectors/packet-dcerpc-lsa-ds.c
-   M /trunk/epan/dissectors/packet-dcerpc-lsa.c
-   M /trunk/epan/dissectors/packet-dcerpc-mapi.c
-   M /trunk/epan/dissectors/packet-dcerpc-messenger.c
-   M /trunk/epan/dissectors/packet-dcerpc-netlogon.c
-   M /trunk/epan/dissectors/packet-dcerpc-nt.c
-   M /trunk/epan/dissectors/packet-dcerpc-reg.c
-   M /trunk/epan/dissectors/packet-dcerpc-samr.c
-   M /trunk/epan/dissectors/packet-dcerpc-spoolss.c
-   M /trunk/epan/dissectors/packet-dcerpc-srvsvc.c
-   M /trunk/epan/dissectors/packet-dcerpc-svcctl.c
-   M /trunk/epan/dissectors/packet-dcerpc-tapi.c
-   M /trunk/epan/dissectors/packet-dcerpc-trksvr.c
-   M /trunk/epan/dissectors/packet-dcerpc-wkssvc.c
-   M /trunk/epan/dissectors/packet-kerberos.c
-   M /trunk/epan/dissectors/packet-ntlmssp.c
-   M /trunk/epan/dissectors/packet-smb-common.h
-   M /trunk/epan/dissectors/packet-smb-logon.c
-   M /trunk/epan/dissectors/packet-smb-pipe.c
-   M /trunk/epan/dissectors/packet-smb.c
-   A /trunk/epan/dissectors/packet-windows-common.c
-   A /trunk/epan/dissectors/packet-windows-common.h
-   M /trunk/smb.h
+   M /trunk/epan/dissectors/packet-ber.c
+   M /trunk/epan/dissectors/packet-ber.h
+   M /trunk/plugins/plugin_api_list.c
 
-Move a bunch of stuff that's more Windows-related than SMB-related to
-"packet-windows-common.[ch]".
+Constify more pointer arguments.
 
 ------------------------------------------------------------------------
-r11591 | guy | 2004-08-02 18:57:36 -0500 (Mon, 02 Aug 2004) | 4 lines
+r12263 | sahlberg | 2004-10-11 07:04:35 -0500 (Mon, 11 Oct 2004) | 4 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-smb-common.h
+   M /trunk/AUTHORS
+   M /trunk/epan/dissectors/packet-h225.c
+
+From Martin M,   update h2250 so that some things that are supposed to be strings are printed as strings and not as hex data.
+
 
-Every file that includes "packet-smb-common.h" either includes "smb.h"
-or doesn't need anything defined by "smb.h", so don't include it in
-"packet-smb-common.h".
 
 ------------------------------------------------------------------------
-r11590 | guy | 2004-08-02 18:53:23 -0500 (Mon, 02 Aug 2004) | 3 lines
+r12262 | sahlberg | 2004-10-11 07:00:08 -0500 (Mon, 11 Oct 2004) | 7 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-smb-mailslot.c
+   M /trunk/epan/dissectors/packet-per.c
+
+dissect_per_restricted_character_string() was almost completely broken when it came to PrintableString.
+I am amazed it worked at all and noone complained.
+
+It is little less broken now and handles some of the PrintableStrings  properly.
+
 
-Nothing, other than the include of "smb.h", in "packet-smb-common.h" is
-used here; don't include it, just include "smb.h".
 
 ------------------------------------------------------------------------
-r11589 | guy | 2004-08-02 18:46:14 -0500 (Mon, 02 Aug 2004) | 3 lines
+r12261 | guy | 2004-10-11 03:36:55 -0500 (Mon, 11 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-smb-common.c
-   M /trunk/epan/dissectors/packet-smb-common.h
-   M /trunk/epan/dissectors/packet-smb-logon.c
+   M /trunk/tools/asn2eth.py
 
-"dissect_smb_unknown()" isn't some generic routine, it's used only to
-dissect unknown netlogon commands; move it to "packet-smb-logon.c".
+More constification of arrays.
 
 ------------------------------------------------------------------------
-r11588 | guy | 2004-08-02 18:40:09 -0500 (Mon, 02 Aug 2004) | 3 lines
+r12260 | guy | 2004-10-11 03:24:46 -0500 (Mon, 11 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-dcerpc-nt.c
-   M /trunk/epan/dissectors/packet-ntlmssp.c
-   M /trunk/epan/dissectors/packet-smb-common.c
-   M /trunk/epan/dissectors/packet-smb-common.h
-   M /trunk/epan/dissectors/packet-smb-logon.c
-   M /trunk/epan/dissectors/packet-smb-mailslot.c
+   M /trunk/Makefile.am
+   M /trunk/packaging/nsis/ethereal.nsi
 
-Don't drag in a huge pile of headers in "packet-smb-common.h"; rely on
-the files including it to include what they need.
+From Olivier Jacques: add imscxdx.xml to the source tarball and NSIS
+packaging information.
 
 ------------------------------------------------------------------------
-r11587 | guy | 2004-08-02 18:26:12 -0500 (Mon, 02 Aug 2004) | 3 lines
+r12259 | sahlberg | 2004-10-11 03:12:34 -0500 (Mon, 11 Oct 2004) | 9 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-tds.c
+   M /trunk/epan/dissectors/packet-tcp.c
+
+ small fix for TCP ACK RTT, the measurements for the time it took to ack some data.
+
+Only display this value if we really have some data to ACK
+which is not always the case.
+
+This fixes a problem recently reported to the list
+
 
-The TDS dissector uses nothing from "packet-smb-common.h", so don't
-include it.
 
 ------------------------------------------------------------------------
-r11586 | guy | 2004-08-02 18:21:45 -0500 (Mon, 02 Aug 2004) | 3 lines
+r12258 | guy | 2004-10-11 02:18:20 -0500 (Mon, 11 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-ssh.c
+   M /trunk/wiretap/file_access.c
+   M /trunk/wiretap/nettl.c
+   M /trunk/wiretap/nettl.h
 
-The SSH dissector uses nothing from "packet-smb-common.h", so don't
-include it.
+From Mark C. Brown: add support for writing nettl files.
 
 ------------------------------------------------------------------------
-r11585 | guy | 2004-08-02 18:14:32 -0500 (Mon, 02 Aug 2004) | 5 lines
+r12257 | guy | 2004-10-11 02:15:36 -0500 (Mon, 11 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/Makefile.common
-   M /trunk/epan/dissectors/packet-dcerpc-netlogon.c
-   M /trunk/epan/dissectors/packet-ntlmssp.c
-   A /trunk/epan/dissectors/packet-ntlmssp.h
-   M /trunk/epan/dissectors/packet-smb-common.c
-   M /trunk/epan/dissectors/packet-smb-common.h
-   M /trunk/epan/dissectors/packet-smb.c
+   M /trunk/AUTHORS
 
-Move the NTLMv2 blob stuff back into packet-ntlmssp.c - it's more
-NTLMSSP-related than SMB-related, and documents about NTLMSSP talk about
-it, so it's a little more convenient to keep all that stuff together -
-and export it through a packet-ntlmssp.h header.
+From Mark C. Brown: fix a typo.
 
 ------------------------------------------------------------------------
-r11583 | guy | 2004-08-02 15:26:16 -0500 (Mon, 02 Aug 2004) | 3 lines
+r12256 | guy | 2004-10-11 02:15:08 -0500 (Mon, 11 Oct 2004) | 4 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-ntlmssp.c
-   M /trunk/epan/dissectors/packet-smb-common.h
+   M /trunk/epan/dissectors/packet-llc.c
+   M /trunk/oui.h
 
-Put in some comments based on information in the
-http://davenport.sourceforge.net/ntlm.html document.
+From Mark C. Brown: add HP's OUI.
+
+Update Gerald's e-mail address.
 
 ------------------------------------------------------------------------
-r11582 | guy | 2004-08-02 14:33:49 -0500 (Mon, 02 Aug 2004) | 10 lines
+r12255 | guy | 2004-10-11 01:51:19 -0500 (Mon, 11 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-ntlmssp.c
+   M /trunk/epan/dissectors/packet-h225.c
+   M /trunk/epan/dissectors/packet-h245.c
+   M /trunk/epan/dissectors/packet-h450.c
+   M /trunk/epan/dissectors/packet-t38.c
 
-http://davenport.sourceforge.net/ntlm.html says that the 0x80000000 is
-"Negotiate 56", meaning that 56-bit encryption is supported - and that
-"Negotiate 128" means that 128-bit encryption is supported, so note that
-in the blurb for that flag.
-
-It also says that the values for "Request Init Response", "Request Accept
-Response", and 'Request Non-NT Session Key" are a factor of 16 away from
-what our #defines say they are, and that 0x000[124]0000 are "Target Type
-{Domain,Server,Share}".  Note that in a comment.
+Make "per_choice_t" and "per_sequence_t" structures "const" structures.
 
 ------------------------------------------------------------------------
-r11581 | guy | 2004-08-02 13:58:19 -0500 (Mon, 02 Aug 2004) | 2 lines
+r12254 | guy | 2004-10-11 01:39:04 -0500 (Mon, 11 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/epan/tvbuff.c
+   M /trunk/plugins/Xplugin_table.h
 
-Most developers have only 10 fingers, not 16. :-)
+Make the "per_choice_t" and "per_sequence_t" pointer arguments pointers
+to const.
 
 ------------------------------------------------------------------------
-r11580 | tuexen | 2004-08-02 12:36:34 -0500 (Mon, 02 Aug 2004) | 2 lines
+r12253 | guy | 2004-10-11 01:38:12 -0500 (Mon, 11 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-sctp.c
+   M /trunk/epan/dissectors/packet-per.c
+   M /trunk/epan/dissectors/packet-per.h
+   M /trunk/plugins/plugin_api_list.c
 
-Fixed the handling of PKTDRPREP when there is no included packet.
+Make the "per_choice_t" and "per_sequence_t" pointer arguments pointers
+to const.
 
 ------------------------------------------------------------------------
-r11579 | obiot | 2004-08-02 04:15:58 -0500 (Mon, 02 Aug 2004) | 2 lines
+r12252 | guy | 2004-10-11 01:31:23 -0500 (Mon, 11 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/AUTHORS
-   M /trunk/epan/tvbuff.c
+   M /trunk/tools/asn2eth.py
 
-From Kelly Byrd: fix tvb_uncompress() for GZIP encoded content.
+Constify "asn_namedbit" structures.
 
 ------------------------------------------------------------------------
-r11578 | sahlberg | 2004-08-02 03:57:40 -0500 (Mon, 02 Aug 2004) | 5 lines
+r12251 | etxrab | 2004-10-11 00:23:31 -0500 (Mon, 11 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/epan/dissectors/packet-ssl.c
-
-From Yaniv Kaul:
-Call the x509 certificate dissector from SSL so that x509 certificates
-in SSL are dissected
-
+   M /trunk/gtk/rtp_analysis.c
 
+From: "Alejandro Vaquero : Add IP bandwidth calculation in RTP analysis (in Kbps).
 ------------------------------------------------------------------------
-r11577 | guy | 2004-08-01 17:55:53 -0500 (Sun, 01 Aug 2004) | 2 lines
+r12250 | gerald | 2004-10-09 11:30:26 -0500 (Sat, 09 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-aim-location.c
-   M /trunk/epan/dissectors/packet-aim.c
-
-From Jelmer Vernooij: add support for some more TLVs and another SNAC.
+   M /trunk/gtk/Makefile.am
 
-------------------------------------------------------------------------
-r11576 | jmayer | 2004-07-31 17:02:20 -0500 (Sat, 31 Jul 2004) | 1 line
-Changed paths:
-   M /trunk/plugins/asn1/packet-asn1.c
+Add cfilter_combo_utils.h to the distribution, so that we pass distcheck.
 
-Change // to C90 style comment
 ------------------------------------------------------------------------
-r11575 | ulfl | 2004-07-31 02:04:32 -0500 (Sat, 31 Jul 2004) | 1 line
+r12249 | ulfl | 2004-10-09 02:48:13 -0500 (Sat, 09 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/gtk/column_prefs.c
+   M /trunk/Makefile.nmake
 
-give the user a hint, that he has to restart Ethereal for any column changes. Could someone have a look at the sentence I've used, if this is good english?
+update setup target to latest GTK library files
 ------------------------------------------------------------------------
-r11574 | ulfl | 2004-07-30 12:10:49 -0500 (Fri, 30 Jul 2004) | 1 line
+r12248 | ulfl | 2004-10-09 02:44:41 -0500 (Sat, 09 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/docbook/ug-src/EUG_chapter_advanced.xml
-   M /trunk/docbook/ug-src/EUG_chapter_build_install.xml
-   M /trunk/docbook/ug-src/EUG_chapter_capture.xml
-   M /trunk/docbook/ug-src/EUG_chapter_customize.xml
-   M /trunk/docbook/ug-src/EUG_chapter_introduction.xml
-   M /trunk/docbook/ug-src/EUG_chapter_io.xml
-   M /trunk/docbook/ug-src/EUG_chapter_statistics.xml
-   M /trunk/docbook/ug-src/EUG_chapter_use.xml
-   M /trunk/docbook/ug-src/EUG_chapter_work.xml
-   M /trunk/docbook/user-guide.xml
+   M /trunk/plugins/Xplugin_table.h
+   M /trunk/plugins/plugin_api_list.c
 
-some more review comments from Guy Harris and some other minor changes
+remove some MSVC warnings
 ------------------------------------------------------------------------
-r11573 | guy | 2004-07-30 02:43:02 -0500 (Fri, 30 Jul 2004) | 9 lines
+r12247 | guy | 2004-10-08 16:14:33 -0500 (Fri, 08 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/AUTHORS
-   M /trunk/crc16.c
-   M /trunk/crc16.h
-   M /trunk/crc32.c
-   M /trunk/crc32.h
-
-From Chris Maynard:
-
-	add versions of CRC-16 and CRC-32 routines with seed arguments;
-
-	add versions of those routines with an "offset in the tvbuff"
-	argument;
+   M /trunk/epan/dissectors/packet-ber.c
+   M /trunk/epan/dissectors/packet-ber.h
 
-	add Doxygen comments to the CRC-16 and CRC-32 headers.
+Make the "asn_namedbit *" argument to "dissect_ber_bitstring()" a
+"const" pointer.
 
 ------------------------------------------------------------------------
-r11572 | guy | 2004-07-30 02:28:31 -0500 (Fri, 30 Jul 2004) | 8 lines
+r12246 | guy | 2004-10-08 15:43:43 -0500 (Fri, 08 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/plugins/asn1/packet-asn1.c
-
-From Matthijs Melchior:
-
-	add SCTP support;
-
-	allow more than one port number to be specified;
+   M /trunk/tools/asn2eth.py
 
-	add recovery from garbled or incomplete ASN.1 messages.
+Make "ber_sequence" tables "const".
 
 ------------------------------------------------------------------------
-r11571 | guy | 2004-07-30 02:25:39 -0500 (Fri, 30 Jul 2004) | 2 lines
+r12245 | guy | 2004-10-08 15:28:04 -0500 (Fri, 08 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/capinfo.c
+   M /trunk/asn1/cms/packet-cms-template.c
+   M /trunk/asn1/x509af/packet-x509af-template.c
+   M /trunk/asn1/x509if/packet-x509if-template.c
 
-Squelch a compiler warning.
+Make the ber_sequence tables "const".
 
 ------------------------------------------------------------------------
-r11570 | guy | 2004-07-30 02:22:21 -0500 (Fri, 30 Jul 2004) | 3 lines
+r12244 | guy | 2004-10-08 15:24:23 -0500 (Fri, 08 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/capinfo.c
+   M /trunk/epan/dissectors/packet-ber.c
+   M /trunk/epan/dissectors/packet-ber.h
 
-Strip out the CR's, set svn:eol-style to native, set svn:keywords to Id,
-and get rid of the svn:executable property.
+"dissect_ber_sequence()" doesn't modify the "ber_sequence" structure
+passed to it; make that argument a const pointer.
 
 ------------------------------------------------------------------------
-r11569 | guy | 2004-07-30 02:20:39 -0500 (Fri, 30 Jul 2004) | 3 lines
+r12243 | gerald | 2004-10-08 14:06:28 -0500 (Fri, 08 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/doc/capinfo.pod
-
-Strip out the CR's, set svn:eol-style to native, and get rid of the
-svn:executable property.
+   M /trunk/config.nmake
+   M /trunk/configure.in
 
-------------------------------------------------------------------------
-r11568 | ulfl | 2004-07-29 13:51:04 -0500 (Thu, 29 Jul 2004) | 1 line
-Changed paths:
-   M /trunk/docbook/ug-src/EUG_chapter_advanced.xml
-   M /trunk/docbook/ug-src/EUG_chapter_build_install.xml
-   M /trunk/docbook/ug-src/EUG_chapter_capture.xml
-   M /trunk/docbook/ug-src/EUG_chapter_introduction.xml
-   M /trunk/docbook/ug-src/EUG_chapter_io.xml
-   M /trunk/docbook/ug-src/EUG_chapter_statistics.xml
-   M /trunk/docbook/ug-src/EUG_chapter_use.xml
-   M /trunk/docbook/ug-src/EUG_chapter_work.xml
-   M /trunk/docbook/ug-src/EUG_preface.xml
-   M /trunk/docbook/user-guide.xml
+Bump the version to 0.10.7.
 
-review comments from Guy Harris and Martin Regner inserted/changed/added
 ------------------------------------------------------------------------
-r11567 | gerald | 2004-07-29 10:16:03 -0500 (Thu, 29 Jul 2004) | 2 lines
+r12242 | gerald | 2004-10-08 12:24:18 -0500 (Fri, 08 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/doc/Makefile.am
+   M /trunk/epan/dissectors/packet-cops.c
 
-Clean up the capinfo files, so that we pass "distcheck."
+Remove an unused variable.
 
 ------------------------------------------------------------------------
-r11566 | sahlberg | 2004-07-29 07:10:44 -0500 (Thu, 29 Jul 2004) | 3 lines
+r12241 | guy | 2004-10-08 12:01:43 -0500 (Fri, 08 Oct 2004) | 7 lines
 Changed paths:
-   A /trunk/asn1/pkcs1
-   A /trunk/asn1/pkcs1/PKCS1.asn
-   A /trunk/asn1/pkcs1/packet-pkcs1-template.c
-   A /trunk/asn1/pkcs1/packet-pkcs1-template.h
-   A /trunk/asn1/pkcs1/pkcs1.cnf
-   M /trunk/epan/dissectors/Makefile.common
-   A /trunk/epan/dissectors/packet-pkcs1.c
-   A /trunk/epan/dissectors/packet-pkcs1.h
+   M /trunk/epan/dissectors/packet-ldp.c
+   M /trunk/epan/dissectors/packet-ldp.h
+   M /trunk/epan/dissectors/packet-mpls-echo.c
 
-New protocol: PKCS#1   (rfc2313 pplus some extra oid's)
+From Carlos Pignataro: decode more TLVs and subTLVs and make some small
+fixes.
 
+Include "packet-ldp.h" in "packet-ldp.c" (if we'd been doing that, the
+mismatch between "packet-ldp.h"'s declaration of "fec_vc_types_vals[]"
+and "packet-ldp.c"'s definition of it would have been caught earlier).
 
 ------------------------------------------------------------------------
-r11565 | sahlberg | 2004-07-29 04:52:14 -0500 (Thu, 29 Jul 2004) | 6 lines
+r12240 | guy | 2004-10-08 11:56:16 -0500 (Fri, 08 Oct 2004) | 4 lines
 Changed paths:
-   M /trunk/asn1/x509af/packet-x509af-template.c
-   M /trunk/epan/dissectors/packet-ber.c
-   M /trunk/epan/dissectors/packet-ber.h
-   M /trunk/epan/dissectors/packet-x509af.c
-   M /trunk/epan/dissectors/packet-x509af.h
-
-add some algorithm oid's to x509af(for the time being)
-(only those that take no parameters for the time being)
+   M /trunk/epan/sigcomp-udvm.c
 
-create a dummy ber oid callback for callbacks that are NULL
+Use "%%" in format strings if you want to print a %.
 
+Get rid of an extra argument to a format string.
 
 ------------------------------------------------------------------------
-r11564 | sahlberg | 2004-07-29 04:32:13 -0500 (Thu, 29 Jul 2004) | 3 lines
+r12239 | guy | 2004-10-08 11:42:27 -0500 (Fri, 08 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-ber.c
-
-prettify the oid printing of ber oid's
+   M /trunk/epan/dissectors/packet-sigcomp.c
 
+"dissect_sigcomp()" returns 0 or the packet length, so it has to be
+registered with "new_register_dissector()".
 
 ------------------------------------------------------------------------
-r11563 | sahlberg | 2004-07-29 03:41:51 -0500 (Thu, 29 Jul 2004) | 4 lines
+r12238 | guy | 2004-10-08 11:40:36 -0500 (Fri, 08 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-ber.c
-
-for very large integers,  print them in hex   thats better than nothing
-but we can not filter on them anymore
+   M /trunk/epan/dissectors/packet-diameter-defs.h
 
+Force 4294967295 to be unsigned, to squelch a compiler warning.
 
 ------------------------------------------------------------------------
-r11562 | obiot | 2004-07-29 02:25:11 -0500 (Thu, 29 Jul 2004) | 26 lines
+r12237 | etxrab | 2004-10-08 10:55:06 -0500 (Fri, 08 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/Makefile.nmake
-   M /trunk/epan/Makefile.nmake
-
-From Lars Roland: MSVC make fixes.
-
-Many people have recently reported many problems with the nmake build 
-process. It seems that these problems come from using 
-epan/makefile.nmake to compile the DISSECTOR_SUPPORT_SOURCES which are 
-located in /trunk.
-
-Nmake from MSVC6 puts the object code of the DISSECTOR_SUPPORT_SOURCES 
-in /epan although Nmake expects the object code in /trunk when it 
-checkes dependencies. Thus DISSECTOR_SUPPORT_OBJECTS are built every 
-time even when they are already there.
-
-Nmake Version 1.5 (MSVC 2003 Toolkit) puts the object code of the 
-DISSECTOR_SUPPORT_SOURCES in /trunk instead.
-This makes it impossible to use epan/makefile.nmake for compiling the 
-DISSECTOR_SUPPORT_SOURCES and to make it work for both versions of nmake.
-
-We have to use /trunk/makefile.nmake for compiling the 
-DISSECTOR_SUPPORT_SOURCES to solve these issues.
-
-It should also be possible to build ethereal without libethereal.dll again.
-
-Once we have moved all DISSECTOR_SUPPORT_SOURCES into a subdirectory of 
-epan we can get rid of this patchwork in the nmake makefiles.
-
+   M /trunk/epan/dissectors/packet-sigcomp.c
 
+Add sigcomp Universal Decompressor Virtual Machine (UDVM) and state handler, for decompression of
+sigcomp messages. Currently states are or not saved so only messages with bytecode can be decompressed.
 ------------------------------------------------------------------------
-r11561 | gerald | 2004-07-28 21:25:54 -0500 (Wed, 28 Jul 2004) | 2 lines
+r12236 | etxrab | 2004-10-08 10:54:06 -0500 (Fri, 08 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-rtp.c
-
-Fix a null pointer dereference.
+   M /trunk/epan/Makefile.common
+   A /trunk/epan/sigcomp-udvm.c
+   A /trunk/epan/sigcomp-udvm.h
+   A /trunk/epan/sigcomp_state_hdlr.c
+   A /trunk/epan/sigcomp_state_hdlr.h
 
+Add sigcomp Universal Decompressor Virtual Machine (UDVM) and state handler, for decompression of
+sigcomp messages. Currently states are or not saved so only messages with bytecode can be decompressed.
 ------------------------------------------------------------------------
-r11560 | gerald | 2004-07-28 21:01:59 -0500 (Wed, 28 Jul 2004) | 2 lines
+r12235 | etxrab | 2004-10-08 04:35:56 -0500 (Fri, 08 Oct 2004) | 8 lines
 Changed paths:
-   M /trunk/doc/Makefile.am
-
-Add capinfo targets.
+   M /trunk/epan/dissectors/packet-diameter-defs.h
+   M /trunk/epan/dissectors/packet-diameter.c
 
+From: "Jacques, Olivier :
+- Added new RFC 3588 header format support (vendor-Id is replaced by
+application-Id) and command code has its own separated name space. The
+Draft v16 behaviour is maintained (through Preferences menu).
+- Added 3GPP IMS Cx/Dx interface decoding (new imscxdx.xml)
+- Fixed some issues in dictionary.xml
+- Refreshed Diameter applications in embedded AVPs (that do not rely on
+XML dictionary)
 ------------------------------------------------------------------------
-r11559 | obiot | 2004-07-28 19:11:14 -0500 (Wed, 28 Jul 2004) | 4 lines
+r12234 | etxrab | 2004-10-08 04:35:02 -0500 (Fri, 08 Oct 2004) | 9 lines
 Changed paths:
-   M /trunk/Makefile.common
-   M /trunk/epan/Makefile.common
-   M /trunk/epan/dissectors/packet-data.h
-   M /trunk/epan/dissectors/packet-frame.h
-   M /trunk/epan/libethereal.def
-   M /trunk/epan/proto.h
-   M /trunk/print.c
+   M /trunk/dictionary.xml
+   A /trunk/imscxdx.xml
 
-From Lars Roland: With this patch print.(c/h) and ps.(c/h) don't belong to 
-the DISSECTOR_SUPPORT_xy files any longer and as a consequence they 
-won't be linked into libethereal.
+From: "Jacques, Olivier :
+- Added new RFC 3588 header format support (vendor-Id is replaced by
+application-Id) and command code has its own separated name space. The
+Draft v16 behaviour is maintained (through Preferences menu).
+- Added 3GPP IMS Cx/Dx interface decoding (new imscxdx.xml)
+- Fixed some issues in dictionary.xml
+- Refreshed Diameter applications in embedded AVPs (that do not rely on
+XML dictionary)
 
 ------------------------------------------------------------------------
-r11558 | obiot | 2004-07-28 18:09:12 -0500 (Wed, 28 Jul 2004) | 2 lines
+r12233 | gerald | 2004-10-07 15:30:35 -0500 (Thu, 07 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/packaging/nsis/Makefile.nmake
-   M /trunk/packaging/nsis/ethereal.nsi
+   M /trunk/gtk/help_dlg.c
 
-Add capinfo to the Windows installer.
+Update the Example Files (sample captures) link.
 
 ------------------------------------------------------------------------
-r11557 | obiot | 2004-07-28 17:41:19 -0500 (Wed, 28 Jul 2004) | 10 lines
+r12232 | gerald | 2004-10-07 14:22:54 -0500 (Thu, 07 Oct 2004) | 6 lines
 Changed paths:
-   M /trunk/epan/Makefile.nmake
-   M /trunk/epan/libethereal.def
-
-Partial fix after some files being moved between directories.
+   M /trunk/epan/dissectors/packet-cops.c
 
-There is still a problem with MSVC builds as 3 objects get built twice (once
-at the top level, and once in epan: xmlstub.obj, print.obj and ps.obj).
+Add support for the PacketCable Multimedia Specification (PKT-SP-MM-
+I02-040930).  The code had to be integrated with the existing D-QoS code,
+and has not been extensively tested.  Add ports for PacketCable D-QoS
+(2126) and Multimedia (3918).  Code contributed by CableLabs.
 
-This fix allows to compile again with MSVC if debug symbols are NOT enabled
-while building Ethereal.  Do this by editing config.nmake and replacing
-"LOCAL_LDFLAGS=/DEBUG" with "LOCAL_LDFLAGS=". In other words: Ethereal CANNOT
-be built right now with debug symbols in the object code, for MSVC builds.
 
 ------------------------------------------------------------------------
-r11556 | obiot | 2004-07-28 16:13:27 -0500 (Wed, 28 Jul 2004) | 2 lines
+r12231 | etxrab | 2004-10-07 04:32:25 -0500 (Thu, 07 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/Makefile.nmake
-   M /trunk/image/Makefile.nmake
-   A /trunk/image/capinfo.rc.in
-
-Add the MSWIN RC information for capinfo.
+   D /trunk/asn1/h248-package-bcp
 
+Get rid off h248-package-pcp
 ------------------------------------------------------------------------
-r11555 | obiot | 2004-07-28 15:51:29 -0500 (Wed, 28 Jul 2004) | 2 lines
+r12230 | etxrab | 2004-10-07 04:29:49 -0500 (Thu, 07 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/Makefile.am
-   M /trunk/Makefile.nmake
-   A /trunk/capinfo.c
-   M /trunk/configure.in
-   M /trunk/doc/Makefile.nmake
-   A /trunk/doc/capinfo.pod
-
-From Ian Schorr: capinfo - provides  capture file information.
+   D /trunk/asn1/h248-package-bcp/BCP.asn
+   D /trunk/asn1/h248-package-bcp/h248_package_bcp.cnf
+   D /trunk/asn1/h248-package-bcp/packet-h248_package_bcp-template.c
+   D /trunk/asn1/h248-package-bcp/packet-h248_package_bcp-template.h
 
+Get rid off h248-package-pcp
 ------------------------------------------------------------------------
-r11554 | ulfl | 2004-07-28 12:19:17 -0500 (Wed, 28 Jul 2004) | 1 line
+r12229 | etxrab | 2004-10-07 04:28:28 -0500 (Thu, 07 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/gtk/menu.c
+   M /trunk/epan/dissectors/Makefile.common
 
-move the File/Close item back to it's former position. Add an explanatory comment why it's placed there, in difference to the Gnome HIG.
+Get rid of h248-package-bcp, as it is no longer needed.
 ------------------------------------------------------------------------
-r11553 | ulfl | 2004-07-28 11:54:46 -0500 (Wed, 28 Jul 2004) | 1 line
+r12228 | etxrab | 2004-10-07 04:25:21 -0500 (Thu, 07 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/gtk/print_mswin.c
+   M /trunk/epan/dissectors/packet-h248.c
 
-collect some thoughts about a GTK win32 printing dialog (from Guy Harris and me)
+Added dissection of some packages Property ID:s
 ------------------------------------------------------------------------
-r11552 | ulfl | 2004-07-28 11:48:58 -0500 (Wed, 28 Jul 2004) | 1 line
+r12227 | etxrab | 2004-10-07 04:16:13 -0500 (Thu, 07 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/epan/libethereal.def
+   M /trunk/asn1/h248/packet-h248-template.c
 
-removed print_packet_header, as it seems to be no longer used/available and will result in a link error
+Handle dissection of some packagees Property ID:s, get rid of h248-package-bcp as  there is only one parameter in this package.
 ------------------------------------------------------------------------
-r11551 | guy | 2004-07-28 03:23:52 -0500 (Wed, 28 Jul 2004) | 9 lines
+r12226 | etxrab | 2004-10-07 04:04:51 -0500 (Thu, 07 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/epan/dissectors/packet-ncp.c
-
-From Greg Morris:
-
-	check whether "match_strval()" returned a null pointer before
-	using its return value;
-
-	mark the end-of-burst packet.
-
-Clean up white space.
+   M /trunk/epan/dissectors/packet-isup.c
+   M /trunk/epan/dissectors/packet-isup.h
 
+Export some value strings and a function, some minor bug fixes.
 ------------------------------------------------------------------------
-r11550 | sahlberg | 2004-07-28 02:55:57 -0500 (Wed, 28 Jul 2004) | 5 lines
+r12225 | guy | 2004-10-06 22:50:16 -0500 (Wed, 06 Oct 2004) | 11 lines
 Changed paths:
-   M /trunk/asn1/x509ce/CertificateExtensions.asn
-   M /trunk/epan/dissectors/packet-x509ce.c
+   M /trunk/gtk/capture_dlg.c
+   M /trunk/gtk/cfilter_combo_utils.c
+   M /trunk/gtk/cfilter_combo_utils.h
 
-x509ce use implicit tags.
-the compiler does not yet support this.
-change the definition file to make the implicit keyword explicit
+Save the capture filter in the recent list iff the capture succeeds. 
+Checking the syntax involves opening a device, which
 
+	1) might not succeed
 
-------------------------------------------------------------------------
-r11549 | guy | 2004-07-28 02:46:54 -0500 (Wed, 28 Jul 2004) | 2 lines
-Changed paths:
-   M /trunk/AUTHORS
-   M /trunk/epan/dissectors/packet-isns.c
+and
 
-From Ming Zhang: update to the latest draft.
+	2) might tie up a BPF device or otherwise consume resources
+
+so we leave it up to the capture operation to do the checking.
 
 ------------------------------------------------------------------------
-r11548 | guy | 2004-07-28 02:16:33 -0500 (Wed, 28 Jul 2004) | 3 lines
+r12224 | guy | 2004-10-06 12:52:57 -0500 (Wed, 06 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/gtk/h225_counter.c
-   M /trunk/gtk/h225_ras_srt.c
+   M /trunk/doc/README.developer
 
-From Lars Roland: yes, it probably *should* be "retap_packets()", so use
-that instead of "redissect_packets()".
+Note that variadic macros shouldn't be used.
 
 ------------------------------------------------------------------------
-r11547 | guy | 2004-07-27 18:32:44 -0500 (Tue, 27 Jul 2004) | 3 lines
+r12223 | guy | 2004-10-06 12:37:47 -0500 (Wed, 06 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/gtk/menu.c
+   M /trunk/epan/dissectors/packet-icep.c
 
-In the GNOME HIG, the File -> Close menu item is in the last group,
-right above File -> Quit.
+"tvb_reported_length_remaining()" returns a "gint", so assign its return
+value to a "gint".
 
 ------------------------------------------------------------------------
-r11546 | guy | 2004-07-27 17:39:43 -0500 (Tue, 27 Jul 2004) | 4 lines
+r12222 | ulfl | 2004-10-06 12:29:53 -0500 (Wed, 06 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/gtk/webbrowser.c
+   M /trunk/gtk/capture_dlg.c
 
-Note that, when we add the ability to build a GNOMEified Ethereal as
-well as a GTK+-only Ethereal, we could use "gnome_url_show()" in
-GNOMEified Ethereal.
+Fix a bug reported by Keith A French: No "OK" button for Capture Filter dialog. 
+Probably caused by the changes of the capture filter drop down box in the capture prepare dialog.
 
 ------------------------------------------------------------------------
-r11545 | guy | 2004-07-27 16:12:40 -0500 (Tue, 27 Jul 2004) | 3 lines
+r12221 | ulfl | 2004-10-06 12:08:25 -0500 (Wed, 06 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/gtk/print_mswin.c
-
-Suggest the possibility of not using the Windows print dialog to print
-on Windows.
+   M /trunk/epan/dissectors/packet-icep.c
 
+remove MSVC compiler warning
 ------------------------------------------------------------------------
-r11544 | guy | 2004-07-27 15:10:02 -0500 (Tue, 27 Jul 2004) | 6 lines
+r12220 | ulfl | 2004-10-06 12:06:12 -0500 (Wed, 06 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/file.c
-   M /trunk/gtk/print_dlg.c
-   M /trunk/print.h
-
-Move the code to open the printer/print file from "print_packets()" to
-"print_ok_cb()", and have "print_packets()" just work on a
-"print_stream_t" handed to it, so that different platforms can open the
-printer/print file in different ways (opening the file is probably not
-going to be platform-dependent, but opening the printer will be).
+   M /trunk/epan/dissectors/packet-icep.c
 
+bring MSVC generation back to live, as elipses in macros are not alowed. May need some more rework.
 ------------------------------------------------------------------------
-r11543 | guy | 2004-07-27 14:19:00 -0500 (Tue, 27 Jul 2004) | 3 lines
+r12219 | guy | 2004-10-06 05:14:56 -0500 (Wed, 06 Oct 2004) | 7 lines
 Changed paths:
-   M /trunk/print.c
-   M /trunk/print.h
+   M /trunk/epan/dissectors/packet-icep.c
 
-"print_packet_header()" is no longer used (there's now a "generate
-bookmark" op in the lower-level print functions), so remove it.
+We now do reassembly.
 
-------------------------------------------------------------------------
-r11542 | ulfl | 2004-07-27 14:13:48 -0500 (Tue, 27 Jul 2004) | 1 line
-Changed paths:
-   M /trunk/gtk/ui_util.c
+Use "tvb_reported_length_remaining()", not "tvb_length_remaining()", to
+find out how much encapsulated data there is, so we properly handle
+short frames (reporting how much was really there, not how much was
+captured).
 
-place new windows (by calling window_new() with default placement (instead of placing it at the current mouse position).
 ------------------------------------------------------------------------
-r11541 | guy | 2004-07-27 13:57:52 -0500 (Tue, 27 Jul 2004) | 3 lines
+r12218 | guy | 2004-10-06 05:08:29 -0500 (Wed, 06 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/epan/dissectors/Makefile.nmake
+   M /trunk/wiretap/nettl.c
+   M /trunk/wiretap/nettl.h
 
-From Lars Roland: don't delete the generated header files with "make
-distclean", as those are part of the distribution.
+From Mark C. Brown: add EISA 100BaseTX, EISA FDDI, and HSC FDDI support,
+and make a small performance fix to HP-PB FDDI.
 
 ------------------------------------------------------------------------
-r11540 | guy | 2004-07-27 13:56:50 -0500 (Tue, 27 Jul 2004) | 8 lines
+r12217 | guy | 2004-10-06 05:01:36 -0500 (Wed, 06 Oct 2004) | 7 lines
 Changed paths:
-   M /trunk/epan/Makefile.nmake
+   M /trunk/epan/dissectors/packet-icep.c
 
-From Lars Roland:
+Add support for reassembly.
 
-	clean up the message printed when building libethereal.dll;
+The reason why you need to turn on "Try heuristic sub-dissector first"
+is that the traffic might be port 10000 traffic, and the NDMP dissector
+gets that but doesn't properly reject it if it doesn't look like NDMP -
+that's been fixed.
 
-	have "make distclean" clean out the "dissectors" subdirectory.
+------------------------------------------------------------------------
+r12216 | guy | 2004-10-06 04:59:50 -0500 (Wed, 06 Oct 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-ndmp.c
 
-Clean up indentation.
+Properly reject packets that don't look like NDMP packets.
 
 ------------------------------------------------------------------------
-r11539 | ulfl | 2004-07-27 13:34:02 -0500 (Tue, 27 Jul 2004) | 1 line
+r12215 | guy | 2004-10-06 04:03:42 -0500 (Wed, 06 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/gtk/conversations_table.c
-   M /trunk/gtk/hostlist_table.c
+   M /trunk/AUTHORS
+   M /trunk/epan/dissectors/Makefile.common
+   A /trunk/epan/dissectors/packet-icep.c
+
+From Francesco Fondelli: ICE protocol support.
 
-from ian schorr: some performance improvements in conversation and hostlist tables, by keep freezing the clist(s) most of the time
 ------------------------------------------------------------------------
-r11538 | tuexen | 2004-07-27 04:22:35 -0500 (Tue, 27 Jul 2004) | 2 lines
+r12214 | guy | 2004-10-06 02:25:38 -0500 (Wed, 06 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-enrp.c
+   M /trunk/epan/addr_resolv.c
 
-Change the display of identifiers from DEC to HEX.
+Give some more details on the hang in RH 9.
 
 ------------------------------------------------------------------------
-r11537 | guy | 2004-07-27 01:29:22 -0500 (Tue, 27 Jul 2004) | 3 lines
+r12213 | guy | 2004-10-06 02:21:05 -0500 (Wed, 06 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/gtk/io_stat.c
+   M /trunk/gtk/rtp_analysis.c
 
-From Ian Schorr: don't check the validity of the field name for an
-advanced-mode graph if the graph isn't active.
+From Alejandro Vaquero: make the window bigger so we don't have
+overlapped buttons.
 
 ------------------------------------------------------------------------
-r11536 | guy | 2004-07-27 01:05:20 -0500 (Tue, 27 Jul 2004) | 6 lines
+r12212 | guy | 2004-10-05 18:34:53 -0500 (Tue, 05 Oct 2004) | 6 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-ethertype.c
-   M /trunk/etypes.h
-
-Add the Ethertype for MAC Control frames, as per Clause 31 and Annexes
-31A and 31B in the 2000 and later 802.3 specs.  (Dissecting them is left
-as an exercise for the student.)
+   M /trunk/gtk/capture_dlg.c
 
-Clean up whitespace a bit.
+Make the default capture filter be the last one used, as it was before -
+it's a pain to have to keep typing the same filter over and over again
+if you're trying multiple captures of the same type of traffic.  At
+least with GTK+ 2.x, the text of the filter is selected, so if you start
+typing a new filter it'll replace the default filter.
 
 ------------------------------------------------------------------------
-r11535 | guy | 2004-07-27 00:32:58 -0500 (Tue, 27 Jul 2004) | 10 lines
+r12211 | guy | 2004-10-05 18:22:36 -0500 (Tue, 05 Oct 2004) | 9 lines
 Changed paths:
-   M /trunk/tools/asn2eth.py
-
-From Tomas Kukosa:
+   M /trunk/epan/dissectors/packet-bootp.c
 
-  - only one function prototype is emitted if type is present in more
-    than one cyclic dependency
+Use "tvb_format_text()" for string items, so non-printable characters
+don't get stuck into protocol tree item representations (and so that
+they can be more easily found if, as, and when we get around to handling
+different character encodings).
 
-  - field decoding functions has to be emitted immediately after a
-    function prototype in case of cyclic dependency
+Clean up white space.
 
-  - few grammar changes               
+Get rid of another sprintf() on top of a string constant.
 
 ------------------------------------------------------------------------
-r11534 | guy | 2004-07-27 00:30:03 -0500 (Tue, 27 Jul 2004) | 2 lines
+r12210 | guy | 2004-10-05 18:02:09 -0500 (Tue, 05 Oct 2004) | 4 lines
 Changed paths:
-   M /trunk/tools/lex.py
-   M /trunk/tools/yacc.py
+   M /trunk/epan/dissectors/packet-bootp.c
 
-Fromm Tomas Kukosa: update to version 1.5.
+Fix a bunch of compiler warnings (and some code that was bogusly
+attempting to overwrite a string constant - possibly with a longer
+string!).
 
 ------------------------------------------------------------------------
-r11533 | guy | 2004-07-26 22:27:20 -0500 (Mon, 26 Jul 2004) | 2 lines
+r12209 | guy | 2004-10-05 17:48:36 -0500 (Tue, 05 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/Makefile.common
+   M /trunk/epan/addr_resolv.c
 
-"ps.c" isn't a header, so don't include it in ETHEREAL_COMMON_INCLUDES.
+Turn off the longjmping stuff when doing name lookups - it appears to
+cause problems on RH9 when using ADNS, too.
 
 ------------------------------------------------------------------------
-r11532 | guy | 2004-07-26 21:52:49 -0500 (Mon, 26 Jul 2004) | 6 lines
+r12208 | gerald | 2004-10-05 12:44:53 -0500 (Tue, 05 Oct 2004) | 7 lines
 Changed paths:
-   M /trunk/epan/Makefile.am
-   M /trunk/epan/dissectors/Makefile.am
-   M /trunk/epan/dissectors/Makefile.common
-   M /trunk/epan/dissectors/Makefile.nmake
+   M /trunk/epan/dissectors/packet-bootp.c
 
-Arrange that "x11-declarations.h" and "x11-register-info.h" be part of
-the distribution, as was the case in the past.
+Decode cable modem and MTA device capabilities.  Make the CableLabs
+Client Configuration option number configurable.  Add an option to switch
+between the CCC versions defined in PKT-SP-PROV-I05-021127, IETF draft 5,
+and RFC 3495.  Code contributed by CableLabs.
 
-Arrange that RCS IDs be expanded, and that the EOL style be native, for
-epan/dissectors/Makefile.{am,common,nmake}.
+Remove an unneeded macro.
 
 ------------------------------------------------------------------------
-r11531 | guy | 2004-07-26 19:36:31 -0500 (Mon, 26 Jul 2004) | 3 lines
+r12207 | gerald | 2004-10-05 12:44:03 -0500 (Tue, 05 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/wiretap/Makefile.am
-   M /trunk/wiretap/Makefile.common
+   M /trunk/epan/dissectors/packet-radius.c
 
-Rename HEADER_FILES to NONGENERATED_HEADER_FILES, so that it's clear
-that it contains only the .h files not generated from other files.
+Actually use radius_vendor_packetcable_policy_decision_status_vals.
 
 ------------------------------------------------------------------------
-r11530 | guy | 2004-07-26 17:00:05 -0500 (Mon, 26 Jul 2004) | 2 lines
+r12206 | sahlberg | 2004-10-05 06:20:43 -0500 (Tue, 05 Oct 2004) | 4 lines
 Changed paths:
-   M /trunk/wiretap/Makefile.common
+   M /trunk/asn1/h248/packet-h248-template.c
+   A /trunk/asn1/h248-package-bcp
+   A /trunk/asn1/h248-package-bcp/BCP.asn
+   A /trunk/asn1/h248-package-bcp/h248_package_bcp.cnf
+   A /trunk/asn1/h248-package-bcp/packet-h248_package_bcp-template.c
+   A /trunk/asn1/h248-package-bcp/packet-h248_package_bcp-template.h
+   M /trunk/epan/dissectors/Makefile.common
+   M /trunk/epan/dissectors/packet-h248.c
+   A /trunk/epan/dissectors/packet-h248_package_bcp.c
+   A /trunk/epan/dissectors/packet-h248_package_bcp.h
+
+Add example template for how to add h248 extension packages to the megaco dissector
+
 
-Add a missing backslash.
 
 ------------------------------------------------------------------------
-r11528 | guy | 2004-07-26 15:46:54 -0500 (Mon, 26 Jul 2004) | 3 lines
+r12205 | sahlberg | 2004-10-05 04:50:19 -0500 (Tue, 05 Oct 2004) | 4 lines
 Changed paths:
-   M /trunk/wiretap/Makefile.am
-   A /trunk/wiretap/Makefile.common
-   M /trunk/wiretap/Makefile.nmake
+   M /trunk/asn1/h248/MEGACO.asn
+   M /trunk/asn1/h248/h248.cnf
+   M /trunk/asn1/h248/packet-h248-template.c
+   M /trunk/epan/dissectors/packet-h248.c
+   M /trunk/epan/dissectors/packet-h248.h
+
+minor update   preparations to have a dissector table for property identifiers
+
 
-Add a Makefile.common for Wiretap, and have Makefile.am and
-Makefile.nmake include it.
 
 ------------------------------------------------------------------------
-r11525 | gerald | 2004-07-26 09:11:28 -0500 (Mon, 26 Jul 2004) | 2 lines
+r12204 | guy | 2004-10-05 04:20:30 -0500 (Tue, 05 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/epan/libethereal.def
+   M /trunk/epan/dissectors/packet-h248.c
 
-From Anders Broman: Update libethereal.def to match recent changes in print.c.
+Set svn:keywords to Id to expand RCS IDs, and set svn:eol-style to
+native to canonicalize line endings.  Then fix the line endings....
 
 ------------------------------------------------------------------------
-r11524 | sahlberg | 2004-07-26 04:21:36 -0500 (Mon, 26 Jul 2004) | 3 lines
+r12203 | guy | 2004-10-05 04:18:55 -0500 (Tue, 05 Oct 2004) | 3 lines
 Changed paths:
+   M /trunk/asn1/cms/CryptographicMessageSyntax.asn
+   M /trunk/asn1/cms/cms.cnf
+   M /trunk/asn1/cms/cms_exp.cnf
+   M /trunk/asn1/cms/packet-cms-template.c
+   M /trunk/asn1/cms/packet-cms-template.h
+   M /trunk/asn1/h235/H235-SECURITY-MESSAGES.asn
+   M /trunk/asn1/h248/MEGACO.asn
+   M /trunk/asn1/h248/h248.cnf
+   M /trunk/asn1/h248/packet-h248-template.c
+   M /trunk/asn1/h248/packet-h248-template.h
+   M /trunk/asn1/ns-cert-exts/NETSCAPE-CERT-EXTS.asn
+   M /trunk/asn1/ns-cert-exts/ns_cert_exts.cnf
+   M /trunk/asn1/ns-cert-exts/packet-ns_cert_exts-template.c
+   M /trunk/asn1/ns-cert-exts/packet-ns_cert_exts-template.h
+   M /trunk/asn1/pkcs1/PKCS1.asn
+   M /trunk/asn1/pkcs1/packet-pkcs1-template.c
+   M /trunk/asn1/pkcs1/packet-pkcs1-template.h
+   M /trunk/asn1/pkcs1/pkcs1.cnf
+   M /trunk/asn1/pkinit/PKINIT.asn
+   M /trunk/asn1/pkinit/packet-pkinit-template.c
+   M /trunk/asn1/pkinit/packet-pkinit-template.h
+   M /trunk/asn1/pkinit/pkinit.cnf
+   M /trunk/asn1/pkinit/pkinit_exp.cnf
+   M /trunk/asn1/pkix1explicit/PKIX1EXPLICIT93.asn
+   M /trunk/asn1/pkix1explicit/packet-pkix1explicit-template.c
+   M /trunk/asn1/pkix1explicit/packet-pkix1explicit-template.h
+   M /trunk/asn1/pkix1explicit/pkix1explicit.cnf
+   M /trunk/asn1/pkix1explicit/pkix1explicit_exp.cnf
+   M /trunk/asn1/pkix1implicit/PKIX1IMPLICIT93.asn
+   M /trunk/asn1/pkix1implicit/packet-pkix1implicit-template.c
+   M /trunk/asn1/pkix1implicit/packet-pkix1implicit-template.h
+   M /trunk/asn1/pkix1implicit/pkix1implicit.cnf
+   M /trunk/asn1/pkix1implicit/pkix1implicit_exp.cnf
+   M /trunk/asn1/x509af/AuthenticationFramework.asn
+   M /trunk/asn1/x509af/packet-x509af-template.c
+   M /trunk/asn1/x509af/packet-x509af-template.h
+   M /trunk/asn1/x509af/x509af.cnf
+   M /trunk/asn1/x509af/x509af_exp.cnf
    M /trunk/asn1/x509ce/CertificateExtensions.asn
    M /trunk/asn1/x509ce/packet-x509ce-template.c
+   M /trunk/asn1/x509ce/packet-x509ce-template.h
    M /trunk/asn1/x509ce/x509ce.cnf
+   M /trunk/asn1/x509ce/x509ce_exp.cnf
+   M /trunk/asn1/x509if/InformationFramework.asn
+   M /trunk/asn1/x509if/packet-x509if-template.c
+   M /trunk/asn1/x509if/packet-x509if-template.h
    M /trunk/asn1/x509if/x509if.cnf
    M /trunk/asn1/x509if/x509if_exp.cnf
-   M /trunk/epan/dissectors/packet-x509ce.c
-   M /trunk/epan/dissectors/packet-x509if.c
-   M /trunk/epan/dissectors/packet-x509if.h
-
-update tox509ce   virtually all of x509ce now implemented (but there are still bugs)
+   M /trunk/asn1/x509sat/SelectedAttributeTypes.asn
+   M /trunk/asn1/x509sat/packet-x509sat-template.c
+   M /trunk/asn1/x509sat/packet-x509sat-template.h
+   M /trunk/asn1/x509sat/x509sat.cnf
+   M /trunk/asn1/x509sat/x509sat_exp.cnf
 
+Set svn:keywords to Id to expand RCS IDs, and set svn:eol-style to
+native to canonicalize line endings.
 
 ------------------------------------------------------------------------
-r11523 | guy | 2004-07-25 13:49:24 -0500 (Sun, 25 Jul 2004) | 2 lines
+r12202 | guy | 2004-10-05 03:59:57 -0500 (Tue, 05 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/config.nmake
+   M /trunk/wiretap/nettl.c
+   M /trunk/wiretap/nettl.h
 
-Fix a comment, as per suggestions by Yaniv Kaul.
+From Mark C. Brown: support for the NETTL_SUBSYS_HPPB_FDDI records.
 
 ------------------------------------------------------------------------
-r11522 | tuexen | 2004-07-25 12:53:02 -0500 (Sun, 25 Jul 2004) | 2 lines
+r12201 | guy | 2004-10-05 03:51:16 -0500 (Tue, 05 Oct 2004) | 7 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-asap.c
+   M /trunk/gtk/rtp_analysis.c
+
+Don't use a terminating entry in the clock_map table, compute the number
+of entries in it and check that many entries - that squelches a compiler
+warning.
 
-Added support for registered UDP port.
+From Alejandro Vaquero: get rid of an unused argument to
+"rtp_packet_add_graph()".
 
 ------------------------------------------------------------------------
-r11521 | gerald | 2004-07-25 12:35:57 -0500 (Sun, 25 Jul 2004) | 2 lines
+r12200 | guy | 2004-10-05 03:27:21 -0500 (Tue, 05 Oct 2004) | 6 lines
 Changed paths:
-   M /trunk/tools/lemon/lempar.c
+   M /trunk/epan/dissectors/packet-radius.c
 
-Fix up the declaration of yy_accept().
+Add checks in "rd_add_field_to_tree()" for the length of the field.
 
-------------------------------------------------------------------------
-r11520 | sahlberg | 2004-07-25 07:54:33 -0500 (Sun, 25 Jul 2004) | 2 lines
-Changed paths:
-   M /trunk/asn1/x509ce/CertificateExtensions.asn
-   M /trunk/asn1/x509ce/packet-x509ce-template.c
-   M /trunk/asn1/x509ce/x509ce.cnf
-   M /trunk/epan/dissectors/packet-x509ce.c
+Fix a compiler warning.
 
-some more extensions and their dissectors defined.
+Clean up white space.
 
 ------------------------------------------------------------------------
-r11519 | sahlberg | 2004-07-25 05:41:39 -0500 (Sun, 25 Jul 2004) | 3 lines
+r12199 | guy | 2004-10-05 03:09:58 -0500 (Tue, 05 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/asn1/cms/CryptographicMessageSyntax.asn
-   M /trunk/asn1/cms/cms.cnf
-   M /trunk/asn1/cms/packet-cms-template.c
-   M /trunk/epan/dissectors/packet-cms.c
-
-cms update    forgot that Name had been commented out in one of the structure.
+   M /trunk/epan/dissectors/packet-radius.c
 
+Put in the radius-types URL but don't list it as a reference.
 
 ------------------------------------------------------------------------
-r11518 | sahlberg | 2004-07-25 05:34:07 -0500 (Sun, 25 Jul 2004) | 5 lines
+r12198 | etxrab | 2004-10-04 15:33:39 -0500 (Mon, 04 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/asn1/cms/CryptographicMessageSyntax.asn
-   M /trunk/asn1/cms/cms.cnf
-   M /trunk/asn1/cms/packet-cms-template.c
-   M /trunk/asn1/x509af/x509af_exp.cnf
-   M /trunk/epan/dissectors/packet-cms.c
-   M /trunk/epan/dissectors/packet-cms.h
-
- large CMS update.
-
-most of cms is now implemented
-
+   M /trunk/epan/dissectors/packet-h248.c
+   M /trunk/epan/dissectors/packet-h248.h
 
+Regenerated with new template file
 ------------------------------------------------------------------------
-r11517 | guy | 2004-07-25 04:58:08 -0500 (Sun, 25 Jul 2004) | 5 lines
+r12197 | etxrab | 2004-10-04 15:28:15 -0500 (Mon, 04 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/epan/dissectors/Makefile.nmake
-
-From Lars Roland: don't print the "echo Linking dissectors.lib" command
-before running it (printing echo commands puts extra gunk into the
-output), and remove some additional generated files when doing "make
-distclean".
+   M /trunk/asn1/h248/packet-h248-template.c
 
+Fix some editing misstakes from this morning
 ------------------------------------------------------------------------
-r11516 | guy | 2004-07-25 04:55:52 -0500 (Sun, 25 Jul 2004) | 3 lines
+r12196 | gerald | 2004-10-04 15:15:38 -0500 (Mon, 04 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/capture_combo_utils.c
-   M /trunk/color_filters.c
+   M /trunk/epan/dissectors/packet-radius.c
 
-From Lars Roland: _NEED_VAR_IMPORT_ has to be defined so that variables
-are imported correctly from libethereal.dll when compiling with MSVC.
+De-@-ify email addresses.
 
 ------------------------------------------------------------------------
-r11515 | guy | 2004-07-25 04:54:37 -0500 (Sun, 25 Jul 2004) | 3 lines
+r12195 | gerald | 2004-10-04 15:13:35 -0500 (Mon, 04 Oct 2004) | 4 lines
 Changed paths:
-   M /trunk/gtk/font_utils.c
+   M /trunk/epan/dissectors/packet-radius.c
+   M /trunk/epan/sminmpec.c
+   M /trunk/epan/sminmpec.h
+
+Add support for the PacketCable Event Message Specification
+(PKT-SP-EM-I09-040402).  Code contributed by CableLabs.
 
-From Lars Roland: <epan/packet.h> has to be included before <windows.h>
-on Win32.
 
 ------------------------------------------------------------------------
-r11514 | guy | 2004-07-25 03:53:38 -0500 (Sun, 25 Jul 2004) | 12 lines
+r12194 | etxrab | 2004-10-04 00:50:55 -0500 (Mon, 04 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/file.c
-   M /trunk/gtk/follow_dlg.c
-   M /trunk/print.c
-   M /trunk/print.h
-   M /trunk/tethereal.c
+   M /trunk/asn1/h248/packet-h248-template.c
 
-Make some generic print routines that take, as an argument, a pointer to
-a structure containing a pointer to print operations for that object and
-a pointer to the private subclass-dependent data for that object, with
-subclasses for text and PostScript, and use those rather than the old
-scheme where a print format was passed as an argument - or where (as in
-the case of printing summary information in Tethereal) we just printed
-as text even if "-T ps" was selected.
+Updated packetname value string.
+------------------------------------------------------------------------
+r12193 | sahlberg | 2004-10-03 17:04:37 -0500 (Sun, 03 Oct 2004) | 4 lines
+Changed paths:
+   M /trunk/asn1/h248/MEGACO.asn
+   M /trunk/asn1/h248/h248.cnf
+   M /trunk/asn1/h248/packet-h248-template.c
+   M /trunk/epan/dissectors/packet-h248.c
 
-Check whether those routines succeed or get an I/O error writing output.
+stub prettification of PackageName
+to be filled in by telco people
 
-Clean up indentation.
 
 ------------------------------------------------------------------------
-r11513 | guy | 2004-07-25 03:36:34 -0500 (Sun, 25 Jul 2004) | 5 lines
+r12192 | ulfl | 2004-10-03 11:29:40 -0500 (Sun, 03 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/acinclude.m4
-   M /trunk/configure.in
-
-Use the GLib gint64 and guint64 types instead of u_int64_t or uint64_t,
-as those are what's used in Ethereal for 64-bit integers, and as there's
-no guarantee that either of them will be defined on any particular
-platform.
+   M /trunk/gtk/rtp_stream_dlg.c
 
+add some button tooltips, renamed some buttons
 ------------------------------------------------------------------------
-r11512 | guy | 2004-07-25 03:32:32 -0500 (Sun, 25 Jul 2004) | 3 lines
+r12191 | ulfl | 2004-10-03 11:28:29 -0500 (Sun, 03 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/tethereal.c
+   M /trunk/gtk/h323_analysis.c
 
-"-T ps" should not imply "-V"; one should be able to get a list of
-packet summaries in PostScript.
+add some button tooltips
+------------------------------------------------------------------------
+r12190 | ulfl | 2004-10-03 07:26:09 -0500 (Sun, 03 Oct 2004) | 1 line
+Changed paths:
+   M /trunk/TODO
 
+mark some things as DONE
 ------------------------------------------------------------------------
-r11511 | guy | 2004-07-25 03:02:06 -0500 (Sun, 25 Jul 2004) | 3 lines
+r12189 | sahlberg | 2004-10-03 06:50:25 -0500 (Sun, 03 Oct 2004) | 4 lines
 Changed paths:
-   M /trunk/simple_dialog.h
+   M /trunk/epan/dissectors/packet-kerberos4.c
+
+minor kerberos4 update  handle app-req  properly
+
 
-Fix the declarations for "simple_dialog()" and "vsimple_dialog()" used
-for non-GCC 2.x compilers to match their definitions.
 
 ------------------------------------------------------------------------
-r11510 | sahlberg | 2004-07-24 17:59:02 -0500 (Sat, 24 Jul 2004) | 6 lines
+r12188 | sahlberg | 2004-10-03 04:21:35 -0500 (Sun, 03 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/asn1/x509af/x509af.cnf
-   M /trunk/epan/dissectors/packet-x509af.c
-   M /trunk/epan/dissectors/packet-x509af.h
-
-get rid of the remaining compiler warnings.
-x509af is now virtually complete (the attribute userPassword still needs 
-an attribute dissector but after that, x509af is complete)
+   M /trunk/asn1/h248/MEGACO.asn
+   M /trunk/asn1/h248/h248.cnf
+   M /trunk/asn1/h248/packet-h248-template.c
+   M /trunk/epan/dissectors/packet-h248.c
 
+prettify  mtpAddress
 
 
 ------------------------------------------------------------------------
-r11509 | sahlberg | 2004-07-24 17:53:27 -0500 (Sat, 24 Jul 2004) | 3 lines
+r12187 | sahlberg | 2004-10-03 02:57:15 -0500 (Sun, 03 Oct 2004) | 5 lines
 Changed paths:
-   M /trunk/asn1/x509af/AuthenticationFramework.asn
-   M /trunk/asn1/x509af/packet-x509af-template.c
-   M /trunk/asn1/x509af/x509af.cnf
-   M /trunk/epan/dissectors/packet-x509af.c
-   M /trunk/epan/dissectors/packet-x509af.h
+   M /trunk/epan/dissectors/Makefile.common
+   A /trunk/epan/dissectors/packet-h248.c
+   A /trunk/epan/dissectors/packet-h248.h
+
+new protocol :   H.248 MEGACO v 2
+this dissector implements the binary encoding of megaco v2
 
-Add a lot of missing attribute dissectors
 
 
 ------------------------------------------------------------------------
-r11508 | sahlberg | 2004-07-24 17:30:49 -0500 (Sat, 24 Jul 2004) | 3 lines
+r12186 | sahlberg | 2004-10-03 02:52:53 -0500 (Sun, 03 Oct 2004) | 4 lines
 Changed paths:
-   M /trunk/asn1/x509af/AuthenticationFramework.asn
-   M /trunk/asn1/x509af/packet-x509af-template.c
-   M /trunk/epan/dissectors/packet-x509af.c
+   A /trunk/asn1/h248
+   A /trunk/asn1/h248/MEGACO.asn
+   A /trunk/asn1/h248/h248.cnf
+   A /trunk/asn1/h248/packet-h248-template.c
+   A /trunk/asn1/h248/packet-h248-template.h
 
-added the userCertificate and cAcertificate  attributes
+new protocol :  h248  Megaco v2
+binary encoding 
 
 
 ------------------------------------------------------------------------
-r11507 | sahlberg | 2004-07-24 17:16:41 -0500 (Sat, 24 Jul 2004) | 3 lines
+r12185 | ulfl | 2004-10-02 06:05:27 -0500 (Sat, 02 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/asn1/x509af/AuthenticationFramework.asn
-   M /trunk/asn1/x509af/packet-x509af-template.c
-   M /trunk/asn1/x509af/x509af.cnf
-   M /trunk/epan/dissectors/packet-x509af.c
-
-add dissection of the structure : Extension
-
+   M /trunk/gtk/h323_analysis.c
+   M /trunk/gtk/h323_conversations_dlg.c
 
+added some comments
 ------------------------------------------------------------------------
-r11506 | guy | 2004-07-24 04:59:00 -0500 (Sat, 24 Jul 2004) | 11 lines
+r12184 | ulfl | 2004-10-02 04:34:12 -0500 (Sat, 02 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/epan/dissectors/packet-smb-browse.c
-
-In "dissect_smb_server_type_flags()":
-
-	explicitly pass NULL as the tree argument to
-	"dissect_ndr_uint32()" - "tree", which was passed before, was
-	definitely null at that point, and the intent is that it not put
-	anything into the protocol tree;
-
-	use the correct offset when putting items into the protocol tree
-	(the offset has been advanced just past the end of the field at
-	the time the items are being put into the protocol tree).
+   M /trunk/gtk/ui_util.h
 
+precise a comment
 ------------------------------------------------------------------------
-r11505 | guy | 2004-07-24 01:38:33 -0500 (Sat, 24 Jul 2004) | 2 lines
+r12183 | ulfl | 2004-10-02 03:41:52 -0500 (Sat, 02 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/gtk/proto_draw.c
-
-Include "colors.h" to define BLACK and WHITE.
+   M /trunk/gtk/h225_counter.c
+   M /trunk/gtk/h225_ras_srt.c
 
+removed ITU-T prefix from H225, so H.225 and H.323 are closer together.
+If someone insists in using the ITU-T prefix, it should be applied to both protocols.
 ------------------------------------------------------------------------
-r11504 | guy | 2004-07-23 21:39:15 -0500 (Fri, 23 Jul 2004) | 4 lines
+r12182 | ulfl | 2004-10-02 03:31:58 -0500 (Sat, 02 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/color_filters.h
-
-"color_filters.h" doesn't need to include "epan/dfilter/dfilter.h";
-anything that includes "color_filters.h" also includes
-"epan/dfilter/dfilter.h" either directly or indirectly.
+   M /trunk/gtk/h323_conversations_dlg.c
 
+GUI fine tuning, e.g. removed useless "Unselect" button, some behaviour things, ...
 ------------------------------------------------------------------------
-r11503 | guy | 2004-07-23 21:29:14 -0500 (Fri, 23 Jul 2004) | 4 lines
+r12181 | guy | 2004-10-01 20:54:35 -0500 (Fri, 01 Oct 2004) | 4 lines
 Changed paths:
-   M /trunk/color.h
-   M /trunk/color_filters.h
-   M /trunk/file.c
-   M /trunk/gtk/font_utils.c
-   M /trunk/gtk/packet_list.c
+   M /trunk/Makefile.nmake
+   M /trunk/epan/libethereal.def
 
-Move the color-filter related stuff out of "color.h" into
-"color_filters.h", as that's the appropriate place for it - "color.h"
-should just deal with "color_t".
+From Lars Roland: don't link EXTRA_OBJECTS unnecessarily with
+ethereal.exe, tethereal.exe and dftest.exe.  Export mkstemp() from
+libethereal.dll instead.
 
 ------------------------------------------------------------------------
-r11502 | guy | 2004-07-23 21:08:42 -0500 (Fri, 23 Jul 2004) | 3 lines
+r12180 | guy | 2004-10-01 20:53:02 -0500 (Fri, 01 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/color.h
-   M /trunk/color_filters.c
-   M /trunk/gtk/color_utils.c
+   M /trunk/dftest.c
 
-Rename "create_color()" to "initialize_color()", as that reflects a bit
-better what it actually does.
+From Lars Roland: define _NEED_VAR_IMPORT_ in dftest.c to make linking
+with libethereal.dll work again.
 
 ------------------------------------------------------------------------
-r11501 | guy | 2004-07-23 20:32:29 -0500 (Fri, 23 Jul 2004) | 2 lines
+r12179 | guy | 2004-10-01 17:09:38 -0500 (Fri, 01 Oct 2004) | 5 lines
 Changed paths:
-   M /trunk/color_filters.c
+   M /trunk/gtk/h323_conversations.c
+   M /trunk/gtk/h323_conversations.h
 
-Add some comments from Gerald's Windows version of color_filters.c.
+Don't define "transport_prot_name[]" in "h323_conversations.h", as that
+puts a separate copy in every file that includes "h323_conversations.h",
+even if it doesn't use that copy.  Instead, define it in
+"h323_conversations.c" and declare it in "h323_conversations.h".
 
 ------------------------------------------------------------------------
-r11500 | guy | 2004-07-23 20:29:12 -0500 (Fri, 23 Jul 2004) | 5 lines
+r12178 | guy | 2004-10-01 17:01:25 -0500 (Fri, 01 Oct 2004) | 5 lines
 Changed paths:
-   M /trunk/Makefile.common
-   A /trunk/color_filters.c (from /trunk/gtk/color_filters.c:11499)
-   A /trunk/color_filters.h (from /trunk/gtk/color_filters.h:11495)
-   M /trunk/gtk/Makefile.am
-   M /trunk/gtk/Makefile.common
-   D /trunk/gtk/color_filters.c
-   D /trunk/gtk/color_filters.h
-   M /trunk/gtk/file_dlg.c
+   M /trunk/wiretap/nettl.c
+   M /trunk/wiretap/nettl.h
+
+From Mark C. Brown: add the HP-PB FDDI card type, although we currently
+don't have any code to handle it (other than to report that fact...).
 
-Move color_filters.c and color_filters.h up to the top-level directory,
-as they're now (theoretically) toolkit-independent (modulo changes that
-might be required to the code to update filter lists when a new filter
-is read in).
+Also, refer to the subsystem type code as such, not as a "network type".
 
 ------------------------------------------------------------------------
-r11499 | guy | 2004-07-23 20:16:45 -0500 (Fri, 23 Jul 2004) | 9 lines
+r12177 | guy | 2004-10-01 14:54:46 -0500 (Fri, 01 Oct 2004) | 7 lines
 Changed paths:
-   M /trunk/color.h
-   M /trunk/gtk/color_dlg.h
-   M /trunk/gtk/color_filters.c
+   M /trunk/tools/asn2eth.py
 
-Move the declaration of "color_add_filter_cb()" to "color.h", as,
-although it currently takes a pointer to a GtkWidget as its second
-argument, that argument is actually a "void *", so it's sort-of
-toolkit-independent.
+From Tomas Kukosa:
 
-That lets us get rid of all GTK+ references in "gtk/color_filters.c", so
-we can move it up to the top-level directory; get rid of the <gtk/gtk.h>
-include, in favor of a <glib.h> include.
+- fix for protocol registration (register_dissector() does not return
+  handle)
+- new directive REGISTER which can register PDU more than once
+- implicit tagging environment is supported 
 
 ------------------------------------------------------------------------
-r11498 | guy | 2004-07-23 19:49:19 -0500 (Fri, 23 Jul 2004) | 4 lines
+r12176 | guy | 2004-10-01 14:50:03 -0500 (Fri, 01 Oct 2004) | 3 lines
 Changed paths:
-   M /trunk/color.h
-   M /trunk/gtk/Makefile.am
-   M /trunk/gtk/color_filters.c
-   M /trunk/gtk/color_utils.c
-   D /trunk/gtk/color_utils.h
+   M /trunk/doc/README.plugins
+   M /trunk/plugins/acn/Makefile.nmake
+   M /trunk/plugins/artnet/Makefile.nmake
+   M /trunk/plugins/asn1/Makefile.nmake
+   M /trunk/plugins/ciscosm/Makefile.nmake
+   M /trunk/plugins/docsis/Makefile.nmake
+   M /trunk/plugins/enttec/Makefile.nmake
+   M /trunk/plugins/giop/Makefile.nmake
+   M /trunk/plugins/gryphon/Makefile.nmake
+   M /trunk/plugins/irda/Makefile.nmake
+   M /trunk/plugins/lwres/Makefile.nmake
+   M /trunk/plugins/megaco/Makefile.nmake
+   M /trunk/plugins/mgcp/Makefile.nmake
+   M /trunk/plugins/opsi/Makefile.nmake
+   M /trunk/plugins/pcli/Makefile.nmake
+   M /trunk/plugins/rdm/Makefile.nmake
+   M /trunk/plugins/rlm/Makefile.nmake
+   M /trunk/plugins/rtnet/Makefile.nmake
+   M /trunk/plugins/rudp/Makefile.nmake
+   M /trunk/plugins/v5ua/Makefile.nmake
 
-Move the declaration of "create_color()" up to "color.h", so it's
-declared in a toolkit-independent header file.  Get rid of
-"gtk/color_utils.h", as there's nothing left in it.
+From Lars Roland: we need to define _NEED_VAR_IMPORT_ in plugins if we
+link the plugins with libethereal, so do so.
 
 ------------------------------------------------------------------------
-r11497 | guy | 2004-07-23 19:35:13 -0500 (Fri, 23 Jul 2004) | 14 lines
+r12175 | ulfl | 2004-10-01 10:55:14 -0500 (Fri, 01 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/gtk/color_dlg.c
-   M /trunk/gtk/color_filters.c
-   M /trunk/gtk/color_utils.c
-   M /trunk/gtk/color_utils.h
-   M /trunk/gtk/colors.c
-   M /trunk/gtk/colors.h
-   M /trunk/gtk/follow_dlg.c
-   M /trunk/gtk/main.c
-   M /trunk/gtk/packet_list.c
-   M /trunk/gtk/stream_prefs.c
-
-Have "gtk/color_utils.c" contain routines with toolkit-independent APIs,
-but toolkit-dependent implementations, for manipulating colors, and have
-"gtk/color_utils.h" declare them (the header file should eventually be
-moved to the top-level directory).  Move the routines to convert between
-GdkColor and color_t out of there into "colors.c", and move their
-declarations into "colors.h", as their APIs are toolkit-dependent.
-
-Have the first such routine be a "create_color()" routine, which takes
-RGB values and initializes a "color_t", including doing any
-toolkit-dependent work necessary for that; use that in the
-"gtk/color_filters.c" code (the goal is to remove as many of the toolkit
-dependencies as possible from that code, and move it to the top-level
-directory).
+   M /trunk/gtk/h323_conversations_dlg.c
 
+indirection in menu entry not needed (maybe later again)
 ------------------------------------------------------------------------
-r11496 | guy | 2004-07-23 19:34:04 -0500 (Fri, 23 Jul 2004) | 2 lines
+r12174 | ulfl | 2004-10-01 10:36:53 -0500 (Fri, 01 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/gtk/proto_draw.c
-
-Get rid of unneeded include of "colors.h".
+   M /trunk/gtk/h323_conversations_dlg.c
 
+clarify column titles
 ------------------------------------------------------------------------
-r11495 | guy | 2004-07-23 19:08:19 -0500 (Fri, 23 Jul 2004) | 4 lines
+r12173 | jmayer | 2004-10-01 07:35:55 -0500 (Fri, 01 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/gtk/color_dlg.c
-   M /trunk/gtk/color_filters.c
-   M /trunk/gtk/color_filters.h
-
-Make "new_color_filter()" GUI-independent - have it take two "color_t"
-pointers, for the background and foreground color, as arguments, and
-have its callers generate them from GdkColor values.
+   M /trunk/epan/dissectors/packet-bootp.c
+   M /trunk/epan/dissectors/packet-dhcpv6.c
 
+initializing unsigned variables to -1 is considered interesting
 ------------------------------------------------------------------------
-r11494 | guy | 2004-07-23 18:36:50 -0500 (Fri, 23 Jul 2004) | 3 lines
+r12172 | jmayer | 2004-10-01 07:32:46 -0500 (Fri, 01 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/Makefile.common
-   A /trunk/capture_combo_utils.c (from /trunk/gtk/capture_combo_utils.c:11488)
-   A /trunk/capture_combo_utils.h (from /trunk/gtk/capture_combo_utils.h:11488)
-   M /trunk/gtk/Makefile.am
-   M /trunk/gtk/Makefile.common
-   D /trunk/gtk/capture_combo_utils.c
-   D /trunk/gtk/capture_combo_utils.h
-
-"capture_combo_utils.{c,h}" don't use any GTK+ stuff, so move them to
-the top-level directory.
+   M /trunk/util.h
 
+Get rid of warnings about shadowed variables (code was ok)
 ------------------------------------------------------------------------
-r11493 | jmayer | 2004-07-23 18:34:15 -0500 (Fri, 23 Jul 2004) | 1 line
+r12171 | jmayer | 2004-10-01 07:31:52 -0500 (Fri, 01 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/acinclude.m4
+   M /trunk/epan/ftypes/ftypes.h
+   M /trunk/tethereal.c
+   M /trunk/wiretap/ascend.c
+   M /trunk/wiretap/dbs-etherwatch.c
+   M /trunk/wiretap/vms.c
 
-Remove set -/+x - they were added for debugging and not intended for commit
+Get rid of warnings about shadowed variables (code was ok)
 ------------------------------------------------------------------------
-r11492 | jmayer | 2004-07-23 18:28:08 -0500 (Fri, 23 Jul 2004) | 5 lines
+r12170 | jmayer | 2004-10-01 07:27:52 -0500 (Fri, 01 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/epan/dissectors/packet-dcm.c
-   M /trunk/epan/dissectors/packet-ospf.c
-   M /trunk/epan/dissectors/packet-rsvp.c
-   M /trunk/plugins/opsi/packet-opsi.c
-   M /trunk/print.h
-   M /trunk/tools/lemon/lempar.c
-
-Trivial warning fixes:
-- comma at end of enum
-- function declarations with empty args instead of void
-- c++ style comments
+   M /trunk/file.h
 
+Trivial warning fix
 ------------------------------------------------------------------------
-r11491 | sahlberg | 2004-07-23 18:12:31 -0500 (Fri, 23 Jul 2004) | 3 lines
+r12169 | guy | 2004-10-01 04:13:33 -0500 (Fri, 01 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-ber.c
-
-add nice text item for the case when we could not find the dissector for a specific OID/attribute to make it easier to see where we have missed implementing something.
+   M /trunk/gtk/h323_analysis.c
+   M /trunk/gtk/h323_analysis.h
+   M /trunk/gtk/h323_conversations.c
+   M /trunk/gtk/h323_conversations.h
+   M /trunk/gtk/h323_conversations_dlg.c
 
+From Francisco Alcoba: handle H.323 conversations over UDP and SCTP.
 
 ------------------------------------------------------------------------
-r11490 | sahlberg | 2004-07-23 18:06:38 -0500 (Fri, 23 Jul 2004) | 8 lines
+r12168 | guy | 2004-10-01 03:33:53 -0500 (Fri, 01 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-ber.c
-
-inside dissect_ber_sequence() we know the expected length of the field that follows.
-
-use this and create a new tvbsubset so that
-1, reading too much data is flagged as MALFORMED PACKET indicating a bug in the dissector (or a packet that IS malformed)
-2, this also implicitely passes the length of the data through the ber.oid dissector handle in case we want to pick it up later.
-
+   M /trunk/Makefile.common
+   M /trunk/epan/Makefile.common
+   A /trunk/epan/prefs-int.h (from /trunk/prefs-int.h:12163)
+   M /trunk/epan/prefs.c
+   M /trunk/gtk/main.c
+   M /trunk/gtk/prefs_dlg.c
+   M /trunk/gtk/recent.c
+   D /trunk/prefs-int.h
 
+"prefs-int.h" belongs in epan, too.
 
 ------------------------------------------------------------------------
-r11489 | guy | 2004-07-23 17:39:08 -0500 (Fri, 23 Jul 2004) | 4 lines
+r12167 | guy | 2004-10-01 02:29:22 -0500 (Fri, 01 Oct 2004) | 8 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-smb.c
+   M /trunk/epan/dissectors/packet-eap.c
 
-Use "format_text()" on strings to be put into the Info column and the
-display representation of items in the protocol tree, so we don't get
-hosed by non-printable characters.
+From Jouni Malinen:
 
-------------------------------------------------------------------------
-r11488 | gerald | 2004-07-23 16:24:25 -0500 (Fri, 23 Jul 2004) | 2 lines
-Changed paths:
-   M /trunk/epan/dissectors/Makefile.nmake
+	adds support for dissecting EAP-FAST packets;
 
-Have distclean remove built sources.
+	add version field displaying for EAP-TTLS since the latest TTLS
+	draft defines a new version mechanism (which matches with both
+	EAP-PEAP and EAP-FAST in design).
 
 ------------------------------------------------------------------------
-r11487 | guy | 2004-07-23 15:41:23 -0500 (Fri, 23 Jul 2004) | 3 lines
+r12166 | guy | 2004-10-01 02:14:50 -0500 (Fri, 01 Oct 2004) | 9 lines
 Changed paths:
-   M /trunk/gtk/capture_combo_utils.c
+   M /trunk/AUTHORS
+   M /trunk/gtk/rtp_analysis.c
 
-Nothing here uses any GTK+ stuff, so get rid of the include of
-<gtk/gtk.h>.  (It should ultimately be moved out of the gtk directory.)
+From Alejandro Vaquero:
 
-------------------------------------------------------------------------
-r11486 | sahlberg | 2004-07-23 09:00:34 -0500 (Fri, 23 Jul 2004) | 3 lines
-Changed paths:
-   M /trunk/epan/dissectors/packet-cms.c
-   M /trunk/epan/dissectors/packet-x509af.c
+	RTP graphic analysis;
 
-remove some more compiler warnings
+	assorted bug fixes;
 
+	display delay and jitter in milliseconds, and add the percentage
+	of lost packets to the statistics.
 
 ------------------------------------------------------------------------
-r11485 | sahlberg | 2004-07-23 08:21:48 -0500 (Fri, 23 Jul 2004) | 3 lines
+r12165 | guy | 2004-10-01 02:07:03 -0500 (Fri, 01 Oct 2004) | 10 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-x509sat.c
-   M /trunk/tools/asn2eth.py
+   M /trunk/AUTHORS
+   M /trunk/epan/dissectors/packet-bgp.c
 
-make the implicit_tag parameter  _U_  to get rid of some compiler warnings in those cases it is not used.
+From Carlos Pignataro:
 
+o Fix EXTENDED_COMMUNITIES output that was appending the Carried
+  Extended communities; fix BGP_EXT_COM_L2INFO was not appending to the
+  bgpext_com_type
+o Update various text with the specific afi/safi
+o Decode fields in MP Reach NLRI for labeled VPNv4 and labeled IPv4
+  (and small offset fix for the latter)
+o Decode unknown address family in MP Reach NLRI
 
 ------------------------------------------------------------------------
-r11484 | sahlberg | 2004-07-23 08:11:29 -0500 (Fri, 23 Jul 2004) | 3 lines
+r12164 | guy | 2004-10-01 02:01:53 -0500 (Fri, 01 Oct 2004) | 4 lines
 Changed paths:
-   M /trunk/asn1/x509sat/SelectedAttributeTypes.asn
-   M /trunk/asn1/x509sat/packet-x509sat-template.c
-   M /trunk/epan/dissectors/packet-x509sat.c
-
-telex and telephone number attributes
+   M /trunk/AUTHORS
+   M /trunk/epan/dissectors/packet-radius.c
+   M /trunk/epan/sminmpec.c
+   M /trunk/epan/sminmpec.h
 
+From Kestutis Kupciunas: add new vendor enterprise codes for Gemtek
+Systems and the Wi-Fi Alliance, and add Radius vendor-specific
+attributes for them.
 
 ------------------------------------------------------------------------
-r11483 | sahlberg | 2004-07-23 07:22:13 -0500 (Fri, 23 Jul 2004) | 4 lines
+r12163 | ulfl | 2004-10-01 00:42:02 -0500 (Fri, 01 Oct 2004) | 2 lines
 Changed paths:
-   M /trunk/asn1/x509sat/packet-x509sat-template.c
-   M /trunk/epan/dissectors/packet-x509sat.c
-
-Remove a compiler warning for a parameter that is not used
-in the DirectoryString dissector
-
+   M /trunk/gtk/h323_conversations_dlg.c
 
+use "Analyze" not "Analyse", as in the menu.
+add some tooltips
 ------------------------------------------------------------------------
-r11482 | guy | 2004-07-23 03:36:07 -0500 (Fri, 23 Jul 2004) | 3 lines
+r12162 | ulfl | 2004-10-01 00:17:53 -0500 (Fri, 01 Oct 2004) | 1 line
 Changed paths:
-   M /trunk/epan/dissectors/packet-telnet.c
-
-If there's no data in the authentication option, don't unescape and
-tvbuffify it.
+   M /trunk/gtk/h323_analysis.c
 
+removed unreferenced "label_stats"
 ------------------------------------------------------------------------
-r11481 | sahlberg | 2004-07-23 03:21:51 -0500 (Fri, 23 Jul 2004) | 6 lines
+r12161 | guy | 2004-09-30 16:11:08 -0500 (Thu, 30 Sep 2004) | 4 lines
 Changed paths:
-   M /trunk/asn1/x509sat/SelectedAttributeTypes.asn
-   M /trunk/asn1/x509sat/packet-x509sat-template.c
-   M /trunk/epan/dissectors/packet-x509sat.c
-
-add all the other (quite a lot of them) attributes that were of the type DirectoryString
-
-
-(see how good it is to put markers for emacs macros in the files, it was pretty quick, wasnt it? i even tested the resulting code.)
+   M /trunk/epan/libethereal.def
 
+Export "sminmpec_values[]" from libethereal, for the (future) benefit of
+plugins ("future" because that depends on plugins linking with
+libethereal.lib, which isn't yet the only way to build plugins).
 
 ------------------------------------------------------------------------
-r11480 | guy | 2004-07-23 02:59:15 -0500 (Fri, 23 Jul 2004) | 4 lines
+r12160 | guy | 2004-09-30 15:33:10 -0500 (Thu, 30 Sep 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-rlogin.c
+   M /trunk/epan/dissectors/packet-diameter-defs.h
+   M /trunk/epan/dissectors/packet-diameter.c
 
-Use "col_append_str()" and "col_append_fstr()" to build the Info column,
-rather than building a string, and use "tvb_format_text()" on the data,
-so that non-printable characters are escaped.
+Constify some more stuff.
 
 ------------------------------------------------------------------------
-r11479 | sahlberg | 2004-07-23 02:46:12 -0500 (Fri, 23 Jul 2004) | 8 lines
+r12159 | guy | 2004-09-30 15:27:47 -0500 (Thu, 30 Sep 2004) | 11 lines
 Changed paths:
-   M /trunk/asn1/x509sat/SelectedAttributeTypes.asn
-   M /trunk/asn1/x509sat/packet-x509sat-template.c
-   M /trunk/epan/dissectors/packet-x509sat.c
-
-add dissection of DirectoryString,  this unfortunately had to be done manually inside the template.
+   M /trunk/epan/Makefile.common
+   M /trunk/epan/dissectors/packet-diameter-defs.h
+   M /trunk/epan/dissectors/packet-diameter.c
+   M /trunk/epan/dissectors/packet-radius.c
+   A /trunk/epan/sminmpec.c
+   A /trunk/epan/sminmpec.h
 
+Move the #defines for SMI Network Management Private Enterprise Codes
+for organizations to an <epan/sminmpec.h> header, and add in the ones
+that were used (without #defines) in the Diameter dissector.
 
-Also implement the attribute  organizationName which is of this type.
+Merge the value_string tables for them from the Diameter and Radius
+dissectors into epan/sminmpec.c and merge them.
 
-(Add magic comments so emacs-macros will be happy.)
+Use that value_string table in the Diameter and Radius dissectors.
 
+Constify some stuff in the Diameter dissector.
 
 ------------------------------------------------------------------------
-r11478 | sahlberg | 2004-07-23 02:08:14 -0500 (Fri, 23 Jul 2004) | 5 lines
+r12158 | guy | 2004-09-30 14:54:01 -0500 (Thu, 30 Sep 2004) | 2 lines
 Changed paths:
-   M /trunk/asn1/cms/packet-cms-template.c
-   M /trunk/asn1/x509sat/packet-x509sat-template.c
-   M /trunk/epan/dissectors/packet-ber.c
-   M /trunk/epan/dissectors/packet-ber.h
-   M /trunk/epan/dissectors/packet-cms.c
-   M /trunk/epan/dissectors/packet-x509sat.c
-
-register ber oid functions through a special function in packet-ber.c which also takes (still unused) the name of the oid
-so that sometime later it will be easy to add code to add the name of the oid to the dissection.
-
+   M /trunk/epan/dissectors/packet-ptp.c
 
+Give it an RCS ID.
 
 ------------------------------------------------------------------------
-r11477 | guy | 2004-07-23 01:37:58 -0500 (Fri, 23 Jul 2004) | 3 lines
+r12157 | guy | 2004-09-30 14:53:27 -0500 (Thu, 30 Sep 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-iax2.c
+   M /trunk/epan/dissectors/packet-pagp.c
+   M /trunk/epan/dissectors/packet-ptp.c
 
-"iax_lookup_circuit_details()" can return null; check whether it's null
-before using it.
+Set svn:keywords to Id to expand RCS IDs.
 
 ------------------------------------------------------------------------
-r11476 | guy | 2004-07-23 01:11:50 -0500 (Fri, 23 Jul 2004) | 2 lines
+r12156 | guy | 2004-09-30 14:52:56 -0500 (Thu, 30 Sep 2004) | 3 lines
 Changed paths:
-   M /trunk/Makefile.nmake
-   M /trunk/config.nmake
-   M /trunk/image/Makefile.nmake
-   A /trunk/image/wiretap.rc.in
-   M /trunk/wiretap/Makefile.nmake
+   M /trunk/epan/dissectors/packet-pagp.c
 
-From Graham Bloice: add resources to wiretap.dll.
+Set svn:eol-style to native to make the line endings be appropriate for
+the platform you're on.
 
 ------------------------------------------------------------------------
-r11475 | guy | 2004-07-22 20:37:35 -0500 (Thu, 22 Jul 2004) | 5 lines
+r12155 | guy | 2004-09-30 14:51:05 -0500 (Thu, 30 Sep 2004) | 2 lines
 Changed paths:
-   M /trunk/doc/README.developer
+   M /trunk/gtk/webbrowser.c
 
-Note that you *MUST* make sure "match_strval()" doesn't return null
-before using its value, or must check for a null return value and handle
-it specially, otherwise you put Ethereal at risk of crashing with bad
-packet data.
+Set svn:keywords to Id to expand RCS IDs.
 
 ------------------------------------------------------------------------
-r11474 | guy | 2004-07-22 20:32:42 -0500 (Thu, 22 Jul 2004) | 3 lines
+r12154 | guy | 2004-09-30 14:49:48 -0500 (Thu, 30 Sep 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-fc.c
+   M /trunk/gtk/h323_analysis.c
+   M /trunk/gtk/h323_analysis.h
+   M /trunk/gtk/h323_conversations.c
+   M /trunk/gtk/h323_conversations.h
+   M /trunk/gtk/h323_conversations_dlg.c
+   M /trunk/gtk/h323_conversations_dlg.h
+   M /trunk/gtk/webbrowser.c
 
-We are not guaranteed that "fchdr.r_ctl & 0x0F" is a valid frame type,
-so don't use "match_strval()", use "val_to_str()".
+Add an RCS ID.
 
 ------------------------------------------------------------------------
-r11473 | guy | 2004-07-22 15:08:08 -0500 (Thu, 22 Jul 2004) | 3 lines
+r12153 | guy | 2004-09-30 14:36:22 -0500 (Thu, 30 Sep 2004) | 3 lines
 Changed paths:
-   M /trunk/asn1/x509if/packet-x509if-template.h
+   M /trunk/gtk/h323_analysis.c
+   M /trunk/gtk/h323_analysis.h
+   M /trunk/gtk/h323_conversations.c
+   M /trunk/gtk/h323_conversations.h
+   M /trunk/gtk/h323_conversations_dlg.c
+   M /trunk/gtk/h323_conversations_dlg.h
 
-"dissect_x509if_AttributeTypeAndDistinguishedValue()" is static - don't
-declare it as non-static in the header file.
+Set svn:keywords to Id to expand RCS IDs, and set svn:eol-style to
+native to canonicalize line endings.
 
 ------------------------------------------------------------------------
-r11472 | ulfl | 2004-07-22 13:42:50 -0500 (Thu, 22 Jul 2004) | 1 line
+r12152 | etxrab | 2004-09-30 13:26:35 -0500 (Thu, 30 Sep 2004) | 1 line
 Changed paths:
-   M /trunk/gtk/conversations_table.c
-   M /trunk/gtk/hostlist_table.c
+   M /trunk/epan/dissectors/packet-radius.c
 
-use gtk_clipboard_get(), so the "copy to clipboard" is available in all GTK2 versions
+Don't undo the last changes
 ------------------------------------------------------------------------
-r11471 | ulfl | 2004-07-22 11:36:50 -0500 (Thu, 22 Jul 2004) | 1 line
+r12151 | etxrab | 2004-09-30 13:18:39 -0500 (Thu, 30 Sep 2004) | 1 line
 Changed paths:
-   M /trunk/gtk/conversations_table.c
-   M /trunk/gtk/conversations_table.h
+   M /trunk/epan/dissectors/packet-diameter-defs.h
+   M /trunk/epan/dissectors/packet-radius.c
 
-from Thomas Palmer: add "Copy to clipboard" button to the conversation table dialogs
+Add some vendor ID:s
 ------------------------------------------------------------------------
-r11470 | sahlberg | 2004-07-22 08:11:13 -0500 (Thu, 22 Jul 2004) | 3 lines
+r12150 | etxrab | 2004-09-30 13:12:34 -0500 (Thu, 30 Sep 2004) | 1 line
 Changed paths:
-   M /trunk/asn1/x509if/packet-x509if-template.c
-   M /trunk/asn1/x509sat/SelectedAttributeTypes.asn
-   M /trunk/asn1/x509sat/packet-x509sat-template.c
-   M /trunk/epan/dissectors/packet-x509if.c
-   M /trunk/epan/dissectors/packet-x509sat.c
-
-add the countryname attribute
-
+   M /trunk/epan/t35.c
 
+Fix UK manufacturer codes
 ------------------------------------------------------------------------
-r11469 | sahlberg | 2004-07-22 05:29:17 -0500 (Thu, 22 Jul 2004) | 4 lines
+r12149 | etxrab | 2004-09-30 13:09:09 -0500 (Thu, 30 Sep 2004) | 11 lines
 Changed paths:
-   M /trunk/asn1/x509if/InformationFramework.asn
-   M /trunk/asn1/x509if/packet-x509if-template.c
-   M /trunk/asn1/x509if/packet-x509if-template.h
-   M /trunk/asn1/x509if/x509if.cnf
-   M /trunk/epan/dissectors/packet-x509if.c
-   M /trunk/epan/dissectors/packet-x509if.h
+   M /trunk/gtk/Makefile.common
+   M /trunk/gtk/h323_analysis.c
+   M /trunk/gtk/h323_conversations.c
+   M /trunk/gtk/h323_conversations.h
+   M /trunk/gtk/h323_conversations_dlg.c
 
-start dissecting  AttributeTypeAnddistinguishedValue
-(which must be implemented by hand inside themplate)
+From Lars Roland:
+
+Having a closer look at the new and very useful H323 Call Analysis 
+feature, I have found some bugs and unnecessarily complicated code for 
+managing the registration of the tap listeners. So I decided to rewrite 
+this part of the source code. This part of the code is much smaller now. 
+Unnecessary and wrong calls of register_ethereal_tap() and 
+register_tap_listener_xxx() have been removed or replaced.
 
+I also fixed a bug with RAS Messages.
 
 ------------------------------------------------------------------------
-r11468 | sahlberg | 2004-07-22 05:05:59 -0500 (Thu, 22 Jul 2004) | 6 lines
+r12148 | guy | 2004-09-30 03:16:41 -0500 (Thu, 30 Sep 2004) | 2 lines
 Changed paths:
-   M /trunk/asn1/x509if/x509if_exp.cnf
-   M /trunk/epan/dissectors/packet-ber.c
-   M /trunk/epan/dissectors/packet-x509af.c
-   M /trunk/epan/dissectors/packet-x509if.c
-   M /trunk/epan/dissectors/packet-x509if.h
-
-dissect the x509if/Name all the way down to the AttributeTypeAndDistinguishedValue structure but not the structure itself.
-
-
-we are getting there, slow but steady
+   M /trunk/epan/dissectors/packet-etheric.c
 
+Reject packets with an unknown version number.
 
 ------------------------------------------------------------------------
-r11467 | sahlberg | 2004-07-22 03:00:33 -0500 (Thu, 22 Jul 2004) | 5 lines
+r12147 | jmayer | 2004-09-30 02:14:18 -0500 (Thu, 30 Sep 2004) | 3 lines
 Changed paths:
-   M /trunk/asn1/x509af/x509af.cnf
-   A /trunk/asn1/x509ce/x509ce_exp.cnf
-   M /trunk/asn1/x509if/x509if_exp.cnf
-
-minor update
-
-GeneralNames is defined in x509ce and not x509if
+   M /trunk/acinclude.m4
 
+At least on Suse, the linking flags are obtained via krb5-config --libs,
+not --cflags.
 
 ------------------------------------------------------------------------
-r11466 | sahlberg | 2004-07-22 02:51:47 -0500 (Thu, 22 Jul 2004) | 5 lines
+r12146 | guy | 2004-09-29 21:02:35 -0500 (Wed, 29 Sep 2004) | 6 lines
 Changed paths:
-   M /trunk/asn1/x509af/x509af.cnf
-   M /trunk/asn1/x509if/x509if_exp.cnf
-   A /trunk/asn1/x509sat/x509sat_exp.cnf
-   M /trunk/epan/dissectors/packet-x509af.c
-
-minor update
-
-UniqueIdentifier is imported from x509sat and not x509if
+   M /trunk/gtk/dlg_utils.c
+   M /trunk/gtk/dlg_utils.h
+   M /trunk/gtk/print_dlg.c
+   M /trunk/gtk/print_prefs.c
 
+For file browsing dialog boxes, the affirmative button should be "OK",
+not "Save".
 
-------------------------------------------------------------------------
-r11465 | jmayer | 2004-07-21 17:37:04 -0500 (Wed, 21 Jul 2004) | 1 line
-Changed paths:
-   M /trunk/acinclude.m4
+In UN*X with GTK+ 2.x, put the affirmative button in file dialogs to the
+right of the cancel button, as is done with other dialogs.
 
-Fix the fix to krb5
 ------------------------------------------------------------------------
-r11464 | gerald | 2004-07-21 17:12:49 -0500 (Wed, 21 Jul 2004) | 2 lines
+r12145 | guy | 2004-09-29 20:04:33 -0500 (Wed, 29 Sep 2004) | 4 lines
 Changed paths:
-   M /trunk/Makefile.nmake
+   M /trunk/epan/dissectors/packet-smb.c
+   M /trunk/smb.h
 
-Add doxygen.cfg to the "clean" target.
+Handle continuation replies to transactions better - try to match them
+up with the original request, without matching unrelated replies with
+that request.
 
 ------------------------------------------------------------------------
-r11463 | guy | 2004-07-21 14:23:18 -0500 (Wed, 21 Jul 2004) | 2 lines
+r12144 | etxrab | 2004-09-29 17:35:46 -0500 (Wed, 29 Sep 2004) | 5 lines
 Changed paths:
-   M /trunk/asn1/x509af/packet-x509af-template.c
+   M /trunk/gtk/Makefile.am
 
-Include "packet-x509sat.h" to declare a function we use.
+Add      
+	h323_analysis.h	\
+	h323_conversations.h	\
+	h323_conversations_dlg.h	\
 
 ------------------------------------------------------------------------
-r11462 | jmayer | 2004-07-21 14:15:51 -0500 (Wed, 21 Jul 2004) | 1 line
+r12143 | etxrab | 2004-09-29 17:34:01 -0500 (Wed, 29 Sep 2004) | 4 lines
 Changed paths:
-   M /trunk/plugins/opsi
+   M /trunk/gtk/Makefile.common
 
-Add svn:ignore
-------------------------------------------------------------------------
-r11461 | jmayer | 2004-07-21 12:59:03 -0500 (Wed, 21 Jul 2004) | 1 line
-Changed paths:
-   M /trunk
+Add
+	h323_analysis.c	\
+	h323_conversations_dlg.c	\
 
-Add tags and TAGS to svn:ignore
 ------------------------------------------------------------------------
-r11460 | jmayer | 2004-07-21 12:57:00 -0500 (Wed, 21 Jul 2004) | 1 line
+r12142 | etxrab | 2004-09-29 17:23:37 -0500 (Wed, 29 Sep 2004) | 1 line
 Changed paths:
-   M /trunk/doc
-   M /trunk/epan/dfilter
-   M /trunk/epan/ftypes
-   M /trunk/gtk
-   M /trunk/tools/lemon
-   M /trunk/wiretap
+   M /trunk/epan/dissectors/packet-h225.c
+   M /trunk/epan/dissectors/packet-h225.h
+   M /trunk/epan/dissectors/packet-h245.c
+   M /trunk/epan/dissectors/packet-h245.h
 
-Add tags and TAGS to svn:ignore
+From Miha Jemec: I implemented a H323 call decoder. Using the TAP system, it keeps track of each call, number of packets, setting filter and a more detailed analysis of each call.
 ------------------------------------------------------------------------
-r11459 | jmayer | 2004-07-21 12:55:23 -0500 (Wed, 21 Jul 2004) | 1 line
+r12141 | etxrab | 2004-09-29 17:20:46 -0500 (Wed, 29 Sep 2004) | 1 line
 Changed paths:
-   M /trunk/plugins/acn
-   M /trunk/plugins/artnet
-   M /trunk/plugins/asn1
-   M /trunk/plugins/ciscosm
-   M /trunk/plugins/docsis
-   M /trunk/plugins/enttec
-   M /trunk/plugins/giop
-   M /trunk/plugins/gryphon
-   M /trunk/plugins/irda
-   M /trunk/plugins/lwres
-   M /trunk/plugins/megaco
-   M /trunk/plugins/mgcp
-   M /trunk/plugins/pcli
-   M /trunk/plugins/rdm
-   M /trunk/plugins/rlm
-   M /trunk/plugins/rtnet
-   M /trunk/plugins/rudp
-   M /trunk/plugins/v5ua
+   A /trunk/gtk/h323_analysis.c
+   A /trunk/gtk/h323_analysis.h
+   A /trunk/gtk/h323_conversations.c
+   A /trunk/gtk/h323_conversations.h
+   A /trunk/gtk/h323_conversations_dlg.c
+   A /trunk/gtk/h323_conversations_dlg.h
 
-Add tags and TAGS to svn:ignore
+From Miha Jemec: I implemented a H323 call decoder. Using the TAP system, it keeps track of each call, number of packets, setting filter and a more detailed analysis of each call.
 ------------------------------------------------------------------------
-r11458 | jmayer | 2004-07-21 12:45:05 -0500 (Wed, 21 Jul 2004) | 1 line
+r12140 | guy | 2004-09-29 17:20:21 -0500 (Wed, 29 Sep 2004) | 11 lines
 Changed paths:
-   M /trunk/acinclude.m4
-   M /trunk/configure.in
+   M /trunk/plugins/acn/packet-acn.c
+   M /trunk/plugins/asn1/packet-asn1.c
+   M /trunk/plugins/irda/packet-irda.c
+   M /trunk/plugins/irda/packet-sir.c
+   M /trunk/plugins/lwres/packet-lwres.c
+   M /trunk/plugins/plugin_api.h
 
-Forgotten case: Make krb5 fail if it requires -lcrypto but no --with-ssl=... is not given
-------------------------------------------------------------------------
-r11457 | sahlberg | 2004-07-21 06:13:03 -0500 (Wed, 21 Jul 2004) | 3 lines
-Changed paths:
-   M /trunk/asn1/cms/packet-cms-template.c
-   M /trunk/asn1/x509af/packet-x509af-template.c
-   M /trunk/epan/dissectors/packet-ber.c
-   M /trunk/epan/dissectors/packet-ber.h
-   M /trunk/epan/dissectors/packet-cms.c
-   M /trunk/epan/dissectors/packet-kerberos.c
-   M /trunk/epan/dissectors/packet-x509af.c
+In "plugins/plugin_api.h", don't include stuff required for the plugin
+address table if we don't need the plugin address table, so as to catch
+plugin dissectors that don't directly include stuff they need -
+eventually, the plugin address table stuff should completely go away, so
+we don't want dissectors depending on it.
 
-get rid of the nasty ber specific oid->callback table and reimplement the functionality using a dissector table instead   i.e. the proper way.
+Fix those dissectors caught by this.
 
+Don't include "simple_dialog.h" in the ASN.1 dissector - it doesn't use
+it.
 
 ------------------------------------------------------------------------
-r11456 | sahlberg | 2004-07-21 04:00:56 -0500 (Wed, 21 Jul 2004) | 3 lines
+r12139 | guy | 2004-09-29 14:30:10 -0500 (Wed, 29 Sep 2004) | 3 lines
 Changed paths:
-   M /trunk/Makefile.am
-
-reverse part of jmayer's last patch to make tethereal build again
+   M /trunk/Makefile.nmake
+   M /trunk/config.h.win32
+   M /trunk/config.nmake
+   M /trunk/doc/README.plugins
+   M /trunk/plugins/acn/Makefile.nmake
+   M /trunk/plugins/artnet/Makefile.nmake
+   M /trunk/plugins/asn1/Makefile.nmake
+   M /trunk/plugins/ciscosm/Makefile.nmake
+   M /trunk/plugins/docsis/Makefile.nmake
+   M /trunk/plugins/enttec/Makefile.nmake
+   M /trunk/plugins/giop/Makefile.nmake
+   M /trunk/plugins/gryphon/Makefile.nmake
+   M /trunk/plugins/irda/Makefile.nmake
+   M /trunk/plugins/lwres/Makefile.nmake
+   M /trunk/plugins/megaco/Makefile.nmake
+   M /trunk/plugins/mgcp/Makefile.nmake
+   M /trunk/plugins/mgcp/packet-mgcp.c
+   M /trunk/plugins/opsi/Makefile.nmake
+   M /trunk/plugins/pcli/Makefile.nmake
+   M /trunk/plugins/rdm/Makefile.nmake
+   M /trunk/plugins/rlm/Makefile.nmake
+   M /trunk/plugins/rtnet/Makefile.nmake
+   M /trunk/plugins/rudp/Makefile.nmake
+   M /trunk/plugins/v5ua/Makefile.nmake
 
+From Lars Roland: add an option to link plugins with libethereal rather
+than using the plugin address table.
 
 ------------------------------------------------------------------------
-r11455 | sahlberg | 2004-07-21 03:51:08 -0500 (Wed, 21 Jul 2004) | 5 lines
+r12138 | tuexen | 2004-09-29 13:08:18 -0500 (Wed, 29 Sep 2004) | 3 lines
 Changed paths:
-   M /trunk/gtk/hostlist_table.c
+   M /trunk/epan/dissectors/packet-sua.c
 
-GdkDisplay is only available in gtk 2.2 and later
+- Added support for version 08 of the ID (expired).
+- Updated support for latest version to RFC 3868.
 
-it is not available in gtk 2.0 which all of us using more prooven and stable (==obsolete) versions use.
+------------------------------------------------------------------------
+r12137 | guy | 2004-09-29 12:45:48 -0500 (Wed, 29 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/acinclude.m4
 
+Use the right name in the Checking... messages.
 
 ------------------------------------------------------------------------
-r11454 | guy | 2004-07-21 01:31:33 -0500 (Wed, 21 Jul 2004) | 2 lines
+r12136 | guy | 2004-09-29 12:38:53 -0500 (Wed, 29 Sep 2004) | 2 lines
 Changed paths:
-   M /trunk/AUTHORS
-   M /trunk/Makefile.am
-   M /trunk/configure.in
-   M /trunk/packaging/nsis/Makefile.nmake
-   M /trunk/packaging/nsis/ethereal.nsi
-   M /trunk/plugins/Makefile.am
-   M /trunk/plugins/Makefile.nmake
-   A /trunk/plugins/opsi
-   A /trunk/plugins/opsi/AUTHORS
-   A /trunk/plugins/opsi/COPYING
-   A /trunk/plugins/opsi/ChangeLog
-   A /trunk/plugins/opsi/Makefile.am
-   A /trunk/plugins/opsi/Makefile.nmake
-   A /trunk/plugins/opsi/moduleinfo.h
-   A /trunk/plugins/opsi/packet-opsi.c
-   A /trunk/plugins/opsi/packet-opsi.h
+   M /trunk/acinclude.m4
 
-From Laurent Rabret: OPSI support.
+Put back the $KRB4_CONFIG call to set KRB5_LIBS.
 
 ------------------------------------------------------------------------
-r11453 | guy | 2004-07-21 01:05:24 -0500 (Wed, 21 Jul 2004) | 2 lines
+r12135 | guy | 2004-09-29 05:09:04 -0500 (Wed, 29 Sep 2004) | 3 lines
 Changed paths:
-   M /trunk/epan/dissectors/packet-http.c
+   M /trunk/epan/dissectors/packet-etheric.c
 
-From Tomas Kukosa: add support for RFC 3253 HTTP methods.
+If we don't have more than 5 bytes in the message, don't put an entry in
+the tree for an optional parameter pointer, as there isn't one.
 
 ------------------------------------------------------------------------
-r11452 | guy | 2004-07-21 00:57:30 -0500 (Wed, 21 Jul 2004) | 2 lines
+r12134 | guy | 2004-09-29 04:58:22 -0500 (Wed, 29 Sep 2004) | 5 lines
 Changed paths:
-   M /trunk/AUTHORS
-   M /trunk/epan/dissectors/packet-ospf.c
-   M /trunk/epan/dissectors/packet-rsvp.c
-   M /trunk/epan/dissectors/packet-rsvp.h
+   M /trunk/acinclude.m4
 
-From Roberto Morro: support for GMPLS UNI and E-NNI objects/TLVs.
+When testing whether the Heimdal library has krb5_kt_resolve (and
+whether it requires -lresolv), restore LIBS after we're done regardless
+of whether we found it or not - we use KRB5_LIBS in the Makefiles,
+rather than adding the Kerberos libraries to LIBS directly.
 
 ------------------------------------------------------------------------
-r11451 | guy | 2004-07-21 00:44:03 -0500 (Wed, 21 Jul 2004) | 4 lines
+r12133 | jmayer | 2004-09-29 02:11:16 -0500 (Wed, 29 Sep 2004) | 1 line
 Changed paths:
-   M /trunk/epan/dissectors/packet-ethertype.c
-   M /trunk/epan/dissectors/packet-ieee80211.c
-   M /trunk/etypes.h
-
-From metatech: at least on Windows XP, if a Centrino 802.11 interface is
-in promiscuous mode, packets captured promiscuously show up as 802.11
-packets encapsulated in Ethernet, with an Ethernet type of 0x2452.
-
-------------------------------------------------------------------------
-r11450 | ulfl | 2004-07-20 18:48:50 -0500 (Tue, 20 Jul 2004) | 1 line
-Changed paths:
-   M /trunk/gtk/hostlist_table.c
-   M /trunk/gtk/hostlist_table.h
-
-from Thomas Palmer: copy content of hostlist table to clipboard in csv format.
-------------------------------------------------------------------------
-r11449 | ulfl | 2004-07-20 16:39:54 -0500 (Tue, 20 Jul 2004) | 1 line
-Changed paths:
-   M /trunk/gtk/conversations_table.c
-   M /trunk/gtk/conversations_table.h
-
-refactoring and renaming finished
-------------------------------------------------------------------------
-r11448 | ulfl | 2004-07-20 15:56:53 -0500 (Tue, 20 Jul 2004) | 1 line
-Changed paths:
-   M /trunk/gtk/conversations_eth.c
-   M /trunk/gtk/conversations_fc.c
-   M /trunk/gtk/conversations_fddi.c
-   M /trunk/gtk/conversations_ip.c
-   M /trunk/gtk/conversations_ipx.c
-   M /trunk/gtk/conversations_table.c
-   M /trunk/gtk/conversations_table.h
-   M /trunk/gtk/conversations_tcpip.c
-   M /trunk/gtk/conversations_tr.c
-   M /trunk/gtk/conversations_udpip.c
-   M /trunk/gtk/menu.c
-
-some more renaming of the conversation tables things
-------------------------------------------------------------------------
-r11447 | guy | 2004-07-20 15:19:46 -0500 (Tue, 20 Jul 2004) | 2 lines
-Changed paths:
-   M /trunk/epan/dissectors/packet-x509af.c
-
-Include "packet-x509sat.h" to declare a function we use.
-
-------------------------------------------------------------------------
-r11446 | jmayer | 2004-07-20 14:55:01 -0500 (Tue, 20 Jul 2004) | 3 lines
-Changed paths:
-   M /trunk/packaging/rpm/SPECS/ethereal.spec.in
-
-
-Make building rpms possible again. Feedback for improvements welcome.
-
-------------------------------------------------------------------------
-r11445 | etxrab | 2004-07-20 14:04:48 -0500 (Tue, 20 Jul 2004) | 1 line
-Changed paths:
-   M /trunk/epan/dissectors/packet-sigcomp.c
-
-Fix decoding of messafe type 1, if T-bit = Zero
-------------------------------------------------------------------------
-r11444 | guy | 2004-07-20 13:42:28 -0500 (Tue, 20 Jul 2004) | 3 lines
-Changed paths:
-   M /trunk/acinclude.m4
-
-As Joerg Mayer noted, the value of LIBS should be saved outside the
-loop.
-
-------------------------------------------------------------------------
-r11443 | jmayer | 2004-07-20 12:42:42 -0500 (Tue, 20 Jul 2004) | 4 lines
-Changed paths:
-   M /trunk/configure.in
-
-
-Make configure continue after disabling Net-SNMP when the openssl libs
-are reuired for SNMP to link but not enabled on configure.
-
-------------------------------------------------------------------------
-r11442 | jmayer | 2004-07-20 11:58:11 -0500 (Tue, 20 Jul 2004) | 5 lines
-Changed paths:
-   M /trunk/Makefile.am
-   M /trunk/epan/Makefile.am
-   M /trunk/epan/dissectors/Makefile.am
-
-make "make dist" work again. Well, almost: currently you
-need to run
-STCHECK_CONFIGURE_FLAGS=--with-ssl=/usr make distcheck
-at least on my system.
+   M /trunk/FAQ
+   M /trunk/help/faq.txt
+   M /trunk/manuf
 
+Update manuf and FAQ
 ------------------------------------------------------------------------
-r11441 | sahlberg | 2004-07-20 05:45:11 -0500 (Tue, 20 Jul 2004) | 4 lines
+r12132 | etxrab | 2004-09-29 01:42:28 -0500 (Wed, 29 Sep 2004) | 1 line
 Changed paths:
-   M /trunk/asn1/x509af/packet-x509af-template.c
-   M /trunk/epan/dissectors/packet-ber.c
-   M /trunk/epan/dissectors/packet-ber.h
-   M /trunk/epan/dissectors/packet-x509af.c
-
-Small update to AlgorithmIdentifier.
-Allow the TYPE field to match ANY type of BER construct.
-
+   M /trunk/epan/dissectors/packet-etheric.c
 
+Handle ANM message without optional parameter. 
 ------------------------------------------------------------------------
-r11440 | sahlberg | 2004-07-20 04:11:40 -0500 (Tue, 20 Jul 2004) | 12 lines
+r12131 | guy | 2004-09-28 21:54:22 -0500 (Tue, 28 Sep 2004) | 5 lines
 Changed paths:
-   M /trunk/asn1/cms/packet-cms-template.c
-   M /trunk/epan/dissectors/Makefile.common
-   M /trunk/epan/dissectors/packet-ber.c
-   M /trunk/epan/dissectors/packet-ber.h
-   A /trunk/epan/dissectors/packet-cms.c
-   A /trunk/epan/dissectors/packet-cms.h
-   M /trunk/epan/dissectors/packet-kerberos.c
-   A /trunk/epan/dissectors/packet-x509af.c
-   A /trunk/epan/dissectors/packet-x509af.h
-   A /trunk/epan/dissectors/packet-x509ce.c
-   A /trunk/epan/dissectors/packet-x509ce.h
-   A /trunk/epan/dissectors/packet-x509if.c
-   A /trunk/epan/dissectors/packet-x509if.h
-   A /trunk/epan/dissectors/packet-x509sat.c
-   A /trunk/epan/dissectors/packet-x509sat.h
-
-Add the new protocols  CMS, X509AF,  X509IF,  X509CE and X509SAT
-to the ethereal build.
-
-The dissections are semi-useful  but incomplete.
-The big problem still remaining is the x509if  Name object not being 
-dissected properly   thus causing the dissection to get out of sync/fail
-halfway through the certificate structure.
-
+   M /trunk/Makefile.common
+   D /trunk/column.c
+   D /trunk/column.h
+   M /trunk/epan/Makefile.common
+   A /trunk/epan/column.c (from /trunk/column.c:12124)
+   A /trunk/epan/column.h (from /trunk/column.h:12124)
+   M /trunk/epan/prefs.c
+   M /trunk/file.c
+   M /trunk/gtk/column_prefs.c
+   M /trunk/gtk/main.c
+   M /trunk/gtk/packet_list.c
+   M /trunk/gtk/packet_win.c
+   M /trunk/tethereal.c
 
-work in progress but already semi-useful.
+Move the column preferences stuff to epan (the rest of the preferences
+stuff is already there).
 
+Update Gerald's e-mail address in column.h.
 
 ------------------------------------------------------------------------
-r11439 | ulfl | 2004-07-20 01:06:41 -0500 (Tue, 20 Jul 2004) | 2 lines
+r12130 | guy | 2004-09-28 19:52:45 -0500 (Tue, 28 Sep 2004) | 2 lines
 Changed paths:
-   M /trunk/gtk/Makefile.am
-   M /trunk/gtk/Makefile.common
-   A /trunk/gtk/conversations_eth.c (from /trunk/gtk/endpoint_talkers_eth.c:11438)
-   A /trunk/gtk/conversations_fc.c (from /trunk/gtk/endpoint_talkers_fc.c:11438)
-   A /trunk/gtk/conversations_fddi.c (from /trunk/gtk/endpoint_talkers_fddi.c:11438)
-   A /trunk/gtk/conversations_ip.c (from /trunk/gtk/endpoint_talkers_ip.c:11438)
-   A /trunk/gtk/conversations_ipx.c (from /trunk/gtk/endpoint_talkers_ipx.c:11438)
-   A /trunk/gtk/conversations_table.c (from /trunk/gtk/endpoint_talkers_table.c:11438)
-   A /trunk/gtk/conversations_table.h (from /trunk/gtk/endpoint_talkers_table.h:11438)
-   A /trunk/gtk/conversations_tcpip.c (from /trunk/gtk/endpoint_talkers_tcpip.c:11438)
-   A /trunk/gtk/conversations_tr.c (from /trunk/gtk/endpoint_talkers_tr.c:11438)
-   A /trunk/gtk/conversations_udpip.c (from /trunk/gtk/endpoint_talkers_udpip.c:11438)
-   D /trunk/gtk/endpoint_talkers_eth.c
-   D /trunk/gtk/endpoint_talkers_fc.c
-   D /trunk/gtk/endpoint_talkers_fddi.c
-   D /trunk/gtk/endpoint_talkers_ip.c
-   D /trunk/gtk/endpoint_talkers_ipx.c
-   D /trunk/gtk/endpoint_talkers_table.c
-   D /trunk/gtk/endpoint_talkers_table.h
-   D /trunk/gtk/endpoint_talkers_tcpip.c
-   D /trunk/gtk/endpoint_talkers_tr.c
-   D /trunk/gtk/endpoint_talkers_udpip.c
+   M /trunk/Makefile.common
+   D /trunk/afn.c
+   D /trunk/afn.h
+   M /trunk/epan/Makefile.common
+   A /trunk/epan/afn.c (from /trunk/afn.c:12124)
+   A /trunk/epan/afn.h (from /trunk/afn.h:12124)
+   M /trunk/epan/dissectors/packet-bgp.c
+   M /trunk/epan/dissectors/packet-clnp.c
+   M /trunk/epan/dissectors/packet-cpha.c
+   M /trunk/epan/dissectors/packet-dns.c
+   M /trunk/epan/dissectors/packet-dvmrp.c
+   M /trunk/epan/dissectors/packet-eigrp.c
+   M /trunk/epan/dissectors/packet-etherip.c
+   M /trunk/epan/dissectors/packet-gre.c
+   M /trunk/epan/dissectors/packet-h225.c
+   M /trunk/epan/dissectors/packet-h245.c
+   M /trunk/epan/dissectors/packet-icmpv6.c
+   M /trunk/epan/dissectors/packet-igmp.c
+   M /trunk/epan/dissectors/packet-igrp.c
+   M /trunk/epan/dissectors/packet-ip.c
+   M /trunk/epan/dissectors/packet-ipdc.c
+   M /trunk/epan/dissectors/packet-ipsec.c
+   M /trunk/epan/dissectors/packet-ipv6.c
+   M /trunk/epan/dissectors/packet-ipvs-syncd.c
+   M /trunk/epan/dissectors/packet-isakmp.c
+   M /trunk/epan/dissectors/packet-ldp.c
+   M /trunk/epan/dissectors/packet-lmp.c
+   M /trunk/epan/dissectors/packet-mip6.c
+   M /trunk/epan/dissectors/packet-ospf.c
+   M /trunk/epan/dissectors/packet-pgm.c
+   M /trunk/epan/dissectors/packet-pim.c
+   M /trunk/epan/dissectors/packet-portmap.c
+   M /trunk/epan/dissectors/packet-rsvp.c
+   M /trunk/epan/dissectors/packet-sctp.c
+   M /trunk/epan/dissectors/packet-t38.c
+   M /trunk/epan/dissectors/packet-tcp.c
+   M /trunk/epan/dissectors/packet-teredo.c
+   M /trunk/epan/dissectors/packet-udp.c
+   M /trunk/epan/dissectors/packet-vines.c
+   M /trunk/epan/dissectors/packet-vj.c
+   M /trunk/epan/dissectors/packet-vrrp.c
+   A /trunk/epan/ipproto.c (from /trunk/ipproto.c:12124)
+   A /trunk/epan/ipproto.h (from /trunk/ipproto.h:12124)
+   A /trunk/epan/t35.c (from /trunk/t35.c:12124)
+   A /trunk/epan/t35.h (from /trunk/t35.h:12124)
+   M /trunk/gtk/decode_as_dcerpc.c
+   M /trunk/gtk/decode_as_dlg.c
+   M /trunk/gtk/follow_dlg.c
    M /trunk/gtk/menu.c
+   M /trunk/gtk/tcp_graph.c
+   D /trunk/ipproto.c
+   D /trunk/ipproto.h
+   M /trunk/plugins/asn1/packet-asn1.c
+   D /trunk/t35.c
+   D /trunk/t35.h
 
-renamed endpoint_talkers to conversations, as this reduces confusion in combination with the hostlist/endpoints table
-(some code refactoring still needs to be done in table.c/.h).
-------------------------------------------------------------------------
-r11438 | guy | 2004-07-19 18:21:01 -0500 (Mon, 19 Jul 2004) | 3 lines
-Changed paths:
-   M /trunk/gtk/Makefile.am
-
-"gtk/filter_prefs.h" was renamed "gtk/filter_dlg.h"; update the Makefile
-stuff appropriately.
+Move various tables into the epan directory.
 
 ------------------------------------------------------------------------
-r11437 | guy | 2004-07-19 18:17:20 -0500 (Mon, 19 Jul 2004) | 2 lines
+r12129 | guy | 2004-09-28 19:25:05 -0500 (Tue, 28 Sep 2004) | 2 lines
 Changed paths:
-   M /trunk/gtk/filter_dlg.h
+   M /trunk/Makefile.common
+   M /trunk/epan/Makefile.common
+   M /trunk/epan/dissectors/packet-http.c
+   M /trunk/epan/dissectors/packet-rtsp.c
+   A /trunk/epan/req_resp_hdrs.c (from /trunk/req_resp_hdrs.c:12124)
+   A /trunk/epan/req_resp_hdrs.h (from /trunk/req_resp_hdrs.h:12124)
+   D /trunk/req_resp_hdrs.c
+   D /trunk/req_resp_hdrs.h
 
-It's not called "filter_prefs.h" any more.
+Move the request/response header helper routines to the epan directory.
 
 ------------------------------------------------------------------------
-r11436 | ulfl | 2004-07-19 16:42:01 -0500 (Mon, 19 Jul 2004) | 1 line
+r12128 | guy | 2004-09-28 19:06:36 -0500 (Tue, 28 Sep 2004) | 2 lines
 Changed paths:
-   M /trunk/gtk/Makefile.common
+   M /trunk/Makefile.common
+   M /trunk/epan/Makefile.common
+   M /trunk/epan/dissectors/packet-ansi_a.c
+   M /trunk/epan/dissectors/packet-ansi_map.c
+   M /trunk/epan/dissectors/packet-bootp.c
+   M /trunk/epan/dissectors/packet-dcerpc.c
+   M /trunk/epan/dissectors/packet-eth.c
+   M /trunk/epan/dissectors/packet-fc.c
+   M /trunk/epan/dissectors/packet-fddi.c
+   M /trunk/epan/dissectors/packet-frame.c
+   M /trunk/epan/dissectors/packet-gsm_a.c
+   M /trunk/epan/dissectors/packet-gsm_map.c
+   M /trunk/epan/dissectors/packet-gsm_ss.c
+   M /trunk/epan/dissectors/packet-h225.c
+   M /trunk/epan/dissectors/packet-http.c
+   M /trunk/epan/dissectors/packet-ip.c
+   M /trunk/epan/dissectors/packet-ipx.c
+   M /trunk/epan/dissectors/packet-ldap.c
+   M /trunk/epan/dissectors/packet-mtp3.c
+   M /trunk/epan/dissectors/packet-rpc.c
+   M /trunk/epan/dissectors/packet-rtp.c
+   M /trunk/epan/dissectors/packet-sctp.c
+   M /trunk/epan/dissectors/packet-sip.c
+   M /trunk/epan/dissectors/packet-smb-sidsnooping.c
+   M /trunk/epan/dissectors/packet-smb.c
+   M /trunk/epan/dissectors/packet-tcp.c
+   M /trunk/epan/dissectors/packet-teredo.c
+   M /trunk/epan/dissectors/packet-tr.c
+   M /trunk/epan/dissectors/packet-udp.c
+   M /trunk/epan/dissectors/packet-wsp.c
+   M /trunk/epan/epan.c
+   M /trunk/epan/plugins.c
+   A /trunk/epan/tap.c (from /trunk/tap.c:12124)
+   A /trunk/epan/tap.h (from /trunk/tap.h:12124)
+   M /trunk/file.c
    M /trunk/gtk/ansi_a_stat.c
    M /trunk/gtk/ansi_map_stat.c
-   M /trunk/gtk/capture_dlg.c
-   M /trunk/gtk/color_dlg.c
+   M /trunk/gtk/bootp_stat.c
+   M /trunk/gtk/conversations_eth.c
+   M /trunk/gtk/conversations_fc.c
+   M /trunk/gtk/conversations_fddi.c
+   M /trunk/gtk/conversations_ip.c
+   M /trunk/gtk/conversations_ipx.c
+   M /trunk/gtk/conversations_table.c
+   M /trunk/gtk/conversations_tcpip.c
+   M /trunk/gtk/conversations_tr.c
+   M /trunk/gtk/conversations_udpip.c
    M /trunk/gtk/dcerpc_stat.c
-   M /trunk/gtk/dfilter_expr_dlg.c
    M /trunk/gtk/fc_stat.c
-   M /trunk/gtk/file_dlg.c
-   A /trunk/gtk/filter_dlg.c (from /trunk/gtk/filter_prefs.c:11432)
-   A /trunk/gtk/filter_dlg.h (from /trunk/gtk/filter_prefs.h:11432)
-   D /trunk/gtk/filter_prefs.c
-   D /trunk/gtk/filter_prefs.h
-   M /trunk/gtk/find_dlg.c
    M /trunk/gtk/gsm_a_stat.c
    M /trunk/gtk/gsm_map_stat.c
+   M /trunk/gtk/gsm_map_summary.c
+   M /trunk/gtk/h225_counter.c
+   M /trunk/gtk/h225_ras_srt.c
+   M /trunk/gtk/hostlist_eth.c
+   M /trunk/gtk/hostlist_fc.c
+   M /trunk/gtk/hostlist_fddi.c
+   M /trunk/gtk/hostlist_ip.c
+   M /trunk/gtk/hostlist_ipx.c
+   M /trunk/gtk/hostlist_table.c
+   M /trunk/gtk/hostlist_tcpip.c
+   M /trunk/gtk/hostlist_tr.c
+   M /trunk/gtk/hostlist_udpip.c
+   M /trunk/gtk/http_stat.c
    M /trunk/gtk/io_stat.c
    M /trunk/gtk/isup_stat.c
    M /trunk/gtk/ldap_stat.c
    M /trunk/gtk/main.c
    M /trunk/gtk/menu.c
+   M /trunk/gtk/mgcp_stat.c
    M /trunk/gtk/mtp3_stat.c
+   M /trunk/gtk/mtp3_summary.c
+   M /trunk/gtk/rpc_progs.c
    M /trunk/gtk/rpc_stat.c
+   M /trunk/gtk/rtp_analysis.c
+   M /trunk/gtk/rtp_stream.c
+   M /trunk/gtk/sctp_stat.c
+   M /trunk/gtk/sip_stat.c
    M /trunk/gtk/smb_stat.c
-   M /trunk/gtk/tap_dfilter_dlg.c
-   M /trunk/gtk/toolbar.c
-
-renamed filter_prefs to filter_dlg, as the filter settings are (well, for a long time) no longer part of the preferences dialog.
-------------------------------------------------------------------------
-r11435 | gerald | 2004-07-19 16:18:40 -0500 (Mon, 19 Jul 2004) | 2 lines
-Changed paths:
-   M /trunk/Makefile.nmake
-   M /trunk/epan/Makefile.nmake
-   M /trunk/epan/dissectors/Makefile.nmake
-
-Fixes (and ugly hacks) for Windows compilation.
+   M /trunk/gtk/wsp_stat.c
+   M /trunk/plugins/mgcp/packet-mgcp.c
+   M /trunk/plugins/plugin_api.h
+   M /trunk/plugins/plugin_api_list.c
+   M /trunk/tap-ansi_astat.c
+   M /trunk/tap-bootpstat.c
+   M /trunk/tap-dcerpcstat.c
+   M /trunk/tap-gsm_astat.c
+   M /trunk/tap-h225counter.c
+   M /trunk/tap-h225rassrt.c
+   M /trunk/tap-httpstat.c
+   M /trunk/tap-iostat.c
+   M /trunk/tap-iousers.c
+   M /trunk/tap-mgcpstat.c
+   M /trunk/tap-protocolinfo.c
+   M /trunk/tap-protohierstat.c
+   M /trunk/tap-rpcprogs.c
+   M /trunk/tap-rpcstat.c
+   M /trunk/tap-sipstat.c
+   M /trunk/tap-smbsids.c
+   M /trunk/tap-smbstat.c
+   M /trunk/tap-wspstat.c
+   D /trunk/tap.c
+   D /trunk/tap.h
+   M /trunk/tethereal.c
 
-------------------------------------------------------------------------
-r11434 | ulfl | 2004-07-19 13:07:39 -0500 (Mon, 19 Jul 2004) | 1 line
-Changed paths:
-   M /trunk/docbook/ug-src/EUG_chapter_io.xml
+Move the tap infrastructure to the epan directory.
 
-Explain some of the File/Export dialog controls
 ------------------------------------------------------------------------
-r11433 | ulfl | 2004-07-19 11:59:49 -0500 (Mon, 19 Jul 2004) | 4 lines
+r12127 | guy | 2004-09-28 18:48:02 -0500 (Tue, 28 Sep 2004) | 2 lines
 Changed paths:
-   A /trunk/docbook
-   A /trunk/docbook/GFDPL_appendix.xml
-   A /trunk/docbook/Makefile
-   A /trunk/docbook/README.txt
-   A /trunk/docbook/catalog.xml
-   A /trunk/docbook/custom_layer_pdf.xsl
-   A /trunk/docbook/developer-guide.xml
-   A /trunk/docbook/dfilter2xml.pl
-   A /trunk/docbook/dg-src
-   A /trunk/docbook/dg-src/EDG_chapter_five.xml
-   A /trunk/docbook/dg-src/EDG_chapter_four.xml
-   A /trunk/docbook/dg-src/EDG_chapter_one.xml
-   A /trunk/docbook/dg-src/EDG_chapter_three.xml
-   A /trunk/docbook/dg-src/EDG_chapter_two.xml
-   A /trunk/docbook/dg-src/EDG_meta_info.xml
-   A /trunk/docbook/ethereal-doc.txt
-   A /trunk/docbook/examples
-   A /trunk/docbook/examples/test.cap
-   A /trunk/docbook/graphics
-   A /trunk/docbook/graphics/ethereal-3pane.png
-   A /trunk/docbook/graphics/ethereal-analyze-menu.png
-   A /trunk/docbook/graphics/ethereal-bytes-pane-popup-menu.png
-   A /trunk/docbook/graphics/ethereal-bytes-pane-tabs.png
-   A /trunk/docbook/graphics/ethereal-bytes-pane.png
-   A /trunk/docbook/graphics/ethereal-capture-info.png
-   A /trunk/docbook/graphics/ethereal-capture-menu.png
-   A /trunk/docbook/graphics/ethereal-capture-options.png
-   A /trunk/docbook/graphics/ethereal-capture-preferences.png
-   A /trunk/docbook/graphics/ethereal-choose-color-rule.png
-   A /trunk/docbook/graphics/ethereal-coloring-rules-dialog.png
-   A /trunk/docbook/graphics/ethereal-decode-as-show.png
-   A /trunk/docbook/graphics/ethereal-decode-as.png
-   A /trunk/docbook/graphics/ethereal-details-pane-popup-menu.png
-   A /trunk/docbook/graphics/ethereal-details-pane.png
-   A /trunk/docbook/graphics/ethereal-display-filter-tcp.png
-   A /trunk/docbook/graphics/ethereal-edit-color-rule-dialog.png
-   A /trunk/docbook/graphics/ethereal-edit-menu.png
-   A /trunk/docbook/graphics/ethereal-empty.png
-   A /trunk/docbook/graphics/ethereal-enabled-protocols.png
-   A /trunk/docbook/graphics/ethereal-error-file-exists.png
-   A /trunk/docbook/graphics/ethereal-error-open.png
-   A /trunk/docbook/graphics/ethereal-export-pdml.png
-   A /trunk/docbook/graphics/ethereal-export-plain.png
-   A /trunk/docbook/graphics/ethereal-export-ps.png
-   A /trunk/docbook/graphics/ethereal-export-psml.png
-   A /trunk/docbook/graphics/ethereal-export-selected.png
-   A /trunk/docbook/graphics/ethereal-file-menu.png
-   A /trunk/docbook/graphics/ethereal-filter-add-expression.png
-   A /trunk/docbook/graphics/ethereal-filter-toolbar.png
-   A /trunk/docbook/graphics/ethereal-filters-2.png
-   A /trunk/docbook/graphics/ethereal-filters.png
-   A /trunk/docbook/graphics/ethereal-find-packet.png
-   A /trunk/docbook/graphics/ethereal-follow-stream.png
-   A /trunk/docbook/graphics/ethereal-go-menu.png
-   A /trunk/docbook/graphics/ethereal-goto-packet.png
-   A /trunk/docbook/graphics/ethereal-gui-colors-preferences.png
-   A /trunk/docbook/graphics/ethereal-gui-columns-preferences.png
-   A /trunk/docbook/graphics/ethereal-gui-font-preferences.png
-   A /trunk/docbook/graphics/ethereal-gui-layout-preferences.png
-   A /trunk/docbook/graphics/ethereal-gui-preferences.png
-   A /trunk/docbook/graphics/ethereal-help-menu.png
-   A /trunk/docbook/graphics/ethereal-list-pane.png
-   A /trunk/docbook/graphics/ethereal-logo.png
-   A /trunk/docbook/graphics/ethereal-main-toolbar.png
-   A /trunk/docbook/graphics/ethereal-main.png
-   A /trunk/docbook/graphics/ethereal-menu.png
-   A /trunk/docbook/graphics/ethereal-merge.png
-   A /trunk/docbook/graphics/ethereal-nameresolution-preferences.png
-   A /trunk/docbook/graphics/ethereal-open.png
-   A /trunk/docbook/graphics/ethereal-packet-format.png
-   A /trunk/docbook/graphics/ethereal-packet-pane-popup-menu.png
-   A /trunk/docbook/graphics/ethereal-packet-range.png
-   A /trunk/docbook/graphics/ethereal-packet-selected.png
-   A /trunk/docbook/graphics/ethereal-packet-sep-win.png
-   A /trunk/docbook/graphics/ethereal-print.png
-   A /trunk/docbook/graphics/ethereal-printing-preferences.png
-   A /trunk/docbook/graphics/ethereal-save-as.png
-   A /trunk/docbook/graphics/ethereal-statistics-menu.png
-   A /trunk/docbook/graphics/ethereal-stats-conversations.png
-   A /trunk/docbook/graphics/ethereal-stats-endpoints.png
-   A /trunk/docbook/graphics/ethereal-stats-hierarchy.png
-   A /trunk/docbook/graphics/ethereal-stats-iographs.png
-   A /trunk/docbook/graphics/ethereal-stats-srt-dcerpc-filter.png
-   A /trunk/docbook/graphics/ethereal-stats-srt-dcerpc.png
-   A /trunk/docbook/graphics/ethereal-stats-summary.png
-   A /trunk/docbook/graphics/ethereal-statusbar-empty.png
-   A /trunk/docbook/graphics/ethereal-statusbar-loaded.png
-   A /trunk/docbook/graphics/ethereal-statusbar-selected.png
-   A /trunk/docbook/graphics/ethereal-time-reference.png
-   A /trunk/docbook/graphics/ethereal-view-menu.png
-   A /trunk/docbook/graphics/note.png
-   A /trunk/docbook/graphics/tip.png
-   A /trunk/docbook/graphics/toolbar
-   A /trunk/docbook/graphics/toolbar/capture_24.png
-   A /trunk/docbook/graphics/toolbar/cfilter_24.png
-   A /trunk/docbook/graphics/toolbar/dfilter_24.png
-   A /trunk/docbook/graphics/toolbar/stock_add_24.png
-   A /trunk/docbook/graphics/toolbar/stock_bottom_24.png
-   A /trunk/docbook/graphics/toolbar/stock_close_24.png
-   A /trunk/docbook/graphics/toolbar/stock_colorselector_24.png
-   A /trunk/docbook/graphics/toolbar/stock_help_24.png
-   A /trunk/docbook/graphics/toolbar/stock_jump_to_24.png
-   A /trunk/docbook/graphics/toolbar/stock_left_arrow_24.png
-   A /trunk/docbook/graphics/toolbar/stock_open_24.png
-   A /trunk/docbook/graphics/toolbar/stock_preferences_24.png
-   A /trunk/docbook/graphics/toolbar/stock_print_24.png
-   A /trunk/docbook/graphics/toolbar/stock_properties_24.png
-   A /trunk/docbook/graphics/toolbar/stock_refresh_24.png
-   A /trunk/docbook/graphics/toolbar/stock_right_arrow_24.png
-   A /trunk/docbook/graphics/toolbar/stock_save_24.png
-   A /trunk/docbook/graphics/toolbar/stock_save_as_24.png
-   A /trunk/docbook/graphics/toolbar/stock_search_24.png
-   A /trunk/docbook/graphics/toolbar/stock_stop_24.png
-   A /trunk/docbook/graphics/toolbar/stock_top_24.png
-   A /trunk/docbook/graphics/toolbar/stock_zoom_1_24.png
-   A /trunk/docbook/graphics/toolbar/stock_zoom_in_24.png
-   A /trunk/docbook/graphics/toolbar/stock_zoom_out_24.png
-   A /trunk/docbook/graphics/warning.png
-   A /trunk/docbook/protocols.xml
-   A /trunk/docbook/ug-src
-   A /trunk/docbook/ug-src/EUG_app_files.xml
-   A /trunk/docbook/ug-src/EUG_app_howitworks.xml
-   A /trunk/docbook/ug-src/EUG_app_messages.xml
-   A /trunk/docbook/ug-src/EUG_app_protocols.xml
-   A /trunk/docbook/ug-src/EUG_app_tools.xml
-   A /trunk/docbook/ug-src/EUG_chapter_advanced.xml
-   A /trunk/docbook/ug-src/EUG_chapter_build_install.xml
-   A /trunk/docbook/ug-src/EUG_chapter_capture.xml
-   A /trunk/docbook/ug-src/EUG_chapter_customize.xml
-   A /trunk/docbook/ug-src/EUG_chapter_introduction.xml
-   A /trunk/docbook/ug-src/EUG_chapter_io.xml
-   A /trunk/docbook/ug-src/EUG_chapter_statistics.xml
-   A /trunk/docbook/ug-src/EUG_chapter_troubleshoot.xml
-   A /trunk/docbook/ug-src/EUG_chapter_use.xml
-   A /trunk/docbook/ug-src/EUG_chapter_work.xml
-   A /trunk/docbook/ug-src/EUG_meta_info.xml
-   A /trunk/docbook/ug-src/EUG_preface.xml
-   A /trunk/docbook/user-guide.xml
-
-The first draft of an updated "Ethereal User's Guide" redesigned and updated to the current released Ethereal version 0.10.5.
-As generation of output files is a bit tricky, please have a look at the Readme.txt file for instructions.
-
-Please send comments and improvements.
-------------------------------------------------------------------------
-r11432 | sahlberg | 2004-07-19 04:03:28 -0500 (Mon, 19 Jul 2004) | 10 lines
-Changed paths:
-   A /trunk/asn1/cms
-   A /trunk/asn1/cms/CryptographicMessageSyntax.asn
-   A /trunk/asn1/cms/cms.cnf
-   A /trunk/asn1/cms/packet-cms-template.c
-   A /trunk/asn1/cms/packet-cms-template.h
-
-work in progress
-New protocol CryptogrtaphicMessageSyntax
-As the X.509xx protocols this protocol is not yet linked with ethereal but a work in progress.
-
-Within the next few days the changes needed to packet-kerberos and packet-ber will be added to implement an embryonic pkinit implementation inside packet-kerberos which will in turn call cms and the x509 dissectors.
-
-The dissectors are still very incomplete but already relatively useful.
-
-
-
-------------------------------------------------------------------------
-r11431 | sahlberg | 2004-07-19 03:59:50 -0500 (Mon, 19 Jul 2004) | 5 lines
-Changed paths:
-   A /trunk/asn1/x509sat
-   A /trunk/asn1/x509sat/SelectedAttributeTypes.asn
-   A /trunk/asn1/x509sat/packet-x509sat-template.c
-   A /trunk/asn1/x509sat/packet-x509sat-template.h
-   A /trunk/asn1/x509sat/x509sat.cnf
-
-Work in progress
-New protocol X.509 Selected Attribute Types
-This new protocol is not linked with ethereal yet
-
-
-------------------------------------------------------------------------
-r11430 | sahlberg | 2004-07-19 03:57:29 -0500 (Mon, 19 Jul 2004) | 7 lines
-Changed paths:
-   A /trunk/asn1/x509if
-   A /trunk/asn1/x509if/InformationFramework.asn
-   A /trunk/asn1/x509if/packet-x509if-template.c
-   A /trunk/asn1/x509if/packet-x509if-template.h
-   A /trunk/asn1/x509if/x509if.cnf
-   A /trunk/asn1/x509if/x509if_exp.cnf
-
-Work in progress
-New protocol X.509 Information framework
-
-this new protocol is not yet linked with ethereal and needs extra massage before it can be used.
-
-
-
-------------------------------------------------------------------------
-r11429 | sahlberg | 2004-07-19 03:54:44 -0500 (Mon, 19 Jul 2004) | 7 lines
-Changed paths:
-   A /trunk/asn1/x509ce
-   A /trunk/asn1/x509ce/CertificateExtensions.asn
-   A /trunk/asn1/x509ce/packet-x509ce-template.c
-   A /trunk/asn1/x509ce/packet-x509ce-template.h
-   A /trunk/asn1/x509ce/x509ce.cnf
-
-Work in progress
-New protocol X.509 Certificate Extensions
-This new code provides required functionality to the x509af dfissector
-
-it is not linked with ethereal yet and needs extra massage bewfore invoked.
-
-
-------------------------------------------------------------------------
-r11428 | sahlberg | 2004-07-19 03:51:57 -0500 (Mon, 19 Jul 2004) | 7 lines
-Changed paths:
-   A /trunk/asn1/x509af
-   A /trunk/asn1/x509af/AuthenticationFramework.asn
-   A /trunk/asn1/x509af/packet-x509af-template.c
-   A /trunk/asn1/x509af/packet-x509af-template.h
-   A /trunk/asn1/x509af/x509af.cnf
-   A /trunk/asn1/x509af/x509af_exp.cnf
-
-Work in progress
-
-checkin of new protocol X.509 Authentication Framework
-This new protocol is not linked yet to ethereal or yet used since it needs other support protocols and massaging before it can be used.
-
+   M /trunk/Makefile.common
+   M /trunk/epan/Makefile.common
+   M /trunk/epan/dissectors/packet-fr.c
+   M /trunk/epan/dissectors/packet-hpext.c
+   M /trunk/epan/dissectors/packet-lapb.c
+   M /trunk/epan/dissectors/packet-lapd.c
+   M /trunk/epan/dissectors/packet-llc.c
+   M /trunk/epan/dissectors/packet-sdlc.c
+   M /trunk/epan/dissectors/packet-v120.c
+   M /trunk/epan/plugins.c
+   A /trunk/epan/xdlc.c (from /trunk/xdlc.c:12124)
+   A /trunk/epan/xdlc.h (from /trunk/xdlc.h:12124)
+   M /trunk/plugins/plugin_api.h
+   M /trunk/plugins/plugin_api_list.c
+   D /trunk/xdlc.c
+   D /trunk/xdlc.h
 
+Move the xDLC helper routines into epan.
 
 ------------------------------------------------------------------------
-r11427 | guy | 2004-07-18 21:27:17 -0500 (Sun, 18 Jul 2004) | 6 lines
+r12126 | guy | 2004-09-28 18:25:48 -0500 (Tue, 28 Sep 2004) | 6 lines
 Changed paths:
-   A /trunk/epan/address.h
-   M /trunk/epan/packet_info.h
-   M /trunk/gtk/capture_dlg.c
-   M /trunk/gtk/capture_if_dlg.c
-   M /trunk/pcap-util.c
-   M /trunk/pcap-util.h
+   M /trunk/gtk/cfilter_combo_utils.c
+   M /trunk/gtk/cfilter_combo_utils.h
 
-Pull the address (and port and circuit type) stuff out of
-"epan/packet_info.h" and put it in "epan/address.h".
-
-Use the AT_ values from "epan/address.h" for address types in the
-interface lists rather than having our own FAM_ enums.
-
-------------------------------------------------------------------------
-r11426 | guy | 2004-07-18 21:07:07 -0500 (Sun, 18 Jul 2004) | 7 lines
-Changed paths:
-   M /trunk/acinclude.m4
+Normalize line endings and set svn:eol-style to native.
 
-When checking whether we can get "sprint_realloc_objid()" from the SNMP
-library, don't forget to link with the SNMP library along with all the
-other libraries....
+Set svn:keywords to Id to expand RCS IDs.
 
-Restore the setting of LIBS after doing all the tests, as is done in
-other macros.
+Include <string.h> to declare "strcmp()" and "strlen()".
 
 ------------------------------------------------------------------------
-r11425 | guy | 2004-07-18 20:06:06 -0500 (Sun, 18 Jul 2004) | 4 lines
+r12125 | guy | 2004-09-28 18:20:14 -0500 (Tue, 28 Sep 2004) | 2 lines
 Changed paths:
-   M /trunk/pcap-util.c
+   M /trunk/Makefile.common
+   M /trunk/epan/Makefile.common
+   A /trunk/epan/sha1.c (from /trunk/sha1.c:12124)
+   A /trunk/epan/sha1.h (from /trunk/sha1.h:12124)
+   D /trunk/sha1.c
+   D /trunk/sha1.h
 
-Revert the IPv6 code, as we did with the IPv4 code, and use INET6 as an
-indicator of whether we have enough IPv6 support to handle IPv6
-addresses.
+Move the SHA-1 code and header into epan, and give them RCS IDs.
 
 ------------------------------------------------------------------------
-r11424 | jmayer | 2004-07-18 18:50:22 -0500 (Sun, 18 Jul 2004) | 1 line
+r12124 | ulfl | 2004-09-28 13:34:00 -0500 (Tue, 28 Sep 2004) | 1 line
 Changed paths:
-   M /trunk
+   M /trunk/docbook/edg_src/EDG_chapter_sources.xml
 
-Add depcomp to svn:ignore
+add a warning, that patch and sources files must have the same line endings (CR/NL)
 ------------------------------------------------------------------------
-r11423 | ulfl | 2004-07-18 18:46:07 -0500 (Sun, 18 Jul 2004) | 1 line
+r12123 | ulfl | 2004-09-28 13:04:15 -0500 (Tue, 28 Sep 2004) | 1 line
 Changed paths:
-   M /trunk/Makefile.nmake
-   M /trunk/epan/Makefile.nmake
-   M /trunk/epan/dissectors/Makefile.nmake
+   M /trunk/gtk/Makefile.common
+   M /trunk/gtk/capture_dlg.c
+   A /trunk/gtk/cfilter_combo_utils.c
+   A /trunk/gtk/cfilter_combo_utils.h
+   M /trunk/gtk/recent.c
 
-Fix the win32 nmake generation for now (it will compile/link/run again). This will need more cleanup if the movements of the dissector sources are finished. Hopefully this doesn't broke the unix build.
+from Thomas Palmer: add a combobox for the recently used capture filter strings
 ------------------------------------------------------------------------
-r11422 | jmayer | 2004-07-18 18:44:34 -0500 (Sun, 18 Jul 2004) | 6 lines
+r12122 | guy | 2004-09-28 12:57:56 -0500 (Tue, 28 Sep 2004) | 8 lines
 Changed paths:
-   D /trunk/.cvsignore
-   D /trunk/doc/.cvsignore
-   M /trunk/epan
-   D /trunk/epan/.cvsignore
-   D /trunk/epan/dfilter/.cvsignore
-   M /trunk/epan/dissectors
-   D /trunk/epan/dissectors/.cvsignore
-   D /trunk/epan/ftypes/.cvsignore
-   D /trunk/gtk/.cvsignore
-   D /trunk/help/.cvsignore
-   D /trunk/image/.cvsignore
-   D /trunk/packaging/.cvsignore
-   D /trunk/packaging/nsis/.cvsignore
-   D /trunk/packaging/rpm/.cvsignore
-   D /trunk/packaging/rpm/SPECS/.cvsignore
-   D /trunk/packaging/svr4/.cvsignore
-   D /trunk/plugins/.cvsignore
-   D /trunk/plugins/acn/.cvsignore
-   D /trunk/plugins/artnet/.cvsignore
-   D /trunk/plugins/asn1/.cvsignore
-   D /trunk/plugins/ciscosm/.cvsignore
-   D /trunk/plugins/docsis/.cvsignore
-   D /trunk/plugins/enttec/.cvsignore
-   D /trunk/plugins/giop/.cvsignore
-   D /trunk/plugins/gryphon/.cvsignore
-   D /trunk/plugins/irda/.cvsignore
-   D /trunk/plugins/lwres/.cvsignore
-   D /trunk/plugins/megaco/.cvsignore
-   D /trunk/plugins/mgcp/.cvsignore
-   D /trunk/plugins/pcli/.cvsignore
-   D /trunk/plugins/rdm/.cvsignore
-   D /trunk/plugins/rlm/.cvsignore
-   D /trunk/plugins/rtnet/.cvsignore
-   D /trunk/plugins/rudp/.cvsignore
-   D /trunk/plugins/v5ua/.cvsignore
-   D /trunk/tools/.cvsignore
-   D /trunk/tools/lemon/.cvsignore
-   D /trunk/wiretap/.cvsignore
-
- .cvsignore is dead
-it has been replaced by
-svn proplist -v <dir/file>
-and
-svn propedit <dir/file>
+   M /trunk/AUTHORS
+   M /trunk/epan/dissectors/packet-ospf.c
 
-------------------------------------------------------------------------
-r11421 | jmayer | 2004-07-18 18:39:15 -0500 (Sun, 18 Jul 2004) | 5 lines
-Changed paths:
-   M /trunk/packaging/rpm/SPECS/ethereal.spec.in
+From Carlos Pignataro:
 
-Beginnings to make rpm building possible again.
-Not yet finished:
-- make dist breaks after moving of dissectors
-- the real packaging process may not be working yet
+	o Add link type string for MPLS Link Type in MPLS Link sub-TLV
+	o Decode MPLS Link Color/Resource sub-TLV
+	o Add bps for bandwidths in Max BW and Max Reservable BW sub-TLVs
+	o Display Type, Length Value for Unknown Link sub-TLV
+	o Allow display filter on Link Type and Link Color
 
 ------------------------------------------------------------------------
-r11420 | guy | 2004-07-18 18:07:04 -0500 (Sun, 18 Jul 2004) | 6 lines
+r12121 | guy | 2004-09-28 12:52:36 -0500 (Tue, 28 Sep 2004) | 10 lines
 Changed paths:
-   M /trunk/pcap-util.c
+   M /trunk/AUTHORS
+   M /trunk/epan/dissectors/packet-diameter-defs.h
+   M /trunk/epan/dissectors/packet-diameter.c
 
-"struct sockaddr_in"s and "struct sockaddr_in6"s are sufficient to serve
-as transport endpoint addresses, so the "sa_data" field includes port
-numbers.  Revert the IPv4 code; we'll fix the IPv6 code later (we'll
-have to check whether "struct sockaddr_in6" is defined, and not support
-IPv6 addresses if it's not, even if AF_INET6 is defined).
-
-------------------------------------------------------------------------
-r11419 | jmayer | 2004-07-18 17:51:50 -0500 (Sun, 18 Jul 2004) | 3 lines
-Changed paths:
-   M /trunk/.cvsignore
-   M /trunk/doc/.cvsignore
-   M /trunk/epan/.cvsignore
-   M /trunk/epan/dfilter/.cvsignore
-   A /trunk/epan/dissectors/.cvsignore
-   M /trunk/epan/ftypes/.cvsignore
-   M /trunk/gtk/.cvsignore
-   M /trunk/help/.cvsignore
-   M /trunk/image/.cvsignore
-   M /trunk/packaging/.cvsignore
-   M /trunk/packaging/nsis/.cvsignore
-   M /trunk/packaging/rpm/.cvsignore
-   M /trunk/packaging/rpm/SPECS/.cvsignore
-   M /trunk/packaging/svr4/.cvsignore
-   M /trunk/plugins/.cvsignore
-   M /trunk/plugins/acn/.cvsignore
-   M /trunk/plugins/artnet/.cvsignore
-   M /trunk/plugins/asn1/.cvsignore
-   M /trunk/plugins/ciscosm/.cvsignore
-   M /trunk/plugins/docsis/.cvsignore
-   M /trunk/plugins/enttec/.cvsignore
-   M /trunk/plugins/giop/.cvsignore
-   M /trunk/plugins/gryphon/.cvsignore
-   M /trunk/plugins/irda/.cvsignore
-   M /trunk/plugins/lwres/.cvsignore
-   M /trunk/plugins/megaco/.cvsignore
-   M /trunk/plugins/mgcp/.cvsignore
-   M /trunk/plugins/pcli/.cvsignore
-   M /trunk/plugins/rdm/.cvsignore
-   M /trunk/plugins/rlm/.cvsignore
-   M /trunk/plugins/rtnet/.cvsignore
-   M /trunk/plugins/rudp/.cvsignore
-   M /trunk/plugins/v5ua/.cvsignore
-   M /trunk/tools/.cvsignore
-   M /trunk/tools/lemon/.cvsignore
-   M /trunk/wiretap/.cvsignore
+From Olivier Jacques:
 
-Add epan/dissectors/.cvsignore
-Add tags and TAGS to all .cvsignore files
+	- Add a configuration option for Diameter version. Currently,
+	  the choice is between everything before draft-v16 and RFC3588.
+	- Fix diameter-ip-address parsing depending on the Diameter
+	  version (and showing decoding errors accordingly).
+	- Change registration of Diameter from TCP and SCTP port 1812 to
+	  TCP and SCTP port 3868 (this is according to RFC3588, section
+	  11.5).
 
 ------------------------------------------------------------------------
-r11418 | jmayer | 2004-07-18 17:36:55 -0500 (Sun, 18 Jul 2004) | 3 lines
+r12120 | guy | 2004-09-28 05:28:01 -0500 (Tue, 28 Sep 2004) | 2 lines
 Changed paths:
-   M /trunk/doc/README.developer
-
-SNPRINTF isn't used any more - remove from sample dissector
-and coding guidelines.
+   M /trunk/epan/dissectors/packet-dns.c
 
-------------------------------------------------------------------------
-r11417 | ulfl | 2004-07-18 16:02:19 -0500 (Sun, 18 Jul 2004) | 1 line
-Changed paths:
-   M /trunk/epan/dissectors/Makefile.nmake
+From David Fort: ipseckey DNS RR support.
 
-some more changes for the win32 nmake process
 ------------------------------------------------------------------------
-r11416 | jmayer | 2004-07-18 15:33:54 -0500 (Sun, 18 Jul 2004) | 5 lines
+r12119 | guy | 2004-09-27 23:47:10 -0500 (Mon, 27 Sep 2004) | 5 lines
 Changed paths:
    M /trunk/acinclude.m4
-   M /trunk/configure.in
 
-- Require --with-ssl=... to be explicitly set to work
-  around licensing problems
-- Cause krb5 and snmp to fail, if ssl is required but
-  not configured.
+If, when checking whether the Kerberos library is Heimdal or not, we
+find it's not, always report "no", even if we're going to give up
+because the user specified --with-krb5, so the "sorry, you don't have
+Heimdal" message shows up on a line of its own.
 
 ------------------------------------------------------------------------
-r11415 | ulfl | 2004-07-18 15:21:20 -0500 (Sun, 18 Jul 2004) | 1 line
+r12118 | guy | 2004-09-27 23:41:57 -0500 (Mon, 27 Sep 2004) | 12 lines
 Changed paths:
-   M /trunk/Makefile.nmake
-   M /trunk/epan/Makefile.nmake
-   M /trunk/epan/dissectors/Makefile.nmake
+   M /trunk/acinclude.m4
+
+If the user specified --with-krb5 but we don't have a usable Kerberos
+library, don't disable dissection and drive on, report an error and
+stop; --with-krb5 means "build this with Kerberos", not "build this with
+Kerberos if you can" (no -krb5 option at all means "build this with
+Kerberos if you can").
+
+If they *didn't* specify --with-krb5 and we don't have a usable Kerberos
+library, set want_krb5 to "no", so that at the end of the configure
+script we don't say we're building with the Kerberos library (otherwise,
+want_krb5 is "ifpresent", but the stuff to print the configuration
+options treats anything other than "no" as meaning "yes").
 
-first attempt to make Win32 generation (nmake) ready for the dissector movings (but still incomplete)
 ------------------------------------------------------------------------
-r11414 | guy | 2004-07-18 14:54:07 -0500 (Sun, 18 Jul 2004) | 4 lines
+r12117 | guy | 2004-09-27 19:06:32 -0500 (Mon, 27 Sep 2004) | 2 lines
 Changed paths:
-   M /trunk/gtk/recent.c
+   M /trunk/Makefile.common
+   D /trunk/adler32.c
+   D /trunk/adler32.h
+   D /trunk/crc16.c
+   D /trunk/crc16.h
+   D /trunk/crc32.c
+   D /trunk/crc32.h
+   M /trunk/epan/Makefile.common
+   A /trunk/epan/adler32.c (from /trunk/adler32.c:12112)
+   A /trunk/epan/adler32.h (from /trunk/adler32.h:12112)
+   A /trunk/epan/crc16.c (from /trunk/crc16.c:12112)
+   A /trunk/epan/crc16.h (from /trunk/crc16.h:12112)
+   A /trunk/epan/crc32.c (from /trunk/crc32.c:12112)
+   A /trunk/epan/crc32.h (from /trunk/crc32.h:12112)
+   M /trunk/epan/dissectors/packet-eth.c
+   M /trunk/epan/dissectors/packet-gre.c
+   M /trunk/epan/dissectors/packet-icmpv6.c
+   M /trunk/epan/dissectors/packet-ieee80211.c
+   M /trunk/epan/dissectors/packet-igmp.c
+   M /trunk/epan/dissectors/packet-ip.c
+   M /trunk/epan/dissectors/packet-ipvs-syncd.c
+   M /trunk/epan/dissectors/packet-lmp.c
+   M /trunk/epan/dissectors/packet-ospf.c
+   M /trunk/epan/dissectors/packet-pgm.c
+   M /trunk/epan/dissectors/packet-pim.c
+   M /trunk/epan/dissectors/packet-ppp.c
+   M /trunk/epan/dissectors/packet-rsvp.c
+   M /trunk/epan/dissectors/packet-tcp.c
+   M /trunk/epan/dissectors/packet-udp.c
+   M /trunk/epan/dissectors/packet-vj.c
+   M /trunk/epan/dissectors/packet-vrrp.c
+   A /trunk/epan/in_cksum.c (from /trunk/in_cksum.c:12112)
+   A /trunk/epan/in_cksum.h (from /trunk/in_cksum.h:12112)
+   M /trunk/epan/plugins.c
+   D /trunk/in_cksum.c
+   D /trunk/in_cksum.h
+   M /trunk/plugins/irda/packet-sir.c
+   M /trunk/plugins/plugin_api.h
+   M /trunk/plugins/plugin_api_list.c
 
-If the pane separator positions are 0 (e.g., because this is GTK+
-1.2[.x] and you can't get the positions), don't write them out, as
-they'll get errors when they're read back in.
+Move various checksum routines and headers to epan.
 
 ------------------------------------------------------------------------
-r11413 | guy | 2004-07-18 14:44:41 -0500 (Sun, 18 Jul 2004) | 5 lines
+r12116 | guy | 2004-09-27 18:29:22 -0500 (Mon, 27 Sep 2004) | 5 lines
 Changed paths:
-   M /trunk/pcap-util.c
-
-Just because AF_INET6 is defined, that doesn't mean "struct
-sockaddr_in6" is defined - the former, but not the latter, is defined in
-FreeBSD 3.4.  Just copy the appropriate number of bytes from the
-"sa_data" field of a "struct sockaddr".
-
-------------------------------------------------------------------------
-r11412 | guy | 2004-07-18 13:59:09 -0500 (Sun, 18 Jul 2004) | 2 lines
-Changed paths:
-   M /trunk/epan/dissectors/Makefile.am
-
-Define CLEANFILES only once.
-
-------------------------------------------------------------------------
-r11411 | guy | 2004-07-18 13:47:44 -0500 (Sun, 18 Jul 2004) | 2 lines
-Changed paths:
-   M /trunk/gtk/capture_dlg.c
-   M /trunk/gtk/capture_if_dlg.c
-   M /trunk/pcap-util-unix.c
-   M /trunk/pcap-util.c
-   M /trunk/pcap-util.h
+   M /trunk/Makefile.common
+   D /trunk/crypt-des.c
+   D /trunk/crypt-des.h
+   D /trunk/crypt-md4.c
+   D /trunk/crypt-md4.h
+   D /trunk/crypt-md5.c
+   D /trunk/crypt-md5.h
+   D /trunk/crypt-rc4.c
+   D /trunk/crypt-rc4.h
+   M /trunk/epan/Makefile.common
+   A /trunk/epan/crypt-des.c (from /trunk/crypt-des.c:12112)
+   A /trunk/epan/crypt-des.h (from /trunk/crypt-des.h:12112)
+   A /trunk/epan/crypt-md4.c (from /trunk/crypt-md4.c:12112)
+   A /trunk/epan/crypt-md4.h (from /trunk/crypt-md4.h:12112)
+   A /trunk/epan/crypt-md5.c (from /trunk/crypt-md5.c:12112)
+   A /trunk/epan/crypt-md5.h (from /trunk/crypt-md5.h:12112)
+   A /trunk/epan/crypt-rc4.c (from /trunk/crypt-rc4.c:12112)
+   A /trunk/epan/crypt-rc4.h (from /trunk/crypt-rc4.h:12112)
+   M /trunk/epan/dissectors/packet-dcerpc-samr.c
+   M /trunk/epan/dissectors/packet-ntlmssp.c
+   M /trunk/epan/dissectors/packet-radius.c
+   M /trunk/epan/dissectors/packet-tacacs.c
 
-Add support for IPv6 addresses for interfaces.
+Move the DES, MD4, MD5, and RC4 source files and headers into epan, and
+make the source files all include the corresponding header files (so
+that the declarations in the headers have to match the definitions in
+the source files in order for compilation to succeed).
 
 ------------------------------------------------------------------------
-r11410 | gram | 2004-07-18 13:06:47 -0500 (Sun, 18 Jul 2004) | 8 lines
+r12115 | guy | 2004-09-27 17:55:15 -0500 (Mon, 27 Sep 2004) | 2 lines
 Changed paths:
    M /trunk/Makefile.common
-   M /trunk/Makefile.nmake
    M /trunk/capture.c
-   M /trunk/configure.in
-   M /trunk/epan/Makefile.am
+   M /trunk/capture_combo_utils.c
+   M /trunk/column.c
+   M /trunk/dftest.c
    M /trunk/epan/Makefile.common
-   M /trunk/epan/Makefile.nmake
-   A /trunk/epan/dissectors
-   A /trunk/epan/dissectors/Makefile.am
-   A /trunk/epan/dissectors/Makefile.common
-   A /trunk/epan/dissectors/Makefile.nmake
-   A /trunk/epan/dissectors/make-reg-dotc (from /trunk/make-reg-dotc:11400)
-   A /trunk/epan/dissectors/make-reg-dotc.py (from /trunk/make-reg-dotc.py:11400)
-   A /trunk/epan/dissectors/ncp2222.py (from /trunk/ncp2222.py:11400)
-   A /trunk/epan/dissectors/packet-3g-a11.c (from /trunk/packet-3g-a11.c:11400)
-   A /trunk/epan/dissectors/packet-aarp.c (from /trunk/packet-aarp.c:11400)
-   A /trunk/epan/dissectors/packet-acap.c (from /trunk/packet-acap.c:11400)
-   A /trunk/epan/dissectors/packet-acse.c (from /trunk/packet-acse.c:11400)
-   A /trunk/epan/dissectors/packet-acse.h (from /trunk/packet-acse.h:11400)
-   A /trunk/epan/dissectors/packet-afp.c (from /trunk/packet-afp.c:11400)
-   A /trunk/epan/dissectors/packet-afp.h (from /trunk/packet-afp.h:11400)
-   A /trunk/epan/dissectors/packet-afs-defs.h (from /trunk/packet-afs-defs.h:11400)
-   A /trunk/epan/dissectors/packet-afs-macros.h (from /trunk/packet-afs-macros.h:11400)
-   A /trunk/epan/dissectors/packet-afs-register-info.h (from /trunk/packet-afs-register-info.h:11400)
-   A /trunk/epan/dissectors/packet-afs.c (from /trunk/packet-afs.c:11400)
-   A /trunk/epan/dissectors/packet-afs.h (from /trunk/packet-afs.h:11400)
-   A /trunk/epan/dissectors/packet-aim-admin.c (from /trunk/packet-aim-admin.c:11400)
-   A /trunk/epan/dissectors/packet-aim-adverts.c (from /trunk/packet-aim-adverts.c:11400)
-   A /trunk/epan/dissectors/packet-aim-bos.c (from /trunk/packet-aim-bos.c:11400)
-   A /trunk/epan/dissectors/packet-aim-buddylist.c (from /trunk/packet-aim-buddylist.c:11400)
-   A /trunk/epan/dissectors/packet-aim-chat.c (from /trunk/packet-aim-chat.c:11400)
-   A /trunk/epan/dissectors/packet-aim-chatnav.c (from /trunk/packet-aim-chatnav.c:11400)
-   A /trunk/epan/dissectors/packet-aim-directory.c (from /trunk/packet-aim-directory.c:11400)
-   A /trunk/epan/dissectors/packet-aim-generic.c (from /trunk/packet-aim-generic.c:11400)
-   A /trunk/epan/dissectors/packet-aim-icq.c (from /trunk/packet-aim-icq.c:11400)
-   A /trunk/epan/dissectors/packet-aim-invitation.c (from /trunk/packet-aim-invitation.c:11400)
-   A /trunk/epan/dissectors/packet-aim-location.c (from /trunk/packet-aim-location.c:11400)
-   A /trunk/epan/dissectors/packet-aim-messaging.c (from /trunk/packet-aim-messaging.c:11400)
-   A /trunk/epan/dissectors/packet-aim-oft.c (from /trunk/packet-aim-oft.c:11400)
-   A /trunk/epan/dissectors/packet-aim-popup.c (from /trunk/packet-aim-popup.c:11400)
-   A /trunk/epan/dissectors/packet-aim-signon.c (from /trunk/packet-aim-signon.c:11400)
-   A /trunk/epan/dissectors/packet-aim-ssi.c (from /trunk/packet-aim-ssi.c:11400)
-   A /trunk/epan/dissectors/packet-aim-stats.c (from /trunk/packet-aim-stats.c:11400)
-   A /trunk/epan/dissectors/packet-aim-translate.c (from /trunk/packet-aim-translate.c:11400)
-   A /trunk/epan/dissectors/packet-aim-userlookup.c (from /trunk/packet-aim-userlookup.c:11400)
-   A /trunk/epan/dissectors/packet-aim.c (from /trunk/packet-aim.c:11400)
-   A /trunk/epan/dissectors/packet-aim.h (from /trunk/packet-aim.h:11400)
-   A /trunk/epan/dissectors/packet-ajp13.c (from /trunk/packet-ajp13.c:11400)
-   A /trunk/epan/dissectors/packet-alcap.c (from /trunk/packet-alcap.c:11400)
-   A /trunk/epan/dissectors/packet-ans.c (from /trunk/packet-ans.c:11400)
-   A /trunk/epan/dissectors/packet-ansi_637.c (from /trunk/packet-ansi_637.c:11400)
-   A /trunk/epan/dissectors/packet-ansi_683.c (from /trunk/packet-ansi_683.c:11400)
-   A /trunk/epan/dissectors/packet-ansi_801.c (from /trunk/packet-ansi_801.c:11400)
-   A /trunk/epan/dissectors/packet-ansi_a.c (from /trunk/packet-ansi_a.c:11400)
-   A /trunk/epan/dissectors/packet-ansi_a.h (from /trunk/packet-ansi_a.h:11400)
-   A /trunk/epan/dissectors/packet-ansi_map.c (from /trunk/packet-ansi_map.c:11400)
-   A /trunk/epan/dissectors/packet-ansi_map.h (from /trunk/packet-ansi_map.h:11400)
-   A /trunk/epan/dissectors/packet-aodv.c (from /trunk/packet-aodv.c:11400)
-   A /trunk/epan/dissectors/packet-ap1394.c (from /trunk/packet-ap1394.c:11400)
-   A /trunk/epan/dissectors/packet-ap1394.h (from /trunk/packet-ap1394.h:11400)
-   A /trunk/epan/dissectors/packet-arcnet.c (from /trunk/packet-arcnet.c:11400)
-   A /trunk/epan/dissectors/packet-arcnet.h (from /trunk/packet-arcnet.h:11400)
-   A /trunk/epan/dissectors/packet-arp.c (from /trunk/packet-arp.c:11400)
-   A /trunk/epan/dissectors/packet-arp.h (from /trunk/packet-arp.h:11400)
-   A /trunk/epan/dissectors/packet-asap.c (from /trunk/packet-asap.c:11400)
-   A /trunk/epan/dissectors/packet-ascend.c (from /trunk/packet-ascend.c:11400)
-   A /trunk/epan/dissectors/packet-asf.c (from /trunk/packet-asf.c:11400)
-   A /trunk/epan/dissectors/packet-atalk.c (from /trunk/packet-atalk.c:11400)
-   A /trunk/epan/dissectors/packet-atalk.h (from /trunk/packet-atalk.h:11400)
-   A /trunk/epan/dissectors/packet-atm.c (from /trunk/packet-atm.c:11400)
-   A /trunk/epan/dissectors/packet-atm.h (from /trunk/packet-atm.h:11400)
-   A /trunk/epan/dissectors/packet-auto_rp.c (from /trunk/packet-auto_rp.c:11400)
-   A /trunk/epan/dissectors/packet-bacapp.c (from /trunk/packet-bacapp.c:11400)
-   A /trunk/epan/dissectors/packet-bacnet.c (from /trunk/packet-bacnet.c:11400)
-   A /trunk/epan/dissectors/packet-beep.c (from /trunk/packet-beep.c:11400)
-   A /trunk/epan/dissectors/packet-ber.c (from /trunk/packet-ber.c:11400)
-   A /trunk/epan/dissectors/packet-ber.h (from /trunk/packet-ber.h:11400)
-   A /trunk/epan/dissectors/packet-bfd.c (from /trunk/packet-bfd.c:11400)
-   A /trunk/epan/dissectors/packet-bgp.c (from /trunk/packet-bgp.c:11400)
-   A /trunk/epan/dissectors/packet-bgp.h (from /trunk/packet-bgp.h:11400)
-   A /trunk/epan/dissectors/packet-bofl.c (from /trunk/packet-bofl.c:11400)
-   A /trunk/epan/dissectors/packet-bootp.c (from /trunk/packet-bootp.c:11400)
-   A /trunk/epan/dissectors/packet-bootparams.c (from /trunk/packet-bootparams.c:11400)
-   A /trunk/epan/dissectors/packet-bootparams.h (from /trunk/packet-bootparams.h:11400)
-   A /trunk/epan/dissectors/packet-bpdu.c (from /trunk/packet-bpdu.c:11400)
-   A /trunk/epan/dissectors/packet-brdwlk.c (from /trunk/packet-brdwlk.c:11400)
-   A /trunk/epan/dissectors/packet-bssap.c (from /trunk/packet-bssap.c:11400)
-   A /trunk/epan/dissectors/packet-bssap.h (from /trunk/packet-bssap.h:11400)
-   A /trunk/epan/dissectors/packet-bssgp.c (from /trunk/packet-bssgp.c:11400)
-   A /trunk/epan/dissectors/packet-bvlc.c (from /trunk/packet-bvlc.c:11400)
-   A /trunk/epan/dissectors/packet-cast.c (from /trunk/packet-cast.c:11400)
-   A /trunk/epan/dissectors/packet-ccsds.c (from /trunk/packet-ccsds.c:11400)
-   A /trunk/epan/dissectors/packet-cdp.c (from /trunk/packet-cdp.c:11400)
-   A /trunk/epan/dissectors/packet-cgmp.c (from /trunk/packet-cgmp.c:11400)
-   A /trunk/epan/dissectors/packet-chdlc.c (from /trunk/packet-chdlc.c:11400)
-   A /trunk/epan/dissectors/packet-chdlc.h (from /trunk/packet-chdlc.h:11400)
-   A /trunk/epan/dissectors/packet-cisco-oui.c (from /trunk/packet-cisco-oui.c:11400)
-   A /trunk/epan/dissectors/packet-clearcase.c (from /trunk/packet-clearcase.c:11400)
-   A /trunk/epan/dissectors/packet-clearcase.h (from /trunk/packet-clearcase.h:11400)
-   A /trunk/epan/dissectors/packet-clip.c (from /trunk/packet-clip.c:11400)
-   A /trunk/epan/dissectors/packet-clip.h (from /trunk/packet-clip.h:11400)
-   A /trunk/epan/dissectors/packet-clnp.c (from /trunk/packet-clnp.c:11400)
-   A /trunk/epan/dissectors/packet-cops.c (from /trunk/packet-cops.c:11400)
-   A /trunk/epan/dissectors/packet-cosine.c (from /trunk/packet-cosine.c:11400)
-   A /trunk/epan/dissectors/packet-cpfi.c (from /trunk/packet-cpfi.c:11400)
-   A /trunk/epan/dissectors/packet-cpha.c (from /trunk/packet-cpha.c:11400)
-   A /trunk/epan/dissectors/packet-cups.c (from /trunk/packet-cups.c:11400)
-   A /trunk/epan/dissectors/packet-data.c (from /trunk/packet-data.c:11400)
-   A /trunk/epan/dissectors/packet-data.h (from /trunk/packet-data.h:11400)
-   A /trunk/epan/dissectors/packet-dccp.c (from /trunk/packet-dccp.c:11400)
-   A /trunk/epan/dissectors/packet-dccp.h (from /trunk/packet-dccp.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-afs4int.c (from /trunk/packet-dcerpc-afs4int.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-atsvc.c (from /trunk/packet-dcerpc-atsvc.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-atsvc.h (from /trunk/packet-dcerpc-atsvc.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-bossvr.c (from /trunk/packet-dcerpc-bossvr.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-browser.c (from /trunk/packet-dcerpc-browser.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-browser.h (from /trunk/packet-dcerpc-browser.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-budb.c (from /trunk/packet-dcerpc-budb.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-butc.c (from /trunk/packet-dcerpc-butc.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-cds_clerkserver.c (from /trunk/packet-dcerpc-cds_clerkserver.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-cds_solicit.c (from /trunk/packet-dcerpc-cds_solicit.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-conv.c (from /trunk/packet-dcerpc-conv.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-cprpc_server.c (from /trunk/packet-dcerpc-cprpc_server.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-dce122.c (from /trunk/packet-dcerpc-dce122.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-dce122.h (from /trunk/packet-dcerpc-dce122.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-dcom.h (from /trunk/packet-dcerpc-dcom.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-dfs.c (from /trunk/packet-dcerpc-dfs.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-dfs.h (from /trunk/packet-dcerpc-dfs.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-dnsserver.c (from /trunk/packet-dcerpc-dnsserver.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-dnsserver.h (from /trunk/packet-dcerpc-dnsserver.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-drsuapi.c (from /trunk/packet-dcerpc-drsuapi.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-drsuapi.h (from /trunk/packet-dcerpc-drsuapi.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-dtsprovider.c (from /trunk/packet-dcerpc-dtsprovider.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-dtsstime_req.c (from /trunk/packet-dcerpc-dtsstime_req.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-efs.c (from /trunk/packet-dcerpc-efs.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-efs.h (from /trunk/packet-dcerpc-efs.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-epm.c (from /trunk/packet-dcerpc-epm.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-epm4.c (from /trunk/packet-dcerpc-epm4.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-eventlog.c (from /trunk/packet-dcerpc-eventlog.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-eventlog.h (from /trunk/packet-dcerpc-eventlog.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-fldb.c (from /trunk/packet-dcerpc-fldb.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-frsapi.c (from /trunk/packet-dcerpc-frsapi.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-frsapi.h (from /trunk/packet-dcerpc-frsapi.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-frsrpc.c (from /trunk/packet-dcerpc-frsrpc.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-frsrpc.h (from /trunk/packet-dcerpc-frsrpc.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-ftserver.c (from /trunk/packet-dcerpc-ftserver.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-icl_rpc.c (from /trunk/packet-dcerpc-icl_rpc.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-initshutdown.c (from /trunk/packet-dcerpc-initshutdown.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-initshutdown.h (from /trunk/packet-dcerpc-initshutdown.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-krb5rpc.c (from /trunk/packet-dcerpc-krb5rpc.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-llb.c (from /trunk/packet-dcerpc-llb.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-lsa-ds.c (from /trunk/packet-dcerpc-lsa-ds.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-lsa.c (from /trunk/packet-dcerpc-lsa.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-lsa.h (from /trunk/packet-dcerpc-lsa.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-mapi.c (from /trunk/packet-dcerpc-mapi.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-mapi.h (from /trunk/packet-dcerpc-mapi.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-messenger.c (from /trunk/packet-dcerpc-messenger.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-mgmt.c (from /trunk/packet-dcerpc-mgmt.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-ndr.c (from /trunk/packet-dcerpc-ndr.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-netlogon.c (from /trunk/packet-dcerpc-netlogon.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-netlogon.h (from /trunk/packet-dcerpc-netlogon.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-nspi.c (from /trunk/packet-dcerpc-nspi.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-nt.c (from /trunk/packet-dcerpc-nt.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-nt.h (from /trunk/packet-dcerpc-nt.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-oxid.c (from /trunk/packet-dcerpc-oxid.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rdaclif.c (from /trunk/packet-dcerpc-rdaclif.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-reg.c (from /trunk/packet-dcerpc-reg.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-reg.h (from /trunk/packet-dcerpc-reg.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-remact.c (from /trunk/packet-dcerpc-remact.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rep_proc.c (from /trunk/packet-dcerpc-rep_proc.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-roverride.c (from /trunk/packet-dcerpc-roverride.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rpriv.c (from /trunk/packet-dcerpc-rpriv.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_acct.c (from /trunk/packet-dcerpc-rs_acct.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_attr.c (from /trunk/packet-dcerpc-rs_attr.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_attr_schema.c (from /trunk/packet-dcerpc-rs_attr_schema.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_bind.c (from /trunk/packet-dcerpc-rs_bind.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_misc.c (from /trunk/packet-dcerpc-rs_misc.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_pgo.c (from /trunk/packet-dcerpc-rs_pgo.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_plcy.c (from /trunk/packet-dcerpc-rs_plcy.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_prop_acct.c (from /trunk/packet-dcerpc-rs_prop_acct.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_prop_acl.c (from /trunk/packet-dcerpc-rs_prop_acl.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_prop_attr.c (from /trunk/packet-dcerpc-rs_prop_attr.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_prop_pgo.c (from /trunk/packet-dcerpc-rs_prop_pgo.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_prop_plcy.c (from /trunk/packet-dcerpc-rs_prop_plcy.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_pwd_mgmt.c (from /trunk/packet-dcerpc-rs_pwd_mgmt.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_repadm.c (from /trunk/packet-dcerpc-rs_repadm.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_replist.c (from /trunk/packet-dcerpc-rs_replist.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_repmgr.c (from /trunk/packet-dcerpc-rs_repmgr.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rs_unix.c (from /trunk/packet-dcerpc-rs_unix.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-rsec_login.c (from /trunk/packet-dcerpc-rsec_login.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-samr.c (from /trunk/packet-dcerpc-samr.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-samr.h (from /trunk/packet-dcerpc-samr.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-secidmap.c (from /trunk/packet-dcerpc-secidmap.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-spoolss.c (from /trunk/packet-dcerpc-spoolss.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-spoolss.h (from /trunk/packet-dcerpc-spoolss.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-srvsvc.c (from /trunk/packet-dcerpc-srvsvc.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-srvsvc.h (from /trunk/packet-dcerpc-srvsvc.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-svcctl.c (from /trunk/packet-dcerpc-svcctl.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-svcctl.h (from /trunk/packet-dcerpc-svcctl.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-tapi.c (from /trunk/packet-dcerpc-tapi.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-tapi.h (from /trunk/packet-dcerpc-tapi.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-tkn4int.c (from /trunk/packet-dcerpc-tkn4int.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-trksvr.c (from /trunk/packet-dcerpc-trksvr.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-ubikdisk.c (from /trunk/packet-dcerpc-ubikdisk.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-ubikvote.c (from /trunk/packet-dcerpc-ubikvote.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-update.c (from /trunk/packet-dcerpc-update.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-wkssvc.c (from /trunk/packet-dcerpc-wkssvc.c:11400)
-   A /trunk/epan/dissectors/packet-dcerpc-wkssvc.h (from /trunk/packet-dcerpc-wkssvc.h:11400)
-   A /trunk/epan/dissectors/packet-dcerpc.c (from /trunk/packet-dcerpc.c:11409)
-   A /trunk/epan/dissectors/packet-dcerpc.h (from /trunk/packet-dcerpc.h:11409)
-   A /trunk/epan/dissectors/packet-dcm.c (from /trunk/packet-dcm.c:11400)
-   A /trunk/epan/dissectors/packet-ddtp.c (from /trunk/packet-ddtp.c:11400)
-   A /trunk/epan/dissectors/packet-ddtp.h (from /trunk/packet-ddtp.h:11400)
-   A /trunk/epan/dissectors/packet-dec-bpdu.c (from /trunk/packet-dec-bpdu.c:11400)
-   A /trunk/epan/dissectors/packet-dhcpv6.c (from /trunk/packet-dhcpv6.c:11400)
-   A /trunk/epan/dissectors/packet-diameter-defs.h (from /trunk/packet-diameter-defs.h:11400)
-   A /trunk/epan/dissectors/packet-diameter.c (from /trunk/packet-diameter.c:11400)
-   A /trunk/epan/dissectors/packet-diffserv-mpls-common.c (from /trunk/packet-diffserv-mpls-common.c:11400)
-   A /trunk/epan/dissectors/packet-diffserv-mpls-common.h (from /trunk/packet-diffserv-mpls-common.h:11400)
-   A /trunk/epan/dissectors/packet-distcc.c (from /trunk/packet-distcc.c:11400)
-   A /trunk/epan/dissectors/packet-dlsw.c (from /trunk/packet-dlsw.c:11400)
-   A /trunk/epan/dissectors/packet-dnp.c (from /trunk/packet-dnp.c:11400)
-   A /trunk/epan/dissectors/packet-dns.c (from /trunk/packet-dns.c:11400)
-   A /trunk/epan/dissectors/packet-dns.h (from /trunk/packet-dns.h:11400)
-   A /trunk/epan/dissectors/packet-dsi.c (from /trunk/packet-dsi.c:11400)
-   A /trunk/epan/dissectors/packet-dvmrp.c (from /trunk/packet-dvmrp.c:11400)
-   A /trunk/epan/dissectors/packet-dvmrp.h (from /trunk/packet-dvmrp.h:11400)
-   A /trunk/epan/dissectors/packet-e164.c (from /trunk/packet-e164.c:11400)
-   A /trunk/epan/dissectors/packet-e164.h (from /trunk/packet-e164.h:11400)
-   A /trunk/epan/dissectors/packet-eap.c (from /trunk/packet-eap.c:11400)
-   A /trunk/epan/dissectors/packet-eapol.c (from /trunk/packet-eapol.c:11400)
-   A /trunk/epan/dissectors/packet-echo.c (from /trunk/packet-echo.c:11400)
-   A /trunk/epan/dissectors/packet-edonkey.c (from /trunk/packet-edonkey.c:11400)
-   A /trunk/epan/dissectors/packet-edonkey.h (from /trunk/packet-edonkey.h:11400)
-   A /trunk/epan/dissectors/packet-eigrp.c (from /trunk/packet-eigrp.c:11400)
-   A /trunk/epan/dissectors/packet-enc.c (from /trunk/packet-enc.c:11400)
-   A /trunk/epan/dissectors/packet-enip.c (from /trunk/packet-enip.c:11400)
-   A /trunk/epan/dissectors/packet-enrp.c (from /trunk/packet-enrp.c:11400)
-   A /trunk/epan/dissectors/packet-esis.c (from /trunk/packet-esis.c:11400)
-   A /trunk/epan/dissectors/packet-esis.h (from /trunk/packet-esis.h:11400)
-   A /trunk/epan/dissectors/packet-eth.c (from /trunk/packet-eth.c:11400)
-   A /trunk/epan/dissectors/packet-eth.h (from /trunk/packet-eth.h:11400)
-   A /trunk/epan/dissectors/packet-etherip.c (from /trunk/packet-etherip.c:11400)
-   A /trunk/epan/dissectors/packet-ethertype.c (from /trunk/packet-ethertype.c:11400)
-   A /trunk/epan/dissectors/packet-fc.c (from /trunk/packet-fc.c:11400)
-   A /trunk/epan/dissectors/packet-fc.h (from /trunk/packet-fc.h:11400)
-   A /trunk/epan/dissectors/packet-fcbls.h (from /trunk/packet-fcbls.h:11400)
-   A /trunk/epan/dissectors/packet-fcct.c (from /trunk/packet-fcct.c:11400)
-   A /trunk/epan/dissectors/packet-fcct.h (from /trunk/packet-fcct.h:11400)
-   A /trunk/epan/dissectors/packet-fcdns.c (from /trunk/packet-fcdns.c:11400)
-   A /trunk/epan/dissectors/packet-fcdns.h (from /trunk/packet-fcdns.h:11400)
-   A /trunk/epan/dissectors/packet-fcels.c (from /trunk/packet-fcels.c:11400)
-   A /trunk/epan/dissectors/packet-fcels.h (from /trunk/packet-fcels.h:11400)
-   A /trunk/epan/dissectors/packet-fcfcs.c (from /trunk/packet-fcfcs.c:11400)
-   A /trunk/epan/dissectors/packet-fcfcs.h (from /trunk/packet-fcfcs.h:11400)
-   A /trunk/epan/dissectors/packet-fcfzs.c (from /trunk/packet-fcfzs.c:11400)
-   A /trunk/epan/dissectors/packet-fcfzs.h (from /trunk/packet-fcfzs.h:11400)
-   A /trunk/epan/dissectors/packet-fcip.c (from /trunk/packet-fcip.c:11400)
-   A /trunk/epan/dissectors/packet-fclctl.c (from /trunk/packet-fclctl.c:11400)
-   A /trunk/epan/dissectors/packet-fclctl.h (from /trunk/packet-fclctl.h:11400)
-   A /trunk/epan/dissectors/packet-fcp.c (from /trunk/packet-fcp.c:11400)
-   A /trunk/epan/dissectors/packet-fcp.h (from /trunk/packet-fcp.h:11400)
-   A /trunk/epan/dissectors/packet-fcsb3.c (from /trunk/packet-fcsb3.c:11400)
-   A /trunk/epan/dissectors/packet-fcsb3.h (from /trunk/packet-fcsb3.h:11400)
-   A /trunk/epan/dissectors/packet-fcsp.c (from /trunk/packet-fcsp.c:11400)
-   A /trunk/epan/dissectors/packet-fcsp.h (from /trunk/packet-fcsp.h:11400)
-   A /trunk/epan/dissectors/packet-fcswils.c (from /trunk/packet-fcswils.c:11400)
-   A /trunk/epan/dissectors/packet-fcswils.h (from /trunk/packet-fcswils.h:11400)
-   A /trunk/epan/dissectors/packet-fddi.c (from /trunk/packet-fddi.c:11400)
-   A /trunk/epan/dissectors/packet-fddi.h (from /trunk/packet-fddi.h:11400)
-   A /trunk/epan/dissectors/packet-fix.c (from /trunk/packet-fix.c:11400)
-   A /trunk/epan/dissectors/packet-fr.c (from /trunk/packet-fr.c:11400)
-   A /trunk/epan/dissectors/packet-frame.c (from /trunk/packet-frame.c:11400)
-   A /trunk/epan/dissectors/packet-frame.h (from /trunk/packet-frame.h:11400)
-   A /trunk/epan/dissectors/packet-ftam.c (from /trunk/packet-ftam.c:11400)
-   A /trunk/epan/dissectors/packet-ftam.h (from /trunk/packet-ftam.h:11400)
-   A /trunk/epan/dissectors/packet-ftp.c (from /trunk/packet-ftp.c:11400)
-   A /trunk/epan/dissectors/packet-fw1.c (from /trunk/packet-fw1.c:11400)
-   A /trunk/epan/dissectors/packet-gift.c (from /trunk/packet-gift.c:11400)
-   A /trunk/epan/dissectors/packet-giop.c (from /trunk/packet-giop.c:11400)
-   A /trunk/epan/dissectors/packet-giop.h (from /trunk/packet-giop.h:11400)
-   A /trunk/epan/dissectors/packet-gmrp.c (from /trunk/packet-gmrp.c:11400)
-   A /trunk/epan/dissectors/packet-gnutella.c (from /trunk/packet-gnutella.c:11400)
-   A /trunk/epan/dissectors/packet-gnutella.h (from /trunk/packet-gnutella.h:11400)
-   A /trunk/epan/dissectors/packet-gprs-llc.c (from /trunk/packet-gprs-llc.c:11400)
-   A /trunk/epan/dissectors/packet-gprs-ns.c (from /trunk/packet-gprs-ns.c:11400)
-   A /trunk/epan/dissectors/packet-gre.c (from /trunk/packet-gre.c:11400)
-   A /trunk/epan/dissectors/packet-gsm_a.c (from /trunk/packet-gsm_a.c:11400)
-   A /trunk/epan/dissectors/packet-gsm_a.h (from /trunk/packet-gsm_a.h:11400)
-   A /trunk/epan/dissectors/packet-gsm_map.c (from /trunk/packet-gsm_map.c:11400)
-   A /trunk/epan/dissectors/packet-gsm_map.h (from /trunk/packet-gsm_map.h:11400)
-   A /trunk/epan/dissectors/packet-gsm_sms.c (from /trunk/packet-gsm_sms.c:11400)
-   A /trunk/epan/dissectors/packet-gsm_sms.h (from /trunk/packet-gsm_sms.h:11400)
-   A /trunk/epan/dissectors/packet-gsm_sms_ud.c (from /trunk/packet-gsm_sms_ud.c:11400)
-   A /trunk/epan/dissectors/packet-gsm_ss.c (from /trunk/packet-gsm_ss.c:11400)
-   A /trunk/epan/dissectors/packet-gsm_ss.h (from /trunk/packet-gsm_ss.h:11400)
-   A /trunk/epan/dissectors/packet-gssapi.c (from /trunk/packet-gssapi.c:11409)
-   A /trunk/epan/dissectors/packet-gssapi.h (from /trunk/packet-gssapi.h:11409)
-   A /trunk/epan/dissectors/packet-gtp.c (from /trunk/packet-gtp.c:11400)
-   A /trunk/epan/dissectors/packet-gtp.h (from /trunk/packet-gtp.h:11400)
-   A /trunk/epan/dissectors/packet-gvrp.c (from /trunk/packet-gvrp.c:11400)
-   A /trunk/epan/dissectors/packet-h1.c (from /trunk/packet-h1.c:11400)
-   A /trunk/epan/dissectors/packet-h225.c (from /trunk/packet-h225.c:11400)
-   A /trunk/epan/dissectors/packet-h225.h (from /trunk/packet-h225.h:11400)
-   A /trunk/epan/dissectors/packet-h235.c (from /trunk/packet-h235.c:11400)
-   A /trunk/epan/dissectors/packet-h235.h (from /trunk/packet-h235.h:11400)
-   A /trunk/epan/dissectors/packet-h245.c (from /trunk/packet-h245.c:11400)
-   A /trunk/epan/dissectors/packet-h245.h (from /trunk/packet-h245.h:11400)
-   A /trunk/epan/dissectors/packet-h261.c (from /trunk/packet-h261.c:11400)
-   A /trunk/epan/dissectors/packet-h263.c (from /trunk/packet-h263.c:11400)
-   A /trunk/epan/dissectors/packet-h450.c (from /trunk/packet-h450.c:11400)
-   A /trunk/epan/dissectors/packet-hclnfsd.c (from /trunk/packet-hclnfsd.c:11400)
-   A /trunk/epan/dissectors/packet-hclnfsd.h (from /trunk/packet-hclnfsd.h:11400)
-   A /trunk/epan/dissectors/packet-hpext.c (from /trunk/packet-hpext.c:11400)
-   A /trunk/epan/dissectors/packet-hpext.h (from /trunk/packet-hpext.h:11400)
-   A /trunk/epan/dissectors/packet-hsrp.c (from /trunk/packet-hsrp.c:11400)
-   A /trunk/epan/dissectors/packet-http.c (from /trunk/packet-http.c:11400)
-   A /trunk/epan/dissectors/packet-http.h (from /trunk/packet-http.h:11400)
-   A /trunk/epan/dissectors/packet-hyperscsi.c (from /trunk/packet-hyperscsi.c:11400)
-   A /trunk/epan/dissectors/packet-iapp.c (from /trunk/packet-iapp.c:11400)
-   A /trunk/epan/dissectors/packet-iax2.c (from /trunk/packet-iax2.c:11400)
-   A /trunk/epan/dissectors/packet-iax2.h (from /trunk/packet-iax2.h:11400)
-   A /trunk/epan/dissectors/packet-ib.c (from /trunk/packet-ib.c:11400)
-   A /trunk/epan/dissectors/packet-icap.c (from /trunk/packet-icap.c:11400)
-   A /trunk/epan/dissectors/packet-icmpv6.c (from /trunk/packet-icmpv6.c:11400)
-   A /trunk/epan/dissectors/packet-icp.c (from /trunk/packet-icp.c:11400)
-   A /trunk/epan/dissectors/packet-icq.c (from /trunk/packet-icq.c:11400)
-   A /trunk/epan/dissectors/packet-ieee80211.c (from /trunk/packet-ieee80211.c:11400)
-   A /trunk/epan/dissectors/packet-ieee80211.h (from /trunk/packet-ieee80211.h:11400)
-   A /trunk/epan/dissectors/packet-ieee8023.c (from /trunk/packet-ieee8023.c:11400)
-   A /trunk/epan/dissectors/packet-ieee8023.h (from /trunk/packet-ieee8023.h:11400)
-   A /trunk/epan/dissectors/packet-igap.c (from /trunk/packet-igap.c:11400)
-   A /trunk/epan/dissectors/packet-igap.h (from /trunk/packet-igap.h:11400)
-   A /trunk/epan/dissectors/packet-igmp.c (from /trunk/packet-igmp.c:11400)
-   A /trunk/epan/dissectors/packet-igmp.h (from /trunk/packet-igmp.h:11400)
-   A /trunk/epan/dissectors/packet-igrp.c (from /trunk/packet-igrp.c:11400)
-   A /trunk/epan/dissectors/packet-image-gif.c (from /trunk/packet-image-gif.c:11400)
-   A /trunk/epan/dissectors/packet-image-jfif.c (from /trunk/packet-image-jfif.c:11400)
-   A /trunk/epan/dissectors/packet-imap.c (from /trunk/packet-imap.c:11400)
-   A /trunk/epan/dissectors/packet-ip.c (from /trunk/packet-ip.c:11400)
-   A /trunk/epan/dissectors/packet-ip.h (from /trunk/packet-ip.h:11400)
-   A /trunk/epan/dissectors/packet-ipdc.c (from /trunk/packet-ipdc.c:11400)
-   A /trunk/epan/dissectors/packet-ipdc.h (from /trunk/packet-ipdc.h:11400)
-   A /trunk/epan/dissectors/packet-ipfc.c (from /trunk/packet-ipfc.c:11400)
-   A /trunk/epan/dissectors/packet-ipfc.h (from /trunk/packet-ipfc.h:11400)
-   A /trunk/epan/dissectors/packet-ipmi.c (from /trunk/packet-ipmi.c:11400)
-   A /trunk/epan/dissectors/packet-ipp.c (from /trunk/packet-ipp.c:11400)
-   A /trunk/epan/dissectors/packet-ipsec-udp.c (from /trunk/packet-ipsec-udp.c:11400)
-   A /trunk/epan/dissectors/packet-ipsec.c (from /trunk/packet-ipsec.c:11400)
-   A /trunk/epan/dissectors/packet-ipsec.h (from /trunk/packet-ipsec.h:11400)
-   A /trunk/epan/dissectors/packet-ipv6.c (from /trunk/packet-ipv6.c:11400)
-   A /trunk/epan/dissectors/packet-ipv6.h (from /trunk/packet-ipv6.h:11400)
-   A /trunk/epan/dissectors/packet-ipvs-syncd.c (from /trunk/packet-ipvs-syncd.c:11400)
-   A /trunk/epan/dissectors/packet-ipx.c (from /trunk/packet-ipx.c:11400)
-   A /trunk/epan/dissectors/packet-ipx.h (from /trunk/packet-ipx.h:11400)
-   A /trunk/epan/dissectors/packet-ipxwan.c (from /trunk/packet-ipxwan.c:11400)
-   A /trunk/epan/dissectors/packet-irc.c (from /trunk/packet-irc.c:11400)
-   A /trunk/epan/dissectors/packet-isakmp.c (from /trunk/packet-isakmp.c:11400)
-   A /trunk/epan/dissectors/packet-iscsi.c (from /trunk/packet-iscsi.c:11400)
-   A /trunk/epan/dissectors/packet-isdn.c (from /trunk/packet-isdn.c:11400)
-   A /trunk/epan/dissectors/packet-isis-clv.c (from /trunk/packet-isis-clv.c:11400)
-   A /trunk/epan/dissectors/packet-isis-clv.h (from /trunk/packet-isis-clv.h:11400)
-   A /trunk/epan/dissectors/packet-isis-hello.c (from /trunk/packet-isis-hello.c:11400)
-   A /trunk/epan/dissectors/packet-isis-hello.h (from /trunk/packet-isis-hello.h:11400)
-   A /trunk/epan/dissectors/packet-isis-lsp.c (from /trunk/packet-isis-lsp.c:11400)
-   A /trunk/epan/dissectors/packet-isis-lsp.h (from /trunk/packet-isis-lsp.h:11400)
-   A /trunk/epan/dissectors/packet-isis-snp.c (from /trunk/packet-isis-snp.c:11400)
-   A /trunk/epan/dissectors/packet-isis-snp.h (from /trunk/packet-isis-snp.h:11400)
-   A /trunk/epan/dissectors/packet-isis.c (from /trunk/packet-isis.c:11400)
-   A /trunk/epan/dissectors/packet-isis.h (from /trunk/packet-isis.h:11400)
-   A /trunk/epan/dissectors/packet-isl.c (from /trunk/packet-isl.c:11400)
-   A /trunk/epan/dissectors/packet-isl.h (from /trunk/packet-isl.h:11400)
-   A /trunk/epan/dissectors/packet-ismp.c (from /trunk/packet-ismp.c:11400)
-   A /trunk/epan/dissectors/packet-isns.c (from /trunk/packet-isns.c:11400)
-   A /trunk/epan/dissectors/packet-isup.c (from /trunk/packet-isup.c:11400)
-   A /trunk/epan/dissectors/packet-isup.h (from /trunk/packet-isup.h:11400)
-   A /trunk/epan/dissectors/packet-iua.c (from /trunk/packet-iua.c:11400)
-   A /trunk/epan/dissectors/packet-jabber.c (from /trunk/packet-jabber.c:11400)
-   A /trunk/epan/dissectors/packet-kadm5.c (from /trunk/packet-kadm5.c:11400)
-   A /trunk/epan/dissectors/packet-kerberos.c (from /trunk/packet-kerberos.c:11409)
-   A /trunk/epan/dissectors/packet-kerberos.h (from /trunk/packet-kerberos.h:11400)
-   A /trunk/epan/dissectors/packet-klm.c (from /trunk/packet-klm.c:11400)
-   A /trunk/epan/dissectors/packet-klm.h (from /trunk/packet-klm.h:11400)
-   A /trunk/epan/dissectors/packet-kpasswd.c (from /trunk/packet-kpasswd.c:11400)
-   A /trunk/epan/dissectors/packet-l2tp.c (from /trunk/packet-l2tp.c:11400)
-   A /trunk/epan/dissectors/packet-lapb.c (from /trunk/packet-lapb.c:11400)
-   A /trunk/epan/dissectors/packet-lapbether.c (from /trunk/packet-lapbether.c:11400)
-   A /trunk/epan/dissectors/packet-lapd.c (from /trunk/packet-lapd.c:11400)
-   A /trunk/epan/dissectors/packet-laplink.c (from /trunk/packet-laplink.c:11400)
-   A /trunk/epan/dissectors/packet-ldap.c (from /trunk/packet-ldap.c:11400)
-   A /trunk/epan/dissectors/packet-ldap.h (from /trunk/packet-ldap.h:11400)
-   A /trunk/epan/dissectors/packet-ldp.c (from /trunk/packet-ldp.c:11400)
-   A /trunk/epan/dissectors/packet-ldp.h (from /trunk/packet-ldp.h:11400)
-   A /trunk/epan/dissectors/packet-llc.c (from /trunk/packet-llc.c:11400)
-   A /trunk/epan/dissectors/packet-llc.h (from /trunk/packet-llc.h:11400)
-   A /trunk/epan/dissectors/packet-lmi.c (from /trunk/packet-lmi.c:11400)
-   A /trunk/epan/dissectors/packet-lmp.c (from /trunk/packet-lmp.c:11400)
-   A /trunk/epan/dissectors/packet-lpd.c (from /trunk/packet-lpd.c:11400)
-   A /trunk/epan/dissectors/packet-lwapp.c (from /trunk/packet-lwapp.c:11400)
-   A /trunk/epan/dissectors/packet-m2pa.c (from /trunk/packet-m2pa.c:11400)
-   A /trunk/epan/dissectors/packet-m2tp.c (from /trunk/packet-m2tp.c:11400)
-   A /trunk/epan/dissectors/packet-m2ua.c (from /trunk/packet-m2ua.c:11400)
-   A /trunk/epan/dissectors/packet-m3ua.c (from /trunk/packet-m3ua.c:11400)
-   A /trunk/epan/dissectors/packet-mbtcp.c (from /trunk/packet-mbtcp.c:11400)
-   A /trunk/epan/dissectors/packet-mdshdr.c (from /trunk/packet-mdshdr.c:11400)
-   A /trunk/epan/dissectors/packet-media.c (from /trunk/packet-media.c:11400)
-   A /trunk/epan/dissectors/packet-mip.c (from /trunk/packet-mip.c:11400)
-   A /trunk/epan/dissectors/packet-mip6.c (from /trunk/packet-mip6.c:11400)
-   A /trunk/epan/dissectors/packet-mip6.h (from /trunk/packet-mip6.h:11400)
-   A /trunk/epan/dissectors/packet-mmse.c (from /trunk/packet-mmse.c:11400)
-   A /trunk/epan/dissectors/packet-mount.c (from /trunk/packet-mount.c:11400)
-   A /trunk/epan/dissectors/packet-mount.h (from /trunk/packet-mount.h:11400)
-   A /trunk/epan/dissectors/packet-mpeg1.c (from /trunk/packet-mpeg1.c:11400)
-   A /trunk/epan/dissectors/packet-mpls-echo.c (from /trunk/packet-mpls-echo.c:11400)
-   A /trunk/epan/dissectors/packet-mpls.c (from /trunk/packet-mpls.c:11400)
-   A /trunk/epan/dissectors/packet-mq-pcf.c (from /trunk/packet-mq-pcf.c:11400)
-   A /trunk/epan/dissectors/packet-mq.c (from /trunk/packet-mq.c:11400)
-   A /trunk/epan/dissectors/packet-mq.h (from /trunk/packet-mq.h:11400)
-   A /trunk/epan/dissectors/packet-mrdisc.c (from /trunk/packet-mrdisc.c:11400)
-   A /trunk/epan/dissectors/packet-mrdisc.h (from /trunk/packet-mrdisc.h:11400)
-   A /trunk/epan/dissectors/packet-msdp.c (from /trunk/packet-msdp.c:11400)
-   A /trunk/epan/dissectors/packet-msn-messenger.c (from /trunk/packet-msn-messenger.c:11400)
-   A /trunk/epan/dissectors/packet-msnip.c (from /trunk/packet-msnip.c:11400)
-   A /trunk/epan/dissectors/packet-msnip.h (from /trunk/packet-msnip.h:11400)
-   A /trunk/epan/dissectors/packet-msproxy.c (from /trunk/packet-msproxy.c:11400)
-   A /trunk/epan/dissectors/packet-mtp2.c (from /trunk/packet-mtp2.c:11400)
-   A /trunk/epan/dissectors/packet-mtp3.c (from /trunk/packet-mtp3.c:11400)
-   A /trunk/epan/dissectors/packet-mtp3.h (from /trunk/packet-mtp3.h:11400)
-   A /trunk/epan/dissectors/packet-mtp3mg.c (from /trunk/packet-mtp3mg.c:11400)
-   A /trunk/epan/dissectors/packet-multipart.c (from /trunk/packet-multipart.c:11400)
-   A /trunk/epan/dissectors/packet-mysql.c (from /trunk/packet-mysql.c:11400)
-   A /trunk/epan/dissectors/packet-nbipx.c (from /trunk/packet-nbipx.c:11400)
-   A /trunk/epan/dissectors/packet-nbns.c (from /trunk/packet-nbns.c:11400)
-   A /trunk/epan/dissectors/packet-ncp-int.h (from /trunk/packet-ncp-int.h:11400)
-   A /trunk/epan/dissectors/packet-ncp-nmas.c (from /trunk/packet-ncp-nmas.c:11400)
-   A /trunk/epan/dissectors/packet-ncp-nmas.h (from /trunk/packet-ncp-nmas.h:11400)
-   A /trunk/epan/dissectors/packet-ncp.c (from /trunk/packet-ncp.c:11400)
-   A /trunk/epan/dissectors/packet-ncp2222.inc (from /trunk/packet-ncp2222.inc:11400)
-   A /trunk/epan/dissectors/packet-ndmp.c (from /trunk/packet-ndmp.c:11400)
-   A /trunk/epan/dissectors/packet-ndps.c (from /trunk/packet-ndps.c:11400)
-   A /trunk/epan/dissectors/packet-ndps.h (from /trunk/packet-ndps.h:11400)
-   A /trunk/epan/dissectors/packet-netbios.c (from /trunk/packet-netbios.c:11400)
-   A /trunk/epan/dissectors/packet-netbios.h (from /trunk/packet-netbios.h:11400)
-   A /trunk/epan/dissectors/packet-netflow.c (from /trunk/packet-netflow.c:11400)
-   A /trunk/epan/dissectors/packet-nfs.c (from /trunk/packet-nfs.c:11400)
-   A /trunk/epan/dissectors/packet-nfs.h (from /trunk/packet-nfs.h:11400)
-   A /trunk/epan/dissectors/packet-nfsacl.c (from /trunk/packet-nfsacl.c:11400)
-   A /trunk/epan/dissectors/packet-nfsauth.c (from /trunk/packet-nfsauth.c:11400)
-   A /trunk/epan/dissectors/packet-nisplus.c (from /trunk/packet-nisplus.c:11400)
-   A /trunk/epan/dissectors/packet-nisplus.h (from /trunk/packet-nisplus.h:11400)
-   A /trunk/epan/dissectors/packet-nlm.c (from /trunk/packet-nlm.c:11400)
-   A /trunk/epan/dissectors/packet-nlm.h (from /trunk/packet-nlm.h:11400)
-   A /trunk/epan/dissectors/packet-nlsp.c (from /trunk/packet-nlsp.c:11400)
-   A /trunk/epan/dissectors/packet-nntp.c (from /trunk/packet-nntp.c:11400)
-   A /trunk/epan/dissectors/packet-nt-oui.c (from /trunk/packet-nt-oui.c:11400)
-   A /trunk/epan/dissectors/packet-nt-sonmp.c (from /trunk/packet-nt-sonmp.c:11400)
-   A /trunk/epan/dissectors/packet-nt-tpcp.c (from /trunk/packet-nt-tpcp.c:11400)
-   A /trunk/epan/dissectors/packet-ntlmssp.c (from /trunk/packet-ntlmssp.c:11400)
-   A /trunk/epan/dissectors/packet-ntp.c (from /trunk/packet-ntp.c:11400)
-   A /trunk/epan/dissectors/packet-ntp.h (from /trunk/packet-ntp.h:11400)
-   A /trunk/epan/dissectors/packet-null.c (from /trunk/packet-null.c:11400)
-   A /trunk/epan/dissectors/packet-null.h (from /trunk/packet-null.h:11400)
-   A /trunk/epan/dissectors/packet-olsr.c (from /trunk/packet-olsr.c:11400)
-   A /trunk/epan/dissectors/packet-osi-options.c (from /trunk/packet-osi-options.c:11400)
-   A /trunk/epan/dissectors/packet-osi-options.h (from /trunk/packet-osi-options.h:11400)
-   A /trunk/epan/dissectors/packet-osi.c (from /trunk/packet-osi.c:11400)
-   A /trunk/epan/dissectors/packet-osi.h (from /trunk/packet-osi.h:11400)
-   A /trunk/epan/dissectors/packet-ospf.c (from /trunk/packet-ospf.c:11400)
-   A /trunk/epan/dissectors/packet-pcnfsd.c (from /trunk/packet-pcnfsd.c:11400)
-   A /trunk/epan/dissectors/packet-pcnfsd.h (from /trunk/packet-pcnfsd.h:11400)
-   A /trunk/epan/dissectors/packet-per.c (from /trunk/packet-per.c:11400)
-   A /trunk/epan/dissectors/packet-per.h (from /trunk/packet-per.h:11400)
-   A /trunk/epan/dissectors/packet-pflog.c (from /trunk/packet-pflog.c:11400)
-   A /trunk/epan/dissectors/packet-pflog.h (from /trunk/packet-pflog.h:11400)
-   A /trunk/epan/dissectors/packet-pgm.c (from /trunk/packet-pgm.c:11400)
-   A /trunk/epan/dissectors/packet-pim.c (from /trunk/packet-pim.c:11400)
-   A /trunk/epan/dissectors/packet-pim.h (from /trunk/packet-pim.h:11400)
-   A /trunk/epan/dissectors/packet-pktc.c (from /trunk/packet-pktc.c:11400)
-   A /trunk/epan/dissectors/packet-pktc.h (from /trunk/packet-pktc.h:11400)
-   A /trunk/epan/dissectors/packet-pop.c (from /trunk/packet-pop.c:11400)
-   A /trunk/epan/dissectors/packet-portmap.c (from /trunk/packet-portmap.c:11400)
-   A /trunk/epan/dissectors/packet-portmap.h (from /trunk/packet-portmap.h:11400)
-   A /trunk/epan/dissectors/packet-postgresql.c (from /trunk/packet-postgresql.c:11400)
-   A /trunk/epan/dissectors/packet-ppp.c (from /trunk/packet-ppp.c:11400)
-   A /trunk/epan/dissectors/packet-ppp.h (from /trunk/packet-ppp.h:11400)
-   A /trunk/epan/dissectors/packet-pppoe.c (from /trunk/packet-pppoe.c:11400)
-   A /trunk/epan/dissectors/packet-pptp.c (from /trunk/packet-pptp.c:11400)
-   A /trunk/epan/dissectors/packet-pres.c (from /trunk/packet-pres.c:11400)
-   A /trunk/epan/dissectors/packet-pres.h (from /trunk/packet-pres.h:11400)
-   A /trunk/epan/dissectors/packet-prism.c (from /trunk/packet-prism.c:11400)
-   A /trunk/epan/dissectors/packet-prism.h (from /trunk/packet-prism.h:11400)
-   A /trunk/epan/dissectors/packet-ptp.c (from /trunk/packet-ptp.c:11400)
-   A /trunk/epan/dissectors/packet-q2931.c (from /trunk/packet-q2931.c:11400)
-   A /trunk/epan/dissectors/packet-q931.c (from /trunk/packet-q931.c:11400)
-   A /trunk/epan/dissectors/packet-q931.h (from /trunk/packet-q931.h:11400)
-   A /trunk/epan/dissectors/packet-q933.c (from /trunk/packet-q933.c:11400)
-   A /trunk/epan/dissectors/packet-qllc.c (from /trunk/packet-qllc.c:11400)
-   A /trunk/epan/dissectors/packet-quake.c (from /trunk/packet-quake.c:11400)
-   A /trunk/epan/dissectors/packet-quake2.c (from /trunk/packet-quake2.c:11400)
-   A /trunk/epan/dissectors/packet-quake3.c (from /trunk/packet-quake3.c:11400)
-   A /trunk/epan/dissectors/packet-quakeworld.c (from /trunk/packet-quakeworld.c:11400)
-   A /trunk/epan/dissectors/packet-radiotap.c (from /trunk/packet-radiotap.c:11400)
-   A /trunk/epan/dissectors/packet-radiotap.h (from /trunk/packet-radiotap.h:11400)
-   A /trunk/epan/dissectors/packet-radius.c (from /trunk/packet-radius.c:11400)
-   A /trunk/epan/dissectors/packet-ranap.c (from /trunk/packet-ranap.c:11400)
-   A /trunk/epan/dissectors/packet-raw.c (from /trunk/packet-raw.c:11400)
-   A /trunk/epan/dissectors/packet-raw.h (from /trunk/packet-raw.h:11400)
-   A /trunk/epan/dissectors/packet-rip.c (from /trunk/packet-rip.c:11400)
-   A /trunk/epan/dissectors/packet-ripng.c (from /trunk/packet-ripng.c:11400)
-   A /trunk/epan/dissectors/packet-ripng.h (from /trunk/packet-ripng.h:11400)
-   A /trunk/epan/dissectors/packet-rlogin.c (from /trunk/packet-rlogin.c:11400)
-   A /trunk/epan/dissectors/packet-rmcp.c (from /trunk/packet-rmcp.c:11400)
-   A /trunk/epan/dissectors/packet-rmi.c (from /trunk/packet-rmi.c:11400)
-   A /trunk/epan/dissectors/packet-rmi.h (from /trunk/packet-rmi.h:11400)
-   A /trunk/epan/dissectors/packet-rmp.c (from /trunk/packet-rmp.c:11400)
-   A /trunk/epan/dissectors/packet-rpc.c (from /trunk/packet-rpc.c:11400)
-   A /trunk/epan/dissectors/packet-rpc.h (from /trunk/packet-rpc.h:11400)
-   A /trunk/epan/dissectors/packet-rpl.c (from /trunk/packet-rpl.c:11400)
-   A /trunk/epan/dissectors/packet-rquota.c (from /trunk/packet-rquota.c:11400)
-   A /trunk/epan/dissectors/packet-rquota.h (from /trunk/packet-rquota.h:11400)
-   A /trunk/epan/dissectors/packet-rsh.c (from /trunk/packet-rsh.c:11400)
-   A /trunk/epan/dissectors/packet-rstat.c (from /trunk/packet-rstat.c:11400)
-   A /trunk/epan/dissectors/packet-rsvp.c (from /trunk/packet-rsvp.c:11400)
-   A /trunk/epan/dissectors/packet-rsvp.h (from /trunk/packet-rsvp.h:11400)
-   A /trunk/epan/dissectors/packet-rsync.c (from /trunk/packet-rsync.c:11400)
-   A /trunk/epan/dissectors/packet-rtcp.c (from /trunk/packet-rtcp.c:11400)
-   A /trunk/epan/dissectors/packet-rtcp.h (from /trunk/packet-rtcp.h:11400)
-   A /trunk/epan/dissectors/packet-rtp-events.c (from /trunk/packet-rtp-events.c:11400)
-   A /trunk/epan/dissectors/packet-rtp-events.h (from /trunk/packet-rtp-events.h:11400)
-   A /trunk/epan/dissectors/packet-rtp.c (from /trunk/packet-rtp.c:11400)
-   A /trunk/epan/dissectors/packet-rtp.h (from /trunk/packet-rtp.h:11400)
-   A /trunk/epan/dissectors/packet-rtps.c (from /trunk/packet-rtps.c:11400)
-   A /trunk/epan/dissectors/packet-rtps.h (from /trunk/packet-rtps.h:11400)
-   A /trunk/epan/dissectors/packet-rtsp.c (from /trunk/packet-rtsp.c:11400)
-   A /trunk/epan/dissectors/packet-rwall.c (from /trunk/packet-rwall.c:11400)
-   A /trunk/epan/dissectors/packet-rwall.h (from /trunk/packet-rwall.h:11400)
-   A /trunk/epan/dissectors/packet-rx.c (from /trunk/packet-rx.c:11400)
-   A /trunk/epan/dissectors/packet-rx.h (from /trunk/packet-rx.h:11400)
-   A /trunk/epan/dissectors/packet-sadmind.c (from /trunk/packet-sadmind.c:11400)
-   A /trunk/epan/dissectors/packet-sap.c (from /trunk/packet-sap.c:11400)
-   A /trunk/epan/dissectors/packet-sccp.c (from /trunk/packet-sccp.c:11400)
-   A /trunk/epan/dissectors/packet-sccpmg.c (from /trunk/packet-sccpmg.c:11400)
-   A /trunk/epan/dissectors/packet-scsi.c (from /trunk/packet-scsi.c:11400)
-   A /trunk/epan/dissectors/packet-scsi.h (from /trunk/packet-scsi.h:11400)
-   A /trunk/epan/dissectors/packet-sctp.c (from /trunk/packet-sctp.c:11400)
-   A /trunk/epan/dissectors/packet-sctp.h (from /trunk/packet-sctp.h:11400)
-   A /trunk/epan/dissectors/packet-sdlc.c (from /trunk/packet-sdlc.c:11400)
-   A /trunk/epan/dissectors/packet-sdp.c (from /trunk/packet-sdp.c:11400)
-   A /trunk/epan/dissectors/packet-sebek.c (from /trunk/packet-sebek.c:11400)
-   A /trunk/epan/dissectors/packet-ses.c (from /trunk/packet-ses.c:11400)
-   A /trunk/epan/dissectors/packet-ses.h (from /trunk/packet-ses.h:11400)
-   A /trunk/epan/dissectors/packet-sflow.c (from /trunk/packet-sflow.c:11400)
-   A /trunk/epan/dissectors/packet-sigcomp.c (from /trunk/packet-sigcomp.c:11400)
-   A /trunk/epan/dissectors/packet-sip.c (from /trunk/packet-sip.c:11400)
-   A /trunk/epan/dissectors/packet-sip.h (from /trunk/packet-sip.h:11400)
-   A /trunk/epan/dissectors/packet-sipfrag.c (from /trunk/packet-sipfrag.c:11400)
-   A /trunk/epan/dissectors/packet-skinny.c (from /trunk/packet-skinny.c:11400)
-   A /trunk/epan/dissectors/packet-slimp3.c (from /trunk/packet-slimp3.c:11400)
-   A /trunk/epan/dissectors/packet-sll.c (from /trunk/packet-sll.c:11400)
-   A /trunk/epan/dissectors/packet-sll.h (from /trunk/packet-sll.h:11400)
-   A /trunk/epan/dissectors/packet-slowprotocols.c (from /trunk/packet-slowprotocols.c:11400)
-   A /trunk/epan/dissectors/packet-slsk.c (from /trunk/packet-slsk.c:11400)
-   A /trunk/epan/dissectors/packet-smb-browse.c (from /trunk/packet-smb-browse.c:11400)
-   A /trunk/epan/dissectors/packet-smb-browse.h (from /trunk/packet-smb-browse.h:11400)
-   A /trunk/epan/dissectors/packet-smb-common.c (from /trunk/packet-smb-common.c:11400)
-   A /trunk/epan/dissectors/packet-smb-common.h (from /trunk/packet-smb-common.h:11400)
-   A /trunk/epan/dissectors/packet-smb-logon.c (from /trunk/packet-smb-logon.c:11400)
-   A /trunk/epan/dissectors/packet-smb-mailslot.c (from /trunk/packet-smb-mailslot.c:11400)
-   A /trunk/epan/dissectors/packet-smb-mailslot.h (from /trunk/packet-smb-mailslot.h:11400)
-   A /trunk/epan/dissectors/packet-smb-pipe.c (from /trunk/packet-smb-pipe.c:11400)
-   A /trunk/epan/dissectors/packet-smb-pipe.h (from /trunk/packet-smb-pipe.h:11400)
-   A /trunk/epan/dissectors/packet-smb-sidsnooping.c (from /trunk/packet-smb-sidsnooping.c:11400)
-   A /trunk/epan/dissectors/packet-smb-sidsnooping.h (from /trunk/packet-smb-sidsnooping.h:11400)
-   A /trunk/epan/dissectors/packet-smb.c (from /trunk/packet-smb.c:11400)
-   A /trunk/epan/dissectors/packet-smpp.c (from /trunk/packet-smpp.c:11400)
-   A /trunk/epan/dissectors/packet-smtp.c (from /trunk/packet-smtp.c:11400)
-   A /trunk/epan/dissectors/packet-sna.c (from /trunk/packet-sna.c:11400)
-   A /trunk/epan/dissectors/packet-sna.h (from /trunk/packet-sna.h:11400)
-   A /trunk/epan/dissectors/packet-snaeth.c (from /trunk/packet-snaeth.c:11400)
-   A /trunk/epan/dissectors/packet-sndcp.c (from /trunk/packet-sndcp.c:11400)
-   A /trunk/epan/dissectors/packet-snmp.c (from /trunk/packet-snmp.c:11400)
-   A /trunk/epan/dissectors/packet-snmp.h (from /trunk/packet-snmp.h:11400)
-   A /trunk/epan/dissectors/packet-socks.c (from /trunk/packet-socks.c:11400)
-   A /trunk/epan/dissectors/packet-spnego.c (from /trunk/packet-spnego.c:11400)
-   A /trunk/epan/dissectors/packet-spray.c (from /trunk/packet-spray.c:11400)
-   A /trunk/epan/dissectors/packet-spray.h (from /trunk/packet-spray.h:11400)
-   A /trunk/epan/dissectors/packet-srvloc.c (from /trunk/packet-srvloc.c:11400)
-   A /trunk/epan/dissectors/packet-sscop.c (from /trunk/packet-sscop.c:11400)
-   A /trunk/epan/dissectors/packet-ssh.c (from /trunk/packet-ssh.c:11400)
-   A /trunk/epan/dissectors/packet-ssl.c (from /trunk/packet-ssl.c:11409)
-   A /trunk/epan/dissectors/packet-stat-notify.c (from /trunk/packet-stat-notify.c:11400)
-   A /trunk/epan/dissectors/packet-stat-notify.h (from /trunk/packet-stat-notify.h:11400)
-   A /trunk/epan/dissectors/packet-stat.c (from /trunk/packet-stat.c:11400)
-   A /trunk/epan/dissectors/packet-stat.h (from /trunk/packet-stat.h:11400)
-   A /trunk/epan/dissectors/packet-stun.c (from /trunk/packet-stun.c:11400)
-   A /trunk/epan/dissectors/packet-sua.c (from /trunk/packet-sua.c:11400)
-   A /trunk/epan/dissectors/packet-symantec.c (from /trunk/packet-symantec.c:11400)
-   A /trunk/epan/dissectors/packet-syslog.c (from /trunk/packet-syslog.c:11400)
-   A /trunk/epan/dissectors/packet-t38.c (from /trunk/packet-t38.c:11400)
-   A /trunk/epan/dissectors/packet-tacacs.c (from /trunk/packet-tacacs.c:11400)
-   A /trunk/epan/dissectors/packet-tacacs.h (from /trunk/packet-tacacs.h:11400)
-   A /trunk/epan/dissectors/packet-tcap.c (from /trunk/packet-tcap.c:11400)
-   A /trunk/epan/dissectors/packet-tcap.h (from /trunk/packet-tcap.h:11400)
-   A /trunk/epan/dissectors/packet-tcp.c (from /trunk/packet-tcp.c:11400)
-   A /trunk/epan/dissectors/packet-tcp.h (from /trunk/packet-tcp.h:11400)
-   A /trunk/epan/dissectors/packet-tds.c (from /trunk/packet-tds.c:11400)
-   A /trunk/epan/dissectors/packet-teimanagement.c (from /trunk/packet-teimanagement.c:11400)
-   A /trunk/epan/dissectors/packet-telnet.c (from /trunk/packet-telnet.c:11400)
-   A /trunk/epan/dissectors/packet-teredo.c (from /trunk/packet-teredo.c:11400)
-   A /trunk/epan/dissectors/packet-text-media.c (from /trunk/packet-text-media.c:11400)
-   A /trunk/epan/dissectors/packet-tftp.c (from /trunk/packet-tftp.c:11400)
-   A /trunk/epan/dissectors/packet-time.c (from /trunk/packet-time.c:11400)
-   A /trunk/epan/dissectors/packet-tns.c (from /trunk/packet-tns.c:11400)
-   A /trunk/epan/dissectors/packet-tns.h (from /trunk/packet-tns.h:11400)
-   A /trunk/epan/dissectors/packet-tpkt.c (from /trunk/packet-tpkt.c:11400)
-   A /trunk/epan/dissectors/packet-tpkt.h (from /trunk/packet-tpkt.h:11400)
-   A /trunk/epan/dissectors/packet-tr.c (from /trunk/packet-tr.c:11400)
-   A /trunk/epan/dissectors/packet-tr.h (from /trunk/packet-tr.h:11400)
-   A /trunk/epan/dissectors/packet-trmac.c (from /trunk/packet-trmac.c:11400)
-   A /trunk/epan/dissectors/packet-tsp.c (from /trunk/packet-tsp.c:11400)
-   A /trunk/epan/dissectors/packet-tuxedo.c (from /trunk/packet-tuxedo.c:11400)
-   A /trunk/epan/dissectors/packet-tzsp.c (from /trunk/packet-tzsp.c:11400)
-   A /trunk/epan/dissectors/packet-ucp.c (from /trunk/packet-ucp.c:11400)
-   A /trunk/epan/dissectors/packet-udp.c (from /trunk/packet-udp.c:11400)
-   A /trunk/epan/dissectors/packet-udp.h (from /trunk/packet-udp.h:11400)
-   A /trunk/epan/dissectors/packet-v120.c (from /trunk/packet-v120.c:11400)
-   A /trunk/epan/dissectors/packet-vines.c (from /trunk/packet-vines.c:11400)
-   A /trunk/epan/dissectors/packet-vines.h (from /trunk/packet-vines.h:11400)
-   A /trunk/epan/dissectors/packet-vj.c (from /trunk/packet-vj.c:11400)
-   A /trunk/epan/dissectors/packet-vlan.c (from /trunk/packet-vlan.c:11400)
-   A /trunk/epan/dissectors/packet-vlan.h (from /trunk/packet-vlan.h:11400)
-   A /trunk/epan/dissectors/packet-vrrp.c (from /trunk/packet-vrrp.c:11400)
-   A /trunk/epan/dissectors/packet-vtp.c (from /trunk/packet-vtp.c:11400)
-   A /trunk/epan/dissectors/packet-wap.c (from /trunk/packet-wap.c:11400)
-   A /trunk/epan/dissectors/packet-wap.h (from /trunk/packet-wap.h:11400)
-   A /trunk/epan/dissectors/packet-wbxml.c (from /trunk/packet-wbxml.c:11400)
-   A /trunk/epan/dissectors/packet-wccp.c (from /trunk/packet-wccp.c:11400)
-   A /trunk/epan/dissectors/packet-wccp.h (from /trunk/packet-wccp.h:11400)
-   A /trunk/epan/dissectors/packet-wcp.c (from /trunk/packet-wcp.c:11400)
-   A /trunk/epan/dissectors/packet-wfleet-hdlc.c (from /trunk/packet-wfleet-hdlc.c:11400)
-   A /trunk/epan/dissectors/packet-who.c (from /trunk/packet-who.c:11400)
-   A /trunk/epan/dissectors/packet-wlancap.c (from /trunk/packet-wlancap.c:11400)
-   A /trunk/epan/dissectors/packet-wlancap.h (from /trunk/packet-wlancap.h:11400)
-   A /trunk/epan/dissectors/packet-wsp.c (from /trunk/packet-wsp.c:11400)
-   A /trunk/epan/dissectors/packet-wsp.h (from /trunk/packet-wsp.h:11400)
-   A /trunk/epan/dissectors/packet-wtls.c (from /trunk/packet-wtls.c:11400)
-   A /trunk/epan/dissectors/packet-wtls.h (from /trunk/packet-wtls.h:11400)
-   A /trunk/epan/dissectors/packet-wtp.c (from /trunk/packet-wtp.c:11400)
-   A /trunk/epan/dissectors/packet-wtp.h (from /trunk/packet-wtp.h:11400)
-   A /trunk/epan/dissectors/packet-x11-keysym.h (from /trunk/packet-x11-keysym.h:11400)
-   A /trunk/epan/dissectors/packet-x11-keysymdef.h (from /trunk/packet-x11-keysymdef.h:11400)
-   A /trunk/epan/dissectors/packet-x11.c (from /trunk/packet-x11.c:11400)
-   A /trunk/epan/dissectors/packet-x25.c (from /trunk/packet-x25.c:11400)
-   A /trunk/epan/dissectors/packet-x29.c (from /trunk/packet-x29.c:11400)
-   A /trunk/epan/dissectors/packet-xdmcp.c (from /trunk/packet-xdmcp.c:11400)
-   A /trunk/epan/dissectors/packet-xot.c (from /trunk/packet-xot.c:11400)
-   A /trunk/epan/dissectors/packet-xyplex.c (from /trunk/packet-xyplex.c:11400)
-   A /trunk/epan/dissectors/packet-yhoo.c (from /trunk/packet-yhoo.c:11400)
-   A /trunk/epan/dissectors/packet-ymsg.c (from /trunk/packet-ymsg.c:11400)
-   A /trunk/epan/dissectors/packet-ypbind.c (from /trunk/packet-ypbind.c:11400)
-   A /trunk/epan/dissectors/packet-ypbind.h (from /trunk/packet-ypbind.h:11400)
-   A /trunk/epan/dissectors/packet-yppasswd.c (from /trunk/packet-yppasswd.c:11400)
-   A /trunk/epan/dissectors/packet-yppasswd.h (from /trunk/packet-yppasswd.h:11400)
-   A /trunk/epan/dissectors/packet-ypserv.c (from /trunk/packet-ypserv.c:11400)
-   A /trunk/epan/dissectors/packet-ypserv.h (from /trunk/packet-ypserv.h:11400)
-   A /trunk/epan/dissectors/packet-ypxfr.c (from /trunk/packet-ypxfr.c:11400)
-   A /trunk/epan/dissectors/packet-ypxfr.h (from /trunk/packet-ypxfr.h:11400)
-   A /trunk/epan/dissectors/packet-zebra.c (from /trunk/packet-zebra.c:11400)
-   A /trunk/epan/dissectors/process-x11-fields.pl (from /trunk/process-x11-fields.pl:11400)
-   A /trunk/epan/dissectors/x11-fields (from /trunk/x11-fields:11400)
+   M /trunk/epan/addr_resolv.c
+   M /trunk/epan/dissectors/packet-acse.c
+   M /trunk/epan/dissectors/packet-aim-buddylist.c
+   M /trunk/epan/dissectors/packet-aim-chat.c
+   M /trunk/epan/dissectors/packet-aim-generic.c
+   M /trunk/epan/dissectors/packet-aim.c
+   M /trunk/epan/dissectors/packet-ansi_a.c
+   M /trunk/epan/dissectors/packet-atalk.c
+   M /trunk/epan/dissectors/packet-beep.c
+   M /trunk/epan/dissectors/packet-ber.c
+   M /trunk/epan/dissectors/packet-bgp.c
+   M /trunk/epan/dissectors/packet-bootp.c
+   M /trunk/epan/dissectors/packet-bssap.c
+   M /trunk/epan/dissectors/packet-bvlc.c
+   M /trunk/epan/dissectors/packet-cast.c
+   M /trunk/epan/dissectors/packet-chdlc.c
+   M /trunk/epan/dissectors/packet-clnp.c
+   M /trunk/epan/dissectors/packet-cops.c
+   M /trunk/epan/dissectors/packet-cpfi.c
+   M /trunk/epan/dissectors/packet-dcerpc-mapi.c
+   M /trunk/epan/dissectors/packet-dcerpc-messenger.c
+   M /trunk/epan/dissectors/packet-dcerpc-samr.c
+   M /trunk/epan/dissectors/packet-dcerpc.c
+   M /trunk/epan/dissectors/packet-diameter.c
+   M /trunk/epan/dissectors/packet-distcc.c
+   M /trunk/epan/dissectors/packet-dnp.c
+   M /trunk/epan/dissectors/packet-dns.c
+   M /trunk/epan/dissectors/packet-dsi.c
+   M /trunk/epan/dissectors/packet-eth.c
+   M /trunk/epan/dissectors/packet-fc.c
+   M /trunk/epan/dissectors/packet-fcip.c
+   M /trunk/epan/dissectors/packet-fcp.c
+   M /trunk/epan/dissectors/packet-fcsb3.c
+   M /trunk/epan/dissectors/packet-fcsp.c
+   M /trunk/epan/dissectors/packet-fddi.c
+   M /trunk/epan/dissectors/packet-fr.c
+   M /trunk/epan/dissectors/packet-frame.c
+   M /trunk/epan/dissectors/packet-ftam.c
+   M /trunk/epan/dissectors/packet-fw1.c
+   M /trunk/epan/dissectors/packet-gsm_a.c
+   M /trunk/epan/dissectors/packet-gsm_sms.c
+   M /trunk/epan/dissectors/packet-gsm_sms_ud.c
+   M /trunk/epan/dissectors/packet-gtp.c
+   M /trunk/epan/dissectors/packet-h225.c
+   M /trunk/epan/dissectors/packet-h245.c
+   M /trunk/epan/dissectors/packet-h450.c
+   M /trunk/epan/dissectors/packet-http.c
+   M /trunk/epan/dissectors/packet-ieee80211.c
+   M /trunk/epan/dissectors/packet-ip.c
+   M /trunk/epan/dissectors/packet-ipdc.c
+   M /trunk/epan/dissectors/packet-ipsec.c
+   M /trunk/epan/dissectors/packet-ipv6.c
+   M /trunk/epan/dissectors/packet-iscsi.c
+   M /trunk/epan/dissectors/packet-isns.c
+   M /trunk/epan/dissectors/packet-iua.c
+   M /trunk/epan/dissectors/packet-kerberos.c
+   M /trunk/epan/dissectors/packet-kpasswd.c
+   M /trunk/epan/dissectors/packet-laplink.c
+   M /trunk/epan/dissectors/packet-ldap.c
+   M /trunk/epan/dissectors/packet-ldp.c
+   M /trunk/epan/dissectors/packet-lwapp.c
+   M /trunk/epan/dissectors/packet-m2pa.c
+   M /trunk/epan/dissectors/packet-m2ua.c
+   M /trunk/epan/dissectors/packet-m3ua.c
+   M /trunk/epan/dissectors/packet-mdshdr.c
+   M /trunk/epan/dissectors/packet-mpls-echo.c
+   M /trunk/epan/dissectors/packet-mpls.c
+   M /trunk/epan/dissectors/packet-mq.c
+   M /trunk/epan/dissectors/packet-mtp3.c
+   M /trunk/epan/dissectors/packet-mtp3mg.c
+   M /trunk/epan/dissectors/packet-multipart.c
+   M /trunk/epan/dissectors/packet-mysql.c
+   M /trunk/epan/dissectors/packet-nbns.c
+   M /trunk/epan/dissectors/packet-ncp-nmas.c
+   M /trunk/epan/dissectors/packet-ncp.c
+   M /trunk/epan/dissectors/packet-ndmp.c
+   M /trunk/epan/dissectors/packet-ndps.c
+   M /trunk/epan/dissectors/packet-netbios.c
+   M /trunk/epan/dissectors/packet-netflow.c
+   M /trunk/epan/dissectors/packet-nfs.c
+   M /trunk/epan/dissectors/packet-nlm.c
+   M /trunk/epan/dissectors/packet-ntlmssp.c
+   M /trunk/epan/dissectors/packet-null.c
+   M /trunk/epan/dissectors/packet-per.c
+   M /trunk/epan/dissectors/packet-pgm.c
+   M /trunk/epan/dissectors/packet-ppp.c
+   M /trunk/epan/dissectors/packet-pres.c
+   M /trunk/epan/dissectors/packet-q931.c
+   M /trunk/epan/dissectors/packet-quake.c
+   M /trunk/epan/dissectors/packet-quake2.c
+   M /trunk/epan/dissectors/packet-quake3.c
+   M /trunk/epan/dissectors/packet-quakeworld.c
+   M /trunk/epan/dissectors/packet-radius.c
+   M /trunk/epan/dissectors/packet-raw.c
+   M /trunk/epan/dissectors/packet-rpc.c
+   M /trunk/epan/dissectors/packet-rsync.c
+   M /trunk/epan/dissectors/packet-rtcp.c
+   M /trunk/epan/dissectors/packet-rtp-events.c
+   M /trunk/epan/dissectors/packet-rtp.c
+   M /trunk/epan/dissectors/packet-rtsp.c
+   M /trunk/epan/dissectors/packet-sccp.c
+   M /trunk/epan/dissectors/packet-scsi.c
+   M /trunk/epan/dissectors/packet-sctp.c
+   M /trunk/epan/dissectors/packet-ses.c
+   M /trunk/epan/dissectors/packet-sigcomp.c
+   M /trunk/epan/dissectors/packet-sip.c
+   M /trunk/epan/dissectors/packet-skinny.c
+   M /trunk/epan/dissectors/packet-slsk.c
+   M /trunk/epan/dissectors/packet-smb.c
+   M /trunk/epan/dissectors/packet-smpp.c
+   M /trunk/epan/dissectors/packet-smtp.c
+   M /trunk/epan/dissectors/packet-sna.c
+   M /trunk/epan/dissectors/packet-snmp.c
+   M /trunk/epan/dissectors/packet-srvloc.c
+   M /trunk/epan/dissectors/packet-ssh.c
+   M /trunk/epan/dissectors/packet-ssl.c
+   M /trunk/epan/dissectors/packet-sua.c
+   M /trunk/epan/dissectors/packet-t38.c
+   M /trunk/epan/dissectors/packet-tacacs.c
+   M /trunk/epan/dissectors/packet-tali.c
+   M /trunk/epan/dissectors/packet-tcap.c
+   M /trunk/epan/dissectors/packet-tcp.c
+   M /trunk/epan/dissectors/packet-tds.c
+   M /trunk/epan/dissectors/packet-teredo.c
+   M /trunk/epan/dissectors/packet-tns.c
+   M /trunk/epan/dissectors/packet-tpkt.c
+   M /trunk/epan/dissectors/packet-tr.c
+   M /trunk/epan/dissectors/packet-udp.c
+   M /trunk/epan/dissectors/packet-vj.c
+   M /trunk/epan/dissectors/packet-wbxml.c
+   M /trunk/epan/dissectors/packet-x11.c
+   M /trunk/epan/dissectors/packet-x25.c
+   M /trunk/epan/dissectors/packet-xot.c
+   M /trunk/epan/dissectors/packet-ymsg.c
    M /trunk/epan/plugins.c
-   M /trunk/epan/to_str.c
+   A /trunk/epan/prefs.c (from /trunk/prefs.c:12112)
+   A /trunk/epan/prefs.h (from /trunk/prefs.h:12112)
    M /trunk/file.c
-   M /trunk/gtk/ansi_a_stat.c
-   M /trunk/gtk/ansi_map_stat.c
-   M /trunk/gtk/dcerpc_stat.c
-   M /trunk/gtk/endpoint_talkers_eth.c
-   M /trunk/gtk/endpoint_talkers_fc.c
-   M /trunk/gtk/endpoint_talkers_fddi.c
-   M /trunk/gtk/endpoint_talkers_ip.c
-   M /trunk/gtk/endpoint_talkers_ipx.c
-   M /trunk/gtk/endpoint_talkers_tcpip.c
-   M /trunk/gtk/endpoint_talkers_tr.c
-   M /trunk/gtk/endpoint_talkers_udpip.c
-   M /trunk/gtk/fc_stat.c
+   M /trunk/gtk/capture_dlg.c
+   M /trunk/gtk/capture_prefs.c
+   M /trunk/gtk/color_dlg.c
+   M /trunk/gtk/column_prefs.c
+   M /trunk/gtk/file_dlg.c
+   M /trunk/gtk/find_dlg.c
    M /trunk/gtk/follow_dlg.c
-   M /trunk/gtk/gsm_a_stat.c
-   M /trunk/gtk/gsm_map_stat.c
-   M /trunk/gtk/gsm_map_summary.c
-   M /trunk/gtk/h225_counter.c
-   M /trunk/gtk/h225_ras_srt.c
-   M /trunk/gtk/hostlist_eth.c
-   M /trunk/gtk/hostlist_fc.c
-   M /trunk/gtk/hostlist_fddi.c
-   M /trunk/gtk/hostlist_ip.c
-   M /trunk/gtk/hostlist_ipx.c
-   M /trunk/gtk/hostlist_tcpip.c
-   M /trunk/gtk/hostlist_tr.c
-   M /trunk/gtk/hostlist_udpip.c
-   M /trunk/gtk/http_stat.c
-   M /trunk/gtk/isup_stat.c
-   M /trunk/gtk/ldap_stat.c
-   M /trunk/gtk/mtp3_stat.c
-   M /trunk/gtk/mtp3_summary.c
-   M /trunk/gtk/rpc_progs.c
-   M /trunk/gtk/rpc_stat.c
-   M /trunk/gtk/rtp_analysis.c
-   M /trunk/gtk/rtp_stream.c
-   M /trunk/gtk/sip_stat.c
-   M /trunk/gtk/wsp_stat.c
-   M /trunk/ipproto.c
-   D /trunk/make-reg-dotc
-   D /trunk/make-reg-dotc.py
-   D /trunk/ncp2222.py
-   D /trunk/packet-3g-a11.c
-   D /trunk/packet-aarp.c
-   D /trunk/packet-acap.c
-   D /trunk/packet-acse.c
-   D /trunk/packet-acse.h
-   D /trunk/packet-afp.c
-   D /trunk/packet-afp.h
-   D /trunk/packet-afs-defs.h
-   D /trunk/packet-afs-macros.h
-   D /trunk/packet-afs-register-info.h
-   D /trunk/packet-afs.c
-   D /trunk/packet-afs.h
-   D /trunk/packet-aim-admin.c
-   D /trunk/packet-aim-adverts.c
-   D /trunk/packet-aim-bos.c
-   D /trunk/packet-aim-buddylist.c
-   D /trunk/packet-aim-chat.c
-   D /trunk/packet-aim-chatnav.c
-   D /trunk/packet-aim-directory.c
-   D /trunk/packet-aim-generic.c
-   D /trunk/packet-aim-icq.c
-   D /trunk/packet-aim-invitation.c
-   D /trunk/packet-aim-location.c
-   D /trunk/packet-aim-messaging.c
-   D /trunk/packet-aim-oft.c
-   D /trunk/packet-aim-popup.c
-   D /trunk/packet-aim-signon.c
-   D /trunk/packet-aim-ssi.c
-   D /trunk/packet-aim-stats.c
-   D /trunk/packet-aim-translate.c
-   D /trunk/packet-aim-userlookup.c
-   D /trunk/packet-aim.c
-   D /trunk/packet-aim.h
-   D /trunk/packet-ajp13.c
-   D /trunk/packet-alcap.c
-   D /trunk/packet-ans.c
-   D /trunk/packet-ansi_637.c
-   D /trunk/packet-ansi_683.c
-   D /trunk/packet-ansi_801.c
-   D /trunk/packet-ansi_a.c
-   D /trunk/packet-ansi_a.h
-   D /trunk/packet-ansi_map.c
-   D /trunk/packet-ansi_map.h
-   D /trunk/packet-aodv.c
-   D /trunk/packet-ap1394.c
-   D /trunk/packet-ap1394.h
-   D /trunk/packet-arcnet.c
-   D /trunk/packet-arcnet.h
-   D /trunk/packet-arp.c
-   D /trunk/packet-arp.h
-   D /trunk/packet-asap.c
-   D /trunk/packet-ascend.c
-   D /trunk/packet-asf.c
-   D /trunk/packet-atalk.c
-   D /trunk/packet-atalk.h
-   D /trunk/packet-atm.c
-   D /trunk/packet-atm.h
-   D /trunk/packet-auto_rp.c
-   D /trunk/packet-bacapp.c
-   D /trunk/packet-bacnet.c
-   D /trunk/packet-beep.c
-   D /trunk/packet-ber.c
-   D /trunk/packet-ber.h
-   D /trunk/packet-bfd.c
-   D /trunk/packet-bgp.c
-   D /trunk/packet-bgp.h
-   D /trunk/packet-bofl.c
-   D /trunk/packet-bootp.c
-   D /trunk/packet-bootparams.c
-   D /trunk/packet-bootparams.h
-   D /trunk/packet-bpdu.c
-   D /trunk/packet-brdwlk.c
-   D /trunk/packet-bssap.c
-   D /trunk/packet-bssap.h
-   D /trunk/packet-bssgp.c
-   D /trunk/packet-bvlc.c
-   D /trunk/packet-cast.c
-   D /trunk/packet-ccsds.c
-   D /trunk/packet-cdp.c
-   D /trunk/packet-cgmp.c
-   D /trunk/packet-chdlc.c
-   D /trunk/packet-chdlc.h
-   D /trunk/packet-cisco-oui.c
-   D /trunk/packet-clearcase.c
-   D /trunk/packet-clearcase.h
-   D /trunk/packet-clip.c
-   D /trunk/packet-clip.h
-   D /trunk/packet-clnp.c
-   D /trunk/packet-cops.c
-   D /trunk/packet-cosine.c
-   D /trunk/packet-cpfi.c
-   D /trunk/packet-cpha.c
-   D /trunk/packet-cups.c
-   D /trunk/packet-data.c
-   D /trunk/packet-data.h
-   D /trunk/packet-dccp.c
-   D /trunk/packet-dccp.h
-   D /trunk/packet-dcerpc-afs4int.c
-   D /trunk/packet-dcerpc-atsvc.c
-   D /trunk/packet-dcerpc-atsvc.h
-   D /trunk/packet-dcerpc-bossvr.c
-   D /trunk/packet-dcerpc-browser.c
-   D /trunk/packet-dcerpc-browser.h
-   D /trunk/packet-dcerpc-budb.c
-   D /trunk/packet-dcerpc-butc.c
-   D /trunk/packet-dcerpc-cds_clerkserver.c
-   D /trunk/packet-dcerpc-cds_solicit.c
-   D /trunk/packet-dcerpc-conv.c
-   D /trunk/packet-dcerpc-cprpc_server.c
-   D /trunk/packet-dcerpc-dce122.c
-   D /trunk/packet-dcerpc-dce122.h
-   D /trunk/packet-dcerpc-dcom.h
-   D /trunk/packet-dcerpc-dfs.c
-   D /trunk/packet-dcerpc-dfs.h
-   D /trunk/packet-dcerpc-dnsserver.c
-   D /trunk/packet-dcerpc-dnsserver.h
-   D /trunk/packet-dcerpc-drsuapi.c
-   D /trunk/packet-dcerpc-drsuapi.h
-   D /trunk/packet-dcerpc-dtsprovider.c
-   D /trunk/packet-dcerpc-dtsstime_req.c
-   D /trunk/packet-dcerpc-efs.c
-   D /trunk/packet-dcerpc-efs.h
-   D /trunk/packet-dcerpc-epm.c
-   D /trunk/packet-dcerpc-epm4.c
-   D /trunk/packet-dcerpc-eventlog.c
-   D /trunk/packet-dcerpc-eventlog.h
-   D /trunk/packet-dcerpc-fldb.c
-   D /trunk/packet-dcerpc-frsapi.c
-   D /trunk/packet-dcerpc-frsapi.h
-   D /trunk/packet-dcerpc-frsrpc.c
-   D /trunk/packet-dcerpc-frsrpc.h
-   D /trunk/packet-dcerpc-ftserver.c
-   D /trunk/packet-dcerpc-icl_rpc.c
-   D /trunk/packet-dcerpc-initshutdown.c
-   D /trunk/packet-dcerpc-initshutdown.h
-   D /trunk/packet-dcerpc-krb5rpc.c
-   D /trunk/packet-dcerpc-llb.c
-   D /trunk/packet-dcerpc-lsa-ds.c
-   D /trunk/packet-dcerpc-lsa.c
-   D /trunk/packet-dcerpc-lsa.h
-   D /trunk/packet-dcerpc-mapi.c
-   D /trunk/packet-dcerpc-mapi.h
-   D /trunk/packet-dcerpc-messenger.c
-   D /trunk/packet-dcerpc-mgmt.c
-   D /trunk/packet-dcerpc-ndr.c
-   D /trunk/packet-dcerpc-netlogon.c
-   D /trunk/packet-dcerpc-netlogon.h
-   D /trunk/packet-dcerpc-nspi.c
-   D /trunk/packet-dcerpc-nt.c
-   D /trunk/packet-dcerpc-nt.h
-   D /trunk/packet-dcerpc-oxid.c
-   D /trunk/packet-dcerpc-rdaclif.c
-   D /trunk/packet-dcerpc-reg.c
-   D /trunk/packet-dcerpc-reg.h
-   D /trunk/packet-dcerpc-remact.c
-   D /trunk/packet-dcerpc-rep_proc.c
-   D /trunk/packet-dcerpc-roverride.c
-   D /trunk/packet-dcerpc-rpriv.c
-   D /trunk/packet-dcerpc-rs_acct.c
-   D /trunk/packet-dcerpc-rs_attr.c
-   D /trunk/packet-dcerpc-rs_attr_schema.c
-   D /trunk/packet-dcerpc-rs_bind.c
-   D /trunk/packet-dcerpc-rs_misc.c
-   D /trunk/packet-dcerpc-rs_pgo.c
-   D /trunk/packet-dcerpc-rs_plcy.c
-   D /trunk/packet-dcerpc-rs_prop_acct.c
-   D /trunk/packet-dcerpc-rs_prop_acl.c
-   D /trunk/packet-dcerpc-rs_prop_attr.c
-   D /trunk/packet-dcerpc-rs_prop_pgo.c
-   D /trunk/packet-dcerpc-rs_prop_plcy.c
-   D /trunk/packet-dcerpc-rs_pwd_mgmt.c
-   D /trunk/packet-dcerpc-rs_repadm.c
-   D /trunk/packet-dcerpc-rs_replist.c
-   D /trunk/packet-dcerpc-rs_repmgr.c
-   D /trunk/packet-dcerpc-rs_unix.c
-   D /trunk/packet-dcerpc-rsec_login.c
-   D /trunk/packet-dcerpc-samr.c
-   D /trunk/packet-dcerpc-samr.h
-   D /trunk/packet-dcerpc-secidmap.c
-   D /trunk/packet-dcerpc-spoolss.c
-   D /trunk/packet-dcerpc-spoolss.h
-   D /trunk/packet-dcerpc-srvsvc.c
-   D /trunk/packet-dcerpc-srvsvc.h
-   D /trunk/packet-dcerpc-svcctl.c
-   D /trunk/packet-dcerpc-svcctl.h
-   D /trunk/packet-dcerpc-tapi.c
-   D /trunk/packet-dcerpc-tapi.h
-   D /trunk/packet-dcerpc-tkn4int.c
-   D /trunk/packet-dcerpc-trksvr.c
-   D /trunk/packet-dcerpc-ubikdisk.c
-   D /trunk/packet-dcerpc-ubikvote.c
-   D /trunk/packet-dcerpc-update.c
-   D /trunk/packet-dcerpc-wkssvc.c
-   D /trunk/packet-dcerpc-wkssvc.h
-   D /trunk/packet-dcerpc.c
-   D /trunk/packet-dcerpc.h
-   D /trunk/packet-dcm.c
-   D /trunk/packet-ddtp.c
-   D /trunk/packet-ddtp.h
-   D /trunk/packet-dec-bpdu.c
-   D /trunk/packet-dhcpv6.c
-   D /trunk/packet-diameter-defs.h
-   D /trunk/packet-diameter.c
-   D /trunk/packet-diffserv-mpls-common.c
-   D /trunk/packet-diffserv-mpls-common.h
-   D /trunk/packet-distcc.c
-   D /trunk/packet-dlsw.c
-   D /trunk/packet-dnp.c
-   D /trunk/packet-dns.c
-   D /trunk/packet-dns.h
-   D /trunk/packet-dsi.c
-   D /trunk/packet-dvmrp.c
-   D /trunk/packet-dvmrp.h
-   D /trunk/packet-e164.c
-   D /trunk/packet-e164.h
-   D /trunk/packet-eap.c
-   D /trunk/packet-eapol.c
-   D /trunk/packet-echo.c
-   D /trunk/packet-edonkey.c
-   D /trunk/packet-edonkey.h
-   D /trunk/packet-eigrp.c
-   D /trunk/packet-enc.c
-   D /trunk/packet-enip.c
-   D /trunk/packet-enrp.c
-   D /trunk/packet-esis.c
-   D /trunk/packet-esis.h
-   D /trunk/packet-eth.c
-   D /trunk/packet-eth.h
-   D /trunk/packet-etherip.c
-   D /trunk/packet-ethertype.c
-   D /trunk/packet-fc.c
-   D /trunk/packet-fc.h
-   D /trunk/packet-fcbls.h
-   D /trunk/packet-fcct.c
-   D /trunk/packet-fcct.h
-   D /trunk/packet-fcdns.c
-   D /trunk/packet-fcdns.h
-   D /trunk/packet-fcels.c
-   D /trunk/packet-fcels.h
-   D /trunk/packet-fcfcs.c
-   D /trunk/packet-fcfcs.h
-   D /trunk/packet-fcfzs.c
-   D /trunk/packet-fcfzs.h
-   D /trunk/packet-fcip.c
-   D /trunk/packet-fclctl.c
-   D /trunk/packet-fclctl.h
-   D /trunk/packet-fcp.c
-   D /trunk/packet-fcp.h
-   D /trunk/packet-fcsb3.c
-   D /trunk/packet-fcsb3.h
-   D /trunk/packet-fcsp.c
-   D /trunk/packet-fcsp.h
-   D /trunk/packet-fcswils.c
-   D /trunk/packet-fcswils.h
-   D /trunk/packet-fddi.c
-   D /trunk/packet-fddi.h
-   D /trunk/packet-fix.c
-   D /trunk/packet-fr.c
-   D /trunk/packet-frame.c
-   D /trunk/packet-frame.h
-   D /trunk/packet-ftam.c
-   D /trunk/packet-ftam.h
-   D /trunk/packet-ftp.c
-   D /trunk/packet-fw1.c
-   D /trunk/packet-gift.c
-   D /trunk/packet-giop.c
-   D /trunk/packet-giop.h
-   D /trunk/packet-gmrp.c
-   D /trunk/packet-gnutella.c
-   D /trunk/packet-gnutella.h
-   D /trunk/packet-gprs-llc.c
-   D /trunk/packet-gprs-ns.c
-   D /trunk/packet-gre.c
-   D /trunk/packet-gsm_a.c
-   D /trunk/packet-gsm_a.h
-   D /trunk/packet-gsm_map.c
-   D /trunk/packet-gsm_map.h
-   D /trunk/packet-gsm_sms.c
-   D /trunk/packet-gsm_sms.h
-   D /trunk/packet-gsm_sms_ud.c
-   D /trunk/packet-gsm_ss.c
-   D /trunk/packet-gsm_ss.h
-   D /trunk/packet-gssapi.c
-   D /trunk/packet-gssapi.h
-   D /trunk/packet-gtp.c
-   D /trunk/packet-gtp.h
-   D /trunk/packet-gvrp.c
-   D /trunk/packet-h1.c
-   D /trunk/packet-h225.c
-   D /trunk/packet-h225.h
-   D /trunk/packet-h235.c
-   D /trunk/packet-h235.h
-   D /trunk/packet-h245.c
-   D /trunk/packet-h245.h
-   D /trunk/packet-h261.c
-   D /trunk/packet-h263.c
-   D /trunk/packet-h450.c
-   D /trunk/packet-hclnfsd.c
-   D /trunk/packet-hclnfsd.h
-   D /trunk/packet-hpext.c
-   D /trunk/packet-hpext.h
-   D /trunk/packet-hsrp.c
-   D /trunk/packet-http.c
-   D /trunk/packet-http.h
-   D /trunk/packet-hyperscsi.c
-   D /trunk/packet-iapp.c
-   D /trunk/packet-iax2.c
-   D /trunk/packet-iax2.h
-   D /trunk/packet-ib.c
-   D /trunk/packet-icap.c
-   D /trunk/packet-icmpv6.c
-   D /trunk/packet-icp.c
-   D /trunk/packet-icq.c
-   D /trunk/packet-ieee80211.c
-   D /trunk/packet-ieee80211.h
-   D /trunk/packet-ieee8023.c
-   D /trunk/packet-ieee8023.h
-   D /trunk/packet-igap.c
-   D /trunk/packet-igap.h
-   D /trunk/packet-igmp.c
-   D /trunk/packet-igmp.h
-   D /trunk/packet-igrp.c
-   D /trunk/packet-image-gif.c
-   D /trunk/packet-image-jfif.c
-   D /trunk/packet-imap.c
-   D /trunk/packet-ip.c
-   D /trunk/packet-ip.h
-   D /trunk/packet-ipdc.c
-   D /trunk/packet-ipdc.h
-   D /trunk/packet-ipfc.c
-   D /trunk/packet-ipfc.h
-   D /trunk/packet-ipmi.c
-   D /trunk/packet-ipp.c
-   D /trunk/packet-ipsec-udp.c
-   D /trunk/packet-ipsec.c
-   D /trunk/packet-ipsec.h
-   D /trunk/packet-ipv6.c
-   D /trunk/packet-ipv6.h
-   D /trunk/packet-ipvs-syncd.c
-   D /trunk/packet-ipx.c
-   D /trunk/packet-ipx.h
-   D /trunk/packet-ipxwan.c
-   D /trunk/packet-irc.c
-   D /trunk/packet-isakmp.c
-   D /trunk/packet-iscsi.c
-   D /trunk/packet-isdn.c
-   D /trunk/packet-isis-clv.c
-   D /trunk/packet-isis-clv.h
-   D /trunk/packet-isis-hello.c
-   D /trunk/packet-isis-hello.h
-   D /trunk/packet-isis-lsp.c
-   D /trunk/packet-isis-lsp.h
-   D /trunk/packet-isis-snp.c
-   D /trunk/packet-isis-snp.h
-   D /trunk/packet-isis.c
-   D /trunk/packet-isis.h
-   D /trunk/packet-isl.c
-   D /trunk/packet-isl.h
-   D /trunk/packet-ismp.c
-   D /trunk/packet-isns.c
-   D /trunk/packet-isup.c
-   D /trunk/packet-isup.h
-   D /trunk/packet-iua.c
-   D /trunk/packet-jabber.c
-   D /trunk/packet-kadm5.c
-   D /trunk/packet-kerberos.c
-   D /trunk/packet-kerberos.h
-   D /trunk/packet-klm.c
-   D /trunk/packet-klm.h
-   D /trunk/packet-kpasswd.c
-   D /trunk/packet-l2tp.c
-   D /trunk/packet-lapb.c
-   D /trunk/packet-lapbether.c
-   D /trunk/packet-lapd.c
-   D /trunk/packet-laplink.c
-   D /trunk/packet-ldap.c
-   D /trunk/packet-ldap.h
-   D /trunk/packet-ldp.c
-   D /trunk/packet-ldp.h
-   D /trunk/packet-llc.c
-   D /trunk/packet-llc.h
-   D /trunk/packet-lmi.c
-   D /trunk/packet-lmp.c
-   D /trunk/packet-lpd.c
-   D /trunk/packet-lwapp.c
-   D /trunk/packet-m2pa.c
-   D /trunk/packet-m2tp.c
-   D /trunk/packet-m2ua.c
-   D /trunk/packet-m3ua.c
-   D /trunk/packet-mbtcp.c
-   D /trunk/packet-mdshdr.c
-   D /trunk/packet-media.c
-   D /trunk/packet-mip.c
-   D /trunk/packet-mip6.c
-   D /trunk/packet-mip6.h
-   D /trunk/packet-mmse.c
-   D /trunk/packet-mount.c
-   D /trunk/packet-mount.h
-   D /trunk/packet-mpeg1.c
-   D /trunk/packet-mpls-echo.c
-   D /trunk/packet-mpls.c
-   D /trunk/packet-mq-pcf.c
-   D /trunk/packet-mq.c
-   D /trunk/packet-mq.h
-   D /trunk/packet-mrdisc.c
-   D /trunk/packet-mrdisc.h
-   D /trunk/packet-msdp.c
-   D /trunk/packet-msn-messenger.c
-   D /trunk/packet-msnip.c
-   D /trunk/packet-msnip.h
-   D /trunk/packet-msproxy.c
-   D /trunk/packet-mtp2.c
-   D /trunk/packet-mtp3.c
-   D /trunk/packet-mtp3.h
-   D /trunk/packet-mtp3mg.c
-   D /trunk/packet-multipart.c
-   D /trunk/packet-mysql.c
-   D /trunk/packet-nbipx.c
-   D /trunk/packet-nbns.c
-   D /trunk/packet-ncp-int.h
-   D /trunk/packet-ncp-nmas.c
-   D /trunk/packet-ncp-nmas.h
-   D /trunk/packet-ncp.c
-   D /trunk/packet-ncp2222.inc
-   D /trunk/packet-ndmp.c
-   D /trunk/packet-ndps.c
-   D /trunk/packet-ndps.h
-   D /trunk/packet-netbios.c
-   D /trunk/packet-netbios.h
-   D /trunk/packet-netflow.c
-   D /trunk/packet-nfs.c
-   D /trunk/packet-nfs.h
-   D /trunk/packet-nfsacl.c
-   D /trunk/packet-nfsauth.c
-   D /trunk/packet-nisplus.c
-   D /trunk/packet-nisplus.h
-   D /trunk/packet-nlm.c
-   D /trunk/packet-nlm.h
-   D /trunk/packet-nlsp.c
-   D /trunk/packet-nntp.c
-   D /trunk/packet-nt-oui.c
-   D /trunk/packet-nt-sonmp.c
-   D /trunk/packet-nt-tpcp.c
-   D /trunk/packet-ntlmssp.c
-   D /trunk/packet-ntp.c
-   D /trunk/packet-ntp.h
-   D /trunk/packet-null.c
-   D /trunk/packet-null.h
-   D /trunk/packet-olsr.c
-   D /trunk/packet-osi-options.c
-   D /trunk/packet-osi-options.h
-   D /trunk/packet-osi.c
-   D /trunk/packet-osi.h
-   D /trunk/packet-ospf.c
-   D /trunk/packet-pcnfsd.c
-   D /trunk/packet-pcnfsd.h
-   D /trunk/packet-per.c
-   D /trunk/packet-per.h
-   D /trunk/packet-pflog.c
-   D /trunk/packet-pflog.h
-   D /trunk/packet-pgm.c
-   D /trunk/packet-pim.c
-   D /trunk/packet-pim.h
-   D /trunk/packet-pktc.c
-   D /trunk/packet-pktc.h
-   D /trunk/packet-pop.c
-   D /trunk/packet-portmap.c
-   D /trunk/packet-portmap.h
-   D /trunk/packet-postgresql.c
-   D /trunk/packet-ppp.c
-   D /trunk/packet-ppp.h
-   D /trunk/packet-pppoe.c
-   D /trunk/packet-pptp.c
-   D /trunk/packet-pres.c
-   D /trunk/packet-pres.h
-   D /trunk/packet-prism.c
-   D /trunk/packet-prism.h
-   D /trunk/packet-ptp.c
-   D /trunk/packet-q2931.c
-   D /trunk/packet-q931.c
-   D /trunk/packet-q931.h
-   D /trunk/packet-q933.c
-   D /trunk/packet-qllc.c
-   D /trunk/packet-quake.c
-   D /trunk/packet-quake2.c
-   D /trunk/packet-quake3.c
-   D /trunk/packet-quakeworld.c
-   D /trunk/packet-radiotap.c
-   D /trunk/packet-radiotap.h
-   D /trunk/packet-radius.c
-   D /trunk/packet-ranap.c
-   D /trunk/packet-raw.c
-   D /trunk/packet-raw.h
-   D /trunk/packet-rip.c
-   D /trunk/packet-ripng.c
-   D /trunk/packet-ripng.h
-   D /trunk/packet-rlogin.c
-   D /trunk/packet-rmcp.c
-   D /trunk/packet-rmi.c
-   D /trunk/packet-rmi.h
-   D /trunk/packet-rmp.c
-   D /trunk/packet-rpc.c
-   D /trunk/packet-rpc.h
-   D /trunk/packet-rpl.c
-   D /trunk/packet-rquota.c
-   D /trunk/packet-rquota.h
-   D /trunk/packet-rsh.c
-   D /trunk/packet-rstat.c
-   D /trunk/packet-rsvp.c
-   D /trunk/packet-rsvp.h
-   D /trunk/packet-rsync.c
-   D /trunk/packet-rtcp.c
-   D /trunk/packet-rtcp.h
-   D /trunk/packet-rtp-events.c
-   D /trunk/packet-rtp-events.h
-   D /trunk/packet-rtp.c
-   D /trunk/packet-rtp.h
-   D /trunk/packet-rtps.c
-   D /trunk/packet-rtps.h
-   D /trunk/packet-rtsp.c
-   D /trunk/packet-rwall.c
-   D /trunk/packet-rwall.h
-   D /trunk/packet-rx.c
-   D /trunk/packet-rx.h
-   D /trunk/packet-sadmind.c
-   D /trunk/packet-sap.c
-   D /trunk/packet-sccp.c
-   D /trunk/packet-sccpmg.c
-   D /trunk/packet-scsi.c
-   D /trunk/packet-scsi.h
-   D /trunk/packet-sctp.c
-   D /trunk/packet-sctp.h
-   D /trunk/packet-sdlc.c
-   D /trunk/packet-sdp.c
-   D /trunk/packet-sebek.c
-   D /trunk/packet-ses.c
-   D /trunk/packet-ses.h
-   D /trunk/packet-sflow.c
-   D /trunk/packet-sigcomp.c
-   D /trunk/packet-sip.c
-   D /trunk/packet-sip.h
-   D /trunk/packet-sipfrag.c
-   D /trunk/packet-skinny.c
-   D /trunk/packet-slimp3.c
-   D /trunk/packet-sll.c
-   D /trunk/packet-sll.h
-   D /trunk/packet-slowprotocols.c
-   D /trunk/packet-slsk.c
-   D /trunk/packet-smb-browse.c
-   D /trunk/packet-smb-browse.h
-   D /trunk/packet-smb-common.c
-   D /trunk/packet-smb-common.h
-   D /trunk/packet-smb-logon.c
-   D /trunk/packet-smb-mailslot.c
-   D /trunk/packet-smb-mailslot.h
-   D /trunk/packet-smb-pipe.c
-   D /trunk/packet-smb-pipe.h
-   D /trunk/packet-smb-sidsnooping.c
-   D /trunk/packet-smb-sidsnooping.h
-   D /trunk/packet-smb.c
-   D /trunk/packet-smpp.c
-   D /trunk/packet-smtp.c
-   D /trunk/packet-sna.c
-   D /trunk/packet-sna.h
-   D /trunk/packet-snaeth.c
-   D /trunk/packet-sndcp.c
-   D /trunk/packet-snmp.c
-   D /trunk/packet-snmp.h
-   D /trunk/packet-socks.c
-   D /trunk/packet-spnego.c
-   D /trunk/packet-spray.c
-   D /trunk/packet-spray.h
-   D /trunk/packet-srvloc.c
-   D /trunk/packet-sscop.c
-   D /trunk/packet-ssh.c
-   D /trunk/packet-ssl.c
-   D /trunk/packet-stat-notify.c
-   D /trunk/packet-stat-notify.h
-   D /trunk/packet-stat.c
-   D /trunk/packet-stat.h
-   D /trunk/packet-stun.c
-   D /trunk/packet-sua.c
-   D /trunk/packet-symantec.c
-   D /trunk/packet-syslog.c
-   D /trunk/packet-t38.c
-   D /trunk/packet-tacacs.c
-   D /trunk/packet-tacacs.h
-   D /trunk/packet-tcap.c
-   D /trunk/packet-tcap.h
-   D /trunk/packet-tcp.c
-   D /trunk/packet-tcp.h
-   D /trunk/packet-tds.c
-   D /trunk/packet-teimanagement.c
-   D /trunk/packet-telnet.c
-   D /trunk/packet-teredo.c
-   D /trunk/packet-text-media.c
-   D /trunk/packet-tftp.c
-   D /trunk/packet-time.c
-   D /trunk/packet-tns.c
-   D /trunk/packet-tns.h
-   D /trunk/packet-tpkt.c
-   D /trunk/packet-tpkt.h
-   D /trunk/packet-tr.c
-   D /trunk/packet-tr.h
-   D /trunk/packet-trmac.c
-   D /trunk/packet-tsp.c
-   D /trunk/packet-tuxedo.c
-   D /trunk/packet-tzsp.c
-   D /trunk/packet-ucp.c
-   D /trunk/packet-udp.c
-   D /trunk/packet-udp.h
-   D /trunk/packet-v120.c
-   D /trunk/packet-vines.c
-   D /trunk/packet-vines.h
-   D /trunk/packet-vj.c
-   D /trunk/packet-vlan.c
-   D /trunk/packet-vlan.h
-   D /trunk/packet-vrrp.c
-   D /trunk/packet-vtp.c
-   D /trunk/packet-wap.c
-   D /trunk/packet-wap.h
-   D /trunk/packet-wbxml.c
-   D /trunk/packet-wccp.c
-   D /trunk/packet-wccp.h
-   D /trunk/packet-wcp.c
-   D /trunk/packet-wfleet-hdlc.c
-   D /trunk/packet-who.c
-   D /trunk/packet-wlancap.c
-   D /trunk/packet-wlancap.h
-   D /trunk/packet-wsp.c
-   D /trunk/packet-wsp.h
-   D /trunk/packet-wtls.c
-   D /trunk/packet-wtls.h
-   D /trunk/packet-wtp.c
-   D /trunk/packet-wtp.h
-   D /trunk/packet-x11-keysym.h
-   D /trunk/packet-x11-keysymdef.h
-   D /trunk/packet-x11.c
-   D /trunk/packet-x25.c
-   D /trunk/packet-x29.c
-   D /trunk/packet-xdmcp.c
-   D /trunk/packet-xot.c
-   D /trunk/packet-xyplex.c
-   D /trunk/packet-yhoo.c
-   D /trunk/packet-ymsg.c
-   D /trunk/packet-ypbind.c
-   D /trunk/packet-ypbind.h
-   D /trunk/packet-yppasswd.c
-   D /trunk/packet-yppasswd.h
-   D /trunk/packet-ypserv.c
-   D /trunk/packet-ypserv.h
-   D /trunk/packet-ypxfr.c
-   D /trunk/packet-ypxfr.h
-   D /trunk/packet-zebra.c
-   M /trunk/plugins/giop/packet-coseventcomm.c
-   M /trunk/plugins/giop/packet-cosnaming.c
+   M /trunk/gtk/font_utils.c
+   M /trunk/gtk/gui_prefs.c
+   M /trunk/gtk/help_dlg.c
+   M /trunk/gtk/layout_prefs.c
+   M /trunk/gtk/main.c
+   M /trunk/gtk/menu.c
+   M /trunk/gtk/nameres_prefs.c
+   M /trunk/gtk/packet_list.c
+   M /trunk/gtk/packet_win.c
+   M /trunk/gtk/prefs_dlg.c
+   M /trunk/gtk/print_dlg.c
+   M /trunk/gtk/print_prefs.c
+   M /trunk/gtk/proto_dlg.c
+   M /trunk/gtk/proto_draw.c
+   M /trunk/gtk/recent.c
+   M /trunk/gtk/stream_prefs.c
+   M /trunk/gtk/supported_protos_dlg.c
+   M /trunk/gtk/toolbar.c
+   M /trunk/gtk/ui_util.c
+   M /trunk/gtk/webbrowser.c
+   M /trunk/plugins/acn/packet-acn.c
+   M /trunk/plugins/artnet/packet-artnet.c
+   M /trunk/plugins/asn1/packet-asn1.c
+   M /trunk/plugins/enttec/packet-enttec.c
    M /trunk/plugins/gryphon/packet-gryphon.c
+   M /trunk/plugins/lwres/packet-lwres.c
+   M /trunk/plugins/megaco/packet-megaco.c
+   M /trunk/plugins/mgcp/packet-mgcp.c
+   M /trunk/plugins/opsi/packet-opsi.c
+   M /trunk/plugins/pcli/packet-pcli.c
    M /trunk/plugins/plugin_api.h
    M /trunk/plugins/plugin_api_list.c
-   M /trunk/print.c
-   D /trunk/process-x11-fields.pl
-   M /trunk/reassemble.c
-   M /trunk/tap-ansi_astat.c
-   M /trunk/tap-dcerpcstat.c
-   M /trunk/tap-gsm_astat.c
-   M /trunk/tap-h225counter.c
-   M /trunk/tap-h225rassrt.c
-   M /trunk/tap-httpstat.c
-   M /trunk/tap-iousers.c
-   M /trunk/tap-rpcprogs.c
-   M /trunk/tap-rpcstat.c
-   M /trunk/tap-sipstat.c
-   M /trunk/tap-smbsids.c
-   M /trunk/tap-wspstat.c
-   D /trunk/x11-fields
+   D /trunk/prefs.c
+   D /trunk/prefs.h
+   M /trunk/tethereal.c
 
-Move dissectors to epan/dissectors directory.
+Move prefs.c and prefs.h into the epan subdirectory.
 
-Also move ncp222.py, x11-fields, process-x11-fields.pl,
-make-reg-dotc, and make-reg-dotc.py.
+------------------------------------------------------------------------
+r12114 | guy | 2004-09-27 17:32:09 -0500 (Mon, 27 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/gtk/toolbar.c
 
-Adjust #include lines in files that include packet-*.h
-files.
+"ethereal_stock_icons()" isn't used outside "gtk/toolbar.c" (and should
+presumably only be called once in any case), so make it static.
 
 ------------------------------------------------------------------------
-r11409 | ulfl | 2004-07-18 10:52:21 -0500 (Sun, 18 Jul 2004) | 1 line
+r12113 | guy | 2004-09-27 17:21:31 -0500 (Mon, 27 Sep 2004) | 8 lines
 Changed paths:
-   D /trunk/gtk2
+   M /trunk/gtk/compat_macros.h
+
+At least in the screenshot at
+
+	http://ftp.gnome.org/pub/GNOME/teams/marketing/en/2004/two-eight-screenshots/html/g27-openwithhal.png
+
+a "browse" button in GNOME has a label "Browse", and I think that's the
+case in at least some Windows applications as well, so give browse
+buttons "Browse" as a text label.
 
-As the gtk2 directory is no longer needed (GTK1 and 2 are using the same sources from gtk dir and conditional compilation for a long time now), and we are using subversion now, it should be safe to remove this dir without loosing all the history.
 ------------------------------------------------------------------------
-r11408 | guy | 2004-07-17 23:03:26 -0500 (Sat, 17 Jul 2004) | 3 lines
+r12112 | ulfl | 2004-09-27 14:44:24 -0500 (Mon, 27 Sep 2004) | 1 line
 Changed paths:
-   M /trunk/packet-gssapi.h
-   M /trunk/packet-kerberos.c
+   M /trunk/gtk/compat_macros.h
 
-Declare "wrap_dissect_gssapi_verf()" in "packet-gssapi.h", and, in
-"packet-kerberos.c", get the declaration from that header.
+As the GTK Wimp default theme (since 0.6.1) won't display any icons in buttons any longer (which is typical for win applications), the browse button won't display anything for GTK2 now. Add some ... into it, which is also looking ok together with the stock icon on other platforms.
+------------------------------------------------------------------------
+r12111 | ulfl | 2004-09-27 12:27:27 -0500 (Mon, 27 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/packaging/nsis/Makefile.nmake
 
+removed well_known.txt
 ------------------------------------------------------------------------
-r11407 | guy | 2004-07-17 23:01:23 -0500 (Sat, 17 Jul 2004) | 4 lines
+r12110 | guy | 2004-09-27 03:30:25 -0500 (Mon, 27 Sep 2004) | 4 lines
 Changed paths:
-   M /trunk/packet-gssapi.c
+   M /trunk/plugins/asn1/packet-asn1.c
 
-Use -1, rather than "tvb_length_remaining(tvb, offset)", in
-"tvb_new_subset()" calls with an offset of "offset", so that the
-reported length is set appropriately.
+Routines called by "g_node_traverse()" return a Boolean - FALSE to
+continue traversing, TRUE to stop traversing - so make
+"free_node_data()" return FALSE.
 
 ------------------------------------------------------------------------
-r11406 | guy | 2004-07-17 22:46:34 -0500 (Sat, 17 Jul 2004) | 8 lines
+r12109 | guy | 2004-09-26 20:11:23 -0500 (Sun, 26 Sep 2004) | 10 lines
 Changed paths:
-   M /trunk/packet-dcerpc.c
-   M /trunk/packet-dcerpc.h
-   M /trunk/packet-gssapi.c
-   M /trunk/packet-kerberos.c
+   M /trunk/capture-wpcap.c
 
-From Jean-Baptiste Marchand:
+If "HAVE_PCAP_DATALINK_NAME_TO_VAL" is defined - i.e., if we're built
+with a version of WinPcap that has "pcap_datalink_name_to_val()" - then,
+if the version of WinPcap we've loaded doesn't have
+"pcap_datalink_name_to_val()", supply our own version.  Do the
+equivalent for "pcap_datalink_val_to_name()".
+
+We do that so that we can build Ethereal with a recent version of
+WinPcap, so that it uses the new APIs in newer versions, and still have
+it work with older versions.
 
-	add identification for various Microsoft Security Service
-	Providers in DCE RPC;
+------------------------------------------------------------------------
+r12108 | guy | 2004-09-26 17:30:46 -0500 (Sun, 26 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/acinclude.m4
 
-	for the Kerberos SSP, disect AP_REQ and AP_REP tokens in DCE RPC
-	Bind requests.
+Explicitly indicate when we're doing tests to see if UCD SNMP contains
+sprint_realloc_objid(), and the extra libraries we're using with the
+tests, along the lines of what we do with the Kerberos 5 library.
 
 ------------------------------------------------------------------------
-r11405 | guy | 2004-07-17 22:34:37 -0500 (Sat, 17 Jul 2004) | 3 lines
+r12107 | guy | 2004-09-26 17:28:23 -0500 (Sun, 26 Sep 2004) | 2 lines
 Changed paths:
-   M /trunk/packet-ssl.c
+   M /trunk/configure.in
 
-From Marco van den Bovenkamp: add the Sun elliptic curve and
-Cambellia-based cipher suites.
+Fix a typo.
 
 ------------------------------------------------------------------------
-r11404 | guy | 2004-07-17 21:56:29 -0500 (Sat, 17 Jul 2004) | 12 lines
+r12106 | guy | 2004-09-26 15:30:44 -0500 (Sun, 26 Sep 2004) | 12 lines
 Changed paths:
-   M /trunk/gtk/capture_if_dlg.c
+   M /trunk/acinclude.m4
+   M /trunk/configure.in
 
-Add some comments, and expand on a comment (if "pcap_stats()" returns
-counts since the last call, not since the beginning of the capture, on
-Windows, that's a bug - and that bug *does* exist on some UN*Xes).
+In the SNMP tests, we're using AC_TRY_LINK to avoid caching the results
+of the test for sprint_realloc_objid() (so that a failure to find it
+when we're not linking with extra libraries doesn't cause us to assume
+we won't find it if we *do* link with extra libraries), so
+"ac_cv_lib_snmp_sprint_realloc_objid" doesn't get set - set our own
+variable for that.
 
-Clean up indentation.
+Use AC_TRY_LINK rather than AC_CHECK_LIB in the Kerberos tests when
+checking for krb_k5_resolve(), to avoid caching the results.
 
-Use the minimum snapshot length, not the maximum snapshot length, when
-opening a network interface to keep track of how many packets are
-arriving on it (that might cause packet data to be discarded rather than
-buffering it, reducing the overhead of running all those captures from
-which we don't actually grab any packets.
+Improve the messages printed in the Kerberos tests to give more detail.
 
 ------------------------------------------------------------------------
-r11403 | guy | 2004-07-17 21:43:18 -0500 (Sat, 17 Jul 2004) | 2 lines
+r12105 | guy | 2004-09-25 23:00:20 -0500 (Sat, 25 Sep 2004) | 11 lines
 Changed paths:
-   M /trunk/gtk/capture_if_dlg.c
+   M /trunk/acinclude.m4
+   M /trunk/configure.in
 
-Not all interfaces have descriptions.
+Clean up a bunch of cruft in --with-ssl; make it more resemble other
+--with flags.
+
+Report, in the messages at the end of the configure script, whether
+we're building with the SSL library.
+
+If we fail to find "sprint_realloc_objid()" when linking with a
+particular library, and --with-ssl wasn't specified, try linking with
+-lcrypto as well and, if that succeeds, fail with an indication that UCD
+SNMP requires -lcrypto but --with-ssl wasn't specified.
 
 ------------------------------------------------------------------------
-r11402 | guy | 2004-07-17 21:34:45 -0500 (Sat, 17 Jul 2004) | 6 lines
+r12104 | guy | 2004-09-25 19:26:06 -0500 (Sat, 25 Sep 2004) | 5 lines
 Changed paths:
-   M /trunk/pcap-util-int.h
-   M /trunk/pcap-util-unix.c
-   M /trunk/pcap-util.c
+   M /trunk/acinclude.m4
+
+Explicitly test whether we need -lresolv in order to link with -lkrb5. 
+Include -lresolv if we do, and don't include it if we don't.
+
+Clean up some other things in the -lkrb5 macro.
+
+------------------------------------------------------------------------
+r12103 | guy | 2004-09-25 18:58:42 -0500 (Sat, 25 Sep 2004) | 7 lines
+Changed paths:
+   M /trunk/acinclude.m4
+
+For annoying licensing reasons, we don't want to use -lcrypto unless the
+user explicitly says to do so by using --with-ssl.  However, we *still*
+don't want to just blithely replace -lcrypto with SSL_LIBS, so, if
+KRB5_LIBS contains "-lcrypto" but SSL_LIBS isn't set to a non-empty
+string, we report an error (the user can than either configure without
+Kerberos or with -lcrypto).
+
+------------------------------------------------------------------------
+r12102 | guy | 2004-09-25 17:50:58 -0500 (Sat, 25 Sep 2004) | 9 lines
+Changed paths:
+   M /trunk/gtk/prefs_dlg.c
+
+When applying preferences, we have to apply the protocol preferences
+before applying any other preferences, as, before we've applied them,
+the internal state of the preferences in some dissectors might be
+inconsistent (for example, the 802.11 dissector might've had its
+number-of-WEP-keys preference increased but might not yet have allocated
+a table for the WEP keys), and, as "gui_prefs_apply()" could cause a
+redissection when redisplaying, that could cause dissectors to
+malfunction (e.g., crash).
+
+------------------------------------------------------------------------
+r12101 | guy | 2004-09-25 05:36:08 -0500 (Sat, 25 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-loop.c
+
+Fetch the function from the correct offset.
+
+------------------------------------------------------------------------
+r12100 | ulfl | 2004-09-25 05:15:08 -0500 (Sat, 25 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/help/Makefile.am
+   M /trunk/help/toc
+   D /trunk/help/well_known.txt
+   M /trunk/packaging/nsis/ethereal.nsi
+
+removed "Well Known" help page, as the content (and far more than that) moved to the wiki.
+------------------------------------------------------------------------
+r12099 | guy | 2004-09-25 04:33:53 -0500 (Sat, 25 Sep 2004) | 14 lines
+Changed paths:
+   M /trunk/acinclude.m4
+
+Don't just add "-lresolv" to KRB5_LIBS if it's missing - on some
+platforms, it's missing because it's not needed, which is good because
+it's not even *present* on those platforms (the resolver functions are
+built into libc).  If there really are platforms where krb5-config is
+broken to the extent that it doesn't list -lresolv when it's required,
+the way to fix that is to try building a program with Heimdal and just
+the krb5-config libraries and, if that fails, try building with those
+libraries and -lresolv - if that works, add -lresolv to the list of
+libraries.
+
+Don't just replace -lcrypto with SSL_LIBS in KRB5_LIBS, as SSL_LIBS
+might not contain any libraries - replace it only if SSL_LIBS is defined
+as something.
 
-Get IPv4 addresses and the loopback flag if we don't have
-"pcap_findalldevs()".
+------------------------------------------------------------------------
+r12098 | guy | 2004-09-25 04:17:12 -0500 (Sat, 25 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-loop.c
+
+What part of "least significant octet first" do you not understand? :-) 
+(The part I didn't bother to notice.... :-))
+
+------------------------------------------------------------------------
+r12097 | ulfl | 2004-09-25 03:36:07 -0500 (Sat, 25 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/developer-guide.xml
+   D /trunk/docbook/dg-src
+   A /trunk/docbook/edg_src (from /trunk/docbook/dg-src:12092)
+   A /trunk/docbook/eug_src (from /trunk/docbook/ug-src:12092)
+   D /trunk/docbook/ug-src
+   M /trunk/docbook/user-guide.xml
+
+renamed dirs dg-src and ug-src to match output dirnames
+------------------------------------------------------------------------
+r12096 | guy | 2004-09-25 03:03:23 -0500 (Sat, 25 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-gre.c
+
+From packet steve: label the GRE key as "GRE Key", so that
+post-processing scripts can more easily distinguish it from other keys.
+
+------------------------------------------------------------------------
+r12095 | guy | 2004-09-25 03:01:00 -0500 (Sat, 25 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-loop.c
+
+Fetch the handle for the data dissector, as we use it....
+
+------------------------------------------------------------------------
+r12094 | guy | 2004-09-25 02:43:12 -0500 (Sat, 25 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/libethereal.def
+
+From Tomas Kukosa: export ether_to_str() from libethereal.dll.
+
+------------------------------------------------------------------------
+r12093 | guy | 2004-09-25 02:41:58 -0500 (Sat, 25 Sep 2004) | 6 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-snmp.c
+
+From Tomas Kukosa:
+
+	- pass only value (not tag and length) to subdissectors from the
+	  snmp.variable_oid table
+	- register the SNMP dissector
+
+------------------------------------------------------------------------
+r12092 | sahlberg | 2004-09-24 21:44:45 -0500 (Fri, 24 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-ber.c
+
+fix bug in handling of offset for  integers longer than 4 bytes
 
-"if_info_ip()" is used - and can be compiled - only if libpcap has
-"pcap_findalldevs()".
 
 ------------------------------------------------------------------------
-r11401 | guy | 2004-07-17 21:32:19 -0500 (Sat, 17 Jul 2004) | 2 lines
+r12091 | ulfl | 2004-09-24 16:19:48 -0500 (Fri, 24 Sep 2004) | 1 line
 Changed paths:
    M /trunk/gtk/capture_dlg.c
 
-Squelch a compiler warning.
+as the interface is usually fixed, or it can be selected by the interface drop down list, grab the keyboard focus at the filter string field.
+------------------------------------------------------------------------
+r12089 | ulfl | 2004-09-24 15:18:06 -0500 (Fri, 24 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/graphics/ethereal-help-menu.png
 
+updated screenshot, as the last one had no icons on buttons
 ------------------------------------------------------------------------
-r11400 | guy | 2004-07-17 19:24:25 -0500 (Sat, 17 Jul 2004) | 6 lines
+r12088 | ulfl | 2004-09-24 14:21:18 -0500 (Fri, 24 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/ug-src/EUG_chapter_build_install.xml
+   M /trunk/docbook/ug-src/EUG_chapter_introduction.xml
+
+add some minor details
+------------------------------------------------------------------------
+r12087 | ulfl | 2004-09-24 13:18:05 -0500 (Fri, 24 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/graphics/ethereal-help-menu.png
+   M /trunk/docbook/ug-src/EUG_chapter_use.xml
+
+Update help menu screenshot (wiki link) and add some notes about Web browser handling
+------------------------------------------------------------------------
+r12086 | ulfl | 2004-09-24 11:08:44 -0500 (Fri, 24 Sep 2004) | 1 line
 Changed paths:
-   M /trunk/AUTHORS
-   M /trunk/COPYING
-   M /trunk/ChangeLog
-   M /trunk/Ethereal.desktop
-   M /trunk/FAQ
-   M /trunk/INSTALL
-   M /trunk/INSTALL.configure
-   M /trunk/Makefile.am
-   M /trunk/Makefile.common
    M /trunk/Makefile.nmake
-   M /trunk/NEWS
-   M /trunk/README
-   M /trunk/README.aix
-   M /trunk/README.bsd
-   M /trunk/README.hpux
-   M /trunk/README.irix
-   M /trunk/README.linux
-   M /trunk/README.macos
-   M /trunk/README.tru64
-   M /trunk/README.vmware
    M /trunk/README.win32
-   M /trunk/TODO
-   M /trunk/acinclude.m4
-   M /trunk/aclocal-fallback/glib-2.0.m4
-   M /trunk/aclocal-fallback/glib.m4
-   M /trunk/aclocal-fallback/gtk-2.0.m4
-   M /trunk/aclocal-fallback/gtk.m4
-   M /trunk/aclocal-flags
-   M /trunk/adler32.c
-   M /trunk/adler32.h
-   M /trunk/afn.c
-   M /trunk/afn.h
-   M /trunk/aftypes.h
-   M /trunk/alert_box.c
-   M /trunk/alert_box.h
-   M /trunk/arcnet_pids.h
-   M /trunk/asn1/h235/H235-SECURITY-MESSAGES.asn
-   M /trunk/asn1/h235/h235.cnf
-   M /trunk/asn1/h235/packet-h235-template.c
-   M /trunk/asn1/h235/packet-h235-template.h
-   M /trunk/asn1.c
-   M /trunk/asn1.h
-   M /trunk/autogen.sh
-   M /trunk/bridged_pids.h
-   M /trunk/capture-wpcap.c
-   M /trunk/capture-wpcap.h
-   M /trunk/capture.c
-   M /trunk/capture.h
-   M /trunk/capture_stop_conditions.c
-   M /trunk/capture_stop_conditions.h
-   M /trunk/cfile.c
-   M /trunk/cfile.h
-   M /trunk/chdlctypes.h
-   M /trunk/cleanbld.bat
-   M /trunk/color.h
-   M /trunk/column.c
-   M /trunk/column.h
-   M /trunk/conditions.c
-   M /trunk/conditions.h
-   M /trunk/config.guess
-   M /trunk/config.h.win32
-   M /trunk/config.nmake
-   M /trunk/config.sub
-   M /trunk/configure.in
-   M /trunk/crc16.c
-   M /trunk/crc16.h
-   M /trunk/crc32.c
-   M /trunk/crc32.h
-   M /trunk/crypt-des.c
-   M /trunk/crypt-des.h
-   M /trunk/crypt-md4.c
-   M /trunk/crypt-md4.h
-   M /trunk/crypt-md5.c
-   M /trunk/crypt-md5.h
-   M /trunk/crypt-rc4.c
-   M /trunk/crypt-rc4.h
-   M /trunk/debian/README.debian
-   M /trunk/debian/changelog
-   M /trunk/debian/control
-   M /trunk/debian/copyright
-   M /trunk/debian/dirs
-   M /trunk/debian/docs
-   M /trunk/debian/ethereal-common.files
-   M /trunk/debian/ethereal-common.manpages
-   M /trunk/debian/ethereal-dev.docs
-   M /trunk/debian/ethereal-dev.files
-   M /trunk/debian/ethereal-dev.header-files
-   M /trunk/debian/ethereal-dev.manpages
-   M /trunk/debian/ethereal-dev.postinst
-   M /trunk/debian/ethereal-dev.prerm
-   M /trunk/debian/ethereal.files
-   M /trunk/debian/ethereal.manpages
-   M /trunk/debian/ethereal.menu
-   M /trunk/debian/menu
-   M /trunk/debian/postinst
-   M /trunk/debian/prerm
-   M /trunk/debian/rules
-   M /trunk/debian/tethereal.files
-   M /trunk/debian/tethereal.manpages
-   M /trunk/dftest.c
-   M /trunk/dictionary.dtd
-   M /trunk/dictionary.xml
-   M /trunk/disabled_protos.c
-   M /trunk/disabled_protos.h
-   M /trunk/doc/Makefile.am
-   M /trunk/doc/Makefile.nmake
-   M /trunk/doc/README.capture
-   M /trunk/doc/README.design
-   M /trunk/doc/README.developer
-   M /trunk/doc/README.idl2eth
-   M /trunk/doc/README.plugins
-   M /trunk/doc/README.regression
-   M /trunk/doc/README.tapping
-   M /trunk/doc/README.tvbuff
-   M /trunk/doc/README.xml-output
-   M /trunk/doc/dfilter2pod.pl
-   M /trunk/doc/editcap.pod
-   M /trunk/doc/eproto2sgml
-   M /trunk/doc/ethereal-filter.pod.template
-   M /trunk/doc/ethereal-tut.mgp
-   M /trunk/doc/ethereal.pod
-   M /trunk/doc/idl2eth.pod
-   M /trunk/doc/mergecap.pod
-   M /trunk/doc/randpkt.txt
-   M /trunk/doc/sgml.doc.template
-   M /trunk/doc/tethereal.pod
-   M /trunk/doc/text2pcap.pod
-   M /trunk/doxygen.cfg.in
-   M /trunk/editcap.c
-   M /trunk/epan/AUTHORS
-   M /trunk/epan/ChangeLog
-   M /trunk/epan/Makefile.am
-   M /trunk/epan/Makefile.common
-   M /trunk/epan/Makefile.nmake
-   M /trunk/epan/NEWS
-   M /trunk/epan/README
-   M /trunk/epan/addr_and_mask.c
-   M /trunk/epan/addr_and_mask.h
-   M /trunk/epan/atalk-utils.c
-   M /trunk/epan/atalk-utils.h
-   M /trunk/epan/bitswap.c
-   M /trunk/epan/bitswap.h
-   M /trunk/epan/circuit.c
-   M /trunk/epan/circuit.h
-   M /trunk/epan/column-utils.c
-   M /trunk/epan/column-utils.h
-   M /trunk/epan/column_info.h
-   M /trunk/epan/conversation.c
-   M /trunk/epan/conversation.h
-   M /trunk/epan/dfilter/Makefile.am
-   M /trunk/epan/dfilter/Makefile.nmake
-   M /trunk/epan/dfilter/README.dfilter
-   M /trunk/epan/dfilter/dfilter-int.h
-   M /trunk/epan/dfilter/dfilter.c
-   M /trunk/epan/dfilter/dfilter.h
-   M /trunk/epan/dfilter/dfvm.c
-   M /trunk/epan/dfilter/dfvm.h
-   M /trunk/epan/dfilter/drange.c
-   M /trunk/epan/dfilter/drange.h
-   M /trunk/epan/dfilter/gencode.c
-   M /trunk/epan/dfilter/gencode.h
-   M /trunk/epan/dfilter/glib-util.c
-   M /trunk/epan/dfilter/glib-util.h
-   M /trunk/epan/dfilter/grammar.lemon
-   M /trunk/epan/dfilter/scanner.l
-   M /trunk/epan/dfilter/semcheck.c
-   M /trunk/epan/dfilter/semcheck.h
-   M /trunk/epan/dfilter/sttype-integer.c
-   M /trunk/epan/dfilter/sttype-pointer.c
-   M /trunk/epan/dfilter/sttype-range.c
-   M /trunk/epan/dfilter/sttype-range.h
-   M /trunk/epan/dfilter/sttype-string.c
-   M /trunk/epan/dfilter/sttype-test.c
-   M /trunk/epan/dfilter/sttype-test.h
-   M /trunk/epan/dfilter/syntax-tree.c
-   M /trunk/epan/dfilter/syntax-tree.h
-   M /trunk/epan/doxygen.cfg.in
-   M /trunk/epan/epan.c
-   M /trunk/epan/epan.h
-   M /trunk/epan/epan_dissect.h
-   M /trunk/epan/except.c
-   M /trunk/epan/except.h
-   M /trunk/epan/exceptions.h
-   M /trunk/epan/filesystem.c
-   M /trunk/epan/filesystem.h
-   M /trunk/epan/frame_data.c
-   M /trunk/epan/frame_data.h
-   M /trunk/epan/ftypes/Makefile.am
-   M /trunk/epan/ftypes/Makefile.nmake
-   M /trunk/epan/ftypes/ftype-bytes.c
-   M /trunk/epan/ftypes/ftype-double.c
-   M /trunk/epan/ftypes/ftype-integer.c
-   M /trunk/epan/ftypes/ftype-ipv4.c
-   M /trunk/epan/ftypes/ftype-none.c
-   M /trunk/epan/ftypes/ftype-pcre.c
-   M /trunk/epan/ftypes/ftype-string.c
-   M /trunk/epan/ftypes/ftype-time.c
-   M /trunk/epan/ftypes/ftype-tvbuff.c
-   M /trunk/epan/ftypes/ftypes-int.h
-   M /trunk/epan/ftypes/ftypes.c
-   M /trunk/epan/ftypes/ftypes.h
-   M /trunk/epan/gdebug.h
-   M /trunk/epan/inet_aton.c
-   M /trunk/epan/inet_aton.h
-   M /trunk/epan/inet_ntop.c
-   M /trunk/epan/inet_pton.c
-   M /trunk/epan/inet_v6defs.h
-   M /trunk/epan/int-64bit.c
-   M /trunk/epan/int-64bit.h
-   M /trunk/epan/ipv4.c
-   M /trunk/epan/ipv4.h
-   M /trunk/epan/ipv6-utils.h
-   M /trunk/epan/libethereal.def
-   M /trunk/epan/nstime.h
-   M /trunk/epan/osi-utils.c
-   M /trunk/epan/osi-utils.h
-   M /trunk/epan/packet.c
-   M /trunk/epan/packet.h
-   M /trunk/epan/packet_info.h
-   M /trunk/epan/pint.h
-   M /trunk/epan/plugins.c
-   M /trunk/epan/plugins.h
-   M /trunk/epan/proto.c
-   M /trunk/epan/proto.h
-   M /trunk/epan/report_err.h
-   M /trunk/epan/resolv.c
-   M /trunk/epan/resolv.h
-   M /trunk/epan/slab.h
-   M /trunk/epan/sna-utils.c
-   M /trunk/epan/sna-utils.h
-   M /trunk/epan/strutil.c
-   M /trunk/epan/strutil.h
-   M /trunk/epan/timestamp.c
-   M /trunk/epan/timestamp.h
-   M /trunk/epan/to_str.c
-   M /trunk/epan/to_str.h
-   M /trunk/epan/tvbtest.c
-   M /trunk/epan/tvbuff.c
-   M /trunk/epan/tvbuff.h
-   M /trunk/epan/value_string.c
-   M /trunk/epan/value_string.h
-   M /trunk/ethereal_be.py
-   M /trunk/ethereal_gen.py
-   M /trunk/etypes.h
-   M /trunk/file.c
-   M /trunk/file.h
-   M /trunk/filters.c
-   M /trunk/filters.h
-   M /trunk/follow.c
-   M /trunk/follow.h
-   M /trunk/format-oid.h
-   M /trunk/g711.c
-   M /trunk/g711.h
-   M /trunk/getopt.c
-   M /trunk/getopt.h
-   M /trunk/globals.h
-   M /trunk/greproto.h
-   M /trunk/gtk/Makefile.am
-   M /trunk/gtk/Makefile.common
-   M /trunk/gtk/Makefile.nmake
-   M /trunk/gtk/STATUS.gtk2
-   M /trunk/gtk/about_dlg.c
-   M /trunk/gtk/about_dlg.h
-   M /trunk/gtk/ansi_a_stat.c
-   M /trunk/gtk/ansi_map_stat.c
-   M /trunk/gtk/bootp_stat.c
-   M /trunk/gtk/capture_combo_utils.c
-   M /trunk/gtk/capture_combo_utils.h
-   M /trunk/gtk/capture_dlg.c
-   M /trunk/gtk/capture_dlg.h
-   M /trunk/gtk/capture_if_dlg.c
-   M /trunk/gtk/capture_info_dlg.c
-   M /trunk/gtk/capture_prefs.c
-   M /trunk/gtk/capture_prefs.h
-   M /trunk/gtk/color_dlg.c
-   M /trunk/gtk/color_dlg.h
-   M /trunk/gtk/color_filters.c
-   M /trunk/gtk/color_filters.h
-   M /trunk/gtk/color_utils.c
-   M /trunk/gtk/color_utils.h
-   M /trunk/gtk/colors.c
-   M /trunk/gtk/colors.h
-   M /trunk/gtk/column_prefs.c
-   M /trunk/gtk/column_prefs.h
-   M /trunk/gtk/compat_macros.h
-   M /trunk/gtk/dcerpc_stat.c
-   M /trunk/gtk/decode_as_dlg.c
-   M /trunk/gtk/decode_as_dlg.h
-   M /trunk/gtk/dfilter_expr_dlg.c
-   M /trunk/gtk/dfilter_expr_dlg.h
-   M /trunk/gtk/dlg_utils.c
-   M /trunk/gtk/dlg_utils.h
-   M /trunk/gtk/doxygen.cfg.in
-   M /trunk/gtk/endpoint_talkers_eth.c
-   M /trunk/gtk/endpoint_talkers_fc.c
-   M /trunk/gtk/endpoint_talkers_fddi.c
-   M /trunk/gtk/endpoint_talkers_ip.c
-   M /trunk/gtk/endpoint_talkers_ipx.c
-   M /trunk/gtk/endpoint_talkers_table.c
-   M /trunk/gtk/endpoint_talkers_table.h
-   M /trunk/gtk/endpoint_talkers_tcpip.c
-   M /trunk/gtk/endpoint_talkers_tr.c
-   M /trunk/gtk/endpoint_talkers_udpip.c
-   M /trunk/gtk/ethclist.c
-   M /trunk/gtk/ethclist.h
-   M /trunk/gtk/fc_stat.c
-   M /trunk/gtk/file_dlg.c
-   M /trunk/gtk/file_dlg.h
-   M /trunk/gtk/filter_prefs.c
-   M /trunk/gtk/filter_prefs.h
-   M /trunk/gtk/find_dlg.c
-   M /trunk/gtk/find_dlg.h
-   M /trunk/gtk/follow_dlg.c
-   M /trunk/gtk/follow_dlg.h
-   M /trunk/gtk/font_utils.c
-   M /trunk/gtk/font_utils.h
-   M /trunk/gtk/goto_dlg.c
-   M /trunk/gtk/goto_dlg.h
-   M /trunk/gtk/gsm_a_stat.c
-   M /trunk/gtk/gsm_map_stat.c
-   M /trunk/gtk/gsm_map_stat.h
-   M /trunk/gtk/gsm_map_summary.c
-   M /trunk/gtk/gtk_stat_util.c
-   M /trunk/gtk/gtk_stat_util.h
-   M /trunk/gtk/gtkglobals.h
-   M /trunk/gtk/gui_prefs.c
-   M /trunk/gtk/gui_prefs.h
-   M /trunk/gtk/h225_counter.c
-   M /trunk/gtk/h225_ras_srt.c
+   M /trunk/tools/win32-setup.sh
+
+Use new win32 libs from anonsvn instead of webpage, including setup target. Use updated GTK 2.4.9 libraries. But still use wget.
+------------------------------------------------------------------------
+r12085 | etxrab | 2004-09-24 11:01:09 -0500 (Fri, 24 Sep 2004) | 10 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-etheric.c
+
+Fix Some compiler warnings:
+
+packet-etheric.c:99: warning: `message_type_vals' defined but not used
+packet-etheric.c:376: warning: 
+`isup_calling_party_nature_of_address_ind_value'
+defined but not used
+packet-etheric.c:892: warning: 
+`dissect_etheric_cause_indicators_parameter' defi
+ned but not used
+
+------------------------------------------------------------------------
+r12084 | ulfl | 2004-09-24 10:41:46 -0500 (Fri, 24 Sep 2004) | 1 line
+Changed paths:
    M /trunk/gtk/help_dlg.c
    M /trunk/gtk/help_dlg.h
-   M /trunk/gtk/hostlist_eth.c
-   M /trunk/gtk/hostlist_fc.c
-   M /trunk/gtk/hostlist_fddi.c
-   M /trunk/gtk/hostlist_ip.c
-   M /trunk/gtk/hostlist_ipx.c
-   M /trunk/gtk/hostlist_table.c
-   M /trunk/gtk/hostlist_table.h
-   M /trunk/gtk/hostlist_tcpip.c
-   M /trunk/gtk/hostlist_tr.c
-   M /trunk/gtk/hostlist_udpip.c
-   M /trunk/gtk/http_stat.c
-   M /trunk/gtk/io_stat.c
-   M /trunk/gtk/isprint.h
-   M /trunk/gtk/isup_stat.c
-   M /trunk/gtk/keys.h
-   M /trunk/gtk/layout_prefs.c
-   M /trunk/gtk/layout_prefs.h
-   M /trunk/gtk/ldap_stat.c
-   M /trunk/gtk/main.c
-   M /trunk/gtk/main.h
    M /trunk/gtk/menu.c
-   M /trunk/gtk/menu.h
-   M /trunk/gtk/mgcp_stat.c
-   M /trunk/gtk/mtp3_stat.c
-   M /trunk/gtk/mtp3_stat.h
-   M /trunk/gtk/mtp3_summary.c
-   M /trunk/gtk/nameres_prefs.c
-   M /trunk/gtk/nameres_prefs.h
-   M /trunk/gtk/packet_list.c
-   M /trunk/gtk/packet_list.h
-   M /trunk/gtk/packet_win.c
-   M /trunk/gtk/packet_win.h
-   M /trunk/gtk/plugins_dlg.c
-   M /trunk/gtk/prefs_dlg.c
-   M /trunk/gtk/prefs_dlg.h
-   M /trunk/gtk/print_dlg.c
-   M /trunk/gtk/print_mswin.c
-   M /trunk/gtk/print_mswin.h
-   M /trunk/gtk/print_prefs.c
-   M /trunk/gtk/print_prefs.h
-   M /trunk/gtk/progress_dlg.c
-   M /trunk/gtk/proto_dlg.c
-   M /trunk/gtk/proto_dlg.h
-   M /trunk/gtk/proto_draw.c
-   M /trunk/gtk/proto_draw.h
-   M /trunk/gtk/proto_hier_stats_dlg.c
-   M /trunk/gtk/proto_hier_stats_dlg.h
-   M /trunk/gtk/range_utils.c
-   M /trunk/gtk/range_utils.h
-   M /trunk/gtk/recent.c
-   M /trunk/gtk/recent.h
-   M /trunk/gtk/rpc_progs.c
-   M /trunk/gtk/rpc_stat.c
-   M /trunk/gtk/rtp_analysis.c
-   M /trunk/gtk/rtp_analysis.h
-   M /trunk/gtk/rtp_stream.c
-   M /trunk/gtk/rtp_stream.h
-   M /trunk/gtk/rtp_stream_dlg.c
-   M /trunk/gtk/rtp_stream_dlg.h
-   M /trunk/gtk/sat.h
-   M /trunk/gtk/service_response_time_table.c
-   M /trunk/gtk/service_response_time_table.h
-   M /trunk/gtk/simple_dialog.c
-   M /trunk/gtk/sip_stat.c
-   M /trunk/gtk/smb_stat.c
-   M /trunk/gtk/stream_prefs.c
-   M /trunk/gtk/stream_prefs.h
-   M /trunk/gtk/summary_dlg.c
-   M /trunk/gtk/summary_dlg.h
-   M /trunk/gtk/supported_protos_dlg.c
-   M /trunk/gtk/supported_protos_dlg.h
-   M /trunk/gtk/tap_dfilter_dlg.c
-   M /trunk/gtk/tap_dfilter_dlg.h
-   M /trunk/gtk/tap_menu.h
-   M /trunk/gtk/tcp_graph.c
-   M /trunk/gtk/text_page.c
-   M /trunk/gtk/text_page.h
-   M /trunk/gtk/toolbar.c
-   M /trunk/gtk/toolbar.h
-   M /trunk/gtk/ui_util.c
-   M /trunk/gtk/ui_util.h
-   M /trunk/gtk/webbrowser.c
-   M /trunk/gtk/webbrowser.h
-   M /trunk/gtk/wsp_stat.c
-   M /trunk/h225-persistentdata.c
-   M /trunk/h225-persistentdata.h
-   M /trunk/help/Makefile.am
-   M /trunk/help/Makefile.nmake
-   M /trunk/help/capture_filters.txt
-   M /trunk/help/capturing.txt
-   M /trunk/help/display_filters.txt
-   M /trunk/help/faq.txt
-   M /trunk/help/getting_started.txt
-   M /trunk/help/overview.txt
-   M /trunk/help/toc
-   M /trunk/help/well_known.txt
-   M /trunk/iax2_codec_type.h
-   M /trunk/idl2eth.sh
-   M /trunk/image/Makefile.nmake
-   M /trunk/image/README.image
-   M /trunk/image/clist_ascend.xpm
-   M /trunk/image/clist_descend.xpm
-   M /trunk/image/dn_arrow.xpm
-   M /trunk/image/editcap.rc.in
-   M /trunk/image/eexcl3d64.xpm
-   M /trunk/image/eicon3d16.xpm
-   M /trunk/image/eicon3d32.xpm
-   M /trunk/image/eicon3d48.xpm
-   M /trunk/image/eicon3d64.xpm
-   M /trunk/image/ethereal.rc.in
-   M /trunk/image/icon-ethereal.xpm
-   M /trunk/image/icon-excl.xpm
-   M /trunk/image/icon_layout_1.xpm
-   M /trunk/image/icon_layout_2.xpm
-   M /trunk/image/icon_layout_3.xpm
-   M /trunk/image/icon_layout_4.xpm
-   M /trunk/image/icon_layout_5.xpm
-   M /trunk/image/icon_layout_6.xpm
-   M /trunk/image/libethereal.rc.in
-   M /trunk/image/mergecap.rc.in
-   M /trunk/image/stock_dialog_error_48.xpm
-   M /trunk/image/stock_dialog_info_48.xpm
-   M /trunk/image/stock_dialog_question_48.xpm
-   M /trunk/image/stock_dialog_warning_48.xpm
-   M /trunk/image/tethereal.rc.in
-   M /trunk/image/text2pcap.rc.in
-   M /trunk/image/toolbar/capture_24.xpm
-   M /trunk/image/toolbar/cfilter_24.xpm
-   M /trunk/image/toolbar/dfilter_24.xpm
-   M /trunk/image/toolbar/stock_add_24.xpm
-   M /trunk/image/toolbar/stock_bottom_24.xpm
-   M /trunk/image/toolbar/stock_close_24.xpm
-   M /trunk/image/toolbar/stock_colorselector_24.xpm
-   M /trunk/image/toolbar/stock_help_24.xpm
-   M /trunk/image/toolbar/stock_jump_to_24.xpm
-   M /trunk/image/toolbar/stock_left_arrow_24.xpm
-   M /trunk/image/toolbar/stock_ok_20.xpm
-   M /trunk/image/toolbar/stock_open_24.xpm
-   M /trunk/image/toolbar/stock_preferences_24.xpm
-   M /trunk/image/toolbar/stock_print_24.xpm
-   M /trunk/image/toolbar/stock_properties_24.xpm
-   M /trunk/image/toolbar/stock_refresh_24.xpm
-   M /trunk/image/toolbar/stock_right_arrow_24.xpm
-   M /trunk/image/toolbar/stock_save_24.xpm
-   M /trunk/image/toolbar/stock_save_as_24.xpm
-   M /trunk/image/toolbar/stock_search_24.xpm
-   M /trunk/image/toolbar/stock_stop_24.xpm
-   M /trunk/image/toolbar/stock_top_24.xpm
-   M /trunk/image/toolbar/stock_zoom_1_24.xpm
-   M /trunk/image/toolbar/stock_zoom_in_24.xpm
-   M /trunk/image/toolbar/stock_zoom_out_24.xpm
-   M /trunk/image/up_arrow.xpm
-   M /trunk/in_cksum.c
-   M /trunk/in_cksum.h
-   M /trunk/ip_opts.h
-   M /trunk/ipproto.c
-   M /trunk/ipproto.h
-   M /trunk/isprint.h
-   M /trunk/lapd_sapi.h
-   M /trunk/llcsaps.h
-   M /trunk/make-authors-short.pl
-   M /trunk/make-faq
-   M /trunk/make-manuf
-   M /trunk/make-reg-dotc
-   M /trunk/make-reg-dotc.py
-   M /trunk/make-tapreg-dotc
-   M /trunk/make-version.pl
-   M /trunk/manuf
-   M /trunk/manuf.tmpl
-   M /trunk/menu.h
-   M /trunk/merge.c
-   M /trunk/merge.h
-   M /trunk/mergecap.c
-   M /trunk/mkcap.c
-   M /trunk/mkstemp.c
-   M /trunk/mkstemp.h
-   M /trunk/mobileipv4.xml
-   M /trunk/nasreq.xml
-   M /trunk/ncp2222.py
-   M /trunk/nlpid.h
-   M /trunk/oui.h
-   M /trunk/packaging/Makefile.am
-   M /trunk/packaging/nsis/Makefile.am
-   M /trunk/packaging/nsis/Makefile.nmake
-   M /trunk/packaging/nsis/ethereal.nsi
-   M /trunk/packaging/rpm/Makefile.am
-   M /trunk/packaging/rpm/SPECS/Makefile.am
-   M /trunk/packaging/rpm/SPECS/ethereal.spec.in
-   M /trunk/packaging/svr4/Makefile.am
-   M /trunk/packaging/svr4/checkinstall.in
-   M /trunk/packaging/svr4/mkpkg
-   M /trunk/packaging/svr4/pkginfo.in
-   M /trunk/packet-3g-a11.c
-   M /trunk/packet-aarp.c
-   M /trunk/packet-acap.c
-   M /trunk/packet-acse.c
-   M /trunk/packet-acse.h
-   M /trunk/packet-afp.c
-   M /trunk/packet-afp.h
-   M /trunk/packet-afs-defs.h
-   M /trunk/packet-afs-macros.h
-   M /trunk/packet-afs-register-info.h
-   M /trunk/packet-afs.c
-   M /trunk/packet-afs.h
-   M /trunk/packet-aim-admin.c
-   M /trunk/packet-aim-adverts.c
-   M /trunk/packet-aim-bos.c
-   M /trunk/packet-aim-buddylist.c
-   M /trunk/packet-aim-chat.c
-   M /trunk/packet-aim-chatnav.c
-   M /trunk/packet-aim-directory.c
-   M /trunk/packet-aim-generic.c
-   M /trunk/packet-aim-icq.c
-   M /trunk/packet-aim-invitation.c
-   M /trunk/packet-aim-location.c
-   M /trunk/packet-aim-messaging.c
-   M /trunk/packet-aim-oft.c
-   M /trunk/packet-aim-popup.c
-   M /trunk/packet-aim-signon.c
-   M /trunk/packet-aim-ssi.c
-   M /trunk/packet-aim-stats.c
-   M /trunk/packet-aim-translate.c
-   M /trunk/packet-aim-userlookup.c
-   M /trunk/packet-aim.c
-   M /trunk/packet-aim.h
-   M /trunk/packet-ajp13.c
-   M /trunk/packet-alcap.c
-   M /trunk/packet-ans.c
-   M /trunk/packet-ansi_637.c
-   M /trunk/packet-ansi_683.c
-   M /trunk/packet-ansi_801.c
-   M /trunk/packet-ansi_a.c
-   M /trunk/packet-ansi_a.h
-   M /trunk/packet-ansi_map.c
-   M /trunk/packet-ansi_map.h
-   M /trunk/packet-aodv.c
-   M /trunk/packet-ap1394.c
-   M /trunk/packet-ap1394.h
-   M /trunk/packet-arcnet.c
-   M /trunk/packet-arcnet.h
-   M /trunk/packet-arp.c
-   M /trunk/packet-arp.h
-   M /trunk/packet-asap.c
-   M /trunk/packet-ascend.c
-   M /trunk/packet-asf.c
-   M /trunk/packet-atalk.c
-   M /trunk/packet-atalk.h
-   M /trunk/packet-atm.c
-   M /trunk/packet-atm.h
-   M /trunk/packet-auto_rp.c
-   M /trunk/packet-bacapp.c
-   M /trunk/packet-bacnet.c
-   M /trunk/packet-beep.c
-   M /trunk/packet-ber.c
-   M /trunk/packet-ber.h
-   M /trunk/packet-bfd.c
-   M /trunk/packet-bgp.c
-   M /trunk/packet-bgp.h
-   M /trunk/packet-bofl.c
-   M /trunk/packet-bootp.c
-   M /trunk/packet-bootparams.c
-   M /trunk/packet-bootparams.h
-   M /trunk/packet-bpdu.c
-   M /trunk/packet-brdwlk.c
-   M /trunk/packet-bssap.c
-   M /trunk/packet-bssap.h
-   M /trunk/packet-bssgp.c
-   M /trunk/packet-bvlc.c
-   M /trunk/packet-cast.c
-   M /trunk/packet-ccsds.c
-   M /trunk/packet-cdp.c
-   M /trunk/packet-cgmp.c
-   M /trunk/packet-chdlc.c
-   M /trunk/packet-chdlc.h
-   M /trunk/packet-cisco-oui.c
-   M /trunk/packet-clearcase.c
-   M /trunk/packet-clearcase.h
-   M /trunk/packet-clip.c
-   M /trunk/packet-clip.h
-   M /trunk/packet-clnp.c
-   M /trunk/packet-cops.c
-   M /trunk/packet-cosine.c
-   M /trunk/packet-cpfi.c
-   M /trunk/packet-cpha.c
-   M /trunk/packet-cups.c
-   M /trunk/packet-data.c
-   M /trunk/packet-data.h
-   M /trunk/packet-dccp.c
-   M /trunk/packet-dccp.h
-   M /trunk/packet-dcerpc-afs4int.c
-   M /trunk/packet-dcerpc-atsvc.c
-   M /trunk/packet-dcerpc-atsvc.h
-   M /trunk/packet-dcerpc-bossvr.c
-   M /trunk/packet-dcerpc-browser.c
-   M /trunk/packet-dcerpc-browser.h
-   M /trunk/packet-dcerpc-budb.c
-   M /trunk/packet-dcerpc-butc.c
-   M /trunk/packet-dcerpc-cds_clerkserver.c
-   M /trunk/packet-dcerpc-cds_solicit.c
-   M /trunk/packet-dcerpc-conv.c
-   M /trunk/packet-dcerpc-cprpc_server.c
-   M /trunk/packet-dcerpc-dce122.c
-   M /trunk/packet-dcerpc-dce122.h
-   M /trunk/packet-dcerpc-dcom.h
-   M /trunk/packet-dcerpc-dfs.c
-   M /trunk/packet-dcerpc-dfs.h
-   M /trunk/packet-dcerpc-dnsserver.c
-   M /trunk/packet-dcerpc-dnsserver.h
-   M /trunk/packet-dcerpc-drsuapi.c
-   M /trunk/packet-dcerpc-drsuapi.h
-   M /trunk/packet-dcerpc-dtsprovider.c
-   M /trunk/packet-dcerpc-dtsstime_req.c
-   M /trunk/packet-dcerpc-efs.c
-   M /trunk/packet-dcerpc-efs.h
-   M /trunk/packet-dcerpc-epm.c
-   M /trunk/packet-dcerpc-epm4.c
-   M /trunk/packet-dcerpc-eventlog.c
-   M /trunk/packet-dcerpc-eventlog.h
-   M /trunk/packet-dcerpc-fldb.c
-   M /trunk/packet-dcerpc-frsapi.c
-   M /trunk/packet-dcerpc-frsapi.h
-   M /trunk/packet-dcerpc-frsrpc.c
-   M /trunk/packet-dcerpc-frsrpc.h
-   M /trunk/packet-dcerpc-ftserver.c
-   M /trunk/packet-dcerpc-icl_rpc.c
-   M /trunk/packet-dcerpc-initshutdown.c
-   M /trunk/packet-dcerpc-initshutdown.h
-   M /trunk/packet-dcerpc-krb5rpc.c
-   M /trunk/packet-dcerpc-llb.c
-   M /trunk/packet-dcerpc-lsa-ds.c
-   M /trunk/packet-dcerpc-lsa.c
-   M /trunk/packet-dcerpc-lsa.h
-   M /trunk/packet-dcerpc-mapi.c
-   M /trunk/packet-dcerpc-mapi.h
-   M /trunk/packet-dcerpc-messenger.c
-   M /trunk/packet-dcerpc-mgmt.c
-   M /trunk/packet-dcerpc-ndr.c
-   M /trunk/packet-dcerpc-netlogon.c
-   M /trunk/packet-dcerpc-netlogon.h
-   M /trunk/packet-dcerpc-nspi.c
-   M /trunk/packet-dcerpc-nt.c
-   M /trunk/packet-dcerpc-nt.h
-   M /trunk/packet-dcerpc-oxid.c
-   M /trunk/packet-dcerpc-rdaclif.c
-   M /trunk/packet-dcerpc-reg.c
-   M /trunk/packet-dcerpc-reg.h
-   M /trunk/packet-dcerpc-remact.c
-   M /trunk/packet-dcerpc-rep_proc.c
-   M /trunk/packet-dcerpc-roverride.c
-   M /trunk/packet-dcerpc-rpriv.c
-   M /trunk/packet-dcerpc-rs_acct.c
-   M /trunk/packet-dcerpc-rs_attr.c
-   M /trunk/packet-dcerpc-rs_attr_schema.c
-   M /trunk/packet-dcerpc-rs_bind.c
-   M /trunk/packet-dcerpc-rs_misc.c
-   M /trunk/packet-dcerpc-rs_pgo.c
-   M /trunk/packet-dcerpc-rs_plcy.c
-   M /trunk/packet-dcerpc-rs_prop_acct.c
-   M /trunk/packet-dcerpc-rs_prop_acl.c
-   M /trunk/packet-dcerpc-rs_prop_attr.c
-   M /trunk/packet-dcerpc-rs_prop_pgo.c
-   M /trunk/packet-dcerpc-rs_prop_plcy.c
-   M /trunk/packet-dcerpc-rs_pwd_mgmt.c
-   M /trunk/packet-dcerpc-rs_repadm.c
-   M /trunk/packet-dcerpc-rs_replist.c
-   M /trunk/packet-dcerpc-rs_repmgr.c
-   M /trunk/packet-dcerpc-rs_unix.c
-   M /trunk/packet-dcerpc-rsec_login.c
-   M /trunk/packet-dcerpc-samr.c
-   M /trunk/packet-dcerpc-samr.h
-   M /trunk/packet-dcerpc-secidmap.c
-   M /trunk/packet-dcerpc-spoolss.c
-   M /trunk/packet-dcerpc-spoolss.h
-   M /trunk/packet-dcerpc-srvsvc.c
-   M /trunk/packet-dcerpc-srvsvc.h
-   M /trunk/packet-dcerpc-svcctl.c
-   M /trunk/packet-dcerpc-svcctl.h
-   M /trunk/packet-dcerpc-tapi.c
-   M /trunk/packet-dcerpc-tapi.h
-   M /trunk/packet-dcerpc-tkn4int.c
-   M /trunk/packet-dcerpc-trksvr.c
-   M /trunk/packet-dcerpc-ubikdisk.c
-   M /trunk/packet-dcerpc-ubikvote.c
-   M /trunk/packet-dcerpc-update.c
-   M /trunk/packet-dcerpc-wkssvc.c
-   M /trunk/packet-dcerpc-wkssvc.h
-   M /trunk/packet-dcerpc.c
-   M /trunk/packet-dcerpc.h
-   M /trunk/packet-dcm.c
-   M /trunk/packet-ddtp.c
-   M /trunk/packet-ddtp.h
-   M /trunk/packet-dec-bpdu.c
-   M /trunk/packet-dhcpv6.c
-   M /trunk/packet-diameter-defs.h
-   M /trunk/packet-diameter.c
-   M /trunk/packet-diffserv-mpls-common.c
-   M /trunk/packet-diffserv-mpls-common.h
-   M /trunk/packet-distcc.c
-   M /trunk/packet-dlsw.c
-   M /trunk/packet-dnp.c
-   M /trunk/packet-dns.c
-   M /trunk/packet-dns.h
-   M /trunk/packet-dsi.c
-   M /trunk/packet-dvmrp.c
-   M /trunk/packet-dvmrp.h
-   M /trunk/packet-e164.c
-   M /trunk/packet-e164.h
-   M /trunk/packet-eap.c
-   M /trunk/packet-eapol.c
-   M /trunk/packet-echo.c
-   M /trunk/packet-edonkey.c
-   M /trunk/packet-edonkey.h
-   M /trunk/packet-eigrp.c
-   M /trunk/packet-enc.c
-   M /trunk/packet-enip.c
-   M /trunk/packet-enrp.c
-   M /trunk/packet-esis.c
-   M /trunk/packet-esis.h
-   M /trunk/packet-eth.c
-   M /trunk/packet-eth.h
-   M /trunk/packet-etherip.c
-   M /trunk/packet-ethertype.c
-   M /trunk/packet-fc.c
-   M /trunk/packet-fc.h
-   M /trunk/packet-fcbls.h
-   M /trunk/packet-fcct.c
-   M /trunk/packet-fcct.h
-   M /trunk/packet-fcdns.c
-   M /trunk/packet-fcdns.h
-   M /trunk/packet-fcels.c
-   M /trunk/packet-fcels.h
-   M /trunk/packet-fcfcs.c
-   M /trunk/packet-fcfcs.h
-   M /trunk/packet-fcfzs.c
-   M /trunk/packet-fcfzs.h
-   M /trunk/packet-fcip.c
-   M /trunk/packet-fclctl.c
-   M /trunk/packet-fclctl.h
-   M /trunk/packet-fcp.c
-   M /trunk/packet-fcp.h
-   M /trunk/packet-fcsb3.c
-   M /trunk/packet-fcsb3.h
-   M /trunk/packet-fcsp.c
-   M /trunk/packet-fcsp.h
-   M /trunk/packet-fcswils.c
-   M /trunk/packet-fcswils.h
-   M /trunk/packet-fddi.c
-   M /trunk/packet-fddi.h
-   M /trunk/packet-fix.c
-   M /trunk/packet-fr.c
-   M /trunk/packet-frame.c
-   M /trunk/packet-frame.h
-   M /trunk/packet-ftam.c
-   M /trunk/packet-ftam.h
-   M /trunk/packet-ftp.c
-   M /trunk/packet-fw1.c
-   M /trunk/packet-gift.c
-   M /trunk/packet-giop.c
-   M /trunk/packet-giop.h
-   M /trunk/packet-gmrp.c
-   M /trunk/packet-gnutella.c
-   M /trunk/packet-gnutella.h
-   M /trunk/packet-gprs-llc.c
-   M /trunk/packet-gprs-ns.c
-   M /trunk/packet-gre.c
-   M /trunk/packet-gsm_a.c
-   M /trunk/packet-gsm_a.h
-   M /trunk/packet-gsm_map.c
-   M /trunk/packet-gsm_map.h
-   M /trunk/packet-gsm_sms.c
-   M /trunk/packet-gsm_sms.h
-   M /trunk/packet-gsm_sms_ud.c
-   M /trunk/packet-gsm_ss.c
-   M /trunk/packet-gsm_ss.h
-   M /trunk/packet-gssapi.c
-   M /trunk/packet-gssapi.h
-   M /trunk/packet-gtp.c
-   M /trunk/packet-gtp.h
-   M /trunk/packet-gvrp.c
-   M /trunk/packet-h1.c
-   M /trunk/packet-h225.c
-   M /trunk/packet-h225.h
-   M /trunk/packet-h235.c
-   M /trunk/packet-h235.h
-   M /trunk/packet-h245.c
-   M /trunk/packet-h245.h
-   M /trunk/packet-h261.c
-   M /trunk/packet-h263.c
-   M /trunk/packet-h450.c
-   M /trunk/packet-hclnfsd.c
-   M /trunk/packet-hclnfsd.h
-   M /trunk/packet-hpext.c
-   M /trunk/packet-hpext.h
-   M /trunk/packet-hsrp.c
-   M /trunk/packet-http.c
-   M /trunk/packet-http.h
-   M /trunk/packet-hyperscsi.c
-   M /trunk/packet-iapp.c
-   M /trunk/packet-iax2.c
-   M /trunk/packet-iax2.h
-   M /trunk/packet-ib.c
-   M /trunk/packet-icap.c
-   M /trunk/packet-icmpv6.c
-   M /trunk/packet-icp.c
-   M /trunk/packet-icq.c
-   M /trunk/packet-ieee80211.c
-   M /trunk/packet-ieee80211.h
-   M /trunk/packet-ieee8023.c
-   M /trunk/packet-ieee8023.h
-   M /trunk/packet-igap.c
-   M /trunk/packet-igap.h
-   M /trunk/packet-igmp.c
-   M /trunk/packet-igmp.h
-   M /trunk/packet-igrp.c
-   M /trunk/packet-image-gif.c
-   M /trunk/packet-image-jfif.c
-   M /trunk/packet-imap.c
-   M /trunk/packet-ip.c
-   M /trunk/packet-ip.h
-   M /trunk/packet-ipdc.c
-   M /trunk/packet-ipdc.h
-   M /trunk/packet-ipfc.c
-   M /trunk/packet-ipfc.h
-   M /trunk/packet-ipmi.c
-   M /trunk/packet-ipp.c
-   M /trunk/packet-ipsec-udp.c
-   M /trunk/packet-ipsec.c
-   M /trunk/packet-ipsec.h
-   M /trunk/packet-ipv6.c
-   M /trunk/packet-ipv6.h
-   M /trunk/packet-ipvs-syncd.c
-   M /trunk/packet-ipx.c
-   M /trunk/packet-ipx.h
-   M /trunk/packet-ipxwan.c
-   M /trunk/packet-irc.c
-   M /trunk/packet-isakmp.c
-   M /trunk/packet-iscsi.c
-   M /trunk/packet-isdn.c
-   M /trunk/packet-isis-clv.c
-   M /trunk/packet-isis-clv.h
-   M /trunk/packet-isis-hello.c
-   M /trunk/packet-isis-hello.h
-   M /trunk/packet-isis-lsp.c
-   M /trunk/packet-isis-lsp.h
-   M /trunk/packet-isis-snp.c
-   M /trunk/packet-isis-snp.h
-   M /trunk/packet-isis.c
-   M /trunk/packet-isis.h
-   M /trunk/packet-isl.c
-   M /trunk/packet-isl.h
-   M /trunk/packet-ismp.c
-   M /trunk/packet-isns.c
-   M /trunk/packet-isup.c
-   M /trunk/packet-isup.h
-   M /trunk/packet-iua.c
-   M /trunk/packet-jabber.c
-   M /trunk/packet-kadm5.c
-   M /trunk/packet-kerberos.c
-   M /trunk/packet-kerberos.h
-   M /trunk/packet-klm.c
-   M /trunk/packet-klm.h
-   M /trunk/packet-kpasswd.c
-   M /trunk/packet-l2tp.c
-   M /trunk/packet-lapb.c
-   M /trunk/packet-lapbether.c
-   M /trunk/packet-lapd.c
-   M /trunk/packet-laplink.c
-   M /trunk/packet-ldap.c
-   M /trunk/packet-ldap.h
-   M /trunk/packet-ldp.c
-   M /trunk/packet-ldp.h
-   M /trunk/packet-llc.c
-   M /trunk/packet-llc.h
-   M /trunk/packet-lmi.c
-   M /trunk/packet-lmp.c
-   M /trunk/packet-lpd.c
-   M /trunk/packet-lwapp.c
-   M /trunk/packet-m2pa.c
-   M /trunk/packet-m2tp.c
-   M /trunk/packet-m2ua.c
-   M /trunk/packet-m3ua.c
-   M /trunk/packet-mbtcp.c
-   M /trunk/packet-mdshdr.c
-   M /trunk/packet-media.c
-   M /trunk/packet-mip.c
-   M /trunk/packet-mip6.c
-   M /trunk/packet-mip6.h
-   M /trunk/packet-mmse.c
-   M /trunk/packet-mount.c
-   M /trunk/packet-mount.h
-   M /trunk/packet-mpeg1.c
-   M /trunk/packet-mpls-echo.c
-   M /trunk/packet-mpls.c
-   M /trunk/packet-mq-pcf.c
-   M /trunk/packet-mq.c
-   M /trunk/packet-mq.h
-   M /trunk/packet-mrdisc.c
-   M /trunk/packet-mrdisc.h
-   M /trunk/packet-msdp.c
-   M /trunk/packet-msn-messenger.c
-   M /trunk/packet-msnip.c
-   M /trunk/packet-msnip.h
-   M /trunk/packet-msproxy.c
-   M /trunk/packet-mtp2.c
-   M /trunk/packet-mtp3.c
-   M /trunk/packet-mtp3.h
-   M /trunk/packet-mtp3mg.c
-   M /trunk/packet-multipart.c
-   M /trunk/packet-mysql.c
-   M /trunk/packet-nbipx.c
-   M /trunk/packet-nbns.c
-   M /trunk/packet-ncp-int.h
-   M /trunk/packet-ncp-nmas.c
-   M /trunk/packet-ncp-nmas.h
-   M /trunk/packet-ncp.c
-   M /trunk/packet-ncp2222.inc
-   M /trunk/packet-ndmp.c
-   M /trunk/packet-ndps.c
-   M /trunk/packet-ndps.h
-   M /trunk/packet-netbios.c
-   M /trunk/packet-netbios.h
-   M /trunk/packet-netflow.c
-   M /trunk/packet-nfs.c
-   M /trunk/packet-nfs.h
-   M /trunk/packet-nfsacl.c
-   M /trunk/packet-nfsauth.c
-   M /trunk/packet-nisplus.c
-   M /trunk/packet-nisplus.h
-   M /trunk/packet-nlm.c
-   M /trunk/packet-nlm.h
-   M /trunk/packet-nlsp.c
-   M /trunk/packet-nntp.c
-   M /trunk/packet-nt-oui.c
-   M /trunk/packet-nt-sonmp.c
-   M /trunk/packet-nt-tpcp.c
-   M /trunk/packet-ntlmssp.c
-   M /trunk/packet-ntp.c
-   M /trunk/packet-ntp.h
-   M /trunk/packet-null.c
-   M /trunk/packet-null.h
-   M /trunk/packet-olsr.c
-   M /trunk/packet-osi-options.c
-   M /trunk/packet-osi-options.h
-   M /trunk/packet-osi.c
-   M /trunk/packet-osi.h
-   M /trunk/packet-ospf.c
-   M /trunk/packet-pcnfsd.c
-   M /trunk/packet-pcnfsd.h
-   M /trunk/packet-per.c
-   M /trunk/packet-per.h
-   M /trunk/packet-pflog.c
-   M /trunk/packet-pflog.h
-   M /trunk/packet-pgm.c
-   M /trunk/packet-pim.c
-   M /trunk/packet-pim.h
-   M /trunk/packet-pktc.c
-   M /trunk/packet-pktc.h
-   M /trunk/packet-pop.c
-   M /trunk/packet-portmap.c
-   M /trunk/packet-portmap.h
-   M /trunk/packet-postgresql.c
-   M /trunk/packet-ppp.c
-   M /trunk/packet-ppp.h
-   M /trunk/packet-pppoe.c
-   M /trunk/packet-pptp.c
-   M /trunk/packet-pres.c
-   M /trunk/packet-pres.h
-   M /trunk/packet-prism.c
-   M /trunk/packet-prism.h
-   M /trunk/packet-ptp.c
-   M /trunk/packet-q2931.c
-   M /trunk/packet-q931.c
-   M /trunk/packet-q931.h
-   M /trunk/packet-q933.c
-   M /trunk/packet-qllc.c
-   M /trunk/packet-quake.c
-   M /trunk/packet-quake2.c
-   M /trunk/packet-quake3.c
-   M /trunk/packet-quakeworld.c
-   M /trunk/packet-radiotap.c
-   M /trunk/packet-radiotap.h
-   M /trunk/packet-radius.c
-   M /trunk/packet-ranap.c
-   M /trunk/packet-raw.c
-   M /trunk/packet-raw.h
-   M /trunk/packet-rip.c
-   M /trunk/packet-ripng.c
-   M /trunk/packet-ripng.h
-   M /trunk/packet-rlogin.c
-   M /trunk/packet-rmcp.c
-   M /trunk/packet-rmi.c
-   M /trunk/packet-rmi.h
-   M /trunk/packet-rmp.c
-   M /trunk/packet-rpc.c
-   M /trunk/packet-rpc.h
-   M /trunk/packet-rpl.c
-   M /trunk/packet-rquota.c
-   M /trunk/packet-rquota.h
-   M /trunk/packet-rsh.c
-   M /trunk/packet-rstat.c
-   M /trunk/packet-rsvp.c
-   M /trunk/packet-rsvp.h
-   M /trunk/packet-rsync.c
-   M /trunk/packet-rtcp.c
-   M /trunk/packet-rtcp.h
-   M /trunk/packet-rtp-events.c
-   M /trunk/packet-rtp-events.h
-   M /trunk/packet-rtp.c
-   M /trunk/packet-rtp.h
-   M /trunk/packet-rtps.c
-   M /trunk/packet-rtps.h
-   M /trunk/packet-rtsp.c
-   M /trunk/packet-rwall.c
-   M /trunk/packet-rwall.h
-   M /trunk/packet-rx.c
-   M /trunk/packet-rx.h
-   M /trunk/packet-sadmind.c
-   M /trunk/packet-sap.c
-   M /trunk/packet-sccp.c
-   M /trunk/packet-sccpmg.c
-   M /trunk/packet-scsi.c
-   M /trunk/packet-scsi.h
-   M /trunk/packet-sctp.c
-   M /trunk/packet-sctp.h
-   M /trunk/packet-sdlc.c
-   M /trunk/packet-sdp.c
-   M /trunk/packet-sebek.c
-   M /trunk/packet-ses.c
-   M /trunk/packet-ses.h
-   M /trunk/packet-sflow.c
-   M /trunk/packet-sigcomp.c
-   M /trunk/packet-sip.c
-   M /trunk/packet-sip.h
-   M /trunk/packet-sipfrag.c
-   M /trunk/packet-skinny.c
-   M /trunk/packet-slimp3.c
-   M /trunk/packet-sll.c
-   M /trunk/packet-sll.h
-   M /trunk/packet-slowprotocols.c
-   M /trunk/packet-slsk.c
-   M /trunk/packet-smb-browse.c
-   M /trunk/packet-smb-browse.h
-   M /trunk/packet-smb-common.c
-   M /trunk/packet-smb-common.h
-   M /trunk/packet-smb-logon.c
-   M /trunk/packet-smb-mailslot.c
-   M /trunk/packet-smb-mailslot.h
-   M /trunk/packet-smb-pipe.c
-   M /trunk/packet-smb-pipe.h
-   M /trunk/packet-smb-sidsnooping.c
-   M /trunk/packet-smb-sidsnooping.h
-   M /trunk/packet-smb.c
-   M /trunk/packet-smpp.c
-   M /trunk/packet-smtp.c
-   M /trunk/packet-sna.c
-   M /trunk/packet-sna.h
-   M /trunk/packet-snaeth.c
-   M /trunk/packet-sndcp.c
-   M /trunk/packet-snmp.c
-   M /trunk/packet-snmp.h
-   M /trunk/packet-socks.c
-   M /trunk/packet-spnego.c
-   M /trunk/packet-spray.c
-   M /trunk/packet-spray.h
-   M /trunk/packet-srvloc.c
-   M /trunk/packet-sscop.c
-   M /trunk/packet-ssh.c
-   M /trunk/packet-ssl.c
-   M /trunk/packet-stat-notify.c
-   M /trunk/packet-stat-notify.h
-   M /trunk/packet-stat.c
-   M /trunk/packet-stat.h
-   M /trunk/packet-stun.c
-   M /trunk/packet-sua.c
-   M /trunk/packet-symantec.c
-   M /trunk/packet-syslog.c
-   M /trunk/packet-t38.c
-   M /trunk/packet-tacacs.c
-   M /trunk/packet-tacacs.h
-   M /trunk/packet-tcap.c
-   M /trunk/packet-tcap.h
-   M /trunk/packet-tcp.c
-   M /trunk/packet-tcp.h
-   M /trunk/packet-tds.c
-   M /trunk/packet-teimanagement.c
-   M /trunk/packet-telnet.c
-   M /trunk/packet-teredo.c
-   M /trunk/packet-text-media.c
-   M /trunk/packet-tftp.c
-   M /trunk/packet-time.c
-   M /trunk/packet-tns.c
-   M /trunk/packet-tns.h
-   M /trunk/packet-tpkt.c
-   M /trunk/packet-tpkt.h
-   M /trunk/packet-tr.c
-   M /trunk/packet-tr.h
-   M /trunk/packet-trmac.c
-   M /trunk/packet-tsp.c
-   M /trunk/packet-tuxedo.c
-   M /trunk/packet-tzsp.c
-   M /trunk/packet-ucp.c
-   M /trunk/packet-udp.c
-   M /trunk/packet-udp.h
-   M /trunk/packet-v120.c
-   M /trunk/packet-vines.c
-   M /trunk/packet-vines.h
-   M /trunk/packet-vj.c
-   M /trunk/packet-vlan.c
-   M /trunk/packet-vlan.h
-   M /trunk/packet-vrrp.c
-   M /trunk/packet-vtp.c
-   M /trunk/packet-wap.c
-   M /trunk/packet-wap.h
-   M /trunk/packet-wbxml.c
-   M /trunk/packet-wccp.c
-   M /trunk/packet-wccp.h
-   M /trunk/packet-wcp.c
-   M /trunk/packet-wfleet-hdlc.c
-   M /trunk/packet-who.c
-   M /trunk/packet-wlancap.c
-   M /trunk/packet-wlancap.h
-   M /trunk/packet-wsp.c
-   M /trunk/packet-wsp.h
-   M /trunk/packet-wtls.c
-   M /trunk/packet-wtls.h
-   M /trunk/packet-wtp.c
-   M /trunk/packet-wtp.h
-   M /trunk/packet-x11-keysym.h
-   M /trunk/packet-x11-keysymdef.h
-   M /trunk/packet-x11.c
-   M /trunk/packet-x25.c
-   M /trunk/packet-x29.c
-   M /trunk/packet-xdmcp.c
-   M /trunk/packet-xot.c
-   M /trunk/packet-xyplex.c
-   M /trunk/packet-yhoo.c
-   M /trunk/packet-ymsg.c
-   M /trunk/packet-ypbind.c
-   M /trunk/packet-ypbind.h
-   M /trunk/packet-yppasswd.c
-   M /trunk/packet-yppasswd.h
-   M /trunk/packet-ypserv.c
-   M /trunk/packet-ypserv.h
-   M /trunk/packet-ypxfr.c
-   M /trunk/packet-ypxfr.h
-   M /trunk/packet-zebra.c
-   M /trunk/pcap-util-int.h
-   M /trunk/pcap-util-unix.c
-   M /trunk/pcap-util.c
-   M /trunk/pcap-util.h
-   M /trunk/plugins/Makefile.am
-   M /trunk/plugins/Makefile.nmake
-   M /trunk/plugins/README.interface
+
+add a link to the Ethereal wiki front page
+------------------------------------------------------------------------
+r12083 | guy | 2004-09-24 06:56:17 -0500 (Fri, 24 Sep 2004) | 7 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-ldp.c
+
+From Carlos Pignataro:
+
+	updates for 2 PWE3 interface parameters:
+
+	o FCS Retention [draft-ietf-pwe3-fcs-retention-02.txt]
+	o VCCV [draft-ietf-pwe3-vccv-03.txt]
+
+------------------------------------------------------------------------
+r12082 | gerald | 2004-09-23 21:09:40 -0500 (Thu, 23 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/capture-wpcap.c
+
+Fix a typo.
+
+------------------------------------------------------------------------
+r12081 | guy | 2004-09-23 17:36:01 -0500 (Thu, 23 Sep 2004) | 6 lines
+Changed paths:
+   M /trunk/epan/dissectors/Makefile.common
+   A /trunk/epan/dissectors/packet-cip.h
+
+From Magnus Hansson: move CIP protocol to own dissector (we forgot to
+check in packet-cip.h).
+
+Also, add packet-cip.h to epan/dissectors/Makefile.common, so it gets
+included in the release tarballs.
+
+------------------------------------------------------------------------
+r12080 | guy | 2004-09-23 15:51:09 -0500 (Thu, 23 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-mpls.c
+
+From Carlos Pignataro: append the symbolic name for reserved MPLS labels
+to the protocol tree item for the label.
+
+------------------------------------------------------------------------
+r12078 | guy | 2004-09-23 14:52:29 -0500 (Thu, 23 Sep 2004) | 7 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-etheric.c
+
+Get rid of the CRs and set eol-style to native so that you get CRs on
+Windows and don't get them on UN*X.
+
+Set keywords so that RCS IDs are expanded.
+
+Squelch some compiler warnings.
+
+------------------------------------------------------------------------
+r12077 | etxrab | 2004-09-23 14:44:51 -0500 (Thu, 23 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/epan/dissectors/Makefile.common
+
+Add dissector packet-etheric.c
+------------------------------------------------------------------------
+r12076 | etxrab | 2004-09-23 14:41:21 -0500 (Thu, 23 Sep 2004) | 1 line
+Changed paths:
+   A /trunk/epan/dissectors/packet-etheric.c
+
+Add a dissector for an Ericsson protocol named "Etheric"
+------------------------------------------------------------------------
+r12075 | guy | 2004-09-23 13:54:39 -0500 (Thu, 23 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-loop.c
+
+Fix the dissection of the Reply function - it has a "receipt number"
+field, and the data isn't at a fixed offset of 4.
+
+------------------------------------------------------------------------
+r12074 | guy | 2004-09-23 13:48:11 -0500 (Thu, 23 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/Makefile.common
+   M /trunk/epan/dissectors/packet-ethertype.c
+   A /trunk/epan/dissectors/packet-loop.c
+
+Add support for the Ethernet Configuration Testing Protocol.
+
+------------------------------------------------------------------------
+r12073 | guy | 2004-09-23 12:54:49 -0500 (Thu, 23 Sep 2004) | 6 lines
+Changed paths:
+   M /trunk/Makefile.nmake
+   M /trunk/capture-wpcap.c
+   M /trunk/config.h.win32
+   M /trunk/config.nmake
+
+From Gisle Vanem: add support for pcap_datalink_val_to_name() for Win32.
+
+Also add support for pcap_datalink_name_to_val(), and arrange that we
+properly define HAVE_PCAP_DATALINK_NAME_TO_VAL and
+HAVE_PCAP_DATALINK_VAL_TO_NAME for MSVC++ builds.
+
+------------------------------------------------------------------------
+r12072 | guy | 2004-09-23 12:40:36 -0500 (Thu, 23 Sep 2004) | 6 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-aim-icq.c
+   M /trunk/epan/dissectors/packet-aim-messaging.c
+   M /trunk/epan/dissectors/packet-aim-oft.c
+   M /trunk/epan/dissectors/packet-aim-signon.c
+   M /trunk/epan/dissectors/packet-aim.c
+   M /trunk/epan/dissectors/packet-aim.h
+
+From Jelmer Vernooij:
+
+- Dissect ICQ TLV values
+- Dissect channel 1 and channel 2 messages correctly in Oscar (required
+  for dissecting direct connections)
+
+------------------------------------------------------------------------
+r12071 | guy | 2004-09-23 12:39:13 -0500 (Thu, 23 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-image-jfif.c
+
+From Jelmer Vernooij: fix a comment.
+
+------------------------------------------------------------------------
+r12070 | guy | 2004-09-23 12:34:35 -0500 (Thu, 23 Sep 2004) | 11 lines
+Changed paths:
+   M /trunk/epan/dissectors/Makefile.common
+   A /trunk/epan/dissectors/packet-cip.c
+   M /trunk/epan/dissectors/packet-enip.c
+
+From Magnus Hansson:
+
+	move CIP protocol to own dissector
+	clean up code and fix variable names
+	add more info to info column
+	fixed decoding of embedded messages in Unconnected send and
+	    Multiple Service packets
+	add more info to path decoding
+	add more filter options/clean up
+	complete CIP vendor codes
+
+------------------------------------------------------------------------
+r12069 | guy | 2004-09-23 12:15:26 -0500 (Thu, 23 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/AUTHORS
+   M /trunk/epan/dissectors/packet-gre.c
+
+From packet steve: add a filterable field for the GRE key.
+
+------------------------------------------------------------------------
+r12068 | guy | 2004-09-23 02:32:58 -0500 (Thu, 23 Sep 2004) | 4 lines
+Changed paths:
    M /trunk/plugins/Xass-list
    M /trunk/plugins/Xplugin_api.c
    M /trunk/plugins/Xplugin_api.h
    M /trunk/plugins/Xplugin_api_decls.h
    M /trunk/plugins/Xplugin_table.h
-   M /trunk/plugins/acn/AUTHORS
-   M /trunk/plugins/acn/COPYING
-   M /trunk/plugins/acn/ChangeLog
-   M /trunk/plugins/acn/INSTALL
-   M /trunk/plugins/acn/Makefile.am
-   M /trunk/plugins/acn/Makefile.nmake
-   M /trunk/plugins/acn/NEWS
-   M /trunk/plugins/acn/acn.h
-   M /trunk/plugins/acn/moduleinfo.h
-   M /trunk/plugins/acn/packet-acn.c
-   M /trunk/plugins/artnet/AUTHORS
-   M /trunk/plugins/artnet/COPYING
-   M /trunk/plugins/artnet/ChangeLog
-   M /trunk/plugins/artnet/INSTALL
-   M /trunk/plugins/artnet/Makefile.am
-   M /trunk/plugins/artnet/Makefile.nmake
-   M /trunk/plugins/artnet/NEWS
-   M /trunk/plugins/artnet/moduleinfo.h
-   M /trunk/plugins/artnet/packet-artnet.c
-   M /trunk/plugins/asn1/AUTHORS
-   M /trunk/plugins/asn1/COPYING
-   M /trunk/plugins/asn1/ChangeLog
-   M /trunk/plugins/asn1/INSTALL
-   M /trunk/plugins/asn1/Makefile.am
-   M /trunk/plugins/asn1/Makefile.nmake
-   M /trunk/plugins/asn1/NEWS
-   M /trunk/plugins/asn1/moduleinfo.h
-   M /trunk/plugins/asn1/packet-asn1.c
-   M /trunk/plugins/ciscosm/AUTHORS
-   M /trunk/plugins/ciscosm/COPYING
-   M /trunk/plugins/ciscosm/ChangeLog
-   M /trunk/plugins/ciscosm/INSTALL
-   M /trunk/plugins/ciscosm/Makefile.am
-   M /trunk/plugins/ciscosm/Makefile.nmake
-   M /trunk/plugins/ciscosm/NEWS
-   M /trunk/plugins/ciscosm/moduleinfo.h
-   M /trunk/plugins/ciscosm/packet-sm.c
-   M /trunk/plugins/docsis/AUTHORS
-   M /trunk/plugins/docsis/ChangeLog
-   M /trunk/plugins/docsis/INSTALL
-   M /trunk/plugins/docsis/Makefile.am
-   M /trunk/plugins/docsis/Makefile.nmake
-   M /trunk/plugins/docsis/NEWS
-   M /trunk/plugins/docsis/README
-   M /trunk/plugins/docsis/moduleinfo.h
-   M /trunk/plugins/docsis/packet-bpkmattr.c
-   M /trunk/plugins/docsis/packet-bpkmreq.c
-   M /trunk/plugins/docsis/packet-bpkmrsp.c
-   M /trunk/plugins/docsis/packet-docsis.c
-   M /trunk/plugins/docsis/packet-docsis.h
-   M /trunk/plugins/docsis/packet-dsaack.c
-   M /trunk/plugins/docsis/packet-dsareq.c
-   M /trunk/plugins/docsis/packet-dsarsp.c
-   M /trunk/plugins/docsis/packet-dscack.c
-   M /trunk/plugins/docsis/packet-dscreq.c
-   M /trunk/plugins/docsis/packet-dscrsp.c
-   M /trunk/plugins/docsis/packet-dsdreq.c
-   M /trunk/plugins/docsis/packet-dsdrsp.c
-   M /trunk/plugins/docsis/packet-intrngreq.c
-   M /trunk/plugins/docsis/packet-macmgmt.c
-   M /trunk/plugins/docsis/packet-map.c
-   M /trunk/plugins/docsis/packet-regack.c
-   M /trunk/plugins/docsis/packet-regreq.c
-   M /trunk/plugins/docsis/packet-regrsp.c
-   M /trunk/plugins/docsis/packet-rngreq.c
-   M /trunk/plugins/docsis/packet-rngrsp.c
-   M /trunk/plugins/docsis/packet-tlv.c
-   M /trunk/plugins/docsis/packet-tlv.h
-   M /trunk/plugins/docsis/packet-type29ucd.c
-   M /trunk/plugins/docsis/packet-uccreq.c
-   M /trunk/plugins/docsis/packet-uccrsp.c
-   M /trunk/plugins/docsis/packet-ucd.c
-   M /trunk/plugins/docsis/packet-vendor.c
-   M /trunk/plugins/enttec/AUTHORS
-   M /trunk/plugins/enttec/COPYING
-   M /trunk/plugins/enttec/ChangeLog
-   M /trunk/plugins/enttec/INSTALL
-   M /trunk/plugins/enttec/Makefile.am
-   M /trunk/plugins/enttec/Makefile.nmake
-   M /trunk/plugins/enttec/NEWS
-   M /trunk/plugins/enttec/moduleinfo.h
-   M /trunk/plugins/enttec/packet-enttec.c
-   M /trunk/plugins/giop/AUTHORS
-   M /trunk/plugins/giop/COPYING
-   M /trunk/plugins/giop/ChangeLog
-   M /trunk/plugins/giop/INSTALL
-   M /trunk/plugins/giop/Makefile.am
-   M /trunk/plugins/giop/Makefile.nmake
-   M /trunk/plugins/giop/NEWS
-   M /trunk/plugins/giop/README
-   M /trunk/plugins/giop/moduleinfo.h
-   M /trunk/plugins/giop/packet-coseventcomm.c
-   M /trunk/plugins/giop/packet-cosnaming.c
-   M /trunk/plugins/gryphon/AUTHORS
-   M /trunk/plugins/gryphon/COPYING
-   M /trunk/plugins/gryphon/ChangeLog
-   M /trunk/plugins/gryphon/INSTALL
-   M /trunk/plugins/gryphon/Makefile.am
-   M /trunk/plugins/gryphon/Makefile.nmake
-   M /trunk/plugins/gryphon/NEWS
-   M /trunk/plugins/gryphon/README
-   M /trunk/plugins/gryphon/moduleinfo.h
-   M /trunk/plugins/gryphon/packet-gryphon.c
-   M /trunk/plugins/gryphon/packet-gryphon.h
-   M /trunk/plugins/gryphon/stamp-h.in
-   M /trunk/plugins/irda/Makefile.am
-   M /trunk/plugins/irda/Makefile.nmake
-   M /trunk/plugins/irda/irda-appl.h
-   M /trunk/plugins/irda/moduleinfo.h
-   M /trunk/plugins/irda/packet-ircomm.c
-   M /trunk/plugins/irda/packet-irda.c
-   M /trunk/plugins/irda/packet-sir.c
-   M /trunk/plugins/lwres/AUTHORS
-   M /trunk/plugins/lwres/Makefile.am
-   M /trunk/plugins/lwres/Makefile.nmake
-   M /trunk/plugins/lwres/moduleinfo.h
-   M /trunk/plugins/lwres/packet-lwres.c
-   M /trunk/plugins/megaco/AUTHORS
-   M /trunk/plugins/megaco/COPYING
-   M /trunk/plugins/megaco/ChangeLog
-   M /trunk/plugins/megaco/INSTALL
-   M /trunk/plugins/megaco/Makefile.am
-   M /trunk/plugins/megaco/Makefile.nmake
-   M /trunk/plugins/megaco/NEWS
-   M /trunk/plugins/megaco/moduleinfo.h
-   M /trunk/plugins/megaco/packet-megaco.c
-   M /trunk/plugins/mgcp/AUTHORS
-   M /trunk/plugins/mgcp/COPYING
-   M /trunk/plugins/mgcp/ChangeLog
-   M /trunk/plugins/mgcp/INSTALL
-   M /trunk/plugins/mgcp/Makefile.am
-   M /trunk/plugins/mgcp/Makefile.nmake
-   M /trunk/plugins/mgcp/NEWS
-   M /trunk/plugins/mgcp/moduleinfo.h
-   M /trunk/plugins/mgcp/packet-mgcp.c
-   M /trunk/plugins/mgcp/packet-mgcp.h
-   M /trunk/plugins/pcli/AUTHORS
-   M /trunk/plugins/pcli/COPYING
-   M /trunk/plugins/pcli/ChangeLog
-   M /trunk/plugins/pcli/INSTALL
-   M /trunk/plugins/pcli/Makefile.am
-   M /trunk/plugins/pcli/Makefile.nmake
-   M /trunk/plugins/pcli/NEWS
-   M /trunk/plugins/pcli/moduleinfo.h
-   M /trunk/plugins/pcli/packet-pcli.c
-   M /trunk/plugins/plugin_api.c
+
+Add proto_tree_add_debug_text(), rtcp_add_address(), and
+rtp_add_address() to the list of functions exported from libethereal.dll
+and exported via the plugin function table.
+
+------------------------------------------------------------------------
+r12067 | guy | 2004-09-23 02:32:16 -0500 (Thu, 23 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/epan/libethereal.def
+   M /trunk/epan/plugins.c
    M /trunk/plugins/plugin_api.h
-   M /trunk/plugins/plugin_api_decls.h
-   M /trunk/plugins/plugin_api_defs.h
    M /trunk/plugins/plugin_api_list.c
-   M /trunk/plugins/plugin_gen.py
-   M /trunk/plugins/plugin_table.h
-   M /trunk/plugins/rdm/AUTHORS
-   M /trunk/plugins/rdm/COPYING
-   M /trunk/plugins/rdm/Makefile.am
-   M /trunk/plugins/rdm/Makefile.nmake
-   M /trunk/plugins/rdm/moduleinfo.h
-   M /trunk/plugins/rdm/packet-rdm.c
-   M /trunk/plugins/rlm/AUTHORS
-   M /trunk/plugins/rlm/COPYING
-   M /trunk/plugins/rlm/ChangeLog
-   M /trunk/plugins/rlm/INSTALL
-   M /trunk/plugins/rlm/Makefile.am
-   M /trunk/plugins/rlm/Makefile.nmake
-   M /trunk/plugins/rlm/NEWS
-   M /trunk/plugins/rlm/moduleinfo.h
-   M /trunk/plugins/rlm/packet-rlm.c
-   M /trunk/plugins/rtnet/AUTHORS
-   M /trunk/plugins/rtnet/COPYING
-   M /trunk/plugins/rtnet/Makefile.am
-   M /trunk/plugins/rtnet/Makefile.nmake
-   M /trunk/plugins/rtnet/moduleinfo.h
-   M /trunk/plugins/rtnet/packet-rtnet.c
-   M /trunk/plugins/rudp/AUTHORS
-   M /trunk/plugins/rudp/COPYING
-   M /trunk/plugins/rudp/ChangeLog
-   M /trunk/plugins/rudp/INSTALL
-   M /trunk/plugins/rudp/Makefile.am
-   M /trunk/plugins/rudp/Makefile.nmake
-   M /trunk/plugins/rudp/NEWS
-   M /trunk/plugins/rudp/moduleinfo.h
-   M /trunk/plugins/rudp/packet-rudp.c
-   M /trunk/plugins/v5ua/AUTHORS
-   M /trunk/plugins/v5ua/COPYING
-   M /trunk/plugins/v5ua/ChangeLog
-   M /trunk/plugins/v5ua/Makefile.am
-   M /trunk/plugins/v5ua/Makefile.nmake
-   M /trunk/plugins/v5ua/moduleinfo.h
-   M /trunk/plugins/v5ua/packet-v5ua.c
-   M /trunk/ppptypes.h
-   M /trunk/prefs-int.h
-   M /trunk/prefs.c
-   M /trunk/prefs.h
-   M /trunk/print.c
-   M /trunk/print.h
-   M /trunk/print.ps
-   M /trunk/process-x11-fields.pl
-   M /trunk/progress_dlg.h
-   M /trunk/proto_hier_stats.c
-   M /trunk/proto_hier_stats.h
-   M /trunk/ps.h
-   M /trunk/ptvcursor.c
-   M /trunk/ptvcursor.h
-   M /trunk/randpkt.c
-   M /trunk/range.c
-   M /trunk/range.h
-   M /trunk/rdps.c
-   M /trunk/reassemble.c
-   M /trunk/reassemble.h
-   M /trunk/register.h
-   M /trunk/req_resp_hdrs.c
-   M /trunk/req_resp_hdrs.h
-   M /trunk/ringbuffer.c
-   M /trunk/ringbuffer.h
-   M /trunk/rpc_defrag.h
-   M /trunk/rtp_pt.h
-   M /trunk/sctpppids.h
-   M /trunk/simple_dialog.h
-   M /trunk/smb.h
-   M /trunk/snprintf-imp.h
-   M /trunk/snprintf.c
-   M /trunk/snprintf.h
-   M /trunk/statusbar.h
-   M /trunk/strcasecmp.c
-   M /trunk/strerror.c
-   M /trunk/strerror.h
-   M /trunk/strncasecmp.c
-   M /trunk/strptime.c
-   M /trunk/strptime.h
-   M /trunk/summary.c
-   M /trunk/summary.h
-   M /trunk/sunping.xml
-   M /trunk/t35.c
-   M /trunk/t35.h
-   M /trunk/tap-ansi_astat.c
-   M /trunk/tap-bootpstat.c
-   M /trunk/tap-dcerpcstat.c
-   M /trunk/tap-gsm_astat.c
-   M /trunk/tap-h225counter.c
-   M /trunk/tap-h225rassrt.c
-   M /trunk/tap-httpstat.c
-   M /trunk/tap-iostat.c
-   M /trunk/tap-iousers.c
-   M /trunk/tap-mgcpstat.c
-   M /trunk/tap-protocolinfo.c
-   M /trunk/tap-protohierstat.c
-   M /trunk/tap-rpcprogs.c
-   M /trunk/tap-rpcstat.c
-   M /trunk/tap-sipstat.c
-   M /trunk/tap-smbsids.c
-   M /trunk/tap-smbstat.c
-   M /trunk/tap-wspstat.c
-   M /trunk/tap.c
-   M /trunk/tap.h
-   M /trunk/tap_dfilter_dlg.h
-   M /trunk/tethereal.c
-   M /trunk/text2pcap-scanner.l
-   M /trunk/text2pcap.c
-   M /trunk/text2pcap.h
-   M /trunk/timestats.c
-   M /trunk/timestats.h
-   M /trunk/tools/EtherealXML.py
-   M /trunk/tools/Makefile.am
-   M /trunk/tools/Makefile.nmake
+
+Add proto_tree_add_debug_text(), rtcp_add_address(), and
+rtp_add_address() to the list of functions exported from libethereal.dll
+and exported via the plugin function table.
+
+------------------------------------------------------------------------
+r12066 | guy | 2004-09-22 11:32:20 -0500 (Wed, 22 Sep 2004) | 7 lines
+Changed paths:
    M /trunk/tools/asn2eth.py
-   M /trunk/tools/cvsdiff-fix.py
-   M /trunk/tools/dfilter-test.py
-   M /trunk/tools/lemon/Makefile.am
-   M /trunk/tools/lemon/Makefile.nmake
-   M /trunk/tools/lemon/README
-   M /trunk/tools/lemon/cppmagic.h
-   M /trunk/tools/lemon/lemon.c
-   M /trunk/tools/lemon/lemon.html
-   M /trunk/tools/lemon/lemonflex-head.inc
-   M /trunk/tools/lemon/lemonflex-tail.inc
-   M /trunk/tools/lemon/lempar.c
-   M /trunk/tools/lex.py
-   M /trunk/tools/msnchat
-   M /trunk/tools/pkt-from-core.py
-   M /trunk/tools/win32-setup.sh
-   M /trunk/tools/yacc.py
-   M /trunk/ui_util.h
-   M /trunk/util.c
-   M /trunk/util.h
-   M /trunk/version_info.c
-   M /trunk/version_info.h
-   M /trunk/wiretap/5views.c
-   M /trunk/wiretap/5views.h
-   M /trunk/wiretap/AUTHORS
-   M /trunk/wiretap/COPYING
-   M /trunk/wiretap/ChangeLog
-   M /trunk/wiretap/INSTALL
-   M /trunk/wiretap/Makefile.am
-   M /trunk/wiretap/Makefile.nmake
-   M /trunk/wiretap/NEWS
-   M /trunk/wiretap/README
-   M /trunk/wiretap/README.developer
-   M /trunk/wiretap/acinclude.m4
-   M /trunk/wiretap/airopeek9.c
-   M /trunk/wiretap/airopeek9.h
-   M /trunk/wiretap/ascend-grammar.y
-   M /trunk/wiretap/ascend-int.h
-   M /trunk/wiretap/ascend-scanner.l
-   M /trunk/wiretap/ascend.c
-   M /trunk/wiretap/ascend.h
-   M /trunk/wiretap/atm.c
-   M /trunk/wiretap/atm.h
-   M /trunk/wiretap/buffer.c
-   M /trunk/wiretap/buffer.h
-   M /trunk/wiretap/config.h.win32
-   M /trunk/wiretap/configure.in
-   M /trunk/wiretap/cosine.c
-   M /trunk/wiretap/cosine.h
-   M /trunk/wiretap/csids.c
-   M /trunk/wiretap/csids.h
-   M /trunk/wiretap/dbs-etherwatch.c
-   M /trunk/wiretap/dbs-etherwatch.h
-   M /trunk/wiretap/erf.c
-   M /trunk/wiretap/erf.h
-   M /trunk/wiretap/etherpeek.c
-   M /trunk/wiretap/etherpeek.h
-   M /trunk/wiretap/eyesdn.c
-   M /trunk/wiretap/eyesdn.h
-   M /trunk/wiretap/file_access.c
-   M /trunk/wiretap/file_wrappers.c
-   M /trunk/wiretap/file_wrappers.h
-   M /trunk/wiretap/hcidump.c
-   M /trunk/wiretap/hcidump.h
-   M /trunk/wiretap/i4b_trace.h
-   M /trunk/wiretap/i4btrace.c
-   M /trunk/wiretap/i4btrace.h
-   M /trunk/wiretap/iptrace.c
-   M /trunk/wiretap/iptrace.h
-   M /trunk/wiretap/lanalyzer.c
-   M /trunk/wiretap/lanalyzer.h
-   M /trunk/wiretap/libpcap.c
-   M /trunk/wiretap/libpcap.h
-   M /trunk/wiretap/netmon.c
-   M /trunk/wiretap/netmon.h
+
+From Tomas Kukosa:
+
+- make the default protocol name module-name from input file
+- don't use the [##]/(##) mark for index of SET/SEQUENCE item with
+  original PER/BER API
+- allow PDUs to be registered 
+
+------------------------------------------------------------------------
+r12065 | guy | 2004-09-22 11:28:39 -0500 (Wed, 22 Sep 2004) | 8 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-mpls.c
+
+From Carlos Pignataro:
+
+	append MPLS fields and values to the MPLS Header subtree;
+
+	correct the string displayed for MPLS Label;
+
+	don't show non-reserved MPLS label values as "Unknown".
+
+------------------------------------------------------------------------
+r12064 | guy | 2004-09-22 04:42:57 -0500 (Wed, 22 Sep 2004) | 6 lines
+Changed paths:
+   M /trunk/capture.c
+
+If we have "pcap_datalink_val_to_name()", use it when we construct a
+"-y" argument for the capture subprocess - the capture subprocess will
+expect a symbolic value, not a numeric value, if we have
+"pcap_datalink_name_to_val()".  (We assume that if one is present the
+other will be present as well.)
+
+------------------------------------------------------------------------
+r12063 | guy | 2004-09-22 03:04:40 -0500 (Wed, 22 Sep 2004) | 9 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-aim-admin.c
+   M /trunk/epan/dissectors/packet-aim-bos.c
+   M /trunk/epan/dissectors/packet-aim-buddylist.c
+   M /trunk/epan/dissectors/packet-aim-generic.c
+   M /trunk/epan/dissectors/packet-aim-invitation.c
+   M /trunk/epan/dissectors/packet-aim-location.c
+   M /trunk/epan/dissectors/packet-aim-messaging.c
+   M /trunk/epan/dissectors/packet-aim-ssi.c
+   M /trunk/epan/dissectors/packet-aim-sst.c
+   M /trunk/epan/dissectors/packet-aim-userlookup.c
+   M /trunk/epan/dissectors/packet-aim.c
+   M /trunk/epan/dissectors/packet-aim.h
+
+From Jelmer Vernooij:
+
+ - Dissect the DC (Direct Connection) info structure
+ - Dissect the complete buddy icon family (you can now save buddy
+   icons as .JPG's/.PNG's directly from the capture using the "Export
+   selected bytes..." option!)
+ - Add a function that dissects a sequence of TLV's instead of having
+   while() loops all over the place.
+
+------------------------------------------------------------------------
+r12062 | guy | 2004-09-21 18:15:59 -0500 (Tue, 21 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/proto.c
+
+Fix a typo.
+
+------------------------------------------------------------------------
+r12060 | guy | 2004-09-21 03:01:29 -0500 (Tue, 21 Sep 2004) | 10 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-aim-admin.c
+   M /trunk/epan/dissectors/packet-aim-adverts.c
+   M /trunk/epan/dissectors/packet-aim-bos.c
+   M /trunk/epan/dissectors/packet-aim-buddylist.c
+   M /trunk/epan/dissectors/packet-aim-chat.c
+   M /trunk/epan/dissectors/packet-aim-chatnav.c
+   M /trunk/epan/dissectors/packet-aim-directory.c
+   M /trunk/epan/dissectors/packet-aim-email.c
+   M /trunk/epan/dissectors/packet-aim-generic.c
+   M /trunk/epan/dissectors/packet-aim-icq.c
+   M /trunk/epan/dissectors/packet-aim-invitation.c
+   M /trunk/epan/dissectors/packet-aim-location.c
+   M /trunk/epan/dissectors/packet-aim-messaging.c
+   M /trunk/epan/dissectors/packet-aim-popup.c
+   M /trunk/epan/dissectors/packet-aim-signon.c
+   M /trunk/epan/dissectors/packet-aim-ssi.c
+   M /trunk/epan/dissectors/packet-aim-sst.c
+   M /trunk/epan/dissectors/packet-aim-stats.c
+   M /trunk/epan/dissectors/packet-aim-translate.c
+   M /trunk/epan/dissectors/packet-aim-userlookup.c
+   M /trunk/epan/dissectors/packet-aim.c
+   M /trunk/epan/dissectors/packet-aim.h
+
+From Jelmer Vernooij:
+
+	Remove some code duplication from the Oscar dissector (reduces
+	the number of lines by 500) by providing a custom registration
+	function for oscar families (aim_init_family).  This also fixes
+	a number of issues with column names.
+
+	Add minor updates such as adding support for the Capability Info
+	TLV on users.
+
+------------------------------------------------------------------------
+r12059 | guy | 2004-09-21 02:47:14 -0500 (Tue, 21 Sep 2004) | 11 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-isakmp.c
+
+From Yaniv Kaul:
+
+1. Fix dissection of Check Point vendor ID version field. The length was
+   wrong.
+2. Added dissection of payloads 130 and 131, which were used in early
+   NAT-T drafts (and are still used by MS and others). They are equal to
+   payloads 15 & 16, (NAT-D, NAT-OA), respectively.
+3. Added ASN.1 decoding of Certificate requests of type X.509
+   Certificate - Signature (4)
+4. Added ASN.1 decoding of ID of type ID_DER_ASN1_DN (9) 
+
+------------------------------------------------------------------------
+r12058 | guy | 2004-09-21 01:48:31 -0500 (Tue, 21 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-tali.c
+
+From Viorel Suman: fields in TALI are little-endian, so in the "get PDU
+length" routine, fetch the length field with "tvb_get_letohs()".
+
+------------------------------------------------------------------------
+r12057 | ulfl | 2004-09-21 00:17:59 -0500 (Tue, 21 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/color_filters.c
+
+fixed some comment typos
+------------------------------------------------------------------------
+r12055 | etxrab | 2004-09-20 14:22:10 -0500 (Mon, 20 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/epan/dissectors/packet-rtcp.c
+
+From Martin Mathieson: Fix a simple bug, in calculate_roundtrip_delay(), where the conversation is looked up, the port arguments are given in reverse order.
+------------------------------------------------------------------------
+r12054 | etxrab | 2004-09-20 14:20:05 -0500 (Mon, 20 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/epan/dissectors/packet-radius.c
+
+Update some RADIUS value strings
+------------------------------------------------------------------------
+r12053 | ulfl | 2004-09-19 11:43:11 -0500 (Sun, 19 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/developer-guide.xml
+   M /trunk/docbook/dg-src/EDG_meta_info.xml
+   M /trunk/docbook/ug-src/EUG_meta_info.xml
+
+add Ethereal logo
+------------------------------------------------------------------------
+r12052 | ulfl | 2004-09-19 11:41:58 -0500 (Sun, 19 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/user-guide.xml
+
+removed duplicate Ethereal version entities
+------------------------------------------------------------------------
+r12051 | ulfl | 2004-09-19 11:40:11 -0500 (Sun, 19 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/ug-src/EUG_chapter_build_install.xml
+
+removed EtherealCurrentVersionTarFile entity
+------------------------------------------------------------------------
+r12050 | ulfl | 2004-09-19 11:38:29 -0500 (Sun, 19 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_env_intro.xml
+
+add some info how to report problems
+------------------------------------------------------------------------
+r12049 | ulfl | 2004-09-19 11:36:10 -0500 (Sun, 19 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/graphics/ethereal-logo.png
+
+the file content seemed to be corrupted
+------------------------------------------------------------------------
+r12048 | guy | 2004-09-19 06:39:48 -0500 (Sun, 19 Sep 2004) | 8 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-radius.c
+
+Add to the "radius_attr_info" structure a pointer to an hf_ value, and,
+if that pointer is non-null, put the field in question into the protocol
+tree under the top-level item for that attribute/value pair, rather than
+hardcoding particular fields for particular attribute codes.
+
+Use BASE_NONE, not BASE_DEC, for FT_STRING, FT_BYTES, and FT_IPv4
+fields.
+
+------------------------------------------------------------------------
+r12047 | guy | 2004-09-19 02:13:52 -0500 (Sun, 19 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-icmpv6.c
+   M /trunk/epan/dissectors/packet-ip.c
    M /trunk/wiretap/nettl.c
-   M /trunk/wiretap/nettl.h
-   M /trunk/wiretap/network_instruments.c
-   M /trunk/wiretap/network_instruments.h
-   M /trunk/wiretap/netxray.c
-   M /trunk/wiretap/netxray.h
-   M /trunk/wiretap/ngsniffer.c
-   M /trunk/wiretap/ngsniffer.h
-   M /trunk/wiretap/pppdump.c
-   M /trunk/wiretap/pppdump.h
-   M /trunk/wiretap/radcom.c
-   M /trunk/wiretap/radcom.h
-   M /trunk/wiretap/snoop.c
-   M /trunk/wiretap/snoop.h
-   M /trunk/wiretap/toshiba.c
-   M /trunk/wiretap/toshiba.h
-   M /trunk/wiretap/visual.c
-   M /trunk/wiretap/visual.h
-   M /trunk/wiretap/vms.c
-   M /trunk/wiretap/vms.h
-   M /trunk/wiretap/wtap-capture.h
-   M /trunk/wiretap/wtap-int.h
    M /trunk/wiretap/wtap.c
-   M /trunk/wiretap/wtap.def
    M /trunk/wiretap/wtap.h
-   M /trunk/wka.tmpl
-   M /trunk/x11-fields
-   M /trunk/x264_prt_id.h
-   M /trunk/xdlc.c
-   M /trunk/xdlc.h
-   M /trunk/xmlstub.c
-   M /trunk/xmlstub.h
 
-Set the svn:eol-style property on all text files to "native", so that
-they have LF at the end of the line on UN*X and CR/LF on Windows;
-hopefully this means that if a CR/LF version is checked in on Windows,
-the CRs will be stripped so that they show up only when checked out on
-Windows, not on UN*X.
+From Mark C. Brown: fix support for nettl NETTL_SUBSYS_NS_LS_ICMP and
+NETTL_SUBSYS_NS_LS_ICMPV6 - they don't even have IP headers, so we need
+to directly call the ICMP and ICMPv6 dissectors.
+
+------------------------------------------------------------------------
+r12046 | guy | 2004-09-18 22:51:42 -0500 (Sat, 18 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-kerberos4.c
+
+Make the Kerberos 4 dissector a "new-style" dissector, so it can
+indicate when it's rejected a packet.
+
+------------------------------------------------------------------------
+r12045 | guy | 2004-09-18 22:00:00 -0500 (Sat, 18 Sep 2004) | 20 lines
+Changed paths:
+   M /trunk/plugins/asn1/packet-asn1.c
+
+Preference strings don't remain null pointers for long - they get
+converted to pointers to null strings (see prefs.c for an explanation). 
+Initialize "current_asn1" to a mallocated null string.
+
+That lets us use "strcmp()" to compare asn1_filename and current_asn1. 
+We already do that with asn1_pduname and current_pduname, so use
+"strcmp()" for them as well.
+
+Call "build_pdu_tree()" if we haven't yet built a PDU tree, even if the
+PDU type preference hasn't changed.
+
+Don't register with any of the ports unless we have a PDU tree, so we
+don't try to dissect with a null PDU tree pointer.
+
+Before constructing a PDU tree, if we already have a PDU tree, free it.
+
+When we free data_nodes, free the data attached to the nodes.
+
+Make a bunch of stuff static.
+
+------------------------------------------------------------------------
+r12044 | etxrab | 2004-09-18 16:31:20 -0500 (Sat, 18 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/epan/dissectors/packet-rtcp.c
+
+Fiax a MSVC Warning
+------------------------------------------------------------------------
+r12043 | etxrab | 2004-09-18 16:28:28 -0500 (Sat, 18 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/plugins/megaco/packet-megaco.c
+
+Fix dissection of MEGACO over TCP, there will be a TPKT header included.
+------------------------------------------------------------------------
+r12042 | guy | 2004-09-18 04:31:26 -0500 (Sat, 18 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-skinny.c
+
+Use FALSE as the byte order argument to "proto_tree_add_item()" when
+fetching big-endian IPv4 addresses.
+
+------------------------------------------------------------------------
+r12041 | guy | 2004-09-18 04:19:33 -0500 (Sat, 18 Sep 2004) | 13 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-ncp.c
+
+Distinguish between the "data offset" field (offset of this burst
+within the file) and "burst offset" field (offset of this packet within
+the burst).
+
+The burst header is not present if the SYS flag is set in the packet or
+if the data offset field is non-zero.
+
+Compute the offset, within a burst packet, of the data, as we advance
+through the burst header - and don't advance through the burst header if
+it's not present.
+
+Properly display the fields in the "missing fragment list".
+
+------------------------------------------------------------------------
+r12040 | guy | 2004-09-18 01:42:16 -0500 (Sat, 18 Sep 2004) | 5 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-aim-location.c
+   M /trunk/epan/dissectors/packet-aim.c
+
+From Jelmer Vernooij:
+
+	- Support client capabilities list
+	- Fix incorrect TLV usage
+
+------------------------------------------------------------------------
+r12039 | sahlberg | 2004-09-17 22:20:52 -0500 (Fri, 17 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-kerberos4.c
+
+add decoding of werido special transac versions of kerberos 4
+
+
+
+------------------------------------------------------------------------
+r12038 | sahlberg | 2004-09-17 18:45:29 -0500 (Fri, 17 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-kerberos.c
+
+make kerberos able to dissect pkinit/pa-pk-as-rep packets
+
+
+
+------------------------------------------------------------------------
+r12037 | sahlberg | 2004-09-17 18:33:10 -0500 (Fri, 17 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-pkinit.c
+   M /trunk/epan/dissectors/packet-pkinit.h
+
+add pkinit replies dissection
+
+
+------------------------------------------------------------------------
+r12036 | sahlberg | 2004-09-17 18:32:33 -0500 (Fri, 17 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/asn1/pkinit/PKINIT.asn
+   M /trunk/asn1/pkinit/packet-pkinit-template.c
+   M /trunk/asn1/pkinit/packet-pkinit-template.h
+
+add pkinit replies
+
+
+------------------------------------------------------------------------
+r12035 | sahlberg | 2004-09-17 18:24:17 -0500 (Fri, 17 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-pkix1explicit.c
+   M /trunk/epan/dissectors/packet-pkix1explicit.h
+
+get rid of some compiler warnings
+
+
+------------------------------------------------------------------------
+r12034 | sahlberg | 2004-09-17 18:23:40 -0500 (Fri, 17 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/asn1/pkix1explicit/packet-pkix1explicit-template.c
+   M /trunk/asn1/pkix1explicit/packet-pkix1explicit-template.h
+   M /trunk/asn1/pkix1explicit/pkix1explicit.cnf
+   M /trunk/asn1/pkix1explicit/pkix1explicit_exp.cnf
+
+get rid of some more compiler warnings
+
+
+------------------------------------------------------------------------
+r12033 | sahlberg | 2004-09-17 18:16:17 -0500 (Fri, 17 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-pkix1implicit.c
+   M /trunk/epan/dissectors/packet-pkix1implicit.h
+
+get rid of a compiler warning for unused function UserNotice
+
+
+------------------------------------------------------------------------
+r12032 | sahlberg | 2004-09-17 18:14:21 -0500 (Fri, 17 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/asn1/pkix1implicit/packet-pkix1implicit-template.h
+   M /trunk/asn1/pkix1implicit/pkix1implicit.cnf
+   M /trunk/asn1/pkix1implicit/pkix1implicit_exp.cnf
+
+squelch a compiler warning   for UserNotice
+
+
+------------------------------------------------------------------------
+r12030 | guy | 2004-09-17 04:37:14 -0500 (Fri, 17 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-aim.c
+
+From Jelmer Vernooij: get rid of some unused tables.
+
+------------------------------------------------------------------------
+r12029 | guy | 2004-09-17 04:32:53 -0500 (Fri, 17 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/doc/README.developer
+
+Note that declarations in the middle of a block aren't supported by all
+compilers, and thus shouldn't be used.
+
+------------------------------------------------------------------------
+r12028 | guy | 2004-09-17 04:30:41 -0500 (Fri, 17 Sep 2004) | 5 lines
+Changed paths:
+   M /trunk/AUTHORS
+   M /trunk/epan/dissectors/packet-aim.c
+
+from Thomas Boehne: don't put code before a declaration - that's a
+GCCism.
+
+De-@ify Marten Svantesson's e-mail address.
+
+------------------------------------------------------------------------
+r12027 | guy | 2004-09-17 04:05:03 -0500 (Fri, 17 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-x11.c
+
+IP addresses are always big-endian.
+
+------------------------------------------------------------------------
+r12026 | sahlberg | 2004-09-17 03:43:03 -0500 (Fri, 17 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/Makefile.common
+   A /trunk/epan/dissectors/packet-kerberos4.c
+
+new protocol : Kerberos v4
+
+
+------------------------------------------------------------------------
+r12025 | sahlberg | 2004-09-17 03:12:21 -0500 (Fri, 17 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-pkinit.c
+
+get rid of some compiler warnings
+
+
+------------------------------------------------------------------------
+r12024 | sahlberg | 2004-09-17 03:11:30 -0500 (Fri, 17 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/asn1/pkinit/packet-pkinit-template.c
+
+get rid of some compiler warnings for pkinit
+
+
+------------------------------------------------------------------------
+r12023 | guy | 2004-09-17 03:10:12 -0500 (Fri, 17 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-dcerpc-epm.c
+
+FALSE, not TRUE, means big-endian in a "proto_tree_add_item()" call.
+
+------------------------------------------------------------------------
+r12022 | guy | 2004-09-16 21:02:04 -0500 (Thu, 16 Sep 2004) | 8 lines
+Changed paths:
+   M /trunk/epan/dissectors/Makefile.common
+   A /trunk/epan/dissectors/packet-aim-email.c
+   M /trunk/epan/dissectors/packet-aim-generic.c
+   M /trunk/epan/dissectors/packet-aim-ssi.c
+   A /trunk/epan/dissectors/packet-aim-sst.c
+   M /trunk/epan/dissectors/packet-aim.c
+
+From Jelmer Vernooij:
+
+- Support for more generic TLV's
+- Support for two more SNAC families: email and sst
+- Support for extended status (as used by iChat)
+- Use correct TLV in SSI RightsInfo
+- Dissect and handle FNAC flags field correctly
+
+------------------------------------------------------------------------
+r12021 | ulfl | 2004-09-16 17:07:03 -0500 (Thu, 16 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/gtk/Makefile.nmake
+   M /trunk/gtk/about_dlg.c
+   M /trunk/gtk/about_dlg.h
+   M /trunk/gtk/capture_dlg.c
+   M /trunk/gtk/filter_dlg.c
+   M /trunk/gtk/help_dlg.c
+   M /trunk/gtk/help_dlg.h
+   M /trunk/gtk/main.c
+   M /trunk/gtk/menu.c
+
+first steps towards using the User's Guide as Ethereal's help system
+------------------------------------------------------------------------
+r12020 | guy | 2004-09-16 16:30:51 -0500 (Thu, 16 Sep 2004) | 6 lines
+Changed paths:
+   M /trunk/gtk/decode_as_dlg.c
+
+The list of protocols should be sorted in a case-insensitive fashion, so
+giFT, iSCSI, and iSNS don't show up at the end.  Protocol short names
+are ASCII, so just use "g_ascii_strcasecmp()".
+
+Clean up white space.
+
+------------------------------------------------------------------------
+r12019 | guy | 2004-09-16 14:33:18 -0500 (Thu, 16 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/plugins/Xass-list
+   M /trunk/plugins/Xplugin_api.c
+   M /trunk/plugins/Xplugin_api.h
+   M /trunk/plugins/Xplugin_api_decls.h
+   M /trunk/plugins/Xplugin_table.h
+
+Export the "proto_tree_add_float" routines, and the routines to get IEEE
+float and double values from a tvbuff.
+
+------------------------------------------------------------------------
+r12018 | guy | 2004-09-16 14:32:09 -0500 (Thu, 16 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/libethereal.def
+   M /trunk/plugins/plugin_api_list.c
+
+Export the "proto_tree_add_float" routines, and the routines to get IEEE
+float and double values from a tvbuff.
+
+------------------------------------------------------------------------
+r12017 | guy | 2004-09-16 14:23:33 -0500 (Thu, 16 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-tali.c
+
+"Tali" -> "TALI".
+
+------------------------------------------------------------------------
+r12016 | guy | 2004-09-16 14:17:42 -0500 (Thu, 16 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/AUTHORS
+   M /trunk/epan/dissectors/Makefile.common
+   M /trunk/epan/dissectors/packet-isup.c
+   M /trunk/epan/dissectors/packet-mtp3.c
+   M /trunk/epan/dissectors/packet-sccp.c
+   A /trunk/epan/dissectors/packet-tali.c
+
+From Viorel Suman: TALI (RFC 3094) support.
+
+ATify Luca Deri's e-mail address.
+
+------------------------------------------------------------------------
+r12015 | guy | 2004-09-16 12:52:16 -0500 (Thu, 16 Sep 2004) | 9 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-isns.c
+
+Just returning from a dissector without dissecting anything is rude;
+make the dissectors "new-style" dissectors and return 0 for packets that
+don't look like iSNS.  Do this *before* doing TCP reassembly - once
+you've done reassembly, it's too late.
+
+Don't set the columns in the main dissector routines - it's also done in
+the PDU dissector, which is sufficient.  Set the protocol column to
+"iSNS", not "isns".
+
+------------------------------------------------------------------------
+r12014 | sahlberg | 2004-09-16 04:01:20 -0500 (Thu, 16 Sep 2004) | 6 lines
+Changed paths:
+   M /trunk/epan/dissectors/Makefile.common
+   M /trunk/epan/dissectors/packet-cms.c
+   M /trunk/epan/dissectors/packet-cms.h
+   M /trunk/epan/dissectors/packet-kerberos.c
+   A /trunk/epan/dissectors/packet-pkinit.c
+   A /trunk/epan/dissectors/packet-pkinit.h
+   A /trunk/epan/dissectors/packet-pkix1explicit.c
+   A /trunk/epan/dissectors/packet-pkix1explicit.h
+   A /trunk/epan/dissectors/packet-pkix1implicit.c
+   A /trunk/epan/dissectors/packet-pkix1implicit.h
+   M /trunk/epan/dissectors/packet-x509af.c
+   M /trunk/epan/dissectors/packet-x509af.h
+
+add new dissectors to build process
+
+update Kerberos to call PKINIT (and remove the handwritten incomplete one inside packet-kerberos.c)
+
+
+
+------------------------------------------------------------------------
+r12013 | sahlberg | 2004-09-16 03:58:28 -0500 (Thu, 16 Sep 2004) | 3 lines
+Changed paths:
+   A /trunk/asn1/pkix1explicit
+   A /trunk/asn1/pkix1explicit/PKIX1EXPLICIT93.asn
+   A /trunk/asn1/pkix1explicit/packet-pkix1explicit-template.c
+   A /trunk/asn1/pkix1explicit/packet-pkix1explicit-template.h
+   A /trunk/asn1/pkix1explicit/pkix1explicit.cnf
+   A /trunk/asn1/pkix1explicit/pkix1explicit_exp.cnf
+
+new protocol PKIX1EXPLICIT
+
+
+------------------------------------------------------------------------
+r12012 | sahlberg | 2004-09-16 03:57:23 -0500 (Thu, 16 Sep 2004) | 3 lines
+Changed paths:
+   A /trunk/asn1/pkix1implicit
+   A /trunk/asn1/pkix1implicit/PKIX1IMPLICIT93.asn
+   A /trunk/asn1/pkix1implicit/packet-pkix1implicit-template.c
+   A /trunk/asn1/pkix1implicit/packet-pkix1implicit-template.h
+   A /trunk/asn1/pkix1implicit/pkix1implicit.cnf
+   A /trunk/asn1/pkix1implicit/pkix1implicit_exp.cnf
+
+add new protocol PKIX1IMPLICIT
+
+
+------------------------------------------------------------------------
+r12011 | sahlberg | 2004-09-16 03:55:33 -0500 (Thu, 16 Sep 2004) | 3 lines
+Changed paths:
+   A /trunk/asn1/pkinit
+   A /trunk/asn1/pkinit/PKINIT.asn
+   A /trunk/asn1/pkinit/packet-pkinit-template.c
+   A /trunk/asn1/pkinit/packet-pkinit-template.h
+   A /trunk/asn1/pkinit/pkinit.cnf
+   A /trunk/asn1/pkinit/pkinit_exp.cnf
+
+add PKINIT protocol
+
+
+------------------------------------------------------------------------
+r12010 | sahlberg | 2004-09-16 03:32:52 -0500 (Thu, 16 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/asn1/x509af/x509af.cnf
+   M /trunk/asn1/x509af/x509af_exp.cnf
+
+update to X509AF to prepare for PKINIT
+
+
+------------------------------------------------------------------------
+r12009 | sahlberg | 2004-09-16 03:31:01 -0500 (Thu, 16 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/asn1/cms/CryptographicMessageSyntax.asn
+   M /trunk/asn1/cms/cms.cnf
+   A /trunk/asn1/cms/cms_exp.cnf
+   M /trunk/asn1/cms/packet-cms-template.c
+   M /trunk/asn1/cms/packet-cms-template.h
+
+Update to CMD to prepare for PKINIT support
+
+
+------------------------------------------------------------------------
+r12008 | ulfl | 2004-09-15 17:33:16 -0500 (Wed, 15 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/user-guide.xml
+
+update version numbers
+------------------------------------------------------------------------
+r12007 | ulfl | 2004-09-15 16:56:12 -0500 (Wed, 15 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/graphics/ethereal-capture-menu.png
+
+added the "Capture/Interfaces" menu item to the screenshot
+------------------------------------------------------------------------
+r12006 | ulfl | 2004-09-15 16:36:51 -0500 (Wed, 15 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/ug-src/EUG_chapter_customize.xml
+
+fix a section id to match common naming styles
+------------------------------------------------------------------------
+r12005 | ulfl | 2004-09-15 16:35:58 -0500 (Wed, 15 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/ug-src/EUG_chapter_capture.xml
+
+fix a DTD problem
+------------------------------------------------------------------------
+r12004 | ulfl | 2004-09-15 16:32:20 -0500 (Wed, 15 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/ug-src/EUG_app_tools.xml
+
+added capinfo tool section
+------------------------------------------------------------------------
+r12003 | ulfl | 2004-09-15 16:13:16 -0500 (Wed, 15 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/ug-src/EUG_chapter_io.xml
+
+add some info to the merge section
+------------------------------------------------------------------------
+r12002 | ulfl | 2004-09-15 16:12:29 -0500 (Wed, 15 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/ug-src/EUG_chapter_capture.xml
+
+clarify "Running Capture" section title
+------------------------------------------------------------------------
+r12001 | ulfl | 2004-09-15 15:55:51 -0500 (Wed, 15 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/ug-src/EUG_chapter_capture.xml
+
+add a link from the capture filter to the tcpdump manpage
+------------------------------------------------------------------------
+r12000 | ulfl | 2004-09-15 15:48:24 -0500 (Wed, 15 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/graphics/ethereal-capture-options.png
+   M /trunk/docbook/ug-src/EUG_chapter_capture.xml
+
+add the "IP address" field to the capture options dialog.
+------------------------------------------------------------------------
+r11999 | ulfl | 2004-09-15 15:28:39 -0500 (Wed, 15 Sep 2004) | 1 line
+Changed paths:
+   A /trunk/docbook/graphics/ethereal-capture-interfaces.png
+   M /trunk/docbook/ug-src/EUG_chapter_capture.xml
+   M /trunk/docbook/ug-src/EUG_chapter_use.xml
+   M /trunk/docbook/user-guide.xml
+
+add the new "capture interfaces" dialog box
+------------------------------------------------------------------------
+r11998 | etxrab | 2004-09-15 15:08:30 -0500 (Wed, 15 Sep 2004) | 14 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-rtcp.c
+   M /trunk/epan/dissectors/packet-rtcp.h
+
+From Martin Mathieson:
+ I've written this patch to use the 'Delay since last SR' (DLSR) field found
+in SR reports to calculate and report roundtrip-propagation delays.  This is
+described in rfc 3550, section 6.4.1, inside the description of DLSR.
+
+Only the endpoint can compute the end-end roundtrip delay, and only they
+know exactly when the report is received and can compare it with the 'Last
+SR timestamp' (LSR) that they set.  This patch instead takes the difference
+between the capture times of the 2 reports and subtracts the DLSR (the LSR
+is checked in case the SR it's referring to wasn't captured).  The time
+difference represents a roundtrip network delay between the point of capture
+and the sender of the SR containing the DLSR.
+
+
+------------------------------------------------------------------------
+r11997 | etxrab | 2004-09-15 14:59:53 -0500 (Wed, 15 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/plugins/megaco/packet-megaco.c
+
+Fix a problem where MEGACO not fully RFC complient wasn't dissected, change some indentations,
+and a problem where transaction ID wasn't put in the info columb correctly.
+------------------------------------------------------------------------
+r11996 | ulfl | 2004-09-15 13:27:56 -0500 (Wed, 15 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_env_intro.xml
+   M /trunk/docbook/dg-src/EDG_chapter_libraries.xml
+   M /trunk/docbook/dg-src/EDG_chapter_sources.xml
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
+
+added a section how to update the Ethereal sources
+------------------------------------------------------------------------
+r11995 | guy | 2004-09-15 02:22:34 -0500 (Wed, 15 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/wiretap/ngsniffer.c
+
+Improve the heuristic for Frame Relay, and move that heuristic after the
+checks for Wellfleet and Cisco HDLC.
+
+------------------------------------------------------------------------
+r11994 | ulfl | 2004-09-15 00:46:56 -0500 (Wed, 15 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/gtk/ui_util.c
+
+get GDK window geometry only, if widget is visible
+------------------------------------------------------------------------
+r11993 | jmayer | 2004-09-13 14:53:40 -0500 (Mon, 13 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/Makefile
+
+Small update for SUSE 9.1
+------------------------------------------------------------------------
+r11992 | ulfl | 2004-09-13 14:16:22 -0500 (Mon, 13 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
+
+fix a section id duplicate bug
+------------------------------------------------------------------------
+r11991 | etxrab | 2004-09-13 13:21:28 -0500 (Mon, 13 Sep 2004) | 10 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-radius.c
+
+From: Luis Ontanon
+1. As you said visible fileds are much better.
+
+ 2. As they became visible I noticed the length and offset of the fields
+    were wrong, I fixed them.
+
+ 3. I added few more "essential" fields (as a colleague told me as soon
+    as you move away from 3G some fileds like username become the most
+    important) 
+
+------------------------------------------------------------------------
+r11990 | sahlberg | 2004-09-13 07:04:21 -0500 (Mon, 13 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/asn1/x509af/packet-x509af-template.c
+   M /trunk/asn1/x509af/x509af.cnf
+
+update x509af to use machinegenerated _PDU() dissectors
+
+
+------------------------------------------------------------------------
+r11989 | sahlberg | 2004-09-13 07:03:36 -0500 (Mon, 13 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-x509af.c
+   M /trunk/epan/dissectors/packet-x509af.h
+
+update x509af to use machinegenerated _PDU() dissectors
+
+
+------------------------------------------------------------------------
+r11988 | sahlberg | 2004-09-13 03:33:38 -0500 (Mon, 13 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/asn1/ns-cert-exts/ns_cert_exts.cnf
+   M /trunk/asn1/ns-cert-exts/packet-ns_cert_exts-template.c
+
+use autogenerated _PDU functions
+
+
+------------------------------------------------------------------------
+r11987 | sahlberg | 2004-09-13 03:33:03 -0500 (Mon, 13 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-ns_cert_exts.c
+
+use autogenerated _PDU callbacks
+
+
+------------------------------------------------------------------------
+r11986 | sahlberg | 2004-09-13 03:07:29 -0500 (Mon, 13 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/asn1/x509ce/packet-x509ce-template.c
+   M /trunk/asn1/x509ce/x509ce.cnf
+
+make the asn2eth compiler autogenerate the PDU callbacks
+
+
+------------------------------------------------------------------------
+r11985 | sahlberg | 2004-09-13 03:06:52 -0500 (Mon, 13 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-x509ce.c
+   M /trunk/epan/dissectors/packet-x509ce.h
+
+let asn2eth autogenerate the PDU callback wrappers instead of defining them manually
+
+
+------------------------------------------------------------------------
+r11984 | sahlberg | 2004-09-13 03:00:33 -0500 (Mon, 13 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/tools/asn2eth.py
+
+from tomas kukosa,   fix for generated _PDU() functions to match the dissector_t signature
+
+
+------------------------------------------------------------------------
+r11983 | guy | 2004-09-13 02:47:49 -0500 (Mon, 13 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-rtcp.c
+   M /trunk/epan/dissectors/packet-rtp.c
+
+Get rid of unused variables.
+
+------------------------------------------------------------------------
+r11982 | guy | 2004-09-13 02:43:22 -0500 (Mon, 13 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-radius.c
+
+From Nathan Alger: update the JUNOS (Juniper) Radius VSA decodes to
+JUNOS 5.3.
+
+------------------------------------------------------------------------
+r11981 | sahlberg | 2004-09-13 00:13:52 -0500 (Mon, 13 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/tools/asn2eth.py
+
+From Tomas Kukosa,  updates to the asn2eth compiler
+
+
+------------------------------------------------------------------------
+r11980 | ulfl | 2004-09-12 18:29:33 -0500 (Sun, 12 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/wiretap/Makefile.nmake
+
+to prevent problems reported by David Richards, don't depend on the cvarsdll from win32.mak and define our own CVARSDLL
+------------------------------------------------------------------------
+r11979 | ulfl | 2004-09-12 06:24:23 -0500 (Sun, 12 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
+
+added: how to update cygwin packages 
+------------------------------------------------------------------------
+r11978 | ulfl | 2004-09-12 05:41:53 -0500 (Sun, 12 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_libraries.xml
+
+how to update the files installed by the setup target
+------------------------------------------------------------------------
+r11977 | ulfl | 2004-09-12 05:07:23 -0500 (Sun, 12 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/Makefile.nmake
+
+added a clean_setup target, to cleanup the unzipped files
+------------------------------------------------------------------------
+r11976 | guy | 2004-09-12 01:20:04 -0500 (Sun, 12 Sep 2004) | 5 lines
+Changed paths:
+   M /trunk/sha1.c
+   M /trunk/sha1.h
+
+Canonicalize the line endings, and set eol:eol-style to native to keep
+them canonicalized.
+
+Set svn:keywords Id to cause RCS IDs to be expanded.
+
+------------------------------------------------------------------------
+r11975 | guy | 2004-09-11 18:42:03 -0500 (Sat, 11 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/Makefile.am
+   M /trunk/Makefile.nmake
+   M /trunk/make-authors-short.pl
+   A /trunk/make-authors-short2.pl
+
+From Graeme Hewson: translate accented UTF-8 characters to Pod E<>
+escapes so they turn into *roff escapes and HTML entities in the output,
+in case raw UTF-8 doesn't work.
+
+------------------------------------------------------------------------
+r11974 | guy | 2004-09-11 18:26:19 -0500 (Sat, 11 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/libethereal.def
+
+From Dave Richards: export "host_ip_af()" (it's used by
+"get_conn_cfilter()").
+
+------------------------------------------------------------------------
+r11973 | guy | 2004-09-11 18:10:14 -0500 (Sat, 11 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/doc/README.developer
+
+Note that _WIN32, not WIN32, should be used in #ifdefs and #ifs testing
+the platform for which we're building (and that both should be avoided
+if possible, i.e. write your code so that it works on all platforms).
+
+------------------------------------------------------------------------
+r11972 | guy | 2004-09-11 18:03:36 -0500 (Sat, 11 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/capture_combo_utils.c
+   M /trunk/disabled_protos.c
+   M /trunk/epan/addr_resolv.c
+   M /trunk/epan/dissectors/packet-dcerpc.c
+   M /trunk/epan/dissectors/packet-snmp.c
+   M /trunk/epan/filesystem.c
+   M /trunk/epan/plugins.c
+   M /trunk/file.c
+   M /trunk/filters.c
+   M /trunk/gtk/capture_if_dlg.c
+   M /trunk/gtk/dlg_utils.c
+   M /trunk/gtk/ethclist.c
+   M /trunk/gtk/font_utils.c
+   M /trunk/gtk/font_utils.h
+   M /trunk/gtk/main.c
+   M /trunk/gtk/menu.c
+   M /trunk/gtk/prefs_dlg.c
+   M /trunk/gtk/tcp_graph.c
+   M /trunk/gtk/ui_util.c
+   M /trunk/pcap-util.c
+   M /trunk/plugins/asn1/packet-asn1.c
+   M /trunk/prefs.c
+   M /trunk/util.c
+   M /trunk/version_info.c
+   M /trunk/xmlstub.h
+
+Use _WIN32 rather than WIN32 to determine if we're compiling on Win32;
+according to Gisle Vanem, WIN32 isn't a built-in in MSVC, but _WIN32 is.
+
+------------------------------------------------------------------------
+r11971 | guy | 2004-09-11 17:57:52 -0500 (Sat, 11 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/gtk/sctp_stat.h
+
+Get rid of some #includes that caused trouble on Windows - we need to
+make this use Ethereal's data structurs for addresses, not the OS's.
+
+------------------------------------------------------------------------
+r11970 | guy | 2004-09-11 17:53:17 -0500 (Sat, 11 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/gtk/sctp_stat.c
+
+Get rid of some #includes that caused trouble on Windows - we need to
+make this use Ethereal's data structurs for addresses, not the OS's.
+
+------------------------------------------------------------------------
+r11969 | guy | 2004-09-11 17:36:16 -0500 (Sat, 11 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/proto.c
+
+From Dave Richards: fix a format string.
+
+------------------------------------------------------------------------
+r11968 | ulfl | 2004-09-11 17:35:50 -0500 (Sat, 11 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
+
+added a section about nmake 1.5 from microsoft
+------------------------------------------------------------------------
+r11967 | guy | 2004-09-11 17:08:29 -0500 (Sat, 11 Sep 2004) | 6 lines
+Changed paths:
+   M /trunk/AUTHORS
+   M /trunk/epan/libethereal.def
+
+From Dave Richards: remove from libethereal.def some routines from
+util.c, as util.c is no longer part of libethereal.
+
+Update his e-mail address (I'm presuming it's the same person - Comcast
+bought AT&T Broadband, so the domain name change makes sense).
+
+------------------------------------------------------------------------
+r11966 | ulfl | 2004-09-11 11:18:41 -0500 (Sat, 11 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_libraries.xml
+   M /trunk/docbook/dg-src/EDG_chapter_sources.xml
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
+
+minor changes
+------------------------------------------------------------------------
+r11965 | ulfl | 2004-09-11 09:15:26 -0500 (Sat, 11 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_libraries.xml
+   M /trunk/docbook/dg-src/EDG_chapter_sources.xml
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
+
+some more changes
+------------------------------------------------------------------------
+r11964 | ulfl | 2004-09-11 05:04:12 -0500 (Sat, 11 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_libraries.xml
+
+add some urls
+------------------------------------------------------------------------
+r11963 | ulfl | 2004-09-11 04:20:31 -0500 (Sat, 11 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
+
+added a debugger section and a lot or urls to the different GNU tools
+------------------------------------------------------------------------
+r11962 | ulfl | 2004-09-11 02:16:24 -0500 (Sat, 11 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/developer-guide.xml
+   A /trunk/docbook/dg-src/EDG_chapter_works.xml
+
+added a chapter "How Ethereal Works", with only little content right now...
+------------------------------------------------------------------------
+r11961 | guy | 2004-09-10 19:00:06 -0500 (Fri, 10 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/Makefile.common
+   M /trunk/epan/Makefile.common
+
+Nothing in "util.h" is needed by anything in libethereal, so don't put
+it into libethereal - have it as common code linked into Ethereal,
+Tethereal, and dftest.
+
+------------------------------------------------------------------------
+r11960 | guy | 2004-09-10 18:16:00 -0500 (Fri, 10 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/Makefile.common
+   A /trunk/epan/base64.c
+   A /trunk/epan/base64.h
+   M /trunk/epan/dissectors/packet-http.c
+   M /trunk/util.c
+   M /trunk/util.h
+
+Move the base-64 routines to "epan/base64.c".
+
+------------------------------------------------------------------------
+r11959 | guy | 2004-09-10 18:07:33 -0500 (Fri, 10 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-sna.c
+
+The EBCDIC-to-ASCII routines are now declared in <epan/charsets.h>.
+
+------------------------------------------------------------------------
+r11958 | guy | 2004-09-10 17:59:37 -0500 (Fri, 10 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/epan/Makefile.common
+   A /trunk/epan/charsets.c
+   A /trunk/epan/charsets.h
+   M /trunk/gtk/follow_dlg.c
+   M /trunk/gtk/proto_draw.c
+   M /trunk/print.c
+   M /trunk/util.c
+   M /trunk/util.h
+
+Move the stuff to handle ASCII <-> EBCDIC conversions to
+"epan/charsets.c"; other character set translation code should perhaps
+go there as well.
+
+------------------------------------------------------------------------
+r11957 | guy | 2004-09-10 17:55:22 -0500 (Fri, 10 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/libethereal.def
+
+Add the new "proto_registrar_dump_values()" routine, as it's used by
+Ethereal and Tethereal to handle "-G values".
+
+------------------------------------------------------------------------
+r11956 | guy | 2004-09-10 17:47:02 -0500 (Fri, 10 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/Makefile.common
+   A /trunk/clopts_common.c
+   A /trunk/clopts_common.h
+   M /trunk/gtk/main.c
+   M /trunk/tethereal.c
+
+Hoist the code for handling "-G" into a common module.
+
+------------------------------------------------------------------------
+r11955 | ulfl | 2004-09-10 13:28:53 -0500 (Fri, 10 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
+
+minor change
+------------------------------------------------------------------------
+r11954 | gram | 2004-09-10 10:21:20 -0500 (Fri, 10 Sep 2004) | 6 lines
+Changed paths:
+   M /trunk/epan/proto.c
+   M /trunk/epan/proto.h
+   M /trunk/gtk/main.c
+   M /trunk/tethereal.c
+
+Add a "-G fields2" option which is like "-G fields", but extends the field
+records by tw fields: base (for integers), and blurb
+
+Add a "-G values" option which shows value strings and true_false strings for
+the fields that have them.
+
+------------------------------------------------------------------------
+r11953 | guy | 2004-09-09 15:31:52 -0500 (Thu, 09 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-chdlc.c
+
+Show ETHERTYPE_IPv6 as "IPv6" in the type field.
+
+------------------------------------------------------------------------
+r11952 | etxrab | 2004-09-09 14:34:51 -0500 (Thu, 09 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/AUTHORS
+
+Added Christophe Devine as a contributor.
+------------------------------------------------------------------------
+r11951 | etxrab | 2004-09-09 14:24:45 -0500 (Thu, 09 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/Makefile.common
+
+Add SHA1 routines for future use at least by SigComp
+------------------------------------------------------------------------
+r11950 | etxrab | 2004-09-09 14:24:00 -0500 (Thu, 09 Sep 2004) | 1 line
+Changed paths:
+   A /trunk/sha1.c
+   A /trunk/sha1.h
+
+Add SHA1 routines for future use at least by SigComp
+------------------------------------------------------------------------
+r11949 | etxrab | 2004-09-09 14:19:50 -0500 (Thu, 09 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/epan/Makefile.common
+
+Add SHA1 routines for future use, at least by SigComp
+------------------------------------------------------------------------
+r11948 | guy | 2004-09-09 01:50:03 -0500 (Thu, 09 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-teredo.c
+
+From Remi Denis-Courmont: heuristic dissector for Teredo.
+
+------------------------------------------------------------------------
+r11947 | guy | 2004-09-09 01:27:43 -0500 (Thu, 09 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/AUTHORS
+   M /trunk/epan/dissectors/packet-netflow.c
+
+From Luca Deri: NetFlow v9 enhancements.
+
+------------------------------------------------------------------------
+r11946 | guy | 2004-09-08 16:14:40 -0500 (Wed, 08 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-dcerpc.c
+
+Squelch a compiler warning.  (We really might want a
+"tvb_ensure_reported_length_remaining()" call here.)
+
+------------------------------------------------------------------------
+r11945 | guy | 2004-09-08 14:36:25 -0500 (Wed, 08 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/epan/proto.c
+
+To conert a little-endian value to a big-endian value, use
+GUINT32_SWAP_LE_BE(), not GUINT32_TO_BE() - the latter converts a
+host-byte-order value to big-endian, but the host might be big-endian.
+
+------------------------------------------------------------------------
+r11944 | ulfl | 2004-09-08 14:29:09 -0500 (Wed, 08 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/gtk/ui_util.c
+
+Try to get the window geometry only, if a GdkWindow really exists for that GtkWidget (e.g. the widget isn't hidden)
+------------------------------------------------------------------------
+r11943 | ulfl | 2004-09-08 14:26:36 -0500 (Wed, 08 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/gtk/file_dlg.c
+
+Fix a minor bug only with GTK2.4: if have a problem while saving a file (e.g. filename already exists) will lead to an unresponding file dialog. The fix will close the dialog, which isn't the best solution, but I don't see a better one.
+------------------------------------------------------------------------
+r11942 | etxrab | 2004-09-08 14:24:32 -0500 (Wed, 08 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/epan/dissectors/packet-rtcp.c
+
+Added some valuestring parameters for PoC
+------------------------------------------------------------------------
+r11941 | tuexen | 2004-09-08 08:10:01 -0500 (Wed, 08 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-m2pa.c
+
+Updated the comment at the beginning of the file.
+
+------------------------------------------------------------------------
+r11940 | tuexen | 2004-09-08 08:08:02 -0500 (Wed, 08 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-m2pa.c
+
+Added support for version 12. So it now supports version 02, 08 and
+12 of the internet draft.
+
+------------------------------------------------------------------------
+r11939 | sahlberg | 2004-09-08 05:32:53 -0500 (Wed, 08 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/epan/proto.c
+
+From Peter Johansson,    make proto_tree_add_item() handle IPv4 addresses
+stored in little endian format.
+
+
+------------------------------------------------------------------------
+r11938 | guy | 2004-09-08 04:35:47 -0500 (Wed, 08 Sep 2004) | 8 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-dcerpc.c
+
+From Devin Heitmuller: decode verifiers after stub decryption - for
+NTLMSSP, the state of the RC4 stream is dependent on the stub being
+decrypted before the verifier.
+
+Correctly set the length and reported length of the tvb for the stub
+(the reported length of that tvb should be set based on the *reported*
+length of the parent tvbuff, not the captured length).
+
+------------------------------------------------------------------------
+r11937 | ulfl | 2004-09-08 00:55:21 -0500 (Wed, 08 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/gtk/decode_as_dlg.c
+
+sort_iter_compare_func() only needed with GTK2
+------------------------------------------------------------------------
+r11936 | guy | 2004-09-07 18:59:49 -0500 (Tue, 07 Sep 2004) | 5 lines
+Changed paths:
+   M /trunk/doc/README.developer
+
+Note that developers should avoid GTK+ 2.x/GLib 2.x-only stuff (and, in
+particularly, should disregard all the renaming they did of some
+routines, as the old names work Just Fine in 2.x but the new names don't
+work in 1.2[.x]).
+
+------------------------------------------------------------------------
+r11935 | guy | 2004-09-07 18:20:53 -0500 (Tue, 07 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/gtk/decode_as_dcerpc.c
+
+"g_string_printf()" is GLib 2.x-only, but "g_string_sprintf()" works in
+2.x and 1.2[.x].  Use "g_string_sprintf()", its deprecation
+nonwithstanding.
+
+------------------------------------------------------------------------
+r11934 | guy | 2004-09-07 17:21:59 -0500 (Tue, 07 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/AUTHORS
+
+Put the byte-order mark back.
+
+------------------------------------------------------------------------
+r11933 | guy | 2004-09-07 15:10:35 -0500 (Tue, 07 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/gtk/decode_as_dlg.c
+
+Squelch a compiler warning.
+
+------------------------------------------------------------------------
+r11932 | guy | 2004-09-07 15:10:00 -0500 (Tue, 07 Sep 2004) | 5 lines
+Changed paths:
+   M /trunk/gtk/decode_as_dcerpc.c
+
+Canonicalize the line endings, and set svn:eol-style to native to keep
+them canonicalized.
+
+Set svn:keywords to Id to expand RCS IDs.
+
+------------------------------------------------------------------------
+r11931 | guy | 2004-09-07 15:07:08 -0500 (Tue, 07 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/gtk/sctp_assoc_analyse.c
+   M /trunk/gtk/sctp_byte_graph_dlg.c
+   M /trunk/gtk/sctp_error_dlg.c
+   M /trunk/gtk/sctp_graph_dlg.c
+   M /trunk/gtk/sctp_stat_dlg.c
+
+Set svn:eol-style to native to keep line endings canonicalized.
+
+Set svn:keywords to Id to expand RCS IDs.
+
+------------------------------------------------------------------------
+r11930 | guy | 2004-09-07 15:05:04 -0500 (Tue, 07 Sep 2004) | 5 lines
+Changed paths:
+   M /trunk/gtk/decode_as_dcerpc.h
+
+Canonicalize the line endings, and set svn:eol-style to native to keep
+them canonicalized.
+
+Set svn:keywords to Id to expand RCS IDs.
+
+------------------------------------------------------------------------
+r11929 | ulfl | 2004-09-07 14:42:52 -0500 (Tue, 07 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/gtk/decode_as_dlg.c
+
+added a Clear button to the Decode As dialog, also added some tooltips 
+------------------------------------------------------------------------
+r11928 | ulfl | 2004-09-07 14:22:17 -0500 (Tue, 07 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/gtk/decode_as_dlg.c
+
+replace the Cancel with a Close button, as pressing it will not rewind any previously applied operations 
+------------------------------------------------------------------------
+r11927 | ulfl | 2004-09-07 14:20:48 -0500 (Tue, 07 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/gtk/decode_as_dcerpc.c
+
+don't put the "(none)" interface into the list, Ethereal will crash if it's applied to Decode As
+------------------------------------------------------------------------
+r11926 | guy | 2004-09-07 13:51:56 -0500 (Tue, 07 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/gtk/sctp_stat.c
+   M /trunk/gtk/sctp_stat.h
+
+Canonicalize the line endings, set the svn:eol-style property to
+"native" so they stay canonicalized, and set svn:keywords to Id so that
+RCS IDs get expanded.
+
+------------------------------------------------------------------------
+r11925 | ulfl | 2004-09-07 13:50:26 -0500 (Tue, 07 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/gtk/decode_as_dlg.c
+
+two bugfixes: sort items in alphabetical order and don't do a OBJECT_GET_DATA on a NULL pointer
+------------------------------------------------------------------------
+r11924 | ulfl | 2004-09-07 11:19:56 -0500 (Tue, 07 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/epan/dissectors/packet-dcerpc.c
+   M /trunk/epan/dissectors/packet-dcerpc.h
+   M /trunk/epan/libethereal.def
+   M /trunk/gtk/Makefile.am
+   M /trunk/gtk/Makefile.common
+   A /trunk/gtk/decode_as_dcerpc.c
+   A /trunk/gtk/decode_as_dcerpc.h
+   M /trunk/gtk/decode_as_dlg.c
+   M /trunk/gtk/decode_as_dlg.h
+   M /trunk/gtk/main.c
+
+First working implementation of "Decode As" for DCE-RPC interface bindings. Ethereal needs to capture the DCE-RPC bind sequence, to get a relationsship between the interface UUID and the current conversation. If this binding wasn't captured, one can use "Decode As" and choose the interface from a list corresponding to a specific conversation. Currently "only" implemented for connectionoriented (TCP) DCE-RPC, but connectionless is a work in progress.
+------------------------------------------------------------------------
+r11922 | tuexen | 2004-09-07 04:41:58 -0500 (Tue, 07 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/gtk/Makefile.common
+
+Do not compile SCTP analysis stuff right now.
+
+------------------------------------------------------------------------
+r11921 | ulfl | 2004-09-07 03:42:02 -0500 (Tue, 07 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/gtk/sctp_stat.c
+   M /trunk/gtk/sctp_stat.h
+
+using #ifdef HAVE_SYS_TYPES_H around some of the includes making problems, but still uncompilable on win32!!!
+
+------------------------------------------------------------------------
+r11920 | tuexen | 2004-09-07 02:54:50 -0500 (Tue, 07 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/AUTHORS
+   M /trunk/gtk/Makefile.am
+   M /trunk/gtk/Makefile.common
+   A /trunk/gtk/sctp_assoc_analyse.c
+   A /trunk/gtk/sctp_byte_graph_dlg.c
+   A /trunk/gtk/sctp_error_dlg.c
+   A /trunk/gtk/sctp_graph_dlg.c
+   A /trunk/gtk/sctp_stat.c
+   A /trunk/gtk/sctp_stat.h
+   A /trunk/gtk/sctp_stat_dlg.c
+
+Added graphical SCTP analysis implemented by Irene Ruengeler.
+
+------------------------------------------------------------------------
+r11919 | guy | 2004-09-06 15:25:36 -0500 (Mon, 06 Sep 2004) | 5 lines
+Changed paths:
+   M /trunk/make-authors-short.pl
+
+From Graeme Hewson: wrap the authors list in ".nf"/".fi" in the man page
+and "<pre>"/"</pre>", to make sure it doesn't get word-wrapped (the
+"start each line with a blank" trick doesn't work on current versions of
+pod2html).
+
+------------------------------------------------------------------------
+r11918 | guy | 2004-09-06 15:01:39 -0500 (Mon, 06 Sep 2004) | 7 lines
+Changed paths:
+   M /trunk/AUTHORS
+
+Put the UTF-8 mark back into the file (maybe *that'll* convince TextEdit
+to open it as a UTF-8 file).
+
+Convert from ISO 8859/1 to UTF-8, and put the a-ring into a name.
+
+Fix some bad characters.
+
+------------------------------------------------------------------------
+r11917 | ulfl | 2004-09-06 14:56:36 -0500 (Mon, 06 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/gtk/decode_as_dlg.c
+
+next steps for a "Decode As" for DCE-RPC interfaces (commented out)
+------------------------------------------------------------------------
+r11916 | ulfl | 2004-09-06 14:51:33 -0500 (Mon, 06 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/epan/dissectors/packet-dcerpc.c
+   M /trunk/epan/dissectors/packet-dcerpc.h
+   M /trunk/epan/libethereal.def
+
+rename add_conv_to_dcerpc_bind_table to dcerpc_add_conv_to_bind_table and don't use packet_info as a parameter
+------------------------------------------------------------------------
+r11915 | guy | 2004-09-06 14:49:54 -0500 (Mon, 06 Sep 2004) | 8 lines
+Changed paths:
+   M /trunk/AUTHORS
+   M /trunk/acinclude.m4
+
+From Marten Svantesson: according to Tomas Anders, all versions of Heimdal
+will either have "heimdal", in all lower case, in the version string in
+the header file, or will write out, when you run "krb5-config
+--version", a version string with "heimdal" in all lower case, so we
+don't need to do case-insensitive matching, which is good - not all
+versions of "sed" support the "i" flag (although you can do
+case-insensitive matching by using regular expressions, if necessary).
+
+------------------------------------------------------------------------
+r11914 | ulfl | 2004-09-06 12:43:16 -0500 (Mon, 06 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_sources.xml
+   M /trunk/docbook/dg-src/EDG_chapter_userinterface.xml
+   M /trunk/docbook/ug-src/EUG_chapter_build_install.xml
+   M /trunk/docbook/user-guide.xml
+
+updated URL's
+------------------------------------------------------------------------
+r11913 | ulfl | 2004-09-06 12:42:12 -0500 (Mon, 06 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/Makefile
+
+as dependencies are currently not payed attention to, also create the single paged html every the time, regardless of dependencies
+------------------------------------------------------------------------
+r11912 | tuexen | 2004-09-06 10:04:27 -0500 (Mon, 06 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-sctp.c
+   M /trunk/epan/packet_info.h
+   M /trunk/gtk/decode_as_dlg.c
+
+Add the capability to chose to remap the fist two PPIDS in each SCTP packet to a different dissector.
+
+------------------------------------------------------------------------
+r11911 | tuexen | 2004-09-06 05:12:51 -0500 (Mon, 06 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-sctp.c
+
+Renamed the T-Bit in ABORT and SHUTDOWN-COMPLETE chunks as in the upcoming IG.
+Initial support of SCTP-AUTH.
+
+------------------------------------------------------------------------
+r11910 | sahlberg | 2004-09-06 04:12:17 -0500 (Mon, 06 Sep 2004) | 5 lines
+Changed paths:
+   M /trunk/asn1/x509ce/CertificateExtensions.asn
+   M /trunk/asn1/x509ce/x509ce.cnf
+   M /trunk/asn1/x509sat/packet-x509sat-template.c
+   M /trunk/asn1/x509sat/packet-x509sat-template.h
+   M /trunk/asn1/x509sat/x509sat_exp.cnf
+   M /trunk/epan/dissectors/packet-x509ce.c
+   M /trunk/epan/dissectors/packet-x509sat.c
+   M /trunk/epan/dissectors/packet-x509sat.h
+
+Update x509SAT to export DirectoryString.
+
+Update X509CE to dissect EDIPartyName now that DirectoryString can be dissected
+
+
+------------------------------------------------------------------------
+r11909 | sahlberg | 2004-09-06 03:39:14 -0500 (Mon, 06 Sep 2004) | 6 lines
+Changed paths:
+   M /trunk/asn1/x509ce/CertificateExtensions.asn
+   M /trunk/epan/dissectors/packet-x509ce.c
+
+Update to X509 Certificate Extensions. Make it also decode 
+GeneralName.directoryName 
+(since we already implemented the Name type from X509IF already long time ago)
+
+
+
+------------------------------------------------------------------------
+r11908 | ulfl | 2004-09-05 16:22:14 -0500 (Sun, 05 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_build_intro.xml
+   M /trunk/docbook/dg-src/EDG_chapter_env_intro.xml
+   M /trunk/docbook/dg-src/EDG_chapter_libraries.xml
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
+   M /trunk/docbook/dg-src/EDG_chapter_userinterface.xml
+
+Various minor changes, e.g. added a small chapter about "The GLib library"
+------------------------------------------------------------------------
+r11907 | obiot | 2004-09-05 10:06:26 -0500 (Sun, 05 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/AUTHORS
+   M /trunk/doc/ethereal.pod
+
+Fix cosmetic errors in the AUTHORS file and in ethereal.pod.
+
+------------------------------------------------------------------------
+r11906 | guy | 2004-09-05 05:38:04 -0500 (Sun, 05 Sep 2004) | 14 lines
+Changed paths:
+   M /trunk/configure.in
+   M /trunk/epan/Makefile.am
+
+Name the variables that have the names of ".lo" files as _LO, not _O;
+put the name of the ".o" files into _O variables (I'm not sure whether
+the current .am files automatically support building programs statically
+linked with libethereal, as a result of using libtool; if so, the _O
+versions of those variables aren't necessary, and, if not, we probably
+need to use them).
+
+Use the _LO variables in libethereal_la_LIBADD and
+libethereal_la_DEPENDENCIES.
+
+(This means that we use "g_ascii_strtoull.lo" rather than
+"g_ascii_strtoull.o" to make the libethereal shared library; that's what
+we need to do, but we weren't doing it.)
+
+------------------------------------------------------------------------
+r11905 | ulfl | 2004-09-05 04:39:50 -0500 (Sun, 05 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_sources.xml
+
+Try to reduce Subversion<->SVN confusion and some other minor changes
+------------------------------------------------------------------------
+r11904 | guy | 2004-09-05 02:06:23 -0500 (Sun, 05 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/AUTHORS
+   M /trunk/epan/dissectors/Makefile.common
+   M /trunk/epan/dissectors/packet-cisco-oui.c
+   A /trunk/epan/dissectors/packet-pagp.c
+
+From Mark C. Brown: Cisco Port Aggregation Protoool support.
+
+------------------------------------------------------------------------
+r11903 | guy | 2004-09-04 16:20:08 -0500 (Sat, 04 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-gsm_a.c
+   M /trunk/epan/dissectors/packet-gsm_map.c
+   M /trunk/epan/dissectors/packet-tcap.c
+
+From Jeff Morriss: the code path that's bypassed with the "if (tree)"
+and "if (!tree)" checks updates the Info column and calls subdissectors,
+so we can't bypass all of it - don't bypass any of it.
+
+------------------------------------------------------------------------
+r11902 | guy | 2004-09-04 15:39:00 -0500 (Sat, 04 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-ses.c
+
+From Matthew Bradley: add the OSI session layer dissector to the
+heuristic dissector list for the COTP inactive subset.
+
+------------------------------------------------------------------------
+r11901 | guy | 2004-09-04 15:35:29 -0500 (Sat, 04 Sep 2004) | 10 lines
+Changed paths:
+   M /trunk/wiretap/nettl.c
+   M /trunk/wiretap/nettl.h
+
+From Mark C. Brown:
+
+1) Change nettl subsystem ID's to decimal so as to
+   match /etc/nettlgen.conf and ease maintenance
+
+2) Add support for hp_apaport (PAgP), hp_apalacp,
+   and IPv6 subsystem trace records
+
+3) Correct handling of LOOPBACK trace records
+
+------------------------------------------------------------------------
+r11900 | guy | 2004-09-04 15:25:06 -0500 (Sat, 04 Sep 2004) | 5 lines
+Changed paths:
+   M /trunk/gtk/proto_draw.c
+
+"g_string_sprintfa()" might be deprecated in GLib 2.x, but it's all GLib
+1.2[.x] has, and we support GLib 1.2[.x] - "g_string_append_printf()" is
+just the new name for "g_string_sprintfa()", and you can still use
+"g_string_sprintfa()" in GLib 2.x, so use that instead.
+
+------------------------------------------------------------------------
+r11899 | guy | 2004-09-04 15:13:42 -0500 (Sat, 04 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-eap.c
+
+From Jouni Malinen: add a dissector for EAP-AKA, and fix some incorrect
+attribute numbers in the EAP-SIM code.
+
+------------------------------------------------------------------------
+r11898 | guy | 2004-09-04 15:02:11 -0500 (Sat, 04 Sep 2004) | 6 lines
+Changed paths:
+   M /trunk/Makefile.common
+   M /trunk/epan/Makefile.common
+   M /trunk/epan/libethereal.def
+   D /trunk/epan/packet-range.c
+   D /trunk/epan/packet-range.h
+   M /trunk/file.c
+   M /trunk/file.h
+   M /trunk/gtk/file_dlg.c
+   M /trunk/gtk/range_utils.c
+   A /trunk/packet-range.c (from /trunk/epan/packet-range.c:11895)
+   A /trunk/packet-range.h (from /trunk/epan/packet-range.h:11895)
+   M /trunk/print.c
+   M /trunk/print.h
+
+The packet range stuff knows about capture_file structures, so it's
+really more of an Ethereal/Tethereal component than a libethereal
+component (nothing else in libethereal knows about capture files); move
+it back out of libethereal.  (The range stuff doesn't; we leave it in
+libethereal.)
+
+------------------------------------------------------------------------
+r11897 | guy | 2004-09-04 14:59:38 -0500 (Sat, 04 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/prefs.c
+
+We don't need the stuff in "globals.h" or "file.h"; don't include them.
+
+------------------------------------------------------------------------
+r11896 | guy | 2004-09-04 14:56:25 -0500 (Sat, 04 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/range.c
+
+We don't need "globals.h"; don't include it.
+
+------------------------------------------------------------------------
+r11895 | jmayer | 2004-09-04 11:41:10 -0500 (Sat, 04 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_build_intro.xml
+   M /trunk/docbook/dg-src/EDG_chapter_dissection.xml
+
+Add keywords and eol-style
+------------------------------------------------------------------------
+r11894 | ulfl | 2004-09-04 06:35:26 -0500 (Sat, 04 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/epan/dissectors/packet-dcerpc.c
+   M /trunk/epan/dissectors/packet-dcerpc.h
+   M /trunk/epan/packet.c
+   M /trunk/epan/packet_info.h
+
+From Eric Wedel: backend things for "Decode As" of DCE-RPC interfaces
+------------------------------------------------------------------------
+r11893 | ulfl | 2004-09-04 06:21:20 -0500 (Sat, 04 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/epan/Makefile.nmake
+
+EXTRA_OBJECTS are needed for ethereal.lib (only used if ENABLE_LIBETHEREAL isn't set)
+------------------------------------------------------------------------
+r11892 | guy | 2004-09-03 20:32:13 -0500 (Fri, 03 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/Makefile.common
+   M /trunk/epan/libethereal.def
+   M /trunk/epan/packet-range.c
+   M /trunk/epan/packet-range.h
+   A /trunk/epan/range.c
+   A /trunk/epan/range.h
+
+Split the pure range stuff out into separate files, exporting their own
+functions.
+
+------------------------------------------------------------------------
+r11891 | guy | 2004-09-03 20:29:22 -0500 (Fri, 03 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-ripng.h
+
+We don't need to incldue "globals.h", so don't do so.
+
+------------------------------------------------------------------------
+r11890 | guy | 2004-09-03 19:53:16 -0500 (Fri, 03 Sep 2004) | 8 lines
+Changed paths:
+   M /trunk/Makefile.common
+   M /trunk/epan/Makefile.common
+   M /trunk/epan/libethereal.def
+   A /trunk/epan/packet-range.c (from /trunk/range.c:11889)
+   A /trunk/epan/packet-range.h (from /trunk/range.h:11889)
+   M /trunk/file.c
+   M /trunk/file.h
+   M /trunk/gtk/file_dlg.c
+   M /trunk/gtk/range_utils.c
+   M /trunk/print.c
+   D /trunk/range.c
+   D /trunk/range.h
+
+Rename "range.c" and "range.h" to "packet-range.c" and "packet-range.h";
+they should ultimately be split into files with routines that handle
+ranges, which are just subsets of [0,2^32), and packet ranges, which are
+subsets of the packet list, possibly specified by a range.
+
+Move them into epan, so they can be used by, for example, utilities that
+handle ranges, such editcap.
+
+------------------------------------------------------------------------
+r11889 | guy | 2004-09-03 13:14:00 -0500 (Fri, 03 Sep 2004) | 8 lines
+Changed paths:
+   M /trunk/config.h.win32
+   M /trunk/configure.in
+   M /trunk/epan/Makefile.am
+   M /trunk/epan/ftypes/ftype-integer.c
+   A /trunk/epan/g_ascii_strtoull.c
+   A /trunk/epan/g_ascii_strtoull.h
+
+Some UN*Xes don't have any "strtou*" routine to convert a string to a
+64-bit integer; use "g_ascii_strtoull()", and, in the configure script,
+check whether it's available in GLib (it's not in GLib 1.2[.x]) and, if
+not, supply the GLib 2.4.5 version of the routine.
+
+For G_MAXUINT32 and G_MAXUINT64, put a "U" at the end of the constant to
+explicitly flag it as unsigned.
+
+------------------------------------------------------------------------
+r11888 | gerald | 2004-09-02 16:49:36 -0500 (Thu, 02 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/capture_combo_utils.c
+   M /trunk/capture_combo_utils.h
+   M /trunk/gtk/capture_dlg.c
+
+Move get_if_name() from gtk/capture_dlg.c to capture_combo_utils.c.
+
+------------------------------------------------------------------------
+r11887 | gerald | 2004-09-02 14:52:39 -0500 (Thu, 02 Sep 2004) | 3 lines
+Changed paths:
+   M /trunk/file.c
+   M /trunk/file.h
+   M /trunk/gtk/goto_dlg.c
+
+Move the guts of gtk/file_dlg.c:goto_framenum_cb() to
+file.c:goto_framenum(), where all of the other goto_ routines live.
+
+------------------------------------------------------------------------
+r11885 | ulfl | 2004-09-02 13:23:23 -0500 (Thu, 02 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/config.nmake
+
+I've added some more comments to the file, and changed the python default setting from native to cygwin, as all the other tools uses cygwin as the default, too.
+------------------------------------------------------------------------
+r11884 | ulfl | 2004-09-02 13:05:06 -0500 (Thu, 02 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/config.nmake
+
+removed YACC_OPTS, as it seemed to be unneeded for quite a while now
+------------------------------------------------------------------------
+r11883 | sharpe | 2004-09-02 11:58:43 -0500 (Thu, 02 Sep 2004) | 6 lines
+Changed paths:
+   M /trunk/AUTHORS
+   M /trunk/gtk/menu.c
+   M /trunk/gtk/proto_draw.c
+   M /trunk/gtk/proto_draw.h
+   M /trunk/gtk/ui_util.c
+   M /trunk/gtk/ui_util.h
+
+Add support for copying hex data to the clipboard. Submitted by Thomas 
+Palmer.
+
+What we really should do is add this to the Edit menu as well.
+
+
+------------------------------------------------------------------------
+r11880 | sahlberg | 2004-09-02 03:12:41 -0500 (Thu, 02 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-ldap.c
+
+change result code names to be the same as in the LDAP standard
+so it is easier to grep between them
+
+
+------------------------------------------------------------------------
+r11876 | guy | 2004-09-01 13:48:31 -0500 (Wed, 01 Sep 2004) | 4 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-time.c
+
+Use the value for the UNIX epoch from RFC 868 for the difference between
+the Time Protocol epoch and the UNIX epoch; that wasn't the value we
+were using.
+
+------------------------------------------------------------------------
+r11875 | ulfl | 2004-09-01 08:50:02 -0500 (Wed, 01 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/developer-guide.xml
+   M /trunk/docbook/dg-src/EDG_chapter_dissection.xml
+   M /trunk/docbook/dg-src/EDG_chapter_env_intro.xml
+   M /trunk/docbook/dg-src/EDG_chapter_libraries.xml
+   M /trunk/docbook/dg-src/EDG_chapter_sources.xml
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
+
+various minor changes (adding missing id's to sections, changed some phrases, ...)
+------------------------------------------------------------------------
+r11874 | ulfl | 2004-09-01 06:53:28 -0500 (Wed, 01 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/Makefile.nmake
+
+renamed REQUIRED_APPS to REQUIRED_TOOLS and verify_apps to verify_tools, as it seems much more appropriate
+------------------------------------------------------------------------
+r11873 | ulfl | 2004-09-01 06:51:50 -0500 (Wed, 01 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_libraries.xml
+
+rework of chapter
+------------------------------------------------------------------------
+r11872 | ulfl | 2004-09-01 06:51:08 -0500 (Wed, 01 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
+
+added a section "Win32: Verify installed tools"
+------------------------------------------------------------------------
+r11871 | ulfl | 2004-09-01 04:31:06 -0500 (Wed, 01 Sep 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_sources.xml
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
+
+reworked chapters
+------------------------------------------------------------------------
+r11870 | guy | 2004-09-01 03:12:20 -0500 (Wed, 01 Sep 2004) | 5 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-image-jfif.c
+
+Get rid of some unused variables.
+
+Put into the protocol tree for APP1 and APP2 segments not otherwise
+handled an item for the remaining segment data.
+
+------------------------------------------------------------------------
+r11869 | guy | 2004-09-01 02:07:23 -0500 (Wed, 01 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/ftypes/ftype-pcre.c
+   M /trunk/epan/timestamp.c
+   M /trunk/h225-persistentdata.c
+   M /trunk/h225-persistentdata.h
+   M /trunk/plugins/mgcp/packet-mgcp.h
+   M /trunk/tap-h225rassrt.c
+
+Make a bunch of source files non-executable.
+
+------------------------------------------------------------------------
+r11868 | guy | 2004-09-01 01:56:33 -0500 (Wed, 01 Sep 2004) | 2 lines
+Changed paths:
+   M /trunk/plugins/artnet/packet-artnet.c
+
+Updates from Erwin Rol.
+
+------------------------------------------------------------------------
+r11867 | ulfl | 2004-08-31 16:02:52 -0500 (Tue, 31 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_sources.xml
+
+major rework
+------------------------------------------------------------------------
+r11866 | ulfl | 2004-08-31 15:58:01 -0500 (Tue, 31 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/developer-guide.xml
+   M /trunk/docbook/dg-src/EDG_preface.xml
+
+added some infos about the two parts of the book
+------------------------------------------------------------------------
+r11865 | ulfl | 2004-08-31 15:57:00 -0500 (Tue, 31 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_build_intro.xml
+
+minor change (added a <filename> tag)
+------------------------------------------------------------------------
+r11864 | ulfl | 2004-08-31 07:39:25 -0500 (Tue, 31 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/doc/README.developer
+
+add HFILL to the skeleton example and documentation of the field registration
+------------------------------------------------------------------------
+r11863 | ulfl | 2004-08-31 07:36:36 -0500 (Tue, 31 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/GPL_appendix.xml
+
+fixed two typos
+------------------------------------------------------------------------
+r11862 | ulfl | 2004-08-31 07:35:49 -0500 (Tue, 31 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_sources.xml
+
+added correct usage of "svn diff" tool
+------------------------------------------------------------------------
+r11861 | ulfl | 2004-08-31 06:25:23 -0500 (Tue, 31 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/developer-guide.xml
+   A /trunk/docbook/dg-src/EDG_chapter_build_intro.xml
+   A /trunk/docbook/dg-src/EDG_chapter_dissection.xml
+   A /trunk/docbook/dg-src/EDG_chapter_env_intro.xml (from /trunk/docbook/dg-src/EDG_chapter_introduction.xml:11855)
+   D /trunk/docbook/dg-src/EDG_chapter_introduction.xml
+
+added two (almost) emtpy new chapters
+------------------------------------------------------------------------
+r11860 | ulfl | 2004-08-31 06:24:10 -0500 (Tue, 31 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_userinterface.xml
+
+some minor rework
+------------------------------------------------------------------------
+r11859 | ulfl | 2004-08-31 04:22:57 -0500 (Tue, 31 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/gtk/file_dlg.c
+   M /trunk/gtk/gui_prefs.c
+   M /trunk/prefs.c
+   M /trunk/prefs.h
+
+added a preference setting, to be able to change the preview timeout in the file open dialog (as requested by Ronnie Sahlberg).
+------------------------------------------------------------------------
+r11858 | ulfl | 2004-08-31 04:19:41 -0500 (Tue, 31 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/doc/README.developer
+
+corrected paths, where the dissectors and the corresponding Makefile.common can be found, to epan/dissectors
+------------------------------------------------------------------------
+r11857 | sahlberg | 2004-08-31 03:30:58 -0500 (Tue, 31 Aug 2004) | 5 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-dcerpc-samr.c
+   M /trunk/epan/dissectors/packet-dcerpc-samr.h
+
+
+break out the nt decryption and password handling into a separate function
+so we can call it from elsewhere
+
+
+------------------------------------------------------------------------
+r11856 | ulfl | 2004-08-31 03:18:10 -0500 (Tue, 31 Aug 2004) | 5 lines
+Changed paths:
+   M /trunk/gtk/file_dlg.c
+
+Split the preview function into a prepare and a do part, to be able to do some experiments about the preview timeout things.
+
+As the FileChooser dialog (GTK2.4) doesn't seem to let pass other GTK events (even with calling gtk_main_iteration()), it's not possible to change the preview behaviour to be more keen. To get a mechanism to update the preview independant from the dialog workings, we would need to start a new thread/task, which is too much effort for this IMHO.
+
+So we might use the more simple approach of setting the timeout by a preference setting.
+------------------------------------------------------------------------
+r11855 | guy | 2004-08-30 21:49:28 -0500 (Mon, 30 Aug 2004) | 8 lines
+Changed paths:
+   M /trunk/gtk/main.c
+
+Don't have a dummy widget to use for panes marked as "None" - that means
+the widget in question gets more than one parent if more than one pane
+is marked as "None", and GTK_ doesn't like that.  Instead, just have
+"main_widget_layout()" return a null pointer for "None" panes, and don't
+put the pane into the pane splitter if that pane is null.
+
+Clean up the handling of layouts.
+
+------------------------------------------------------------------------
+r11854 | guy | 2004-08-30 05:03:54 -0500 (Mon, 30 Aug 2004) | 5 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-h245.c
+   M /trunk/epan/dissectors/packet-rtcp.c
+   M /trunk/epan/dissectors/packet-rtcp.h
+   M /trunk/epan/dissectors/packet-rtp.c
+   M /trunk/epan/dissectors/packet-rtp.h
+   M /trunk/epan/dissectors/packet-rtsp.c
+   M /trunk/epan/dissectors/packet-sdp.c
+   M /trunk/epan/dissectors/packet-skinny.c
+
+Pass an "address *" to "rtp_add_address()" and "rtcp_add_address()", so
+so that they could handle IPv6 addresses.
+
+Clean up white space.
+
+------------------------------------------------------------------------
+r11853 | sahlberg | 2004-08-30 04:49:08 -0500 (Mon, 30 Aug 2004) | 12 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-kerberos.c
+
+Add a key  origin string for kerberos keys
+so that IF kerberos succeeds in decrypting a blob it can print a nice
+"[Decrypted using: keytab principal foo/bar@REALM]"
+or
+"[Decrypted using: key learnt from frame xx]"
+
+This makes it much easier to keep track of what keys decrypt what blob
+and is very useful for illustrating the sequence of keys that are exchanged and used in kerberos during the AS/TGS/AP exchanges.
+
+
+
+
+------------------------------------------------------------------------
+r11852 | sahlberg | 2004-08-30 03:40:08 -0500 (Mon, 30 Aug 2004) | 10 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-tcp.c
+
+For protocols running atop TCP and PDUs spanning multiple segments
+ethereal used to (bug) print in the summary line
+"[Continuation to #%d]" where %d was the current frame number.
+
+Fix this bug and let %d print the frame number of the first frame for this multiframe PDU.
+
+
+(Strange that no one has complained about this one)
+
+
+------------------------------------------------------------------------
+r11851 | sahlberg | 2004-08-30 03:31:21 -0500 (Mon, 30 Aug 2004) | 4 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-iscsi.c
+
+Reintroduce the three previously removed  iscsi header digest preference options as obsolete preferences  so that users upgrading to later versions of ethereal will not get the warning output for unknown preferences printed to stdout.
+
+
+
+------------------------------------------------------------------------
+r11850 | sahlberg | 2004-08-28 23:12:35 -0500 (Sat, 28 Aug 2004) | 13 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-iscsi.c
+
+remove two preference options related to iscsi header digest
+
+make ethereal attempt to automatically detect wether header digest is used or not for iscsi sessions.
+
+This makes ethereal decode the packets properly EVEN for perfectly normal sessions where
+the discovery session is performed with no digest but the normal login session negotiates digest.
+
+
+the detected headerdigest setting is tcp session wide and thus it
+it does not work for such initiators (if such exist) that resuse the same socketpair between the discovery and normal login sessions.
+
+
+
+------------------------------------------------------------------------
+r11849 | sahlberg | 2004-08-28 21:55:02 -0500 (Sat, 28 Aug 2004) | 5 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-iscsi.c
+
+finalize refactoring of conversation handling.
+what remains now is attaching autodetection of header digest to 
+the session state structure.
+
+
+------------------------------------------------------------------------
+r11848 | sahlberg | 2004-08-28 20:15:32 -0500 (Sat, 28 Aug 2004) | 10 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-iscsi.c
+
+move the conversation find and create into dissect_iscsi() from dissect_iscsi_pdu() so it will be easier to add a session wide state structure to iscsi.
+
+later this soon to be implemented structure (and not the conversation) will 
+hold the information we need to track  wether
+digests etc are in use or not.
+
+this also allows some minor indentation cleanups as well.
+
+
+
+------------------------------------------------------------------------
+r11847 | sahlberg | 2004-08-28 18:54:16 -0500 (Sat, 28 Aug 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-iscsi.c
+
+indentation change to make dissect_iscsi() easier to read
+
+
+------------------------------------------------------------------------
+r11846 | sahlberg | 2004-08-28 18:12:16 -0500 (Sat, 28 Aug 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-iscsi.c
+
+ISCSI Login Request and Login Response never contain any HeaderDigests
+
+
+------------------------------------------------------------------------
+r11845 | sahlberg | 2004-08-28 16:46:54 -0500 (Sat, 28 Aug 2004) | 6 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-tcp.c
+
+fix the bug introduced in the window scaling update,   dont
+try to access the conversation structures unless the
+proper preferences are enabled (so that the structs exists iun the first place)
+
+
+
+------------------------------------------------------------------------
+r11844 | guy | 2004-08-28 16:27:08 -0500 (Sat, 28 Aug 2004) | 3 lines
+Changed paths:
+   M /trunk/gtk/capture_if_dlg.c
+
+We use "#ifdef" elsewhere to test WIN32; use it, rather than #if, in the
+one place we were using #if.
+
+------------------------------------------------------------------------
+r11843 | guy | 2004-08-28 04:54:04 -0500 (Sat, 28 Aug 2004) | 4 lines
+Changed paths:
+   M /trunk/AUTHORS
+   M /trunk/gtk/decode_as_dlg.c
+
+From Francisco Alcoba: fix a crashing bug caused if you change the
+dissection for a given transport protocol port and there's no packet
+currently selected.
+
+------------------------------------------------------------------------
+r11842 | gerald | 2004-08-26 18:01:46 -0500 (Thu, 26 Aug 2004) | 2 lines
+Changed paths:
+   M /trunk/Makefile.nmake
+
+Bump the GTK+ 2.4 version up to 2.4.7, and bup GTK-Wimp up to 0.62.
+
+------------------------------------------------------------------------
+r11841 | guy | 2004-08-26 17:48:29 -0500 (Thu, 26 Aug 2004) | 8 lines
+Changed paths:
+   M /trunk/packaging/nsis/Makefile.nmake
+   M /trunk/packaging/nsis/ethereal.nsi
+
+From Lars Roland:
+
+	don't support GTK-Wimp for GTK+ 1.2[.x] (it requires 2.x);
+
+	install the NEWS file as "NEWS.txt";
+
+	optionally show it at the end of an installation.
+
+------------------------------------------------------------------------
+r11840 | guy | 2004-08-26 17:46:32 -0500 (Thu, 26 Aug 2004) | 6 lines
+Changed paths:
+   M /trunk/plugins/asn1/Makefile.nmake
+
+From Lars Roland: don't link with GTK+, as it's not necessary to do so,
+and as plugin dissectors shouldn't be linked with GTK+ (so that they
+don't depend on Ethereal being built with a particular version of GTK+ -
+Ethereal is packaged for Windows in both GTK+ 1.3[.x] and 2.x versions -
+and so that they can work with Tethereal, which doesn't use GTK+).
+
+------------------------------------------------------------------------
+r11839 | guy | 2004-08-26 17:03:47 -0500 (Thu, 26 Aug 2004) | 5 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-sip.c
+
+Clean up white space.
+
+"dissect_sip()" returns a "gint", so it has to be registered with
+"new_register_dissector()".
+
+------------------------------------------------------------------------
+r11838 | guy | 2004-08-26 13:34:16 -0500 (Thu, 26 Aug 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-lwapp.c
+
+Update the I-D name.
+
+------------------------------------------------------------------------
+r11837 | sahlberg | 2004-08-26 05:03:40 -0500 (Thu, 26 Aug 2004) | 11 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-tcp.c
+
+fix to that long outstanding bug with windowscaling
+
+If window scaling is NOT offered in the SYN+ACK  then window scaling will
+not be used at all, so clear it if we saw it offered previously in the SYN packet.
+
+If the window is scaled in a packet,  make ethereal display that by appendign the 
+string "  (scaled)" to the end of the tcp.window line in the
+decode pane.
+
+
+
+------------------------------------------------------------------------
+r11836 | guy | 2004-08-26 02:46:29 -0500 (Thu, 26 Aug 2004) | 8 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-ncp2222.inc
+
+From Greg Morris:
+
+	1. Fix Fax Number NDS attribute.  This was causing malformed
+	   packet message due to improper decoding. 
+
+	2. Do not try to decode packet beyond connection status when
+	   return value is non-zero (error condition).
+
+------------------------------------------------------------------------
+r11835 | ulfl | 2004-08-25 14:35:11 -0500 (Wed, 25 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/ug-src/EUG_chapter_io.xml
+   M /trunk/docbook/ug-src/EUG_chapter_work.xml
+
+fixed some typos
+------------------------------------------------------------------------
+r11834 | sahlberg | 2004-08-25 06:35:04 -0500 (Wed, 25 Aug 2004) | 10 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-kerberos.c
+
+Add the optional 13th tag to the KRB_ERR structure.
+
+This tag was part of an early kerberos draft but had dissapeared
+when 1510 was published.
+this early draft exist in implementations in the wild.
+
+add 4 extra checksum types as well from that draft.
+
+
+
+------------------------------------------------------------------------
+r11833 | sahlberg | 2004-08-25 05:48:37 -0500 (Wed, 25 Aug 2004) | 7 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-kerberos.c
+
+Prettify the principal name expansion to make it look more like normal kerberos notation for principals
+
+i.e. display it as "foo/bar"  instead of as "foo bar"
+
+
+
+
+------------------------------------------------------------------------
+r11832 | guy | 2004-08-25 00:51:14 -0500 (Wed, 25 Aug 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-radius.c
+
+Newer version of Luis Ontanon's patch.
+
+------------------------------------------------------------------------
+r11831 | etxrab | 2004-08-25 00:24:49 -0500 (Wed, 25 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/AUTHORS
+
+Add Luis Ontanon to the list of authors.
+------------------------------------------------------------------------
+r11830 | etxrab | 2004-08-25 00:14:17 -0500 (Wed, 25 Aug 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-radius.c
+
+From Luis Ontanon:
+add some fields for filtering on radius attributes. 
+------------------------------------------------------------------------
+r11829 | guy | 2004-08-25 00:12:58 -0500 (Wed, 25 Aug 2004) | 2 lines
+Changed paths:
+   M /trunk/gtk/decode_as_dlg.c
+
+Don't free something we haven't allocated.
+
+------------------------------------------------------------------------
+r11828 | guy | 2004-08-24 22:44:04 -0500 (Tue, 24 Aug 2004) | 9 lines
+Changed paths:
+   M /trunk/epan/ftypes/ftype-integer.c
+
+guint64 & guint64 is another guint64, but a gboolean is just 32 bits on
+most if not all platforms; the "bitwise and" operator in display filters
+is Boolean and evaluates to "true" if the result is non-zero and "false"
+otherwise, so explicitly do the comparison with 0 to make sure we don't
+just throw away the upper 32 bits.
+
+Do the same for the 32-bit bitwise AND as well, although it's not
+strictly necessary.
+
+------------------------------------------------------------------------
+r11827 | guy | 2004-08-24 22:32:26 -0500 (Tue, 24 Aug 2004) | 2 lines
+Changed paths:
+   M /trunk/packaging/nsis/ethereal.nsi
+
+From Lars Roland: cosmetic fixes.
+
+------------------------------------------------------------------------
+r11826 | guy | 2004-08-24 22:30:40 -0500 (Tue, 24 Aug 2004) | 6 lines
+Changed paths:
+   M /trunk/plugins/Xass-list
+   M /trunk/plugins/Xplugin_api.c
+   M /trunk/plugins/Xplugin_api.h
+   M /trunk/plugins/Xplugin_api_decls.h
+   M /trunk/plugins/Xplugin_table.h
+
+From Lars Roland: add "tvb_get_ntoh64()" to the list of routines
+callable from plugins and the list of routines exported from
+libethereal.dll.
+
+Do the same for "tvb_get_letoh64()".
+
+------------------------------------------------------------------------
+r11825 | guy | 2004-08-24 22:29:54 -0500 (Tue, 24 Aug 2004) | 6 lines
+Changed paths:
+   M /trunk/epan/libethereal.def
+   M /trunk/plugins/plugin_api_list.c
+
+From Lars Roland: add "tvb_get_ntoh64()" to the list of routines
+callable from plugins and the list of routines exported from
+libethereal.dll.
+
+Do the same for "tvb_get_letoh64()".
+
+------------------------------------------------------------------------
+r11824 | guy | 2004-08-24 22:26:56 -0500 (Tue, 24 Aug 2004) | 6 lines
+Changed paths:
+   M /trunk/config.h.win32
+
+"_strtoui64()" first appeared in MSVC++ 7 (good job of supporting those
+64-bit ints *present in MSVC++ 6*, Microsoft!), so we can't use it.  Use
+"g_ascii_strtoull()", instead - it's present in GLib 2.x, and we require
+GLib 2.x on Win32.  (It's not present in 1.2[.x], and we don't require
+2.x for UN*X, so we don't just use it everywhere.)
+
+------------------------------------------------------------------------
+r11823 | gerald | 2004-08-24 22:01:32 -0500 (Tue, 24 Aug 2004) | 2 lines
+Changed paths:
+   M /trunk/file.c
+   M /trunk/file.h
+   M /trunk/gtk/file_dlg.c
+
+Move the file-reloading code from gtk/file_dlg.c to file.c.
+
+------------------------------------------------------------------------
+r11821 | sahlberg | 2004-08-24 04:07:04 -0500 (Tue, 24 Aug 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-smb.c
+
+Fix the InfoQueryEASize infolevel for SetPathInfo and QueryPathInfo SMB's
+
+
+------------------------------------------------------------------------
+r11820 | guy | 2004-08-24 03:20:20 -0500 (Tue, 24 Aug 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/column-utils.c
+
+When deciding whether to add a separator or not, look at the buffer to
+which we're going to append the data.
+
+------------------------------------------------------------------------
+r11819 | guy | 2004-08-24 02:48:14 -0500 (Tue, 24 Aug 2004) | 4 lines
+Changed paths:
+   M /trunk/AUTHORS
+   M /trunk/epan/dissectors/packet-teredo.c
+
+From Remi Denis-Courmon: fix some problems with the decoding of Teredo
+authentication headers and decode them more verbosely, and make some
+other cleanups.
+
+------------------------------------------------------------------------
+r11818 | guy | 2004-08-24 02:38:29 -0500 (Tue, 24 Aug 2004) | 5 lines
+Changed paths:
+   M /trunk/epan/column-utils.c
+
+In "col_append_sep_fstr()" and "col_append_sep_str()", check "col_data"
+rather than "col_buf", so that we correctly handle a column set with
+"col_set_str()" (where we set "col_data" to point to the string, and
+leave "col_buf" alone).
+
+------------------------------------------------------------------------
+r11817 | ulfl | 2004-08-23 16:52:40 -0500 (Mon, 23 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_introduction.xml
+
+redesign of the introduction chapter
+------------------------------------------------------------------------
+r11816 | ulfl | 2004-08-23 14:46:18 -0500 (Mon, 23 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_libraries.xml
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
 
+minor changes
 ------------------------------------------------------------------------
-r11399 | ulfl | 2004-07-17 15:34:41 -0500 (Sat, 17 Jul 2004) | 1 line
+r11815 | etxrab | 2004-08-23 14:23:31 -0500 (Mon, 23 Aug 2004) | 3 lines
 Changed paths:
-   M /trunk/packaging/nsis/ethereal.nsi
+   M /trunk/epan/dissectors/packet-sip.c
 
-Be kind and say "Please note" instead of simply "Note" when something went wrong while uninstalling :-)
+Register SIP as a dissector to be able to do:
+sip_handle = find_dissector("sip");
+Which will be used by SigComp.
 ------------------------------------------------------------------------
-r11398 | gerald | 2004-07-17 15:30:22 -0500 (Sat, 17 Jul 2004) | 3 lines
+r11813 | guy | 2004-08-22 21:00:58 -0500 (Sun, 22 Aug 2004) | 5 lines
 Changed paths:
-   M /trunk/asn1/h235/h235.cnf
-   M /trunk/asn1/h235/packet-h235-template.c
-   M /trunk/asn1/h235/packet-h235-template.h
-   M /trunk/doc/Makefile.am
-   M /trunk/doc/Makefile.nmake
-   M /trunk/doc/README.capture
-   M /trunk/doc/README.design
-   M /trunk/doc/README.developer
-   M /trunk/doc/README.idl2eth
-   M /trunk/doc/README.plugins
-   M /trunk/doc/README.regression
-   M /trunk/doc/README.tapping
-   M /trunk/doc/README.tvbuff
-   M /trunk/doc/README.xml-output
-   M /trunk/doc/dfilter2pod.pl
-   M /trunk/doc/eproto2sgml
-   M /trunk/doc/randpkt.txt
-   M /trunk/epan/Makefile.am
-   M /trunk/epan/Makefile.common
-   M /trunk/epan/Makefile.nmake
-   M /trunk/epan/README
-   M /trunk/epan/addr_and_mask.c
-   M /trunk/epan/addr_and_mask.h
-   M /trunk/epan/atalk-utils.c
-   M /trunk/epan/atalk-utils.h
-   M /trunk/epan/bitswap.c
-   M /trunk/epan/bitswap.h
-   M /trunk/epan/circuit.c
-   M /trunk/epan/circuit.h
-   M /trunk/epan/column-utils.c
-   M /trunk/epan/column-utils.h
-   M /trunk/epan/column_info.h
-   M /trunk/epan/conversation.c
-   M /trunk/epan/conversation.h
-   M /trunk/epan/dfilter/Makefile.am
-   M /trunk/epan/dfilter/Makefile.nmake
-   M /trunk/epan/dfilter/README.dfilter
-   M /trunk/epan/dfilter/dfilter-int.h
-   M /trunk/epan/dfilter/dfilter.c
-   M /trunk/epan/dfilter/dfilter.h
-   M /trunk/epan/dfilter/dfvm.c
-   M /trunk/epan/dfilter/dfvm.h
-   M /trunk/epan/dfilter/drange.c
-   M /trunk/epan/dfilter/drange.h
-   M /trunk/epan/dfilter/gencode.c
-   M /trunk/epan/dfilter/glib-util.c
-   M /trunk/epan/dfilter/glib-util.h
-   M /trunk/epan/dfilter/grammar.lemon
-   M /trunk/epan/dfilter/scanner.l
-   M /trunk/epan/dfilter/semcheck.c
-   M /trunk/epan/dfilter/semcheck.h
-   M /trunk/epan/dfilter/sttype-integer.c
-   M /trunk/epan/dfilter/sttype-pointer.c
-   M /trunk/epan/dfilter/sttype-range.c
-   M /trunk/epan/dfilter/sttype-range.h
-   M /trunk/epan/dfilter/sttype-string.c
-   M /trunk/epan/dfilter/sttype-test.c
-   M /trunk/epan/dfilter/sttype-test.h
-   M /trunk/epan/dfilter/syntax-tree.c
-   M /trunk/epan/dfilter/syntax-tree.h
-   M /trunk/epan/epan.c
-   M /trunk/epan/epan.h
-   M /trunk/epan/epan_dissect.h
-   M /trunk/epan/except.c
-   M /trunk/epan/except.h
-   M /trunk/epan/filesystem.c
-   M /trunk/epan/filesystem.h
-   M /trunk/epan/frame_data.c
-   M /trunk/epan/frame_data.h
-   M /trunk/epan/ftypes/Makefile.am
-   M /trunk/epan/ftypes/Makefile.nmake
-   M /trunk/epan/ftypes/ftype-bytes.c
-   M /trunk/epan/ftypes/ftype-double.c
-   M /trunk/epan/ftypes/ftype-integer.c
-   M /trunk/epan/ftypes/ftype-ipv4.c
-   M /trunk/epan/ftypes/ftype-none.c
-   M /trunk/epan/ftypes/ftype-pcre.c
-   M /trunk/epan/ftypes/ftype-string.c
-   M /trunk/epan/ftypes/ftype-time.c
-   M /trunk/epan/ftypes/ftype-tvbuff.c
-   M /trunk/epan/ftypes/ftypes-int.h
-   M /trunk/epan/ftypes/ftypes.c
-   M /trunk/epan/ftypes/ftypes.h
-   M /trunk/epan/gdebug.h
-   M /trunk/epan/inet_aton.h
-   M /trunk/epan/inet_ntop.c
-   M /trunk/epan/inet_pton.c
-   M /trunk/epan/inet_v6defs.h
-   M /trunk/epan/int-64bit.c
-   M /trunk/epan/int-64bit.h
-   M /trunk/epan/ipv4.c
-   M /trunk/epan/ipv4.h
-   M /trunk/epan/ipv6-utils.h
-   M /trunk/epan/nstime.h
-   M /trunk/epan/osi-utils.c
-   M /trunk/epan/osi-utils.h
-   M /trunk/epan/packet.c
-   M /trunk/epan/packet.h
-   M /trunk/epan/packet_info.h
-   M /trunk/epan/pint.h
-   M /trunk/epan/plugins.c
-   M /trunk/epan/plugins.h
-   M /trunk/epan/proto.c
-   M /trunk/epan/proto.h
-   M /trunk/epan/report_err.h
-   M /trunk/epan/resolv.c
-   M /trunk/epan/resolv.h
-   M /trunk/epan/slab.h
-   M /trunk/epan/sna-utils.c
-   M /trunk/epan/sna-utils.h
-   M /trunk/epan/strutil.c
-   M /trunk/epan/strutil.h
-   M /trunk/epan/timestamp.c
-   M /trunk/epan/timestamp.h
-   M /trunk/epan/to_str.c
-   M /trunk/epan/to_str.h
-   M /trunk/epan/tvbtest.c
-   M /trunk/epan/tvbuff.c
-   M /trunk/epan/tvbuff.h
-   M /trunk/epan/value_string.c
-   M /trunk/epan/value_string.h
-   M /trunk/gtk/Makefile.am
-   M /trunk/gtk/Makefile.common
-   M /trunk/gtk/Makefile.nmake
-   M /trunk/gtk/about_dlg.c
-   M /trunk/gtk/about_dlg.h
-   M /trunk/gtk/ansi_a_stat.c
-   M /trunk/gtk/ansi_map_stat.c
-   M /trunk/gtk/bootp_stat.c
-   M /trunk/gtk/capture_combo_utils.c
-   M /trunk/gtk/capture_combo_utils.h
-   M /trunk/gtk/capture_dlg.c
-   M /trunk/gtk/capture_dlg.h
-   M /trunk/gtk/capture_if_dlg.c
-   M /trunk/gtk/capture_info_dlg.c
-   M /trunk/gtk/capture_prefs.c
-   M /trunk/gtk/capture_prefs.h
-   M /trunk/gtk/color_dlg.c
-   M /trunk/gtk/color_dlg.h
-   M /trunk/gtk/color_filters.c
-   M /trunk/gtk/color_filters.h
-   M /trunk/gtk/color_utils.c
-   M /trunk/gtk/color_utils.h
-   M /trunk/gtk/colors.c
-   M /trunk/gtk/colors.h
-   M /trunk/gtk/column_prefs.c
-   M /trunk/gtk/column_prefs.h
-   M /trunk/gtk/compat_macros.h
-   M /trunk/gtk/dcerpc_stat.c
-   M /trunk/gtk/decode_as_dlg.c
-   M /trunk/gtk/decode_as_dlg.h
-   M /trunk/gtk/dfilter_expr_dlg.c
-   M /trunk/gtk/dfilter_expr_dlg.h
-   M /trunk/gtk/dlg_utils.c
-   M /trunk/gtk/dlg_utils.h
-   M /trunk/gtk/endpoint_talkers_eth.c
-   M /trunk/gtk/endpoint_talkers_fc.c
-   M /trunk/gtk/endpoint_talkers_fddi.c
-   M /trunk/gtk/endpoint_talkers_ip.c
-   M /trunk/gtk/endpoint_talkers_ipx.c
-   M /trunk/gtk/endpoint_talkers_table.c
-   M /trunk/gtk/endpoint_talkers_table.h
-   M /trunk/gtk/endpoint_talkers_tcpip.c
-   M /trunk/gtk/endpoint_talkers_tr.c
-   M /trunk/gtk/endpoint_talkers_udpip.c
-   M /trunk/gtk/ethclist.c
-   M /trunk/gtk/ethclist.h
-   M /trunk/gtk/fc_stat.c
-   M /trunk/gtk/file_dlg.c
-   M /trunk/gtk/file_dlg.h
-   M /trunk/gtk/filter_prefs.c
-   M /trunk/gtk/filter_prefs.h
-   M /trunk/gtk/find_dlg.c
-   M /trunk/gtk/find_dlg.h
-   M /trunk/gtk/follow_dlg.c
-   M /trunk/gtk/follow_dlg.h
-   M /trunk/gtk/font_utils.c
-   M /trunk/gtk/font_utils.h
-   M /trunk/gtk/goto_dlg.c
-   M /trunk/gtk/goto_dlg.h
-   M /trunk/gtk/gsm_a_stat.c
-   M /trunk/gtk/gsm_map_stat.c
-   M /trunk/gtk/gsm_map_stat.h
-   M /trunk/gtk/gsm_map_summary.c
-   M /trunk/gtk/gtk_stat_util.c
-   M /trunk/gtk/gtk_stat_util.h
-   M /trunk/gtk/gtkglobals.h
-   M /trunk/gtk/gui_prefs.c
-   M /trunk/gtk/gui_prefs.h
-   M /trunk/gtk/h225_counter.c
-   M /trunk/gtk/h225_ras_srt.c
-   M /trunk/gtk/help_dlg.c
-   M /trunk/gtk/help_dlg.h
-   M /trunk/gtk/hostlist_eth.c
-   M /trunk/gtk/hostlist_fc.c
-   M /trunk/gtk/hostlist_fddi.c
-   M /trunk/gtk/hostlist_ip.c
-   M /trunk/gtk/hostlist_ipx.c
-   M /trunk/gtk/hostlist_table.c
-   M /trunk/gtk/hostlist_table.h
-   M /trunk/gtk/hostlist_tcpip.c
-   M /trunk/gtk/hostlist_tr.c
-   M /trunk/gtk/hostlist_udpip.c
-   M /trunk/gtk/http_stat.c
-   M /trunk/gtk/io_stat.c
-   M /trunk/gtk/isprint.h
-   M /trunk/gtk/isup_stat.c
-   M /trunk/gtk/keys.h
-   M /trunk/gtk/layout_prefs.c
-   M /trunk/gtk/layout_prefs.h
-   M /trunk/gtk/ldap_stat.c
-   M /trunk/gtk/main.c
-   M /trunk/gtk/main.h
-   M /trunk/gtk/menu.c
-   M /trunk/gtk/menu.h
-   M /trunk/gtk/mgcp_stat.c
-   M /trunk/gtk/mtp3_stat.c
-   M /trunk/gtk/mtp3_stat.h
-   M /trunk/gtk/mtp3_summary.c
-   M /trunk/gtk/nameres_prefs.c
-   M /trunk/gtk/nameres_prefs.h
-   M /trunk/gtk/packet_list.c
-   M /trunk/gtk/packet_list.h
-   M /trunk/gtk/packet_win.c
-   M /trunk/gtk/packet_win.h
-   M /trunk/gtk/plugins_dlg.c
-   M /trunk/gtk/prefs_dlg.c
-   M /trunk/gtk/prefs_dlg.h
-   M /trunk/gtk/print_dlg.c
-   M /trunk/gtk/print_mswin.c
-   M /trunk/gtk/print_mswin.h
-   M /trunk/gtk/print_prefs.c
-   M /trunk/gtk/print_prefs.h
-   M /trunk/gtk/progress_dlg.c
-   M /trunk/gtk/proto_dlg.c
-   M /trunk/gtk/proto_dlg.h
-   M /trunk/gtk/proto_draw.c
-   M /trunk/gtk/proto_draw.h
-   M /trunk/gtk/proto_hier_stats_dlg.c
-   M /trunk/gtk/proto_hier_stats_dlg.h
-   M /trunk/gtk/range_utils.c
-   M /trunk/gtk/range_utils.h
-   M /trunk/gtk/recent.c
-   M /trunk/gtk/recent.h
-   M /trunk/gtk/rpc_progs.c
-   M /trunk/gtk/rpc_stat.c
-   M /trunk/gtk/rtp_analysis.c
-   M /trunk/gtk/rtp_analysis.h
-   M /trunk/gtk/rtp_stream.c
-   M /trunk/gtk/rtp_stream.h
-   M /trunk/gtk/rtp_stream_dlg.c
-   M /trunk/gtk/rtp_stream_dlg.h
-   M /trunk/gtk/sat.h
-   M /trunk/gtk/service_response_time_table.c
-   M /trunk/gtk/service_response_time_table.h
-   M /trunk/gtk/simple_dialog.c
-   M /trunk/gtk/sip_stat.c
-   M /trunk/gtk/smb_stat.c
-   M /trunk/gtk/stream_prefs.c
-   M /trunk/gtk/stream_prefs.h
-   M /trunk/gtk/summary_dlg.c
-   M /trunk/gtk/summary_dlg.h
-   M /trunk/gtk/supported_protos_dlg.c
-   M /trunk/gtk/supported_protos_dlg.h
-   M /trunk/gtk/tap_dfilter_dlg.c
-   M /trunk/gtk/tap_dfilter_dlg.h
-   M /trunk/gtk/tap_menu.h
-   M /trunk/gtk/tcp_graph.c
-   M /trunk/gtk/text_page.c
-   M /trunk/gtk/text_page.h
-   M /trunk/gtk/toolbar.c
-   M /trunk/gtk/toolbar.h
-   M /trunk/gtk/ui_util.c
-   M /trunk/gtk/ui_util.h
-   M /trunk/gtk/webbrowser.h
-   M /trunk/gtk/wsp_stat.c
-   M /trunk/help/Makefile.am
-   M /trunk/help/Makefile.nmake
-   M /trunk/image/Makefile.nmake
-   M /trunk/packaging/nsis/Makefile.nmake
-   M /trunk/packaging/nsis/ethereal.nsi
-   M /trunk/plugins/Makefile.am
-   M /trunk/plugins/Makefile.nmake
-   M /trunk/plugins/acn/ChangeLog
-   M /trunk/plugins/acn/Makefile.am
-   M /trunk/plugins/acn/Makefile.nmake
-   M /trunk/plugins/acn/packet-acn.c
-   M /trunk/plugins/artnet/ChangeLog
-   M /trunk/plugins/artnet/Makefile.am
-   M /trunk/plugins/artnet/Makefile.nmake
-   M /trunk/plugins/artnet/packet-artnet.c
-   M /trunk/plugins/asn1/Makefile.am
-   M /trunk/plugins/asn1/Makefile.nmake
-   M /trunk/plugins/asn1/packet-asn1.c
-   M /trunk/plugins/ciscosm/Makefile.am
-   M /trunk/plugins/ciscosm/Makefile.nmake
-   M /trunk/plugins/ciscosm/packet-sm.c
-   M /trunk/plugins/docsis/Makefile.am
-   M /trunk/plugins/docsis/Makefile.nmake
-   M /trunk/plugins/docsis/packet-bpkmattr.c
-   M /trunk/plugins/docsis/packet-bpkmreq.c
-   M /trunk/plugins/docsis/packet-bpkmrsp.c
-   M /trunk/plugins/docsis/packet-docsis.c
-   M /trunk/plugins/docsis/packet-docsis.h
-   M /trunk/plugins/docsis/packet-dsaack.c
-   M /trunk/plugins/docsis/packet-dsareq.c
-   M /trunk/plugins/docsis/packet-dsarsp.c
-   M /trunk/plugins/docsis/packet-dscack.c
-   M /trunk/plugins/docsis/packet-dscreq.c
-   M /trunk/plugins/docsis/packet-dscrsp.c
-   M /trunk/plugins/docsis/packet-dsdreq.c
-   M /trunk/plugins/docsis/packet-dsdrsp.c
-   M /trunk/plugins/docsis/packet-intrngreq.c
-   M /trunk/plugins/docsis/packet-macmgmt.c
-   M /trunk/plugins/docsis/packet-map.c
-   M /trunk/plugins/docsis/packet-regack.c
-   M /trunk/plugins/docsis/packet-regreq.c
-   M /trunk/plugins/docsis/packet-regrsp.c
-   M /trunk/plugins/docsis/packet-rngreq.c
-   M /trunk/plugins/docsis/packet-rngrsp.c
-   M /trunk/plugins/docsis/packet-tlv.c
-   M /trunk/plugins/docsis/packet-tlv.h
-   M /trunk/plugins/docsis/packet-type29ucd.c
-   M /trunk/plugins/docsis/packet-uccreq.c
-   M /trunk/plugins/docsis/packet-uccrsp.c
-   M /trunk/plugins/docsis/packet-ucd.c
-   M /trunk/plugins/docsis/packet-vendor.c
-   M /trunk/plugins/enttec/ChangeLog
-   M /trunk/plugins/enttec/Makefile.am
-   M /trunk/plugins/enttec/Makefile.nmake
-   M /trunk/plugins/enttec/packet-enttec.c
-   M /trunk/plugins/giop/Makefile.am
-   M /trunk/plugins/giop/Makefile.nmake
-   M /trunk/plugins/gryphon/Makefile.am
-   M /trunk/plugins/gryphon/Makefile.nmake
-   M /trunk/plugins/gryphon/packet-gryphon.c
-   M /trunk/plugins/gryphon/packet-gryphon.h
-   M /trunk/plugins/irda/Makefile.am
-   M /trunk/plugins/irda/Makefile.nmake
-   M /trunk/plugins/irda/irda-appl.h
-   M /trunk/plugins/irda/packet-ircomm.c
-   M /trunk/plugins/irda/packet-irda.c
-   M /trunk/plugins/lwres/Makefile.am
-   M /trunk/plugins/lwres/Makefile.nmake
-   M /trunk/plugins/lwres/packet-lwres.c
-   M /trunk/plugins/megaco/Makefile.am
-   M /trunk/plugins/megaco/Makefile.nmake
-   M /trunk/plugins/megaco/packet-megaco.c
-   M /trunk/plugins/mgcp/Makefile.am
-   M /trunk/plugins/mgcp/Makefile.nmake
-   M /trunk/plugins/mgcp/packet-mgcp.c
-   M /trunk/plugins/mgcp/packet-mgcp.h
-   M /trunk/plugins/pcli/Makefile.am
-   M /trunk/plugins/pcli/Makefile.nmake
-   M /trunk/plugins/pcli/packet-pcli.c
-   M /trunk/plugins/plugin_api.c
-   M /trunk/plugins/plugin_api.h
-   M /trunk/plugins/plugin_api_decls.h
-   M /trunk/plugins/plugin_api_defs.h
-   M /trunk/plugins/plugin_api_list.c
-   M /trunk/plugins/plugin_gen.py
-   M /trunk/plugins/plugin_table.h
-   M /trunk/plugins/rdm/Makefile.am
-   M /trunk/plugins/rdm/Makefile.nmake
-   M /trunk/plugins/rdm/packet-rdm.c
-   M /trunk/plugins/rlm/Makefile.am
-   M /trunk/plugins/rlm/Makefile.nmake
-   M /trunk/plugins/rlm/packet-rlm.c
-   M /trunk/plugins/rtnet/Makefile.am
-   M /trunk/plugins/rtnet/Makefile.nmake
-   M /trunk/plugins/rtnet/packet-rtnet.c
-   M /trunk/plugins/rudp/Makefile.am
-   M /trunk/plugins/rudp/Makefile.nmake
-   M /trunk/plugins/rudp/packet-rudp.c
-   M /trunk/plugins/v5ua/Makefile.am
-   M /trunk/plugins/v5ua/Makefile.nmake
-   M /trunk/tools/Makefile.am
-   M /trunk/tools/Makefile.nmake
-   M /trunk/tools/asn2eth.py
-   M /trunk/tools/cvsdiff-fix.py
-   M /trunk/tools/dfilter-test.py
-   M /trunk/tools/lemon/Makefile.am
-   M /trunk/tools/lemon/Makefile.nmake
-   M /trunk/tools/lemon/README
-   M /trunk/tools/lemon/cppmagic.h
-   M /trunk/tools/lemon/lemon.c
-   M /trunk/tools/lemon/lemonflex-head.inc
-   M /trunk/tools/lemon/lemonflex-tail.inc
-   M /trunk/wiretap/5views.c
-   M /trunk/wiretap/5views.h
-   M /trunk/wiretap/Makefile.am
-   M /trunk/wiretap/Makefile.nmake
-   M /trunk/wiretap/README
-   M /trunk/wiretap/README.developer
-   M /trunk/wiretap/acinclude.m4
-   M /trunk/wiretap/airopeek9.c
-   M /trunk/wiretap/airopeek9.h
-   M /trunk/wiretap/ascend-grammar.y
-   M /trunk/wiretap/ascend-int.h
-   M /trunk/wiretap/ascend-scanner.l
-   M /trunk/wiretap/ascend.c
-   M /trunk/wiretap/ascend.h
-   M /trunk/wiretap/atm.c
-   M /trunk/wiretap/atm.h
-   M /trunk/wiretap/buffer.c
-   M /trunk/wiretap/buffer.h
-   M /trunk/wiretap/config.h.win32
-   M /trunk/wiretap/configure.in
-   M /trunk/wiretap/cosine.c
-   M /trunk/wiretap/cosine.h
-   M /trunk/wiretap/csids.c
-   M /trunk/wiretap/csids.h
-   M /trunk/wiretap/dbs-etherwatch.c
-   M /trunk/wiretap/dbs-etherwatch.h
-   M /trunk/wiretap/erf.c
-   M /trunk/wiretap/erf.h
-   M /trunk/wiretap/etherpeek.c
-   M /trunk/wiretap/etherpeek.h
-   M /trunk/wiretap/eyesdn.c
-   M /trunk/wiretap/eyesdn.h
-   M /trunk/wiretap/file_access.c
-   M /trunk/wiretap/file_wrappers.c
-   M /trunk/wiretap/file_wrappers.h
-   M /trunk/wiretap/hcidump.c
-   M /trunk/wiretap/hcidump.h
-   M /trunk/wiretap/i4b_trace.h
-   M /trunk/wiretap/i4btrace.c
-   M /trunk/wiretap/i4btrace.h
-   M /trunk/wiretap/iptrace.c
-   M /trunk/wiretap/iptrace.h
-   M /trunk/wiretap/lanalyzer.c
-   M /trunk/wiretap/lanalyzer.h
-   M /trunk/wiretap/libpcap.c
-   M /trunk/wiretap/libpcap.h
-   M /trunk/wiretap/netmon.c
-   M /trunk/wiretap/netmon.h
-   M /trunk/wiretap/nettl.c
-   M /trunk/wiretap/nettl.h
-   M /trunk/wiretap/network_instruments.c
-   M /trunk/wiretap/network_instruments.h
-   M /trunk/wiretap/netxray.c
-   M /trunk/wiretap/netxray.h
-   M /trunk/wiretap/ngsniffer.c
-   M /trunk/wiretap/ngsniffer.h
-   M /trunk/wiretap/pppdump.c
-   M /trunk/wiretap/pppdump.h
-   M /trunk/wiretap/radcom.c
-   M /trunk/wiretap/radcom.h
-   M /trunk/wiretap/snoop.c
-   M /trunk/wiretap/snoop.h
-   M /trunk/wiretap/toshiba.c
-   M /trunk/wiretap/toshiba.h
-   M /trunk/wiretap/visual.c
-   M /trunk/wiretap/visual.h
-   M /trunk/wiretap/vms.c
-   M /trunk/wiretap/vms.h
-   M /trunk/wiretap/wtap-capture.h
-   M /trunk/wiretap/wtap-int.h
-   M /trunk/wiretap/wtap.c
-   M /trunk/wiretap/wtap.h
+   M /trunk/epan/dissectors/packet-isup.c
 
-Set the "svn:keywords Id" property on all other files with an RCS ID string.
+Set the parameter item for called party number, calling party number,
+and redirecting number to include the number.
 
+Clean up white space.
 
 ------------------------------------------------------------------------
-r11397 | gerald | 2004-07-17 15:20:45 -0500 (Sat, 17 Jul 2004) | 8 lines
+r11812 | guy | 2004-08-22 20:04:46 -0500 (Sun, 22 Aug 2004) | 10 lines
 Changed paths:
-   M /trunk/Ethereal.desktop
+   M /trunk/epan/dissectors/packet-dcerpc-mapi.c
+
+Don't save the decrypted data on the first pass and use it on subsequent
+references to a packet - just re-"decrypt" it (not a lot of work, given
+the sophisticated encryption MAPI uses).  We don't save decrypted data
+for non-trivial encryptions, so there's not much of a reason to save it
+here - and the code to save it was at least sometimes not finding it
+again, causing crashes.
+
+Set the length and reported length of the decrypted data tvbuff
+appropriately.
+
+------------------------------------------------------------------------
+r11811 | etxrab | 2004-08-22 15:32:20 -0500 (Sun, 22 Aug 2004) | 4 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-isup.c
+
+Add the changes promised in the earlier checkin:
+
+From Luis Ontanon:  add some fields for filtering r packet-isup which adds A,B and C numbers to the 
+ fields (that is called,calling and redirecting number). Changed the patch to not use hidden fields and some code clean up
+------------------------------------------------------------------------
+r11810 | ulfl | 2004-08-22 07:22:09 -0500 (Sun, 22 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/ug-src/EUG_chapter_build_install.xml
+
+added win32 installer components description
+------------------------------------------------------------------------
+r11809 | ulfl | 2004-08-22 06:19:46 -0500 (Sun, 22 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_sources.xml
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
+
+add even more content :-)
+------------------------------------------------------------------------
+r11808 | jmayer | 2004-08-22 04:22:15 -0500 (Sun, 22 Aug 2004) | 1 line
+Changed paths:
+   D /trunk/Ethereal.desktop
    M /trunk/Makefile.am
-   M /trunk/Makefile.common
-   M /trunk/Makefile.nmake
-   M /trunk/NEWS
-   M /trunk/README
-   M /trunk/README.aix
-   M /trunk/README.bsd
-   M /trunk/README.hpux
-   M /trunk/README.irix
-   M /trunk/README.linux
-   M /trunk/README.macos
-   M /trunk/README.tru64
-   M /trunk/README.vmware
-   M /trunk/README.win32
-   M /trunk/TODO
-   M /trunk/acinclude.m4
-   M /trunk/aclocal-flags
-   M /trunk/adler32.c
-   M /trunk/adler32.h
-   M /trunk/afn.c
-   M /trunk/afn.h
-   M /trunk/aftypes.h
-   M /trunk/alert_box.c
-   M /trunk/alert_box.h
-   M /trunk/arcnet_pids.h
-   M /trunk/asn1.c
-   M /trunk/asn1.h
-   M /trunk/autogen.sh
-   M /trunk/bridged_pids.h
-   M /trunk/capture-wpcap.c
-   M /trunk/capture-wpcap.h
-   M /trunk/capture.c
-   M /trunk/capture.h
-   M /trunk/capture_stop_conditions.c
-   M /trunk/capture_stop_conditions.h
-   M /trunk/cfile.c
-   M /trunk/cfile.h
-   M /trunk/chdlctypes.h
-   M /trunk/cleanbld.bat
-   M /trunk/color.h
-   M /trunk/column.c
-   M /trunk/column.h
-   M /trunk/conditions.c
-   M /trunk/conditions.h
-   M /trunk/config.h.win32
-   M /trunk/config.nmake
-   M /trunk/configure.in
-   M /trunk/crc16.c
-   M /trunk/crc16.h
-   M /trunk/crc32.c
-   M /trunk/crc32.h
-   M /trunk/crypt-des.c
-   M /trunk/crypt-des.h
-   M /trunk/crypt-md4.c
-   M /trunk/crypt-md4.h
-   M /trunk/crypt-md5.c
-   M /trunk/crypt-md5.h
-   M /trunk/crypt-rc4.c
-   M /trunk/crypt-rc4.h
-   M /trunk/dftest.c
-   M /trunk/disabled_protos.c
-   M /trunk/disabled_protos.h
-   M /trunk/editcap.c
-   M /trunk/ethereal_be.py
-   M /trunk/ethereal_gen.py
-   M /trunk/etypes.h
-   M /trunk/file.c
-   M /trunk/file.h
-   M /trunk/filters.c
-   M /trunk/filters.h
-   M /trunk/follow.c
-   M /trunk/follow.h
-   M /trunk/format-oid.h
-   M /trunk/g711.c
-   M /trunk/g711.h
-   M /trunk/getopt.c
-   M /trunk/globals.h
-   M /trunk/greproto.h
-   M /trunk/h225-persistentdata.c
-   M /trunk/h225-persistentdata.h
-   M /trunk/iax2_codec_type.h
-   M /trunk/idl2eth.sh
-   M /trunk/in_cksum.c
-   M /trunk/in_cksum.h
-   M /trunk/ip_opts.h
-   M /trunk/ipproto.c
-   M /trunk/ipproto.h
-   M /trunk/isprint.h
-   M /trunk/lapd_sapi.h
-   M /trunk/llcsaps.h
-   M /trunk/make-authors-short.pl
-   M /trunk/make-faq
-   M /trunk/make-manuf
-   M /trunk/make-reg-dotc
-   M /trunk/make-reg-dotc.py
-   M /trunk/make-tapreg-dotc
-   M /trunk/make-version.pl
-   M /trunk/manuf
-   M /trunk/manuf.tmpl
-   M /trunk/menu.h
-   M /trunk/merge.c
-   M /trunk/merge.h
-   M /trunk/mergecap.c
-   M /trunk/mkcap.c
-   M /trunk/ncp2222.py
-   M /trunk/nlpid.h
-   M /trunk/oui.h
-   M /trunk/packet-3g-a11.c
-   M /trunk/packet-aarp.c
-   M /trunk/packet-acap.c
-   M /trunk/packet-acse.c
-   M /trunk/packet-acse.h
-   M /trunk/packet-afp.c
-   M /trunk/packet-afp.h
-   M /trunk/packet-afs-defs.h
-   M /trunk/packet-afs-macros.h
-   M /trunk/packet-afs-register-info.h
-   M /trunk/packet-afs.c
-   M /trunk/packet-afs.h
-   M /trunk/packet-aim-admin.c
-   M /trunk/packet-aim-adverts.c
-   M /trunk/packet-aim-bos.c
-   M /trunk/packet-aim-buddylist.c
-   M /trunk/packet-aim-chat.c
-   M /trunk/packet-aim-chatnav.c
-   M /trunk/packet-aim-directory.c
-   M /trunk/packet-aim-generic.c
-   M /trunk/packet-aim-icq.c
-   M /trunk/packet-aim-invitation.c
-   M /trunk/packet-aim-location.c
-   M /trunk/packet-aim-messaging.c
-   M /trunk/packet-aim-oft.c
-   M /trunk/packet-aim-popup.c
-   M /trunk/packet-aim-signon.c
-   M /trunk/packet-aim-ssi.c
-   M /trunk/packet-aim-stats.c
-   M /trunk/packet-aim-translate.c
-   M /trunk/packet-aim-userlookup.c
-   M /trunk/packet-aim.c
-   M /trunk/packet-aim.h
-   M /trunk/packet-ajp13.c
-   M /trunk/packet-alcap.c
-   M /trunk/packet-ans.c
-   M /trunk/packet-ansi_637.c
-   M /trunk/packet-ansi_683.c
-   M /trunk/packet-ansi_801.c
-   M /trunk/packet-ansi_a.c
-   M /trunk/packet-ansi_a.h
-   M /trunk/packet-ansi_map.c
-   M /trunk/packet-ansi_map.h
-   M /trunk/packet-aodv.c
-   M /trunk/packet-ap1394.c
-   M /trunk/packet-ap1394.h
-   M /trunk/packet-arcnet.c
-   M /trunk/packet-arcnet.h
-   M /trunk/packet-arp.c
-   M /trunk/packet-arp.h
-   M /trunk/packet-asap.c
-   M /trunk/packet-ascend.c
-   M /trunk/packet-asf.c
-   M /trunk/packet-atalk.c
-   M /trunk/packet-atalk.h
-   M /trunk/packet-atm.c
-   M /trunk/packet-atm.h
-   M /trunk/packet-auto_rp.c
-   M /trunk/packet-bacapp.c
-   M /trunk/packet-bacnet.c
-   M /trunk/packet-beep.c
-   M /trunk/packet-ber.c
-   M /trunk/packet-ber.h
-   M /trunk/packet-bfd.c
-   M /trunk/packet-bgp.c
-   M /trunk/packet-bgp.h
-   M /trunk/packet-bofl.c
-   M /trunk/packet-bootp.c
-   M /trunk/packet-bootparams.c
-   M /trunk/packet-bootparams.h
-   M /trunk/packet-bpdu.c
-   M /trunk/packet-brdwlk.c
-   M /trunk/packet-bssap.c
-   M /trunk/packet-bssap.h
-   M /trunk/packet-bssgp.c
-   M /trunk/packet-bvlc.c
-   M /trunk/packet-cast.c
-   M /trunk/packet-ccsds.c
-   M /trunk/packet-cdp.c
-   M /trunk/packet-cgmp.c
-   M /trunk/packet-chdlc.c
-   M /trunk/packet-chdlc.h
-   M /trunk/packet-cisco-oui.c
-   M /trunk/packet-clearcase.c
-   M /trunk/packet-clearcase.h
-   M /trunk/packet-clip.c
-   M /trunk/packet-clip.h
-   M /trunk/packet-clnp.c
-   M /trunk/packet-cops.c
-   M /trunk/packet-cosine.c
-   M /trunk/packet-cpfi.c
-   M /trunk/packet-cpha.c
-   M /trunk/packet-cups.c
-   M /trunk/packet-data.c
-   M /trunk/packet-data.h
-   M /trunk/packet-dccp.c
-   M /trunk/packet-dccp.h
-   M /trunk/packet-dcerpc-afs4int.c
-   M /trunk/packet-dcerpc-atsvc.c
-   M /trunk/packet-dcerpc-atsvc.h
-   M /trunk/packet-dcerpc-bossvr.c
-   M /trunk/packet-dcerpc-browser.c
-   M /trunk/packet-dcerpc-browser.h
-   M /trunk/packet-dcerpc-budb.c
-   M /trunk/packet-dcerpc-butc.c
-   M /trunk/packet-dcerpc-cds_clerkserver.c
-   M /trunk/packet-dcerpc-cds_solicit.c
-   M /trunk/packet-dcerpc-conv.c
-   M /trunk/packet-dcerpc-cprpc_server.c
-   M /trunk/packet-dcerpc-dce122.c
-   M /trunk/packet-dcerpc-dce122.h
-   M /trunk/packet-dcerpc-dcom.h
-   M /trunk/packet-dcerpc-dfs.c
-   M /trunk/packet-dcerpc-dfs.h
-   M /trunk/packet-dcerpc-dnsserver.c
-   M /trunk/packet-dcerpc-dnsserver.h
-   M /trunk/packet-dcerpc-drsuapi.c
-   M /trunk/packet-dcerpc-drsuapi.h
-   M /trunk/packet-dcerpc-dtsprovider.c
-   M /trunk/packet-dcerpc-dtsstime_req.c
-   M /trunk/packet-dcerpc-efs.c
-   M /trunk/packet-dcerpc-efs.h
-   M /trunk/packet-dcerpc-epm.c
-   M /trunk/packet-dcerpc-epm4.c
-   M /trunk/packet-dcerpc-eventlog.c
-   M /trunk/packet-dcerpc-eventlog.h
-   M /trunk/packet-dcerpc-fldb.c
-   M /trunk/packet-dcerpc-frsapi.c
-   M /trunk/packet-dcerpc-frsapi.h
-   M /trunk/packet-dcerpc-frsrpc.c
-   M /trunk/packet-dcerpc-frsrpc.h
-   M /trunk/packet-dcerpc-ftserver.c
-   M /trunk/packet-dcerpc-icl_rpc.c
-   M /trunk/packet-dcerpc-initshutdown.c
-   M /trunk/packet-dcerpc-initshutdown.h
-   M /trunk/packet-dcerpc-krb5rpc.c
-   M /trunk/packet-dcerpc-llb.c
-   M /trunk/packet-dcerpc-lsa-ds.c
-   M /trunk/packet-dcerpc-lsa.c
-   M /trunk/packet-dcerpc-lsa.h
-   M /trunk/packet-dcerpc-mapi.c
-   M /trunk/packet-dcerpc-mapi.h
-   M /trunk/packet-dcerpc-messenger.c
-   M /trunk/packet-dcerpc-mgmt.c
-   M /trunk/packet-dcerpc-ndr.c
-   M /trunk/packet-dcerpc-netlogon.c
-   M /trunk/packet-dcerpc-netlogon.h
-   M /trunk/packet-dcerpc-nspi.c
-   M /trunk/packet-dcerpc-nt.c
-   M /trunk/packet-dcerpc-nt.h
-   M /trunk/packet-dcerpc-oxid.c
-   M /trunk/packet-dcerpc-rdaclif.c
-   M /trunk/packet-dcerpc-reg.c
-   M /trunk/packet-dcerpc-reg.h
-   M /trunk/packet-dcerpc-remact.c
-   M /trunk/packet-dcerpc-rep_proc.c
-   M /trunk/packet-dcerpc-roverride.c
-   M /trunk/packet-dcerpc-rpriv.c
-   M /trunk/packet-dcerpc-rs_acct.c
-   M /trunk/packet-dcerpc-rs_attr.c
-   M /trunk/packet-dcerpc-rs_attr_schema.c
-   M /trunk/packet-dcerpc-rs_bind.c
-   M /trunk/packet-dcerpc-rs_misc.c
-   M /trunk/packet-dcerpc-rs_pgo.c
-   M /trunk/packet-dcerpc-rs_plcy.c
-   M /trunk/packet-dcerpc-rs_prop_acct.c
-   M /trunk/packet-dcerpc-rs_prop_acl.c
-   M /trunk/packet-dcerpc-rs_prop_attr.c
-   M /trunk/packet-dcerpc-rs_prop_pgo.c
-   M /trunk/packet-dcerpc-rs_prop_plcy.c
-   M /trunk/packet-dcerpc-rs_pwd_mgmt.c
-   M /trunk/packet-dcerpc-rs_repadm.c
-   M /trunk/packet-dcerpc-rs_replist.c
-   M /trunk/packet-dcerpc-rs_repmgr.c
-   M /trunk/packet-dcerpc-rs_unix.c
-   M /trunk/packet-dcerpc-rsec_login.c
-   M /trunk/packet-dcerpc-samr.c
-   M /trunk/packet-dcerpc-samr.h
-   M /trunk/packet-dcerpc-secidmap.c
-   M /trunk/packet-dcerpc-spoolss.c
-   M /trunk/packet-dcerpc-spoolss.h
-   M /trunk/packet-dcerpc-srvsvc.c
-   M /trunk/packet-dcerpc-srvsvc.h
-   M /trunk/packet-dcerpc-svcctl.c
-   M /trunk/packet-dcerpc-svcctl.h
-   M /trunk/packet-dcerpc-tapi.c
-   M /trunk/packet-dcerpc-tapi.h
-   M /trunk/packet-dcerpc-tkn4int.c
-   M /trunk/packet-dcerpc-trksvr.c
-   M /trunk/packet-dcerpc-ubikdisk.c
-   M /trunk/packet-dcerpc-ubikvote.c
-   M /trunk/packet-dcerpc-update.c
-   M /trunk/packet-dcerpc-wkssvc.c
-   M /trunk/packet-dcerpc-wkssvc.h
-   M /trunk/packet-dcerpc.c
-   M /trunk/packet-dcerpc.h
-   M /trunk/packet-dcm.c
-   M /trunk/packet-ddtp.c
-   M /trunk/packet-ddtp.h
-   M /trunk/packet-dec-bpdu.c
-   M /trunk/packet-dhcpv6.c
-   M /trunk/packet-diameter-defs.h
-   M /trunk/packet-diameter.c
-   M /trunk/packet-diffserv-mpls-common.c
-   M /trunk/packet-diffserv-mpls-common.h
-   M /trunk/packet-distcc.c
-   M /trunk/packet-dlsw.c
-   M /trunk/packet-dnp.c
-   M /trunk/packet-dns.c
-   M /trunk/packet-dns.h
-   M /trunk/packet-dsi.c
-   M /trunk/packet-dvmrp.c
-   M /trunk/packet-dvmrp.h
-   M /trunk/packet-e164.c
-   M /trunk/packet-e164.h
-   M /trunk/packet-eap.c
-   M /trunk/packet-eapol.c
-   M /trunk/packet-echo.c
-   M /trunk/packet-edonkey.c
-   M /trunk/packet-edonkey.h
-   M /trunk/packet-eigrp.c
-   M /trunk/packet-enc.c
-   M /trunk/packet-enip.c
-   M /trunk/packet-enrp.c
-   M /trunk/packet-esis.c
-   M /trunk/packet-esis.h
-   M /trunk/packet-eth.c
-   M /trunk/packet-eth.h
-   M /trunk/packet-etherip.c
-   M /trunk/packet-ethertype.c
-   M /trunk/packet-fc.c
-   M /trunk/packet-fc.h
-   M /trunk/packet-fcbls.h
-   M /trunk/packet-fcct.c
-   M /trunk/packet-fcct.h
-   M /trunk/packet-fcdns.c
-   M /trunk/packet-fcdns.h
-   M /trunk/packet-fcels.c
-   M /trunk/packet-fcels.h
-   M /trunk/packet-fcfcs.c
-   M /trunk/packet-fcfcs.h
-   M /trunk/packet-fcfzs.c
-   M /trunk/packet-fcfzs.h
-   M /trunk/packet-fcip.c
-   M /trunk/packet-fclctl.c
-   M /trunk/packet-fclctl.h
-   M /trunk/packet-fcp.c
-   M /trunk/packet-fcp.h
-   M /trunk/packet-fcsb3.c
-   M /trunk/packet-fcsb3.h
-   M /trunk/packet-fcsp.c
-   M /trunk/packet-fcsp.h
-   M /trunk/packet-fcswils.c
-   M /trunk/packet-fcswils.h
-   M /trunk/packet-fddi.c
-   M /trunk/packet-fddi.h
-   M /trunk/packet-fix.c
-   M /trunk/packet-fr.c
-   M /trunk/packet-frame.c
-   M /trunk/packet-frame.h
-   M /trunk/packet-ftam.c
-   M /trunk/packet-ftam.h
-   M /trunk/packet-ftp.c
-   M /trunk/packet-fw1.c
-   M /trunk/packet-gift.c
-   M /trunk/packet-giop.c
-   M /trunk/packet-giop.h
-   M /trunk/packet-gmrp.c
-   M /trunk/packet-gnutella.c
-   M /trunk/packet-gnutella.h
-   M /trunk/packet-gprs-llc.c
-   M /trunk/packet-gprs-ns.c
-   M /trunk/packet-gre.c
-   M /trunk/packet-gsm_a.c
-   M /trunk/packet-gsm_a.h
-   M /trunk/packet-gsm_map.c
-   M /trunk/packet-gsm_map.h
-   M /trunk/packet-gsm_sms.c
-   M /trunk/packet-gsm_sms.h
-   M /trunk/packet-gsm_sms_ud.c
-   M /trunk/packet-gsm_ss.c
-   M /trunk/packet-gsm_ss.h
-   M /trunk/packet-gssapi.c
-   M /trunk/packet-gssapi.h
-   M /trunk/packet-gtp.c
-   M /trunk/packet-gtp.h
-   M /trunk/packet-gvrp.c
-   M /trunk/packet-h1.c
-   M /trunk/packet-h225.c
-   M /trunk/packet-h225.h
-   M /trunk/packet-h235.c
-   M /trunk/packet-h235.h
-   M /trunk/packet-h245.c
-   M /trunk/packet-h245.h
-   M /trunk/packet-h261.c
-   M /trunk/packet-h263.c
-   M /trunk/packet-h450.c
-   M /trunk/packet-hclnfsd.c
-   M /trunk/packet-hclnfsd.h
-   M /trunk/packet-hpext.c
-   M /trunk/packet-hpext.h
-   M /trunk/packet-hsrp.c
-   M /trunk/packet-http.c
-   M /trunk/packet-http.h
-   M /trunk/packet-hyperscsi.c
-   M /trunk/packet-iapp.c
-   M /trunk/packet-iax2.c
-   M /trunk/packet-iax2.h
-   M /trunk/packet-ib.c
-   M /trunk/packet-icap.c
-   M /trunk/packet-icmpv6.c
-   M /trunk/packet-icp.c
-   M /trunk/packet-icq.c
-   M /trunk/packet-ieee80211.c
-   M /trunk/packet-ieee80211.h
-   M /trunk/packet-ieee8023.c
-   M /trunk/packet-ieee8023.h
-   M /trunk/packet-igap.c
-   M /trunk/packet-igap.h
-   M /trunk/packet-igmp.c
-   M /trunk/packet-igmp.h
-   M /trunk/packet-igrp.c
-   M /trunk/packet-image-gif.c
-   M /trunk/packet-image-jfif.c
-   M /trunk/packet-imap.c
-   M /trunk/packet-ip.c
-   M /trunk/packet-ip.h
-   M /trunk/packet-ipdc.c
-   M /trunk/packet-ipdc.h
-   M /trunk/packet-ipfc.c
-   M /trunk/packet-ipfc.h
-   M /trunk/packet-ipmi.c
-   M /trunk/packet-ipp.c
-   M /trunk/packet-ipsec-udp.c
-   M /trunk/packet-ipsec.c
-   M /trunk/packet-ipsec.h
-   M /trunk/packet-ipv6.c
-   M /trunk/packet-ipv6.h
-   M /trunk/packet-ipvs-syncd.c
-   M /trunk/packet-ipx.c
-   M /trunk/packet-ipx.h
-   M /trunk/packet-ipxwan.c
-   M /trunk/packet-irc.c
-   M /trunk/packet-isakmp.c
-   M /trunk/packet-iscsi.c
-   M /trunk/packet-isdn.c
-   M /trunk/packet-isis-clv.c
-   M /trunk/packet-isis-clv.h
-   M /trunk/packet-isis-hello.c
-   M /trunk/packet-isis-hello.h
-   M /trunk/packet-isis-lsp.c
-   M /trunk/packet-isis-lsp.h
-   M /trunk/packet-isis-snp.c
-   M /trunk/packet-isis-snp.h
-   M /trunk/packet-isis.c
-   M /trunk/packet-isis.h
-   M /trunk/packet-isl.c
-   M /trunk/packet-isl.h
-   M /trunk/packet-ismp.c
-   M /trunk/packet-isns.c
-   M /trunk/packet-isup.c
-   M /trunk/packet-isup.h
-   M /trunk/packet-iua.c
-   M /trunk/packet-jabber.c
-   M /trunk/packet-kadm5.c
-   M /trunk/packet-kerberos.c
-   M /trunk/packet-kerberos.h
-   M /trunk/packet-klm.c
-   M /trunk/packet-klm.h
-   M /trunk/packet-kpasswd.c
-   M /trunk/packet-l2tp.c
-   M /trunk/packet-lapb.c
-   M /trunk/packet-lapbether.c
-   M /trunk/packet-lapd.c
-   M /trunk/packet-laplink.c
-   M /trunk/packet-ldap.c
-   M /trunk/packet-ldap.h
-   M /trunk/packet-ldp.c
-   M /trunk/packet-ldp.h
-   M /trunk/packet-llc.c
-   M /trunk/packet-llc.h
-   M /trunk/packet-lmi.c
-   M /trunk/packet-lmp.c
-   M /trunk/packet-lpd.c
-   M /trunk/packet-lwapp.c
-   M /trunk/packet-m2pa.c
-   M /trunk/packet-m2tp.c
-   M /trunk/packet-m2ua.c
-   M /trunk/packet-m3ua.c
-   M /trunk/packet-mbtcp.c
-   M /trunk/packet-mdshdr.c
-   M /trunk/packet-media.c
-   M /trunk/packet-mip.c
-   M /trunk/packet-mip6.c
-   M /trunk/packet-mip6.h
-   M /trunk/packet-mmse.c
-   M /trunk/packet-mount.c
-   M /trunk/packet-mount.h
-   M /trunk/packet-mpeg1.c
-   M /trunk/packet-mpls-echo.c
-   M /trunk/packet-mpls.c
-   M /trunk/packet-mq-pcf.c
-   M /trunk/packet-mq.c
-   M /trunk/packet-mq.h
-   M /trunk/packet-mrdisc.c
-   M /trunk/packet-mrdisc.h
-   M /trunk/packet-msdp.c
-   M /trunk/packet-msn-messenger.c
-   M /trunk/packet-msnip.c
-   M /trunk/packet-msnip.h
-   M /trunk/packet-msproxy.c
-   M /trunk/packet-mtp2.c
-   M /trunk/packet-mtp3.c
-   M /trunk/packet-mtp3.h
-   M /trunk/packet-mtp3mg.c
-   M /trunk/packet-multipart.c
-   M /trunk/packet-mysql.c
-   M /trunk/packet-nbipx.c
-   M /trunk/packet-nbns.c
-   M /trunk/packet-ncp-int.h
-   M /trunk/packet-ncp-nmas.c
-   M /trunk/packet-ncp-nmas.h
-   M /trunk/packet-ncp.c
-   M /trunk/packet-ncp2222.inc
-   M /trunk/packet-ndmp.c
-   M /trunk/packet-ndps.c
-   M /trunk/packet-ndps.h
-   M /trunk/packet-netbios.c
-   M /trunk/packet-netbios.h
-   M /trunk/packet-netflow.c
-   M /trunk/packet-nfs.c
-   M /trunk/packet-nfs.h
-   M /trunk/packet-nfsacl.c
-   M /trunk/packet-nfsauth.c
-   M /trunk/packet-nisplus.c
-   M /trunk/packet-nisplus.h
-   M /trunk/packet-nlm.c
-   M /trunk/packet-nlm.h
-   M /trunk/packet-nlsp.c
-   M /trunk/packet-nntp.c
-   M /trunk/packet-nt-oui.c
-   M /trunk/packet-nt-sonmp.c
-   M /trunk/packet-nt-tpcp.c
-   M /trunk/packet-ntlmssp.c
-   M /trunk/packet-ntp.c
-   M /trunk/packet-ntp.h
-   M /trunk/packet-null.c
-   M /trunk/packet-null.h
-   M /trunk/packet-olsr.c
-   M /trunk/packet-osi-options.c
-   M /trunk/packet-osi-options.h
-   M /trunk/packet-osi.c
-   M /trunk/packet-osi.h
-   M /trunk/packet-ospf.c
-   M /trunk/packet-pcnfsd.c
-   M /trunk/packet-pcnfsd.h
-   M /trunk/packet-per.c
-   M /trunk/packet-per.h
-   M /trunk/packet-pflog.c
-   M /trunk/packet-pflog.h
-   M /trunk/packet-pgm.c
-   M /trunk/packet-pim.c
-   M /trunk/packet-pim.h
-   M /trunk/packet-pktc.c
-   M /trunk/packet-pktc.h
-   M /trunk/packet-pop.c
-   M /trunk/packet-portmap.c
-   M /trunk/packet-portmap.h
-   M /trunk/packet-postgresql.c
-   M /trunk/packet-ppp.c
-   M /trunk/packet-ppp.h
-   M /trunk/packet-pppoe.c
-   M /trunk/packet-pptp.c
-   M /trunk/packet-pres.c
-   M /trunk/packet-pres.h
-   M /trunk/packet-prism.c
-   M /trunk/packet-prism.h
-   M /trunk/packet-q2931.c
-   M /trunk/packet-q931.c
-   M /trunk/packet-q931.h
-   M /trunk/packet-q933.c
-   M /trunk/packet-qllc.c
-   M /trunk/packet-quake.c
-   M /trunk/packet-quake2.c
-   M /trunk/packet-quake3.c
-   M /trunk/packet-quakeworld.c
-   M /trunk/packet-radiotap.c
-   M /trunk/packet-radiotap.h
-   M /trunk/packet-radius.c
-   M /trunk/packet-ranap.c
-   M /trunk/packet-raw.c
-   M /trunk/packet-raw.h
-   M /trunk/packet-rip.c
-   M /trunk/packet-ripng.c
-   M /trunk/packet-ripng.h
-   M /trunk/packet-rlogin.c
-   M /trunk/packet-rmcp.c
-   M /trunk/packet-rmi.c
-   M /trunk/packet-rmi.h
-   M /trunk/packet-rmp.c
-   M /trunk/packet-rpc.c
-   M /trunk/packet-rpc.h
-   M /trunk/packet-rpl.c
-   M /trunk/packet-rquota.c
-   M /trunk/packet-rquota.h
-   M /trunk/packet-rsh.c
-   M /trunk/packet-rstat.c
-   M /trunk/packet-rsvp.c
-   M /trunk/packet-rsvp.h
-   M /trunk/packet-rsync.c
-   M /trunk/packet-rtcp.c
-   M /trunk/packet-rtcp.h
-   M /trunk/packet-rtp-events.c
-   M /trunk/packet-rtp-events.h
-   M /trunk/packet-rtp.c
-   M /trunk/packet-rtp.h
-   M /trunk/packet-rtps.c
-   M /trunk/packet-rtps.h
-   M /trunk/packet-rtsp.c
-   M /trunk/packet-rwall.c
-   M /trunk/packet-rwall.h
-   M /trunk/packet-rx.c
-   M /trunk/packet-rx.h
-   M /trunk/packet-sadmind.c
-   M /trunk/packet-sap.c
-   M /trunk/packet-sccp.c
-   M /trunk/packet-sccpmg.c
-   M /trunk/packet-scsi.c
-   M /trunk/packet-scsi.h
-   M /trunk/packet-sctp.c
-   M /trunk/packet-sctp.h
-   M /trunk/packet-sdlc.c
-   M /trunk/packet-sdp.c
-   M /trunk/packet-sebek.c
-   M /trunk/packet-ses.c
-   M /trunk/packet-ses.h
-   M /trunk/packet-sflow.c
-   M /trunk/packet-sigcomp.c
-   M /trunk/packet-sip.c
-   M /trunk/packet-sip.h
-   M /trunk/packet-sipfrag.c
-   M /trunk/packet-skinny.c
-   M /trunk/packet-slimp3.c
-   M /trunk/packet-sll.c
-   M /trunk/packet-sll.h
-   M /trunk/packet-slowprotocols.c
-   M /trunk/packet-slsk.c
-   M /trunk/packet-smb-browse.c
-   M /trunk/packet-smb-browse.h
-   M /trunk/packet-smb-common.c
-   M /trunk/packet-smb-common.h
-   M /trunk/packet-smb-logon.c
-   M /trunk/packet-smb-mailslot.c
-   M /trunk/packet-smb-mailslot.h
-   M /trunk/packet-smb-pipe.c
-   M /trunk/packet-smb-pipe.h
-   M /trunk/packet-smb-sidsnooping.c
-   M /trunk/packet-smb-sidsnooping.h
-   M /trunk/packet-smb.c
-   M /trunk/packet-smpp.c
-   M /trunk/packet-smtp.c
-   M /trunk/packet-sna.c
-   M /trunk/packet-sna.h
-   M /trunk/packet-snaeth.c
-   M /trunk/packet-sndcp.c
-   M /trunk/packet-snmp.c
-   M /trunk/packet-snmp.h
-   M /trunk/packet-socks.c
-   M /trunk/packet-spnego.c
-   M /trunk/packet-spray.c
-   M /trunk/packet-spray.h
-   M /trunk/packet-srvloc.c
-   M /trunk/packet-sscop.c
-   M /trunk/packet-ssh.c
-   M /trunk/packet-ssl.c
-   M /trunk/packet-stat-notify.c
-   M /trunk/packet-stat-notify.h
-   M /trunk/packet-stat.c
-   M /trunk/packet-stat.h
-   M /trunk/packet-stun.c
-   M /trunk/packet-sua.c
-   M /trunk/packet-symantec.c
-   M /trunk/packet-syslog.c
-   M /trunk/packet-t38.c
-   M /trunk/packet-tacacs.c
-   M /trunk/packet-tacacs.h
-   M /trunk/packet-tcap.c
-   M /trunk/packet-tcap.h
-   M /trunk/packet-tcp.c
-   M /trunk/packet-tcp.h
-   M /trunk/packet-tds.c
-   M /trunk/packet-teimanagement.c
-   M /trunk/packet-telnet.c
-   M /trunk/packet-teredo.c
-   M /trunk/packet-text-media.c
-   M /trunk/packet-tftp.c
-   M /trunk/packet-time.c
-   M /trunk/packet-tns.c
-   M /trunk/packet-tns.h
-   M /trunk/packet-tpkt.c
-   M /trunk/packet-tpkt.h
-   M /trunk/packet-tr.c
-   M /trunk/packet-tr.h
-   M /trunk/packet-trmac.c
-   M /trunk/packet-tsp.c
-   M /trunk/packet-tuxedo.c
-   M /trunk/packet-tzsp.c
-   M /trunk/packet-ucp.c
-   M /trunk/packet-udp.c
-   M /trunk/packet-udp.h
-   M /trunk/packet-v120.c
-   M /trunk/packet-vines.c
-   M /trunk/packet-vines.h
-   M /trunk/packet-vj.c
-   M /trunk/packet-vlan.c
-   M /trunk/packet-vlan.h
-   M /trunk/packet-vrrp.c
-   M /trunk/packet-vtp.c
-   M /trunk/packet-wap.c
-   M /trunk/packet-wap.h
-   M /trunk/packet-wbxml.c
-   M /trunk/packet-wccp.c
-   M /trunk/packet-wccp.h
-   M /trunk/packet-wcp.c
-   M /trunk/packet-wfleet-hdlc.c
-   M /trunk/packet-who.c
-   M /trunk/packet-wlancap.c
-   M /trunk/packet-wlancap.h
-   M /trunk/packet-wsp.c
-   M /trunk/packet-wsp.h
-   M /trunk/packet-wtls.c
-   M /trunk/packet-wtls.h
-   M /trunk/packet-wtp.c
-   M /trunk/packet-wtp.h
-   M /trunk/packet-x11-keysym.h
-   M /trunk/packet-x11-keysymdef.h
-   M /trunk/packet-x11.c
-   M /trunk/packet-x25.c
-   M /trunk/packet-x29.c
-   M /trunk/packet-xdmcp.c
-   M /trunk/packet-xot.c
-   M /trunk/packet-xyplex.c
-   M /trunk/packet-yhoo.c
-   M /trunk/packet-ymsg.c
-   M /trunk/packet-ypbind.c
-   M /trunk/packet-ypbind.h
-   M /trunk/packet-yppasswd.c
-   M /trunk/packet-yppasswd.h
-   M /trunk/packet-ypserv.c
-   M /trunk/packet-ypserv.h
-   M /trunk/packet-ypxfr.c
-   M /trunk/packet-ypxfr.h
-   M /trunk/packet-zebra.c
-   M /trunk/pcap-util-int.h
-   M /trunk/pcap-util-unix.c
-   M /trunk/pcap-util.c
-   M /trunk/pcap-util.h
-   M /trunk/ppptypes.h
-   M /trunk/prefs-int.h
-   M /trunk/prefs.c
-   M /trunk/prefs.h
-   M /trunk/print.c
-   M /trunk/print.h
-   M /trunk/process-x11-fields.pl
-   M /trunk/progress_dlg.h
-   M /trunk/proto_hier_stats.c
-   M /trunk/proto_hier_stats.h
-   M /trunk/ps.h
-   M /trunk/ptvcursor.c
-   M /trunk/ptvcursor.h
-   M /trunk/randpkt.c
-   M /trunk/range.c
-   M /trunk/range.h
-   M /trunk/rdps.c
-   M /trunk/reassemble.c
-   M /trunk/reassemble.h
-   M /trunk/register.h
-   M /trunk/req_resp_hdrs.c
-   M /trunk/req_resp_hdrs.h
-   M /trunk/ringbuffer.c
-   M /trunk/ringbuffer.h
-   M /trunk/rpc_defrag.h
-   M /trunk/rtp_pt.h
-   M /trunk/sctpppids.h
-   M /trunk/simple_dialog.h
-   M /trunk/smb.h
-   M /trunk/snprintf-imp.h
-   M /trunk/snprintf.c
-   M /trunk/snprintf.h
-   M /trunk/statusbar.h
-   M /trunk/strerror.c
-   M /trunk/strerror.h
-   M /trunk/strptime.h
-   M /trunk/summary.c
-   M /trunk/summary.h
-   M /trunk/t35.c
-   M /trunk/t35.h
-   M /trunk/tap-ansi_astat.c
-   M /trunk/tap-bootpstat.c
-   M /trunk/tap-dcerpcstat.c
-   M /trunk/tap-gsm_astat.c
-   M /trunk/tap-h225counter.c
-   M /trunk/tap-h225rassrt.c
-   M /trunk/tap-httpstat.c
-   M /trunk/tap-iostat.c
-   M /trunk/tap-iousers.c
-   M /trunk/tap-mgcpstat.c
-   M /trunk/tap-protocolinfo.c
-   M /trunk/tap-protohierstat.c
-   M /trunk/tap-rpcprogs.c
-   M /trunk/tap-rpcstat.c
-   M /trunk/tap-sipstat.c
-   M /trunk/tap-smbsids.c
-   M /trunk/tap-smbstat.c
-   M /trunk/tap-wspstat.c
-   M /trunk/tap.c
-   M /trunk/tap.h
-   M /trunk/tap_dfilter_dlg.h
-   M /trunk/tethereal.c
-   M /trunk/text2pcap-scanner.l
-   M /trunk/text2pcap.c
-   M /trunk/text2pcap.h
-   M /trunk/timestats.c
-   M /trunk/timestats.h
-   M /trunk/ui_util.h
-   M /trunk/util.c
-   M /trunk/util.h
-   M /trunk/version_info.c
-   M /trunk/version_info.h
-   M /trunk/wka.tmpl
-   M /trunk/x11-fields
-   M /trunk/x264_prt_id.h
-   M /trunk/xdlc.c
-   M /trunk/xdlc.h
-   M /trunk/xmlstub.c
+   A /trunk/ethereal.desktop (from /trunk/Ethereal.desktop:11804)
+
+It looks like Debian, Fedora and Suse all use ethereal.desktop instead of Ethereal.desktop
+------------------------------------------------------------------------
+r11807 | jmayer | 2004-08-22 04:16:01 -0500 (Sun, 22 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/Makefile
+   M /trunk/docbook/catalog.xml
+
+Use -N for commits on directories or back out all local changes afterwards
+------------------------------------------------------------------------
+r11806 | jmayer | 2004-08-22 04:10:12 -0500 (Sun, 22 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook
+   M /trunk/docbook/Makefile
+   M /trunk/docbook/catalog.xml
+
+Ignore developer-guide.pdf
+------------------------------------------------------------------------
+r11805 | jmayer | 2004-08-22 04:07:19 -0500 (Sun, 22 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/epan/dissectors/packet-daap.c
+
+Propset eol-style and keywords
+------------------------------------------------------------------------
+r11804 | ulfl | 2004-08-22 02:04:01 -0500 (Sun, 22 Aug 2004) | 6 lines
+Changed paths:
+   D /trunk/docbook/GFDPL_appendix.xml
+   A /trunk/docbook/GPL_appendix.xml (from /trunk/docbook/GFDPL_appendix.xml:11793)
+   M /trunk/docbook/developer-guide.xml
+   M /trunk/docbook/dg-src/EDG_meta_info.xml
+   D /trunk/docbook/ethereal-doc.txt
+   M /trunk/docbook/user-guide.xml
+
+as it's frequently questioned, if the GFDL is really a free license (e.g. by the Debian project)
+
+after asking the former authors of the User's Guide (Richard Sharpe and Ed Warnicke) for permission
+
+I've changed the license for both the User's and Developer's Guide from GFDL to GPL
+
+------------------------------------------------------------------------
+r11803 | guy | 2004-08-21 22:16:05 -0500 (Sat, 21 Aug 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-rsvp.c
 
-Run
+We don't need a variable to hold the sequence number any more - just
+directly pass the result of "tvb_get_ntoh64()" to "proto_tree_add_text()".
+
+------------------------------------------------------------------------
+r11802 | guy | 2004-08-21 22:11:43 -0500 (Sat, 21 Aug 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-daap.c
 
-    grep -l '\$Id:.*\$' * | xargs svn propset svn:keywords Id
+Use "tvb_get_ntoh64()", now that we have it.
 
-in the top-level source directory.  This should replace any RCS "$Id:$"
-strings with Subersion Ids.
+------------------------------------------------------------------------
+r11801 | guy | 2004-08-21 22:04:54 -0500 (Sat, 21 Aug 2004) | 2 lines
+Changed paths:
+   M /trunk/AUTHORS
+   M /trunk/epan/dissectors/Makefile.common
+   A /trunk/epan/dissectors/packet-daap.c
+   M /trunk/epan/dissectors/packet-http.c
 
+From Kelly Byrd: DAAP support.
 
 ------------------------------------------------------------------------
-r11396 | ulfl | 2004-07-17 08:50:07 -0500 (Sat, 17 Jul 2004) | 3 lines
+r11800 | guy | 2004-08-21 21:42:27 -0500 (Sat, 21 Aug 2004) | 6 lines
 Changed paths:
-   M /trunk/gtk/Makefile.common
-   M /trunk/gtk/capture_dlg.c
-   M /trunk/gtk/capture_dlg.h
-   A /trunk/gtk/capture_if_dlg.c
-   M /trunk/gtk/menu.c
-   M /trunk/gtk/toolbar.c
+   M /trunk/plugins/gryphon/packet-gryphon.c
+
+Ethereal has required guint64 support for a while, so there's no need to
+check for it in the Gryphon plugin.
 
-add a new dialog box to menu "Capture/Interfaces..." to show the current state of the interfaces and a quick way to start a capture.
+Use "tvb_get_ntoh64()" to fetch the time stamp, and format it similarly
+to the way absolute date/time time stamps are formatted.
 
-added the IP address of the currently selected interface to the capture options dialog
 ------------------------------------------------------------------------
-r11395 | ulfl | 2004-07-17 08:43:31 -0500 (Sat, 17 Jul 2004) | 1 line
+r11799 | guy | 2004-08-21 20:43:16 -0500 (Sat, 21 Aug 2004) | 5 lines
 Changed paths:
-   M /trunk/pcap-util.c
-   M /trunk/pcap-util.h
+   M /trunk/config.h.win32
+
+We're using "strtoull()", not "strtol()" - define "strtoull", not
+"strtol", as "_strtoui64".
+
+Make the comment match what the UN*X configure script puts in.
 
-if using the get_interface_list function, try to get the IP addresses too
 ------------------------------------------------------------------------
-r11394 | ulfl | 2004-07-17 07:49:34 -0500 (Sat, 17 Jul 2004) | 1 line
+r11798 | guy | 2004-08-21 20:41:47 -0500 (Sat, 21 Aug 2004) | 4 lines
 Changed paths:
-   M /trunk/Makefile.nmake
+   M /trunk/configure.in
+
+FreeBSD 3.4 doesn't have "strtoull()", but it does have "strtouq()",
+which does the same thing - check for "strtoull()" and, if it's missing,
+check for "strtouq()" and, if we have it, define strtoull as strtouq.
 
-Changed dependencies, so image dir will be generated before epan, otherwise the libethereal.res file will not be available when needed to link libethereal.dll
 ------------------------------------------------------------------------
-r11393 | guy | 2004-07-17 05:56:34 -0500 (Sat, 17 Jul 2004) | 3 lines
+r11797 | guy | 2004-08-21 20:40:21 -0500 (Sat, 21 Aug 2004) | 3 lines
 Changed paths:
-   M /trunk/AUTHORS
-   M /trunk/packet-ssl.c
+   M /trunk/epan/ftypes/ftype-integer.c
 
-From Marco van den Bovenkamp: add some Sun elliptic curve cryptography
-and Camellia-based cipher suites.
+GLib 1.2[.x] doesn't define G_MAXUINT64, just as it doesn't define
+G_MAXUINT32, so we have to define it if it's not defined.
 
 ------------------------------------------------------------------------
-r11392 | guy | 2004-07-17 05:48:02 -0500 (Sat, 17 Jul 2004) | 6 lines
+r11796 | guy | 2004-08-21 19:31:58 -0500 (Sat, 21 Aug 2004) | 9 lines
 Changed paths:
-   M /trunk/packet-kerberos.c
+   M /trunk/config.h.win32
+   M /trunk/doc/README.developer
+   M /trunk/doc/README.tvbuff
+   M /trunk/epan/Makefile.common
+   M /trunk/epan/dissectors/packet-aodv.c
+   M /trunk/epan/dissectors/packet-ber.c
+   M /trunk/epan/dissectors/packet-bootp.c
+   M /trunk/epan/dissectors/packet-dhcpv6.c
+   M /trunk/epan/dissectors/packet-nfs.c
+   M /trunk/epan/dissectors/packet-rsvp.c
+   M /trunk/epan/dissectors/packet-scsi.c
+   M /trunk/epan/dissectors/packet-smb.c
+   M /trunk/epan/ftypes/ftype-bytes.c
+   M /trunk/epan/ftypes/ftype-double.c
+   M /trunk/epan/ftypes/ftype-integer.c
+   M /trunk/epan/ftypes/ftype-ipv4.c
+   M /trunk/epan/ftypes/ftype-none.c
+   M /trunk/epan/ftypes/ftype-pcre.c
+   M /trunk/epan/ftypes/ftype-string.c
+   M /trunk/epan/ftypes/ftype-time.c
+   M /trunk/epan/ftypes/ftype-tvbuff.c
+   M /trunk/epan/ftypes/ftypes.c
+   M /trunk/epan/ftypes/ftypes.h
+   D /trunk/epan/int-64bit.c
+   D /trunk/epan/int-64bit.h
+   M /trunk/epan/pint.h
+   M /trunk/epan/proto.c
+   M /trunk/epan/proto.h
+   M /trunk/epan/tvbuff.c
+   M /trunk/epan/tvbuff.h
 
-From Jean-Baptiste Marchand: add Microsoft-specific name-types, and make
-the name-type field signed.
+Add "tvb_get_ntoh64()" and "tvb_get_letoh64()" routines to fetch 64-bit
+integers.
 
-Make the variable into which "dissect_krb5_name_type()" puts the name
-type local to that routine - it's not used outside that routine.
+Make FT_INT64 and FT_UINT64 add numerical values, rather than byte-array
+values, to the protocol tree, and add routines to add specified 64-bit
+integer values to the protocol tree.
+
+Use those routines in the RSVP dissector.
 
 ------------------------------------------------------------------------
-r11391 | guy | 2004-07-17 05:22:59 -0500 (Sat, 17 Jul 2004) | 4 lines
+r11795 | ulfl | 2004-08-21 18:08:27 -0500 (Sat, 21 Aug 2004) | 1 line
 Changed paths:
-   M /trunk/packet-pres.c
+   M /trunk/docbook/developer-guide.xml
+   M /trunk/docbook/dg-src/EDG_chapter_libraries.xml
 
-From Yuriy Sidelnikov: if asn1_length_decode() returns 0 but
-tvb_reported_length_remaining() returns more then two bytes we still
-have to dissect rest of the pdu.
+make the files conform to the docbook DTD
+------------------------------------------------------------------------
+r11794 | ulfl | 2004-08-21 17:46:25 -0500 (Sat, 21 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_libraries.xml
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
 
+added some more content
 ------------------------------------------------------------------------
-r11390 | guy | 2004-07-17 05:14:03 -0500 (Sat, 17 Jul 2004) | 4 lines
+r11793 | ulfl | 2004-08-21 15:35:50 -0500 (Sat, 21 Aug 2004) | 1 line
 Changed paths:
-   M /trunk/gtk/rtp_analysis.c
+   M /trunk/docbook/developer-guide.xml
 
-From Lars Ruoff: don't hardwire the RTP sampling clock rate to 8000
-samples/second, determine it from the payload type for payload types
-with a known clock rate.
+added book partintro's
+------------------------------------------------------------------------
+r11792 | ulfl | 2004-08-21 15:34:22 -0500 (Sat, 21 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_sources.xml
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
 
+minor changes in chapter sources, a lot more changes and additions in chapter tools
 ------------------------------------------------------------------------
-r11389 | guy | 2004-07-17 05:09:12 -0500 (Sat, 17 Jul 2004) | 3 lines
+r11791 | ulfl | 2004-08-21 15:29:47 -0500 (Sat, 21 Aug 2004) | 1 line
 Changed paths:
-   M /trunk/gtk/color_dlg.c
+   M /trunk/docbook/dg-src/EDG_chapter_introduction.xml
+   M /trunk/docbook/dg-src/EDG_preface.xml
 
-From Martin Mathieson: if you create a new filter and cancel the "Edit
-Color Filter" dialog, remove the new filter from the list.
+minor changes
+------------------------------------------------------------------------
+r11790 | jmayer | 2004-08-21 14:47:50 -0500 (Sat, 21 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/epan/dissectors/packet-bootp.c
 
+Missed the second case in last change
 ------------------------------------------------------------------------
-r11388 | guy | 2004-07-17 04:49:32 -0500 (Sat, 17 Jul 2004) | 2 lines
+r11789 | jmayer | 2004-08-21 14:41:24 -0500 (Sat, 21 Aug 2004) | 1 line
 Changed paths:
-   M /trunk/Makefile.am
-   M /trunk/Makefile.nmake
-   M /trunk/epan/Makefile.nmake
-   M /trunk/image/Makefile.nmake
-   A /trunk/image/libethereal.rc.in
+   M /trunk/epan/dissectors/packet-bootp.c
 
-From Graham Bloice: add resource information to libethereal.dll.
+The chaddr element is always 16 bytes in size, although only hlen bytes are used
+------------------------------------------------------------------------
+r11788 | jmayer | 2004-08-21 14:02:14 -0500 (Sat, 21 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_libraries.xml
+   M /trunk/docbook/dg-src/EDG_chapter_sources.xml
+   M /trunk/docbook/dg-src/EDG_chapter_tools.xml
+   M /trunk/docbook/dg-src/EDG_chapter_userinterface.xml
 
+Propset Id and native
 ------------------------------------------------------------------------
-r11387 | guy | 2004-07-17 04:40:52 -0500 (Sat, 17 Jul 2004) | 4 lines
+r11787 | jmayer | 2004-08-21 13:56:39 -0500 (Sat, 21 Aug 2004) | 1 line
 Changed paths:
-   M /trunk
-   M /trunk/doc
-   M /trunk/epan
-   M /trunk/epan/dfilter
-   M /trunk/epan/ftypes
-   M /trunk/gtk
-   M /trunk/help
-   M /trunk/packaging
-   M /trunk/packaging/nsis
-   M /trunk/packaging/rpm
-   M /trunk/packaging/rpm/SPECS
-   M /trunk/packaging/svr4
-   M /trunk/plugins
-   M /trunk/plugins/acn
-   M /trunk/plugins/artnet
-   M /trunk/plugins/asn1
-   M /trunk/plugins/ciscosm
-   M /trunk/plugins/docsis
-   M /trunk/plugins/enttec
-   M /trunk/plugins/giop
-   M /trunk/plugins/gryphon
-   M /trunk/plugins/irda
-   M /trunk/plugins/lwres
-   M /trunk/plugins/megaco
-   M /trunk/plugins/mgcp
-   M /trunk/plugins/pcli
-   M /trunk/plugins/rdm
-   M /trunk/plugins/rlm
-   M /trunk/plugins/rtnet
-   M /trunk/plugins/rudp
-   M /trunk/plugins/v5ua
-   M /trunk/tools
-   M /trunk/tools/lemon
-   M /trunk/wiretap
-
-Set svn:ignore on directories to match what's in the .cvsignore files
-(but don't bother with .lo or .la names, as *.lo and *.la are ignored by
-default).
-
-------------------------------------------------------------------------
-r11386 | guy | 2004-07-17 04:02:03 -0500 (Sat, 17 Jul 2004) | 2 lines
-Changed paths:
-   M /trunk/packet-skinny.c
-
-From Ainsley Pereira: set up conversations for RTSP when appropriate.
-
-------------------------------------------------------------------------
-r11385 | guy | 2004-07-17 03:49:22 -0500 (Sat, 17 Jul 2004) | 2 lines
+   M /trunk/Ethereal.desktop
+
+Update with Entries from Fedora and Suse 9.1
+------------------------------------------------------------------------
+r11786 | ulfl | 2004-08-21 11:30:04 -0500 (Sat, 21 Aug 2004) | 3 lines
 Changed paths:
-   M /trunk/packet-rtps.c
+   M /trunk/docbook/Makefile
+   M /trunk/docbook/developer-guide.xml
+   M /trunk/docbook/dg-src/EDG_chapter_introduction.xml
+   A /trunk/docbook/dg-src/EDG_chapter_libraries.xml
+   A /trunk/docbook/dg-src/EDG_chapter_sources.xml
+   A /trunk/docbook/dg-src/EDG_chapter_tools.xml
+   A /trunk/docbook/dg-src/EDG_chapter_userinterface.xml
 
-From Lukas Pokorny: fix some bugs.
+added a lot of content about the build environment, as the required tools, libraries and such (much win32 related stuff).
 
+doc is still at a *very* early stage and still very incomplete, but constantly growing now :-)
 ------------------------------------------------------------------------
-r11384 | guy | 2004-07-17 03:45:10 -0500 (Sat, 17 Jul 2004) | 3 lines
+r11785 | ulfl | 2004-08-21 06:11:13 -0500 (Sat, 21 Aug 2004) | 1 line
 Changed paths:
-   M /trunk/epan/dfilter/scanner.l
-   M /trunk/epan/ftypes/ftype-integer.c
-
-G_MAXINT32, G_MININT32, and G_MAXUINT32 aren't defined by GLib 1.2[.x],
-so we have to define them ourselves if they're not defined.
+   M /trunk/epan/dissectors/packet-tcp.c
 
+Replaced the column string [Reassembled TCP] by [TCP segment of a reassembled PDU], to be better understandable. But I'm still not satisfied with this...
 ------------------------------------------------------------------------
-r11383 | jmayer | 2004-07-16 18:42:38 -0500 (Fri, 16 Jul 2004) | 5 lines
+r11784 | ulfl | 2004-08-21 04:02:52 -0500 (Sat, 21 Aug 2004) | 8 lines
 Changed paths:
-   M /trunk/doc/Makefile.am
-   M /trunk/doc/README.idl2eth
-   M /trunk/idl2eth.sh
+   M /trunk/epan/dissectors/packet-aim.c
+   M /trunk/epan/dissectors/packet-atalk.c
+   M /trunk/epan/dissectors/packet-bgp.c
+   M /trunk/epan/dissectors/packet-cast.c
+   M /trunk/epan/dissectors/packet-clnp.c
+   M /trunk/epan/dissectors/packet-cops.c
+   M /trunk/epan/dissectors/packet-dcerpc.c
+   M /trunk/epan/dissectors/packet-diameter.c
+   M /trunk/epan/dissectors/packet-distcc.c
+   M /trunk/epan/dissectors/packet-dns.c
+   M /trunk/epan/dissectors/packet-dsi.c
+   M /trunk/epan/dissectors/packet-enip.c
+   M /trunk/epan/dissectors/packet-fcip.c
+   M /trunk/epan/dissectors/packet-h225.c
+   M /trunk/epan/dissectors/packet-h245.c
+   M /trunk/epan/dissectors/packet-http.c
+   M /trunk/epan/dissectors/packet-ipdc.c
+   M /trunk/epan/dissectors/packet-iscsi.c
+   M /trunk/epan/dissectors/packet-isns.c
+   M /trunk/epan/dissectors/packet-kerberos.c
+   M /trunk/epan/dissectors/packet-laplink.c
+   M /trunk/epan/dissectors/packet-ldap.c
+   M /trunk/epan/dissectors/packet-ldp.c
+   M /trunk/epan/dissectors/packet-mq.c
+   M /trunk/epan/dissectors/packet-mysql.c
+   M /trunk/epan/dissectors/packet-nbns.c
+   M /trunk/epan/dissectors/packet-ncp.c
+   M /trunk/epan/dissectors/packet-ndmp.c
+   M /trunk/epan/dissectors/packet-ndps.c
+   M /trunk/epan/dissectors/packet-netbios.c
+   M /trunk/epan/dissectors/packet-q931.c
+   M /trunk/epan/dissectors/packet-rpc.c
+   M /trunk/epan/dissectors/packet-rsync.c
+   M /trunk/epan/dissectors/packet-rtsp.c
+   M /trunk/epan/dissectors/packet-ses.c
+   M /trunk/epan/dissectors/packet-skinny.c
+   M /trunk/epan/dissectors/packet-slsk.c
+   M /trunk/epan/dissectors/packet-smpp.c
+   M /trunk/epan/dissectors/packet-smtp.c
+   M /trunk/epan/dissectors/packet-snmp.c
+   M /trunk/epan/dissectors/packet-srvloc.c
+   M /trunk/epan/dissectors/packet-ssh.c
+   M /trunk/epan/dissectors/packet-ssl.c
+   M /trunk/epan/dissectors/packet-t38.c
+   M /trunk/epan/dissectors/packet-tcp.c
+   M /trunk/epan/dissectors/packet-tds.c
+   M /trunk/epan/dissectors/packet-tns.c
+   M /trunk/epan/dissectors/packet-tpkt.c
+   M /trunk/epan/dissectors/packet-x11.c
+   M /trunk/epan/dissectors/packet-xot.c
+   M /trunk/epan/dissectors/packet-ymsg.c
+
+Prevent the word "desegmentation" at the GUI, but use reassembling at that places, as we also use "defragmentation" and "reassembling". Use reassembling as the general term for such actions.
+
+I (hopefully) didn't changed any protocol fields or preference file names, but only the GUI labels appearing in the protocol display and the protocol preferences.
 
-From Debian. Likely author: Frederic Peters <fpeters@debian.org>
- * Updated omniorb URL (closes: #257512)
- run pod2man with --section=4 for ethereal-filter
+Also added a note to the protocol preferences (where appropriate), that you have to enable "Allow subdissectors to reassemble TCP streams" at the corresponding protocol settings for TCP reassembling to take effect.
 
+If you encounter any mistakes I've made here, please let me know...
 
 ------------------------------------------------------------------------
-r11382 | guy | 2004-07-16 18:35:46 -0500 (Fri, 16 Jul 2004) | 15 lines
+r11783 | guy | 2004-08-20 20:19:36 -0500 (Fri, 20 Aug 2004) | 7 lines
 Changed paths:
-   M /trunk/epan/dfilter/scanner.l
-   M /trunk/epan/ftypes/ftype-integer.c
+   M /trunk/capinfo.c
 
-I'm not sure "strtol()" and "strtoul()" are guaranteed to clear "errno"
-on success, so we clear it before calling them.
+"localtime()" returns a value that might not survive a subsequent call
+to "localtime()" (it might, for example, be static - and *is* static in
+a lot of implementations).  Don't call it twice and expect both values
+to be useful.
 
-Assign the value of "strtol()" to a "long" and assign the value of
-"strtoul()" to an "unsigned long", as those are the return types for
-those functions - "gint32" and "guint32" might not be large enough for
-the return value on an LP64 platform.
+Clean up white space.
 
-Check for errno being EINVAL, as that can happen if the number isn't
-valid.
+------------------------------------------------------------------------
+r11782 | guy | 2004-08-20 12:48:45 -0500 (Fri, 20 Aug 2004) | 2 lines
+Changed paths:
+   M /trunk/INSTALL
 
-Before assigning the value returned by "strtol()" or "strtoul()" to the
-final destination, check whether it's in the right range for that
-destination.
+Update to reflect GTK+/GLib 2.x now being the default.
 
 ------------------------------------------------------------------------
-r11381 | guy | 2004-07-16 18:26:27 -0500 (Fri, 16 Jul 2004) | 2 lines
+r11781 | guy | 2004-08-20 03:15:11 -0500 (Fri, 20 Aug 2004) | 3 lines
 Changed paths:
-   D /trunk/wiretap/Makefile
+   M /trunk/epan/dissectors/packet-clnp.c
 
-This shouldn't be checked in, as it's generated from Makefile.am.
+From Matthew Bradley: add filterable fields for the COTP TPDU numbers
+and for the last-packet/earlier-fragment flag.
 
 ------------------------------------------------------------------------
-r11380 | jmayer | 2004-07-16 16:24:26 -0500 (Fri, 16 Jul 2004) | 9 lines
+r11780 | etxrab | 2004-08-19 15:28:34 -0500 (Thu, 19 Aug 2004) | 2 lines
 Changed paths:
-   M /trunk/packet-gtp.c
+   M /trunk/epan/dissectors/packet-isup.c
 
-Indces run from 0-2 if an array is declared as array[3].
-This patch has been part of RedHat since 0.9.16, unfortunately
-the patch never made it into the mainline source.
+From Luis Ontanon:  add some fields for filtering r packet-isup which adds A,B and C numbers to the 
+ fields (that is called,calling and redirecting number). Changed the patch to not use hidden fields and some code clean up.
+------------------------------------------------------------------------
+r11779 | guy | 2004-08-19 14:44:57 -0500 (Thu, 19 Aug 2004) | 5 lines
+Changed paths:
+   M /trunk/doc/README.developer
 
-The patch seems to be authored by Phil Knirsch  (from ethereal.spec:
-* Tue Nov 25 2003 Phil Knirsch <pknirsch@redhat.com> 0.9.16-3
-- Fixed out of bound array access (#110749).
+Note that "G_GINT64_CONSTANT()" should be used for constant values that
+don't fit in 32 bits, rather than using "LL" at the end.
 
+Clean up some other 64-bit-integer items.
 
 ------------------------------------------------------------------------
-r11379 | gerald | 2004-07-15 16:09:33 -0500 (Thu, 15 Jul 2004) | 6 lines
+r11775 | gerald | 2004-08-19 09:35:55 -0500 (Thu, 19 Aug 2004) | 6 lines
 Changed paths:
-   M /trunk/Makefile.am
-   M /trunk/Makefile.common
-   M /trunk/Makefile.nmake
-   M /trunk/gtk/about_dlg.c
-   M /trunk/gtk/main.c
-   M /trunk/make-version.pl
-   M /trunk/mergecap.c
-   M /trunk/tethereal.c
+   M /trunk/file.c
+   M /trunk/gtk/file_dlg.c
+   M /trunk/gtk/packet_list.c
+   M /trunk/gtk/range_utils.c
 
-Convert make-version.pl and the associated cvsversion.h and CVSVERSION
-definition to Subversion.  "svn info" prints out the last changed date
-of the repository, so we don't have to go hunting through "CVS/Entries"
-files anymore.
+As suggested by Guy: Have mark_frame() do nothing if the frame has
+already been marked and have unmark_frame() do likewise.  Don't mess
+with the marked frame count in mark_all_frames().
 
+Be a little more paranoid about the marked frame count in other places.
 
 ------------------------------------------------------------------------
-r11378 | gerald | 2004-07-15 14:29:49 -0500 (Thu, 15 Jul 2004) | 2 lines
+r11774 | guy | 2004-08-19 04:00:20 -0500 (Thu, 19 Aug 2004) | 3 lines
 Changed paths:
-   M /trunk/README
+   M /trunk/epan/dissectors/packet-windows-common.c
 
-Try again (hook script didn't do its thing).
+MSVC++ doesn't understand that "64_bit_integer % 10000000" fits in an
+"int", so we throw in a cast to squelch a warning.
 
 ------------------------------------------------------------------------
-r11377 | gerald | 2004-07-15 14:26:05 -0500 (Thu, 15 Jul 2004) | 3 lines
+r11773 | guy | 2004-08-19 02:55:30 -0500 (Thu, 19 Aug 2004) | 3 lines
 Changed paths:
-   M /trunk/README
+   M /trunk/epan/dissectors/packet-windows-common.c
 
-Test commit for new repository.
+Use "G_GINT64_CONSTANT()" for 64-bit integral constants, rather than
+hardwiring "LL" as the suffix - it's not "LL" in MSVC++.
 
+------------------------------------------------------------------------
+r11772 | jmayer | 2004-08-18 18:24:05 -0500 (Wed, 18 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_chapter_introduction.xml
 
+Props: Keywords and line-style
 ------------------------------------------------------------------------
-r11376 | guy | 2004-07-14 03:04:39 -0500 (Wed, 14 Jul 2004) | 3 lines
+r11771 | gerald | 2004-08-18 16:05:38 -0500 (Wed, 18 Aug 2004) | 3 lines
 Changed paths:
-   M /trunk/gtk/gui_prefs.c
+   M /trunk/file.c
 
-As per Pavel Kankovsky, return FALSE, not TRUE, if "user_font_test()"
-fails, as that means we aren't setting the font to the new value.
+If you mark all frames, then unmark all frames "marked_count" overflows.
+Keep this from happening.
 
 ------------------------------------------------------------------------
-r11375 | gerald | 2004-07-13 14:30:02 -0500 (Tue, 13 Jul 2004) | 3 lines
+r11769 | tuexen | 2004-08-18 09:11:25 -0500 (Wed, 18 Aug 2004) | 2 lines
 Changed paths:
-   M /trunk/Makefile.nmake
+   M /trunk/gtk/decode_as_dlg.c
 
-Both epan/doxygen.cfg and gtk/doxygen.cfg depend on the root doxygen.cfg.
-Build it before going into those directories.
+Added initial SCTP support: You can chose how PPID 0 will be handled.
 
 ------------------------------------------------------------------------
-r11374 | gerald | 2004-07-13 13:19:59 -0500 (Tue, 13 Jul 2004) | 2 lines
+r11768 | ulfl | 2004-08-18 03:13:29 -0500 (Wed, 18 Aug 2004) | 1 line
 Changed paths:
-   M /trunk/config.nmake
+   M /trunk/docbook/dg-src/EDG_chapter_introduction.xml
+
+added some more info to the intro (has to be cleaned up)
+------------------------------------------------------------------------
+r11767 | guy | 2004-08-18 02:34:15 -0500 (Wed, 18 Aug 2004) | 4 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-rtcp.c
+   M /trunk/epan/dissectors/packet-rtp.c
 
-Use libethereal.dll by default.
+Don't assume that if we find a conversation that we've set a dissector
+for it, or that we've given it a conversation data item - the
+conversation might exist for other reasons. 
 
 ------------------------------------------------------------------------
-r11373 | ulfl | 2004-07-13 13:14:00 -0500 (Tue, 13 Jul 2004) | 2 lines
+r11766 | ulfl | 2004-08-18 02:04:23 -0500 (Wed, 18 Aug 2004) | 1 line
 Changed paths:
-   M /trunk/gtk/endpoint_talkers_table.c
-   M /trunk/gtk/hostlist_table.c
+   M /trunk/docbook/developer-guide.xml
+   A /trunk/docbook/dg-src/EDG_chapter_introduction.xml
+   M /trunk/docbook/dg-src/EDG_preface.xml
 
-Conversation/Endpoint list performance patch from Ian Schorr
+very first draft of introduction chapter (copied some things from the user's guide)
+------------------------------------------------------------------------
+r11765 | guy | 2004-08-18 01:56:36 -0500 (Wed, 18 Aug 2004) | 5 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-ntlmssp.c
+
+Samba's smbclient doesn't put the extra stuff after the list of names in
+the NTLMv2 blob, so don't bother dissecting it for now - perhaps we
+should see how much of the NTLMv2 response remains, and, if there is
+any, put it into the tree as extra data.
 
 ------------------------------------------------------------------------
-r11372 | guy | 2004-07-13 02:15:45 -0500 (Tue, 13 Jul 2004) | 4 lines
+r11764 | ulfl | 2004-08-18 01:56:04 -0500 (Wed, 18 Aug 2004) | 1 line
 Changed paths:
-   M /trunk/gtk/capture_dlg.c
-   M /trunk/gtk/compat_macros.h
-   M /trunk/gtk/dlg_utils.c
-   M /trunk/gtk/file_dlg.c
-   M /trunk/gtk/main.c
-   M /trunk/gtk/simple_dialog.c
-   M /trunk/gtk/toolbar.c
-   M /trunk/simple_dialog.h
+   M /trunk/docbook/ug-src/EUG_preface.xml
+   M /trunk/docbook/user-guide.xml
 
-From Daniel Thompson: add additional message/alert box options to
-display "Save", "Continue without Saving", and "Cancel", for the "do you
-want to save?" messages.
+self referring entry (link to ethereal page) fixed
+------------------------------------------------------------------------
+r11762 | jmayer | 2004-08-17 17:38:01 -0500 (Tue, 17 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/dg-src/EDG_preface.xml
+
+props: Keywords and eol-style
+------------------------------------------------------------------------
+r11761 | ulfl | 2004-08-17 12:09:14 -0500 (Tue, 17 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/docbook/Makefile
+   M /trunk/docbook/developer-guide.xml
+   D /trunk/docbook/dg-src/EDG_chapter_five.xml
+   D /trunk/docbook/dg-src/EDG_chapter_four.xml
+   D /trunk/docbook/dg-src/EDG_chapter_one.xml
+   D /trunk/docbook/dg-src/EDG_chapter_three.xml
+   D /trunk/docbook/dg-src/EDG_chapter_two.xml
+   A /trunk/docbook/dg-src/EDG_preface.xml
 
+very first steps for a "new" developer's guide
 ------------------------------------------------------------------------
-r11371 | guy | 2004-07-13 00:58:15 -0500 (Tue, 13 Jul 2004) | 2 lines
+r11759 | obiot | 2004-08-17 03:47:30 -0500 (Tue, 17 Aug 2004) | 2 lines
 Changed paths:
-   M /trunk/mergecap.c
+   M /trunk/tools/win32-setup.sh
 
-If we fail to open the output file, report the reason why.
+Check for both HTTP_PROXY and http_proxy in MSVC++ setup.
 
 ------------------------------------------------------------------------
-r11370 | guy | 2004-07-13 00:43:59 -0500 (Tue, 13 Jul 2004) | 4 lines
+r11758 | guy | 2004-08-16 20:12:29 -0500 (Mon, 16 Aug 2004) | 4 lines
 Changed paths:
-   M /trunk/gtk/capture_prefs.c
+   M /trunk/README.irix
 
-From Pavel Kankovsky: the items pointed to by elements in the "text[]"
-array are all "g_free()"d, so they have to be "g_malloc()"ed - instead
-of setting some to "", set them to "g_strdup("")".
+Note that some of the IRIX problems might no longer exist - and get rid
+of the libpcap patch, as it's incorporated into current versions of
+libpcap.
 
 ------------------------------------------------------------------------
-r11369 | guy | 2004-07-13 00:29:23 -0500 (Tue, 13 Jul 2004) | 2 lines
+r11757 | guy | 2004-08-16 19:34:26 -0500 (Mon, 16 Aug 2004) | 4 lines
 Changed paths:
-   M /trunk/Makefile.common
-   M /trunk/epan/Makefile.common
-   A /trunk/packet-dcerpc-eventlog.c
-   A /trunk/packet-dcerpc-eventlog.h
+   M /trunk/README.macos
 
-From Jean-Baptiste Marchand: MS Eventlog support.
+We now try to detect OS X systems with a new libpcap but old headers,
+and not try to use the shiny new routines on those systems, so you
+shouldn't get the "`pcap_if_t' undeclared" error any more.
 
 ------------------------------------------------------------------------
-r11368 | ulfl | 2004-07-12 16:00:40 -0500 (Mon, 12 Jul 2004) | 3 lines
+r11756 | guy | 2004-08-16 19:21:13 -0500 (Mon, 16 Aug 2004) | 7 lines
 Changed paths:
-   M /trunk/mergecap.c
+   M /trunk/epan/dissectors/packet-dhcpv6.c
+
+Don't give up on the entire DHCPv6 packet if we find an error in
+encapsulated options, just give up on the option in which they're
+encapsulated.
 
-bugfix to a bug reported by jprakashbabu@hotpop.com:
-mergecap didn't created a new output file
+Note that for the Relay Message option, we should perhaps dissect the
+option data as a DHCP message, not just a sequence of options.
 
 ------------------------------------------------------------------------
-r11367 | ulfl | 2004-07-12 15:01:41 -0500 (Mon, 12 Jul 2004) | 4 lines
+r11754 | guy | 2004-08-16 17:30:04 -0500 (Mon, 16 Aug 2004) | 4 lines
 Changed paths:
-   M /trunk/gtk/dlg_utils.c
+   M /trunk/epan/dissectors/packet-windows-common.c
 
-bugfix to a bug reported by Ian Schorr:
-don't present main window when closing dialogs on GTK2.4,
-as this might be a statistic window
+Don't do the FILETIME->nstime_t conversion in floating point, as it
+produces some floating-point noise in the nanoseconds field; we've
+required 64-bit integer support for a while, so use that.
 
 ------------------------------------------------------------------------
-r11366 | ulfl | 2004-07-12 14:10:58 -0500 (Mon, 12 Jul 2004) | 4 lines
+r11753 | ulfl | 2004-08-16 12:18:04 -0500 (Mon, 16 Aug 2004) | 1 line
 Changed paths:
-   M /trunk/gtk/main.c
+   M /trunk/epan/dissectors/packet-smb.c
+   M /trunk/epan/dissectors/packet-windows-common.c
+
+cast define of TIME_T_MIN and TIME_T_MAX to (time_t), as MSVC seems to have problems with this definition and throws a warning "convert negative constant to unsigned integer"
+------------------------------------------------------------------------
+r11752 | guy | 2004-08-16 02:59:18 -0500 (Mon, 16 Aug 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-smb.c
 
-bugfix to a bug reported by Stuart MacDonald (bug #12):
-present main window before closing the program,
-when asking to save the capture file first
+From Ronnie Sahlberg: update the fs attributes to be more complete and
+correctly dissected.
 
 ------------------------------------------------------------------------
-r11365 | ulfl | 2004-07-12 13:39:03 -0500 (Mon, 12 Jul 2004) | 4 lines
+r11751 | guy | 2004-08-16 02:53:07 -0500 (Mon, 16 Aug 2004) | 3 lines
 Changed paths:
-   M /trunk/gtk/dlg_utils.c
+   M /trunk/asn1/x509sat/SelectedAttributeTypes.asn
+   M /trunk/asn1/x509sat/packet-x509sat-template.c
+   M /trunk/epan/dissectors/packet-x509sat.c
 
-bugfix to a bug reported by Ian Schorr:
-GTK2.4 open directory doesn't go into last opened dir
-(this will affect all open file dialogs)
+From Ronnie Sahlberg: add dissection of the Teletext string type to the
+DirectoryString choice in SelectedAttributeTypes.
 
 ------------------------------------------------------------------------
-r11364 | ulfl | 2004-07-12 12:20:06 -0500 (Mon, 12 Jul 2004) | 4 lines
+r11750 | guy | 2004-08-16 02:52:07 -0500 (Mon, 16 Aug 2004) | 4 lines
 Changed paths:
-   M /trunk/gtk/gui_prefs.c
+   M /trunk/epan/dissectors/packet-dhcpv6.c
 
-bugfix to a bug reported by Stuart MacDonald (bug #10):
-return FALSE for the recent files text entry, otherwise Ethereal will
-crash when selected this field and press Apply
+Whenever we call "dhcpv6_option()", check to make sure it didn't set
+"at_end" - if it does, the option is sufficiently bad that we can't
+continue dissecting the packet, so we give up.
 
 ------------------------------------------------------------------------
-r11363 | tuexen | 2004-07-11 13:01:06 -0500 (Sun, 11 Jul 2004) | 2 lines
+r11749 | guy | 2004-08-16 01:24:17 -0500 (Mon, 16 Aug 2004) | 3 lines
 Changed paths:
-   M /trunk/AUTHORS
+   M /trunk/gtk/gui_prefs.c
 
-Correct my name
+Get rid of unused enum_val_t table (the wrap vs. no-wrap in search flag
+is a Boolean, not an enum).
 
 ------------------------------------------------------------------------
-r11362 | ulfl | 2004-07-10 06:57:19 -0500 (Sat, 10 Jul 2004) | 3 lines
+r11748 | guy | 2004-08-16 00:54:01 -0500 (Mon, 16 Aug 2004) | 8 lines
 Changed paths:
-   M /trunk/gtk/endpoint_talkers_table.c
+   M /trunk/epan/dissectors/packet-rtcp.c
 
-changed column headers, replaced e.g. "-> Packets" by
-"Packets A->B" to clarify behaviour
+From Martin Mathieson:
+
+	- test for NULL conversation data to avoid a potential crash when
+	  looking up stream setup info (as RTP dissector does);
+
+	- adds a heuristic function (like RTP, this is a preference
+	  initially set to off).
 
 ------------------------------------------------------------------------
-r11361 | ulfl | 2004-07-10 06:53:51 -0500 (Sat, 10 Jul 2004) | 2 lines
+r11747 | guy | 2004-08-15 21:23:41 -0500 (Sun, 15 Aug 2004) | 2 lines
 Changed paths:
-   M /trunk/gtk/hostlist_table.c
+   M /trunk/acinclude.m4
 
-changed column headers, don't talk of frames but of packets
+Fix a typo.
 
 ------------------------------------------------------------------------
-r11360 | guy | 2004-07-10 02:16:55 -0500 (Sat, 10 Jul 2004) | 2 lines
+r11746 | guy | 2004-08-15 20:13:11 -0500 (Sun, 15 Aug 2004) | 5 lines
 Changed paths:
-   M /trunk/AUTHORS
-   M /trunk/Makefile.common
-   M /trunk/epan/Makefile.common
-   A /trunk/packet-dcerpc-frsapi.c
-   A /trunk/packet-dcerpc-frsapi.h
-   A /trunk/packet-dcerpc-frsrpc.c
-   A /trunk/packet-dcerpc-frsrpc.h
+   M /trunk/epan/dissectors/packet-dhcp-failover.c
 
-From Jean-Baptiste Marchand: frsrpc and frsapi support.
+According to draft-ietf-dhc-failover-10, the message digest type is 1
+byte - and a length of 1 is used to put the message digest into the
+protocol tree, which agrees with that.  Therefore, "tvb_get_guint8()"
+should be used to fetch it.
 
 ------------------------------------------------------------------------
-r11359 | guy | 2004-07-09 21:07:23 -0500 (Fri, 09 Jul 2004) | 4 lines
+r11745 | guy | 2004-08-15 20:11:23 -0500 (Sun, 15 Aug 2004) | 18 lines
 Changed paths:
-   M /trunk/doc/ethereal.pod
+   M /trunk/acinclude.m4
 
-SUM, like COUNT, MIN, MAX, and AVG, computes the value over the
-interval, not over the entire capture (a sum over the entire capture
-would yield only one value, which isn't very interesting to plot).
+For "pcap_findalldevs()", don't assume that just because it's in -lpcap
+it's usable - one of the updates to OS X 10.3 updated libpcap to
+0.8[.x], so that it had "pcap_findalldevs()", but didn't update
+"pcap.h", so it didn't declare "pcap_if_t", so you couldn't actually
+*use* it.  You can work around that by installing the pcap.h (and
+pcap-bpf.h) from the matching tcpdump.org release, but, as even when
+that version of OS X is pre-installed rather than being the result of a
+Software Update, you still don't get the new "pcap.h" (at least I didn't
+get it on my PowerBook with 10.3.4).  Therefore, we check whether a
+program that calls "pcap_findalldevs()" *and* declares a "pcap_if_t *"
+to pass to it can be compiled and linked with -lpcap, and only declare
+HAVE_PCAP_FINDALLDEVS if we can.
+
+Also, don't check for the functions added to libpcap after
+"pcap_findalldevs()" was added unless we have a usable
+"pcap_findalldevs()", as, if not, those functions won't be declared in
+"pcap.h" either, so we'll get compiler warnings.
 
 ------------------------------------------------------------------------
-r11358 | guy | 2004-07-09 20:01:41 -0500 (Fri, 09 Jul 2004) | 2 lines
+r11744 | gerald | 2004-08-15 14:26:25 -0500 (Sun, 15 Aug 2004) | 2 lines
 Changed paths:
-   M /trunk/doc/ethereal.pod
+   M /trunk/file.c
+   M /trunk/gtk/gui_prefs.c
+   M /trunk/prefs.c
+   M /trunk/prefs.h
 
-Clean up some formatting, and fix some typoes.
+From Greg Morris: Add a configuration option to control search wrapping.
 
 ------------------------------------------------------------------------
-r11357 | guy | 2004-07-09 18:37:40 -0500 (Fri, 09 Jul 2004) | 11 lines
+r11743 | gerald | 2004-08-15 13:32:24 -0500 (Sun, 15 Aug 2004) | 2 lines
 Changed paths:
-   M /trunk/packet-http.c
-   M /trunk/packet-icap.c
-   M /trunk/packet-rtsp.c
+   A /trunk/asn1/ns-cert-exts
+   A /trunk/asn1/ns-cert-exts/NETSCAPE-CERT-EXTS.asn
+   A /trunk/asn1/ns-cert-exts/ns_cert_exts.cnf
+   A /trunk/asn1/ns-cert-exts/packet-ns_cert_exts-template.c
+   A /trunk/asn1/ns-cert-exts/packet-ns_cert_exts-template.h
+   M /trunk/epan/dissectors/Makefile.common
+   A /trunk/epan/dissectors/packet-ns_cert_exts.c
 
-Use "iscntrl()", rather than "isprint()", to test whether a character is
-a CTL in HTTP, ICAP, and RTSP.
+From Ronnie Sahlberg:  Netscape certificate extensions.
 
-Check for non-ASCII characters in ICAP and RTSP, just as we do in HTTP.
+------------------------------------------------------------------------
+r11742 | jmayer | 2004-08-15 06:39:13 -0500 (Sun, 15 Aug 2004) | 3 lines
+Changed paths:
+   M /trunk/epan/dissectors/packet-dhcp-failover.c
 
-The headers in those protocols are just "headers", not "MIME headers",
-at least in the RFCs (common usage nonwithstanding; not all of those
-headers are for MIME stuff such as Content-Type).
+Make message_digest_type a guint16. Removed cast.
+Spotted by Ulf Lamping.
 
-Add some RFC numbers.
+------------------------------------------------------------------------
+r11741 | ulfl | 2004-08-15 06:25:35 -0500 (Sun, 15 Aug 2004) | 1 line
+Changed paths:
+   M /trunk/epan/dissectors/packet-dhcp-failover.c
 
+remove MSVC compiler warning (required a type cast)
 ------------------------------------------------------------------------
-r11356 | guy | 2004-07-09 18:17:05 -0500 (Fri, 09 Jul 2004) | 7 lines
+r11740 | guy | 2004-08-14 22:24:47 -0500 (Sat, 14 Aug 2004) | 2 lines
 Changed paths:
-   M /trunk/Makefile.common
-   A /trunk/isprint.h
-   M /trunk/packet-aim.c
-   M /trunk/packet-cops.c
-   M /trunk/packet-dcm.c
-   M /trunk/packet-giop.c
-   M /trunk/packet-radius.c
-   M /trunk/packet-snmp.c
-   M /trunk/packet-tds.c
-
-Move the redefinition of "isprint()" to be used by dissectors when
-generating strings to put into the printable representation of protocol
-tree items into an "isprint.h" header, and include it in some additional
-dissectors.
+   M /trunk/epan/dissectors/packet-ntlmssp.c
 
-Add bounds checking to one place in the DICOM dissector.
+Dissect the last unknown item at the end of the NTLMv2 blob.
 
 ------------------------------------------------------------------------
-r11355 | guy | 2004-07-09 18:02:38 -0500 (Fri, 09 Jul 2004) | 6 lines
+r11739 | jmayer | 2004-08-14 16:20:28 -0500 (Sat, 14 Aug 2004) | 1 line
 Changed paths:
-   M /trunk/gtk/Makefile.am
-   M /trunk/gtk/follow_dlg.c
-   M /trunk/gtk/gtkglobals.h
-   A /trunk/gtk/isprint.h
-   M /trunk/gtk/proto_draw.c
+   M /trunk/ChangeLog
+
+@ -> [AT]
+------------------------------------------------------------------------
+r11737 | obiot | 2004-08-13 14:45:35 -0500 (Fri, 13 Aug 2004) | 2 lines
+Changed paths:
+   M /trunk/AUTHORS
 
-In the GTK+ code, move the redefinition of "isprint()" to
-"gtk/isprint.h", and include that in "follow_dlg.c" (which wasn't
-including "gtkglobals.h" and thus wasn't getting the redefinition) and
-"proto_draw.c" (which was including "gtkglobals.h" but now needs to
-include "isprint.h" as well).
+Keep spammers away: do NOT put an @ sign in contributor's email addresses!
 
 ------------------------------------------------------------------------
-r11354 | guy | 2004-07-09 16:52:03 -0500 (Fri, 09 Jul 2004) | 3 lines
+r11736 | guy | 2004-08-13 04:47:23 -0500 (Fri, 13 Aug 2004) | 5 lines
 Changed paths:
-   M /trunk/epan/proto.c
+   M /trunk/AUTHORS
+   M /trunk/epan/dissectors/Makefile.common
+   M /trunk/epan/dissectors/packet-aim-icq.c
+   A /trunk/epan/dissectors/packet-dcerpc-iremunkn.c
+   A /trunk/epan/dissectors/packet-dcerpc-iremunkn2.c
+   M /trunk/epan/dissectors/packet-dcerpc-oxid.c
+   A /trunk/epan/dissectors/packet-dcerpc-sysact.c
+
+From Jelmer Vernooij:
 
-"length" is relative to the start of the field, so don't subtract the
-start of the field from it.
+	OSCAR-ICQ updates;
+	DCOM IRemUnknown and IRemUnknown2 support.
 
 ------------------------------------------------------------------------
-r11353 | guy | 2004-07-09 16:13:22 -0500 (Fri, 09 Jul 2004) | 15 lines
+r11735 | guy | 2004-08-13 04:35:25 -0500 (Fri, 13 Aug 2004) | 2 lines
 Changed paths:
-   M /trunk/gtk/main.c
-   M /trunk/gtk/recent.c
+   M /trunk/AUTHORS
+   M /trunk/epan/dissectors/Makefile.common
+   A /trunk/epan/dissectors/packet-maccontrol.c
 
-Don't allow non-positive values for the main window width and height
-values in the "recent" file.  Also, check for syntax errors in numerical
-values.
+From Giles Scott: Ethernet MAC Control Frame support.
 
-Set the main window height, as well as the main window width, to default
-values before we read in the values from the "recent" file.  (Use
-non-positive values here if you want the default to be "don't set the
-geometry" - note that you can't set one to a positive value and the
-other one to a non-positive value and expect only one to be set; they
-*both* have to be positive in order for the size to be set.)
+------------------------------------------------------------------------
+r11734 | guy | 2004-08-13 03:27:58 -0500 (Fri, 13 Aug 2004) | 6 lines
+Changed paths:
+   M /trunk/tethereal.c
 
-Treat non-positive values for those settings in the "recent" structure
-as an indication that we don't have values from them and that we should
-therefore not set the window size.
+When opening an output file, use "file_snaplen" as the snapshot length,
+rather than "pcap_snapshot(ld.pch)" - we've set "file_snaplen" to
+"pcap_snapshot(ld.pch)" if we're capturing from a device, but if we're
+reading from a pipe, "ld.pch" is null (so we'll crash if we use it), and
+we've set "file_snaplen" from the header we've read from a pipe.
 
 ------------------------------------------------------------------------
-r11352 | tuexen | 2004-07-09 14:50:00 -0500 (Fri, 09 Jul 2004) | 3 lines
+r11733 | gerald | 2004-08-12 21:39:49 -0500 (Thu, 12 Aug 2004) | 3 lines
 Changed paths:
-   M /trunk/packet-enrp.c
+   M /trunk/epan/libethereal.def
+   M /trunk/epan/strutil.c
+   M /trunk/epan/strutil.h
+   M /trunk/gtk/find_dlg.c
 
-Updated to support the upcoming
-draft-ietf-rserpool-enrp-09.txt
+Move convert_string_to_hex() and convert_string_case() from gtk/find_dlg.c
+to epan/strutil.c
 
 ------------------------------------------------------------------------
-r11351 | gerald | 2004-07-09 13:43:04 -0500 (Fri, 09 Jul 2004) | 2 lines
+r11732 | gerald | 2004-08-12 21:06:46 -0500 (Thu, 12 Aug 2004) | 2 lines
 Changed paths:
-   M /trunk/gtk/main.c
+   M /trunk/ChangeLog
+   M /trunk/NEWS
 
-Don't show the splash screen if we've been passed the "-G" flag.
+Copy over the NEWS and ChangeLog from the 0.10.6 release tree.
 
 ------------------------------------------------------------------------
-r11350 | gerald | 2004-07-09 13:42:35 -0500 (Fri, 09 Jul 2004) | 2 lines
+r11729 | gerald | 2004-08-12 17:45:59 -0500 (Thu, 12 Aug 2004) | 2 lines
 Changed paths:
-   M /trunk/epan/libethereal.def
+   M /trunk/Makefile.am
 
-Add more entries.
+Add capinfo.rc.in and wiretap.rc.in to the distribution.
 
 ------------------------------------------------------------------------
-r11349 | guy | 2004-07-09 04:21:07 -0500 (Fri, 09 Jul 2004) | 3 lines
+r11727 | gerald | 2004-08-12 16:45:12 -0500 (Thu, 12 Aug 2004) | 3 lines
 Changed paths:
-   M /trunk/tethereal.c
+   M /trunk/doc/Makefile.am
+   M /trunk/make-authors-short.pl
 
-Don't complain about "-T pdml" or "-T psml" being combined with "-x"
-only if "-x" was specified.
+From Graeme Hewson: Keep the list of authors in the Ethereal man page from 
+wrapping, and fix the title.
 
 ------------------------------------------------------------------------
-r11348 | guy | 2004-07-08 23:54:08 -0500 (Thu, 08 Jul 2004) | 3 lines
+r11726 | guy | 2004-08-12 16:32:20 -0500 (Thu, 12 Aug 2004) | 4 lines
 Changed paths:
-   M /trunk/packet-ieee80211.c
+   M /trunk/epan/dissectors/packet-smb.c
 
-From Solomon Peachy: fix the decoding of the Association ID in
-management frames.
+Note that the CIFS spec claims that the service name string in Tree
+Connect AndX is always ASCII; we don't assume it is - the spec may very
+well be wrong.
 
 ------------------------------------------------------------------------
-r11347 | tuexen | 2004-07-08 18:31:06 -0500 (Thu, 08 Jul 2004) | 2 lines
+r11721 | gerald | 2004-08-11 16:22:49 -0500 (Wed, 11 Aug 2004) | 2 lines
 Changed paths:
-   M /trunk/AUTHORS
+   M /trunk/Makefile.nmake
 
-Fix my e-mail address.
+Update to GTK-Wimp 0.6.1.
 
 ------------------------------------------------------------------------
-r11346 | guy | 2004-07-08 16:16:04 -0500 (Thu, 08 Jul 2004) | 6 lines
+r11718 | gerald | 2004-08-11 15:34:42 -0500 (Wed, 11 Aug 2004) | 3 lines
 Changed paths:
-   M /trunk/doc/README.developer
+   M /trunk/Makefile.nmake
 
-Give more details on the "don't build the protocol tree if you don't
-have to", indicating that if it's too much work to explicitly test for a
-null protocol tree, you might want to avoid those tests and rely on the
-protocol tree routines not to do much work if passed a null protocol
-tree pointer.
+Change the "setup" target to download the updated GTK+ libraries described
+at http://mail.gnome.org/archives/gtk-devel-list/2004-August/msg00058.html .
 
 ------------------------------------------------------------------------
-r11345 | guy | 2004-07-08 16:02:18 -0500 (Thu, 08 Jul 2004) | 2 lines
+r11717 | guy | 2004-08-11 14:11:16 -0500 (Wed, 11 Aug 2004) | 3 lines
 Changed paths:
-   M /trunk/doc/tethereal.pod
+   M /trunk/epan/dissectors/packet-snmp.c
 
-"Frame" -> "Packet", as per UI and Ethereal man page changes.
+From Tomas Kukosa: add a dissector table for OIDs in variable bindings,
+so the variable value can be dissected by a subdissector.
 
 ------------------------------------------------------------------------
-r11344 | guy | 2004-07-08 15:57:24 -0500 (Thu, 08 Jul 2004) | 10 lines
+r11713 | guy | 2004-08-10 17:45:47 -0500 (Tue, 10 Aug 2004) | 9 lines
 Changed paths:
-   M /trunk/doc/tethereal.pod
+   M /trunk/epan/dissectors/packet-tds.c
 
-Document "-T psml", and give more details in the descriptiion of the
-"-T" option.
+The FreeTDS documentation on TDS claims that the field after the locale
+(or, as that documentation calls it, the language name) is the database
+name; mark it as such.
 
-Talk about packet details rather than the protocol tree, just as we do in
-the Ethereal manual page.
+It also says there's some other stuff, such as a client MAC address,
+after the database offset/length (and that the NTLMSSP message doesn't
+come right after the database offset/length, there's an offset/length
+for the NTLMSSP message).  Put in a comment about that.
 
-Clean up the descriptions of some of the "-z" options.
+------------------------------------------------------------------------
+r11648 | guy | 2004-08-10 16:29:57 -0500 (Tue, 10 Aug 2004) | 3 lines
+Changed paths:
+   M /trunk/AUTHORS
+   M /trunk/epan/column-utils.c
 
-Fix some typos.
+From Neil Piercy: put in some missing "put in the terminating NUL"s
+after "vsnprintf()" calls.
 
 ------------------------------------------------------------------------
-r11343 | guy | 2004-07-08 06:07:29 -0500 (Thu, 08 Jul 2004) | 5 lines
+r11646 | guy | 2004-08-10 16:23:34 -0500 (Tue, 10 Aug 2004) | 3 lines
 Changed paths:
-   M /trunk/file.c
+   M /trunk/epan/proto.c
+
+Add support for FT_FLOAT and FT_DOUBLE in "proto_tree_add_item()"
+(untested).
 
-If we're producing PostScript, don't put the column headers out if we're
-not putting the column data out.
+------------------------------------------------------------------------
+r11644 | gerald | 2004-08-10 10:10:45 -0500 (Tue, 10 Aug 2004) | 2 lines
+Changed paths:
+   M /trunk/epan/Makefile.nmake
 
-Don't fill in the column information if we're not going to use it.
+From Graham Bloice: Allow libethereal.dll to be built after recent changes.
 
 ------------------------------------------------------------------------
-r11342 | guy | 2004-07-08 05:36:29 -0500 (Thu, 08 Jul 2004) | 7 lines
+r11642 | guy | 2004-08-10 03:00:55 -0500 (Tue, 10 Aug 2004) | 2 lines
 Changed paths:
-   M /trunk/file.c
-   M /trunk/file.h
-   M /trunk/gtk/print_dlg.c
-   M /trunk/print.c
-   M /trunk/print.h
-   M /trunk/tethereal.c
+   M /trunk/epan/Makefile.common
 
-Make the "human-readable text vs. PSML vs. PDML" choice separate from
-the "text vs.  PostScript" choice.  The "text vs. PostScript" choice
-should probably ultimately be done with a generic set of print methods,
-to handle various platform-native print mechanisms more cleanly (and
-perhaps the dialog box code for "export as {PDML,PSML}" should be
-separate from the "export as text"/"print" dialog).
+Fix a typo.
 
 ------------------------------------------------------------------------
-r11341 | guy | 2004-07-08 02:47:29 -0500 (Thu, 08 Jul 2004) | 5 lines
+r11641 | guy | 2004-08-10 02:52:11 -0500 (Tue, 10 Aug 2004) | 3 lines
 Changed paths:
-   M /trunk/tethereal.c
+   M /trunk/epan/Makefile.am
+   M /trunk/epan/Makefile.common
+   M /trunk/epan/Makefile.nmake
 
-Fix the error for a WTAP_ERR_UNSUPPORTED_ENCAP read error to more
-accurately reflect the problem (it's not that the entire file has a
-network type we don't handle - if it did, we'd have failed when we tried
-to open it - it's that the packet we tried to read does).
+Add LIBETHEREAL_SRC and LIBETHEREAL_INCLUDES to epan/Makefile.common,
+and have epan/Makefile.am and epan/Makefile.nmake use them.
 
 ------------------------------------------------------------------------
-r11340 | guy | 2004-07-08 02:45:46 -0500 (Thu, 08 Jul 2004) | 9 lines
+r11640 | guy | 2004-08-10 02:03:21 -0500 (Tue, 10 Aug 2004) | 3 lines
 Changed paths:
-   M /trunk/file.c
+   M /trunk/epan/dissectors/packet-dhcp-failover.c
+
+Use the protocol short name as the Protocol column value, as is done in
+other dissectors.
 
-A read can return WTAP_ERR_UNSUPPORTED_ENCAP if the encapsulation type
-is per-packet and the packet has an encapsulation type we don't know
-about, so handle it on reads as well as errors - show an error message
-noting that we had a packet with a network type we don't know about, and
-show the extra info returned for that error giving details.
+------------------------------------------------------------------------
+r11639 | guy | 2004-08-10 00:27:50 -0500 (Tue, 10 Aug 2004) | 3 lines
+Changed paths:
+   M /trunk/capture-wpcap.c
 
-It shouldn't return WTAP_ERR_UNSUPPORTED, however, so just give the
-"wtap_strerror()" error for that case.
+From Graham Bloice: if we don't have "pcap_lib_version()" in WinPcap, we
+might have "PacketLibraryVersion[]" in packet.dll - try using that.
 
 ------------------------------------------------------------------------
-r11339 | guy | 2004-07-08 02:32:39 -0500 (Thu, 08 Jul 2004) | 4 lines
+r11638 | gerald | 2004-08-09 17:31:21 -0500 (Mon, 09 Aug 2004) | 2 lines
 Changed paths:
-   M /trunk/wiretap/lanalyzer.c
+   M /trunk/epan/Makefile.nmake
+   M /trunk/epan/addr_resolv.c
+   M /trunk/epan/addr_resolv.h
 
-If we don't know the board type in a Lanayzer capture, return
-WTAP_ERR_UNSUPPORTED_ENCAP, not WTAP_ERR_UNSUPPORTED, as it presumably
-means the capture was done on some type of device we don't know about.
+Merge the "resolv" rename changes with the trunk.
 
 ------------------------------------------------------------------------
diff -urN ethereal-0.10.6/Ethereal.desktop ethereal-0.10.7/Ethereal.desktop
--- ethereal-0.10.6/Ethereal.desktop	2004-08-12 17:41:38.000000000 -0500
+++ ethereal-0.10.7/Ethereal.desktop	1969-12-31 18:00:00.000000000 -0600
@@ -1,17 +0,0 @@
-[Desktop Entry]
-# $Id: Ethereal.desktop 11400 2004-07-18 00:24:25Z guy $
-Name=Ethereal
-Type=Application
-TryExec=ethereal
-BinaryPattern=ethereal
-Categories=GNOME;Application;Network;
-Comment=Network traffic analyzer
-Comment[fi]=Verkkoliikenne analysaattori
-Exec=ethereal
-Icon=ethereal.png
-Path=
-Terminal=0
-TerminalOptions=
-MimeType=
-MapNotify=true
-Protocols=
diff -urN ethereal-0.10.6/FAQ ethereal-0.10.7/FAQ
--- ethereal-0.10.6/FAQ	2004-08-12 17:41:40.000000000 -0500
+++ ethereal-0.10.7/FAQ	2004-10-20 17:34:27.000000000 -0500
@@ -13,16 +13,22 @@
 
    1.1 Where can I get help?
 
-   1.2 What protocols are currently supported?
+   1.2 How much does Ethereal cost?
 
-   1.3 Are there any plans to support {your favorite protocol}?
+   1.3 Can I use Ethereal commercially?
 
-   1.4 Can Ethereal read capture files from {your favorite network
+   1.4 Can I use Ethereal as part of my commercial product?
+
+   1.5 What protocols are currently supported?
+
+   1.6 Are there any plans to support {your favorite protocol}?
+
+   1.7 Can Ethereal read capture files from {your favorite network
    analyzer}?
 
-   1.5 What devices can Ethereal use to capture packets?
+   1.8 What devices can Ethereal use to capture packets?
 
-   1.6 How do you pronounce Ethereal? Where did the name come from?
+   1.9 How do you pronounce Ethereal? Where did the name come from?
 
 Downloading Ethereal:
 
@@ -223,9 +229,47 @@
    Subscription information and archives for all of Ethereal's mailing
    lists can be found at http://www.ethereal.com/lists
 
-   Q 1.2: What protocols are currently supported?
+   Q 1.2: How much does Ethereal cost?
 
-   A: There are currently 518 supported protocols and media, listed
+   A: Ethereal is "free software"; you can download it without paying any
+   license fee. The version of Ethereal you download isn't a "demo"
+   version, with limitations not present in a "full" version; it is the
+   full version.
+
+   The license under which Ethereal is issued is the GNU General Public
+   License. See the GNU GPL FAQ for some more information.
+
+   Q 1.3: Can I use Ethereal commercially?
+
+   A: Yes, if, for example, you mean "I work for a commercial
+   organization; can I use Ethereal to capture and analyze network
+   traffic in our company's networks or in our customer's networks?"
+
+   If you mean "Can I use Ethereal as part of my commercial product?",
+   see the next entry in the FAQ.
+
+   Q 1.4: Can I use Ethereal as part of my commercial product?
+
+   A: As noted, Ethereal is licended under the GNU General Public
+   License. The GPL imposes conditions on your use of GPL'ed code in your
+   own products; you cannot, for example, make a "derived work" from
+   Ethereal, by making modifications to it, and then sell the resulting
+   derived work and not allow recipients to give away the resulting work.
+   You must also make the changes you've made to the Ethereal source
+   available to all recipients of your modified version; those changes
+   must also be licensed under the terms of the GPL. See the GPL FAQ for
+   more details; in particular, note the answer to the question about
+   modifying a GPLed program and selling it commercially, and the
+   question about linking GPLed code with other code to make a
+   proprietary program.
+
+   You can combine a GPLed program such as Ethereal and a commercial
+   program as long as they communicate "at arm's length", as per this
+   item in the GPL FAQ.
+
+   Q 1.5: What protocols are currently supported?
+
+   A: There are currently 530 supported protocols and media, listed
    below. Descriptions can be found in the ethereal(1) man page.
 
             3GPP2 A11
@@ -267,6 +311,7 @@
             ATM LAN Emulation
             ATM OAM AAL
             AVS WLAN Capture header
+            AX/4000 Test Block
             Ad hoc On-demand Distance Vector Routing Protocol
             Address Resolution Protocol
             Aggregate Server Access Protocol
@@ -299,6 +344,7 @@
             Bearer Independent Call Control
             Bi-directional Fault Detection Control Message
             Blocks Extensible Exchange Protocol
+            Blubster/Piolet MANOLITO Protocol
             Boardwalk
             Boot Parameters
             Bootstrap Protocol
@@ -326,6 +372,7 @@
             Compuserve GIF
             Connectionless Lightweight Directory Access Protocol
             Cross Point Frame Injector
+            Cryptographic Message Syntax
             DCE Distributed Time Service Local Server
             DCE Distributed Time Service Provider
             DCE Name Service
@@ -366,6 +413,7 @@
             DCOM Remote Activation
             DEC Spanning Tree Protocol
             DFS Calls
+            DHCP Failover
             DHCPv6
             DICOM
             DNS Control Program Server
@@ -521,7 +569,10 @@
             Microsoft Distributed File System
             Microsoft Distributed Link Tracking Server Service
             Microsoft Encrypted File System Service
+            Microsoft Eventlog Service
             Microsoft Exchange MAPI
+            Microsoft File Replication Service
+            Microsoft File Replication Service API
             Microsoft Local Security Architecture
             Microsoft Local Security Architecture (Directory Services)
             Microsoft Messenger Service
@@ -581,6 +632,7 @@
             OpenBSD Packet Filter log file, pre 3.4
             Optimized Link State Routing Protocol
             PC NFS
+            PKCS#1
             POSTGRESQL
             PPP Bandwidth Allocation Control Protocol
             PPP Bandwidth Allocation Protocol
@@ -733,6 +785,10 @@
             X.25
             X.25 over TCP
             X.29
+            X.509 Authentication Framework
+            X.509 Certificate Extensions
+            X.509 Information Framework
+            X.509 Selected Attribute Types
             X11
             Xyplex
             Yahoo Messenger Protocol
@@ -748,13 +804,13 @@
             iSCSI
             iSNS
 
-   Q 1.3: Are there any plans to support {your favorite protocol}?
+   Q 1.6: Are there any plans to support {your favorite protocol}?
 
    A: Support for particular protocols is added to Ethereal as a result
    of people contributing that support; no formal plans for adding
    support for particular protocols in particular future releases exist.
 
-   Q 1.4: Can Ethereal read capture files from {your favorite network
+   Q 1.7: Can Ethereal read capture files from {your favorite network
    analyzer}?
 
    A: Support for particular protocols is added to Ethereal as a result
@@ -779,7 +835,7 @@
    Note that there is no guarantee that we will be able to
    reverse-engineer a capture file format.
 
-   Q 1.5: What devices can Ethereal use to capture packets?
+   Q 1.8: What devices can Ethereal use to capture packets?
 
    A: Ethereal can read live data from Ethernet, Token-Ring, FDDI, serial
    (PPP and SLIP) (if the OS on which it's running allows Ethereal to do
@@ -820,7 +876,7 @@
    other applications or equipment, even if it cannot itself capture on
    those network types.
 
-   Q 1.6: How do you pronounce Ethereal? Where did the name come from?
+   Q 1.9: How do you pronounce Ethereal? Where did the name come from?
 
    A: The English pronunciation can be found in Merriam-Webster's online
    dictionary at
@@ -974,31 +1030,10 @@
    to a single port so that you can plug your analyzer into that single
    port to sniff all traffic. You would have to check the documentation
    for the switch to see if this is possible and, if so, to see how to do
-   this. See, for example:
-     * this documentation from Cisco on the Switched Port Analyzer (SPAN)
-       feature on Catalyst switches;
-     * documentation from HP on how to set "monitoring"/"mirroring" on
-       ports on the console for HP Advancestack Switch 208 and 224;
-     * the "Network Monitoring Port Features" section of chapter 6 of
-       documentation from HP for HP ProCurve Switches 1600M, 2424M,
-       4000M, and 8000M;
-     * the "Switch Port-Mirroring" section of chapter 6 of documentation
-       from Extreme Networks for their Summit 200 switches;
-     * the documentation on "Configuring Port Mirroring and Monitoring"
-       in Foundry Networks' documentation for their FastIron Edge
-       Switches;
-     * the documentation on "Configuring Port Mirroring and Monitoring"
-       in Foundry Networks' documentation for their BigIron MG8 Layer 3
-       Switches;
-     * the "Port Monitor" subsection of the "Status Monitor and
-       Statistics" section of the documentation from Foundry Networks for
-       their EdgeIron 4802F and 10GC2F switches;
-     * the "Configuring Port Mirroring" section of chapter 3 of the
-       documentation from Foundry Networks for their EdgeIron 24G,
-       2402CF, and 4802CF switches;
-     * the documentation on "Configuring Port Mirroring and Monitoring"
-       in Foundry Networks' documentation for their other switches and
-       metro routers.
+   this. See the switch reference page on the Ethereal Wiki for
+   information on some switches. (Note that it's a Wiki, so you can
+   update or fix that information, or add additional information on those
+   switches or information on new switches, yourself.)
 
    Note also that many firewall/NAT boxes have a switch built into them;
    this includes many of the "cable/DSL router" boxes. If you have a box
@@ -1500,20 +1535,8 @@
      Gtk-CRITICAL **: file gtkwindow.c: line 3107 (gtk_window_resize):
      assertion `height > 0' failed.
 
-   A: This is a bug in Ethereal 0.10.5, which will be fixed in the next
-   release of Ethereal. To work around this bug:
-    1. On Windows, this message will appear in a console window; do NOT,
-       under any circumstances, close that window!
-    2. Make sure the "Save window size" prefrence is set the "User
-       Interface" prefrences in the preferences window opened by
-       "Preferences" under the "Edit" menu.
-    3. Quit Ethereal.
-    4. On Windows, a "Press any key to exit" message might appear in the
-       command window; if that message appears in the window, click on
-       that window and press any key (such as Enter).
-
-   The next time Ethereal starts, it should not produce that error
-   message.
+   A: This is a bug in Ethereal 0.10.5 and 0.10.5a, which is fixed in
+   Ethereal 0.10.6 and later releases.
 
    Q 5.18: When I run Tethereal with the "-x" option, it crashes with an
    error
@@ -1832,9 +1855,8 @@
    On Windows, you will not be able to capture in monitor mode on any
    interfaces, and you might not be able to capture in promiscuous mode,
    either. You might have some success in promiscuous mode with Centrino
-   interfaces, although you will need the not-yet-released Ethereal
-   0.10.6 in order to have the non-data packets recognized and properly
-   dissected.
+   interfaces, although you will need Ethereal 0.10.6 or later in order
+   to have the non-data packets recognized and properly dissected.
 
    You will not be able to capture in monitor mode on any other platforms
    (including Mac OS X). You might be able to capture in promiscuous
@@ -1980,11 +2002,11 @@
    Cards with Atheros Communications chipsets:
 
    You can capture raw 802.11 packets with AR5K cards on Linux systems
-   with the v5_ar5k drivers. You will need the Linux wireless-tools
-   version 25 or higher to put the card into monitor mode. It might also
-   be possible to do so with the madwifi driver. If you have information
-   on how to do this, please supply it to us, so that we can incorporate
-   that information into the FAQ in the future.
+   with the v5_ar5k or madwifi drivers. For the v5ar5k driver you will
+   need the Linux wireless-tools version 25 or higher to put the card
+   into monitor mode. If you're using the madwifi driver, you can put the
+   card into monitor mode using iwconfig interface mode monitor, followed
+   by iwconfig interface channel channel to select a channel (if needed).
 
    Other cards:
 
@@ -2223,4 +2245,4 @@
    For corrections/additions/suggestions for this web page (and not
    Ethereal support questions), please send email to
    ethereal-web[AT]ethereal.com .
-   Last modified: Sun, August 08 2004.
+   Last modified: Sat, September 25 2004.
diff -urN ethereal-0.10.6/INSTALL ethereal-0.10.7/INSTALL
--- ethereal-0.10.6/INSTALL	2004-08-12 17:41:39.000000000 -0500
+++ ethereal-0.10.7/INSTALL	2004-10-20 17:34:26.000000000 -0500
@@ -23,6 +23,10 @@
     header files and the like.  For example, Red Hat users will
     need to install a "gtk-devel" .rpm.
 
+    Note also that Ethereal configuration defaults to using GTK+ and
+    GLib 2.x; you need to configure with --disable-gtk2 to use GTK+
+    1.2[.x].
+
 2. If you wish to build Tethereal, the line-mode version of Ethereal,
     make sure you have GLIB installed.  See note #1 above for instructions
     on checking if you have GLIB installed. You can download GLIB from
@@ -70,8 +74,8 @@
         build Ethereal, the GUI packet analyzer. You can disable the
         build of the GUI version of Ethereal with this switch.
 
-    --enable-gtk2
-        Build Glib2/Gtk2+-based ethereal.
+    --disable-gtk2
+        Build Glib/Gtk+ 1.2[.x]-based ethereal.
 
     --disable-tethereal
         By default the line-mode packet analyzer, Tethereal, is built.
diff -urN ethereal-0.10.6/Makefile.am ethereal-0.10.7/Makefile.am
--- ethereal-0.10.6/Makefile.am	2004-08-12 17:46:11.000000000 -0500
+++ ethereal-0.10.7/Makefile.am	2004-10-20 17:34:27.000000000 -0500
@@ -1,7 +1,7 @@
 # Makefile.am
 # Automake file for Ethereal
 #
-# $Id: Makefile.am 11730 2004-08-12 22:46:09Z gerald $
+# $Id: Makefile.am 12359 2004-10-20 19:07:50Z gerald $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -60,13 +60,13 @@
 # automake will arrange that the Makefile define it as the union of all
 # the "man{section}_MANS" variables.
 #
-bin_PROGRAMS = @ethereal_bin@ @capinfo_bin@ @editcap_bin@ @mergecap_bin@ @tethereal_bin@ @dftest_bin@ @randpkt_bin@ @text2pcap_bin@
+bin_PROGRAMS = @ethereal_bin@ @capinfos_bin@ @editcap_bin@ @mergecap_bin@ @tethereal_bin@ @dftest_bin@ @randpkt_bin@ @text2pcap_bin@
 bin_SCRIPTS = @idl2eth_bin@
-man1_MANS = @ethereal_man@ @capinfo_man@ @editcap_man@ @mergecap_man@ @tethereal_man@ @text2pcap_man@ @idl2eth_man@
+man1_MANS = @ethereal_man@ @capinfos_man@ @editcap_man@ @mergecap_man@ @tethereal_man@ @text2pcap_man@ @idl2eth_man@
 man4_MANS = @etherealfilter_man@
 man_MANS =
 
-EXTRA_PROGRAMS = ethereal tethereal capinfo editcap mergecap dftest \
+EXTRA_PROGRAMS = ethereal tethereal capinfos editcap mergecap dftest \
 	randpkt text2pcap
 EXTRA_SCRIPTS = idl2eth
 
@@ -75,7 +75,7 @@
 # contains the "AUTHORS-SHORT" and "manuf" files and a "diameter" directory.
 #
 pkgdata_DATA = AUTHORS-SHORT manuf ethereal.html tethereal.html \
-	ethereal-filter.html capinfo.html editcap.html \
+	ethereal-filter.html capinfos.html editcap.html \
 	idl2eth.html mergecap.html text2pcap.html
 
 #
@@ -83,7 +83,7 @@
 # of that directory.
 #
 diameterdir = $(pkgdatadir)/diameter
-diameter_DATA = dictionary.dtd dictionary.xml mobileipv4.xml \
+diameter_DATA = dictionary.dtd dictionary.xml imscxdx.xml mobileipv4.xml \
 	nasreq.xml sunping.xml
 
 PLATFORM_SRC = pcap-util-unix.c
@@ -277,11 +277,11 @@
 mergecap_DEPENDENCIES = wiretap/libwiretap.la
 
 # This is the automake dependency variable for the executable
-capinfo_DEPENDENCIES = wiretap/libwiretap.la
+capinfos_DEPENDENCIES = wiretap/libwiretap.la
 editcap_DEPENDENCIES = wiretap/libwiretap.la
 
 # This automake variable adds to the link-line for the executable
-capinfo_LDADD = wiretap/libwiretap.la @GLIB_LIBS@
+capinfos_LDADD = wiretap/libwiretap.la @GLIB_LIBS@
 editcap_LDADD = wiretap/libwiretap.la @GLIB_LIBS@
 mergecap_LDADD = wiretap/libwiretap.la @GLIB_LIBS@
 
@@ -301,7 +301,14 @@
 # Build the short version of the authors file for the about dialog
 #
 AUTHORS-SHORT: AUTHORS make-authors-short.pl
-	$(PERL) $(srcdir)/make-authors-short.pl < AUTHORS > AUTHORS-SHORT
+	$(PERL) $(srcdir)/perlnoutf.pl $(srcdir)/make-authors-short.pl < AUTHORS > AUTHORS-SHORT
+
+#
+# Build the short version of the authors file with formatting codes for the
+# man page
+#
+AUTHORS-SHORT-FORMAT: AUTHORS-SHORT make-authors-format.pl
+	$(PERL) $(srcdir)/perlnoutf.pl $(srcdir)/make-authors-format.pl < AUTHORS-SHORT > AUTHORS-SHORT-FORMAT
 
 #
 # Build shell scripts by doing variable substitution.
@@ -383,7 +390,7 @@
 
 EXTRA_DIST = \
 	AUTHORS-SHORT		\
-	Ethereal.desktop	\
+	AUTHORS-SHORT-FORMAT	\
 	FAQ			\
 	INSTALL.configure       \
 	Makefile.common		\
@@ -404,7 +411,7 @@
 	aclocal-fallback/gtk.m4 \
 	aclocal-flags		\
 	autogen.sh		\
-	capinfo.c		\
+	capinfos.c		\
 	capture-wpcap.c		\
 	capture-wpcap.h		\
 	cleanbld.bat		\
@@ -433,7 +440,7 @@
 	doc/README.tapping	\
 	doc/README.tvbuff	\
 	doc/README.xml-output	\
-	doc/capinfo.pod		\
+	doc/capinfos.pod		\
 	doc/dfilter2pod.pl	\
 	doc/editcap.pod		\
 	doc/ethereal-filter.pod.template \
@@ -448,13 +455,14 @@
 	epan/libethereal.def	\
 	ethereal_be.py		\
 	ethereal_gen.py		\
+	ethereal.desktop	\
 	getopt.c		\
 	getopt.h		\
 	idl2eth.sh		\
 	image/Ethereal.icns	\
 	image/Makefile.nmake	\
 	image/README.image	\
-	image/capinfo.rc.in	\
+	image/capinfos.rc.in	\
 	image/clist_ascend.xpm	\
 	image/clist_descend.xpm	\
 	image/dn_arrow.xpm	\
@@ -520,6 +528,8 @@
 	image/icon_layout_5.xpm \
 	image/icon_layout_6.xpm \
 	image/wiretap.rc.in	\
+	imscxdx.xml		\
+	make-authors-format.pl	\
 	make-authors-short.pl	\
 	make-manuf		\
 	make-tapreg-dotc	\
@@ -529,6 +539,7 @@
 	mergecap.c		\
 	mobileipv4.xml		\
 	nasreq.xml		\
+	perlnoutf.pl		\
 	print.ps                \
 	randpkt.c		\
 	rdps.c			\
@@ -554,7 +565,7 @@
 SUBDIRS = tools wiretap doc epan packaging help @ethereal_SUBDIRS@
 endif
 
-ethereal.1: doc/ethereal.pod AUTHORS-SHORT
+ethereal.1: doc/ethereal.pod AUTHORS-SHORT-FORMAT
 	(cd doc ; \
 	$(MAKE) ../ethereal.1 )
 
@@ -566,9 +577,9 @@
 	(cd doc ; \
 	$(MAKE) ../ethereal-filter.4 )
 
-capinfo.1: doc/capinfo.pod
+capinfos.1: doc/capinfos.pod
 	(cd doc ; \
-	$(MAKE) ../capinfo.1 )
+	$(MAKE) ../capinfos.1 )
 
 editcap.1: doc/editcap.pod
 	(cd doc ; \
@@ -586,7 +597,7 @@
 	(cd doc ; \
 	$(MAKE) ../text2pcap.1 )
 
-ethereal.html: doc/ethereal.pod AUTHORS-SHORT
+ethereal.html: doc/ethereal.pod AUTHORS-SHORT-FORMAT
 	(cd doc ; \
 	$(MAKE) ../ethereal.html )
 
@@ -598,9 +609,9 @@
 	(cd doc ; \
 	$(MAKE) ../ethereal-filter.html )
 
-capinfo.html: doc/capinfo.pod
+capinfos.html: doc/capinfos.pod
 	(cd doc ; \
-	$(MAKE) ../capinfo.html )
+	$(MAKE) ../capinfos.html )
 
 editcap.html: doc/editcap.pod
 	(cd doc ; \
diff -urN ethereal-0.10.6/Makefile.common ethereal-0.10.7/Makefile.common
--- ethereal-0.10.6/Makefile.common	2004-08-12 17:41:40.000000000 -0500
+++ ethereal-0.10.7/Makefile.common	2004-10-20 17:34:27.000000000 -0500
@@ -3,7 +3,7 @@
 #     a) common to both files and
 #     b) portable between both files
 #
-# $Id: Makefile.common 11559 2004-07-29 00:11:14Z obiot $
+# $Id: Makefile.common 12168 2004-10-01 08:33:53Z guy $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -26,49 +26,31 @@
 # Header files for dissector helpers
 # XXX - these should be moved to epan/dissectors
 DISSECTOR_SUPPORT_INCLUDES =	\
-	adler32.h	\
-	afn.h	\
 	aftypes.h	\
 	arcnet_pids.h	\
 	asn1.h	\
 	bridged_pids.h	\
 	chdlctypes.h	\
-	column.h	\
-	crc16.h	\
-	crc32.h	\
-	crypt-des.h	\
-	crypt-md4.h	\
-	crypt-md5.h	\
-	crypt-rc4.h	\
 	etypes.h	\
 	follow.h	\
 	format-oid.h	\
 	greproto.h	\
 	h225-persistentdata.h	\
 	iax2_codec_type.h	\
-	in_cksum.h	\
 	ip_opts.h	\
-	ipproto.h	\
 	isprint.h	\
 	lapd_sapi.h	\
 	llcsaps.h	\
 	nlpid.h	\
 	oui.h	\
 	ppptypes.h	\
-	prefs-int.h	\
-	prefs.h	\
 	ptvcursor.h	\
 	reassemble.h	\
-	req_resp_hdrs.h	\
 	rpc_defrag.h	\
 	rtp_pt.h	\
 	sctpppids.h	\
 	smb.h	\
-	t35.h	\
-	tap.h	\
-	util.h	\
 	x264_prt_id.h	\
-	xdlc.h	\
 	xmlstub.h
 
 # "BUILT_SOURCES" are built before any "make all" or "make check" targets.
@@ -81,14 +63,16 @@
 	$(PLATFORM_SRC) \
 	capture_stop_conditions.c	\
 	cfile.c	\
+	clopts_common.c	\
 	conditions.c	\
 	disabled_protos.c	\
+	packet-range.c	\
 	pcap-util.c	\
 	print.c	\
 	ps.c	\
-	range.c	\
 	ringbuffer.c	\
 	timestats.c	\
+	util.c	\
 	version_info.c
 
 # corresponding headers
@@ -97,18 +81,20 @@
 	svnversion.h		\
 	capture_stop_conditions.h	\
 	cfile.h	\
+	clopts_common.h	\
 	color.h	\
 	conditions.h	\
 	disabled_protos.h	\
 	file.h	\
+	packet-range.h	\
 	pcap-util.h	\
 	pcap-util-int.h	\
 	print.h	\
 	ps.h	\
-	range.h	\
 	register.h	\
 	ringbuffer.h	\
 	timestats.h	\
+	util.h	\
 	version_info.h
 
 # sources for Tethereal taps
@@ -206,7 +192,8 @@
 
 # dftest specifics
 dftest_SOURCES =	\
-	dftest.c
+	dftest.c	\
+	util.c
 
 # randpkt specifics
 randpkt_SOURCES = \
diff -urN ethereal-0.10.6/Makefile.in ethereal-0.10.7/Makefile.in
--- ethereal-0.10.6/Makefile.in	2004-08-12 21:04:19.000000000 -0500
+++ ethereal-0.10.7/Makefile.in	2004-10-20 21:50:15.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -17,7 +17,7 @@
 # Makefile.am
 # Automake file for Ethereal
 #
-# $Id: Makefile.am 11730 2004-08-12 22:46:09Z gerald $
+# $Id: Makefile.am 12359 2004-10-20 19:07:50Z gerald $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -42,7 +42,7 @@
 #     a) common to both files and
 #     b) portable between both files
 #
-# $Id: Makefile.common 11559 2004-07-29 00:11:14Z obiot $
+# $Id: Makefile.common 12168 2004-10-01 08:33:53Z guy $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -122,6 +122,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -133,10 +136,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -217,8 +223,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -303,13 +309,13 @@
 # automake will arrange that the Makefile define it as the union of all
 # the "man{section}_MANS" variables.
 #
-bin_PROGRAMS = @ethereal_bin@ @capinfo_bin@ @editcap_bin@ @mergecap_bin@ @tethereal_bin@ @dftest_bin@ @randpkt_bin@ @text2pcap_bin@
+bin_PROGRAMS = @ethereal_bin@ @capinfos_bin@ @editcap_bin@ @mergecap_bin@ @tethereal_bin@ @dftest_bin@ @randpkt_bin@ @text2pcap_bin@
 bin_SCRIPTS = @idl2eth_bin@
-man1_MANS = @ethereal_man@ @capinfo_man@ @editcap_man@ @mergecap_man@ @tethereal_man@ @text2pcap_man@ @idl2eth_man@
+man1_MANS = @ethereal_man@ @capinfos_man@ @editcap_man@ @mergecap_man@ @tethereal_man@ @text2pcap_man@ @idl2eth_man@
 man4_MANS = @etherealfilter_man@
 man_MANS = 
 
-EXTRA_PROGRAMS = ethereal tethereal capinfo editcap mergecap dftest \
+EXTRA_PROGRAMS = ethereal tethereal capinfos editcap mergecap dftest \
 	randpkt text2pcap
 
 EXTRA_SCRIPTS = idl2eth
@@ -319,7 +325,7 @@
 # contains the "AUTHORS-SHORT" and "manuf" files and a "diameter" directory.
 #
 pkgdata_DATA = AUTHORS-SHORT manuf ethereal.html tethereal.html \
-	ethereal-filter.html capinfo.html editcap.html \
+	ethereal-filter.html capinfos.html editcap.html \
 	idl2eth.html mergecap.html text2pcap.html
 
 
@@ -328,7 +334,7 @@
 # of that directory.
 #
 diameterdir = $(pkgdatadir)/diameter
-diameter_DATA = dictionary.dtd dictionary.xml mobileipv4.xml \
+diameter_DATA = dictionary.dtd dictionary.xml imscxdx.xml mobileipv4.xml \
 	nasreq.xml sunping.xml
 
 
@@ -337,49 +343,31 @@
 # Header files for dissector helpers
 # XXX - these should be moved to epan/dissectors
 DISSECTOR_SUPPORT_INCLUDES = \
-	adler32.h	\
-	afn.h	\
 	aftypes.h	\
 	arcnet_pids.h	\
 	asn1.h	\
 	bridged_pids.h	\
 	chdlctypes.h	\
-	column.h	\
-	crc16.h	\
-	crc32.h	\
-	crypt-des.h	\
-	crypt-md4.h	\
-	crypt-md5.h	\
-	crypt-rc4.h	\
 	etypes.h	\
 	follow.h	\
 	format-oid.h	\
 	greproto.h	\
 	h225-persistentdata.h	\
 	iax2_codec_type.h	\
-	in_cksum.h	\
 	ip_opts.h	\
-	ipproto.h	\
 	isprint.h	\
 	lapd_sapi.h	\
 	llcsaps.h	\
 	nlpid.h	\
 	oui.h	\
 	ppptypes.h	\
-	prefs-int.h	\
-	prefs.h	\
 	ptvcursor.h	\
 	reassemble.h	\
-	req_resp_hdrs.h	\
 	rpc_defrag.h	\
 	rtp_pt.h	\
 	sctpppids.h	\
 	smb.h	\
-	t35.h	\
-	tap.h	\
-	util.h	\
 	x264_prt_id.h	\
-	xdlc.h	\
 	xmlstub.h
 
 
@@ -394,14 +382,16 @@
 	$(PLATFORM_SRC) \
 	capture_stop_conditions.c	\
 	cfile.c	\
+	clopts_common.c	\
 	conditions.c	\
 	disabled_protos.c	\
+	packet-range.c	\
 	pcap-util.c	\
 	print.c	\
 	ps.c	\
-	range.c	\
 	ringbuffer.c	\
 	timestats.c	\
+	util.c	\
 	version_info.c
 
 
@@ -411,18 +401,20 @@
 	svnversion.h		\
 	capture_stop_conditions.h	\
 	cfile.h	\
+	clopts_common.h	\
 	color.h	\
 	conditions.h	\
 	disabled_protos.h	\
 	file.h	\
+	packet-range.h	\
 	pcap-util.h	\
 	pcap-util-int.h	\
 	print.h	\
 	ps.h	\
-	range.h	\
 	register.h	\
 	ringbuffer.h	\
 	timestats.h	\
+	util.h	\
 	version_info.h
 
 
@@ -530,7 +522,8 @@
 
 # dftest specifics
 dftest_SOURCES = \
-	dftest.c
+	dftest.c	\
+	util.c
 
 
 # randpkt specifics
@@ -731,11 +724,11 @@
 mergecap_DEPENDENCIES = wiretap/libwiretap.la
 
 # This is the automake dependency variable for the executable
-capinfo_DEPENDENCIES = wiretap/libwiretap.la
+capinfos_DEPENDENCIES = wiretap/libwiretap.la
 editcap_DEPENDENCIES = wiretap/libwiretap.la
 
 # This automake variable adds to the link-line for the executable
-capinfo_LDADD = wiretap/libwiretap.la @GLIB_LIBS@
+capinfos_LDADD = wiretap/libwiretap.la @GLIB_LIBS@
 editcap_LDADD = wiretap/libwiretap.la @GLIB_LIBS@
 mergecap_LDADD = wiretap/libwiretap.la @GLIB_LIBS@
 
@@ -803,7 +796,7 @@
 
 EXTRA_DIST = \
 	AUTHORS-SHORT		\
-	Ethereal.desktop	\
+	AUTHORS-SHORT-FORMAT	\
 	FAQ			\
 	INSTALL.configure       \
 	Makefile.common		\
@@ -824,7 +817,7 @@
 	aclocal-fallback/gtk.m4 \
 	aclocal-flags		\
 	autogen.sh		\
-	capinfo.c		\
+	capinfos.c		\
 	capture-wpcap.c		\
 	capture-wpcap.h		\
 	cleanbld.bat		\
@@ -853,7 +846,7 @@
 	doc/README.tapping	\
 	doc/README.tvbuff	\
 	doc/README.xml-output	\
-	doc/capinfo.pod		\
+	doc/capinfos.pod		\
 	doc/dfilter2pod.pl	\
 	doc/editcap.pod		\
 	doc/ethereal-filter.pod.template \
@@ -868,13 +861,14 @@
 	epan/libethereal.def	\
 	ethereal_be.py		\
 	ethereal_gen.py		\
+	ethereal.desktop	\
 	getopt.c		\
 	getopt.h		\
 	idl2eth.sh		\
 	image/Ethereal.icns	\
 	image/Makefile.nmake	\
 	image/README.image	\
-	image/capinfo.rc.in	\
+	image/capinfos.rc.in	\
 	image/clist_ascend.xpm	\
 	image/clist_descend.xpm	\
 	image/dn_arrow.xpm	\
@@ -940,6 +934,8 @@
 	image/icon_layout_5.xpm \
 	image/icon_layout_6.xpm \
 	image/wiretap.rc.in	\
+	imscxdx.xml		\
+	make-authors-format.pl	\
 	make-authors-short.pl	\
 	make-manuf		\
 	make-tapreg-dotc	\
@@ -949,6 +945,7 @@
 	mergecap.c		\
 	mobileipv4.xml		\
 	nasreq.xml		\
+	perlnoutf.pl		\
 	print.ps                \
 	randpkt.c		\
 	rdps.c			\
@@ -974,26 +971,28 @@
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
 CONFIG_HEADER = config.h
 CONFIG_CLEAN_FILES = doxygen.cfg
-EXTRA_PROGRAMS = ethereal$(EXEEXT) tethereal$(EXEEXT) capinfo$(EXEEXT) \
+EXTRA_PROGRAMS = ethereal$(EXEEXT) tethereal$(EXEEXT) capinfos$(EXEEXT) \
 	editcap$(EXEEXT) mergecap$(EXEEXT) dftest$(EXEEXT) \
 	randpkt$(EXEEXT) text2pcap$(EXEEXT)
-bin_PROGRAMS = @ethereal_bin@ @capinfo_bin@ @editcap_bin@ @mergecap_bin@ \
-	@tethereal_bin@ @dftest_bin@ @randpkt_bin@ @text2pcap_bin@
+bin_PROGRAMS = @ethereal_bin@ @capinfos_bin@ @editcap_bin@ \
+	@mergecap_bin@ @tethereal_bin@ @dftest_bin@ @randpkt_bin@ \
+	@text2pcap_bin@
 PROGRAMS = $(bin_PROGRAMS)
 
-capinfo_SOURCES = capinfo.c
-capinfo_OBJECTS = capinfo.$(OBJEXT)
-capinfo_LDFLAGS =
-am_dftest_OBJECTS = dftest.$(OBJEXT)
+capinfos_SOURCES = capinfos.c
+capinfos_OBJECTS = capinfos.$(OBJEXT)
+capinfos_LDFLAGS =
+am_dftest_OBJECTS = dftest.$(OBJEXT) util.$(OBJEXT)
 dftest_OBJECTS = $(am_dftest_OBJECTS)
 am_editcap_OBJECTS = editcap.$(OBJEXT)
 editcap_OBJECTS = $(am_editcap_OBJECTS)
 editcap_LDFLAGS =
 am__objects_1 = pcap-util-unix.$(OBJEXT)
 am__objects_2 = $(am__objects_1) capture_stop_conditions.$(OBJEXT) \
-	cfile.$(OBJEXT) conditions.$(OBJEXT) disabled_protos.$(OBJEXT) \
+	cfile.$(OBJEXT) clopts_common.$(OBJEXT) conditions.$(OBJEXT) \
+	disabled_protos.$(OBJEXT) packet-range.$(OBJEXT) \
 	pcap-util.$(OBJEXT) print.$(OBJEXT) ps.$(OBJEXT) \
-	range.$(OBJEXT) ringbuffer.$(OBJEXT) timestats.$(OBJEXT) \
+	ringbuffer.$(OBJEXT) timestats.$(OBJEXT) util.$(OBJEXT) \
 	version_info.$(OBJEXT)
 am_ethereal_OBJECTS = $(am__objects_2) alert_box.$(OBJEXT) \
 	capture.$(OBJEXT) capture_combo_utils.$(OBJEXT) \
@@ -1028,25 +1027,25 @@
 DEFAULT_INCLUDES =  -I. -I$(srcdir) -I.
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
-@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/alert_box.Po ./$(DEPDIR)/capinfo.Po \
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/alert_box.Po ./$(DEPDIR)/capinfos.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/capture.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/capture_combo_utils.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/capture_stop_conditions.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/cfile.Po ./$(DEPDIR)/color_filters.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/cfile.Po ./$(DEPDIR)/clopts_common.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/color_filters.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/conditions.Po ./$(DEPDIR)/dftest.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/disabled_protos.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/editcap.Po ./$(DEPDIR)/file.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/filters.Po ./$(DEPDIR)/g711.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/merge.Po ./$(DEPDIR)/mergecap.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/mkstemp.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/mkstemp.Po ./$(DEPDIR)/packet-range.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/pcap-util-unix.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/pcap-util.Po ./$(DEPDIR)/print.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/proto_hier_stats.Po ./$(DEPDIR)/ps.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/randpkt.Po ./$(DEPDIR)/range.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/ringbuffer.Po ./$(DEPDIR)/snprintf.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/strcasecmp.Po ./$(DEPDIR)/strerror.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/strncasecmp.Po ./$(DEPDIR)/strptime.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/summary.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/randpkt.Po ./$(DEPDIR)/ringbuffer.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/snprintf.Po ./$(DEPDIR)/strcasecmp.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/strerror.Po ./$(DEPDIR)/strncasecmp.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/strptime.Po ./$(DEPDIR)/summary.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/tap-ansi_astat.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/tap-bootpstat.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/tap-dcerpcstat.Po \
@@ -1069,7 +1068,7 @@
 @AMDEP_TRUE@	./$(DEPDIR)/tethereal.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/text2pcap-scanner.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/text2pcap.Po ./$(DEPDIR)/timestats.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/version_info.Po
+@AMDEP_TRUE@	./$(DEPDIR)/util.Po ./$(DEPDIR)/version_info.Po
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
@@ -1079,7 +1078,7 @@
 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
 LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
 LTLEXCOMPILE = $(LIBTOOL) --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS)
-DIST_SOURCES = capinfo.c $(dftest_SOURCES) $(editcap_SOURCES) \
+DIST_SOURCES = capinfos.c $(dftest_SOURCES) $(editcap_SOURCES) \
 	$(ethereal_SOURCES) $(EXTRA_ethereal_SOURCES) \
 	$(mergecap_SOURCES) $(randpkt_SOURCES) $(tethereal_SOURCES) \
 	$(text2pcap_SOURCES)
@@ -1102,7 +1101,7 @@
 	config.guess config.h.in config.sub configure configure.in \
 	depcomp doxygen.cfg.in install-sh ltmain.sh missing \
 	mkinstalldirs text2pcap-scanner.c
-SOURCES = capinfo.c $(dftest_SOURCES) $(editcap_SOURCES) $(ethereal_SOURCES) $(EXTRA_ethereal_SOURCES) $(mergecap_SOURCES) $(randpkt_SOURCES) $(tethereal_SOURCES) $(text2pcap_SOURCES)
+SOURCES = capinfos.c $(dftest_SOURCES) $(editcap_SOURCES) $(ethereal_SOURCES) $(EXTRA_ethereal_SOURCES) $(mergecap_SOURCES) $(randpkt_SOURCES) $(tethereal_SOURCES) $(text2pcap_SOURCES)
 
 all: $(BUILT_SOURCES) config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
@@ -1173,9 +1172,9 @@
 	  echo " rm -f $$p $$f"; \
 	  rm -f $$p $$f ; \
 	done
-capinfo$(EXEEXT): $(capinfo_OBJECTS) $(capinfo_DEPENDENCIES) 
-	@rm -f capinfo$(EXEEXT)
-	$(LINK) $(capinfo_LDFLAGS) $(capinfo_OBJECTS) $(capinfo_LDADD) $(LIBS)
+capinfos$(EXEEXT): $(capinfos_OBJECTS) $(capinfos_DEPENDENCIES) 
+	@rm -f capinfos$(EXEEXT)
+	$(LINK) $(capinfos_LDFLAGS) $(capinfos_OBJECTS) $(capinfos_LDADD) $(LIBS)
 dftest$(EXEEXT): $(dftest_OBJECTS) $(dftest_DEPENDENCIES) 
 	@rm -f dftest$(EXEEXT)
 	$(LINK) $(dftest_LDFLAGS) $(dftest_OBJECTS) $(dftest_LDADD) $(LIBS)
@@ -1225,11 +1224,12 @@
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alert_box.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/capinfo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/capinfos.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/capture.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/capture_combo_utils.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/capture_stop_conditions.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cfile.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clopts_common.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color_filters.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conditions.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dftest.Po@am__quote@
@@ -1241,13 +1241,13 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/merge.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mergecap.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkstemp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-range.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcap-util-unix.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcap-util.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proto_hier_stats.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ps.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/randpkt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/range.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ringbuffer.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snprintf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strcasecmp.Po@am__quote@
@@ -1278,6 +1278,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text2pcap-scanner.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text2pcap.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timestats.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version_info.Po@am__quote@
 
 .c.o:
@@ -1728,7 +1729,7 @@
 installcheck: installcheck-recursive
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -1754,7 +1755,6 @@
 distclean: distclean-recursive
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
 	-rm -rf ./$(DEPDIR)
-
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic distclean-hdr \
 	distclean-libtool distclean-tags
@@ -1783,7 +1783,6 @@
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
 	-rm -rf $(top_srcdir)/autom4te.cache
 	-rm -rf ./$(DEPDIR)
-
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
@@ -1845,7 +1844,14 @@
 # Build the short version of the authors file for the about dialog
 #
 AUTHORS-SHORT: AUTHORS make-authors-short.pl
-	$(PERL) $(srcdir)/make-authors-short.pl < AUTHORS > AUTHORS-SHORT
+	$(PERL) $(srcdir)/perlnoutf.pl $(srcdir)/make-authors-short.pl < AUTHORS > AUTHORS-SHORT
+
+#
+# Build the short version of the authors file with formatting codes for the
+# man page
+#
+AUTHORS-SHORT-FORMAT: AUTHORS-SHORT make-authors-format.pl
+	$(PERL) $(srcdir)/perlnoutf.pl $(srcdir)/make-authors-format.pl < AUTHORS-SHORT > AUTHORS-SHORT-FORMAT
 .sh:
 	rm -f $@ $@.tmp
 	$(editsh) $< > $@.tmp && chmod +x $@.tmp && mv $@.tmp $@
@@ -1879,7 +1885,7 @@
 @SETUID_INSTALL_TRUE@	-chmod +s $(DESTDIR)$(bindir)/tethereal
 @SETUID_INSTALL_FALSE@install-exec-hook:
 
-ethereal.1: doc/ethereal.pod AUTHORS-SHORT
+ethereal.1: doc/ethereal.pod AUTHORS-SHORT-FORMAT
 	(cd doc ; \
 	$(MAKE) ../ethereal.1 )
 
@@ -1891,9 +1897,9 @@
 	(cd doc ; \
 	$(MAKE) ../ethereal-filter.4 )
 
-capinfo.1: doc/capinfo.pod
+capinfos.1: doc/capinfos.pod
 	(cd doc ; \
-	$(MAKE) ../capinfo.1 )
+	$(MAKE) ../capinfos.1 )
 
 editcap.1: doc/editcap.pod
 	(cd doc ; \
@@ -1911,7 +1917,7 @@
 	(cd doc ; \
 	$(MAKE) ../text2pcap.1 )
 
-ethereal.html: doc/ethereal.pod AUTHORS-SHORT
+ethereal.html: doc/ethereal.pod AUTHORS-SHORT-FORMAT
 	(cd doc ; \
 	$(MAKE) ../ethereal.html )
 
@@ -1923,9 +1929,9 @@
 	(cd doc ; \
 	$(MAKE) ../ethereal-filter.html )
 
-capinfo.html: doc/capinfo.pod
+capinfos.html: doc/capinfos.pod
 	(cd doc ; \
-	$(MAKE) ../capinfo.html )
+	$(MAKE) ../capinfos.html )
 
 editcap.html: doc/editcap.pod
 	(cd doc ; \
diff -urN ethereal-0.10.6/Makefile.nmake ethereal-0.10.7/Makefile.nmake
--- ethereal-0.10.6/Makefile.nmake	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/Makefile.nmake	2004-10-20 17:34:33.000000000 -0500
@@ -1,7 +1,7 @@
 ## Makefile for building ethereal.exe with Microsoft C and nmake
 ## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake
 #
-# $Id: Makefile.nmake 11720 2004-08-11 21:21:44Z gerald $
+# $Id: Makefile.nmake 12359 2004-10-20 19:07:50Z gerald $
 
 include config.nmake
 include <win32.mak>
@@ -50,7 +50,7 @@
 
 ethereal_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \
 	wsock32.lib user32.lib shell32.lib \
-	$(NET_SNMP_DIR)\win32\lib\netsnmp.lib \
+	$(NET_SNMP_DIR)\win32\lib\release\netsnmp.lib \
 !IFDEF ENABLE_LIBETHEREAL
 	epan\libethereal.lib \
 !ELSE
@@ -66,7 +66,7 @@
 tethereal_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \
 	wsock32.lib user32.lib \
 	$(GLIB_LIBS) \
-	$(NET_SNMP_DIR)\win32\lib\netsnmp.lib \
+	$(NET_SNMP_DIR)\win32\lib\release\netsnmp.lib \
 !IFDEF ENABLE_LIBETHEREAL
 	epan\libethereal.lib \
 !ELSE
@@ -78,7 +78,7 @@
 	$(ZLIB_LIBS)
 !ENDIF
 
-capinfo_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \
+capinfos_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \
 	wsock32.lib user32.lib \
 	$(GLIB_LIBS)
 
@@ -93,7 +93,7 @@
 dftest_LIBS=  wiretap\wiretap-$(WTAP_VERSION).lib \
 	wsock32.lib user32.lib \
 	$(GLIB_LIBS) \
-	$(NET_SNMP_DIR)\win32\lib\netsnmp.lib \
+	$(NET_SNMP_DIR)\win32\lib\release\netsnmp.lib \
 !IFDEF ENABLE_LIBETHEREAL
 	epan\libethereal.lib \
 !ELSE
@@ -108,13 +108,13 @@
 randpkt_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \
 	user32.lib \
 	$(GLIB_LIBS) \
-	$(NET_SNMP_DIR)\win32\lib\netsnmp.lib
+	$(NET_SNMP_DIR)\win32\lib\release\netsnmp.lib
 
 EXECUTABLES=ethereal.exe ethereal-gtk2.exe tethereal.exe \
-	capinfo.exe editcap.exe mergecap.exe text2pcap.exe
+	capinfos.exe editcap.exe mergecap.exe text2pcap.exe
 
 RESOURCES=image\ethereal.res image\libethereal.res image\tethereal.res \
-	image\capinfo.res image\editcap.res image\mergecap.res \
+	image\capinfos.res image\editcap.res image\mergecap.res \
 	image\text2pcap.res image\wiretap.res
 
 all: config.h tools image wiretap epan $(EXECUTABLES) $(RESOURCES) doc
@@ -145,33 +145,33 @@
 !IFNDEF GTK1_DIR
 ethereal.exe	: 
 !ELSE
-ethereal.exe	: config.h svnversion.h $(ethereal_OBJECTS) $(EXTRA_OBJECTS) epan gtk image\ethereal.res wiretap\wiretap-$(WTAP_VERSION).lib gtk\libui.lib plugins
+ethereal.exe	: config.h svnversion.h $(ethereal_OBJECTS) epan gtk image\ethereal.res wiretap\wiretap-$(WTAP_VERSION).lib gtk\libui.lib plugins
 	@echo Linking $@
 	$(LINK) @<<
-		/OUT:ethereal.exe $(guiflags) $(guilibsdll) $(LDFLAGS) /SUBSYSTEM:windows $(ethereal_LIBS) $(GTK1_LIBS) gtk\libui.lib $(ethereal_OBJECTS) $(EXTRA_OBJECTS) image\ethereal.res
+		/OUT:ethereal.exe $(guiflags) $(guilibsdll) $(LDFLAGS) /SUBSYSTEM:windows $(ethereal_LIBS) $(GTK1_LIBS) gtk\libui.lib $(ethereal_OBJECTS) image\ethereal.res
 <<
 !ENDIF
 
 !IFNDEF GTK2_DIR
 ethereal-gtk2.exe	: 
 !ELSE
-ethereal-gtk2.exe	: config.h svnversion.h $(ethereal_OBJECTS) $(EXTRA_OBJECTS) epan gtk2 image\ethereal.res wiretap\wiretap-$(WTAP_VERSION).lib gtk2.tmp\libui.lib plugins
+ethereal-gtk2.exe	: config.h svnversion.h $(ethereal_OBJECTS) epan gtk2 image\ethereal.res wiretap\wiretap-$(WTAP_VERSION).lib gtk2.tmp\libui.lib plugins
 	@echo Linking $@
 	$(LINK) @<<
-		/OUT:ethereal-gtk2.exe $(guiflags) $(guilibsdll) $(LDFLAGS) /SUBSYSTEM:windows $(ethereal_LIBS) $(GTK2_LIBS) gtk2.tmp\libui.lib $(ethereal_OBJECTS) $(EXTRA_OBJECTS) image\ethereal.res
+		/OUT:ethereal-gtk2.exe $(guiflags) $(guilibsdll) $(LDFLAGS) /SUBSYSTEM:windows $(ethereal_LIBS) $(GTK2_LIBS) gtk2.tmp\libui.lib $(ethereal_OBJECTS) image\ethereal.res
 <<
 !ENDIF
 
-tethereal.exe	: config.h svnversion.h $(tethereal_OBJECTS) $(EXTRA_OBJECTS) epan image\tethereal.res wiretap\wiretap-$(WTAP_VERSION).lib plugins
+tethereal.exe	: config.h svnversion.h $(tethereal_OBJECTS) epan image\tethereal.res wiretap\wiretap-$(WTAP_VERSION).lib plugins
 	@echo Linking $@
 	$(LINK) @<<
-		/OUT:tethereal.exe $(conflags) $(conlibsdll) $(LDFLAGS) /SUBSYSTEM:console $(tethereal_LIBS) $(tethereal_OBJECTS) $(EXTRA_OBJECTS) image\tethereal.res
+		/OUT:tethereal.exe $(conflags) $(conlibsdll) $(LDFLAGS) /SUBSYSTEM:console $(tethereal_LIBS) $(tethereal_OBJECTS) image\tethereal.res
 <<
 
-capinfo.exe	: config.h capinfo.obj getopt.obj wiretap\wiretap-$(WTAP_VERSION).lib image\capinfo.res
+capinfos.exe	: config.h capinfos.obj getopt.obj wiretap\wiretap-$(WTAP_VERSION).lib image\capinfos.res
 	@echo Linking $@
 	$(LINK) @<<
-		/OUT:capinfo.exe $(conflags) $(conlibsdll) $(LDFLAGS) /SUBSYSTEM:console capinfo.obj getopt.obj $(capinfo_LIBS) image\capinfo.res
+		/OUT:capinfos.exe $(conflags) $(conlibsdll) $(LDFLAGS) /SUBSYSTEM:console capinfos.obj getopt.obj $(capinfos_LIBS) image\capinfos.res
 <<
 
 editcap.exe	: config.h editcap.obj getopt.obj wiretap\wiretap-$(WTAP_VERSION).lib image\editcap.res
@@ -192,12 +192,12 @@
 		/OUT:text2pcap.exe $(conflags) $(conlibsdll) $(LDFLAGS) /SUBSYSTEM:console text2pcap.obj text2pcap-scanner.obj getopt.obj strptime.obj image\text2pcap.res
 <<
 
-dftest.exe	: $(dftest_OBJECTS) $(EXTRA_OBJECTS) epan
+dftest.exe	: $(dftest_OBJECTS) epan
 	$(LINK) @<<
-		/OUT:dftest.exe $(conflags) $(conlibsdll) $(LDFLAGS) /SUBSYSTEM:console $(dftest_LIBS) $(dftest_OBJECTS) $(EXTRA_OBJECTS)
+		/OUT:dftest.exe $(conflags) $(conlibsdll) $(LDFLAGS) /SUBSYSTEM:console $(dftest_LIBS) $(dftest_OBJECTS)
 <<
 
-randpkt.exe	: $(randpkt_OBJECTS) $(EXTRA_OBJECTS)
+randpkt.exe	: $(randpkt_OBJECTS)
 	$(LINK) @<<
 		/OUT:randpkt.exe $(conflags) $(conlibsdll) $(LDFLAGS) /SUBSYSTEM:console $(randpkt_LIBS) $(randpkt_OBJECTS)
 <<
@@ -206,12 +206,14 @@
 	sed -e s/@VERSION@/$(VERSION)/ \
 	    -e "s/@HAVE_GNU_ADNS@/$(ADNS_CONFIG)/" \
 	    -e "s/@HAVE_PCRE@/$(PCRE_CONFIG)/" \
+	    -e "s/@HAVE_NETTLE@/$(NETTLE_CONFIG)/" \
 	    -e "s/@HAVE_LIBZ@/$(ZLIB_CONFIG)/" \
 	    -e "s/@HAVE_LIBPCAP@/$(WINPCAP_CONFIG)/" \
 	    -e "s/@HAVE_PCAP_FINDALLDEVS@/$(PCAP_FINDALLDEVS_CONFIG)/" \
+	    -e "s/@HAVE_PCAP_DATALINK_NAME_TO_VAL@/$(PCAP_DATALINK_NAME_TO_VAL_CONFIG)/" \
+	    -e "s/@HAVE_PCAP_DATALINK_VAL_TO_NAME@/$(PCAP_DATALINK_VAL_TO_NAME_CONFIG)/" \
 	    -e "s/@HAVE_LIBETHEREALDLL@/$(LIBETHEREAL_CONFIG)/" \
 	    -e "s/@WPCAP_CONSTIFIED@/$(WPCAP_CONSTIFIED_CONFIG)/" \
-	    -e "s/@HAVE_LIBETHEREALDLL@/$(LIBETHEREAL_CONFIG)/" \
 	    < config.h.win32 > $@
 
 ps.c	: rdps.exe print.ps
@@ -228,8 +230,14 @@
 # Build the short version of the authors file for the about dialog
 #
 AUTHORS-SHORT: AUTHORS make-authors-short.pl
-	$(PERL) make-authors-short.pl < AUTHORS > AUTHORS-SHORT
+	$(PERL) perlnoutf.pl make-authors-short.pl < AUTHORS > AUTHORS-SHORT
 
+#
+# Build the short version of the authors file with formatting codes for
+# the man page
+#
+AUTHORS-SHORT-FORMAT: AUTHORS-SHORT make-authors-format.pl
+    $(PERL) perlnoutf.pl make-authors-format.pl < AUTHORS-SHORT > AUTHORS-SHORT-FORMAT
 
 #
 # Build "tethereal-tap-register.c", which contains a function 
@@ -260,9 +268,10 @@
 clean: gtk2_distclean
 	rm -f $(ethereal_OBJECTS) $(tethereal_OBJECTS) $(EXTRA_OBJECTS) \
 		$(EXECUTABLES) $(PDB_FILE) \
-		capinfo.obj editcap.obj mergecap.obj text2pcap.obj getopt.obj\
+		capinfos.obj editcap.obj mergecap.obj text2pcap.obj getopt.obj\
 		text2pcap-scanner.obj text2pcap-scanner.c rdps.obj \
 		rdps.pdb rdps.exe rdps.ilk config.h ps.c AUTHORS-SHORT \
+		AUTHORS-SHORT-FORMAT \
 		dftest.obj dftest.exe randpkt.obj randpkt.ext doxygen.cfg \
 		$(RESOURCES)
 	cd wiretap
@@ -370,7 +379,7 @@
 
 doxygen: doxygen.cfg doxygen-run
 
-REQUIRED_APPS=\
+REQUIRED_TOOLS=\
 	$(SH)	\
 	$(YACC)	\
 	$(LEX)	\
@@ -381,15 +390,17 @@
 	unzip	\
 	wget
 
-verify_apps:
-	@$(SH) tools\win32-setup.sh --appverify $(REQUIRED_APPS)
+verify_tools:
+	@$(SH) tools\win32-setup.sh --appverify $(REQUIRED_TOOLS)
 
-setup: verify_apps
+# Download and install all the required libraries into ETHEREAL_LIBS.
+# If you used this setup target before, consider doing a clean_setup.
+setup: verify_tools
 !IF "$(GTK2_INST_VERSION)" == "2.4"
 	@$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
-		glib gtk2.4/glib-2.4.5.zip
+		glib gtk2.4/glib-2.4.7.zip
 	@$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
-		glib gtk2.4/glib-dev-2.4.5.zip
+		glib gtk2.4/glib-dev-2.4.7.zip
 !ELSE
 	@$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
 		glib glib-2.2.3-20040116.zip
@@ -408,7 +419,7 @@
 		gettext-runtime-0.13.1 gettext-runtime-0.13.1.zip
 !IFDEF NET_SNMP_DIR
 	@$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
-		. net-snmp-5.1.zip
+		. net-snmp-5.1.2.zip
 !ENDIF
 !IFDEF PCAP_DIR
 	@$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
@@ -416,7 +427,7 @@
 !ENDIF
 !IFDEF ADNS_DIR
 	@$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
-		. adns-1.0-win32-03.zip
+		. adns-1.0-win32-04.zip
 !ENDIF
 !IFDEF PCRE_DIR
 	@$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
@@ -429,9 +440,9 @@
 !IFDEF GTK2_DIR
 !IF "$(GTK2_INST_VERSION)" == "2.4"
 	@$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
-		gtk2 gtk2.4/gtk+-2.4.4-20040808.zip
+		gtk2 gtk2.4/gtk+-2.4.10-20041001.zip
 	@$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
-		gtk2 gtk2.4/gtk+-dev-2.4.4.zip
+		gtk2 gtk2.4/gtk+-dev-2.4.10.zip
 	@$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
 		gtk2 gtk2.4/atk-1.6.0.zip
 	@$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
@@ -460,11 +471,22 @@
 !ENDIF
 !IFDEF GTK_WIMP_DIR
 	@$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
-		gtk-wimp gtk-wimp/gtk-wimp-0.6.1-bin.zip
+		gtk-wimp gtk-wimp/gtk-wimp-0.6.2-bin.zip
 !ENDIF
 	@echo.
 	@echo Ethereal is ready to build.
 
+# Cleanup files installed by the setup target. It will not remove the 
+# downloaded zip files.
+clean_setup:
+    rm -r -f $(ETHEREAL_LIBS)/glib
+    rm -r -f $(ETHEREAL_LIBS)/gtk+
+    rm -r -f $(ETHEREAL_LIBS)/libiconv-1.9.1.bin.woe32
+    rm -r -f $(ETHEREAL_LIBS)/gettext-runtime-0.13.1
+    rm -r -f $(ETHEREAL_LIBS)/zlib121-dll
+    rm -r -f $(ETHEREAL_LIBS)/gtk2
+    rm -r -f $(ETHEREAL_LIBS)/gtk-wimp
+
 update_plugin_api: config.h
 	cd plugins
 	$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake xyzzy
diff -urN ethereal-0.10.6/NEWS ethereal-0.10.7/NEWS
--- ethereal-0.10.6/NEWS	2004-08-12 21:02:55.000000000 -0500
+++ ethereal-0.10.7/NEWS	2004-10-20 17:34:33.000000000 -0500
@@ -1,4 +1,53 @@
-$Id: NEWS 11731 2004-08-13 02:02:50Z gerald $
+$Id: NEWS 12359 2004-10-20 19:07:50Z gerald $
+
+== October 20, 2004
+
+Ethereal 0.10.7 has been released.
+
+  The Windows installer features new GLib/GTK+, Net-SNMP and ADNS
+  libraries which fix several known bugs.  Unfortunately, a few known
+  GLib/GTK+ bugs remain.
+
+  In order to avoid a naming conflict with the tcpreplay project, the
+  "capinfo" utility has been renamed to "capinfos".
+
+
+New and updated features
+
+  Search wrapping is now a configurable option.
+  
+  A lot of material has been added to the Developer's Guide.  The User's Guide
+  has been updated as well.
+  
+  The "Decode As..." dialog now supports DCERPC and SCTP.
+  
+  The "Help" menu now includes a link to the wiki.
+  
+  H.323 call analysis is now supported.
+
+
+New protocol support
+
+  Cisco PAgP, DAAP, Etheric, Ethernet Configuration Testing Protocol,
+  Ethernet MAC Control Frame, ICE, Kerberos v4, Netscape certificate
+  extensions, PKINIT, PKIX1EXPLICIT, PKIX1IMPLICIT,
+
+
+Updated protocol support
+
+  AIM, ARTNET, ASN.1 BER, ASN.1 PER, ASN.1, BGP, BOOTP, CIP, CLNP, COPS,
+  DCERPC MAPI, DCERPC SAMR, DCERPC, DCOM, DHCP, DHCPv6, DIAMETER, DNS,
+  EAP, ENIP, EPM, GRE, GSM A, GSM MAP, H.225, H.245, H.248 MEGACO, H.450,
+  ISAKMP, iSCSI, iSNS, ISUP, JFIF, Kerberos, LDAP, LDP, LLC, LWAPP, M2PA,
+  MEGACO, MPLS, NCP 2222, NCP, NDMP, NetFlow, NTLMSSP, OSCAR-ICQ, OSPF,
+  RADIUS, RSVP, RTCP, RTP, RTSP, SCTP, SDP, SES, SIP, Skinny, SMB, SNMP,
+  SUA, T.38, TALI, TCAP, TCP, TDS, Teredo, Time, X.509, X11,
+
+
+New and updated capture file support
+
+  HP-UX nettl, NG Sniffer
+
 
 == August 12, 2004
 
diff -urN ethereal-0.10.6/README.irix ethereal-0.10.7/README.irix
--- ethereal-0.10.6/README.irix	2004-08-12 17:41:31.000000000 -0500
+++ ethereal-0.10.7/README.irix	2004-10-20 17:34:18.000000000 -0500
@@ -1,7 +1,7 @@
-$Id: README.irix 11400 2004-07-18 00:24:25Z guy $
+$Id: README.irix 11758 2004-08-17 01:12:29Z guy $
 
 1. Some problems seen by one person who tried to build Ethereal on IRIX;
-your mileage may vary.
+your mileage may vary.  Some comments hae been added.
 
 To: ethereal-dev@zing.org
 Subject: Re: [ethereal-dev] Ethereal on SGI
@@ -36,6 +36,11 @@
    BETTER SOLUTION:  Modify configure to support RPATH for more platforms
                      than Solaris.
 
+[NOTE: configure is generated from configure.in and acinclude.m4, and
+all the linking stuff is done by libtool.  We don't recommend the
+LD_LIBRARY_PATH hack - perhaps we did so in the past, but we don't do so
+now.]
+
 ==========
 PROBLEM #2
 ==========
@@ -57,6 +62,10 @@
 
 Randall
 
+[NOTE: we don't use the __P macro ourselves; some of the SNMP libraries
+might, but that's a bug in the libraries if they require you to define
+__P in order to use them.]
+
 ===============================================================================
 
 Problem #1:
@@ -115,127 +124,11 @@
 
 2. Patches to libpcap that may be necessary
 
-On IRIX, the libpcap library uses, in "pcap_open_live()", the snapshot
-length passed in, without reducing it to be less than or equal to the
-MTU of the interface.  If the snapshot length is larger than the
-interface MTU, IRIX will return an error; this means that, for example,
-the Ethereal default snapshot length of 65535, chosen so that all of the
-packet is captured, will not work.
-
-Here is a patch to libpcap 0.4 source that should fix that problem.  If
-it doesn't fix the problem, or if it reduces the snapshot length below
-the MTU (so that a snapshot length of 65535 doesn't capture all the data
-in the packets), please report this to ethereal-dev@ethereal.com, so
-that we know that it didn't work - we'll probably send you debugging
-patches in the hopes of being able to make it work.
-
-diff -c ../libpcap-0.4/pcap-snoop.c ./pcap-snoop.c
-*** ../libpcap-0.4/pcap-snoop.c	Tue Apr  8 21:07:01 1997
---- ./pcap-snoop.c	Tue Jan 18 00:16:18 2000
-***************
-*** 126,132 ****
---- 126,135 ----
-  	struct sockaddr_raw sr;
-  	struct snoopfilter sf;
-  	u_int v;
-+ 	int ll_hdrlen;
-+ 	int snooplen;
-  	pcap_t *p;
-+ 	struct ifreq ifr;
-  
-  	p = (pcap_t *)malloc(sizeof(*p));
-  	if (p == NULL) {
-***************
-*** 154,169 ****
-  	}
-  	v = 64 * 1024;
-  	(void)setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (char *)&v, sizeof(v));
-- 	if (ioctl(fd, SIOCSNOOPLEN, &snaplen) < 0) {
-- 		sprintf(ebuf, "SIOCSNOOPLEN: %s", pcap_strerror(errno));
-- 		goto bad;
-- 	}
-- 	p->snapshot = snaplen;
-- 	v = 1;
-- 	if (ioctl(fd, SIOCSNOOPING, &v) < 0) {
-- 		sprintf(ebuf, "SIOCSNOOPING: %s", pcap_strerror(errno));
-- 		goto bad;
-- 	}
-  	/*
-  	 * XXX hack - map device name to link layer type
-  	 */
---- 157,162 ----
-***************
-*** 179,195 ****
---- 172,242 ----
-  	    strncmp("qaa", device, 3) == 0) {
-  		p->linktype = DLT_EN10MB;
-  		p->offset = RAW_HDRPAD(sizeof(struct ether_header));
-+ 		ll_hdrlen = sizeof(struct ether_header);
-  	} else if (strncmp("ipg", device, 3) == 0 ||
-  		   strncmp("rns", device, 3) == 0 ||	/* O2/200/2000 FDDI */
-  		   strncmp("xpi", device, 3) == 0) {
-  		p->linktype = DLT_FDDI;
-  		p->offset = 3;				/* XXX yeah? */
-+ 		ll_hdrlen = 13;
-  	} else if (strncmp("ppp", device, 3) == 0) {
-  		p->linktype = DLT_RAW;
-+ 		ll_hdrlen = 0;	/* DLT_RAW meaning "no PPP header, just the IP packet"? */
-  	} else if (strncmp("lo", device, 2) == 0) {
-  		p->linktype = DLT_NULL;
-+ 		ll_hdrlen = 4;	/* is this just like BSD's loopback device? */
-  	} else {
-  		sprintf(ebuf, "snoop: unknown physical layer type");
-+ 		goto bad;
-+ 	}
-+ #ifdef SIOCGIFMTU
-+ 	/*
-+ 	 * XXX - IRIX appears to give you an error if you try to set the
-+ 	 * capture length to be greater than the MTU, so let's try to get
-+ 	 * the MTU first and, if that succeeds, trim the snap length
-+ 	 * to be no greater than the MTU.
-+ 	 */
-+ 	(void)strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
-+ 	if (ioctl(fd, SIOCGIFMTU, (char *)&ifr) < 0) {
-+ 		sprintf(ebuf, "SIOCGIFMTU: %s", pcap_strerror(errno));
-+ 		goto bad;
-+ 	}
-+ 	/*
-+ 	 * OK, we got it.
-+ 	 * XXX - some versions of IRIX 6.5 define "ifr_mtu" and have an
-+ 	 * "ifru_metric" member of the "ifr_ifru" union in an "ifreq"
-+ 	 * structure, others don't.
-+ 	 *
-+ 	 * I've no idea what's going on, so, if "ifr_mtu" isn't defined,
-+ 	 * we define it as "ifr_metric", as using that field appears to
-+ 	 * work on the versions that lack "ifr_mtu" (and, on those that
-+ 	 * don't lack it, "ifru_metric" and "ifru_mtu" are both "int"
-+ 	 * members of the "ifr_ifru" union, which suggests that they
-+ 	 * may be interchangeable in this case).
-+ 	 */
-+ #ifndef ifr_mtu
-+ #define ifr_mtu	ifr_metric
-+ #endif
-+ 	if (snaplen > ifr.ifr_mtu)
-+ 		snaplen = ifr.ifr_mtu;
-+ #endif
-+ 
-+ 	/*
-+ 	 * The argument to SIOCSNOOPLEN is the number of link-layer
-+ 	 * payload bytes to capture - it doesn't count link-layer
-+ 	 * header bytes.
-+ 	 */
-+ 	snooplen = snaplen - ll_hdrlen;
-+ 	if (snooplen < 0)
-+ 		snooplen = 0;
-+ 	if (ioctl(fd, SIOCSNOOPLEN, &snooplen) < 0) {
-+ 		sprintf(ebuf, "SIOCSNOOPLEN: %s", pcap_strerror(errno));
-+ 		goto bad;
-+ 	}
-+ 	p->snapshot = snaplen;
-+ 	v = 1;
-+ 	if (ioctl(fd, SIOCSNOOPING, &v) < 0) {
-+ 		sprintf(ebuf, "SIOCSNOOPING: %s", pcap_strerror(errno));
-  		goto bad;
-  	}
-  
+On IRIX, older versions of the libpcap library use, in
+"pcap_open_live()", the snapshot length passed in, without reducing it
+to be less than or equal to the MTU of the interface.  If the snapshot
+length is larger than the interface MTU, IRIX will return an error; this
+means that, for example, the Ethereal default snapshot length of 65535,
+chosen so that all of the packet is captured, will not work.
 
+Current versions of libpcap, from tcpdump.org, do not do so.
diff -urN ethereal-0.10.6/README.macos ethereal-0.10.7/README.macos
--- ethereal-0.10.6/README.macos	2004-08-12 17:41:40.000000000 -0500
+++ ethereal-0.10.7/README.macos	2004-10-20 17:34:27.000000000 -0500
@@ -1,4 +1,4 @@
-$Id: README.macos 11400 2004-07-18 00:24:25Z guy $
+$Id: README.macos 11757 2004-08-17 00:34:26Z guy $
 
 This file tries to help building Ethereal for Mac OS X (Ethereal does
 not work on earlier versions of Mac OS).
@@ -71,26 +71,3 @@
 
 	if they are installed, the configure script will configure
 	Ethereal to build with them.
-
-Another problem are compile errors in the wiretap directory like the
-following:
-pcap-util.c: In function `get_interface_list_findalldevs':
-pcap-util.c:195: error: `pcap_if_t' undeclared (first use in this function)
-
-On first sight, it would appear that Mac OS X 10.x ships with a weird
-version of libpcap that includes pcap_findalldevs, but no definition for
-pcap_if_t.
-
-As it turns out, this isn't true for Mac OS X 10.3 through 10.3.2; they
-ships with an 0.6[.x]-derived libpcap that doesn't include
-"pcap_findalldevs()".  The problem in those releases is caused by a
-Security Update - it updates the libpcap dylib to 0.8.1, but doesn't
-update the header files (or the man page - and also doesn't update the
-tcpdump man page to 3.8.1).
-
-In addition, the Software Update to 10.3.3 and later will update the
-libpcap dylib but not the header files.  If systems come pre-installed
-with 10.3.3, they might have the correct header files (and man pages).
-
-As a workaround, install pcap.h and pcap-bpf.h from
-tcpdump.org's libpcap 0.8.1 in "/usr/include".
diff -urN ethereal-0.10.6/README.win32 ethereal-0.10.7/README.win32
--- ethereal-0.10.6/README.win32	2004-08-12 17:41:39.000000000 -0500
+++ ethereal-0.10.7/README.win32	2004-10-20 17:34:25.000000000 -0500
@@ -1,4 +1,4 @@
-$Id: README.win32 11400 2004-07-18 00:24:25Z guy $
+$Id: README.win32 12086 2004-09-24 16:08:44Z ulfl $
 
 Installing Ethereal, Tethereal, and Editcap on Win32
 ====================================================
@@ -125,7 +125,7 @@
 the tool wget to download each package file (together around 30MB!) from the 
 server location at:
 
-http://www.ethereal.com/distribution/win32/development/
+	http://anonsvn.ethereal.com/ethereal-win32-libs/trunk/packages/
 
 and unpack it in the $ETHEREAL_LIBS directory. 
 
@@ -146,7 +146,7 @@
 
 PRECOMPILED VERSIONS OF ALL OF THESE PACKAGES ARE AVAILABLE AT:
 
-	http://www.ethereal.com/distribution/win32/development/
+	http://anonsvn.ethereal.com/ethereal-win32-libs/trunk/packages/
 
 
 The GLIB, GTK+, iconv, gettext packages for win32 can be found at the home 
diff -urN ethereal-0.10.6/TODO ethereal-0.10.7/TODO
--- ethereal-0.10.6/TODO	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/TODO	2004-10-20 17:35:06.000000000 -0500
@@ -1,4 +1,4 @@
-$Id: TODO 11400 2004-07-18 00:24:25Z guy $
+$Id: TODO 12190 2004-10-03 12:26:09Z ulfl $
 
 Things to do:
 =============
@@ -88,9 +88,9 @@
 
 *) A GtkWidget for authors in the About box. We've got a lot of authors!
 We've currently banished the list of authors to the AUTHORS file and the
-man page, which may be the right solution here.
+man page, which may be the right solution here. [DONE]
 
-*) Finish moving GTK-dependent code into gtk/ subdirectory.
+*) Finish moving GTK-dependent code into gtk/ subdirectory. [DONE]
 
 *) Provide alternative user interfaces, e.g. other toolkits (Qt/KDE,
 full GNOME, native Windows, native Aqua, etc.) and text-mode "curses".
diff -urN ethereal-0.10.6/acinclude.m4 ethereal-0.10.7/acinclude.m4
--- ethereal-0.10.6/acinclude.m4	2004-08-12 17:41:40.000000000 -0500
+++ ethereal-0.10.7/acinclude.m4	2004-10-20 17:34:27.000000000 -0500
@@ -2,7 +2,7 @@
 dnl This file is part of the Autoconf packaging for Ethereal.
 dnl Copyright (C) 1998-2000 by Gerald Combs.
 dnl
-dnl $Id: acinclude.m4 11513 2004-07-25 08:36:34Z guy $
+dnl $Id: acinclude.m4 12302 2004-10-15 06:51:48Z jmayer $
 dnl
 dnl This program is free software; you can redistribute it and/or modify
 dnl it under the terms of the GNU General Public License as published by
@@ -106,7 +106,7 @@
 #	  ifdef HAVE_INTTYPES_H
 	  #include <inttypes.h>
 #	  endif
-	  #include <glib.h>
+	  #include <glibconfig.h>
 	  #include <stdio.h>
 	  #include <sys/types.h>
 
@@ -419,9 +419,57 @@
 	else
 		AC_MSG_RESULT(no)
 	fi
-	AC_CHECK_FUNCS(pcap_findalldevs pcap_lib_version pcap_open_dead)
-	AC_CHECK_FUNCS(pcap_datalink_val_to_name pcap_datalink_name_to_val)
-	AC_CHECK_FUNCS(pcap_list_datalinks pcap_set_datalink)
+	AC_CHECK_FUNCS(pcap_open_dead)
+	#
+	# Later versions of Mac OS X 10.3[.x] ship a pcap.h that
+	# doesn't define pcap_if_t but ship an 0.8[.x] libpcap,
+	# so the library has "pcap_findalldevs()", but pcap.h
+	# doesn't define "pcap_if_t" so you can't actually *use*
+	# "pcap_findalldevs()".
+	#
+	# That even appears to be true of systems shipped with
+	# 10.3.4, so it doesn't appear only to be a case of
+	# Software Update not updating header files.
+	#
+	# (You can work around this by installing the 0.8 header
+	# files.)
+	#
+	AC_CACHE_CHECK([whether pcap_findalldevs is present and usable],
+	  [ac_cv_func_pcap_findalldevs],
+	  [
+	    AC_LINK_IFELSE(
+	      [
+		AC_LANG_SOURCE(
+		  [[
+		    #include <pcap.h>
+		    main()
+		    {
+		      pcap_if_t *devpointer;
+		      char errbuf[1];
+
+		      pcap_findalldevs(&devpointer, errbuf);
+		    }
+		  ]])
+	      ],
+	      [
+		ac_cv_func_pcap_findalldevs=yes
+	      ],
+	      [
+		ac_cv_func_pcap_findalldevs=no
+	      ])
+	  ])
+	#
+	# Don't check for other new routines that showed up after
+	# "pcap_findalldevs()" if we don't have a usable
+	# "pcap_findalldevs()", so we don't end up using them if the
+	# "pcap.h" is crufty and old and doesn't declare them.
+	#
+	if test $ac_cv_func_pcap_findalldevs = "yes" ; then
+	  AC_DEFINE(HAVE_PCAP_FINDALLDEVS, 1,
+	   [Define to 1 if you have the `pcap_findalldevs' function and a pcap.h that declares pcap_if_t.])
+	  AC_CHECK_FUNCS(pcap_datalink_val_to_name pcap_datalink_name_to_val)
+	  AC_CHECK_FUNCS(pcap_list_datalinks pcap_set_datalink pcap_lib_version)
+	fi
 	LIBS="$ac_save_LIBS"
 ])
 
@@ -720,9 +768,13 @@
 		# libraries on various platforms, such as "-ldes425"
 		# in "/usr/kerberos/lib" on some versions of Red
 		# Hat Linux, or "-lkstat" on Solaris.
-		# XXX - it may also require "-lcrypto" on some platforms;
-		# we should check for that as well, rather than requiring
-		# users to explicitly indicate whether it's required.
+		#
+		# It might also require "-lcrypto" on some platforms;
+		# if the user didn't specify --with-ssl, we check
+		# whether it would have made a difference and, if so,
+		# we tell the user that they needed to request it.
+		# (There are annoying licensing issues with it and
+		# GPL'ed code, so we don't include it by default.)
 		#
 		# XXX - autoconf really needs a way to test for
 		# a given routine in a given library *and* to test
@@ -732,40 +784,64 @@
 		# needed after the library *and* to cache all that
 		# information.
 		#
-		ac_save_LIBS="$LIBS"
+		ethereal_save_LIBS="$LIBS"
+		found_sprint_realloc_objid=no
 		for extras in "" "-L/usr/kerberos/lib -ldes425" "-lkstat"
 		do
 			LIBS="-lsnmp $extras $SOCKET_LIBS $NSL_LIBS $SSL_LIBS"
+			if test -z "$extras"
+			then
+				AC_MSG_CHECKING([whether UCD SNMP includes sprint_realloc_objid])
+			else
+				AC_MSG_CHECKING([whether UCD SNMP includes sprint_realloc_objid (linking with $extras)])
+			fi
 			AC_TRY_LINK(
-			[
-			],
-			[
-			sprint_realloc_objid();
-			],
-			[
-			SNMP_LIBS="-lsnmp $extras"; break;
-			],
-			[
-			])
-			
-#        int sprint_realloc_objid(u_char **buf, size_t *buf_len, size_t *out_len, int allow_realloc, const oid *objid, size_t objidlen);
-#        AC_TRY_LINK(includes, body, [if-found], [if-not-found])
-#			AC_CHECK_LIB(snmp, sprint_realloc_objid,
-#			  [
-#				SNMP_LIBS="-lsnmp $extras"; break
-#			  ],
-#			  [
-#				#
-#				# Throw away the cached "we didn't find it"
-#				# answer, so that if we rerun "configure",
-#				# we still do all these checks and don't
-#				# just blithely assume we don't need
-#				# the extra libraries.
-#				#
-#				unset ac_cv_lib_snmp_sprint_realloc_objid
-#			  ], $SOCKET_LIBS $NSL_LIBS $SSL_LIBS $extras)
+			    [
+			    ],
+			    [
+				sprint_realloc_objid();
+			    ],
+			    [
+				#
+				# We found "sprint_realloc_objid()",
+				# and required the libraries in
+				# extras as well.
+				#
+				AC_MSG_RESULT(yes)
+				SNMP_LIBS="-lsnmp $extras"; break;
+				found_sprint_realloc_objid=yes
+				break
+			    ],
+			    [
+				#
+				# The link failed.  If they didn't ask
+				# for SSL, try linking with -lcrypto
+				# as well, and if *that* succeeds,
+				# tell them they'll need to specify
+				# --want-ssl.
+				#
+				AC_MSG_RESULT(no)
+				if test "x$want_ssl" = "xno"
+				then
+					LIBS="$LIBS -lcrypto"
+					AC_TRY_LINK(
+					    [
+					    ],
+					    [
+						sprint_realloc_objid();
+					    ],
+					    [
+						#
+						# It worked with -lcrypto; tell
+						# them they'll need to specify
+						# --with-ssl.
+						#
+						AC_MSG_ERROR([UCD SNMP requires -lcrypto but --with-ssl not specified])
+					    ])
+				fi
+			    ])
 		done
-		LIBS=$ac_save_LIBS
+		LIBS="$ethereal_save_LIBS"
 
 		#
 		# If we didn't find "sprint_realloc_objid()", fail.
@@ -773,7 +849,7 @@
 		# with "sprint_realloc_objid()", or they may need to
 		# specify "--with-ssl".
 		#
-		if test "$ac_cv_lib_snmp_sprint_realloc_objid" = no; then
+		if test "$found_snmp_sprint_realloc_objid" = no; then
 		    AC_MSG_ERROR([UCD SNMP header files found, but sprint_realloc_objid not found in SNMP library.])
 		fi
 
@@ -795,59 +871,6 @@
 ])
 
 #
-# AC_ETHEREAL_SSL_CHECK
-#
-AC_DEFUN([AC_ETHEREAL_SSL_CHECK],
-[
-	want_ssl=defaultno
-
-	AC_ARG_WITH(ssl,
-changequote(<<, >>)dnl
-<<  --with-ssl[=DIR]        use SSL crypto library (located in directory DIR, if supplied).   [default=no]>>,
-changequote([, ])dnl
-	[
-	if   test "x$withval" = "xno";  then
-		want_ssl=no
-	elif test "x$withval" = "xyes"; then
-		want_ssl=yes
-	elif test -d "$withval"; then
-		want_ssl=yes
-		AC_ETHEREAL_ADD_DASH_L(LDFLAGS, ${withval}/lib)
-	fi
-	])
-
-	if test "x$want_ssl" = "xdefaultyes"; then
-		want_ssl=yes
-		withval=/usr/local/ssl
-		if test -d "$withval"; then
-			AC_ETHEREAL_ADD_DASH_L(LDFLAGS, ${withval}/lib)
-		fi
-	fi
-
-	if test "x$want_ssl" = "xyes"; then
-	    LIBS="-lcrypto"
-            AC_TRY_LINK(
-                [
-		void EVP_md5();
-                ],
-                [
-        	EVP_md5();
-                ],
-                [
-		AC_MSG_RESULT([yes])
-		SSL_LIBS=-lcrypto
-                ],
-                [
-                AC_MSG_RESULT([no])
-                AC_MSG_ERROR([libcrypto failed link test.])
-                ])
-
-	else
-		AC_MSG_RESULT(not required)
-	fi
-])
-
-#
 # AC_ETHEREAL_RPM_CHECK
 # Looks for the rpm program, and checks to see if we can redefine "_topdir".
 #
@@ -932,6 +955,8 @@
 #
 AC_DEFUN([AC_ETHEREAL_KRB5_CHECK],
 [
+	ethereal_save_CFLAGS="$CFLAGS"
+	ethereal_save_CPPFLAGS="$CPPFLAGS"
 	if test "x$krb5_dir" != "x"
 	then
 	  #
@@ -946,35 +971,53 @@
 	  # as the compiler and/or linker will search that other
 	  # directory before it searches the specified directory.
 	  #
-	  ethereal_save_CFLAGS="$CFLAGS"
 	  CFLAGS="$CFLAGS -I$krb5_dir/include"
-	  ethereal_save_CPPFLAGS="$CPPFLAGS"
 	  CPPFLAGS="$CPPFLAGS -I$krb5_dir/include"
-	  KRB5_LIBS="-lkrb5 -lasn1 $SSL_LIBS -lroken -lcrypt -lresolv"
-	  ethereal_save_LDFLAGS="$LDFLAGS"
-	  LDFLAGS="$LDFLAGS -L$krb5_dir/lib"
-	  ac_krb5_version=`grep -i heimdal $krb5_dir/include/krb5.h | head -n 1 | sed 's/^.*heimdal.*$/HEIMDAL/i'` 
+	  ac_heimdal_version=`grep heimdal $krb5_dir/include/krb5.h | head -n 1 | sed 's/^.*heimdal.*$/HEIMDAL/'`
+	  ac_mit_version=`grep 'Massachusetts Institute of Technology' $krb5_dir/include/krb5.h | head -n 1 | sed 's/^.*Massachusetts Institute of Technology.*$/MIT/'`
+	  ac_krb5_version="$ac_heimdal_version$ac_mit_version"
+	  if test "x$ac_krb5_version" = "xHEIMDAL"
+	      KRB5_LIBS="-L$krb5_dir/lib -lkrb5 -lasn1 $SSL_LIBS -lroken -lcrypt"
+	  then
+	      KRB5_LIBS="-L$krb5_dir/lib -lkrb5 -lk5crypto -lcom_err"
+	  fi
+	  if test "x$ac_krb5_version" = "xMIT"
+	  then
+	  AC_DEFINE(HAVE_MIT_KERBEROS, 1, [Define to use MIT kerberos])
+	  fi
 	else
 	  AC_PATH_PROG(KRB5_CONFIG, krb5-config) 
 	  if test -x "$KRB5_CONFIG"
 	  then
 	    KRB5_FLAGS=`"$KRB5_CONFIG" --cflags`
+	    KRB5_LIBS=`"$KRB5_CONFIG" --libs`
 	    CFLAGS="$CFLAGS $KRB5_FLAGS"
-            CPPFLAGS="$CPPFLAGS $KRB5_FLAGS"
-	    KRB5_LIBS=`"$KRB5_CONFIG" --libs | sed 's/-lcrypto//'`
-	    KRB5_LIBS="$KRB5_LIBS $SSL_LIBS"
-	    # Looks like krb5-config is lacking -lresolv on some systems
-	    AC_MSG_CHECKING(whether library list looks OK)
-	    if echo "$KRB5_LIBS" | grep resolv >/dev/null
-	    then
-		AC_MSG_RESULT(yes)
-	    else
-		KRB5_LIBS="$KRB5_LIBS -lresolv"
-		AC_MSG_RESULT(Adding -lresolv to libs)
-	    fi
-
-	    #LIBS="$LIBS $KRB5_LIBS"
-	    ac_krb5_version=`"$KRB5_CONFIG" --version | head -n 1 | sed 's/^.*heimdal.*$/HEIMDAL/i'`
+	    CPPFLAGS="$CPPFLAGS $KRB5_FLAGS"
+	    #
+	    # If -lcrypto is in KRB5_FLAGS, we require it to build
+	    # with Heimdal/MIT.  We don't want to built with it by
+	    # default, due to annoying license incompatibilities
+	    # between the OpenSSL license and the GPL, so:
+	    #
+	    #	if SSL_LIBS is set to a non-empty string, we
+	    #	remove -lcrypto from KRB5_LIBS and replace
+	    #	it with SSL_LIBS;
+	    #
+	    #	if SSL_LIBS is not set to a non-empty string
+	    #	we fail with an appropriate error message.
+	    #
+	    case "$KRB5_LIBS" in
+	    *-lcrypto*)
+		if test ! -z "$SSL_LIBS"
+		then
+		    KRB5_LIBS=`echo $KRB5_LIBS | sed 's/-lcrypto//'`
+		    KRB5_LIBS="$KRB5_LIBS $SSL_LIBS"
+		else
+		    AC_MSG_ERROR([Kerberos library requires -lcrypto but --with-ssl not specified])
+		fi
+		;;
+	    esac
+	    ac_krb5_version=`"$KRB5_CONFIG" --version | head -n 1 | sed -e 's/^.*heimdal.*$/HEIMDAL/' -e 's/^Kerberos .*$/MIT/'`
  	  fi
 	fi
 
@@ -1008,48 +1051,131 @@
 		# library, as it's probably not present.
 		#
 		want_krb5=no
+		AC_MSG_RESULT(No Heimdal or MIT header found - disabling dissection for some kerberos data in packet decoding)
 	      fi
 	    fi
 	  ])
 
-	if test "x$want_krb5" != "xno" -a "x$ac_krb5_version" = "xHEIMDAL"
+	if test "x$want_krb5" != "xno"
 	then
+	    #
+	    # Well, we at least have the krb5 header file.
+	    # Check whether this is Heimdal or MIT.
+	    #
+	    AC_MSG_CHECKING(whether the Kerberos library is Heimdal or MIT)
+	    if test "x$ac_krb5_version" = "xHEIMDAL" -o "x$ac_krb5_version" = "xMIT"
+	    then
 		#
-		# Well, we at least have the krb5 header file.
-		#
-		AC_CHECK_LIB(krb5, krb5_kt_resolve,
-		[
-			if test "x$krb5_dir" != "x"
-			then
-				#
-				# Put the "-I" and "-L" flags for krb5 at
-				# the beginning of CFLAGS, CPPFLAGS,
-				# LDFLAGS, and LIBS.
-				#
-				KRB5_LIBS="-L$krb5_dir/lib $KRB5_LIBS"
-			fi
-			AC_DEFINE(HAVE_KERBEROS, 1, [Define to use kerberos])
-			AC_DEFINE(HAVE_HEIMDAL_KERBEROS, 1, [Define to use heimdal kerberos])
-		],[
-			if test "x$krb5_dir" != "x"
-			then
-				#
-				# Restore the versions of CFLAGS, CPPFLAGS,
-				# LDFLAGS, and LIBS before we added the
-				# "--with-krb5=" directory, as we didn't
-				# actually find kerberos there.
-				#
-				CFLAGS="$ethereal_save_CFLAGS"
-				CPPFLAGS="$ethereal_save_CPPFLAGS"
-				LDFLAGS="$ethereal_save_LDFLAGS"
-				#LIBS="$ethereal_save_LIBS"
-				KRB5_LIBS=""
-			fi
+		# Yes.
+		# Check whether we have krb5_kt_resolve - and whether
+		# we need to link with -lresolv when linking with
+		# the Kerberos library.
+		#
+		AC_MSG_RESULT($ac_krb5_version)
+		ethereal_save_LIBS="$LIBS"
+		found_krb5_kt_resolve=no
+		for extras in "" "-lresolv"
+		do
+		    LIBS="$KRB5_LIBS $extras"
+		    if test -z "$extras"
+		    then
+			AC_MSG_CHECKING([whether $ac_krb5_version includes krb5_kt_resolve])
+		    else
+			AC_MSG_CHECKING([whether $ac_krb5_version includes krb5_kt_resolve (linking with $extras)])
+		    fi
+		    AC_TRY_LINK(
+			[
+			],
+			[
+			    krb5_kt_resolve();
+			],
+			[
+			    #
+			    # We found "krb5_kt_resolve()", and required
+			    # the libraries in extras as well.
+			    #
+			    AC_MSG_RESULT(yes)
+			    KRB5_LIBS="$LIBS"
+			    AC_DEFINE(HAVE_KERBEROS, 1, [Define to use kerberos])
+	    		    if test "x$ac_krb5_version" = "xHEIMDAL"
+			    then
+				AC_DEFINE(HAVE_HEIMDAL_KERBEROS, 1, [Define to use heimdal kerberos])
+			    fi
+			    if test "x$ac_krb5_version" = "xMIT"
+			    then
+				AC_DEFINE(HAVE_MIT_KERBEROS, 1, [Define to use MIT kerberos])
+			    fi
+			    found_krb5_kt_resolve=yes
+			    break
+			],
+			[
+			    AC_MSG_RESULT(no)
+			])
+		done
+		if test "$found_krb5_kt_resolve" = no
+		then
+		    #
+		    # We didn't find "krb5_kt_resolve()" in the
+		    # Kerberos library, even when we tried linking
+		    # with -lresolv; we can't link with kerberos.
+		    #
+		    if test "x$want_krb5" = "xyes"
+		    then
+			#
+			# The user tried to force us to use the library,
+			# but we can't do so; report an error.
+			#
+			AC_MSG_ERROR(Usable $ac_krb5_version not found)
+		    else
+			#
+			# Restore the versions of CFLAGS and CPPFLAGS
+			# from before we added the flags for Kerberos.
+			#
+			AC_MSG_RESULT(Usable $ac_krb5_version not found - disabling dissection for some kerberos data in packet decoding)
+			CFLAGS="$ethereal_save_CFLAGS"
+			CPPFLAGS="$ethereal_save_CPPFLAGS"
+			KRB5_LIBS=""
 			want_krb5=no
-		], $KRB5_LIBS)
+		    fi
+		fi
+		LIBS="$ethereal_save_LIBS"
+	    else
+		#
+		# It's not Heimdal or MIT.
+		#
+		AC_MSG_RESULT(no)
+		if test "x$want_krb5" = "xyes"
+		then
+		    #
+		    # The user tried to force us to use the library,
+		    # but we can't do so; report an error.
+		    #
+		    AC_MSG_ERROR(Kerberos not found)
+		else
+		    #
+		    # Restore the versions of CFLAGS and CPPFLAGS
+		    # from before we added the flags for Kerberos.
+		    #
+		    AC_MSG_RESULT(Kerberos not found - disabling dissection for some kerberos data in packet decoding)
+		    CFLAGS="$ethereal_save_CFLAGS"
+		    CPPFLAGS="$ethereal_save_CPPFLAGS"
+		    KRB5_LIBS=""
+		    want_krb5=no
+		fi
+	    fi
 	else
-		KRB5_LIBS=""
-		want_krb5=no
+	    #
+	    # The user asked us not to use Kerberos, or they didn't
+	    # say whether they wanted us to use it but we found
+	    # that we couldn't.
+	    #
+	    # Restore the versions of CFLAGS and CPPFLAGS
+	    # from before we added the flags for Kerberos.
+	    #
+	    CFLAGS="$ethereal_save_CFLAGS"
+	    CPPFLAGS="$ethereal_save_CPPFLAGS"
+	    KRB5_LIBS=""
+	    want_krb5=no
 	fi
 	AC_SUBST(KRB5_LIBS)
 ])
diff -urN ethereal-0.10.6/aclocal.m4 ethereal-0.10.7/aclocal.m4
--- ethereal-0.10.6/aclocal.m4	2004-08-12 21:04:13.000000000 -0500
+++ ethereal-0.10.7/aclocal.m4	2004-10-20 21:50:09.000000000 -0500
@@ -1,4 +1,4 @@
-# generated automatically by aclocal 1.7.7 -*- Autoconf -*-
+# generated automatically by aclocal 1.7.9 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
 # Free Software Foundation, Inc.
@@ -15,7 +15,7 @@
 dnl This file is part of the Autoconf packaging for Ethereal.
 dnl Copyright (C) 1998-2000 by Gerald Combs.
 dnl
-dnl $Id: acinclude.m4 11513 2004-07-25 08:36:34Z guy $
+dnl $Id: acinclude.m4 12302 2004-10-15 06:51:48Z jmayer $
 dnl
 dnl This program is free software; you can redistribute it and/or modify
 dnl it under the terms of the GNU General Public License as published by
@@ -119,7 +119,7 @@
 #	  ifdef HAVE_INTTYPES_H
 	  #include <inttypes.h>
 #	  endif
-	  #include <glib.h>
+	  #include <glibconfig.h>
 	  #include <stdio.h>
 	  #include <sys/types.h>
 
@@ -432,9 +432,57 @@
 	else
 		AC_MSG_RESULT(no)
 	fi
-	AC_CHECK_FUNCS(pcap_findalldevs pcap_lib_version pcap_open_dead)
-	AC_CHECK_FUNCS(pcap_datalink_val_to_name pcap_datalink_name_to_val)
-	AC_CHECK_FUNCS(pcap_list_datalinks pcap_set_datalink)
+	AC_CHECK_FUNCS(pcap_open_dead)
+	#
+	# Later versions of Mac OS X 10.3[.x] ship a pcap.h that
+	# doesn't define pcap_if_t but ship an 0.8[.x] libpcap,
+	# so the library has "pcap_findalldevs()", but pcap.h
+	# doesn't define "pcap_if_t" so you can't actually *use*
+	# "pcap_findalldevs()".
+	#
+	# That even appears to be true of systems shipped with
+	# 10.3.4, so it doesn't appear only to be a case of
+	# Software Update not updating header files.
+	#
+	# (You can work around this by installing the 0.8 header
+	# files.)
+	#
+	AC_CACHE_CHECK([whether pcap_findalldevs is present and usable],
+	  [ac_cv_func_pcap_findalldevs],
+	  [
+	    AC_LINK_IFELSE(
+	      [
+		AC_LANG_SOURCE(
+		  [[
+		    #include <pcap.h>
+		    main()
+		    {
+		      pcap_if_t *devpointer;
+		      char errbuf[1];
+
+		      pcap_findalldevs(&devpointer, errbuf);
+		    }
+		  ]])
+	      ],
+	      [
+		ac_cv_func_pcap_findalldevs=yes
+	      ],
+	      [
+		ac_cv_func_pcap_findalldevs=no
+	      ])
+	  ])
+	#
+	# Don't check for other new routines that showed up after
+	# "pcap_findalldevs()" if we don't have a usable
+	# "pcap_findalldevs()", so we don't end up using them if the
+	# "pcap.h" is crufty and old and doesn't declare them.
+	#
+	if test $ac_cv_func_pcap_findalldevs = "yes" ; then
+	  AC_DEFINE(HAVE_PCAP_FINDALLDEVS, 1,
+	   [Define to 1 if you have the `pcap_findalldevs' function and a pcap.h that declares pcap_if_t.])
+	  AC_CHECK_FUNCS(pcap_datalink_val_to_name pcap_datalink_name_to_val)
+	  AC_CHECK_FUNCS(pcap_list_datalinks pcap_set_datalink pcap_lib_version)
+	fi
 	LIBS="$ac_save_LIBS"
 ])
 
@@ -733,9 +781,13 @@
 		# libraries on various platforms, such as "-ldes425"
 		# in "/usr/kerberos/lib" on some versions of Red
 		# Hat Linux, or "-lkstat" on Solaris.
-		# XXX - it may also require "-lcrypto" on some platforms;
-		# we should check for that as well, rather than requiring
-		# users to explicitly indicate whether it's required.
+		#
+		# It might also require "-lcrypto" on some platforms;
+		# if the user didn't specify --with-ssl, we check
+		# whether it would have made a difference and, if so,
+		# we tell the user that they needed to request it.
+		# (There are annoying licensing issues with it and
+		# GPL'ed code, so we don't include it by default.)
 		#
 		# XXX - autoconf really needs a way to test for
 		# a given routine in a given library *and* to test
@@ -745,40 +797,64 @@
 		# needed after the library *and* to cache all that
 		# information.
 		#
-		ac_save_LIBS="$LIBS"
+		ethereal_save_LIBS="$LIBS"
+		found_sprint_realloc_objid=no
 		for extras in "" "-L/usr/kerberos/lib -ldes425" "-lkstat"
 		do
 			LIBS="-lsnmp $extras $SOCKET_LIBS $NSL_LIBS $SSL_LIBS"
+			if test -z "$extras"
+			then
+				AC_MSG_CHECKING([whether UCD SNMP includes sprint_realloc_objid])
+			else
+				AC_MSG_CHECKING([whether UCD SNMP includes sprint_realloc_objid (linking with $extras)])
+			fi
 			AC_TRY_LINK(
-			[
-			],
-			[
-			sprint_realloc_objid();
-			],
-			[
-			SNMP_LIBS="-lsnmp $extras"; break;
-			],
-			[
-			])
-			
-#        int sprint_realloc_objid(u_char **buf, size_t *buf_len, size_t *out_len, int allow_realloc, const oid *objid, size_t objidlen);
-#        AC_TRY_LINK(includes, body, [if-found], [if-not-found])
-#			AC_CHECK_LIB(snmp, sprint_realloc_objid,
-#			  [
-#				SNMP_LIBS="-lsnmp $extras"; break
-#			  ],
-#			  [
-#				#
-#				# Throw away the cached "we didn't find it"
-#				# answer, so that if we rerun "configure",
-#				# we still do all these checks and don't
-#				# just blithely assume we don't need
-#				# the extra libraries.
-#				#
-#				unset ac_cv_lib_snmp_sprint_realloc_objid
-#			  ], $SOCKET_LIBS $NSL_LIBS $SSL_LIBS $extras)
+			    [
+			    ],
+			    [
+				sprint_realloc_objid();
+			    ],
+			    [
+				#
+				# We found "sprint_realloc_objid()",
+				# and required the libraries in
+				# extras as well.
+				#
+				AC_MSG_RESULT(yes)
+				SNMP_LIBS="-lsnmp $extras"; break;
+				found_sprint_realloc_objid=yes
+				break
+			    ],
+			    [
+				#
+				# The link failed.  If they didn't ask
+				# for SSL, try linking with -lcrypto
+				# as well, and if *that* succeeds,
+				# tell them they'll need to specify
+				# --want-ssl.
+				#
+				AC_MSG_RESULT(no)
+				if test "x$want_ssl" = "xno"
+				then
+					LIBS="$LIBS -lcrypto"
+					AC_TRY_LINK(
+					    [
+					    ],
+					    [
+						sprint_realloc_objid();
+					    ],
+					    [
+						#
+						# It worked with -lcrypto; tell
+						# them they'll need to specify
+						# --with-ssl.
+						#
+						AC_MSG_ERROR([UCD SNMP requires -lcrypto but --with-ssl not specified])
+					    ])
+				fi
+			    ])
 		done
-		LIBS=$ac_save_LIBS
+		LIBS="$ethereal_save_LIBS"
 
 		#
 		# If we didn't find "sprint_realloc_objid()", fail.
@@ -786,7 +862,7 @@
 		# with "sprint_realloc_objid()", or they may need to
 		# specify "--with-ssl".
 		#
-		if test "$ac_cv_lib_snmp_sprint_realloc_objid" = no; then
+		if test "$found_snmp_sprint_realloc_objid" = no; then
 		    AC_MSG_ERROR([UCD SNMP header files found, but sprint_realloc_objid not found in SNMP library.])
 		fi
 
@@ -808,59 +884,6 @@
 ])
 
 #
-# AC_ETHEREAL_SSL_CHECK
-#
-AC_DEFUN([AC_ETHEREAL_SSL_CHECK],
-[
-	want_ssl=defaultno
-
-	AC_ARG_WITH(ssl,
-changequote(<<, >>)dnl
-<<  --with-ssl[=DIR]        use SSL crypto library (located in directory DIR, if supplied).   [default=no]>>,
-changequote([, ])dnl
-	[
-	if   test "x$withval" = "xno";  then
-		want_ssl=no
-	elif test "x$withval" = "xyes"; then
-		want_ssl=yes
-	elif test -d "$withval"; then
-		want_ssl=yes
-		AC_ETHEREAL_ADD_DASH_L(LDFLAGS, ${withval}/lib)
-	fi
-	])
-
-	if test "x$want_ssl" = "xdefaultyes"; then
-		want_ssl=yes
-		withval=/usr/local/ssl
-		if test -d "$withval"; then
-			AC_ETHEREAL_ADD_DASH_L(LDFLAGS, ${withval}/lib)
-		fi
-	fi
-
-	if test "x$want_ssl" = "xyes"; then
-	    LIBS="-lcrypto"
-            AC_TRY_LINK(
-                [
-		void EVP_md5();
-                ],
-                [
-        	EVP_md5();
-                ],
-                [
-		AC_MSG_RESULT([yes])
-		SSL_LIBS=-lcrypto
-                ],
-                [
-                AC_MSG_RESULT([no])
-                AC_MSG_ERROR([libcrypto failed link test.])
-                ])
-
-	else
-		AC_MSG_RESULT(not required)
-	fi
-])
-
-#
 # AC_ETHEREAL_RPM_CHECK
 # Looks for the rpm program, and checks to see if we can redefine "_topdir".
 #
@@ -945,6 +968,8 @@
 #
 AC_DEFUN([AC_ETHEREAL_KRB5_CHECK],
 [
+	ethereal_save_CFLAGS="$CFLAGS"
+	ethereal_save_CPPFLAGS="$CPPFLAGS"
 	if test "x$krb5_dir" != "x"
 	then
 	  #
@@ -959,35 +984,53 @@
 	  # as the compiler and/or linker will search that other
 	  # directory before it searches the specified directory.
 	  #
-	  ethereal_save_CFLAGS="$CFLAGS"
 	  CFLAGS="$CFLAGS -I$krb5_dir/include"
-	  ethereal_save_CPPFLAGS="$CPPFLAGS"
 	  CPPFLAGS="$CPPFLAGS -I$krb5_dir/include"
-	  KRB5_LIBS="-lkrb5 -lasn1 $SSL_LIBS -lroken -lcrypt -lresolv"
-	  ethereal_save_LDFLAGS="$LDFLAGS"
-	  LDFLAGS="$LDFLAGS -L$krb5_dir/lib"
-	  ac_krb5_version=`grep -i heimdal $krb5_dir/include/krb5.h | head -n 1 | sed 's/^.*heimdal.*$/HEIMDAL/i'` 
+	  ac_heimdal_version=`grep heimdal $krb5_dir/include/krb5.h | head -n 1 | sed 's/^.*heimdal.*$/HEIMDAL/'`
+	  ac_mit_version=`grep 'Massachusetts Institute of Technology' $krb5_dir/include/krb5.h | head -n 1 | sed 's/^.*Massachusetts Institute of Technology.*$/MIT/'`
+	  ac_krb5_version="$ac_heimdal_version$ac_mit_version"
+	  if test "x$ac_krb5_version" = "xHEIMDAL"
+	      KRB5_LIBS="-L$krb5_dir/lib -lkrb5 -lasn1 $SSL_LIBS -lroken -lcrypt"
+	  then
+	      KRB5_LIBS="-L$krb5_dir/lib -lkrb5 -lk5crypto -lcom_err"
+	  fi
+	  if test "x$ac_krb5_version" = "xMIT"
+	  then
+	  AC_DEFINE(HAVE_MIT_KERBEROS, 1, [Define to use MIT kerberos])
+	  fi
 	else
 	  AC_PATH_PROG(KRB5_CONFIG, krb5-config) 
 	  if test -x "$KRB5_CONFIG"
 	  then
 	    KRB5_FLAGS=`"$KRB5_CONFIG" --cflags`
+	    KRB5_LIBS=`"$KRB5_CONFIG" --libs`
 	    CFLAGS="$CFLAGS $KRB5_FLAGS"
-            CPPFLAGS="$CPPFLAGS $KRB5_FLAGS"
-	    KRB5_LIBS=`"$KRB5_CONFIG" --libs | sed 's/-lcrypto//'`
-	    KRB5_LIBS="$KRB5_LIBS $SSL_LIBS"
-	    # Looks like krb5-config is lacking -lresolv on some systems
-	    AC_MSG_CHECKING(whether library list looks OK)
-	    if echo "$KRB5_LIBS" | grep resolv >/dev/null
-	    then
-		AC_MSG_RESULT(yes)
-	    else
-		KRB5_LIBS="$KRB5_LIBS -lresolv"
-		AC_MSG_RESULT(Adding -lresolv to libs)
-	    fi
-
-	    #LIBS="$LIBS $KRB5_LIBS"
-	    ac_krb5_version=`"$KRB5_CONFIG" --version | head -n 1 | sed 's/^.*heimdal.*$/HEIMDAL/i'`
+	    CPPFLAGS="$CPPFLAGS $KRB5_FLAGS"
+	    #
+	    # If -lcrypto is in KRB5_FLAGS, we require it to build
+	    # with Heimdal/MIT.  We don't want to built with it by
+	    # default, due to annoying license incompatibilities
+	    # between the OpenSSL license and the GPL, so:
+	    #
+	    #	if SSL_LIBS is set to a non-empty string, we
+	    #	remove -lcrypto from KRB5_LIBS and replace
+	    #	it with SSL_LIBS;
+	    #
+	    #	if SSL_LIBS is not set to a non-empty string
+	    #	we fail with an appropriate error message.
+	    #
+	    case "$KRB5_LIBS" in
+	    *-lcrypto*)
+		if test ! -z "$SSL_LIBS"
+		then
+		    KRB5_LIBS=`echo $KRB5_LIBS | sed 's/-lcrypto//'`
+		    KRB5_LIBS="$KRB5_LIBS $SSL_LIBS"
+		else
+		    AC_MSG_ERROR([Kerberos library requires -lcrypto but --with-ssl not specified])
+		fi
+		;;
+	    esac
+	    ac_krb5_version=`"$KRB5_CONFIG" --version | head -n 1 | sed -e 's/^.*heimdal.*$/HEIMDAL/' -e 's/^Kerberos .*$/MIT/'`
  	  fi
 	fi
 
@@ -1021,48 +1064,131 @@
 		# library, as it's probably not present.
 		#
 		want_krb5=no
+		AC_MSG_RESULT(No Heimdal or MIT header found - disabling dissection for some kerberos data in packet decoding)
 	      fi
 	    fi
 	  ])
 
-	if test "x$want_krb5" != "xno" -a "x$ac_krb5_version" = "xHEIMDAL"
+	if test "x$want_krb5" != "xno"
 	then
+	    #
+	    # Well, we at least have the krb5 header file.
+	    # Check whether this is Heimdal or MIT.
+	    #
+	    AC_MSG_CHECKING(whether the Kerberos library is Heimdal or MIT)
+	    if test "x$ac_krb5_version" = "xHEIMDAL" -o "x$ac_krb5_version" = "xMIT"
+	    then
 		#
-		# Well, we at least have the krb5 header file.
+		# Yes.
+		# Check whether we have krb5_kt_resolve - and whether
+		# we need to link with -lresolv when linking with
+		# the Kerberos library.
 		#
-		AC_CHECK_LIB(krb5, krb5_kt_resolve,
-		[
-			if test "x$krb5_dir" != "x"
-			then
-				#
-				# Put the "-I" and "-L" flags for krb5 at
-				# the beginning of CFLAGS, CPPFLAGS,
-				# LDFLAGS, and LIBS.
-				#
-				KRB5_LIBS="-L$krb5_dir/lib $KRB5_LIBS"
-			fi
-			AC_DEFINE(HAVE_KERBEROS, 1, [Define to use kerberos])
-			AC_DEFINE(HAVE_HEIMDAL_KERBEROS, 1, [Define to use heimdal kerberos])
-		],[
-			if test "x$krb5_dir" != "x"
-			then
-				#
-				# Restore the versions of CFLAGS, CPPFLAGS,
-				# LDFLAGS, and LIBS before we added the
-				# "--with-krb5=" directory, as we didn't
-				# actually find kerberos there.
-				#
-				CFLAGS="$ethereal_save_CFLAGS"
-				CPPFLAGS="$ethereal_save_CPPFLAGS"
-				LDFLAGS="$ethereal_save_LDFLAGS"
-				#LIBS="$ethereal_save_LIBS"
-				KRB5_LIBS=""
-			fi
+		AC_MSG_RESULT($ac_krb5_version)
+		ethereal_save_LIBS="$LIBS"
+		found_krb5_kt_resolve=no
+		for extras in "" "-lresolv"
+		do
+		    LIBS="$KRB5_LIBS $extras"
+		    if test -z "$extras"
+		    then
+			AC_MSG_CHECKING([whether $ac_krb5_version includes krb5_kt_resolve])
+		    else
+			AC_MSG_CHECKING([whether $ac_krb5_version includes krb5_kt_resolve (linking with $extras)])
+		    fi
+		    AC_TRY_LINK(
+			[
+			],
+			[
+			    krb5_kt_resolve();
+			],
+			[
+			    #
+			    # We found "krb5_kt_resolve()", and required
+			    # the libraries in extras as well.
+			    #
+			    AC_MSG_RESULT(yes)
+			    KRB5_LIBS="$LIBS"
+			    AC_DEFINE(HAVE_KERBEROS, 1, [Define to use kerberos])
+	    		    if test "x$ac_krb5_version" = "xHEIMDAL"
+			    then
+				AC_DEFINE(HAVE_HEIMDAL_KERBEROS, 1, [Define to use heimdal kerberos])
+			    fi
+			    if test "x$ac_krb5_version" = "xMIT"
+			    then
+				AC_DEFINE(HAVE_MIT_KERBEROS, 1, [Define to use MIT kerberos])
+			    fi
+			    found_krb5_kt_resolve=yes
+			    break
+			],
+			[
+			    AC_MSG_RESULT(no)
+			])
+		done
+		if test "$found_krb5_kt_resolve" = no
+		then
+		    #
+		    # We didn't find "krb5_kt_resolve()" in the
+		    # Kerberos library, even when we tried linking
+		    # with -lresolv; we can't link with kerberos.
+		    #
+		    if test "x$want_krb5" = "xyes"
+		    then
+			#
+			# The user tried to force us to use the library,
+			# but we can't do so; report an error.
+			#
+			AC_MSG_ERROR(Usable $ac_krb5_version not found)
+		    else
+			#
+			# Restore the versions of CFLAGS and CPPFLAGS
+			# from before we added the flags for Kerberos.
+			#
+			AC_MSG_RESULT(Usable $ac_krb5_version not found - disabling dissection for some kerberos data in packet decoding)
+			CFLAGS="$ethereal_save_CFLAGS"
+			CPPFLAGS="$ethereal_save_CPPFLAGS"
+			KRB5_LIBS=""
 			want_krb5=no
-		], $KRB5_LIBS)
+		    fi
+		fi
+		LIBS="$ethereal_save_LIBS"
+	    else
+		#
+		# It's not Heimdal or MIT.
+		#
+		AC_MSG_RESULT(no)
+		if test "x$want_krb5" = "xyes"
+		then
+		    #
+		    # The user tried to force us to use the library,
+		    # but we can't do so; report an error.
+		    #
+		    AC_MSG_ERROR(Kerberos not found)
+		else
+		    #
+		    # Restore the versions of CFLAGS and CPPFLAGS
+		    # from before we added the flags for Kerberos.
+		    #
+		    AC_MSG_RESULT(Kerberos not found - disabling dissection for some kerberos data in packet decoding)
+		    CFLAGS="$ethereal_save_CFLAGS"
+		    CPPFLAGS="$ethereal_save_CPPFLAGS"
+		    KRB5_LIBS=""
+		    want_krb5=no
+		fi
+	    fi
 	else
-		KRB5_LIBS=""
-		want_krb5=no
+	    #
+	    # The user asked us not to use Kerberos, or they didn't
+	    # say whether they wanted us to use it but we found
+	    # that we couldn't.
+	    #
+	    # Restore the versions of CFLAGS and CPPFLAGS
+	    # from before we added the flags for Kerberos.
+	    #
+	    CFLAGS="$ethereal_save_CFLAGS"
+	    CPPFLAGS="$ethereal_save_CPPFLAGS"
+	    KRB5_LIBS=""
+	    want_krb5=no
 	fi
 	AC_SUBST(KRB5_LIBS)
 ])
@@ -1220,7 +1346,7 @@
 # Call AM_AUTOMAKE_VERSION so it can be traced.
 # This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-	 [AM_AUTOMAKE_VERSION([1.7.7])])
+	 [AM_AUTOMAKE_VERSION([1.7.9])])
 
 # Helper functions for option handling.                    -*- Autoconf -*-
 
diff -urN ethereal-0.10.6/adler32.c ethereal-0.10.7/adler32.c
--- ethereal-0.10.6/adler32.c	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/adler32.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,59 +0,0 @@
-/* adler32.c
- * Compute the Adler32 checksum (RFC 1950)
- * 2003 Tomas Kukosa
- * Based on code from RFC 1950 (Chapter 9. Appendix: Sample code)
- *
- * $Id: adler32.c 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#include <string.h>
-
-#include "adler32.h"
-
-#define BASE 65521 /* largest prime smaller than 65536 */
-
-/*--- update_adler32 --------------------------------------------------------*/
-unsigned long update_adler32(unsigned long adler, const unsigned char *buf, int len)
-{
-  unsigned long s1 = adler & 0xffff;
-  unsigned long s2 = (adler >> 16) & 0xffff;
-  int n;
-
-  for (n = 0; n < len; n++) {
-    s1 = (s1 + buf[n]) % BASE;
-    s2 = (s2 + s1)     % BASE;
-  }
-  return (s2 << 16) + s1;
-}
-
-/*--- adler32 ---------------------------------------------------------------*/
-unsigned long adler32_bytes(unsigned char *buf, int len)
-{
-  return update_adler32(1L, buf, len);
-}
-
-/*--- adler32_str -----------------------------------------------------------*/
-unsigned long adler32_str(const char *buf)
-{
-  return update_adler32(1L, (unsigned char*)buf, strlen(buf));
-}
-
-/*---------------------------------------------------------------------------*/
diff -urN ethereal-0.10.6/adler32.h ethereal-0.10.7/adler32.h
--- ethereal-0.10.6/adler32.h	2004-08-12 17:41:25.000000000 -0500
+++ ethereal-0.10.7/adler32.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,42 +0,0 @@
-/* adler32.h
- * Compute the Adler32 checksum (RFC 1950)
- * 2003 Tomas Kukosa
- *
- * $Id: adler32.h 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifndef ADLER32_H
-#define ADLER32_H
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-unsigned long update_adler32(unsigned long adler, const unsigned char *buf, int len);
-unsigned long adler32_bytes(unsigned char *buf, int len);
-unsigned long adler32_str(const char *buf);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  /* ADLER32_H */
-
diff -urN ethereal-0.10.6/afn.c ethereal-0.10.7/afn.c
--- ethereal-0.10.6/afn.c	2004-08-12 17:42:33.000000000 -0500
+++ ethereal-0.10.7/afn.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,52 +0,0 @@
-/* afn.c
- * RFC 1700 address family numbers
- *
- * $Id: afn.c 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <epan/packet.h>
-#include "afn.h"
-
-const value_string afn_vals[] = {
-    { 0, "Reserved" },
-    { AFNUM_INET, "IPv4" },
-    { AFNUM_INET6, "IPv6" },
-    { AFNUM_NSAP, "NSAP" },
-    { AFNUM_HDLC, "HDLC (8-bit multidrop)" },
-    { AFNUM_BBN1822, "BBN 1822" },
-    { AFNUM_802, "802" },
-    { AFNUM_E163, "E.163" },
-    { AFNUM_E164, "E.164" },
-    { AFNUM_F69, "F.69" },
-    { AFNUM_X121, "X.121" },
-    { AFNUM_IPX, "IPX" },
-    { AFNUM_ATALK, "Appletalk" },
-    { AFNUM_DECNET, "Decnet IV" },
-    { AFNUM_BANYAN, "Banyan Vines" },
-    { AFNUM_E164NSAP, "E.164 with NSAP subaddress" },
-    { AFNUM_L2VPN, "Layer-2 VPN" },
-    { 65535, "Reserved" },
-    { 0, NULL },
-};
diff -urN ethereal-0.10.6/afn.h ethereal-0.10.7/afn.h
--- ethereal-0.10.6/afn.h	2004-08-12 17:42:33.000000000 -0500
+++ ethereal-0.10.7/afn.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,48 +0,0 @@
-/* afn.h
- * RFC 1700 address family numbers
- *
- * $Id: afn.h 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifndef __AFN_H__
-#define __AFN_H__
-
-/* RFC1700 address family numbers */
-#define AFNUM_INET	1
-#define AFNUM_INET6	2
-#define AFNUM_NSAP	3
-#define AFNUM_HDLC	4
-#define AFNUM_BBN1822	5
-#define AFNUM_802	6
-#define AFNUM_E163	7
-#define AFNUM_E164	8
-#define AFNUM_F69	9
-#define AFNUM_X121	10
-#define AFNUM_IPX	11
-#define AFNUM_ATALK	12
-#define AFNUM_DECNET	13
-#define AFNUM_BANYAN	14
-#define AFNUM_E164NSAP	15
-/* draft-kompella-ppvpn-l2vpn */
-#define AFNUM_L2VPN     196
-extern const value_string afn_vals[];
-
-#endif /* __AFN_H__ */
diff -urN ethereal-0.10.6/capinfo.c ethereal-0.10.7/capinfo.c
--- ethereal-0.10.6/capinfo.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/capinfo.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,340 +0,0 @@
-/* capinfo.c
- * Reports capture file information including # of packets, duration, others
- *
- * Copyright 2004 Ian Schorr
- *
- * $Id: capinfo.c 11571 2004-07-30 07:25:39Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <glib.h>
-#include <string.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-#include <string.h>
-#include <epan/packet.h>
-#include "wtap.h"
-
-#ifdef NEED_GETOPT_H
-#include "getopt.h"
-#endif
-
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-
-
-static gboolean cap_file_type = FALSE;      /* Do not report capture type     */
-static gboolean cap_packet_count = FALSE;   /* Do not produce packet count    */
-static gboolean cap_file_size = FALSE;      /* Do not report file size        */
-static gboolean cap_data_size = FALSE;      /* Do not report packet byte size */
-static gboolean cap_duration = FALSE;       /* Do not report capture duration */
-static gboolean cap_start_time = FALSE;
-static gboolean cap_end_time = FALSE;
-
-static gboolean cap_data_rate_byte = FALSE;
-static gboolean cap_data_rate_bit = FALSE;
-static gboolean cap_packet_size = FALSE;
-
-
-typedef struct _capture_info {
-	const char		*filename;
-	guint16			file_type;
-	guint64			filesize;
-	guint64			packet_bytes;
-	double			start_time;
-	double			stop_time;
-	guint32			packet_count;
-	gboolean		snap_set;
-	guint32			snaplen;
-	gboolean		drops_known;
-	guint32			drop_count;
-	
-	double			duration;
-	double			packet_rate;
-	double			packet_size;
-	double			data_rate;		/* in bytes */
-} capture_info;
-
-static double
-secs_usecs(guint32 s, guint32 us)
-{
-  return (us / 1000000.0) + (double)s;
-}
-
-static void
-print_stats(capture_info *cf_info)
-{
-  const gchar		*file_type_string;
-  time_t		start_time_t;
-  struct tm		*start_time_tm;
-  time_t		stop_time_t;
-  struct tm		*stop_time_tm;
-
-  /* Build printable strings for various stats */
-  file_type_string = wtap_file_type_string(cf_info->file_type);
-  start_time_t = (long)cf_info->start_time;
-  stop_time_t = (long)cf_info->stop_time;
-  start_time_tm = localtime (&start_time_t);
-  stop_time_tm = localtime (&stop_time_t);
-
-  if (cap_file_type) printf("File Type: %s\n", file_type_string);
-  if (cap_packet_count) printf("Number of packets: %u \n", cf_info->packet_count);
-  if (cap_file_size) printf("File Size: %" PRIu64 " bytes\n", cf_info->filesize);
-  if (cap_data_size) printf("Data Size: %" PRIu64 " bytes\n", cf_info->packet_bytes);
-  if (cap_duration) printf("Capture duration: %f seconds\n", cf_info->duration);
-  if (cap_start_time) printf("Start time: %s", asctime (start_time_tm));
-  if (cap_end_time) printf("End time: %s", asctime (stop_time_tm));
-  if (cap_data_rate_byte) printf("Data rate: %.2f bytes/s\n", cf_info->data_rate);
-  if (cap_data_rate_bit) printf("Data rate: %.2f bits/s\n", cf_info->data_rate*8);
-  if (cap_packet_size) printf("Average packet size: %.2f bytes\n", cf_info->packet_size);
-
-}
-
-static int 
-process_cap_file(wtap *wth)
-{
-  int			err;
-  gchar			*err_info;
-  struct stat   cf_stat;
-  long  		data_offset;
-  
-  guint32		packet = 0;
-  gint64		bytes = 0;
-  const struct wtap_pkthdr *phdr;
-  capture_info  cf_info;
-  double		start_time = 0;
-  double		stop_time = 0;
-  double		cur_time = 0;
-  
-  /* Tally up data that we need to parse through the file to find */
-  while (wtap_read(wth, &err, &err_info, &data_offset))  {
-    phdr = wtap_phdr(wth);
-	cur_time = secs_usecs(phdr->ts.tv_sec, phdr->ts.tv_usec);
-	if(packet==0) {
-	  start_time = cur_time;
-	  stop_time = cur_time;
-	}
-	if (cur_time < start_time) {
-	  start_time = cur_time;
-	}
-	if (cur_time > stop_time) {
-	  stop_time = cur_time;
-	}
-	bytes+=phdr->len;
-    packet++;
-  }
-  
-  if (err != 0) {
-    fprintf(stderr, "Error after reading %i packets\n", packet);
-	exit(1);
-  }
-
-  /* File size */
-  if (fstat(wtap_fd(wth), &cf_stat) < 0) {
-    wtap_close(wth);
-	return 1;
-  }
-  
-  cf_info.filesize = cf_stat.st_size;
-  
-  /* File Type */
-  cf_info.file_type = wtap_file_type(wth);
-  
-  /* # of packets */
-  cf_info.packet_count = packet;
-  
-  /* File Times */
-  cf_info.start_time = start_time;
-  cf_info.stop_time = stop_time;
-  cf_info.duration = stop_time-start_time;
-	
-  /* Number of packet bytes */
-  cf_info.packet_bytes = bytes;
-  
-  /* Data rate per second */
-  cf_info.data_rate = (double)bytes / (stop_time-start_time);
-  
-  /* Avg packet size */
-  cf_info.packet_size = (double)bytes/packet;
-  
-  print_stats(&cf_info);
-
-return 0;
-}
-
-static void usage(gboolean is_error)
-{
-  FILE *output;
-  
-  if (!is_error) {
-    output = stdout;
-	/* XXX - add capinfo header info here */
-  }
-  else {
-    output = stderr;
-  }
-
-
-  fprintf(output, "Usage: capinfo [-t] [-c] [-s] [-d] [-u] [-a] [-e] [-y]\n");
-  fprintf(output, "               [-i] [-z] [-h] <capfile>\n");
-  fprintf(output, "  where\t-t display the capture type of <capfile>\n");
-  fprintf(output, "       \t-c count the number of packets\n");
-  fprintf(output, "       \t-s display the size of the file \n");
-  fprintf(output, "       \t-d display the total length of all packets in the file\n");
-  fprintf(output, "       \t   (in bytes)\n");
-  fprintf(output, "       \t-u display the capture duration (in seconds) \n");
-  fprintf(output, "       \t-a display the capture start time\n");
-  fprintf(output, "       \t-e display the capture end time\n");
-  fprintf(output, "       \t-y display average data rate (in bytes)\n");
-  fprintf(output, "       \t-i display average data rate (in bits)\n");
-  fprintf(output, "       \t-z display average packet size (in bytes)\n");
-  fprintf(output, "       \t-h produces this help listing.\n");
-  fprintf(output, "\n      \t    If no data flags are given, default is to display all statistics\n");
-}
-
-int main(int argc, char *argv[])
-{
-  wtap *wth;
-  int err;
-  gchar *err_info;
-  extern char *optarg;
-  extern int optind;
-  int opt;
-  int status = 0;
-
-  /* Process the options first */
-
-  while ((opt = getopt(argc, argv, "tcsduaeyizvh")) !=-1) {
-
-    switch (opt) {
-
-	case 't':
-	  cap_file_type = TRUE;
-	  break;
-
-	case 'c':
-	  cap_packet_count = TRUE;
-	  break;
-
-	case 's':
-	  cap_file_size = TRUE;
-	  break;
-
-	case 'd':
-	  cap_data_size = TRUE;
-	  break;
-
-	case 'u':
-	  cap_duration = TRUE;
-	  break;
-
-	case 'a':
-	  cap_start_time = TRUE;
-	  break;
-
-	case 'e':
-	  cap_end_time = TRUE;
-	  break;
-
-	case 'y':
-	  cap_data_rate_byte = TRUE;
-	  break;
-
-	case 'i':
-	  cap_data_rate_bit = TRUE;
-	  break;
-
-	case 'z':
-	  cap_packet_size = TRUE;
-	  break;
-
-    case 'h':
-      usage(FALSE);
-      exit(1);
-      break;
-
-    case '?':              /* Bad flag - print usage message */
-      usage(TRUE);
-      exit(1);
-      break;
-
-    }
-
-  }
-
-  if (optind < 2) {
-
-    /* If no arguments were given, by default display all statistics */
-    cap_file_type = TRUE;      
-    cap_packet_count = TRUE;   
-    cap_file_size = TRUE;      
-    cap_data_size = TRUE;      
-    cap_duration = TRUE;       
-    cap_start_time = TRUE;
-    cap_end_time = TRUE;
-
-    cap_data_rate_byte = TRUE;
-    cap_data_rate_bit = TRUE;
-    cap_packet_size = TRUE;
-
-  }
-  
-  if ((argc - optind) < 1) {
-    usage(TRUE);
-	exit(1);
-  }
-  
-  wth = wtap_open_offline(argv[optind], &err, &err_info, FALSE);
-
-  if (!wth) {
-    fprintf(stderr, "editcap: Can't open %s: %s\n", argv[optind],
-        wtap_strerror(err));
-    switch (err) {
-
-    case WTAP_ERR_UNSUPPORTED:
-    case WTAP_ERR_UNSUPPORTED_ENCAP:
-    case WTAP_ERR_BAD_RECORD:
-      fprintf(stderr, "(%s)\n", err_info);
-      g_free(err_info);
-      break;
-    }
-    exit(1);
-
-  }
-
-  status = process_cap_file(wth);
-  
-  wtap_close(wth);
-  return status;
-}
diff -urN ethereal-0.10.6/capinfos.c ethereal-0.10.7/capinfos.c
--- ethereal-0.10.6/capinfos.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/capinfos.c	2004-10-20 17:35:06.000000000 -0500
@@ -0,0 +1,332 @@
+/* capinfos.c
+ * Reports capture file information including # of packets, duration, others
+ *
+ * Copyright 2004 Ian Schorr
+ *
+ * $Id: capinfos.c 12359 2004-10-20 19:07:50Z gerald $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <glib.h>
+#include <string.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+
+#include <string.h>
+#include <epan/packet.h>
+#include "wtap.h"
+
+#ifdef NEED_GETOPT_H
+#include "getopt.h"
+#endif
+
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+
+static gboolean cap_file_type = FALSE;      /* Do not report capture type     */
+static gboolean cap_packet_count = FALSE;   /* Do not produce packet count    */
+static gboolean cap_file_size = FALSE;      /* Do not report file size        */
+static gboolean cap_data_size = FALSE;      /* Do not report packet byte size */
+static gboolean cap_duration = FALSE;       /* Do not report capture duration */
+static gboolean cap_start_time = FALSE;
+static gboolean cap_end_time = FALSE;
+
+static gboolean cap_data_rate_byte = FALSE;
+static gboolean cap_data_rate_bit = FALSE;
+static gboolean cap_packet_size = FALSE;
+
+
+typedef struct _capture_info {
+	const char		*filename;
+	guint16			file_type;
+	guint64			filesize;
+	guint64			packet_bytes;
+	double			start_time;
+	double			stop_time;
+	guint32			packet_count;
+	gboolean		snap_set;
+	guint32			snaplen;
+	gboolean		drops_known;
+	guint32			drop_count;
+	
+	double			duration;
+	double			packet_rate;
+	double			packet_size;
+	double			data_rate;		/* in bytes */
+} capture_info;
+
+static double
+secs_usecs(guint32 s, guint32 us)
+{
+  return (us / 1000000.0) + (double)s;
+}
+
+static void
+print_stats(capture_info *cf_info)
+{
+  const gchar		*file_type_string;
+  time_t		start_time_t;
+  time_t		stop_time_t;
+
+  /* Build printable strings for various stats */
+  file_type_string = wtap_file_type_string(cf_info->file_type);
+  start_time_t = (time_t)cf_info->start_time;
+  stop_time_t = (time_t)cf_info->stop_time;
+
+  if (cap_file_type) printf("File Type: %s\n", file_type_string);
+  if (cap_packet_count) printf("Number of packets: %u \n", cf_info->packet_count);
+  if (cap_file_size) printf("File Size: %" PRIu64 " bytes\n", cf_info->filesize);
+  if (cap_data_size) printf("Data Size: %" PRIu64 " bytes\n", cf_info->packet_bytes);
+  if (cap_duration) printf("Capture duration: %f seconds\n", cf_info->duration);
+  if (cap_start_time) printf("Start time: %s", ctime (&start_time_t));
+  if (cap_end_time) printf("End time: %s", ctime (&stop_time_t));
+  if (cap_data_rate_byte) printf("Data rate: %.2f bytes/s\n", cf_info->data_rate);
+  if (cap_data_rate_bit) printf("Data rate: %.2f bits/s\n", cf_info->data_rate*8);
+  if (cap_packet_size) printf("Average packet size: %.2f bytes\n", cf_info->packet_size);
+
+}
+
+static int 
+process_cap_file(wtap *wth)
+{
+  int			err;
+  gchar			*err_info;
+  struct stat   cf_stat;
+  long  		data_offset;
+  
+  guint32		packet = 0;
+  gint64		bytes = 0;
+  const struct wtap_pkthdr *phdr;
+  capture_info  cf_info;
+  double		start_time = 0;
+  double		stop_time = 0;
+  double		cur_time = 0;
+  
+  /* Tally up data that we need to parse through the file to find */
+  while (wtap_read(wth, &err, &err_info, &data_offset))  {
+    phdr = wtap_phdr(wth);
+    cur_time = secs_usecs(phdr->ts.tv_sec, phdr->ts.tv_usec);
+    if(packet==0) {
+      start_time = cur_time;
+      stop_time = cur_time;
+    }
+    if (cur_time < start_time) {
+      start_time = cur_time;
+    }
+    if (cur_time > stop_time) {
+      stop_time = cur_time;
+    }
+    bytes+=phdr->len;
+    packet++;
+  }
+  
+  if (err != 0) {
+    fprintf(stderr, "Error after reading %i packets\n", packet);
+    exit(1);
+  }
+
+  /* File size */
+  if (fstat(wtap_fd(wth), &cf_stat) < 0) {
+    wtap_close(wth);
+    return 1;
+  }
+  
+  cf_info.filesize = cf_stat.st_size;
+  
+  /* File Type */
+  cf_info.file_type = wtap_file_type(wth);
+  
+  /* # of packets */
+  cf_info.packet_count = packet;
+  
+  /* File Times */
+  cf_info.start_time = start_time;
+  cf_info.stop_time = stop_time;
+  cf_info.duration = stop_time-start_time;
+
+  /* Number of packet bytes */
+  cf_info.packet_bytes = bytes;
+  
+  /* Data rate per second */
+  cf_info.data_rate = (double)bytes / (stop_time-start_time);
+  
+  /* Avg packet size */
+  cf_info.packet_size = (double)bytes/packet;
+  
+  print_stats(&cf_info);
+
+return 0;
+}
+
+static void usage(gboolean is_error)
+{
+  FILE *output;
+  
+  if (!is_error) {
+    output = stdout;
+    /* XXX - add capinfos header info here */
+  }
+  else {
+    output = stderr;
+  }
+
+
+  fprintf(output, "Usage: capinfos [-t] [-c] [-s] [-d] [-u] [-a] [-e] [-y]\n");
+  fprintf(output, "                [-i] [-z] [-h] <capfile>\n");
+  fprintf(output, "  where\t-t display the capture type of <capfile>\n");
+  fprintf(output, "       \t-c count the number of packets\n");
+  fprintf(output, "       \t-s display the size of the file \n");
+  fprintf(output, "       \t-d display the total length of all packets in the file\n");
+  fprintf(output, "       \t   (in bytes)\n");
+  fprintf(output, "       \t-u display the capture duration (in seconds) \n");
+  fprintf(output, "       \t-a display the capture start time\n");
+  fprintf(output, "       \t-e display the capture end time\n");
+  fprintf(output, "       \t-y display average data rate (in bytes)\n");
+  fprintf(output, "       \t-i display average data rate (in bits)\n");
+  fprintf(output, "       \t-z display average packet size (in bytes)\n");
+  fprintf(output, "       \t-h produces this help listing.\n");
+  fprintf(output, "\n      \t    If no data flags are given, default is to display all statistics\n");
+}
+
+int main(int argc, char *argv[])
+{
+  wtap *wth;
+  int err;
+  gchar *err_info;
+  extern char *optarg;
+  extern int optind;
+  int opt;
+  int status = 0;
+
+  /* Process the options first */
+
+  while ((opt = getopt(argc, argv, "tcsduaeyizvh")) !=-1) {
+
+    switch (opt) {
+
+    case 't':
+      cap_file_type = TRUE;
+      break;
+
+    case 'c':
+      cap_packet_count = TRUE;
+      break;
+
+    case 's':
+      cap_file_size = TRUE;
+      break;
+
+    case 'd':
+      cap_data_size = TRUE;
+      break;
+
+    case 'u':
+      cap_duration = TRUE;
+      break;
+
+    case 'a':
+      cap_start_time = TRUE;
+      break;
+
+    case 'e':
+      cap_end_time = TRUE;
+      break;
+
+    case 'y':
+      cap_data_rate_byte = TRUE;
+      break;
+
+    case 'i':
+      cap_data_rate_bit = TRUE;
+      break;
+
+    case 'z':
+      cap_packet_size = TRUE;
+      break;
+
+    case 'h':
+      usage(FALSE);
+      exit(1);
+      break;
+
+    case '?':              /* Bad flag - print usage message */
+      usage(TRUE);
+      exit(1);
+      break;
+    }
+  }
+
+  if (optind < 2) {
+
+    /* If no arguments were given, by default display all statistics */
+    cap_file_type = TRUE;      
+    cap_packet_count = TRUE;   
+    cap_file_size = TRUE;      
+    cap_data_size = TRUE;      
+    cap_duration = TRUE;       
+    cap_start_time = TRUE;
+    cap_end_time = TRUE;
+
+    cap_data_rate_byte = TRUE;
+    cap_data_rate_bit = TRUE;
+    cap_packet_size = TRUE;
+  }
+  
+  if ((argc - optind) < 1) {
+    usage(TRUE);
+    exit(1);
+  }
+  
+  wth = wtap_open_offline(argv[optind], &err, &err_info, FALSE);
+
+  if (!wth) {
+    fprintf(stderr, "capinfos: Can't open %s: %s\n", argv[optind],
+        wtap_strerror(err));
+    switch (err) {
+
+    case WTAP_ERR_UNSUPPORTED:
+    case WTAP_ERR_UNSUPPORTED_ENCAP:
+    case WTAP_ERR_BAD_RECORD:
+      fprintf(stderr, "(%s)\n", err_info);
+      g_free(err_info);
+      break;
+    }
+    exit(1);
+  }
+
+  status = process_cap_file(wth);
+  
+  wtap_close(wth);
+  return status;
+}
diff -urN ethereal-0.10.6/capture-wpcap.c ethereal-0.10.7/capture-wpcap.c
--- ethereal-0.10.6/capture-wpcap.c	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/capture-wpcap.c	2004-10-20 17:35:06.000000000 -0500
@@ -3,7 +3,7 @@
  * time, so that we only need one Ethereal binary and one Tethereal binary
  * for Windows, regardless of whether WinPcap is installed or not.
  *
- * $Id: capture-wpcap.c 11643 2004-08-10 14:09:30Z gerald $
+ * $Id: capture-wpcap.c 12109 2004-09-27 01:11:23Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -69,6 +69,12 @@
 static int     (*p_pcap_findalldevs) (pcap_if_t **, char *);
 static void    (*p_pcap_freealldevs) (pcap_if_t *);
 #endif
+#ifdef HAVE_PCAP_DATALINK_NAME_TO_VAL
+static int (*p_pcap_datalink_name_to_val) (const char *);
+#endif
+#ifdef HAVE_PCAP_DATALINK_VAL_TO_NAME
+static const char *(*p_pcap_datalink_val_to_name) (int);
+#endif
 static const char *(*p_pcap_lib_version) (void);
 static int     (*p_pcap_setbuff) (pcap_t *, int dim);
 
@@ -102,6 +108,12 @@
 		SYM(pcap_findalldevs, TRUE),
 		SYM(pcap_freealldevs, TRUE),
 #endif
+#ifdef HAVE_PCAP_DATALINK_NAME_TO_VAL
+		SYM(pcap_datalink_name_to_val, TRUE),
+#endif
+#ifdef HAVE_PCAP_DATALINK_VAL_TO_NAME
+		SYM(pcap_datalink_val_to_name, TRUE),
+#endif
 		SYM(pcap_lib_version, TRUE),
 		SYM(pcap_setbuff, TRUE),
 		{ NULL, NULL, FALSE }
@@ -250,6 +262,148 @@
 }
 #endif
 
+#if defined(HAVE_PCAP_DATALINK_NAME_TO_VAL) || defined(HAVE_PCAP_DATALINK_VAL_TO_NAME)
+/*
+ * Table of DLT_ types, names, and descriptions, for use if the version
+ * of WinPcap we have installed lacks "pcap_datalink_name_to_val()"
+ * or "pcap_datalink_val_to_name()".
+ */
+struct dlt_choice {
+	const char *name;
+	const char *description;
+	int	dlt;
+};
+
+#define DLT_CHOICE(code, description) { #code, description, code }
+#define DLT_CHOICE_SENTINEL { NULL, NULL, 0 }
+
+static struct dlt_choice dlt_choices[] = {
+	DLT_CHOICE(DLT_NULL, "BSD loopback"),
+	DLT_CHOICE(DLT_EN10MB, "Ethernet"),
+	DLT_CHOICE(DLT_IEEE802, "Token ring"),
+	DLT_CHOICE(DLT_ARCNET, "ARCNET"),
+	DLT_CHOICE(DLT_SLIP, "SLIP"),
+	DLT_CHOICE(DLT_PPP, "PPP"),
+	DLT_CHOICE(DLT_FDDI, "FDDI"),
+	DLT_CHOICE(DLT_ATM_RFC1483, "RFC 1483 IP-over-ATM"),
+	DLT_CHOICE(DLT_RAW, "Raw IP"),
+#ifdef DLT_SLIP_BSDOS
+	DLT_CHOICE(DLT_SLIP_BSDOS, "BSD/OS SLIP"),
+#endif
+#ifdef DLT_PPP_BSDOS
+	DLT_CHOICE(DLT_PPP_BSDOS, "BSD/OS PPP"),
+#endif
+#ifdef DLT_ATM_CLIP
+	DLT_CHOICE(DLT_ATM_CLIP, "Linux Classical IP-over-ATM"),
+#endif
+#ifdef DLT_PPP_SERIAL
+	DLT_CHOICE(DLT_PPP_SERIAL, "PPP over serial"),
+#endif
+#ifdef DLT_PPP_ETHER
+	DLT_CHOICE(DLT_PPP_ETHER, "PPPoE"),
+#endif
+#ifdef DLT_C_HDLC
+	DLT_CHOICE(DLT_C_HDLC, "Cisco HDLC"),
+#endif
+#ifdef DLT_IEEE802_11
+	DLT_CHOICE(DLT_IEEE802_11, "802.11"),
+#endif
+#ifdef DLT_FRELAY
+	DLT_CHOICE(DLT_FRELAY, "Frame Relay"),
+#endif
+#ifdef DLT_LOOP
+	DLT_CHOICE(DLT_LOOP, "OpenBSD loopback"),
+#endif
+#ifdef DLT_ENC
+	DLT_CHOICE(DLT_ENC, "OpenBSD encapsulated IP"),
+#endif
+#ifdef DLT_LINUX_SLL
+	DLT_CHOICE(DLT_LINUX_SLL, "Linux cooked"),
+#endif
+#ifdef DLT_LTALK
+	DLT_CHOICE(DLT_LTALK, "Localtalk"),
+#endif
+#ifdef DLT_PFLOG
+	DLT_CHOICE(DLT_PFLOG, "OpenBSD pflog file"),
+#endif
+#ifdef DLT_PRISM_HEADER
+	DLT_CHOICE(DLT_PRISM_HEADER, "802.11 plus Prism header"),
+#endif
+#ifdef DLT_IP_OVER_FC
+	DLT_CHOICE(DLT_IP_OVER_FC, "RFC 2625 IP-over-Fibre Channel"),
+#endif
+#ifdef DLT_SUNATM
+	DLT_CHOICE(DLT_SUNATM, "Sun raw ATM"),
+#endif
+#ifdef DLT_IEEE802_11_RADIO
+	DLT_CHOICE(DLT_IEEE802_11_RADIO, "802.11 plus radio information header"),
+#endif
+#ifdef DLT_ARCNET_LINUX
+	DLT_CHOICE(DLT_ARCNET_LINUX, "Linux ARCNET"),
+#endif
+#ifdef DLT_LINUX_IRDA
+	DLT_CHOICE(DLT_LINUX_IRDA, "Linux IrDA"),
+#endif
+#ifdef DLT_LANE8023
+	DLT_CHOICE(DLT_LANE8023, "Linux 802.3 LANE"),
+#endif
+#ifdef DLT_CIP
+	DLT_CHOICE(DLT_CIP, "Linux Classical IP-over-ATM"),
+#endif
+#ifdef DLT_HDLC
+	DLT_CHOICE(DLT_HDLC, "Cisco HDLC"),
+#endif
+	DLT_CHOICE_SENTINEL
+};
+#endif /* defined(HAVE_PCAP_DATALINK_NAME_TO_VAL) || defined(HAVE_PCAP_DATALINK_VAL_TO_NAME) */
+
+#ifdef HAVE_PCAP_DATALINK_NAME_TO_VAL
+int
+pcap_datalink_name_to_val(const char *name)
+{
+	int i;
+
+	g_assert(has_wpcap);
+
+	if (p_pcap_datalink_name_to_val != NULL)
+		return p_pcap_datalink_name_to_val(name);
+	else {
+		/*
+		 * We don't have it in WinPcap; do it ourselves.
+		 */
+		for (i = 0; dlt_choices[i].name != NULL; i++) {
+			if (strcasecmp(dlt_choices[i].name + sizeof("DLT_") - 1,
+			    name) == 0)
+				return dlt_choices[i].dlt;
+		}
+		return -1;
+	}
+}
+#endif
+
+#ifdef HAVE_PCAP_DATALINK_VAL_TO_NAME
+const char *
+pcap_datalink_val_to_name(int dlt)
+{
+	int i;
+
+	g_assert(has_wpcap);
+
+	if (p_pcap_datalink_val_to_name != NULL)
+		return p_pcap_datalink_val_to_name(dlt);
+	else {
+		/*
+		 * We don't have it in WinPcap; do it ourselves.
+		 */
+		for (i = 0; dlt_choices[i].name != NULL; i++) {
+			if (dlt_choices[i].dlt == dlt)
+				return dlt_choices[i].name + sizeof("DLT_") - 1;
+		}
+		return NULL;
+	}
+}
+#endif
+
 /* setbuff is win32 specific! */
 int pcap_setbuff(pcap_t *a, int b)
 {
diff -urN ethereal-0.10.6/capture.c ethereal-0.10.7/capture.c
--- ethereal-0.10.6/capture.c	2004-08-12 17:41:37.000000000 -0500
+++ ethereal-0.10.7/capture.c	2004-10-20 17:34:24.000000000 -0500
@@ -1,7 +1,7 @@
 /* capture.c
  * Routines for packet capture windows
  *
- * $Id: capture.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: capture.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -140,7 +140,7 @@
 #include "pcap-util.h"
 #include "alert_box.h"
 #include "simple_dialog.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "globals.h"
 #include "conditions.h"
 #include "capture_stop_conditions.h"
@@ -420,7 +420,12 @@
 
     if (capture_opts.linktype != -1) {
       argv = sync_pipe_add_arg(argv, &argc, "-y");
+#ifdef HAVE_PCAP_DATALINK_VAL_TO_NAME
+      sprintf(ssnap,"%s",pcap_datalink_val_to_name(capture_opts.linktype));
+#else
+      /* XXX - just treat it as a number */
       sprintf(ssnap,"%d",capture_opts.linktype);
+#endif
       argv = sync_pipe_add_arg(argv, &argc, ssnap);
     }
 
diff -urN ethereal-0.10.6/capture_combo_utils.c ethereal-0.10.7/capture_combo_utils.c
--- ethereal-0.10.6/capture_combo_utils.c	2004-08-12 17:41:38.000000000 -0500
+++ ethereal-0.10.7/capture_combo_utils.c	2004-10-20 17:34:25.000000000 -0500
@@ -1,7 +1,7 @@
 /* capture_combo_utils.c
  * Utilities for combo box of interface names
  *
- * $Id: capture_combo_utils.c 11516 2004-07-25 09:55:52Z guy $
+ * $Id: capture_combo_utils.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -22,8 +22,8 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
-/* With MSVC and a libethereal.dll this file needs to import some variables 
-   in a special way. Therefore _NEED_VAR_IMPORT_ is defined. */  
+/* With MSVC and a libethereal.dll this file needs to import some variables
+   in a special way. Therefore _NEED_VAR_IMPORT_ is defined. */
 #define _NEED_VAR_IMPORT_
 
 #ifdef HAVE_CONFIG_H
@@ -36,7 +36,7 @@
 #include <string.h>
 #include <glib.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "pcap-util.h"
 #include "capture_combo_utils.h"
 
@@ -51,7 +51,7 @@
 	char	*descr = NULL;
 	int		lp = 0;
 	int		ct = 0;
-	
+
 	if (prefs.capture_devices_descr == NULL) {
 		/* There are no descriptions. */
 		return NULL;
@@ -61,7 +61,7 @@
 		/* There are, but there isn't one for this interface. */
 		return NULL;
 	}
-	
+
 	while (*p != '\0') {
 		/* error: ran into next interface description */
 		if (*p == ',')
@@ -85,7 +85,7 @@
 			ct++;
 		}
 	}
-	
+
 	if ((lp == 1) && (ct > 0) && (p2 != NULL)) {
 		/* Allocate enough space to return the string,
 		   which runs from p2 to p, plus a terminating
@@ -162,4 +162,87 @@
   }
 }
 
+/*
+ * Given text that contains an interface name possibly prefixed by an
+ * interface description, extract the interface name.
+ */
+char *
+get_if_name(char *if_text)
+{
+  char *if_name;
+
+#ifdef _WIN32
+  /*
+   * We cannot assume that the interface name doesn't contain a space;
+   * some names on Windows OT do.
+   *
+   * We also can't assume it begins with "\Device\", either, as, on
+   * Windows OT, WinPcap doesn't put "\Device\" in front of the name.
+   *
+   * As I remember, we can't assume that the interface description
+   * doesn't contain a colon, either; I think some do.
+   *
+   * We can probably assume that the interface *name* doesn't contain
+   * a colon, however; if any interface name does contain a colon on
+   * Windows, it'll be time to just get rid of the damn interface
+   * descriptions in the drop-down list, have just the names in the
+   * drop-down list, and have a "Browse..." button to browse for interfaces,
+   * with names, descriptions, IP addresses, blah blah blah available when
+   * possible.
+   *
+   * So we search backwards for a colon.  If we don't find it, just
+   * return the entire string; otherwise, skip the colon and any blanks
+   * after it, and return that string.
+   */
+   if_name = if_text + strlen(if_text);
+   for (;;) {
+     if (if_name == if_text) {
+       /* We're at the beginning of the string; return it. */
+       break;
+     }
+     if_name--;
+     if (*if_name == ':') {
+       /*
+        * We've found a colon.
+        * Unfortunately, a colon is used in the string "rpcap://",
+        * which is used in case of a remote capture.
+        * So we'll check to make sure the colon isn't followed by "//";
+        * it'll be followed by a blank if it separates the description
+        * and the interface name.  (We don't wire in "rpcap", in case we
+        * support other protocols in the same syntax.)
+        */
+       if (strncmp(if_name, "://", 3) != 0) {
+         /*
+          * OK, we've found a colon not followed by "//".  Skip blanks
+          * following it.
+          */
+         if_name++;
+         while (*if_name == ' ')
+           if_name++;
+         break;
+       }
+     }
+     /* Keep looking for a colon not followed by "//". */
+   }
+#else
+  /*
+   * There's a space between the interface description and name, and
+   * the interface name shouldn't have a space in it (it doesn't, on
+   * UNIX systems); look backwards in the string for a space.
+   *
+   * (An interface name might, however, contain a colon in it, which
+   * is why we don't use the colon search on UNIX.)
+   */
+  if_name = strrchr(if_text, ' ');
+  if (if_name == NULL) {
+    if_name = if_text;
+  } else {
+    if_name++;
+  }
+#endif
+  return if_name;
+}
+
+
+
 #endif /* HAVE_LIBPCAP */
diff -urN ethereal-0.10.6/capture_combo_utils.h ethereal-0.10.7/capture_combo_utils.h
--- ethereal-0.10.6/capture_combo_utils.h	2004-08-12 17:41:39.000000000 -0500
+++ ethereal-0.10.7/capture_combo_utils.h	2004-10-20 17:34:25.000000000 -0500
@@ -1,7 +1,7 @@
 /* capture_combo_utils.c
  * Declarations of tilities for combo box of interface names
  *
- * $Id: capture_combo_utils.h 11494 2004-07-23 23:36:50Z guy $
+ * $Id: capture_combo_utils.h 11888 2004-09-02 21:49:36Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -31,8 +31,10 @@
 
 /** Build the GList of available capture interfaces.
  *
- * @param if_list the interface list from get_interface_list()
- * @param do_hide hide the "hidden" interfaces
+ * @param if_list An interface list from get_interface_list().
+ * @param do_hide Hide the "hidden" interfaces.
+ *
+ * @return A list of if_info_t structs.
  */
 GList *build_capture_combo_list(GList *if_list, gboolean do_hide);
 
@@ -42,4 +44,16 @@
  */
 void free_capture_combo_list(GList *combo_list);
 
+
+/** Given text that contains an interface name possibly prefixed by an
+ * interface description, extract the interface name.
+ *
+ * @param if_text A string containing the interface description + name.
+ * This is usually the data from one of the list elements returned by
+ * build_capture_combo_list().
+ *
+ * @return The raw interface name, sans description.
+ */
+char *get_if_name(char *if_text);
+
 #endif
diff -urN ethereal-0.10.6/clopts_common.c ethereal-0.10.7/clopts_common.c
--- ethereal-0.10.6/clopts_common.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/clopts_common.c	2004-10-20 17:34:15.000000000 -0500
@@ -0,0 +1,63 @@
+/* clopts_common.c
+ * Handle command-line arguments common to Ethereal and Tethereal
+ *
+ * $Id: clopts_common.c 11956 2004-09-10 22:47:02Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+#include <epan/proto.h>
+
+#include "clopts_common.h"
+
+/*
+ * Handle the "-G" option, to cause protocol field, etc. information
+ * to be printed.
+ */
+void
+handle_dashG_option(int argc, char **argv, char *progname)
+{
+  if (argc >= 2 && strcmp(argv[1], "-G") == 0) {
+    if (argc == 2)
+      proto_registrar_dump_fields(1);
+    else {
+      if (strcmp(argv[2], "fields") == 0)
+        proto_registrar_dump_fields(1);
+      else if (strcmp(argv[2], "fields2") == 0)
+        proto_registrar_dump_fields(2);
+      else if (strcmp(argv[2], "protocols") == 0)
+        proto_registrar_dump_protocols();
+      else if (strcmp(argv[2], "values") == 0)
+        proto_registrar_dump_values();
+      else {
+        fprintf(stderr, "%s: Invalid \"%s\" option for -G flag\n", progname,
+                argv[2]);
+        exit(1);
+      }
+    }
+    exit(0);
+  }
+}
diff -urN ethereal-0.10.6/clopts_common.h ethereal-0.10.7/clopts_common.h
--- ethereal-0.10.6/clopts_common.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/clopts_common.h	2004-10-20 17:34:16.000000000 -0500
@@ -0,0 +1,42 @@
+/* clopts_common.h
+ * Handle command-line arguments common to Ethereal and Tethereal
+ *
+ * $Id: clopts_common.h 11956 2004-09-10 22:47:02Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef __PROTO_DUMPOPTS_H__
+#define __PROTO_DUMPOPTS_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * Handle the "-G" option, to cause protocol field, etc. information
+ * to be printed.
+ */
+void handle_dashG_option(int argc, char **argv, char *progname);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __PROTO_DUMPOPTS_H__ */
diff -urN ethereal-0.10.6/color_filters.c ethereal-0.10.7/color_filters.c
--- ethereal-0.10.6/color_filters.c	2004-08-12 17:42:33.000000000 -0500
+++ ethereal-0.10.7/color_filters.c	2004-10-20 17:35:04.000000000 -0500
@@ -1,7 +1,7 @@
 /* color_filters.c
  * Routines for color filters
  *
- * $Id: color_filters.c 11516 2004-07-25 09:55:52Z guy $
+ * $Id: color_filters.c 12057 2004-09-21 05:17:59Z ulfl $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -80,7 +80,7 @@
 	g_free(colorf);
 }
 
-/* delete the specified filter as an iterator*/
+/* delete the specified filter as an iterator */
 static void
 delete_color_filter_it(gpointer filter_arg, gpointer unused _U_)
 {
@@ -350,8 +350,7 @@
 	return ret;
 }
 
-/* save filters in some other filter file */
-
+/* read filters from some other filter file (import) */
 gboolean
 read_other_filters(gchar *path, gpointer arg)
 {
@@ -376,6 +375,7 @@
   gboolean only_marked;
 };
 
+/* save a single filter */
 static void
 write_filter(gpointer filter_arg, gpointer data_arg)
 {
@@ -411,7 +411,6 @@
 }
 
 /* save filters in users filter file */
-
 gboolean
 write_filters(void)
 {
@@ -441,8 +440,7 @@
 	return TRUE;
 }
 
-/* delete users filter file and reload global filters*/
-
+/* delete users filter file and reload global filters */
 gboolean
 revert_filters(void)
 {
@@ -473,8 +471,7 @@
 }
 
 
-/* save filters in some other filter file */
-
+/* save filters in some other filter file (export) */
 gboolean
 write_other_filters(gchar *path, gboolean only_marked)
 {
diff -urN ethereal-0.10.6/column.c ethereal-0.10.7/column.c
--- ethereal-0.10.6/column.c	2004-08-12 17:41:31.000000000 -0500
+++ ethereal-0.10.7/column.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,451 +0,0 @@
-/* column.c
- * Routines for handling column preferences
- *
- * $Id: column.c 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-
-#include <epan/timestamp.h>
-#include "prefs.h"
-#include "column.h"
-#include <epan/packet.h>
-
-/* Given a format number (as defined in packet.h), returns its equivalent
-   string */
-gchar *
-col_format_to_string(gint fmt) {
-  gchar *slist[] = { "%m", "%t", "%Rt", "%At", "%Yt", "%Tt", "%s", "%rs",
-                     "%us","%hs", "%rhs", "%uhs", "%ns", "%rns", "%uns", "%d",
-                     "%rd", "%ud", "%hd", "%rhd", "%uhd", "%nd", "%rnd",
-                     "%und", "%S", "%rS", "%uS", "%D", "%rD", "%uD", "%p",
-                     "%i", "%L", "%B", "%XO", "%XR", "%I", "%c", "%Xs", 
-                     "%Xd", "%V", "%x", "%e" };
-                     
-  if (fmt < 0 || fmt > NUM_COL_FMTS)
-    return NULL;
-
-  return(slist[fmt]);
-}
-
-/* Given a format number (as defined in packet.h), returns its
-  description */
-static gchar *dlist[NUM_COL_FMTS] = {
-	"Number",
-	"Time (command line specified)",
-	"Relative time",
-	"Absolute time",
-	"Absolute date and time",
-	"Delta time",
-	"Source address",
-	"Src addr (resolved)",
-	"Src addr (unresolved)",
-	"Hardware src addr",
-	"Hw src addr (resolved)",
-	"Hw src addr (unresolved)",
-	"Network src addr",
-	"Net src addr (resolved)",
-	"Net src addr (unresolved)",
-	"Destination address",
-	"Dest addr (resolved)",
-	"Dest addr (unresolved)",
-	"Hardware dest addr",
-	"Hw dest addr (resolved)",
-	"Hw dest addr (unresolved)",
-	"Network dest addr",
-	"Net dest addr (resolved)",
-	"Net dest addr (unresolved)",
-	"Source port",
-	"Src port (resolved)",
-	"Src port (unresolved)",
-	"Destination port",
-	"Dest port (resolved)",
-	"Dest port (unresolved)",
-	"Protocol",
-	"Information",
-	"Packet length (bytes)" ,
-	"Cumulative Bytes" ,
-	"OXID",
-	"RXID",
-	"FW-1 monitor if/direction",
-	"Circuit ID",
-	"Src PortIdx",
-	"Dst PortIdx",
-	"VSAN",
-	"IEEE 802.11 TX rate",
-	"IEEE 802.11 RSSI",
-};
-
-gchar *
-col_format_desc(gint fmt) {
-  g_assert((fmt >= 0) && (fmt < NUM_COL_FMTS));
-  return(dlist[fmt]);
-}
-
-/* Marks each array element true if it can be substituted for the given
-   column format */
-void
-get_column_format_matches(gboolean *fmt_list, gint format) {
-
-  /* Get the obvious: the format itself */
-  if ((format >= 0) && (format < NUM_COL_FMTS))
-    fmt_list[format] = TRUE;
-
-  /* Get any formats lower down on the chain */
-  switch (format) {
-    case COL_DEF_SRC:
-      fmt_list[COL_RES_DL_SRC] = TRUE;
-      fmt_list[COL_RES_NET_SRC] = TRUE;
-      break;
-    case COL_RES_SRC:
-      fmt_list[COL_RES_DL_SRC] = TRUE;
-      fmt_list[COL_RES_NET_SRC] = TRUE;
-      break;
-    case COL_UNRES_SRC:
-      fmt_list[COL_UNRES_DL_SRC] = TRUE;
-      fmt_list[COL_UNRES_NET_SRC] = TRUE;
-      break;
-    case COL_DEF_DST:
-      fmt_list[COL_RES_DL_DST] = TRUE;
-      fmt_list[COL_RES_NET_DST] = TRUE;
-      break;
-    case COL_RES_DST:
-      fmt_list[COL_RES_DL_DST] = TRUE;
-      fmt_list[COL_RES_NET_DST] = TRUE;
-      break;
-    case COL_UNRES_DST:
-      fmt_list[COL_UNRES_DL_DST] = TRUE;
-      fmt_list[COL_UNRES_NET_DST] = TRUE;
-      break;
-    case COL_DEF_DL_SRC:
-      fmt_list[COL_RES_DL_SRC] = TRUE;
-      break;
-    case COL_DEF_DL_DST:
-      fmt_list[COL_RES_DL_DST] = TRUE;
-      break;
-    case COL_DEF_NET_SRC:
-      fmt_list[COL_RES_NET_SRC] = TRUE;
-      break;
-    case COL_DEF_NET_DST:
-      fmt_list[COL_RES_NET_DST] = TRUE;
-      break;
-    case COL_DEF_SRC_PORT:
-      fmt_list[COL_RES_SRC_PORT] = TRUE;
-      break;
-    case COL_DEF_DST_PORT:
-      fmt_list[COL_RES_DST_PORT] = TRUE;
-      break;
-    case COL_OXID:
-      fmt_list[COL_OXID] = TRUE;
-      break;
-    case COL_RXID:
-      fmt_list[COL_RXID] = TRUE;
-      break;
-    case COL_IF_DIR:
-      fmt_list[COL_IF_DIR] = TRUE;
-      break;
-    case COL_CIRCUIT_ID:
-      fmt_list[COL_CIRCUIT_ID] = TRUE;
-      break;
-    case COL_SRCIDX:
-      fmt_list[COL_SRCIDX] = TRUE;
-      break;
-    case COL_DSTIDX:
-      fmt_list[COL_DSTIDX] = TRUE;
-      break;
-    case COL_VSAN:
-      fmt_list[COL_VSAN] = TRUE;
-      break;
-    case COL_TX_RATE:
-      fmt_list[COL_TX_RATE] = TRUE;
-      break;
-    case COL_RSSI:
-      fmt_list[COL_RSSI] = TRUE;
-      break;
-    default:
-      break;
-  }
-}
-
-/* Returns a string representing the longest possible value for a
-   particular column type.
-
-   Except for the COL...SRC and COL...DST columns, these are used
-   only when a capture is being displayed while it's taking place;
-   they are arguably somewhat fragile, as changes to the code that
-   generates them don't cause these widths to change, but that's
-   probably not too big a problem, given that the sizes are
-   recomputed based on the actual data in the columns when the capture
-   is done, and given that the width for COL...SRC and COL...DST columns
-   is somewhat arbitrary in any case.  We should probably clean
-   that up eventually, though. */
-char *
-get_column_longest_string(gint format)
-{
-  switch (format) {
-    case COL_NUMBER:
-      return "0000000";
-      break;
-    case COL_CLS_TIME:
-      if (get_timestamp_setting() == TS_ABSOLUTE)
-        return "00:00:00.000000";
-      else if (get_timestamp_setting() == TS_ABSOLUTE_WITH_DATE)
-        return "0000-00-00 00:00:00.000000";
-      else
-        return "0000.000000";
-      break;
-    case COL_ABS_TIME:
-      return "00:00:00.000000";
-      break;
-    case COL_ABS_DATE_TIME:
-      return "0000-00-00 00:00:00.000000";
-      break;
-    case COL_REL_TIME:
-    case COL_DELTA_TIME:
-      return "0000.000000";
-      break;
-    case COL_DEF_SRC:
-    case COL_RES_SRC:
-    case COL_UNRES_SRC:
-    case COL_DEF_DL_SRC:
-    case COL_RES_DL_SRC:
-    case COL_UNRES_DL_SRC:
-    case COL_DEF_NET_SRC:
-    case COL_RES_NET_SRC:
-    case COL_UNRES_NET_SRC:
-    case COL_DEF_DST:
-    case COL_RES_DST:
-    case COL_UNRES_DST:
-    case COL_DEF_DL_DST:
-    case COL_RES_DL_DST:
-    case COL_UNRES_DL_DST:
-    case COL_DEF_NET_DST:
-    case COL_RES_NET_DST:
-    case COL_UNRES_NET_DST:
-      return "00000000.000000000000"; /* IPX-style */
-      break;
-    case COL_DEF_SRC_PORT:
-    case COL_RES_SRC_PORT:
-    case COL_UNRES_SRC_PORT:
-    case COL_DEF_DST_PORT:
-    case COL_RES_DST_PORT:
-    case COL_UNRES_DST_PORT:
-      return "000000";
-      break;
-    case COL_PROTOCOL:
-      return "Protocol";	/* not the longest, but the longest is too long */
-      break;
-    case COL_PACKET_LENGTH:
-      return "000000";
-      break;
-    case COL_CUMULATIVE_BYTES:
-      return "00000000";
-      break;
-    case COL_RXID:
-    case COL_OXID:
-      return "000000";
-      break;
-    case COL_IF_DIR:
-      return "i 00000000 I";
-      break;
-    case COL_CIRCUIT_ID:
-      return "000000";
-      break;
-    case COL_SRCIDX:
-    case COL_DSTIDX:
-      return "0000000";
-      break;
-    case COL_VSAN:
-      return "000000";
-      break;
-    case COL_TX_RATE:
-      return "108.0";
-      break;
-    case COL_RSSI:
-      return "100";
-      break;
-    default: /* COL_INFO */
-      return "Source port: kerberos-master  Destination port: kerberos-master";
-      break;
-  }
-}
-
-/* Returns the longest possible width, in characters, for a particular
-   column type. */
-gint
-get_column_char_width(gint format)
-{
-  return strlen(get_column_longest_string(format));
-}
-
-#define TIME_DEF      0
-#define TIME_REL      1
-#define TIME_ABS      2
-#define DATE_TIME_ABS 3
-#define TIME_DEL      4
-
-#define RES_DEF  0
-#define RES_DO   1
-#define RES_DONT 2
-
-#define ADDR_DEF 0
-#define ADDR_DL  3
-#define ADDR_NET 6
-
-gint
-get_column_format(gint col) {
-  GList    *clp = g_list_nth(prefs.col_list, col);
-  fmt_data *cfmt;
-
-  cfmt = (fmt_data *) clp->data;
-
-  return(get_column_format_from_str(cfmt->fmt));
-}
-
-gint
-get_column_format_from_str(gchar *str) {
-  gchar *cptr = str;
-  gint      res_off = RES_DEF, addr_off = ADDR_DEF, time_off = TIME_DEF;
-  gint      prev_code = -1;
-
-  /* To do: Make this parse %-formatted strings "for real" */
-  while (*cptr != '\0') {
-    switch (*cptr) {
-      case 't':  /* To do: fix for absolute and delta */
-        return COL_CLS_TIME + time_off;
-        break;
-      case 'm':
-        return COL_NUMBER;
-        break;
-      case 's':
-        if (prev_code == COL_OXID) {
-          return COL_SRCIDX;
-        }
-        else {
-          return COL_DEF_SRC + res_off + addr_off;
-        }
-        break;
-      case 'd':
-        if (prev_code == COL_OXID) {
-          return COL_DSTIDX;
-        }
-        else {
-          return COL_DEF_DST + res_off + addr_off;
-        }
-        break;
-      case 'S':
-        return COL_DEF_SRC_PORT + res_off;
-        break;
-      case 'D':
-        return COL_DEF_DST_PORT + res_off;
-        break;
-      case 'p':
-        return COL_PROTOCOL;
-        break;
-      case 'i':
-        return COL_INFO;
-        break;
-      case 'r':
-        res_off = RES_DO;
-        break;
-      case 'u':
-        res_off = RES_DONT;
-        break;
-      case 'h':
-        addr_off = ADDR_DL;
-        break;
-      case 'n':
-        addr_off = ADDR_NET;
-        break;
-      case 'R':
-        if (prev_code == COL_OXID) {
-            return COL_RXID;
-        }
-        else {
-            time_off = TIME_REL;
-        }
-        break;
-      case 'A':
-        time_off = TIME_ABS;
-        break;
-      case 'Y':
-        time_off = DATE_TIME_ABS;
-        break;
-      case 'T':
-        time_off = TIME_DEL;
-        break;
-      case 'L':
-        return COL_PACKET_LENGTH;
-        break;
-      case 'B':
-        return COL_CUMULATIVE_BYTES;
-        break;
-      case 'X':
-        prev_code = COL_OXID;
-        break;
-      case 'O':
-        return COL_OXID;
-        break;
-      case 'I':
-        return COL_IF_DIR;
-        break;
-      case 'c':
-        return COL_CIRCUIT_ID;
-        break;
-      case 'V':
-        return COL_VSAN;
-        break;
-      case 'x':
-        return COL_TX_RATE;
-        break;
-      case 'e':
-        return COL_RSSI;
-        break;
-    }
-    cptr++;
-  }
-  return -1;	/* illegal */
-}
-
-gchar *
-get_column_title(gint col) {
-  GList    *clp = g_list_nth(prefs.col_list, col);
-  fmt_data *cfmt;
-
-  cfmt = (fmt_data *) clp->data;
-
-  return(cfmt->title);
-}
diff -urN ethereal-0.10.6/column.h ethereal-0.10.7/column.h
--- ethereal-0.10.6/column.h	2004-08-12 17:41:37.000000000 -0500
+++ ethereal-0.10.7/column.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,43 +0,0 @@
-/* column.h
- * Definitions for column handling routines
- *
- * $Id: column.h 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@zing.org>
- * Copyright 1998 Gerald Combs
- *
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifndef __COLUMN_H__
-#define __COLUMN_H__
-
-typedef struct _fmt_data {
-  gchar *title;
-  gchar *fmt;
-} fmt_data;
-
-gchar               *col_format_to_string(gint);
-gchar               *col_format_desc(gint);
-gint                 get_column_format(gint);
-void                 get_column_format_matches(gboolean *, gint);
-gint                 get_column_format_from_str(gchar *);
-gchar               *get_column_title(gint);
-char                *get_column_longest_string(gint);
-gint                 get_column_char_width(gint format);
-
-#endif /* column.h */
diff -urN ethereal-0.10.6/config.h.in ethereal-0.10.7/config.h.in
--- ethereal-0.10.6/config.h.in	2004-08-12 21:05:22.000000000 -0500
+++ ethereal-0.10.7/config.h.in	2004-10-20 21:51:16.000000000 -0500
@@ -64,6 +64,9 @@
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
+/* Define to use MIT kerberos */
+#undef HAVE_MIT_KERBEROS
+
 /* Define to 1 if you have the <netdb.h> header file. */
 #undef HAVE_NETDB_H
 
@@ -89,7 +92,8 @@
 /* Define to 1 if you have the `pcap_datalink_val_to_name' function. */
 #undef HAVE_PCAP_DATALINK_VAL_TO_NAME
 
-/* Define to 1 if you have the `pcap_findalldevs' function. */
+/* Define to 1 if you have the `pcap_findalldevs' function and a pcap.h that
+   declares pcap_if_t. */
 #undef HAVE_PCAP_FINDALLDEVS
 
 /* Define to 1 if you have the `pcap_lib_version' function. */
@@ -113,7 +117,7 @@
 /* Define if sa_len field exists in struct sockaddr */
 #undef HAVE_SA_LEN
 
-/* Define to if some SNMP support is to be used */
+/* Define to 1 if some SNMP support is to be used */
 #undef HAVE_SOME_SNMP
 
 /* Define to 1 if you have the <stdarg.h> header file. */
@@ -170,6 +174,9 @@
 /* Define if <inttypes.h> defines PRI[doxu]64 macros */
 #undef INTTYPES_H_DEFINES_FORMATS
 
+/* Define if g_ascii_strtoull.h needs to be included */
+#undef NEED_G_ASCII_STRTOULL_H
+
 /* Define if inet/aton.h needs to be included */
 #undef NEED_INET_ATON_H
 
diff -urN ethereal-0.10.6/config.h.win32 ethereal-0.10.7/config.h.win32
--- ethereal-0.10.6/config.h.win32	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/config.h.win32	2004-10-20 17:35:06.000000000 -0500
@@ -1,4 +1,4 @@
-/* $Id: config.h.win32 11400 2004-07-18 00:24:25Z guy $ */
+/* $Id: config.h.win32 12304 2004-10-15 15:36:12Z gerald $ */
 /* config.h.win32 Generated manually. :-) */
 /* config.h.  Generated automatically by configure.  */
 /* config.h.in.  Generated automatically from configure.in by autoheader.  */
@@ -33,6 +33,16 @@
 #define HAVE_PLUGINS		1
 #define PLUGINS_NEED_ADDRESS_TABLE 1
 
+/* Plugins can also use the import library of libethereal.dll instead
+   of the old API. In that case we undefine PLUGINS_NEED_ADDRESS_TABLE 
+   for the plugin. We don't undefine PLUGINS_NEED_ADDRESS_TABLE globally.
+   Thus Ethereal will be still able to load plugins using the old API. 
+   The macro HAVE_WIN32_LIBETHEREAL_LIB has to be defined in plugin's 
+   makefile.nmake. A template is available in doc/README.plugins */
+#ifdef HAVE_WIN32_LIBETHEREAL_LIB
+#undef PLUGINS_NEED_ADDRESS_TABLE
+#endif
+
 /* #undef HAVE_SA_LEN */
 
 /* #undef NEED_SNPRINTF_H */
@@ -43,6 +53,8 @@
 
 @HAVE_LIBPCAP@
 @HAVE_PCAP_FINDALLDEVS@
+@HAVE_PCAP_DATALINK_NAME_TO_VAL@
+@HAVE_PCAP_DATALINK_VAL_TO_NAME@
 @WPCAP_CONSTIFIED@
 @HAVE_LIBETHEREALDLL@
 
@@ -167,15 +179,10 @@
 /* Define to use the PCRE library */
 @HAVE_PCRE@
 
-@HAVE_LIBETHEREALDLL@
-
-/* define macro for importing variables from an dll 
- * it depends on HAVE_LIBETHEREAL and _NEED_VAR_IMPORT_
- */
-#if defined (_NEED_VAR_IMPORT_) && defined (HAVE_LIBETHEREALDLL)
-#  define ETH_VAR_IMPORT __declspec(dllimport) extern
-#else
-#  define ETH_VAR_IMPORT extern
+/* Define to use the Nettle library */
+@HAVE_NETTLE@
+#ifdef HAVE_LIBNETTLE
+#define HAVE_KERBEROS 1
 #endif
 
 #ifndef WIN32
diff -urN ethereal-0.10.6/config.nmake ethereal-0.10.7/config.nmake
--- ethereal-0.10.6/config.nmake	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/config.nmake	2004-10-20 21:48:54.000000000 -0500
@@ -1,7 +1,11 @@
-# $Id: config.nmake 11611 2004-08-06 14:08:54Z gerald $
+# $Id: config.nmake 12366 2004-10-21 02:48:52Z gerald $
+
+# Some more informations about the settings in this file, can be found 
+# in the file README.win32.
+
+# The current Ethereal version
+VERSION=0.10.7
 
-VERSION=0.10.6
-WTAP_VERSION=0.1
 #
 # The RC_VERSION should be comma-separated, not dot-separated, 
 # as per Graham Bloice's message in
@@ -13,7 +17,10 @@
 # number to be correctly displayed in the explorer properties dialog
 # for the executables, and XP's tooltip, rather than 0.0.0.0."
 #
-RC_VERSION=0,10,6
+RC_VERSION=0,10,7
+
+# The version of the wiretap library
+WTAP_VERSION=0.1
 RC_WTAP_VERSION=0,1
 
 #
@@ -94,7 +101,7 @@
 # Set NET_SNMP_DIR to the pathname of the directory in which the
 # Net-SNMP include files and library resides.
 #
-NET_SNMP_DIR=$(ETHEREAL_LIBS)\net-snmp-5.1
+NET_SNMP_DIR=$(ETHEREAL_LIBS)\net-snmp-5.1.2
 
 #
 # If you have GNU ADNS, set this to the pathname of the directory in
@@ -103,7 +110,7 @@
 # If you don't have GNU ADNS, comment this line out, so that ADNS_DIR
 # isn't defined.
 #
-ADNS_DIR=$(ETHEREAL_LIBS)\adns-1.0-win32-03
+ADNS_DIR=$(ETHEREAL_LIBS)\adns-1.0-win32-04
 
 #
 # If you have the PCRE (Perl Compatible Regular Expressions) library,
@@ -116,6 +123,15 @@
 PCRE_DIR=$(ETHEREAL_LIBS)\pcre-4.4
 
 #
+# If you have the Nettle encryption library, set this to the pathname
+# of the directory in which the nettle package has been extracted.
+#
+# If you don't have Nettle, comment this line out, so that NETTLE_DIR
+# isn't defined.
+#
+# NETTLE_DIR=$(ETHEREAL_LIBS)\nettle-1.10
+
+#
 # Set ICONV_DIR to the pathname of the directory in which the
 # ICONV include files and library resides.
 #
@@ -139,22 +155,39 @@
 # Set PDB_FILE according to your VC++ version 
 PDB_FILE=vc*.pdb
 
-# Set path if you need to find some binary
-PATH=c:\cygwin\bin;c:\python23;$(PATH)
+# add cygwin binaries to the path
+PATH=c:\cygwin\bin;$(PATH)
 
-# Set path to some required DLLs
+# add some required DLLs to the path 
 PATH=$(GLIB_DIR)\bin;$(GETTEXT_DIR)\bin;$(ICONV_DIR)\bin;$(PATH)
 
+
+# Set the following commands to find the tools.
+# The easiest way is to use the corresponding packages from cygwin.
+
+# command for a shell (typically cygwin's bash package)
 SH=bash
+
+# command for perl (typically cygwin's perl package)
 PERL=perl
+
+# command for pod2man and pod2html (part of the perl package)
 POD2MAN=$(SH) pod2man
 POD2HTML=$(SH) pod2html
-PYTHON="C:/python23/python.exe"
+
+# command for python (native windows version)
+#PYTHON="C:/python23/python.exe"
+# add native python to the path (not needed if cygwin's python is used)
+#PATH=c:\python23;$(PATH)
+
+# command for python (typically cygwin's python package)
+PYTHON=env python
+
+# command for lex/flexx (typically cygwin's flex package)
 LEX=flex
-YACC=bison
 
-# Set YACC_OPTS if cygnus bison can't find template file.
-#YACC_OPTS=-S t:\w32-ix86\cygnus\cygwin-b20\share\bison.simple 
+# command for yacc/bison (typically cygwin's bison package)
+YACC=bison
 
 # To build the installer
 MAKENSIS="C:/program files/nsis/makensis.exe"
@@ -198,6 +231,11 @@
 # following line
 ENABLE_LIBETHEREAL=USE
 
+!IFDEF ENABLE_LIBETHEREAL
+# Uncomment next line to link plugins with the import library of libethereal.dll 
+#LINK_PLUGINS_WITH_LIBETHEREAL=USE
+!ENDIF
+
 #
 # You should not have to change anything below this comment.
 # If you do, it's a deficiency in the Makefile.nmake files;
@@ -238,14 +276,19 @@
 WINPCAP_CONFIG=^#define HAVE_LIBPCAP 1
 !IF "$(WINPCAP_VERSION)" == "3.0" || "$(WINPCAP_VERSION)" == "3.1"
 PCAP_FINDALLDEVS_CONFIG=^#define HAVE_PCAP_FINDALLDEVS 1
+PCAP_DATALINK_NAME_TO_VAL_CONFIG=^#define HAVE_PCAP_DATALINK_NAME_TO_VAL 1
+PCAP_DATALINK_VAL_TO_NAME_CONFIG=^#define HAVE_PCAP_DATALINK_VAL_TO_NAME 1
 WPCAP_CONSTIFIED_CONFIG=^#define WPCAP_CONSTIFIED 1
 !ELSE
 PCAP_FINDALLDEVS_CONFIG=
+PCAP_DATALINK_VAL_TO_NAME_CONFIG=
 WPCAP_CONSTIFIED=
 !ENDIF
 !ELSE
 WINPCAP_CONFIG=
 PCAP_FINDALLDEVS_CONFIG=
+PCAP_DATALINK_NAME_TO_VAL_CONFIG=
+PCAP_DATALINK_VAL_TO_NAME_CONFIG=
 WPCAP_CONSTIFIED=
 !ENDIF
 
@@ -285,6 +328,17 @@
 PCRE_CONFIG=
 !ENDIF
 
+!IFDEF NETTLE_DIR
+NETTLE_CFLAGS=/I$(NETTLE_DIR)
+NETTLE_LIBS=$(NETTLE_DIR)\libnettle.lib
+# Nmake uses carets to escape special characters
+NETTLE_CONFIG=^#define HAVE_LIBNETTLE 1
+!else
+NETTLE_CFLAGS=
+NETTLE_LIBS=
+NETTLE_CONFIG=
+!ENDIF
+
 !IFDEF ENABLE_LIBETHEREAL
 LIBETHEREAL_CONFIG=^#define HAVE_LIBETHEREALDLL 1
 !ELSE
diff -urN ethereal-0.10.6/configure ethereal-0.10.7/configure
--- ethereal-0.10.6/configure	2004-08-12 21:04:27.000000000 -0500
+++ ethereal-0.10.7/configure	2004-10-20 21:50:23.000000000 -0500
@@ -469,7 +469,7 @@
 #endif"
 
 ac_subdirs_all="$ac_subdirs_all wiretap"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP LN_S ECHO RANLIB ac_ct_RANLIB EGREP LIBTOOL YACC LEX LEXLIB LEX_OUTPUT_ROOT PERL POD2MAN POD2HTML PYTHON FLEX_PATH DOXYGEN HAVE_DOXYGEN HAVE_DOXYGEN_TRUE HAVE_DOXYGEN_FALSE HAVE_PKGPROTO HAVE_PKGMK HAVE_PKGTRANS HAVE_SVR4_PACKAGING ac_cv_ethereal_have_rpm HAVE_RPM FRAMEWORKS USE_GTK2_TRUE USE_GTK2_FALSE USE_THREADS_TRUE USE_THREADS_FALSE USE_PROFILE_BUILD_TRUE USE_PROFILE_BUILD_FALSE PKG_CONFIG GTK_CFLAGS GTK_LIBS GTK_CONFIG GLIB_CFLAGS GLIB_LIBS GLIB_GENMARSHAL GOBJECT_QUERY GLIB_MKENUMS GLIB_CONFIG ethereal_bin ethereal_man rdps_bin tethereal_bin tethereal_man etherealfilter_man editcap_bin editcap_man capinfo_bin capinfo_man mergecap_bin mergecap_man text2pcap_bin text2pcap_man idl2eth_bin idl2eth_man dftest_bin randpkt_bin NSL_LIBS SOCKET_LIBS PCAP_LIBS PCRE_LIBS SETUID_INSTALL_TRUE SETUID_INSTALL_FALSE SSL_LIBS NETSNMPCONFIG SNMP_LIBS KRB5_CONFIG KRB5_LIBS ADNS_LIBS SNPRINTF_C SNPRINTF_O STRERROR_C STRERROR_O STRCASECMP_C STRCASECMP_O STRNCASECMP_C STRNCASECMP_O MKSTEMP_C MKSTEMP_O INET_ATON_C INET_ATON_O INET_PTON_C INET_PTON_O INET_NTOP_C INET_NTOP_O STRPTIME_C STRPTIME_O ethereal_SUBDIRS HAVE_PLUGINS_TRUE HAVE_PLUGINS_FALSE plugindir PLUGIN_LIBS LIBTOOL_DEPS ENABLE_STATIC_TRUE ENABLE_STATIC_FALSE ENABLE_STATIC subdirs LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP LN_S ECHO RANLIB ac_ct_RANLIB EGREP LIBTOOL YACC LEX LEXLIB LEX_OUTPUT_ROOT PERL POD2MAN POD2HTML PYTHON FLEX_PATH DOXYGEN HAVE_DOXYGEN HAVE_DOXYGEN_TRUE HAVE_DOXYGEN_FALSE HAVE_PKGPROTO HAVE_PKGMK HAVE_PKGTRANS HAVE_SVR4_PACKAGING ac_cv_ethereal_have_rpm HAVE_RPM FRAMEWORKS USE_GTK2_TRUE USE_GTK2_FALSE USE_THREADS_TRUE USE_THREADS_FALSE USE_PROFILE_BUILD_TRUE USE_PROFILE_BUILD_FALSE PKG_CONFIG GTK_CFLAGS GTK_LIBS GTK_CONFIG GLIB_CFLAGS GLIB_LIBS GLIB_GENMARSHAL GOBJECT_QUERY GLIB_MKENUMS GLIB_CONFIG ethereal_bin ethereal_man rdps_bin tethereal_bin tethereal_man etherealfilter_man editcap_bin editcap_man capinfos_bin capinfos_man mergecap_bin mergecap_man text2pcap_bin text2pcap_man idl2eth_bin idl2eth_man dftest_bin randpkt_bin NSL_LIBS SOCKET_LIBS PCAP_LIBS PCRE_LIBS SETUID_INSTALL_TRUE SETUID_INSTALL_FALSE SSL_LIBS NETSNMPCONFIG SNMP_LIBS KRB5_CONFIG KRB5_LIBS ADNS_LIBS SNPRINTF_C SNPRINTF_O STRERROR_C STRERROR_O STRCASECMP_C STRCASECMP_O STRNCASECMP_C STRNCASECMP_O MKSTEMP_C MKSTEMP_O G_ASCII_STRTOULL_C G_ASCII_STRTOULL_O G_ASCII_STRTOULL_LO INET_ATON_C INET_ATON_O INET_ATON_LO INET_PTON_C INET_PTON_O INET_PTON_LO INET_NTOP_C INET_NTOP_O INET_NTOP_LO STRPTIME_C STRPTIME_O ethereal_SUBDIRS HAVE_PLUGINS_TRUE HAVE_PLUGINS_FALSE plugindir PLUGIN_LIBS LIBTOOL_DEPS ENABLE_STATIC_TRUE ENABLE_STATIC_FALSE ENABLE_STATIC subdirs LIBOBJS LTLIBOBJS'
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -1027,7 +1027,7 @@
   --disable-glibtest       Do not try to compile and run a test GLIB program
   --enable-tethereal      build tethereal.  default=yes
   --enable-editcap        build editcap.  default=yes
-  --enable-capinfo        build capinfo.  default=yes
+  --enable-capinfos        build capinfos.  default=yes
   --enable-mergecap       build mergecap.  default=yes
   --enable-text2pcap      build text2pcap.  default=yes
   --enable-idl2eth        build idl2eth.  default=yes
@@ -1052,7 +1052,7 @@
   --with-ssl=DIR        use SSL crypto library (located in directory DIR, if supplied).   default=no
   --with-net-snmp=PATH    use NET-SNMP library, with PATH as the location of the net-snmp-config shell script that comes with the net-snmp package.
   --with-ucd-snmp=DIR   use UCD SNMP client library (located in directory DIR, if supplied).  default=yes, if present
-  --with-krb5=DIR       use kerberos/heimdal (located in directory DIR, if supplied) to use in kerberos dissection  default=yes
+  --with-krb5=DIR       use kerberos (located in directory DIR, if supplied) to use in kerberos dissection  default=yes
   --with-adns=DIR       use GNU ADNS (located in directory DIR, if supplied).   default=yes, if present
   --with-plugins=DIR    support plugins (installed in DIR, if supplied).
 
@@ -1864,7 +1864,7 @@
 
 # Define the identity of the package.
  PACKAGE=ethereal
- VERSION=0.10.6
+ VERSION=0.10.7
 
 
 cat >>confdefs.h <<_ACEOF
@@ -10279,8 +10279,8 @@
      GLIB_GENMARSHAL=""
      GOBJECT_QUERY=""
      GLIB_MKENUMS=""
-     { { echo "$as_me:$LINENO: error: GLib distribution not found." >&5
-echo "$as_me: error: GLib distribution not found." >&2;}
+     { { echo "$as_me:$LINENO: error: GLib2 distribution not found." >&5
+echo "$as_me: error: GLib2 distribution not found." >&2;}
    { (exit 1); exit 1; }; }
   fi
 
@@ -11584,7 +11584,7 @@
 #	  ifdef HAVE_INTTYPES_H
 	  #include <inttypes.h>
 #	  endif
-	  #include <glib.h>
+	  #include <glibconfig.h>
 	  #include <stdio.h>
 	  #include <sys/types.h>
 
@@ -11667,7 +11667,7 @@
 #	  ifdef HAVE_INTTYPES_H
 	  #include <inttypes.h>
 #	  endif
-	  #include <glib.h>
+	  #include <glibconfig.h>
 	  #include <stdio.h>
 	  #include <sys/types.h>
 
@@ -11750,7 +11750,7 @@
 #	  ifdef HAVE_INTTYPES_H
 	  #include <inttypes.h>
 #	  endif
-	  #include <glib.h>
+	  #include <glibconfig.h>
 	  #include <stdio.h>
 	  #include <sys/types.h>
 
@@ -11887,22 +11887,22 @@
 
 
 
-# Enable/disable capinfo
+# Enable/disable capinfos
 
-# Check whether --enable-capinfo or --disable-capinfo was given.
-if test "${enable_capinfo+set}" = set; then
-  enableval="$enable_capinfo"
-  enable_capinfo=$enableval
+# Check whether --enable-capinfos or --disable-capinfos was given.
+if test "${enable_capinfos+set}" = set; then
+  enableval="$enable_capinfos"
+  enable_capinfos=$enableval
 else
-  enable_capinfo=yes
+  enable_capinfos=yes
 fi;
 
-if test "x$enable_capinfo" = "xyes" ; then
-	capinfo_bin="capinfo\$(EXEEXT)"
-	capinfo_man="capinfo.1"
+if test "x$enable_capinfos" = "xyes" ; then
+	capinfos_bin="capinfos\$(EXEEXT)"
+	capinfos_man="capinfos.1"
 else
-	capinfo_bin=""
-	capinfo_man=""
+	capinfos_bin=""
+	capinfos_man=""
 fi
 
 
@@ -12836,9 +12836,7 @@
 echo "${ECHO_T}no" >&6
 	fi
 
-
-
-for ac_func in pcap_findalldevs pcap_lib_version pcap_open_dead
+for ac_func in pcap_open_dead
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -12939,6 +12937,96 @@
 fi
 done
 
+	#
+	# Later versions of Mac OS X 10.3[.x] ship a pcap.h that
+	# doesn't define pcap_if_t but ship an 0.8[.x] libpcap,
+	# so the library has "pcap_findalldevs()", but pcap.h
+	# doesn't define "pcap_if_t" so you can't actually *use*
+	# "pcap_findalldevs()".
+	#
+	# That even appears to be true of systems shipped with
+	# 10.3.4, so it doesn't appear only to be a case of
+	# Software Update not updating header files.
+	#
+	# (You can work around this by installing the 0.8 header
+	# files.)
+	#
+	echo "$as_me:$LINENO: checking whether pcap_findalldevs is present and usable" >&5
+echo $ECHO_N "checking whether pcap_findalldevs is present and usable... $ECHO_C" >&6
+if test "${ac_cv_func_pcap_findalldevs+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+	    cat >conftest.$ac_ext <<_ACEOF
+
+		/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+		    #include <pcap.h>
+		    main()
+		    {
+		      pcap_if_t *devpointer;
+		      char errbuf[1];
+
+		      pcap_findalldevs(&devpointer, errbuf);
+		    }
+
+
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+		ac_cv_func_pcap_findalldevs=yes
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+		ac_cv_func_pcap_findalldevs=no
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_pcap_findalldevs" >&5
+echo "${ECHO_T}$ac_cv_func_pcap_findalldevs" >&6
+	#
+	# Don't check for other new routines that showed up after
+	# "pcap_findalldevs()" if we don't have a usable
+	# "pcap_findalldevs()", so we don't end up using them if the
+	# "pcap.h" is crufty and old and doesn't declare them.
+	#
+	if test $ac_cv_func_pcap_findalldevs = "yes" ; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_PCAP_FINDALLDEVS 1
+_ACEOF
+
 
 
 for ac_func in pcap_datalink_val_to_name pcap_datalink_name_to_val
@@ -13044,7 +13132,8 @@
 
 
 
-for ac_func in pcap_list_datalinks pcap_set_datalink
+
+for ac_func in pcap_list_datalinks pcap_set_datalink pcap_lib_version
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -13145,6 +13234,7 @@
 fi
 done
 
+	fi
 	LIBS="$ac_save_LIBS"
 
 fi
@@ -15139,72 +15229,62 @@
 
 
 SSL_LIBS=''
-echo "$as_me:$LINENO: checking whether to use SSL library if available" >&5
-echo $ECHO_N "checking whether to use SSL library if available... $ECHO_C" >&6
-if test "x$enable_ssl" = "xno" ; then
-	echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-else
-	echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-	echo "$as_me:$LINENO: checking whether SSL library is available" >&5
-echo $ECHO_N "checking whether SSL library is available... $ECHO_C" >&6
-
-	want_ssl=defaultno
+echo "$as_me:$LINENO: checking whether to use SSL library" >&5
+echo $ECHO_N "checking whether to use SSL library... $ECHO_C" >&6
 
 
 # Check whether --with-ssl or --without-ssl was given.
 if test "${with_ssl+set}" = set; then
   withval="$with_ssl"
 
-	if   test "x$withval" = "xno";  then
-		want_ssl=no
-	elif test "x$withval" = "xyes"; then
-		want_ssl=yes
-	elif test -d "$withval"; then
-		want_ssl=yes
-		LDFLAGS="$LDFLAGS -L${withval}/lib"
+if test "x$withval" = "xno";  then
+	want_ssl=no
+elif test "x$withval" = "xyes"; then
+	want_ssl=yes
+elif test -d "$withval"; then
+	want_ssl=yes
+	LDFLAGS="$LDFLAGS -L${withval}/lib"
 case "$host_os" in
   solaris*)
     LDFLAGS="$LDFLAGS -R${withval}/lib"
   ;;
 esac
 
-	fi
-
-fi;
+fi
 
-	if test "x$want_ssl" = "xdefaultyes"; then
-		want_ssl=yes
-		withval=/usr/local/ssl
-		if test -d "$withval"; then
-			LDFLAGS="$LDFLAGS -L${withval}/lib"
-case "$host_os" in
-  solaris*)
-    LDFLAGS="$LDFLAGS -R${withval}/lib"
-  ;;
-esac
+else
 
-		fi
-	fi
+	want_ssl=no
 
-	if test "x$want_ssl" = "xyes"; then
-	    LIBS="-lcrypto"
-            cat >conftest.$ac_ext <<_ACEOF
+fi;
+if test "x$want_ssl" = "xyes"; then
+	echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+	echo "$as_me:$LINENO: checking for EVP_md5 in -lcrypto" >&5
+echo $ECHO_N "checking for EVP_md5 in -lcrypto... $ECHO_C" >&6
+if test "${ac_cv_lib_crypto_EVP_md5+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcrypto  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
-		void EVP_md5();
-
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char EVP_md5 ();
 int
 main ()
 {
-
-        	EVP_md5();
-
+EVP_md5 ();
   ;
   return 0;
 }
@@ -15231,33 +15311,36 @@
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-
-		echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-		SSL_LIBS=-lcrypto
-
+  ac_cv_lib_crypto_EVP_md5=yes
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-
-                echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-                { { echo "$as_me:$LINENO: error: libcrypto failed link test." >&5
-echo "$as_me: error: libcrypto failed link test." >&2;}
-   { (exit 1); exit 1; }; }
-
+ac_cv_lib_crypto_EVP_md5=no
 fi
 rm -f conftest.err conftest.$ac_objext \
       conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_crypto_EVP_md5" >&5
+echo "${ECHO_T}$ac_cv_lib_crypto_EVP_md5" >&6
+if test $ac_cv_lib_crypto_EVP_md5 = yes; then
 
-	else
-		echo "$as_me:$LINENO: result: not required" >&5
-echo "${ECHO_T}not required" >&6
-	fi
+		SSL_LIBS=-lcrypto
+
+else
+
+                { { echo "$as_me:$LINENO: error: SSL crypto library was requested, but is not available" >&5
+echo "$as_me: error: SSL crypto library was requested, but is not available" >&2;}
+   { (exit 1); exit 1; }; }
 
 fi
 
+else
+	echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
 
 SNMP_LIBS=''
 
@@ -15737,9 +15820,13 @@
 		# libraries on various platforms, such as "-ldes425"
 		# in "/usr/kerberos/lib" on some versions of Red
 		# Hat Linux, or "-lkstat" on Solaris.
-		# XXX - it may also require "-lcrypto" on some platforms;
-		# we should check for that as well, rather than requiring
-		# users to explicitly indicate whether it's required.
+		#
+		# It might also require "-lcrypto" on some platforms;
+		# if the user didn't specify --with-ssl, we check
+		# whether it would have made a difference and, if so,
+		# we tell the user that they needed to request it.
+		# (There are annoying licensing issues with it and
+		# GPL'ed code, so we don't include it by default.)
 		#
 		# XXX - autoconf really needs a way to test for
 		# a given routine in a given library *and* to test
@@ -15749,10 +15836,19 @@
 		# needed after the library *and* to cache all that
 		# information.
 		#
-		ac_save_LIBS="$LIBS"
+		ethereal_save_LIBS="$LIBS"
+		found_sprint_realloc_objid=no
 		for extras in "" "-L/usr/kerberos/lib -ldes425" "-lkstat"
 		do
 			LIBS="-lsnmp $extras $SOCKET_LIBS $NSL_LIBS $SSL_LIBS"
+			if test -z "$extras"
+			then
+				echo "$as_me:$LINENO: checking whether UCD SNMP includes sprint_realloc_objid" >&5
+echo $ECHO_N "checking whether UCD SNMP includes sprint_realloc_objid... $ECHO_C" >&6
+			else
+				echo "$as_me:$LINENO: checking whether UCD SNMP includes sprint_realloc_objid (linking with $extras)" >&5
+echo $ECHO_N "checking whether UCD SNMP includes sprint_realloc_objid (linking with $extras)... $ECHO_C" >&6
+			fi
 			cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -15765,7 +15861,7 @@
 main ()
 {
 
-			sprint_realloc_objid();
+				sprint_realloc_objid();
 
   ;
   return 0;
@@ -15794,36 +15890,98 @@
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
 
-			SNMP_LIBS="-lsnmp $extras"; break;
+				#
+				# We found "sprint_realloc_objid()",
+				# and required the libraries in
+				# extras as well.
+				#
+				echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+				SNMP_LIBS="-lsnmp $extras"; break;
+				found_sprint_realloc_objid=yes
+				break
 
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
+				#
+				# The link failed.  If they didn't ask
+				# for SSL, try linking with -lcrypto
+				# as well, and if *that* succeeds,
+				# tell them they'll need to specify
+				# --want-ssl.
+				#
+				echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+				if test "x$want_ssl" = "xno"
+				then
+					LIBS="$LIBS -lcrypto"
+					cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+
+						sprint_realloc_objid();
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+						#
+						# It worked with -lcrypto; tell
+						# them they'll need to specify
+						# --with-ssl.
+						#
+						{ { echo "$as_me:$LINENO: error: UCD SNMP requires -lcrypto but --with-ssl not specified" >&5
+echo "$as_me: error: UCD SNMP requires -lcrypto but --with-ssl not specified" >&2;}
+   { (exit 1); exit 1; }; }
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
 rm -f conftest.err conftest.$ac_objext \
       conftest$ac_exeext conftest.$ac_ext
+				fi
 
-#        int sprint_realloc_objid(u_char **buf, size_t *buf_len, size_t *out_len, int allow_realloc, const oid *objid, size_t objidlen);
-#        AC_TRY_LINK(includes, body, [if-found], [if-not-found])
-#			AC_CHECK_LIB(snmp, sprint_realloc_objid,
-#			  [
-#				SNMP_LIBS="-lsnmp $extras"; break
-#			  ],
-#			  [
-#				#
-#				# Throw away the cached "we didn't find it"
-#				# answer, so that if we rerun "configure",
-#				# we still do all these checks and don't
-#				# just blithely assume we don't need
-#				# the extra libraries.
-#				#
-#				unset ac_cv_lib_snmp_sprint_realloc_objid
-#			  ], $SOCKET_LIBS $NSL_LIBS $SSL_LIBS $extras)
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
 		done
-		LIBS=$ac_save_LIBS
+		LIBS="$ethereal_save_LIBS"
 
 		#
 		# If we didn't find "sprint_realloc_objid()", fail.
@@ -15831,7 +15989,7 @@
 		# with "sprint_realloc_objid()", or they may need to
 		# specify "--with-ssl".
 		#
-		if test "$ac_cv_lib_snmp_sprint_realloc_objid" = no; then
+		if test "$found_snmp_sprint_realloc_objid" = no; then
 		    { { echo "$as_me:$LINENO: error: UCD SNMP header files found, but sprint_realloc_objid not found in SNMP library." >&5
 echo "$as_me: error: UCD SNMP header files found, but sprint_realloc_objid not found in SNMP library." >&2;}
    { (exit 1); exit 1; }; }
@@ -15878,8 +16036,8 @@
 
 
 
-echo "$as_me:$LINENO: checking whether to use kerberos/heimdal" >&5
-echo $ECHO_N "checking whether to use kerberos/heimdal... $ECHO_C" >&6
+echo "$as_me:$LINENO: checking whether to use kerberos" >&5
+echo $ECHO_N "checking whether to use kerberos... $ECHO_C" >&6
 
 
 # Check whether --with-krb5 or --without-krb5 was given.
@@ -15900,7 +16058,7 @@
 else
 
 	#
-	# Use kerberos/heimdal if specified, otherwise don't.
+	# Use kerberos if specified, otherwise don't.
 	#
 	want_krb5=ifpresent
 	krb5_dir=
@@ -15913,6 +16071,8 @@
 	echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6
 
+	ethereal_save_CFLAGS="$CFLAGS"
+	ethereal_save_CPPFLAGS="$CPPFLAGS"
 	if test "x$krb5_dir" != "x"
 	then
 	  #
@@ -15927,14 +16087,24 @@
 	  # as the compiler and/or linker will search that other
 	  # directory before it searches the specified directory.
 	  #
-	  ethereal_save_CFLAGS="$CFLAGS"
 	  CFLAGS="$CFLAGS -I$krb5_dir/include"
-	  ethereal_save_CPPFLAGS="$CPPFLAGS"
 	  CPPFLAGS="$CPPFLAGS -I$krb5_dir/include"
-	  KRB5_LIBS="-lkrb5 -lasn1 $SSL_LIBS -lroken -lcrypt -lresolv"
-	  ethereal_save_LDFLAGS="$LDFLAGS"
-	  LDFLAGS="$LDFLAGS -L$krb5_dir/lib"
-	  ac_krb5_version=`grep -i heimdal $krb5_dir/include/krb5.h | head -n 1 | sed 's/^.*heimdal.*$/HEIMDAL/i'`
+	  ac_heimdal_version=`grep heimdal $krb5_dir/include/krb5.h | head -n 1 | sed 's/^.*heimdal.*$/HEIMDAL/'`
+	  ac_mit_version=`grep 'Massachusetts Institute of Technology' $krb5_dir/include/krb5.h | head -n 1 | sed 's/^.*Massachusetts Institute of Technology.*$/MIT/'`
+	  ac_krb5_version="$ac_heimdal_version$ac_mit_version"
+	  if test "x$ac_krb5_version" = "xHEIMDAL"
+	      KRB5_LIBS="-L$krb5_dir/lib -lkrb5 -lasn1 $SSL_LIBS -lroken -lcrypt"
+	  then
+	      KRB5_LIBS="-L$krb5_dir/lib -lkrb5 -lk5crypto -lcom_err"
+	  fi
+	  if test "x$ac_krb5_version" = "xMIT"
+	  then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MIT_KERBEROS 1
+_ACEOF
+
+	  fi
 	else
 	  # Extract the first word of "krb5-config", so it can be a program name with args.
 set dummy krb5-config; ac_word=$2
@@ -15978,25 +16148,36 @@
 	  if test -x "$KRB5_CONFIG"
 	  then
 	    KRB5_FLAGS=`"$KRB5_CONFIG" --cflags`
+	    KRB5_LIBS=`"$KRB5_CONFIG" --libs`
 	    CFLAGS="$CFLAGS $KRB5_FLAGS"
-            CPPFLAGS="$CPPFLAGS $KRB5_FLAGS"
-	    KRB5_LIBS=`"$KRB5_CONFIG" --libs | sed 's/-lcrypto//'`
-	    KRB5_LIBS="$KRB5_LIBS $SSL_LIBS"
-	    # Looks like krb5-config is lacking -lresolv on some systems
-	    echo "$as_me:$LINENO: checking whether library list looks OK" >&5
-echo $ECHO_N "checking whether library list looks OK... $ECHO_C" >&6
-	    if echo "$KRB5_LIBS" | grep resolv >/dev/null
-	    then
-		echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-	    else
-		KRB5_LIBS="$KRB5_LIBS -lresolv"
-		echo "$as_me:$LINENO: result: Adding -lresolv to libs" >&5
-echo "${ECHO_T}Adding -lresolv to libs" >&6
-	    fi
-
-	    #LIBS="$LIBS $KRB5_LIBS"
-	    ac_krb5_version=`"$KRB5_CONFIG" --version | head -n 1 | sed 's/^.*heimdal.*$/HEIMDAL/i'`
+	    CPPFLAGS="$CPPFLAGS $KRB5_FLAGS"
+	    #
+	    # If -lcrypto is in KRB5_FLAGS, we require it to build
+	    # with Heimdal/MIT.  We don't want to built with it by
+	    # default, due to annoying license incompatibilities
+	    # between the OpenSSL license and the GPL, so:
+	    #
+	    #	if SSL_LIBS is set to a non-empty string, we
+	    #	remove -lcrypto from KRB5_LIBS and replace
+	    #	it with SSL_LIBS;
+	    #
+	    #	if SSL_LIBS is not set to a non-empty string
+	    #	we fail with an appropriate error message.
+	    #
+	    case "$KRB5_LIBS" in
+	    *-lcrypto*)
+		if test ! -z "$SSL_LIBS"
+		then
+		    KRB5_LIBS=`echo $KRB5_LIBS | sed 's/-lcrypto//'`
+		    KRB5_LIBS="$KRB5_LIBS $SSL_LIBS"
+		else
+		    { { echo "$as_me:$LINENO: error: Kerberos library requires -lcrypto but --with-ssl not specified" >&5
+echo "$as_me: error: Kerberos library requires -lcrypto but --with-ssl not specified" >&2;}
+   { (exit 1); exit 1; }; }
+		fi
+		;;
+	    esac
+	    ac_krb5_version=`"$KRB5_CONFIG" --version | head -n 1 | sed -e 's/^.*heimdal.*$/HEIMDAL/' -e 's/^Kerberos .*$/MIT/'`
  	  fi
 	fi
 
@@ -16173,6 +16354,8 @@
 		# library, as it's probably not present.
 		#
 		want_krb5=no
+		echo "$as_me:$LINENO: result: No Heimdal or MIT header found - disabling dissection for some kerberos data in packet decoding" >&5
+echo "${ECHO_T}No Heimdal or MIT header found - disabling dissection for some kerberos data in packet decoding" >&6
 	      fi
 	    fi
 
@@ -16180,36 +16363,51 @@
 
 
 
-	if test "x$want_krb5" != "xno" -a "x$ac_krb5_version" = "xHEIMDAL"
+	if test "x$want_krb5" != "xno"
 	then
+	    #
+	    # Well, we at least have the krb5 header file.
+	    # Check whether this is Heimdal or MIT.
+	    #
+	    echo "$as_me:$LINENO: checking whether the Kerberos library is Heimdal or MIT" >&5
+echo $ECHO_N "checking whether the Kerberos library is Heimdal or MIT... $ECHO_C" >&6
+	    if test "x$ac_krb5_version" = "xHEIMDAL" -o "x$ac_krb5_version" = "xMIT"
+	    then
 		#
-		# Well, we at least have the krb5 header file.
+		# Yes.
+		# Check whether we have krb5_kt_resolve - and whether
+		# we need to link with -lresolv when linking with
+		# the Kerberos library.
 		#
-		echo "$as_me:$LINENO: checking for krb5_kt_resolve in -lkrb5" >&5
-echo $ECHO_N "checking for krb5_kt_resolve in -lkrb5... $ECHO_C" >&6
-if test "${ac_cv_lib_krb5_krb5_kt_resolve+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lkrb5 $KRB5_LIBS $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
+		echo "$as_me:$LINENO: result: $ac_krb5_version" >&5
+echo "${ECHO_T}$ac_krb5_version" >&6
+		ethereal_save_LIBS="$LIBS"
+		found_krb5_kt_resolve=no
+		for extras in "" "-lresolv"
+		do
+		    LIBS="$KRB5_LIBS $extras"
+		    if test -z "$extras"
+		    then
+			echo "$as_me:$LINENO: checking whether $ac_krb5_version includes krb5_kt_resolve" >&5
+echo $ECHO_N "checking whether $ac_krb5_version includes krb5_kt_resolve... $ECHO_C" >&6
+		    else
+			echo "$as_me:$LINENO: checking whether $ac_krb5_version includes krb5_kt_resolve (linking with $extras)" >&5
+echo $ECHO_N "checking whether $ac_krb5_version includes krb5_kt_resolve (linking with $extras)... $ECHO_C" >&6
+		    fi
+		    cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char krb5_kt_resolve ();
+
 int
 main ()
 {
-krb5_kt_resolve ();
+
+			    krb5_kt_resolve();
+
   ;
   return 0;
 }
@@ -16236,71 +16434,124 @@
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  ac_cv_lib_krb5_krb5_kt_resolve=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_lib_krb5_krb5_kt_resolve=no
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:$LINENO: result: $ac_cv_lib_krb5_krb5_kt_resolve" >&5
-echo "${ECHO_T}$ac_cv_lib_krb5_krb5_kt_resolve" >&6
-if test $ac_cv_lib_krb5_krb5_kt_resolve = yes; then
 
-			if test "x$krb5_dir" != "x"
-			then
-				#
-				# Put the "-I" and "-L" flags for krb5 at
-				# the beginning of CFLAGS, CPPFLAGS,
-				# LDFLAGS, and LIBS.
-				#
-				KRB5_LIBS="-L$krb5_dir/lib $KRB5_LIBS"
-			fi
+			    #
+			    # We found "krb5_kt_resolve()", and required
+			    # the libraries in extras as well.
+			    #
+			    echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+			    KRB5_LIBS="$LIBS"
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_KERBEROS 1
 _ACEOF
 
+	    		    if test "x$ac_krb5_version" = "xHEIMDAL"
+			    then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_HEIMDAL_KERBEROS 1
 _ACEOF
 
+			    fi
+			    if test "x$ac_krb5_version" = "xMIT"
+			    then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MIT_KERBEROS 1
+_ACEOF
+
+			    fi
+			    found_krb5_kt_resolve=yes
+			    break
 
 else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-			if test "x$krb5_dir" != "x"
-			then
-				#
-				# Restore the versions of CFLAGS, CPPFLAGS,
-				# LDFLAGS, and LIBS before we added the
-				# "--with-krb5=" directory, as we didn't
-				# actually find kerberos there.
-				#
-				CFLAGS="$ethereal_save_CFLAGS"
-				CPPFLAGS="$ethereal_save_CPPFLAGS"
-				LDFLAGS="$ethereal_save_LDFLAGS"
-				#LIBS="$ethereal_save_LIBS"
-				KRB5_LIBS=""
-			fi
-			want_krb5=no
 
-fi
+			    echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
 
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+		done
+		if test "$found_krb5_kt_resolve" = no
+		then
+		    #
+		    # We didn't find "krb5_kt_resolve()" in the
+		    # Kerberos library, even when we tried linking
+		    # with -lresolv; we can't link with kerberos.
+		    #
+		    if test "x$want_krb5" = "xyes"
+		    then
+			#
+			# The user tried to force us to use the library,
+			# but we can't do so; report an error.
+			#
+			{ { echo "$as_me:$LINENO: error: Usable $ac_krb5_version not found" >&5
+echo "$as_me: error: Usable $ac_krb5_version not found" >&2;}
+   { (exit 1); exit 1; }; }
+		    else
+			#
+			# Restore the versions of CFLAGS and CPPFLAGS
+			# from before we added the flags for Kerberos.
+			#
+			echo "$as_me:$LINENO: result: Usable $ac_krb5_version not found - disabling dissection for some kerberos data in packet decoding" >&5
+echo "${ECHO_T}Usable $ac_krb5_version not found - disabling dissection for some kerberos data in packet decoding" >&6
+			CFLAGS="$ethereal_save_CFLAGS"
+			CPPFLAGS="$ethereal_save_CPPFLAGS"
+			KRB5_LIBS=""
+			want_krb5=no
+		    fi
+		fi
+		LIBS="$ethereal_save_LIBS"
+	    else
+		#
+		# It's not Heimdal or MIT.
+		#
+		echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+		if test "x$want_krb5" = "xyes"
+		then
+		    #
+		    # The user tried to force us to use the library,
+		    # but we can't do so; report an error.
+		    #
+		    { { echo "$as_me:$LINENO: error: Kerberos not found" >&5
+echo "$as_me: error: Kerberos not found" >&2;}
+   { (exit 1); exit 1; }; }
+		else
+		    #
+		    # Restore the versions of CFLAGS and CPPFLAGS
+		    # from before we added the flags for Kerberos.
+		    #
+		    echo "$as_me:$LINENO: result: Kerberos not found - disabling dissection for some kerberos data in packet decoding" >&5
+echo "${ECHO_T}Kerberos not found - disabling dissection for some kerberos data in packet decoding" >&6
+		    CFLAGS="$ethereal_save_CFLAGS"
+		    CPPFLAGS="$ethereal_save_CPPFLAGS"
+		    KRB5_LIBS=""
+		    want_krb5=no
+		fi
+	    fi
 	else
-		KRB5_LIBS=""
-		want_krb5=no
+	    #
+	    # The user asked us not to use Kerberos, or they didn't
+	    # say whether they wanted us to use it but we found
+	    # that we couldn't.
+	    #
+	    # Restore the versions of CFLAGS and CPPFLAGS
+	    # from before we added the flags for Kerberos.
+	    #
+	    CFLAGS="$ethereal_save_CFLAGS"
+	    CPPFLAGS="$ethereal_save_CPPFLAGS"
+	    KRB5_LIBS=""
+	    want_krb5=no
 	fi
 
 
-	if test "x$want_krb5" = "xno" ; then
-		echo "$as_me:$LINENO: result: heimdal not found - disabling dissection for some kerberos data in packet decoding" >&5
-echo "${ECHO_T}heimdal not found - disabling dissection for some kerberos data in packet decoding" >&6
-	fi
 fi
 
 
@@ -17332,6 +17583,125 @@
 
 
 
+ac_save_LIBS="$LIBS"
+LIBS="$GLIB_LIBS $LIBS"
+G_ASCII_STRTOULL_C=""
+G_ASCII_STRTOULL_O=""
+G_ASCII_STRTOULL_LO=""
+echo "$as_me:$LINENO: checking for g_ascii_strtoull" >&5
+echo $ECHO_N "checking for g_ascii_strtoull... $ECHO_C" >&6
+if test "${ac_cv_func_g_ascii_strtoull+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define g_ascii_strtoull to an innocuous variant, in case <limits.h> declares g_ascii_strtoull.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define g_ascii_strtoull innocuous_g_ascii_strtoull
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char g_ascii_strtoull (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef g_ascii_strtoull
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char g_ascii_strtoull ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_g_ascii_strtoull) || defined (__stub___g_ascii_strtoull)
+choke me
+#else
+char (*f) () = g_ascii_strtoull;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != g_ascii_strtoull;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_g_ascii_strtoull=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_g_ascii_strtoull=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_g_ascii_strtoull" >&5
+echo "${ECHO_T}$ac_cv_func_g_ascii_strtoull" >&6
+if test $ac_cv_func_g_ascii_strtoull = yes; then
+  G_ASCII_STRTOULL_O=""
+   G_ASCII_STRTOULL_LO=""
+else
+  G_ASCII_STRTOULL_O="g_ascii_strtoull.o"
+   G_ASCII_STRTOULL_LO="g_ascii_strtoull.lo"
+
+cat >>confdefs.h <<\_ACEOF
+#define NEED_G_ASCII_STRTOULL_H 1
+_ACEOF
+
+
+fi
+
+LIBS="$ac_save_LIBS"
+if test "$ac_cv_func_g_ascii_strtoull" = no ; then
+  G_ASCII_STRTOULL_C="g_ascii_strtoull.c"
+  G_ASCII_STRTOULL_O="g_ascii_strtoull.o"
+  G_ASCII_STRTOULL_LO="g_ascii_strtoull.lo"
+fi
+
+
+
+
 echo "$as_me:$LINENO: checking for inet_aton" >&5
 echo $ECHO_N "checking for inet_aton... $ECHO_C" >&6
 if test "${ac_cv_func_inet_aton+set}" = set; then
@@ -17424,13 +17794,17 @@
 echo "${ECHO_T}$ac_cv_func_inet_aton" >&6
 if test $ac_cv_func_inet_aton = yes; then
   INET_ATON_O=""
+   INET_ATON_LO=""
 else
-  INET_ATON_O="inet_aton.lo"
+  INET_ATON_O="inet_aton.o"
+   INET_ATON_LO="inet_aton.lo"
+
 fi
 
 if test "$ac_cv_func_inet_aton" = no ; then
   INET_ATON_C="inet_aton.c"
-  INET_ATON_O="inet_aton.lo"
+  INET_ATON_O="inet_aton.o"
+  INET_ATON_LO="inet_aton.lo"
 
 cat >>confdefs.h <<\_ACEOF
 #define NEED_INET_ATON_H 1
@@ -17440,6 +17814,7 @@
 
 
 
+
 echo "$as_me:$LINENO: checking for library containing inet_pton" >&5
 echo $ECHO_N "checking for library containing inet_pton... $ECHO_C" >&6
 if test "${ac_cv_search_inet_pton+set}" = set; then
@@ -17624,14 +17999,17 @@
 
 if test "$have_inet_pton" = no; then
   INET_PTON_C="inet_pton.c"
-  INET_PTON_O="inet_pton.lo"
+  INET_PTON_O="inet_pton.o"
+  INET_PTON_LO="inet_pton.lo"
 else
   INET_PTON_C=""
   INET_PTON_O=""
+  INET_PTON_LO=""
 fi
 
 
 
+
 echo "$as_me:$LINENO: checking for library containing inet_ntop" >&5
 echo $ECHO_N "checking for library containing inet_ntop... $ECHO_C" >&6
 if test "${ac_cv_search_inet_ntop+set}" = set; then
@@ -17877,10 +18255,12 @@
 fi
 rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
   INET_NTOP_O=""
+  INET_NTOP_LO=""
 else
 
   INET_NTOP_C="inet_ntop.c"
-  INET_NTOP_O="inet_ntop.lo"
+  INET_NTOP_O="inet_ntop.o"
+  INET_NTOP_LO="inet_ntop.lo"
 
 cat >>confdefs.h <<\_ACEOF
 #define NEED_INET_V6DEFS_H 1
@@ -17891,6 +18271,7 @@
 
 
 
+
 echo "$as_me:$LINENO: checking for strptime" >&5
 echo $ECHO_N "checking for strptime... $ECHO_C" >&6
 if test "${ac_cv_func_strptime+set}" = set; then
@@ -19096,8 +19477,8 @@
 s,@etherealfilter_man@,$etherealfilter_man,;t t
 s,@editcap_bin@,$editcap_bin,;t t
 s,@editcap_man@,$editcap_man,;t t
-s,@capinfo_bin@,$capinfo_bin,;t t
-s,@capinfo_man@,$capinfo_man,;t t
+s,@capinfos_bin@,$capinfos_bin,;t t
+s,@capinfos_man@,$capinfos_man,;t t
 s,@mergecap_bin@,$mergecap_bin,;t t
 s,@mergecap_man@,$mergecap_man,;t t
 s,@text2pcap_bin@,$text2pcap_bin,;t t
@@ -19128,12 +19509,18 @@
 s,@STRNCASECMP_O@,$STRNCASECMP_O,;t t
 s,@MKSTEMP_C@,$MKSTEMP_C,;t t
 s,@MKSTEMP_O@,$MKSTEMP_O,;t t
+s,@G_ASCII_STRTOULL_C@,$G_ASCII_STRTOULL_C,;t t
+s,@G_ASCII_STRTOULL_O@,$G_ASCII_STRTOULL_O,;t t
+s,@G_ASCII_STRTOULL_LO@,$G_ASCII_STRTOULL_LO,;t t
 s,@INET_ATON_C@,$INET_ATON_C,;t t
 s,@INET_ATON_O@,$INET_ATON_O,;t t
+s,@INET_ATON_LO@,$INET_ATON_LO,;t t
 s,@INET_PTON_C@,$INET_PTON_C,;t t
 s,@INET_PTON_O@,$INET_PTON_O,;t t
+s,@INET_PTON_LO@,$INET_PTON_LO,;t t
 s,@INET_NTOP_C@,$INET_NTOP_C,;t t
 s,@INET_NTOP_O@,$INET_NTOP_O,;t t
+s,@INET_NTOP_LO@,$INET_NTOP_LO,;t t
 s,@STRPTIME_C@,$STRPTIME_C,;t t
 s,@STRPTIME_O@,$STRPTIME_O,;t t
 s,@ethereal_SUBDIRS@,$ethereal_SUBDIRS,;t t
@@ -20068,10 +20455,16 @@
 	pcre_message="yes"
 fi
 
+if test "x$want_ssl" = "xno" ; then
+	ssl_message="no"
+else
+	ssl_message="yes"
+fi
+
 if test "x$want_krb5" = "xno" ; then
 	krb5_message="no"
 else
-	krb5_message="yes (heimdal)"
+	krb5_message="yes ($ac_krb5_version)"
 fi
 
 if test "x$have_good_adns" = "xyes" ; then
@@ -20092,7 +20485,7 @@
 echo "The Ethereal package has been configured with the following options."
 echo "                    Build ethereal : $enable_ethereal"
 echo "                   Build tethereal : $enable_tethereal"
-echo "                     Build capinfo : $enable_capinfo"
+echo "                    Build capinfos : $enable_capinfos"
 echo "                     Build editcap : $enable_editcap"
 echo "                    Build mergecap : $enable_mergecap"
 echo "                   Build text2pcap : $enable_text2pcap"
@@ -20112,5 +20505,6 @@
 echo "                  Use pcre library : $pcre_message"
 echo "              Use kerberos library : $krb5_message"
 echo "              Use GNU ADNS library : $adns_message"
+echo "            Use SSL crypto library : $ssl_message"
 echo "          Use IPv6 name resolution : $enable_ipv6"
 echo "     Use UCD SNMP/NET-SNMP library : $snmp_libs_message"
diff -urN ethereal-0.10.6/configure.in ethereal-0.10.7/configure.in
--- ethereal-0.10.6/configure.in	2004-08-12 17:41:37.000000000 -0500
+++ ethereal-0.10.7/configure.in	2004-10-20 17:34:24.000000000 -0500
@@ -1,4 +1,4 @@
-# $Id: configure.in 11611 2004-08-06 14:08:54Z gerald $
+# $Id: configure.in 12359 2004-10-20 19:07:50Z gerald $
 #
 AC_INIT(etypes.h)
 
@@ -8,7 +8,7 @@
 AC_CANONICAL_HOST
 AC_CANONICAL_TARGET
 
-AM_INIT_AUTOMAKE(ethereal, 0.10.6)
+AM_INIT_AUTOMAKE(ethereal, 0.10.7)
 
 AM_DISABLE_STATIC
 
@@ -357,7 +357,7 @@
 	ethereal_man=""
 	# Honor GLIB_CFLAGS
 	if test "x$enable_gtk2" = "xyes" ; then
-		AM_PATH_GLIB_2_0(2.0.0, CFLAGS="$CFLAGS $GLIB_CFLAGS", AC_MSG_ERROR(GLib distribution not found.), gmodule)
+		AM_PATH_GLIB_2_0(2.0.0, CFLAGS="$CFLAGS $GLIB_CFLAGS", AC_MSG_ERROR(GLib2 distribution not found.), gmodule)
 	else
 		AM_PATH_GLIB(1.2.0, CFLAGS="$CFLAGS $GLIB_CFLAGS", AC_MSG_ERROR(GLib distribution not found.), gmodule)
 	fi
@@ -510,20 +510,20 @@
 AC_SUBST(editcap_man)
 
 
-# Enable/disable capinfo
+# Enable/disable capinfos
 
-AC_ARG_ENABLE(capinfo,
-[  --enable-capinfo        build capinfo.  [default=yes]],enable_capinfo=$enableval,enable_capinfo=yes)
+AC_ARG_ENABLE(capinfos,
+[  --enable-capinfos        build capinfos.  [default=yes]],enable_capinfos=$enableval,enable_capinfos=yes)
 
-if test "x$enable_capinfo" = "xyes" ; then
-	capinfo_bin="capinfo\$(EXEEXT)"
-	capinfo_man="capinfo.1"
+if test "x$enable_capinfos" = "xyes" ; then
+	capinfos_bin="capinfos\$(EXEEXT)"
+	capinfos_man="capinfos.1"
 else
-	capinfo_bin=""
-	capinfo_man=""
+	capinfos_bin=""
+	capinfos_man=""
 fi
-AC_SUBST(capinfo_bin)
-AC_SUBST(capinfo_man)
+AC_SUBST(capinfos_bin)
+AC_SUBST(capinfos_man)
 
 
 # Enable/disable mergecap
@@ -744,13 +744,35 @@
 
 dnl SSL Check
 SSL_LIBS=''
-AC_MSG_CHECKING(whether to use SSL library if available)
-if test "x$enable_ssl" = "xno" ; then
-	AC_MSG_RESULT(no)
-else
+AC_MSG_CHECKING(whether to use SSL library)
+
+AC_ARG_WITH(ssl,
+changequote(<<, >>)dnl
+<<  --with-ssl[=DIR]        use SSL crypto library (located in directory DIR, if supplied).   [default=no]>>,
+changequote([, ])dnl
+[
+if test "x$withval" = "xno";  then
+	want_ssl=no
+elif test "x$withval" = "xyes"; then
+	want_ssl=yes
+elif test -d "$withval"; then
+	want_ssl=yes
+	AC_ETHEREAL_ADD_DASH_L(LDFLAGS, ${withval}/lib)
+fi
+],[
+	want_ssl=no
+])
+if test "x$want_ssl" = "xyes"; then
 	AC_MSG_RESULT(yes)
-	AC_MSG_CHECKING(whether SSL library is available)
-	AC_ETHEREAL_SSL_CHECK
+	AC_CHECK_LIB(crypto,EVP_md5,
+	    [
+		SSL_LIBS=-lcrypto
+	    ],
+	    [
+                AC_MSG_ERROR([SSL crypto library was requested, but is not available])
+	    ])
+else
+	AC_MSG_RESULT(no)
 fi
 AC_SUBST(SSL_LIBS)
 
@@ -864,18 +886,18 @@
 fi
 
 if test "x$have_net_snmp" = "xyes" || test "x$have_ucd_snmp" = "xyes"; then
-	AC_DEFINE(HAVE_SOME_SNMP, 1, [Define to if some SNMP support is to be used])
+	AC_DEFINE(HAVE_SOME_SNMP, 1, [Define to 1 if some SNMP support is to be used])
 fi
 
 AC_SUBST(SNMP_LIBS)
 
 
-dnl kerberos/heimdal check
-AC_MSG_CHECKING(whether to use kerberos/heimdal)
+dnl kerberos check
+AC_MSG_CHECKING(whether to use kerberos)
 
 AC_ARG_WITH(krb5,
 changequote(<<, >>)dnl
-<<  --with-krb5[=DIR]       use kerberos/heimdal (located in directory DIR, if supplied) to use in kerberos dissection  [default=yes]>>,
+<<  --with-krb5[=DIR]       use kerberos (located in directory DIR, if supplied) to use in kerberos dissection  [default=yes]>>,
 changequote([, ])dnl
 [
 	if test $withval = no
@@ -890,7 +912,7 @@
 	fi
 ],[
 	#
-	# Use kerberos/heimdal if specified, otherwise don't.
+	# Use kerberos if specified, otherwise don't.
 	#
 	want_krb5=ifpresent
 	krb5_dir=
@@ -900,9 +922,6 @@
 else
 	AC_MSG_RESULT(yes)
 	AC_ETHEREAL_KRB5_CHECK
-	if test "x$want_krb5" = "xno" ; then
-		AC_MSG_RESULT(heimdal not found - disabling dissection for some kerberos data in packet decoding)
-	fi
 fi
 
 
@@ -991,15 +1010,43 @@
 AC_SUBST(MKSTEMP_C)
 AC_SUBST(MKSTEMP_O)
 
-AC_CHECK_FUNC(inet_aton, INET_ATON_O="",
-  INET_ATON_O="inet_aton.lo")
+ac_save_LIBS="$LIBS"
+LIBS="$GLIB_LIBS $LIBS"
+G_ASCII_STRTOULL_C=""
+G_ASCII_STRTOULL_O=""
+G_ASCII_STRTOULL_LO=""
+AC_CHECK_FUNC(g_ascii_strtoull,
+  [G_ASCII_STRTOULL_O=""
+   G_ASCII_STRTOULL_LO=""],
+  [G_ASCII_STRTOULL_O="g_ascii_strtoull.o"
+   G_ASCII_STRTOULL_LO="g_ascii_strtoull.lo"
+   AC_DEFINE(NEED_G_ASCII_STRTOULL_H, 1, [Define if g_ascii_strtoull.h needs to be included])
+])
+LIBS="$ac_save_LIBS"
+if test "$ac_cv_func_g_ascii_strtoull" = no ; then
+  G_ASCII_STRTOULL_C="g_ascii_strtoull.c"
+  G_ASCII_STRTOULL_O="g_ascii_strtoull.o"
+  G_ASCII_STRTOULL_LO="g_ascii_strtoull.lo"
+fi
+AC_SUBST(G_ASCII_STRTOULL_C)
+AC_SUBST(G_ASCII_STRTOULL_O)
+AC_SUBST(G_ASCII_STRTOULL_LO)
+
+AC_CHECK_FUNC(inet_aton,
+  [INET_ATON_O=""
+   INET_ATON_LO=""],
+  [INET_ATON_O="inet_aton.o"
+   INET_ATON_LO="inet_aton.lo"
+])
 if test "$ac_cv_func_inet_aton" = no ; then
   INET_ATON_C="inet_aton.c"
-  INET_ATON_O="inet_aton.lo"
+  INET_ATON_O="inet_aton.o"
+  INET_ATON_LO="inet_aton.lo"
   AC_DEFINE(NEED_INET_ATON_H, 1, [Define if inet/aton.h needs to be included])
 fi
 AC_SUBST(INET_ATON_C)
 AC_SUBST(INET_ATON_O)
+AC_SUBST(INET_ATON_LO)
 
 AC_SEARCH_LIBS(inet_pton, [socket nsl], [
   dnl check for pre-BIND82 inet_pton() bug.
@@ -1024,13 +1071,16 @@
 have_inet_pton=no)
 if test "$have_inet_pton" = no; then
   INET_PTON_C="inet_pton.c"
-  INET_PTON_O="inet_pton.lo"
+  INET_PTON_O="inet_pton.o"
+  INET_PTON_LO="inet_pton.lo"
 else
   INET_PTON_C=""
   INET_PTON_O=""
+  INET_PTON_LO=""
 fi
 AC_SUBST(INET_PTON_C)
 AC_SUBST(INET_PTON_O)
+AC_SUBST(INET_PTON_LO)
 
 AC_SEARCH_LIBS(inet_ntop, [socket nsl], [
   AC_MSG_CHECKING([for inet_ntop prototype])
@@ -1055,13 +1105,16 @@
       AC_DEFINE(HAVE_INET_NTOP_PROTO, 1,
       [Define if inet_ntop() prototype exists])], [
       AC_MSG_RESULT(no)])])
-  INET_NTOP_O=""], [
+  INET_NTOP_O=""
+  INET_NTOP_LO=""], [
   INET_NTOP_C="inet_ntop.c"
-  INET_NTOP_O="inet_ntop.lo"
+  INET_NTOP_O="inet_ntop.o"
+  INET_NTOP_LO="inet_ntop.lo"
   AC_DEFINE(NEED_INET_V6DEFS_H, 1,
   [Define if inet/v6defs.h needs to be included])])
 AC_SUBST(INET_NTOP_C)
 AC_SUBST(INET_NTOP_O)
+AC_SUBST(INET_NTOP_LO)
 
 AC_CHECK_FUNC(strptime, STRPTIME_O="",
   [STRPTIME_O="strptime.o"
@@ -1219,10 +1272,16 @@
 	pcre_message="yes"
 fi
 
+if test "x$want_ssl" = "xno" ; then
+	ssl_message="no"
+else
+	ssl_message="yes"
+fi
+
 if test "x$want_krb5" = "xno" ; then
 	krb5_message="no"
 else
-	krb5_message="yes (heimdal)"
+	krb5_message="yes ($ac_krb5_version)"
 fi
 
 if test "x$have_good_adns" = "xyes" ; then
@@ -1243,7 +1302,7 @@
 echo "The Ethereal package has been configured with the following options."
 echo "                    Build ethereal : $enable_ethereal"
 echo "                   Build tethereal : $enable_tethereal"
-echo "                     Build capinfo : $enable_capinfo"
+echo "                    Build capinfos : $enable_capinfos"
 echo "                     Build editcap : $enable_editcap"
 echo "                    Build mergecap : $enable_mergecap"
 echo "                   Build text2pcap : $enable_text2pcap"
@@ -1263,5 +1322,6 @@
 echo "                  Use pcre library : $pcre_message"
 echo "              Use kerberos library : $krb5_message"
 echo "              Use GNU ADNS library : $adns_message"
+echo "            Use SSL crypto library : $ssl_message"
 echo "          Use IPv6 name resolution : $enable_ipv6"
 echo "     Use UCD SNMP/NET-SNMP library : $snmp_libs_message"
diff -urN ethereal-0.10.6/crc16.c ethereal-0.10.7/crc16.c
--- ethereal-0.10.6/crc16.c	2004-08-12 17:42:33.000000000 -0500
+++ ethereal-0.10.7/crc16.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,182 +0,0 @@
-/* crc16.c
- * CRC-16 routine
- *
- * 2004 Richard van der Hoff <richardv@mxtelecom.com>
- *
- * $Id: crc16.c 11573 2004-07-30 07:43:02Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@xxxxxxxxxxxx>
- * Copyright 1998 Gerald Combs
- *
- * Copied from README.developer
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * References:
- *  "A Painless Guide to CRC Error Detection Algorithms", Ross Williams
- *      http://www.repairfaq.org/filipg/LINK/F_crc_v3.html
- *
- *  ITU-T Recommendation V.42 (2002), "Error-Correcting Procedures for
- *      DCEs using asynchronous-to-synchronous conversion", Para. 8.1.1.6.1
- */
-
-#include <glib.h>
-#include <epan/tvbuff.h>
-#include "crc16.h"
-
-
-/*****************************************************************/
-
-/*
- * Table for the CCITT/ITU/CRC-16 16-bit CRC
- *
- * Polynomial is
- *
- *     x^16 + x^12 + x^5 + 1
- */
-
-/*                                                               */
-/* CRC LOOKUP TABLE                                              */
-/* ================                                              */
-/* The following CRC lookup table was generated automagically    */
-/* by the Rocksoft^tm Model CRC Algorithm Table Generation       */
-/* Program V1.0 using the following model parameters:            */
-/*                                                               */
-/*    Width   : 2 bytes.                                         */
-/*    Poly    : 0x1021                                           */
-/*    Reverse : TRUE.                                           */
-/*                                                               */
-/* For more information on the Rocksoft^tm Model CRC Algorithm,  */
-/* see the document titled "A Painless Guide to CRC Error        */
-/* Detection Algorithms" by Ross Williams                        */
-/* (ross@xxxxxxxxxxxxxxxxxxxxxx). This document is likely to be  */
-/* in the FTP archive "ftp.adelaide.edu.au/pub/rocksoft".        */
-/*                                                               */
-/*****************************************************************/
-
-static const guint crc16_ccitt_table[256] =
-{
- 0x0000, 0x1189, 0x2312, 0x329B, 0x4624, 0x57AD, 0x6536, 0x74BF,
- 0x8C48, 0x9DC1, 0xAF5A, 0xBED3, 0xCA6C, 0xDBE5, 0xE97E, 0xF8F7,
- 0x1081, 0x0108, 0x3393, 0x221A, 0x56A5, 0x472C, 0x75B7, 0x643E,
- 0x9CC9, 0x8D40, 0xBFDB, 0xAE52, 0xDAED, 0xCB64, 0xF9FF, 0xE876,
- 0x2102, 0x308B, 0x0210, 0x1399, 0x6726, 0x76AF, 0x4434, 0x55BD,
- 0xAD4A, 0xBCC3, 0x8E58, 0x9FD1, 0xEB6E, 0xFAE7, 0xC87C, 0xD9F5,
- 0x3183, 0x200A, 0x1291, 0x0318, 0x77A7, 0x662E, 0x54B5, 0x453C,
- 0xBDCB, 0xAC42, 0x9ED9, 0x8F50, 0xFBEF, 0xEA66, 0xD8FD, 0xC974,
- 0x4204, 0x538D, 0x6116, 0x709F, 0x0420, 0x15A9, 0x2732, 0x36BB,
- 0xCE4C, 0xDFC5, 0xED5E, 0xFCD7, 0x8868, 0x99E1, 0xAB7A, 0xBAF3,
- 0x5285, 0x430C, 0x7197, 0x601E, 0x14A1, 0x0528, 0x37B3, 0x263A,
- 0xDECD, 0xCF44, 0xFDDF, 0xEC56, 0x98E9, 0x8960, 0xBBFB, 0xAA72,
- 0x6306, 0x728F, 0x4014, 0x519D, 0x2522, 0x34AB, 0x0630, 0x17B9,
- 0xEF4E, 0xFEC7, 0xCC5C, 0xDDD5, 0xA96A, 0xB8E3, 0x8A78, 0x9BF1,
- 0x7387, 0x620E, 0x5095, 0x411C, 0x35A3, 0x242A, 0x16B1, 0x0738,
- 0xFFCF, 0xEE46, 0xDCDD, 0xCD54, 0xB9EB, 0xA862, 0x9AF9, 0x8B70,
- 0x8408, 0x9581, 0xA71A, 0xB693, 0xC22C, 0xD3A5, 0xE13E, 0xF0B7,
- 0x0840, 0x19C9, 0x2B52, 0x3ADB, 0x4E64, 0x5FED, 0x6D76, 0x7CFF,
- 0x9489, 0x8500, 0xB79B, 0xA612, 0xD2AD, 0xC324, 0xF1BF, 0xE036,
- 0x18C1, 0x0948, 0x3BD3, 0x2A5A, 0x5EE5, 0x4F6C, 0x7DF7, 0x6C7E,
- 0xA50A, 0xB483, 0x8618, 0x9791, 0xE32E, 0xF2A7, 0xC03C, 0xD1B5,
- 0x2942, 0x38CB, 0x0A50, 0x1BD9, 0x6F66, 0x7EEF, 0x4C74, 0x5DFD,
- 0xB58B, 0xA402, 0x9699, 0x8710, 0xF3AF, 0xE226, 0xD0BD, 0xC134,
- 0x39C3, 0x284A, 0x1AD1, 0x0B58, 0x7FE7, 0x6E6E, 0x5CF5, 0x4D7C,
- 0xC60C, 0xD785, 0xE51E, 0xF497, 0x8028, 0x91A1, 0xA33A, 0xB2B3,
- 0x4A44, 0x5BCD, 0x6956, 0x78DF, 0x0C60, 0x1DE9, 0x2F72, 0x3EFB,
- 0xD68D, 0xC704, 0xF59F, 0xE416, 0x90A9, 0x8120, 0xB3BB, 0xA232,
- 0x5AC5, 0x4B4C, 0x79D7, 0x685E, 0x1CE1, 0x0D68, 0x3FF3, 0x2E7A,
- 0xE70E, 0xF687, 0xC41C, 0xD595, 0xA12A, 0xB0A3, 0x8238, 0x93B1,
- 0x6B46, 0x7ACF, 0x4854, 0x59DD, 0x2D62, 0x3CEB, 0x0E70, 0x1FF9,
- 0xF78F, 0xE606, 0xD49D, 0xC514, 0xB1AB, 0xA022, 0x92B9, 0x8330,
- 0x7BC7, 0x6A4E, 0x58D5, 0x495C, 0x3DE3, 0x2C6A, 0x1EF1, 0x0F78
-};
-
-static const guint16 crc16_ccitt_start = 0xFFFF;
-static const guint16 crc16_ccitt_xorout = 0xFFFF;
-
-/* two types of crcs are possible: unreflected (bits shift left) and
- * reflected (bits shift right).
- */
-#if 0
-static guint16 crc16_unreflected(const guint8 *buf, guint len,
-                                guint16 crc_in, const guint table[])
-{
-    /* we use guints, rather than guint16s, as they are likely to be
-       faster. We just ignore the top 16 bits and let them do what they want. */
-    guint crc16 = (guint)crc_in;;
-
-    while( len-- != 0 )
-       crc16 = table[(crc16 ^ *buf++) & 0xff] ^ (crc16 << 8);
-
-    return (guint16)crc16;
-}
-#endif
-
-static guint16 crc16_reflected(const guint8 *buf, guint len,
-                                guint16 crc_in, const guint table[])
-{
-    /* we use guints, rather than guint16s, as they are likely to be
-       faster. We just ignore the top 16 bits and let them do what they want.
-       XXX - does any time saved not zero-extending guint16's to 32 bits
-       into a register outweigh any increased cache footprint from the
-       larger CRC table? */
-    guint crc16 = (guint)crc_in;
-
-    while( len-- != 0 )
-       crc16 = table[(crc16 ^ *buf++) & 0xff] ^ (crc16 >> 8);
-
-    return (guint16)crc16;
-}
-
-guint16 crc16_ccitt(const guint8 *buf, guint len)
-{
-    return crc16_reflected(buf,len,crc16_ccitt_start,crc16_ccitt_table)
-       ^ crc16_ccitt_xorout;
-}
-
-guint16 crc16_ccitt_seed(const guint8 *buf, guint len, guint16 seed)
-{
-    return crc16_reflected(buf,len,seed,crc16_ccitt_table)
-       ^ crc16_ccitt_xorout;
-}
-
-guint16 crc16_ccitt_tvb(tvbuff_t *tvb, guint len)
-{
-    const guint8* buf = tvb_get_ptr(tvb, 0, len);
-
-    return crc16_ccitt(buf, len);
-}
-
-guint16 crc16_ccitt_tvb_offset(tvbuff_t *tvb, guint offset, guint len)
-{
-    const guint8* buf = tvb_get_ptr(tvb, offset, len);
-
-    return crc16_ccitt(buf, len);
-}
-
-guint16 crc16_ccitt_tvb_seed(tvbuff_t *tvb, guint len, guint16 seed)
-{
-    const guint8* buf = tvb_get_ptr(tvb, 0, len);
-
-    return crc16_ccitt_seed(buf, len, seed);
-}
-
-guint16 crc16_ccitt_tvb_offset_seed(tvbuff_t *tvb, guint offset, guint len, guint16 seed)
-{
-    const guint8* buf = tvb_get_ptr(tvb, offset, len);
-
-    return crc16_ccitt_seed(buf, len, seed);
-}
-
diff -urN ethereal-0.10.6/crc16.h ethereal-0.10.7/crc16.h
--- ethereal-0.10.6/crc16.h	2004-08-12 17:42:33.000000000 -0500
+++ ethereal-0.10.7/crc16.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,86 +0,0 @@
-/* crc16.h
- * Declaration of CRC-16 routines and table
- *
- * 2004 Richard van der Hoff <richardv@mxtelecom.com>
- *
- * $Id: crc16.h 11573 2004-07-30 07:43:02Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@xxxxxxxxxxxx>
- * Copyright 1998 Gerald Combs
- *
- * Copied from README.developer
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/* Calculate the CCITT/ITU/CRC-16 16-bit CRC
-
-   (parameters for this CRC are:
-       Polynomial: x^16 + x^12 + x^5 + 1  (0x1021);
-       Start value 0xFFFF;
-       XOR result with 0xFFFF;
-       First bit is LSB)
-*/
-
-/** Compute CRC16 CCITT checksum of a buffer of data.
- @param buf The buffer containing the data.
- @param len The number of bytes to include in the computation.
- @return The CRC16 CCITT checksum. */
-extern guint16 crc16_ccitt(const guint8 *buf, guint len);
-
-/** Compute CRC16 CCITT checksum of a buffer of data.  If computing the
- *  checksum over multiple buffers and you want to feed the partial CRC16
- *  back in, remember to take the 1's complement of the partial CRC16 first.
- @param buf The buffer containing the data.
- @param len The number of bytes to include in the computation.
- @param seed The seed to use.
- @return The CRC16 CCITT checksum (using the given seed). */
-extern guint16 crc16_ccitt_seed(const guint8 *buf, guint len, guint16 seed);
-
-/** Compute CRC16 CCITT checksum of a tv buffer.
- @param tvb The tv buffer containing the data.
- @param len The number of bytes to include in the computation.
- @return The CRC16 CCITT checksum. */
-extern guint16 crc16_ccitt_tvb(tvbuff_t *tvb, guint len);
-
-/** Compute CRC16 CCITT checksum of a tv buffer.
- @param tvb The tv buffer containing the data.
- @param offset The offset into the tv buffer.
- @param len The number of bytes to include in the computation.
- @return The CRC16 CCITT checksum. */
-extern guint16 crc16_ccitt_tvb_offset(tvbuff_t *tvb, guint offset, guint len);
-
-/** Compute CRC16 CCITT checksum of a tv buffer.  If computing the
- *  checksum over multiple tv buffers and you want to feed the partial CRC16
- *  back in, remember to take the 1's complement of the partial CRC16 first.
- @param tvb The tv buffer containing the data.
- @param len The number of bytes to include in the computation.
- @param seed The seed to use.
- @return The CRC16 CCITT checksum (using the given seed). */
-extern guint16 crc16_ccitt_tvb_seed(tvbuff_t *tvb, guint len, guint16 seed);
-
-/** Compute CRC16 CCITT checksum of a tv buffer.  If computing the
- *  checksum over multiple tv buffers and you want to feed the partial CRC16
- *  back in, remember to take the 1's complement of the partial CRC16 first.
- @param tvb The tv buffer containing the data.
- @param offset The offset into the tv buffer.
- @param len The number of bytes to include in the computation.
- @param seed The seed to use.
- @return The CRC16 CCITT checksum (using the given seed). */
-extern guint16 crc16_ccitt_tvb_offset_seed(tvbuff_t *tvb, guint offset,
-                                           guint len, guint16 seed);
-
-
diff -urN ethereal-0.10.6/crc32.c ethereal-0.10.7/crc32.c
--- ethereal-0.10.6/crc32.c	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/crc32.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,174 +0,0 @@
-/* crc32.c
- * CRC-32 routine
- *
- * $Id: crc32.c 11573 2004-07-30 07:43:02Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * Copied from README.developer
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Credits:
- *
- * Table from Solomon Peachy
- * Routine from Chris Waters
- */
-
-#include <glib.h>
-#include <epan/tvbuff.h>
-#include "crc32.h"
-
-/*
- * Table for the AUTODIN/HDLC/802.x CRC.
- *
- * Polynomial is
- *
- *  x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^8 + x^7 +
- *      x^5 + x^4 + x^2 + x + 1
- */
-const guint32 crc32_ccitt_table[256] = {
-        0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
-        0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
-        0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
-        0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
-        0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
-        0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
-        0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
-        0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
-        0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
-        0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
-        0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
-        0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
-        0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
-        0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
-        0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
-        0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
-        0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
-        0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
-        0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
-        0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
-        0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
-        0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
-        0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
-        0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-        0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
-        0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
-        0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
-        0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
-        0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
-        0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
-        0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
-        0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
-        0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
-        0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
-        0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
-        0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
-        0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
-        0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
-        0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
-        0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
-        0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
-        0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
-        0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
-        0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
-        0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
-        0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
-        0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
-        0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-        0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
-        0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
-        0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
-        0x2d02ef8d
-};
-
-#define CRC32_CCITT_SEED    0xFFFFFFFF
-
-guint32
-crc32_ccitt(const guint8 *buf, guint len)
-{
-  return ( crc32_ccitt_seed(buf, len, CRC32_CCITT_SEED) );
-}
-
-guint32
-crc32_ccitt_seed(const guint8 *buf, guint len, guint32 seed)
-{
-  guint i;
-  guint32 crc32 = seed;
-
-  for (i = 0; i < len; i++)
-    crc32 = crc32_ccitt_table[(crc32 ^ buf[i]) & 0xff] ^ (crc32 >> 8);
-
-  return ( ~crc32 );
-}
-
-guint32
-crc32_ccitt_tvb(tvbuff_t *tvb, guint len)
-{
-  const guint8* buf = tvb_get_ptr(tvb, 0, len);
-
-  return ( crc32_ccitt_seed(buf, len, CRC32_CCITT_SEED) );
-}
-
-guint32
-crc32_ccitt_tvb_offset(tvbuff_t *tvb, guint offset, guint len)
-{
-  const guint8* buf = tvb_get_ptr(tvb, offset, len);
-
-  return ( crc32_ccitt(buf, len) );
-}
-
-guint32
-crc32_ccitt_tvb_seed(tvbuff_t *tvb, guint len, guint32 seed)
-{
-  const guint8* buf = tvb_get_ptr(tvb, 0, len);
-
-  return ( crc32_ccitt_seed(buf, len, seed) );
-}
-
-guint32
-crc32_ccitt_tvb_offset_seed(tvbuff_t *tvb, guint offset, guint len, guint32 seed)
-{
-  const guint8* buf = tvb_get_ptr(tvb, offset, len);
-
-  return ( crc32_ccitt_seed(buf, len, seed) );
-}
-
-/*
- * IEEE 802.x version (Ethernet and 802.11, at least) - byte-swap
- * the result of "crc32()".
- *
- * XXX - does this mean we should fetch the Ethernet and 802.11
- * FCS with "tvb_get_letohl()" rather than "tvb_get_ntohl()",
- * or is fetching it big-endian and byte-swapping the CRC done
- * to cope with 802.x sending stuff out in reverse bit order?
- */
-guint32
-crc32_802_tvb(tvbuff_t *tvb, guint len)
-{
-  guint32 c_crc;
-
-  c_crc = crc32_ccitt_tvb(tvb, len);
-
-  /* Byte reverse. */
-  c_crc = ((unsigned char)(c_crc>>0)<<24) |
-    ((unsigned char)(c_crc>>8)<<16) |
-    ((unsigned char)(c_crc>>16)<<8) |
-    ((unsigned char)(c_crc>>24)<<0);
-
-  return ( c_crc );
-}
diff -urN ethereal-0.10.6/crc32.h ethereal-0.10.7/crc32.h
--- ethereal-0.10.6/crc32.h	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/crc32.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,82 +0,0 @@
-/* crc32.h
- * Declaration of CRC-32 routine and table
- *
- * $Id: crc32.h 11573 2004-07-30 07:43:02Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * Copied from README.developer
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-extern const guint32 crc32_ccitt_table[256];
-
-/** Compute CRC32 CCITT checksum of a buffer of data.
- @param buf The buffer containing the data.
- @param len The number of bytes to include in the computation.
- @return The CRC32 CCITT checksum. */
-extern guint32 crc32_ccitt(const guint8 *buf, guint len);
-
-/** Compute CRC32 CCITT checksum of a buffer of data.  If computing the
- *  checksum over multiple buffers and you want to feed the partial CRC32
- *  back in, remember to take the 1's complement of the partial CRC32 first.
- @param buf The buffer containing the data.
- @param len The number of bytes to include in the computation.
- @param seed The seed to use.
- @return The CRC32 CCITT checksum (using the given seed). */
-extern guint32 crc32_ccitt_seed(const guint8 *buf, guint len, guint32 seed);
-
-/** Compute CRC32 CCITT checksum of a tv buffer.
- @param tvb The tv buffer containing the data.
- @param len The number of bytes to include in the computation.
- @return The CRC32 CCITT checksum. */
-extern guint32 crc32_ccitt_tvb(tvbuff_t *tvb, guint len);
-
-/** Compute CRC32 CCITT checksum of a tv buffer.
- @param tvb The tv buffer containing the data.
- @param offset The offset into the tv buffer.
- @param len The number of bytes to include in the computation.
- @return The CRC32 CCITT checksum. */
-extern guint32 crc32_ccitt_tvb_offset(tvbuff_t *tvb, guint offset, guint len);
-
-/** Compute CRC32 CCITT checksum of a tv buffer.  If computing the
- *  checksum over multiple tv buffers and you want to feed the partial CRC32
- *  back in, remember to take the 1's complement of the partial CRC32 first.
- @param tvb The tv buffer containing the data.
- @param len The number of bytes to include in the computation.
- @param seed The seed to use.
- @return The CRC32 CCITT checksum (using the given seed). */
-extern guint32 crc32_ccitt_tvb_seed(tvbuff_t *tvb, guint len, guint32 seed);
-
-/** Compute CRC32 CCITT checksum of a tv buffer.  If computing the
- *  checksum over multiple tv buffers and you want to feed the partial CRC32
- *  back in, remember to take the 1's complement of the partial CRC32 first.
- @param tvb The tv buffer containing the data.
- @param offset The offset into the tv buffer.
- @param len The number of bytes to include in the computation.
- @param seed The seed to use.
- @return The CRC32 CCITT checksum (using the given seed). */
-extern guint32 crc32_ccitt_tvb_offset_seed(tvbuff_t *tvb, guint offset,
-                                           guint len, guint32 seed);
-
-/** Compute IEEE 802.x CRC32 checksum of a tv buffer.
- @param tvb The tv buffer containing the data.
- @param len The number of bytes to include in the computation.
- @return The IEEE 802.x CRC32 checksum. */
-extern guint32 crc32_802_tvb(tvbuff_t *tvb, guint len);
-
diff -urN ethereal-0.10.6/crypt-des.c ethereal-0.10.7/crypt-des.c
--- ethereal-0.10.6/crypt-des.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/crypt-des.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,311 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-
-   a partial implementation of DES designed for use in the 
-   SMB authentication protocol
-
-   Copyright (C) Andrew Tridgell 1998
-
-   $Id: crypt-des.c 11400 2004-07-18 00:24:25Z guy $
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-#include <glib.h>
-
-/* NOTES: 
-
-   This code makes no attempt to be fast! In fact, it is a very
-   slow implementation 
-
-   This code is NOT a complete DES implementation. It implements only
-   the minimum necessary for SMB authentication, as used by all SMB
-   products (including every copy of Microsoft Windows95 ever sold)
-
-   In particular, it can only do a unchained forward DES pass. This
-   means it is not possible to use this code for encryption/decryption
-   of data, instead it is only useful as a "hash" algorithm.
-
-   There is no entry point into this code that allows normal DES operation.
-
-   I believe this means that this code does not come under ITAR
-   regulations but this is NOT a legal opinion. If you are concerned
-   about the applicability of ITAR regulations to this code then you
-   should confirm it for yourself (and maybe let me know if you come
-   up with a different answer to the one above)
-*/
-
-
-#define uchar unsigned char
-
-static const uchar perm1[56] = {57, 49, 41, 33, 25, 17,  9,
-			 1, 58, 50, 42, 34, 26, 18,
-			10,  2, 59, 51, 43, 35, 27,
-			19, 11,  3, 60, 52, 44, 36,
-			63, 55, 47, 39, 31, 23, 15,
-			 7, 62, 54, 46, 38, 30, 22,
-			14,  6, 61, 53, 45, 37, 29,
-			21, 13,  5, 28, 20, 12,  4};
-
-static const uchar perm2[48] = {14, 17, 11, 24,  1,  5,
-                         3, 28, 15,  6, 21, 10,
-                        23, 19, 12,  4, 26,  8,
-                        16,  7, 27, 20, 13,  2,
-                        41, 52, 31, 37, 47, 55,
-                        30, 40, 51, 45, 33, 48,
-                        44, 49, 39, 56, 34, 53,
-                        46, 42, 50, 36, 29, 32};
-
-static const uchar perm3[64] = {58, 50, 42, 34, 26, 18, 10,  2,
-			60, 52, 44, 36, 28, 20, 12,  4,
-			62, 54, 46, 38, 30, 22, 14,  6,
-			64, 56, 48, 40, 32, 24, 16,  8,
-			57, 49, 41, 33, 25, 17,  9,  1,
-			59, 51, 43, 35, 27, 19, 11,  3,
-			61, 53, 45, 37, 29, 21, 13,  5,
-			63, 55, 47, 39, 31, 23, 15,  7};
-
-static const uchar perm4[48] = {   32,  1,  2,  3,  4,  5,
-                            4,  5,  6,  7,  8,  9,
-                            8,  9, 10, 11, 12, 13,
-                           12, 13, 14, 15, 16, 17,
-                           16, 17, 18, 19, 20, 21,
-                           20, 21, 22, 23, 24, 25,
-                           24, 25, 26, 27, 28, 29,
-                           28, 29, 30, 31, 32,  1};
-
-static const uchar perm5[32] = {      16,  7, 20, 21,
-                              29, 12, 28, 17,
-                               1, 15, 23, 26,
-                               5, 18, 31, 10,
-                               2,  8, 24, 14,
-                              32, 27,  3,  9,
-                              19, 13, 30,  6,
-                              22, 11,  4, 25};
-
-
-static const uchar perm6[64] ={ 40,  8, 48, 16, 56, 24, 64, 32,
-                        39,  7, 47, 15, 55, 23, 63, 31,
-                        38,  6, 46, 14, 54, 22, 62, 30,
-                        37,  5, 45, 13, 53, 21, 61, 29,
-                        36,  4, 44, 12, 52, 20, 60, 28,
-                        35,  3, 43, 11, 51, 19, 59, 27,
-                        34,  2, 42, 10, 50, 18, 58, 26,
-                        33,  1, 41,  9, 49, 17, 57, 25};
-
-
-static const uchar sc[16] = {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1};
-
-static const uchar sbox[8][4][16] = {
-	{{14,  4, 13,  1,  2, 15, 11,  8,  3, 10,  6, 12,  5,  9,  0,  7},
-	 {0, 15,  7,  4, 14,  2, 13,  1, 10,  6, 12, 11,  9,  5,  3,  8},
-	 {4,  1, 14,  8, 13,  6,  2, 11, 15, 12,  9,  7,  3, 10,  5,  0},
-	 {15, 12,  8,  2,  4,  9,  1,  7,  5, 11,  3, 14, 10,  0,  6, 13}},
-
-	{{15,  1,  8, 14,  6, 11,  3,  4,  9,  7,  2, 13, 12,  0,  5, 10},
-	 {3, 13,  4,  7, 15,  2,  8, 14, 12,  0,  1, 10,  6,  9, 11,  5},
-	 {0, 14,  7, 11, 10,  4, 13,  1,  5,  8, 12,  6,  9,  3,  2, 15},
-	 {13,  8, 10,  1,  3, 15,  4,  2, 11,  6,  7, 12,  0,  5, 14,  9}},
-
-	{{10,  0,  9, 14,  6,  3, 15,  5,  1, 13, 12,  7, 11,  4,  2,  8},
-	 {13,  7,  0,  9,  3,  4,  6, 10,  2,  8,  5, 14, 12, 11, 15,  1},
-	 {13,  6,  4,  9,  8, 15,  3,  0, 11,  1,  2, 12,  5, 10, 14,  7},
-	 {1, 10, 13,  0,  6,  9,  8,  7,  4, 15, 14,  3, 11,  5,  2, 12}},
-
-	{{7, 13, 14,  3,  0,  6,  9, 10,  1,  2,  8,  5, 11, 12,  4, 15},
-	 {13,  8, 11,  5,  6, 15,  0,  3,  4,  7,  2, 12,  1, 10, 14,  9},
-	 {10,  6,  9,  0, 12, 11,  7, 13, 15,  1,  3, 14,  5,  2,  8,  4},
-	 {3, 15,  0,  6, 10,  1, 13,  8,  9,  4,  5, 11, 12,  7,  2, 14}},
-
-	{{2, 12,  4,  1,  7, 10, 11,  6,  8,  5,  3, 15, 13,  0, 14,  9},
-	 {14, 11,  2, 12,  4,  7, 13,  1,  5,  0, 15, 10,  3,  9,  8,  6},
-	 {4,  2,  1, 11, 10, 13,  7,  8, 15,  9, 12,  5,  6,  3,  0, 14},
-	 {11,  8, 12,  7,  1, 14,  2, 13,  6, 15,  0,  9, 10,  4,  5,  3}},
-
-	{{12,  1, 10, 15,  9,  2,  6,  8,  0, 13,  3,  4, 14,  7,  5, 11},
-	 {10, 15,  4,  2,  7, 12,  9,  5,  6,  1, 13, 14,  0, 11,  3,  8},
-	 {9, 14, 15,  5,  2,  8, 12,  3,  7,  0,  4, 10,  1, 13, 11,  6},
-	 {4,  3,  2, 12,  9,  5, 15, 10, 11, 14,  1,  7,  6,  0,  8, 13}},
-
-	{{4, 11,  2, 14, 15,  0,  8, 13,  3, 12,  9,  7,  5, 10,  6,  1},
-	 {13,  0, 11,  7,  4,  9,  1, 10, 14,  3,  5, 12,  2, 15,  8,  6},
-	 {1,  4, 11, 13, 12,  3,  7, 14, 10, 15,  6,  8,  0,  5,  9,  2},
-	 {6, 11, 13,  8,  1,  4, 10,  7,  9,  5,  0, 15, 14,  2,  3, 12}},
-
-	{{13,  2,  8,  4,  6, 15, 11,  1, 10,  9,  3, 14,  5,  0, 12,  7},
-	 {1, 15, 13,  8, 10,  3,  7,  4, 12,  5,  6, 11,  0, 14,  9,  2},
-	 {7, 11,  4,  1,  9, 12, 14,  2,  0,  6, 10, 13, 15,  3,  5,  8},
-	 {2,  1, 14,  7,  4, 10,  8, 13, 15, 12,  9,  0,  3,  5,  6, 11}}};
-
-static void permute(char *out, const char *in, const uchar *p, int n)
-{
-	int i;
-	for (i=0;i<n;i++)
-		out[i] = in[p[i]-1];
-}
-
-static void lshift(char *d, int count, int n)
-{
-	char out[64];
-	int i;
-	for (i=0;i<n;i++)
-		out[i] = d[(i+count)%n];
-	for (i=0;i<n;i++)
-		d[i] = out[i];
-}
-
-static void concat(char *out, char *in1, char *in2, int l1, int l2)
-{
-	while (l1--)
-		*out++ = *in1++;
-	while (l2--)
-		*out++ = *in2++;
-}
-
-static void xor(char *out, char *in1, char *in2, int n)
-{
-	int i;
-	for (i=0;i<n;i++)
-		out[i] = in1[i] ^ in2[i];
-}
-
-static void dohash(char *out, char *in, char *key, int forw)
-{
-	int i, j, k;
-	char pk1[56];
-	char c[28];
-	char d[28];
-	char cd[56];
-	char ki[16][48];
-	char pd1[64];
-	char l[32], r[32];
-	char rl[64];
-
-	permute(pk1, key, perm1, 56);
-
-	for (i=0;i<28;i++)
-		c[i] = pk1[i];
-	for (i=0;i<28;i++)
-		d[i] = pk1[i+28];
-
-	for (i=0;i<16;i++) {
-		lshift(c, sc[i], 28);
-		lshift(d, sc[i], 28);
-
-		concat(cd, c, d, 28, 28); 
-		permute(ki[i], cd, perm2, 48); 
-	}
-
-	permute(pd1, in, perm3, 64);
-
-	for (j=0;j<32;j++) {
-		l[j] = pd1[j];
-		r[j] = pd1[j+32];
-	}
-
-	for (i=0;i<16;i++) {
-		char er[48];
-		char erk[48];
-		char b[8][6];
-		char cb[32];
-		char pcb[32];
-		char r2[32];
-
-		permute(er, r, perm4, 48);
-
-		xor(erk, er, ki[forw ? i : 15 - i], 48);
-
-		for (j=0;j<8;j++)
-			for (k=0;k<6;k++)
-				b[j][k] = erk[j*6 + k];
-
-		for (j=0;j<8;j++) {
-			int m, n;
-			m = (b[j][0]<<1) | b[j][5];
-
-			n = (b[j][1]<<3) | (b[j][2]<<2) | (b[j][3]<<1) | b[j][4]; 
-
-			for (k=0;k<4;k++) 
-				b[j][k] = (sbox[j][m][n] & (1<<(3-k)))?1:0; 
-		}
-
-		for (j=0;j<8;j++)
-			for (k=0;k<4;k++)
-				cb[j*4+k] = b[j][k];
-		permute(pcb, cb, perm5, 32);
-
-		xor(r2, l, pcb, 32);
-
-		for (j=0;j<32;j++)
-			l[j] = r[j];
-
-		for (j=0;j<32;j++)
-			r[j] = r2[j];
-	}
-
-	concat(rl, r, l, 32, 32);
-
-	permute(out, rl, perm6, 64);
-}
-
-static void str_to_key(const unsigned char *str,unsigned char *key)
-{
-	int i;
-
-	key[0] = str[0]>>1;
-	key[1] = ((str[0]&0x01)<<6) | (str[1]>>2);
-	key[2] = ((str[1]&0x03)<<5) | (str[2]>>3);
-	key[3] = ((str[2]&0x07)<<4) | (str[3]>>4);
-	key[4] = ((str[3]&0x0F)<<3) | (str[4]>>5);
-	key[5] = ((str[4]&0x1F)<<2) | (str[5]>>6);
-	key[6] = ((str[5]&0x3F)<<1) | (str[6]>>7);
-	key[7] = str[6]&0x7F;
-	for (i=0;i<8;i++) {
-		key[i] = (key[i]<<1);
-	}
-}
-
-
-void crypt_des_ecb(unsigned char *out, const unsigned char *in, const unsigned char *key, int forw)
-{
-	int i;
-	char outb[64];
-	char inb[64];
-	char keyb[64];
-	unsigned char key2[8];
-
-	str_to_key(key, key2);
-
-	for (i=0;i<64;i++) {
-		inb[i] = (in[i/8] & (1<<(7-(i%8)))) ? 1 : 0;
-		keyb[i] = (key2[i/8] & (1<<(7-(i%8)))) ? 1 : 0;
-		outb[i] = 0;
-	}
-
-	dohash(outb, inb, keyb, forw);
-
-	for (i=0;i<8;i++) {
-		out[i] = 0;
-	}
-
-	for (i=0;i<64;i++) {
-		if (outb[i])
-			out[i/8] |= (1<<(7-(i%8)));
-	}
-}
-
diff -urN ethereal-0.10.6/crypt-des.h ethereal-0.10.7/crypt-des.h
--- ethereal-0.10.6/crypt-des.h	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/crypt-des.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,26 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-
-   a partial implementation of DES designed for use in the 
-   SMB authentication protocol
-
-   Copyright (C) Andrew Tridgell 1998
-
-   $Id: crypt-des.h 11400 2004-07-18 00:24:25Z guy $
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-void crypt_des_ecb(unsigned char *out, const unsigned char *in, const unsigned char *key, int forw);
diff -urN ethereal-0.10.6/crypt-md4.c ethereal-0.10.7/crypt-md4.c
--- ethereal-0.10.6/crypt-md4.c	2004-08-12 17:42:33.000000000 -0500
+++ ethereal-0.10.7/crypt-md4.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,176 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   a implementation of MD4 designed for use in the SMB authentication protocol
-   Copyright (C) Andrew Tridgell 1997-1998.
-
-   $Id: crypt-md4.c 11400 2004-07-18 00:24:25Z guy $
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <glib.h>
-#include <string.h>
-
-/* NOTE: This code makes no attempt to be fast! 
-
-   It assumes that a int is at least 32 bits long
-*/
-
-static guint32 A, B, C, D;
-
-static guint32 F(guint32 X, guint32 Y, guint32 Z)
-{
-	return (X&Y) | ((~X)&Z);
-}
-
-static guint32 G(guint32 X, guint32 Y, guint32 Z)
-{
-	return (X&Y) | (X&Z) | (Y&Z); 
-}
-
-static guint32 H(guint32 X, guint32 Y, guint32 Z)
-{
-	return X^Y^Z;
-}
-
-static guint32 lshift(guint32 x, int s)
-{
-	x &= 0xFFFFFFFF;
-	return ((x<<s)&0xFFFFFFFF) | (x>>(32-s));
-}
-
-#define ROUND1(a,b,c,d,k,s) a = lshift(a + F(b,c,d) + X[k], s)
-#define ROUND2(a,b,c,d,k,s) a = lshift(a + G(b,c,d) + X[k] + (guint32)0x5A827999,s)
-#define ROUND3(a,b,c,d,k,s) a = lshift(a + H(b,c,d) + X[k] + (guint32)0x6ED9EBA1,s)
-
-/* this applies md4 to 64 byte chunks */
-static void mdfour64(guint32 *M)
-{
-	int j;
-	guint32 AA, BB, CC, DD;
-	guint32 X[16];
-
-	for (j=0;j<16;j++)
-		X[j] = M[j];
-
-	AA = A; BB = B; CC = C; DD = D;
-
-        ROUND1(A,B,C,D,  0,  3);  ROUND1(D,A,B,C,  1,  7);  
-	ROUND1(C,D,A,B,  2, 11);  ROUND1(B,C,D,A,  3, 19);
-        ROUND1(A,B,C,D,  4,  3);  ROUND1(D,A,B,C,  5,  7);  
-	ROUND1(C,D,A,B,  6, 11);  ROUND1(B,C,D,A,  7, 19);
-        ROUND1(A,B,C,D,  8,  3);  ROUND1(D,A,B,C,  9,  7);  
-	ROUND1(C,D,A,B, 10, 11);  ROUND1(B,C,D,A, 11, 19);
-        ROUND1(A,B,C,D, 12,  3);  ROUND1(D,A,B,C, 13,  7);  
-	ROUND1(C,D,A,B, 14, 11);  ROUND1(B,C,D,A, 15, 19);	
-
-        ROUND2(A,B,C,D,  0,  3);  ROUND2(D,A,B,C,  4,  5);  
-	ROUND2(C,D,A,B,  8,  9);  ROUND2(B,C,D,A, 12, 13);
-        ROUND2(A,B,C,D,  1,  3);  ROUND2(D,A,B,C,  5,  5);  
-	ROUND2(C,D,A,B,  9,  9);  ROUND2(B,C,D,A, 13, 13);
-        ROUND2(A,B,C,D,  2,  3);  ROUND2(D,A,B,C,  6,  5);  
-	ROUND2(C,D,A,B, 10,  9);  ROUND2(B,C,D,A, 14, 13);
-        ROUND2(A,B,C,D,  3,  3);  ROUND2(D,A,B,C,  7,  5);  
-	ROUND2(C,D,A,B, 11,  9);  ROUND2(B,C,D,A, 15, 13);
-
-	ROUND3(A,B,C,D,  0,  3);  ROUND3(D,A,B,C,  8,  9);  
-	ROUND3(C,D,A,B,  4, 11);  ROUND3(B,C,D,A, 12, 15);
-        ROUND3(A,B,C,D,  2,  3);  ROUND3(D,A,B,C, 10,  9);  
-	ROUND3(C,D,A,B,  6, 11);  ROUND3(B,C,D,A, 14, 15);
-        ROUND3(A,B,C,D,  1,  3);  ROUND3(D,A,B,C,  9,  9);  
-	ROUND3(C,D,A,B,  5, 11);  ROUND3(B,C,D,A, 13, 15);
-        ROUND3(A,B,C,D,  3,  3);  ROUND3(D,A,B,C, 11,  9);  
-	ROUND3(C,D,A,B,  7, 11);  ROUND3(B,C,D,A, 15, 15);
-
-	A += AA; B += BB; C += CC; D += DD;
-	
-	A &= 0xFFFFFFFF; B &= 0xFFFFFFFF;
-	C &= 0xFFFFFFFF; D &= 0xFFFFFFFF;
-
-	for (j=0;j<16;j++)
-		X[j] = 0;
-}
-
-static void copy64(guint32 *M, const unsigned char *in)
-{
-	int i;
-
-	for (i=0;i<16;i++)
-		M[i] = (in[i*4+3]<<24) | (in[i*4+2]<<16) |
-			(in[i*4+1]<<8) | (in[i*4+0]<<0);
-}
-
-static void copy4(unsigned char *out, guint32 x)
-{
-	out[0] = x&0xFF;
-	out[1] = (x>>8)&0xFF;
-	out[2] = (x>>16)&0xFF;
-	out[3] = (x>>24)&0xFF;
-}
-
-/* produce a md4 message digest from data of length n bytes */
-void crypt_md4(unsigned char *out, const unsigned char *in, int n)
-{
-	unsigned char buf[128];
-	guint32 M[16];
-	guint32 b = n * 8;
-	int i;
-
-	A = 0x67452301;
-	B = 0xefcdab89;
-	C = 0x98badcfe;
-	D = 0x10325476;
-
-	while (n > 64) {
-		copy64(M, in);
-		mdfour64(M);
-		in += 64;
-		n -= 64;
-	}
-
-	for (i=0;i<128;i++)
-		buf[i] = 0;
-	memcpy(buf, in, n);
-	buf[n] = 0x80;
-	
-	if (n <= 55) {
-		copy4(buf+56, b);
-		copy64(M, buf);
-		mdfour64(M);
-	} else {
-		copy4(buf+120, b); 
-		copy64(M, buf);
-		mdfour64(M);
-		copy64(M, buf+64);
-		mdfour64(M);
-	}
-
-	for (i=0;i<128;i++)
-		buf[i] = 0;
-	copy64(M, buf);
-
-	copy4(out, A);
-	copy4(out+4, B);
-	copy4(out+8, C);
-	copy4(out+12, D);
-
-	A = B = C = D = 0;
-}
-
-
diff -urN ethereal-0.10.6/crypt-md4.h ethereal-0.10.7/crypt-md4.h
--- ethereal-0.10.6/crypt-md4.h	2004-08-12 17:42:33.000000000 -0500
+++ ethereal-0.10.7/crypt-md4.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,23 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   a implementation of MD4 designed for use in the SMB authentication protocol
-   Copyright (C) Andrew Tridgell 1997-1998.
-
-   $Id: crypt-md4.h 11400 2004-07-18 00:24:25Z guy $
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-void crypt_md4(unsigned char *out, const unsigned char *in, int n);
diff -urN ethereal-0.10.6/crypt-md5.c ethereal-0.10.7/crypt-md5.c
--- ethereal-0.10.6/crypt-md5.c	2004-08-12 17:41:29.000000000 -0500
+++ ethereal-0.10.7/crypt-md5.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,381 +0,0 @@
-/*
-  Copyright (C) 1999, 2000, 2002 Aladdin Enterprises.  All rights reserved.
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-
-  L. Peter Deutsch
-  ghost@aladdin.com
-
- */
-/* $Id: crypt-md5.c 11400 2004-07-18 00:24:25Z guy $ */
-/*
-  Independent implementation of MD5 (RFC 1321).
-
-  This code implements the MD5 Algorithm defined in RFC 1321, whose
-  text is available at
-	http://www.ietf.org/rfc/rfc1321.txt
-  The code is derived from the text of the RFC, including the test suite
-  (section A.5) but excluding the rest of Appendix A.  It does not include
-  any code or documentation that is identified in the RFC as being
-  copyrighted.
-
-  The original and principal author of md5.c is L. Peter Deutsch
-  <ghost@aladdin.com>.  Other authors are noted in the change history
-  that follows (in reverse chronological order):
-
-  2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order
-	either statically or dynamically; added missing #include <string.h>
-	in library.
-  2002-03-11 lpd Corrected argument list for main(), and added int return
-	type, in test program and T value program.
-  2002-02-21 lpd Added missing #include <stdio.h> in test program.
-  2000-07-03 lpd Patched to eliminate warnings about "constant is
-	unsigned in ANSI C, signed in traditional"; made test program
-	self-checking.
-  1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
-  1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5).
-  1999-05-03 lpd Original version.
- */
-
-#include "crypt-md5.h"
-#include <string.h>
-
-#undef BYTE_ORDER	/* 1 = big-endian, -1 = little-endian, 0 = unknown */
-#ifdef ARCH_IS_BIG_ENDIAN
-#  define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1)
-#else
-#  define BYTE_ORDER 0
-#endif
-
-#define T_MASK ((md5_word_t)~0)
-#define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87)
-#define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9)
-#define T3    0x242070db
-#define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111)
-#define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050)
-#define T6    0x4787c62a
-#define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec)
-#define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe)
-#define T9    0x698098d8
-#define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850)
-#define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e)
-#define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841)
-#define T13    0x6b901122
-#define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c)
-#define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71)
-#define T16    0x49b40821
-#define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d)
-#define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf)
-#define T19    0x265e5a51
-#define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855)
-#define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2)
-#define T22    0x02441453
-#define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e)
-#define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437)
-#define T25    0x21e1cde6
-#define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829)
-#define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278)
-#define T28    0x455a14ed
-#define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa)
-#define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07)
-#define T31    0x676f02d9
-#define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375)
-#define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd)
-#define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e)
-#define T35    0x6d9d6122
-#define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3)
-#define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb)
-#define T38    0x4bdecfa9
-#define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f)
-#define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f)
-#define T41    0x289b7ec6
-#define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805)
-#define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a)
-#define T44    0x04881d05
-#define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6)
-#define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a)
-#define T47    0x1fa27cf8
-#define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a)
-#define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb)
-#define T50    0x432aff97
-#define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58)
-#define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6)
-#define T53    0x655b59c3
-#define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d)
-#define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82)
-#define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e)
-#define T57    0x6fa87e4f
-#define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f)
-#define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb)
-#define T60    0x4e0811a1
-#define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d)
-#define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca)
-#define T63    0x2ad7d2bb
-#define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e)
-
-
-static void
-md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
-{
-    md5_word_t
-	a = pms->abcd[0], b = pms->abcd[1],
-	c = pms->abcd[2], d = pms->abcd[3];
-    md5_word_t t;
-#if BYTE_ORDER > 0
-    /* Define storage only for big-endian CPUs. */
-    md5_word_t X[16];
-#else
-    /* Define storage for little-endian or both types of CPUs. */
-    md5_word_t xbuf[16];
-    const md5_word_t *X;
-#endif
-
-    {
-#if BYTE_ORDER == 0
-	/*
-	 * Determine dynamically whether this is a big-endian or
-	 * little-endian machine, since we can use a more efficient
-	 * algorithm on the latter.
-	 */
-	static const int w = 1;
-
-	if (*((const md5_byte_t *)&w)) /* dynamic little-endian */
-#endif
-#if BYTE_ORDER <= 0		/* little-endian */
-	{
-	    /*
-	     * On little-endian machines, we can process properly aligned
-	     * data without copying it.
-	     */
-	    if (!((data - (const md5_byte_t *)0) & 3)) {
-		/* data are properly aligned */
-		X = (const md5_word_t *)data;
-	    } else {
-		/* not aligned */
-		memcpy(xbuf, data, 64);
-		X = xbuf;
-	    }
-	}
-#endif
-#if BYTE_ORDER == 0
-	else			/* dynamic big-endian */
-#endif
-#if BYTE_ORDER >= 0		/* big-endian */
-	{
-	    /*
-	     * On big-endian machines, we must arrange the bytes in the
-	     * right order.
-	     */
-	    const md5_byte_t *xp = data;
-	    int i;
-
-#  if BYTE_ORDER == 0
-	    X = xbuf;		/* (dynamic only) */
-#  else
-#    define xbuf X		/* (static only) */
-#  endif
-	    for (i = 0; i < 16; ++i, xp += 4)
-		xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);
-	}
-#endif
-    }
-
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
-
-    /* Round 1. */
-    /* Let [abcd k s i] denote the operation
-       a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
-#define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
-#define SET(a, b, c, d, k, s, Ti)\
-  t = a + F(b,c,d) + X[k] + Ti;\
-  a = ROTATE_LEFT(t, s) + b
-    /* Do the following 16 operations. */
-    SET(a, b, c, d,  0,  7,  T1);
-    SET(d, a, b, c,  1, 12,  T2);
-    SET(c, d, a, b,  2, 17,  T3);
-    SET(b, c, d, a,  3, 22,  T4);
-    SET(a, b, c, d,  4,  7,  T5);
-    SET(d, a, b, c,  5, 12,  T6);
-    SET(c, d, a, b,  6, 17,  T7);
-    SET(b, c, d, a,  7, 22,  T8);
-    SET(a, b, c, d,  8,  7,  T9);
-    SET(d, a, b, c,  9, 12, T10);
-    SET(c, d, a, b, 10, 17, T11);
-    SET(b, c, d, a, 11, 22, T12);
-    SET(a, b, c, d, 12,  7, T13);
-    SET(d, a, b, c, 13, 12, T14);
-    SET(c, d, a, b, 14, 17, T15);
-    SET(b, c, d, a, 15, 22, T16);
-#undef SET
-
-     /* Round 2. */
-     /* Let [abcd k s i] denote the operation
-          a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
-#define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))
-#define SET(a, b, c, d, k, s, Ti)\
-  t = a + G(b,c,d) + X[k] + Ti;\
-  a = ROTATE_LEFT(t, s) + b
-     /* Do the following 16 operations. */
-    SET(a, b, c, d,  1,  5, T17);
-    SET(d, a, b, c,  6,  9, T18);
-    SET(c, d, a, b, 11, 14, T19);
-    SET(b, c, d, a,  0, 20, T20);
-    SET(a, b, c, d,  5,  5, T21);
-    SET(d, a, b, c, 10,  9, T22);
-    SET(c, d, a, b, 15, 14, T23);
-    SET(b, c, d, a,  4, 20, T24);
-    SET(a, b, c, d,  9,  5, T25);
-    SET(d, a, b, c, 14,  9, T26);
-    SET(c, d, a, b,  3, 14, T27);
-    SET(b, c, d, a,  8, 20, T28);
-    SET(a, b, c, d, 13,  5, T29);
-    SET(d, a, b, c,  2,  9, T30);
-    SET(c, d, a, b,  7, 14, T31);
-    SET(b, c, d, a, 12, 20, T32);
-#undef SET
-
-     /* Round 3. */
-     /* Let [abcd k s t] denote the operation
-          a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-#define SET(a, b, c, d, k, s, Ti)\
-  t = a + H(b,c,d) + X[k] + Ti;\
-  a = ROTATE_LEFT(t, s) + b
-     /* Do the following 16 operations. */
-    SET(a, b, c, d,  5,  4, T33);
-    SET(d, a, b, c,  8, 11, T34);
-    SET(c, d, a, b, 11, 16, T35);
-    SET(b, c, d, a, 14, 23, T36);
-    SET(a, b, c, d,  1,  4, T37);
-    SET(d, a, b, c,  4, 11, T38);
-    SET(c, d, a, b,  7, 16, T39);
-    SET(b, c, d, a, 10, 23, T40);
-    SET(a, b, c, d, 13,  4, T41);
-    SET(d, a, b, c,  0, 11, T42);
-    SET(c, d, a, b,  3, 16, T43);
-    SET(b, c, d, a,  6, 23, T44);
-    SET(a, b, c, d,  9,  4, T45);
-    SET(d, a, b, c, 12, 11, T46);
-    SET(c, d, a, b, 15, 16, T47);
-    SET(b, c, d, a,  2, 23, T48);
-#undef SET
-
-     /* Round 4. */
-     /* Let [abcd k s t] denote the operation
-          a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
-#define I(x, y, z) ((y) ^ ((x) | ~(z)))
-#define SET(a, b, c, d, k, s, Ti)\
-  t = a + I(b,c,d) + X[k] + Ti;\
-  a = ROTATE_LEFT(t, s) + b
-     /* Do the following 16 operations. */
-    SET(a, b, c, d,  0,  6, T49);
-    SET(d, a, b, c,  7, 10, T50);
-    SET(c, d, a, b, 14, 15, T51);
-    SET(b, c, d, a,  5, 21, T52);
-    SET(a, b, c, d, 12,  6, T53);
-    SET(d, a, b, c,  3, 10, T54);
-    SET(c, d, a, b, 10, 15, T55);
-    SET(b, c, d, a,  1, 21, T56);
-    SET(a, b, c, d,  8,  6, T57);
-    SET(d, a, b, c, 15, 10, T58);
-    SET(c, d, a, b,  6, 15, T59);
-    SET(b, c, d, a, 13, 21, T60);
-    SET(a, b, c, d,  4,  6, T61);
-    SET(d, a, b, c, 11, 10, T62);
-    SET(c, d, a, b,  2, 15, T63);
-    SET(b, c, d, a,  9, 21, T64);
-#undef SET
-
-     /* Then perform the following additions. (That is increment each
-        of the four registers by the value it had before this block
-        was started.) */
-    pms->abcd[0] += a;
-    pms->abcd[1] += b;
-    pms->abcd[2] += c;
-    pms->abcd[3] += d;
-}
-
-void
-md5_init(md5_state_t *pms)
-{
-    pms->count[0] = pms->count[1] = 0;
-    pms->abcd[0] = 0x67452301;
-    pms->abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476;
-    pms->abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301;
-    pms->abcd[3] = 0x10325476;
-}
-
-void
-md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes)
-{
-    const md5_byte_t *p = data;
-    int left = nbytes;
-    int offset = (pms->count[0] >> 3) & 63;
-    md5_word_t nbits = (md5_word_t)(nbytes << 3);
-
-    if (nbytes <= 0)
-	return;
-
-    /* Update the message length. */
-    pms->count[1] += nbytes >> 29;
-    pms->count[0] += nbits;
-    if (pms->count[0] < nbits)
-	pms->count[1]++;
-
-    /* Process an initial partial block. */
-    if (offset) {
-	int copy = (offset + nbytes > 64 ? 64 - offset : nbytes);
-
-	memcpy(pms->buf + offset, p, copy);
-	if (offset + copy < 64)
-	    return;
-	p += copy;
-	left -= copy;
-	md5_process(pms, pms->buf);
-    }
-
-    /* Process full blocks. */
-    for (; left >= 64; p += 64, left -= 64)
-	md5_process(pms, p);
-
-    /* Process a final partial block. */
-    if (left)
-	memcpy(pms->buf, p, left);
-}
-
-void
-md5_finish(md5_state_t *pms, md5_byte_t digest[16])
-{
-    static const md5_byte_t pad[64] = {
-	0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-    };
-    md5_byte_t data[8];
-    int i;
-
-    /* Save the length before padding. */
-    for (i = 0; i < 8; ++i)
-	data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3));
-    /* Pad to 56 bytes mod 64. */
-    md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1);
-    /* Append the length. */
-    md5_append(pms, data, 8);
-    for (i = 0; i < 16; ++i)
-	digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3));
-}
diff -urN ethereal-0.10.6/crypt-md5.h ethereal-0.10.7/crypt-md5.h
--- ethereal-0.10.6/crypt-md5.h	2004-08-12 17:41:31.000000000 -0500
+++ ethereal-0.10.7/crypt-md5.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,91 +0,0 @@
-/*
-  Copyright (C) 1999, 2002 Aladdin Enterprises.  All rights reserved.
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-
-  L. Peter Deutsch
-  ghost@aladdin.com
-
- */
-/* $Id: crypt-md5.h 11400 2004-07-18 00:24:25Z guy $ */
-/*
-  Independent implementation of MD5 (RFC 1321).
-
-  This code implements the MD5 Algorithm defined in RFC 1321, whose
-  text is available at
-	http://www.ietf.org/rfc/rfc1321.txt
-  The code is derived from the text of the RFC, including the test suite
-  (section A.5) but excluding the rest of Appendix A.  It does not include
-  any code or documentation that is identified in the RFC as being
-  copyrighted.
-
-  The original and principal author of md5.h is L. Peter Deutsch
-  <ghost@aladdin.com>.  Other authors are noted in the change history
-  that follows (in reverse chronological order):
-
-  2002-04-13 lpd Removed support for non-ANSI compilers; removed
-	references to Ghostscript; clarified derivation from RFC 1321;
-	now handles byte order either statically or dynamically.
-  1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
-  1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
-	added conditionalization for C++ compilation from Martin
-	Purschke <purschke@bnl.gov>.
-  1999-05-03 lpd Original version.
- */
-
-#ifndef md5_INCLUDED
-#  define md5_INCLUDED
-
-/*
- * This package supports both compile-time and run-time determination of CPU
- * byte order.  If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be
- * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is
- * defined as non-zero, the code will be compiled to run only on big-endian
- * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to
- * run on either big- or little-endian CPUs, but will run slightly less
- * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined.
- */
-
-typedef unsigned char md5_byte_t; /* 8-bit byte */
-typedef unsigned int md5_word_t; /* 32-bit word */
-
-/* Define the state of the MD5 Algorithm. */
-typedef struct md5_state_s {
-    md5_word_t count[2];	/* message length in bits, lsw first */
-    md5_word_t abcd[4];		/* digest buffer */
-    md5_byte_t buf[64];		/* accumulate block */
-} md5_state_t;
-
-#ifdef __cplusplus
-extern "C" 
-{
-#endif
-
-/* Initialize the algorithm. */
-void md5_init(md5_state_t *pms);
-
-/* Append a string to the message. */
-void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes);
-
-/* Finish the message and return the digest. */
-void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
-
-#ifdef __cplusplus
-}  /* end extern "C" */
-#endif
-
-#endif /* md5_INCLUDED */
diff -urN ethereal-0.10.6/crypt-rc4.c ethereal-0.10.7/crypt-rc4.c
--- ethereal-0.10.6/crypt-rc4.c	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/crypt-rc4.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,103 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-
-   a partial implementation of RC4 designed for use in the 
-   SMB authentication protocol
-
-   Copyright (C) Andrew Tridgell 1998
-
-   $Id: crypt-rc4.c 11400 2004-07-18 00:24:25Z guy $
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-#include <glib.h>
-#include <string.h>
-
-#include "crypt-rc4.h"
-
-/* Perform RC4 on a block of data using specified key.  "data" is a pointer
-   to the block to be processed.  Output is written to same memory as input,
-   so caller may need to make a copy before calling this function, since
-   the input will be overwritten.  
-   
-   Taken from Samba source code.  Modified to allow us to maintain state
-   between calls to crypt_rc4.
-*/
-
-void crypt_rc4_init(rc4_state_struct *rc4_state, 
-		    const unsigned char *key, int key_len)
-{
-  int ind;
-  unsigned char j = 0;
-  unsigned char *s_box;
-
-  memset(rc4_state, 0, sizeof(rc4_state_struct));
-  s_box = rc4_state->s_box;
-  
-  for (ind = 0; ind < 256; ind++)
-  {
-    s_box[ind] = (unsigned char)ind;
-  }
-
-  for( ind = 0; ind < 256; ind++)
-  {
-     unsigned char tc;
-
-     j += (s_box[ind] + key[ind%key_len]);
-
-     tc = s_box[ind];
-     s_box[ind] = s_box[j];
-     s_box[j] = tc;
-  }
-
-}
-
-void crypt_rc4(rc4_state_struct *rc4_state, unsigned char *data, int data_len)
-{
-  unsigned char *s_box;
-  unsigned char index_i;
-  unsigned char index_j;
-  int ind;
-
-  /* retrieve current state from the state struct (so we can resume where
-     we left off) */
-  index_i = rc4_state->index_i;
-  index_j = rc4_state->index_j;
-  s_box = rc4_state->s_box;
-
-  for( ind = 0; ind < data_len; ind++)
-  {
-    unsigned char tc;
-    unsigned char t;
-
-    index_i++;
-    index_j += s_box[index_i];
-
-    tc = s_box[index_i];
-    s_box[index_i] = s_box[index_j];
-    s_box[index_j] = tc;
-
-    t = s_box[index_i] + s_box[index_j];
-    data[ind] = data[ind] ^ s_box[t];
-  }
-
-  /* Store the updated state */
-  rc4_state->index_i = index_i;
-  rc4_state->index_j = index_j;
-}
diff -urN ethereal-0.10.6/crypt-rc4.h ethereal-0.10.7/crypt-rc4.h
--- ethereal-0.10.6/crypt-rc4.h	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/crypt-rc4.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,36 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-
-   a partial implementation of RC4 designed for use in the 
-   SMB authentication protocol
-
-   Copyright (C) Andrew Tridgell 1998
-
-   $Id: crypt-rc4.h 11400 2004-07-18 00:24:25Z guy $
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-typedef struct _rc4_state_struct {
-  unsigned char s_box[256];
-  unsigned char index_i;
-  unsigned char index_j;
-} rc4_state_struct;
-
-void crypt_rc4_init(rc4_state_struct *rc4_state, 
-		    const unsigned char *key, int key_len);
-
-void crypt_rc4(rc4_state_struct *rc4_state, unsigned char *data, int data_len);
-
diff -urN ethereal-0.10.6/dftest.c ethereal-0.10.7/dftest.c
--- ethereal-0.10.6/dftest.c	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/dftest.c	2004-10-20 17:35:06.000000000 -0500
@@ -1,6 +1,6 @@
 /* dftest.c.c
  *
- * $Id: dftest.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: dftest.c 12180 2004-10-02 01:53:02Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -22,6 +22,10 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
+ 
+/* With MSVC and a libethereal.dll this file needs to import some variables 
+   in a special way. Therefore _NEED_VAR_IMPORT_ is defined. */  
+#define _NEED_VAR_IMPORT_
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -43,7 +47,7 @@
 #include <epan/timestamp.h>
 #include <epan/plugins.h>
 #include <epan/filesystem.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "util.h"
 #include "epan/dfilter/dfilter.h"
 #include "register.h"
diff -urN ethereal-0.10.6/dictionary.xml ethereal-0.10.7/dictionary.xml
--- ethereal-0.10.6/dictionary.xml	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/dictionary.xml	2004-10-20 17:34:33.000000000 -0500
@@ -3,9 +3,10 @@
 	<!ENTITY nasreq SYSTEM "nasreq.xml">
 	<!ENTITY mobileipv4 SYSTEM "mobileipv4.xml">
 	<!ENTITY sunping SYSTEM "sunping.xml">
+	<!ENTITY imscxdx SYSTEM "imscxdx.xml">
 ]>
 <dictionary>
-	<base uri="ftp://ftp.ietf.org/internet-drafts/draft-ietf-aaa-diameter-07.txt">
+	<base uri="http://www.ietf.org/rfc/rfc3588.txt">
 		<!--
   $Log: dictionary.xml,v $
   Revision 1.1  2001/11/01 21:52:44  guy
@@ -47,9 +48,11 @@
 
 		<!-- ************************* Vendors **************************** -->
 		<vendor vendor-id="None" code="0" name="None"/>
+		<vendor vendor-id="HP"    code="11"    name="Hewlett Packard"/>
 		<vendor vendor-id="Merit" code="61" name="Merit Networks"/>
 		<vendor vendor-id="Sun" code="42" name="Sun Microsystems, Inc."/>
 		<vendor vendor-id="USR" code="429" name="US Robotics Corp."/>
+		<vendor vendor-id="TGPP"  code="10415" name="3GPP"/>
 		<!-- *********************** End Vendors ************************** -->
 
 		<!-- ************************ typedefn's ************************** -->
@@ -518,7 +521,7 @@
 		<avp name="Auth-Session-State" code="277" mandatory="must" may-encrypt="no" vendor-bit="mustnot">
 			<type type-name="Unsigned32"/>
 			<enum name="State Maintained" code="0"/>
-			<enum name="No State Maintained" code="0"/>
+			<enum name="No State Maintained" code="1"/>
 		</avp>
 		<avp name="Re-Auth-Request-Type" code="285" mandatory="must" may-encrypt="no" vendor-bit="mustnot">
 			<type type-name="Unsigned32"/>
@@ -534,7 +537,7 @@
 		<avp name="Disconnect-Cause" code="273" mandatory="must" protected="mustnot" may-encrypt="no" vendor-bit="mustnot">
 			<type type-name="Unsigned32"/>
 			<enum name="Rebooting" code="0"/>
-			<enum name="Busy" code="2"/>
+			<enum name="Busy" code="1"/>
 			<enum name="Do not want to talk to you" code="2"/>
 		</avp>
 		<avp name="Error-Message" code="281" mandatory="must" protected="mustnot" may-encrypt="no" vendor-bit="mustnot">
@@ -590,6 +593,62 @@
 		</avp>
 		<avp name="Result-Code" code="268" mandatory="must" may-encrypt="no" protected="mustnot" vendor-bit="mustnot">
 			<type type-name="Unsigned32"/>
+			<enum name="DIAMETER_MULTI_ROUND_AUTH" code="1001"/>
+			<enum name="DIAMETER_SUCCESS" code="2001"/>
+			<enum name="DIAMETER_LIMITED_SUCCESS" code="2002"/>
+			<enum name="DIAMETER_COMMAND_UNSUPPORTED" code="3001"/>
+			<enum name="DIAMETER_UNABLE_TO_DELIVER" code="3002"/>
+			<enum name="DIAMETER_REALM_NOT_SERVED" code="3003"/>
+			<enum name="DIAMETER_TOO_BUSY" code="3004"/>
+			<enum name="DIAMETER_LOOP_DETECTED" code="3005"/>
+			<enum name="DIAMETER_REDIRECT_INDICATION" code="3006"/>
+			<enum name="DIAMETER_APPLICATION_UNSUPPORTED" code="3007"/>
+			<enum name="DIAMETER_INVALID_HDR_BITS" code="3008"/>
+			<enum name="DIAMETER_INVALID_AVP_BITS" code="3009"/>
+			<enum name="DIAMETER_UNKNOWN_PEER" code="3010"/>
+			<enum name="DIAMETER_AUTHENTICATION_REJECTED" code="4001"/>
+			<enum name="DIAMETER_OUT_OF_SPACE" code="4002"/>
+			<enum name="DIAMETER_ELECTION_LOST" code="4003"/>
+			<enum name="DIAMETER_AVP_UNSUPPORTED" code="5001"/>
+			<enum name="DIAMETER_UNKNOWN_SESSION_ID" code="5002"/>
+			<enum name="DIAMETER_AUTHORIZATION_REJECTED" code="5003"/>
+			<enum name="DIAMETER_INVALID_AVP_VALUE" code="5004"/>
+			<enum name="DIAMETER_MISSING_AVP" code="5005"/>
+			<enum name="DIAMETER_RESOURCES_EXCEEDED" code="5006"/>
+			<enum name="DIAMETER_CONTRADICTING_AVPS" code="5007"/>
+			<enum name="DIAMETER_AVP_NOT_ALLOWED" code="5008"/>
+			<enum name="DIAMETER_AVP_OCCURS_TOO_MANY_TIMES" code="5009"/>
+			<enum name="DIAMETER_NO_COMMON_APPLICATION " code="5010"/>
+			<enum name="DIAMETER_UNSUPPORTED_VERSION" code="5011"/>
+			<enum name="DIAMETER_UNABLE_TO_COMPLY" code="5012"/>
+			<enum name="DIAMETER_INVALID_BIT_IN_HEADER" code="5013"/>
+			<enum name="DIAMETER_INVALID_AVP_LENGTH" code="5014"/>
+			<enum name="DIAMETER_INVALID_MESSAGE_LENGTH" code="5015"/>
+			<enum name="DIAMETER_INVALID_AVP_BIT_COMBO" code="5016"/>
+			<enum name="DIAMETER_NO_COMMON_SECURITY" code="5017"/>
+		</avp>
+		<avp name="Experimental-Result" code="297" mandatory="must" may-encrypt="no" protected="mustnot" vendor-bit="mustnot">
+			<grouped>
+				<gavp name="Vendor-Id"/>
+				<gavp name="Experimental-Result-Code"/>
+			</grouped>
+		</avp>
+		<avp name="Experimental-Result-Code" code="298" mandatory="must" may-encrypt="no" protected="mustnot" vendor-bit="mustnot">
+			<type type-name="Unsigned32"/>
+			<enum name="First Registration" code="2001"/>
+			<enum name="Subsequent Registration" code="2002"/>
+			<enum name="Unregistered Service" code="2003"/>
+			<enum name="Success Server Name Not Stored" code="2004"/>
+			<enum name="Server Selection" code="2005"/>
+			<enum name="Error User Unknown" code="5001"/>
+			<enum name="Error Identities Dont Match" code="5002"/>
+			<enum name="Error Identity Not Registered" code="5003"/>
+			<enum name="Error Roaming Not Allowed" code="5004"/>
+			<enum name="Error Roaming Identity Already Registered" code="5005"/>
+			<enum name="Error Roaming Auth Scheme Not Supported" code="5006"/>
+			<enum name="Error In Assignment Type" code="5007"/>
+			<enum name="Error Too Much Data" code="5008"/>
+			<enum name="Error Not Supported User Data" code="5009"/>
 		</avp>
 		<avp name="Route-Record" code="282" mandatory="must" may-encrypt="no" protected="mustnot" vendor-bit="mustnot">
 			<type type-name="DiameterIdentity"/>
@@ -643,5 +702,6 @@
 	&nasreq;
 	&mobileipv4;
 	&sunping;
+	&imscxdx;
 	
 </dictionary>
diff -urN ethereal-0.10.6/disabled_protos.c ethereal-0.10.7/disabled_protos.c
--- ethereal-0.10.6/disabled_protos.c	2004-08-12 17:42:33.000000000 -0500
+++ ethereal-0.10.7/disabled_protos.c	2004-10-20 17:35:05.000000000 -0500
@@ -1,7 +1,7 @@
 /* disabled_protos.c
  * Code for reading and writing the disabled protocols file.
  *
- * $Id: disabled_protos.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: disabled_protos.c 11972 2004-09-11 23:03:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -366,7 +366,7 @@
     return;
   }
 
-#ifdef WIN32
+#ifdef _WIN32
   /* ANSI C doesn't say whether "rename()" removes the target if it
      exists; the Win32 call to rename files doesn't do so, which I
      infer is the reason why the MSVC++ "rename()" doesn't do so.
diff -urN ethereal-0.10.6/doc/Makefile.am ethereal-0.10.7/doc/Makefile.am
--- ethereal-0.10.6/doc/Makefile.am	2004-08-12 17:41:30.000000000 -0500
+++ ethereal-0.10.7/doc/Makefile.am	2004-10-20 17:34:17.000000000 -0500
@@ -1,7 +1,7 @@
 # Makefile.am
 # Automake file for Ethereal documentation
 #
-# $Id: Makefile.am 11728 2004-08-12 21:47:47Z gerald $
+# $Id: Makefile.am 12359 2004-10-20 19:07:50Z gerald $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -24,8 +24,8 @@
 # We include dependencies on ../config.h in order to
 # capture when $(VERSION) changes.
 
-ethereal-tmp.pod: $(srcdir)/ethereal.pod $(top_srcdir)/AUTHORS-SHORT
-	cat $(srcdir)/ethereal.pod $(top_srcdir)/AUTHORS-SHORT > ethereal-tmp.pod
+ethereal-tmp.pod: $(srcdir)/ethereal.pod $(top_srcdir)/AUTHORS-SHORT-FORMAT
+	cat $(srcdir)/ethereal.pod $(top_srcdir)/AUTHORS-SHORT-FORMAT > ethereal-tmp.pod
 
 ../ethereal.1: ethereal-tmp.pod ../config.h
 	$(POD2MAN)                     \
@@ -67,17 +67,17 @@
 ethereal-filter.pod: ethereal-filter.pod.template  ../tethereal
 	../tethereal -G fields | $(PERL) $(srcdir)/dfilter2pod.pl $(srcdir)/ethereal-filter.pod.template > ethereal-filter.pod
 
-../capinfo.1: capinfo.pod ../config.h
+../capinfos.1: capinfos.pod ../config.h
 	$(POD2MAN)                      \
 	--center="The Ethereal Network Analyzer" \
 	--release=$(VERSION)			 \
-	$(srcdir)/capinfo.pod > ../capinfo.1
+	$(srcdir)/capinfos.pod > ../capinfos.1
 
-../capinfo.html: capinfo.pod ../config.h
+../capinfos.html: capinfos.pod ../config.h
 	$(POD2HTML)                     \
-	--title="capinfo - The Ethereal Network Analyzer $(VERSION)" \
+	--title="capinfos - The Ethereal Network Analyzer $(VERSION)" \
 	--noindex                                 \
-	capinfo.pod > ../capinfo.html
+	capinfos.pod > ../capinfos.html
 
 ../editcap.1: editcap.pod ../config.h
 	$(POD2MAN)                      \
@@ -134,8 +134,8 @@
 	../ethereal-filter.html \
 	../ethereal.1	\
 	../ethereal.html	\
-	../capinfo.1	\
-	../capinfo.html	\
+	../capinfos.1	\
+	../capinfos.html	\
 	../editcap.1	\
 	../editcap.html	\
 	../mergecap.1	\
diff -urN ethereal-0.10.6/doc/Makefile.in ethereal-0.10.7/doc/Makefile.in
--- ethereal-0.10.6/doc/Makefile.in	2004-08-12 21:04:19.000000000 -0500
+++ ethereal-0.10.7/doc/Makefile.in	2004-10-20 21:50:15.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -17,7 +17,7 @@
 # Makefile.am
 # Automake file for Ethereal documentation
 #
-# $Id: Makefile.am 11728 2004-08-12 21:47:47Z gerald $
+# $Id: Makefile.am 12359 2004-10-20 19:07:50Z gerald $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -100,6 +100,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -111,10 +114,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -195,8 +201,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -249,8 +255,8 @@
 	../ethereal-filter.html \
 	../ethereal.1	\
 	../ethereal.html	\
-	../capinfo.1	\
-	../capinfo.html	\
+	../capinfos.1	\
+	../capinfos.html	\
 	../editcap.1	\
 	../editcap.html	\
 	../mergecap.1	\
@@ -347,7 +353,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -368,7 +374,6 @@
 
 distclean: distclean-am
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-generic distclean-libtool
 
 dvi: dvi-am
@@ -391,7 +396,6 @@
 
 maintainer-clean: maintainer-clean-am
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
@@ -419,8 +423,8 @@
 	uninstall-info-am
 
 
-ethereal-tmp.pod: $(srcdir)/ethereal.pod $(top_srcdir)/AUTHORS-SHORT
-	cat $(srcdir)/ethereal.pod $(top_srcdir)/AUTHORS-SHORT > ethereal-tmp.pod
+ethereal-tmp.pod: $(srcdir)/ethereal.pod $(top_srcdir)/AUTHORS-SHORT-FORMAT
+	cat $(srcdir)/ethereal.pod $(top_srcdir)/AUTHORS-SHORT-FORMAT > ethereal-tmp.pod
 
 ../ethereal.1: ethereal-tmp.pod ../config.h
 	$(POD2MAN)                     \
@@ -462,17 +466,17 @@
 ethereal-filter.pod: ethereal-filter.pod.template  ../tethereal
 	../tethereal -G fields | $(PERL) $(srcdir)/dfilter2pod.pl $(srcdir)/ethereal-filter.pod.template > ethereal-filter.pod
 
-../capinfo.1: capinfo.pod ../config.h
+../capinfos.1: capinfos.pod ../config.h
 	$(POD2MAN)                      \
 	--center="The Ethereal Network Analyzer" \
 	--release=$(VERSION)			 \
-	$(srcdir)/capinfo.pod > ../capinfo.1
+	$(srcdir)/capinfos.pod > ../capinfos.1
 
-../capinfo.html: capinfo.pod ../config.h
+../capinfos.html: capinfos.pod ../config.h
 	$(POD2HTML)                     \
-	--title="capinfo - The Ethereal Network Analyzer $(VERSION)" \
+	--title="capinfos - The Ethereal Network Analyzer $(VERSION)" \
 	--noindex                                 \
-	capinfo.pod > ../capinfo.html
+	capinfos.pod > ../capinfos.html
 
 ../editcap.1: editcap.pod ../config.h
 	$(POD2MAN)                      \
diff -urN ethereal-0.10.6/doc/Makefile.nmake ethereal-0.10.7/doc/Makefile.nmake
--- ethereal-0.10.6/doc/Makefile.nmake	2004-08-12 17:41:30.000000000 -0500
+++ ethereal-0.10.7/doc/Makefile.nmake	2004-10-20 17:34:17.000000000 -0500
@@ -1,7 +1,7 @@
 # Makefile.nmake
 # Nmake file for Ethereal documentation
 #
-# $Id: Makefile.nmake 11555 2004-07-28 20:51:29Z obiot $
+# $Id: Makefile.nmake 12359 2004-10-20 19:07:50Z gerald $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -26,15 +26,20 @@
 
 include ../config.nmake
 
-doc: ethereal.html tethereal.html ethereal-filter.html capinfo.html \
+doc: ethereal.html tethereal.html ethereal-filter.html capinfos.html \
 	editcap.html idl2eth.html mergecap.html text2pcap.html
 
-man: ethereal.1 tethereal.1 ethereal-filter.4 capinfo.1 editcap.1 \
+man: ethereal.1 tethereal.1 ethereal-filter.4 capinfos.1 editcap.1 \
 	idl2eth.1 mergecap.1 text2pcap.1
 
-ethereal-tmp.pod: ethereal.pod ../AUTHORS-SHORT
-	copy /B ethereal.pod + ..\AUTHORS-SHORT ethereal-tmp.pod
-	
+ethereal-tmp.pod: ethereal.pod ../AUTHORS-SHORT-FORMAT
+	copy /B ethereal.pod + ..\AUTHORS-SHORT-FORMAT ethereal-tmp.pod
+
+../AUTHORS-SHORT-FORMAT:
+	cd ..
+	$(MAKE) -f makefile.nmake AUTHORS-SHORT-FORMAT
+	cd doc
+
 ethereal.1: ethereal.pod ../config.h
 	$(POD2MAN)                     \
 	--center="The Ethereal Network Analyzer" \
@@ -86,17 +91,17 @@
 	rm -f libethereal.dll wiretap-$(WTAP_VERSION).dll
 	cd doc
 
-capinfo.1: capinfo.pod ../config.h
+capinfos.1: capinfos.pod ../config.h
 	$(POD2MAN)                      \
 	--center="The Ethereal Network Analyzer" \
 	--release=$(VERSION)			 \
-	capinfo.pod > capinfo.1
+	capinfos.pod > capinfos.1
 
-capinfo.html: capinfo.pod ../config.h
+capinfos.html: capinfos.pod ../config.h
 	$(POD2HTML)                     \
-	--title="capinfo - The Ethereal Network Analyzer $(VERSION)" \
+	--title="capinfos - The Ethereal Network Analyzer $(VERSION)" \
 	--noindex                                 \
-	capinfo.pod > capinfo.html
+	capinfos.pod > capinfos.html
 
 
 editcap.1: editcap.pod ../config.h
@@ -151,7 +156,7 @@
 	rm -f ethereal.html ethereal.1 ethereal-tmp.pod
 	rm -f tethereal.html tethereal.1
 	rm -f ethereal-filter.html ethereal-filter.4 ethereal-filter.pod
-	rm -f capinfo.html capinfo.1
+	rm -f capinfos.html capinfos.1
 	rm -f editcap.html editcap.1
 	rm -f idl2eth.html idl2eth.1
 	rm -f mergecap.html mergecap.1
diff -urN ethereal-0.10.6/doc/README.developer ethereal-0.10.7/doc/README.developer
--- ethereal-0.10.6/doc/README.developer	2004-08-12 17:41:30.000000000 -0500
+++ ethereal-0.10.7/doc/README.developer	2004-10-20 17:34:16.000000000 -0500
@@ -1,4 +1,4 @@
-$Id: README.developer 11475 2004-07-23 01:37:35Z guy $
+$Id: README.developer 12300 2004-10-14 23:45:09Z guy $
 
 This file is a HOWTO for Ethereal developers. It describes how to start coding
 a Ethereal protocol dissector and the use some of the important functions and
@@ -55,17 +55,30 @@
 
 Don't use "long" to mean "signed 64-bit integer" and don't use "unsigned
 long" to mean "unsigned 64-bit integer"; "long"s are 32 bits long on
-other many platforms.  Also don't use "long long" or "unsigned long
-long", as not all platforms support them; use "gint64" or "guint64",
+other many platforms.  Don't use "long long" or "unsigned long long",
+either, as not all platforms support them; use "gint64" or "guint64",
 which will be defined as the appropriate types for 64-bit signed and
-unsigned integers.  Also, don't assume you can use "%lld", "%llu",
-"%llx", or "%llo" to print 64-bit integral data types - not all
-platforms support "%ll" for printing them.  Instead, use PRId64, PRIu64,
-PRIx64, and PRIo64, for example
+unsigned integers.
+
+When printing or displaying the values of 64-bit integral data types,
+don't assume use "%lld", "%llu", "%llx", or "%llo" - not all platforms
+support "%ll" for printing 64-bit integral data types.  Instead, use
+PRId64, PRIu64, PRIx64, and PRIo64, for example
 
     proto_tree_add_text(tree, tvb, offset, 8,
 			"Sequence Number: %" PRIu64, sequence_number);
 
+When specifying an integral constant that doesn't fit in 32 bits, don't
+use "LL" at the end of the constant - not all compilers use "LL" for
+that.  Instead, put the constant in a call to the "G_GINT64_CONSTANT()"
+macro, e.g.
+
+	G_GINT64_CONSTANT(11644473600U)
+
+rather than
+
+	11644473600ULL
+
 Don't use a label without a statement following it.  For example,
 something such as
 
@@ -201,6 +214,16 @@
 initialize the array at the point at which it's first declared, so that
 the size is known.
 
+Don't put declarations in the middle of a block; put them before all
+code.  Not all compilers support declarations in the middle of code,
+such as
+
+	int i;
+
+	i = foo();
+
+	int j;
+
 For #define names and enum member names, prefix the names with a tag so
 as to avoid collisions with other names - this might be more of an issue
 on Windows, as it appears to #define names such as DELETE and
@@ -218,6 +241,23 @@
 
 instead.
 
+Don't use "variadic macros", such as
+
+	#define DBG(format, args...)	fprintf(stderr, format, ## args)
+
+as not all C compilers support them.  Use macros that take a fixed
+number of arguments, such as
+
+	#define DBG0(format)		fprintf(stderr, format)
+	#define DBG1(format, arg1)	fprintf(stderr, format, arg1)
+	#define DBG2(format, arg1, arg2) fprintf(stderr, format, arg1, arg2)
+
+		...
+
+or something such as
+
+	#define DBG(args)		printf args
+
 snprintf() -> g_snprintf()
 snprintf() is not available on all platforms, so it's a good idea to use the 
 g_snprintf() function declared by <glib.h> instead.
@@ -238,6 +278,27 @@
 unaligned access for you, and will, on at least some platforms, cause
 the program to be terminated.
 
+Ethereal supports both platforms with GLib 1.2[.x]/GTK+ 1.2[.x] and GLib
+2.x/GTK+ 1.3[.x] and 2.x.  If at all possible, either use only
+mechanisms that are present in GLib 1.2[.x] and GTK+ 1.2[.x], use #if's
+to conditionally use older or newer mechanisms depending on the platform
+on which Ethereal is being built, or, if the code in GLib or GTK+ that
+implements that mechanism will build with GLib 1.2[.x]/GTK+ 1.2[.x],
+conditionally include that code as part of the Ethereal source and use
+the included version with GLib 1.2[.x] or GTK+ 1.2[.x].  In particular,
+if the GLib 2.x or GTK+ 2.x mechanism indicates that a routine is
+deprecated and shouldn't be used in new code, and that it was renamed in
+GLib 2.x or GTK+ 2.x and the new name should be used, disregard that and
+use the old name - it'll still work with GLib 2.x or GTK+ 2.x, but will
+also work with GLib 1.2[.x] and GTK+ 1.2[.x].
+
+When different code must be used on UN*X and Win32, use a #if or #ifdef
+that tests _WIN32, not WIN32.  Try to write code portably whenever
+possible, however; note that there are some routines in Ethereal with
+platform-dependent implementations and platform-independent APIs, such
+as the routines in epan/filesystem.c, allowing the code that calls it to
+be written portably without #ifdefs.
+
 1.1.2 Robustness.
 
 Ethereal is not guaranteed to read only network traces that contain
@@ -374,12 +435,12 @@
 is needed only if you are using a function from libpcre, e.g. the
 "pcre_compile()" function.
 
-The "$Id: README.developer 11475 2004-07-23 01:37:35Z guy $"
+The "$Id: README.developer 12300 2004-10-14 23:45:09Z guy $"
 in the comment will be updated by CVS when the file is
 checked in; it will allow the RCS "ident" command to report which
 version of the file is currently checked out.
 
-When creating a new file, it is fine to just write "$Id: README.developer 11475 2004-07-23 01:37:35Z guy $" as RCS will
+When creating a new file, it is fine to just write "$Id: README.developer 12300 2004-10-14 23:45:09Z guy $" as RCS will
 automatically fill in the identifier at the time the file will be added to the
 CVS repository (checked in).
 
@@ -388,7 +449,7 @@
  * Routines for PROTONAME dissection
  * Copyright 2000, YOUR_NAME <YOUR_EMAIL_ADDRESS>
  *
- * $Id: README.developer 11475 2004-07-23 01:37:35Z guy $
+ * $Id: README.developer 12300 2004-10-14 23:45:09Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -562,7 +623,7 @@
 		{ &hf_PROTOABBREV_FIELDABBREV,
 			{ "FIELDNAME",           "PROTOABBREV.FIELDABBREV",
 			FIELDTYPE, FIELDBASE, FIELDCONVERT, BITMASK,          
-			"FIELDDESCR" }
+			"FIELDDESCR", HFILL }
 		},
 	};
 
@@ -938,7 +999,7 @@
 be called at startup:
 
 	the file containing a dissector's "register" routine must be
-	added to "DISSECTOR_SRC" in "epan/Makefile.common";
+	added to "DISSECTOR_SRC" in "epan/dissectors/Makefile.common";
  
 	the "register" routine must have a name of the form
 	"proto_register_XXX";
@@ -1218,11 +1279,11 @@
 
 		{ &hf_field_a,
 		{ "Field A",	"proto.field_a", FT_UINT8, BASE_HEX, NULL,
-			0xf0, "Field A represents Apples" }},
+			0xf0, "Field A represents Apples", HFILL }},
 
 		{ &hf_field_b,
 		{ "Field B",	"proto.field_b", FT_UINT16, BASE_DEC, VALS(vs),
-			0x0, "Field B represents Bananas" }}
+			0x0, "Field B represents Bananas", HFILL }}
 	};
 
 	proto_eg = proto_register_protocol("Example Protocol",
@@ -1255,17 +1316,20 @@
 
 		{ &hf_field_8bit, /* 8-bit version of proto.field */
 		{ "Field (8 bit)", "proto.field", FT_UINT8, BASE_DEC, NULL,
-			0x00, "Field represents FOO" }},
+			0x00, "Field represents FOO", HFILL }},
 
 		{ &hf_field_32bit, /* 32-bit version of proto.field */
 		{ "Field (32 bit)", "proto.field", FT_UINT32, BASE_DEC, NULL,
-			0x00, "Field represents FOO" }}
+			0x00, "Field represents FOO", HFILL }}
 	};
 
 This way a filter expression can match a header field, irrespective of the
 representation of it in the specific protocol context. This is interesting
 for protocols with variable-width header fields.
 
+The HFILL macro at the end of the struct will set resonable default values
+for internally used fields.
+
 1.6.2 Adding Items and Values to the Protocol Tree.
 
 A protocol item is added to an existing protocol tree with one of a
@@ -1430,6 +1494,13 @@
 	    format, ...);
 
 	proto_item *
+	proto_tree_add_uint64(tree, id, tvb, start, length, value);
+
+	proto_item *
+	proto_tree_add_uint64_format(tree, id, tvb, start, length, value,
+	    format, ...);
+
+	proto_item *
 	proto_tree_add_int(tree, id, tvb, start, length, value);
 
 	proto_item *
@@ -1439,6 +1510,13 @@
 	proto_tree_add_int_format(tree, id, tvb, start, length, value,
 	    format, ...);
 
+	proto_item *
+	proto_tree_add_int64(tree, id, tvb, start, length, value);
+
+	proto_item *
+	proto_tree_add_int64_format(tree, id, tvb, start, length, value,
+	    format, ...);
+
 	proto_item*
 	proto_tree_add_text(tree, tvb, start, length, format, ...);
 
@@ -1592,7 +1670,9 @@
 proto_tree_add_float()
 proto_tree_add_double()
 proto_tree_add_uint()
+proto_tree_add_uint64()
 proto_tree_add_int()
+proto_tree_add_int64()
 ----------------------------
 These routines are used to add items to the protocol tree if either:
 
@@ -1645,11 +1725,17 @@
 
 For proto_tree_add_uint(), the 'value' argument is a 32-bit unsigned
 integer value, in host byte order.  (This routine cannot be used to add
-64-bit integers; they can only be added with proto_tree_add_item().)
+64-bit integers.)
+
+For proto_tree_add_uint64(), the 'value' argument is a 64-bit unsigned
+integer value, in host byte order.
 
 For proto_tree_add_int(), the 'value' argument is a 32-bit signed
 integer value, in host byte order.  (This routine cannot be used to add
-64-bit integers; they can only be added with proto_tree_add_item().)
+64-bit integers.)
+
+For proto_tree_add_int64(), the 'value' argument is a 64-bit signed
+integer value, in host byte order.
 
 proto_tree_add_bytes_hidden()
 proto_tree_add_time_hidden()
@@ -1679,7 +1765,9 @@
 proto_tree_add_float_format()
 proto_tree_add_double_format()
 proto_tree_add_uint_format()
+proto_tree_add_uint64_format()
 proto_tree_add_int_format()
+proto_tree_add_int64_format()
 ----------------------------
 These routines are used to add items to the protocol tree when the
 dissector routines wants complete control over how the field and value
@@ -1859,14 +1947,14 @@
 
 To arrange that your dissector will be built as part of Ethereal, you
 must add the name of the source file for your dissector to the
-'DISSECTOR_SRC' macro in the 'Makefile.common' file in the 'epan'
+'DISSECTOR_SRC' macro in the 'Makefile.common' file in the 'epan/dissectors'
 directory.  (Note that this is for modern versions of UNIX, so there
 is no 14-character limitation on file names, and for modern versions of
 Windows, so there is no 8.3-character limitation on file names.)
 
 If your dissector also has its own header file or files, you must add
 them to the 'DISSECTOR_INCLUDES' macro in the 'Makefile.common' file in
-the top-level directory, so that it's included when release source
+the 'epan/dissectors' directory, so that it's included when release source
 tarballs are built (otherwise, the source in the release tarballs won't
 compile).
 
@@ -2354,6 +2442,13 @@
 	void prefs_register_string_preference(module_t *module, const char *name,
 	    const char *title, const char *description, char **var)
 
+	/* Register a preference with a range of unsigned integers (e.g.,
+	 * "1-20,30-40").
+	 */
+	void prefs_register_range_preference(module_t *module, const char *name,
+	    const char *title, const char *description, range_t *var,
+	    guint32 max_value)
+
 Where: module - Returned by the prefs_register_protocol routine
 	 name     - This is appended to the name of the protocol, with a
 		    "." between them, to construct a name that identifies
@@ -2384,6 +2479,7 @@
 			 preferences dialog as a set of radio buttons,
 			 FALSE if it is to be displayed as an option
 			 menu
+	 max_value - The maximum allowed value for a range (0 is the minimum).
 
 An example from packet-beep.c -
 	
diff -urN ethereal-0.10.6/doc/README.plugins ethereal-0.10.7/doc/README.plugins
--- ethereal-0.10.6/doc/README.plugins	2004-08-12 17:41:30.000000000 -0500
+++ ethereal-0.10.7/doc/README.plugins	2004-10-20 17:34:17.000000000 -0500
@@ -1,4 +1,4 @@
-$Id: README.plugins 11400 2004-07-18 00:24:25Z guy $
+$Id: README.plugins 12176 2004-10-01 19:50:03Z guy $
 
 Plugins
 
@@ -148,14 +148,23 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-xxx.obj 
 
-xxx.dll xxx.exp xxx.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:xxx.dll $(OBJECTS) ..\plugin_api.obj \
+xxx.dll xxx.exp xxx.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:xxx.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) xxx.dll xxx.exp xxx.lib $(PDB_FILE)
+	rm -f $(OBJECTS) xxx.dll xxx.exp xxx.lib *.pdb
 
 distclean: clean
 
diff -urN ethereal-0.10.6/doc/README.tvbuff ethereal-0.10.7/doc/README.tvbuff
--- ethereal-0.10.6/doc/README.tvbuff	2004-08-12 17:41:30.000000000 -0500
+++ ethereal-0.10.7/doc/README.tvbuff	2004-10-20 17:34:17.000000000 -0500
@@ -1,4 +1,4 @@
-$Id: README.tvbuff 11400 2004-07-18 00:24:25Z guy $
+$Id: README.tvbuff 11796 2004-08-22 00:31:58Z guy $
 
 TVBUFFs and Exceptions
 
@@ -115,19 +115,21 @@
 
 guint8  tvb_get_guint8(tvbuff_t*, gint offset);
 
-Network-to-host-order access for shorts (guint16), longs (guint24), and
-24-bit ints:
+Network-to-host-order access for 16-bit integers (guint16), 32-bit
+integers (guint32), 24-bit integers, and 64-bit integers (guint64):
 
 guint16 tvb_get_ntohs(tvbuff_t*, gint offset);
 guint32 tvb_get_ntohl(tvbuff_t*, gint offset);
 guint32 tvb_get_ntoh24(tvbuff_t*, gint offset);
+guint64 tvb_get_ntoh64(tvbuff_t*, gint offset);
 
-Little-Endian-to-host-order access for shorts (guint16), longs (guint24), and
-24-bit ints:
+Little-Endian-to-host-order access for 16-bit integers (guint16), 32-bit
+integers (guint32), 24-bit integers, and 64-bit integers (guint64):
 
 guint16 tvb_get_letohs(tvbuff_t*, gint offset);
 guint32 tvb_get_letohl(tvbuff_t*, gint offset);
 guint32 tvb_get_letoh24(tvbuff_t*, gint offset);
+guint64 tvb_get_letoh64(tvbuff_t*, gint offset);
 
 
 Copying memory:
diff -urN ethereal-0.10.6/doc/capinfo.pod ethereal-0.10.7/doc/capinfo.pod
--- ethereal-0.10.6/doc/capinfo.pod	2004-08-12 17:41:30.000000000 -0500
+++ ethereal-0.10.7/doc/capinfo.pod	1969-12-31 18:00:00.000000000 -0600
@@ -1,206 +0,0 @@
-
-=head1 NAME
-
-capinfo - Prints information about binary capture files
-
-=head1 SYNOPSYS
-
-B<capinfo>
-S<[ B<-t> ]>
-S<[ B<-c> ]>
-S<[ B<-s> ]>
-S<[ B<-d> ]>
-S<[ B<-u> ]>
-S<[ B<-a> ]>
-S<[ B<-e> ]>
-S<[ B<-y> ]>
-S<[ B<-i> ]>
-S<[ B<-z> ]>
-S<[ B<-h> ]>
-I<capfile>
-
-=head1 DESCRIPTION
-
-B<Capinfo> is a program that reads a saved capture file and returns any
-or all of several statistics about that file.  B<Capinfo> is able to detect
-and read any capture supported by the B<Ethereal> package.
-
-B<Capinfo> can read the following file formats:
-
-=over 4
-
-=item *
-libpcap/WinPcap, tcpdump and various other tools using tcpdump's capture format
-
-=item *
-B<snoop> and B<atmsnoop>
-
-=item *
-Shomiti/Finisar B<Surveyor> captures
-
-=item *
-Novell B<LANalyzer> captures
-
-=item *
-Microsoft B<Network Monitor> captures
-
-=item *
-AIX's B<iptrace> captures
-
-=item *
-Cinco Networks B<NetXRay> captures
-
-=item *
-Network Associates Windows-based B<Sniffer> captures
-
-=item *
-Network General/Network Associates DOS-based B<Sniffer> (compressed or uncompressed) captures
-
-=item *
-AG Group/WildPackets B<EtherPeek>/B<TokenPeek>/B<AiroPeek>/B<EtherHelp>/B<PacketGrabber> captures
-
-=item *
-B<RADCOM>'s WAN/LAN analyzer captures
-
-=item *
-Network Instruments B<Observer> version 9 captures
-
-=item *
-B<Lucent/Ascend> router debug output
-
-=item *
-files from HP-UX's B<nettl>
-
-=item *
-B<Toshiba's> ISDN routers dump output
-
-=item *
-the output from B<i4btrace> from the ISDN4BSD project
-
-=item *
-traces from the B<EyeSDN> USB S0.
-
-=item *
-the output in B<IPLog> format from the Cisco Secure Intrusion Detection System
-
-=item *
-B<pppd logs> (pppdump format)
-
-=item *
-the output from VMS's B<TCPIPtrace>/B<TCPtrace>/B<UCX$TRACE> utilities
-
-=item *
-the text output from the B<DBS Etherwatch> VMS utility
-
-=item *
-Visual Networks' B<Visual UpTime> traffic capture
-
-=item *
-the output from B<CoSine> L2 debug
-
-=item *
-the output from Accellent's B<5Views> LAN agents
-
-=item *
-Endace Measurement Systems' ERF format captures 
-
-=item *
-Linux Bluez Bluetooth stack B<hcidump -w> traces
-
-=back
-
-There is no need to tell B<Capinfo> what type of
-file you are reading; it will determine the file type by itself. 
-B<Capinfo> is also capable of reading any of these file formats if they
-are compressed using gzip.  B<Capinfo> recognizes this directly from the
-file; the '.gz' extension is not required for this purpose.
-
-The user specifies which statistics to report by specifying flags 
-corresponding to the statistic.  If no flags are specified, B<Capinfo> will
-report all statistics available.
-
-=head1 OPTIONS
-
-=over 4
-
-=item -t
-
-Displays the capture type of the capture file.
-
-=item -c
-
-Counts the number of packets in the capture file.
-
-=item -s
-
-Displays the size of the file, in bytes.  This reports
-the size of the capture file itself.
-
-=item -d
-
-Displays the total length of all packets in the file, in
-bytes.  This counts the size of the packets as they appeared
-in their original form, not as they appear in this file.
-For example, if a packet was originally 1514 bytes and only
-256 of those bytes were saved to the capture file (if packets
-were captured with a snaplen or other slicing option),
-B<Capinfo> will consider the packet to have been 1514 bytes.
-
-=item -u
-
-Displays the capture duration, in seconds.  This is the
-difference in time between the earliest packet seen and
-latest packet seen.
-
-=item -a
-
-Displays the start time of the capture.  B<Capinfo> considers
-the earliest timestamp seen to be the start time, so the
-first packet in the capture is not necessarily the earliest -
-if packets exist "out-of-order", time-wise, in the capture,
-B<Capinfo> detects this.
-
-=item -e
-
-Displays the end time of the capture.  B<Capinfo> considers
-the latest timestamp seen to be the end time, so the
-last packet in the capture is not necessarily the latest -
-if packets exist "out-of-order", time-wise, in the capture,
-B<Capinfo> detects this.
-
-=item -y
-
-Displays the average data rate, in bytes
-
-=item -i
-
-Displays the average data rate, in bits
-
-=item -z
-
-displays the average packet size, in bytes
-
-=item -h
-
-Prints the help listing and exits.
-
-=back
-
-=head1 SEE ALSO
-
-I<tcpdump(8)>, I<pcap(3)>, I<ethereal(1)>, I<mergecap(1)>, I<editcap(1)>, I<tethereal(1)>
-
-=head1 NOTES
-
-B<Capinfo> is part of the B<Ethereal> distribution.  The latest version
-of B<Ethereal> can be found at B<http://www.ethereal.com>.
-
-=head1 AUTHORS
-
-  Original Author
-  -------- ------
-  Ian Schorr           <ian[AT]ianschorr.com>
-
-
-  Contributors
-  ------------
diff -urN ethereal-0.10.6/doc/capinfos.pod ethereal-0.10.7/doc/capinfos.pod
--- ethereal-0.10.6/doc/capinfos.pod	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/doc/capinfos.pod	2004-10-20 17:34:16.000000000 -0500
@@ -0,0 +1,206 @@
+
+=head1 NAME
+
+capinfos - Prints information about binary capture files
+
+=head1 SYNOPSYS
+
+B<capinfos>
+S<[ B<-t> ]>
+S<[ B<-c> ]>
+S<[ B<-s> ]>
+S<[ B<-d> ]>
+S<[ B<-u> ]>
+S<[ B<-a> ]>
+S<[ B<-e> ]>
+S<[ B<-y> ]>
+S<[ B<-i> ]>
+S<[ B<-z> ]>
+S<[ B<-h> ]>
+I<capfile>
+
+=head1 DESCRIPTION
+
+B<Capinfos> is a program that reads a saved capture file and returns any
+or all of several statistics about that file.  B<Capinfos> is able to detect
+and read any capture supported by the B<Ethereal> package.
+
+B<Capinfos> can read the following file formats:
+
+=over 4
+
+=item *
+libpcap/WinPcap, tcpdump and various other tools using tcpdump's capture format
+
+=item *
+B<snoop> and B<atmsnoop>
+
+=item *
+Shomiti/Finisar B<Surveyor> captures
+
+=item *
+Novell B<LANalyzer> captures
+
+=item *
+Microsoft B<Network Monitor> captures
+
+=item *
+AIX's B<iptrace> captures
+
+=item *
+Cinco Networks B<NetXRay> captures
+
+=item *
+Network Associates Windows-based B<Sniffer> captures
+
+=item *
+Network General/Network Associates DOS-based B<Sniffer> (compressed or uncompressed) captures
+
+=item *
+AG Group/WildPackets B<EtherPeek>/B<TokenPeek>/B<AiroPeek>/B<EtherHelp>/B<PacketGrabber> captures
+
+=item *
+B<RADCOM>'s WAN/LAN analyzer captures
+
+=item *
+Network Instruments B<Observer> version 9 captures
+
+=item *
+B<Lucent/Ascend> router debug output
+
+=item *
+files from HP-UX's B<nettl>
+
+=item *
+B<Toshiba's> ISDN routers dump output
+
+=item *
+the output from B<i4btrace> from the ISDN4BSD project
+
+=item *
+traces from the B<EyeSDN> USB S0.
+
+=item *
+the output in B<IPLog> format from the Cisco Secure Intrusion Detection System
+
+=item *
+B<pppd logs> (pppdump format)
+
+=item *
+the output from VMS's B<TCPIPtrace>/B<TCPtrace>/B<UCX$TRACE> utilities
+
+=item *
+the text output from the B<DBS Etherwatch> VMS utility
+
+=item *
+Visual Networks' B<Visual UpTime> traffic capture
+
+=item *
+the output from B<CoSine> L2 debug
+
+=item *
+the output from Accellent's B<5Views> LAN agents
+
+=item *
+Endace Measurement Systems' ERF format captures 
+
+=item *
+Linux Bluez Bluetooth stack B<hcidump -w> traces
+
+=back
+
+There is no need to tell B<Capinfos> what type of
+file you are reading; it will determine the file type by itself. 
+B<Capinfos> is also capable of reading any of these file formats if they
+are compressed using gzip.  B<Capinfos> recognizes this directly from the
+file; the '.gz' extension is not required for this purpose.
+
+The user specifies which statistics to report by specifying flags 
+corresponding to the statistic.  If no flags are specified, B<Capinfos> will
+report all statistics available.
+
+=head1 OPTIONS
+
+=over 4
+
+=item -t
+
+Displays the capture type of the capture file.
+
+=item -c
+
+Counts the number of packets in the capture file.
+
+=item -s
+
+Displays the size of the file, in bytes.  This reports
+the size of the capture file itself.
+
+=item -d
+
+Displays the total length of all packets in the file, in
+bytes.  This counts the size of the packets as they appeared
+in their original form, not as they appear in this file.
+For example, if a packet was originally 1514 bytes and only
+256 of those bytes were saved to the capture file (if packets
+were captured with a snaplen or other slicing option),
+B<Capinfos> will consider the packet to have been 1514 bytes.
+
+=item -u
+
+Displays the capture duration, in seconds.  This is the
+difference in time between the earliest packet seen and
+latest packet seen.
+
+=item -a
+
+Displays the start time of the capture.  B<Capinfos> considers
+the earliest timestamp seen to be the start time, so the
+first packet in the capture is not necessarily the earliest -
+if packets exist "out-of-order", time-wise, in the capture,
+B<Capinfos> detects this.
+
+=item -e
+
+Displays the end time of the capture.  B<Capinfos> considers
+the latest timestamp seen to be the end time, so the
+last packet in the capture is not necessarily the latest -
+if packets exist "out-of-order", time-wise, in the capture,
+B<Capinfos> detects this.
+
+=item -y
+
+Displays the average data rate, in bytes
+
+=item -i
+
+Displays the average data rate, in bits
+
+=item -z
+
+displays the average packet size, in bytes
+
+=item -h
+
+Prints the help listing and exits.
+
+=back
+
+=head1 SEE ALSO
+
+I<tcpdump(8)>, I<pcap(3)>, I<ethereal(1)>, I<mergecap(1)>, I<editcap(1)>, I<tethereal(1)>
+
+=head1 NOTES
+
+B<Capinfos> is part of the B<Ethereal> distribution.  The latest version
+of B<Ethereal> can be found at B<http://www.ethereal.com>.
+
+=head1 AUTHORS
+
+  Original Author
+  -------- ------
+  Ian Schorr           <ian[AT]ianschorr.com>
+
+
+  Contributors
+  ------------
diff -urN ethereal-0.10.6/doc/ethereal.pod ethereal-0.10.7/doc/ethereal.pod
--- ethereal-0.10.6/doc/ethereal.pod	2004-08-12 17:41:30.000000000 -0500
+++ ethereal-0.10.7/doc/ethereal.pod	2004-10-20 17:34:17.000000000 -0500
@@ -751,10 +751,17 @@
 consists of a name, a filter expression and a coloration. A packet is
 colored according to the first filter that it matches, Color filter
 expressions use exactly the same syntax as display filter expressions.
- 
+
 When Ethereal starts, the color filters are loaded from:
+
+=over
+
 1. The user's personal color filters file or, if that does not exist,
+
 2. The global color filters file.
+
+=back
+
 If neither of these exist then the packets will not be colored.
 
 =back
@@ -1056,14 +1063,15 @@
 In each tick interval the amount of overlap is measured.
 See the graph below containing three commands:
 Below the graph are the LOAD values for each interval that would be calculated.
-|     |     |     |     |     |     |     |     |
-|     |     |     |     |     |     |     |     |
-|     |  o=====*  |     |     |     |     |     |
-|     |     |     |     |     |     |     |     |
-|  o========*     | o============*  |     |     |
-|     |     |     |     |     |     |     |     |
---------------------------------------------------> Time
- 500   1500   500  750   1000   500    0     0
+
+  |     |     |     |     |     |     |     |     |
+  |     |     |     |     |     |     |     |     |
+  |     |  o=====*  |     |     |     |     |     |
+  |     |     |     |     |     |     |     |     |
+  |  o========*     | o============*  |     |     |
+  |     |     |     |     |     |     |     |     |
+  --------------------------------------------------> Time
+   500   1500   500  750   1000   500    0     0
 
 =item Statistics:Conversation List
 
diff -urN ethereal-0.10.6/doc/tethereal.pod ethereal-0.10.7/doc/tethereal.pod
--- ethereal-0.10.6/doc/tethereal.pod	2004-08-12 17:41:30.000000000 -0500
+++ ethereal-0.10.7/doc/tethereal.pod	2004-10-20 17:34:17.000000000 -0500
@@ -410,9 +410,10 @@
 have to explicitly set it to use it) will cause the current count to be
 displayed.
 
-When reading a capture file, don't print packet information; this is
-useful if you're using a B<-z> flag to calculate statistics and don't
-want the packet information printed, just the statistics.
+When reading a capture file, or when capturing and not saving to a file,
+don't print packet information; this is useful if you're using a B<-z>
+flag to calculate statistics and don't want the packet information
+printed, just the statistics.
 
 =item -r
 
diff -urN ethereal-0.10.6/epan/Makefile.am ethereal-0.10.7/epan/Makefile.am
--- ethereal-0.10.6/epan/Makefile.am	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/Makefile.am	2004-10-20 17:35:04.000000000 -0500
@@ -2,7 +2,7 @@
 # Automake file for the EPAN library
 # (Ethereal Protocol ANalyzer Library)
 #
-# $Id: Makefile.am 11643 2004-08-10 14:09:30Z gerald $
+# $Id: Makefile.am 11906 2004-09-05 10:38:04Z guy $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -42,7 +42,9 @@
 	$(DISSECTOR_SUPPORT_SRC)
 
 EXTRA_libethereal_la_SOURCES =	\
-        inet_aton.c		\
+	g_ascii_strtoull.c	\
+	g_ascii_strtoull.h	\
+	inet_aton.c		\
 	inet_pton.c		\
 	inet_ntop.c		\
 	inet_aton.h		\
@@ -67,8 +69,8 @@
 #
 # Add the object files for missing routines, if any.
 #
-libethereal_la_LIBADD = @INET_ATON_O@ @INET_PTON_O@ @INET_NTOP_O@ dfilter/libdfilter.la ftypes/libftypes.la dissectors/libdissectors.la
-libethereal_la_DEPENDENCIES = @INET_ATON_O@ @INET_PTON_O@ @INET_NTOP_O@ dfilter/libdfilter.la ftypes/libftypes.la dissectors/libdissectors.la
+libethereal_la_LIBADD = @G_ASCII_STRTOULL_LO@ @INET_ATON_LO@ @INET_PTON_LO@ @INET_NTOP_LO@ dfilter/libdfilter.la ftypes/libftypes.la dissectors/libdissectors.la
+libethereal_la_DEPENDENCIES = @G_ASCII_STRTOULL_LO@ @INET_ATON_LO@ @INET_PTON_LO@ @INET_NTOP_LO@ dfilter/libdfilter.la ftypes/libftypes.la dissectors/libdissectors.la
 
 tvbtest: tvbtest.o tvbuff.o except.o strutil.o
 	$(LINK) -o tvbtest tvbtest.o tvbuff.o except.o strutil.o `glib-config --libs`
diff -urN ethereal-0.10.6/epan/Makefile.common ethereal-0.10.7/epan/Makefile.common
--- ethereal-0.10.6/epan/Makefile.common	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/Makefile.common	2004-10-20 17:35:04.000000000 -0500
@@ -3,7 +3,7 @@
 #     a) common to both files and
 #     b) portable between both files
 #
-# $Id: Makefile.common 11643 2004-08-10 14:09:30Z gerald $
+# $Id: Makefile.common 12236 2004-10-08 15:54:06Z etxrab $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -26,38 +26,71 @@
 LIBETHEREAL_SRC = 		\
 	addr_and_mask.c		\
 	addr_resolv.c		\
+	adler32.c		\
+	afn.c			\
 	atalk-utils.c		\
+	base64.c		\
 	bitswap.c		\
+	charsets.c		\
 	circuit.c		\
+	column.c		\
 	column-utils.c		\
 	conversation.c		\
+	crc16.c			\
+	crc32.c			\
+	crypt-des.c		\
+	crypt-md4.c		\
+	crypt-md5.c		\
+	crypt-rc4.c		\
 	epan.c			\
 	except.c		\
 	filesystem.c		\
 	frame_data.c		\
-	int-64bit.c		\
+	in_cksum.c		\
+	ipproto.c		\
 	ipv4.c			\
 	osi-utils.c		\
 	packet.c		\
 	plugins.c		\
+	prefs.c			\
 	proto.c			\
+	range.c			\
+	req_resp_hdrs.c		\
+	sha1.c			\
+	sigcomp_state_hdlr.c	\
+	sigcomp-udvm.c	\
+	sminmpec.c		\
 	sna-utils.c		\
 	strutil.c		\
+	t35.c			\
+	tap.c			\
 	timestamp.c		\
 	to_str.c		\
 	tvbuff.c		\
-	value_string.c
+	value_string.c		\
+	xdlc.c
 
 LIBETHEREAL_INCLUDES = 		\
 	addr_and_mask.h		\
 	addr_resolv.h		\
 	address.h		\
+	adler32.h		\
+	afn.h			\
 	atalk-utils.h		\
+	base64.h		\
 	bitswap.h		\
+	charsets.h		\
 	circuit.h		\
+	column.h		\
 	column_info.h		\
-	conversation.h		\
 	column-utils.h		\
+	conversation.h		\
+	crc16.h			\
+	crc32.h			\
+	crypt-des.h		\
+	crypt-md4.h		\
+	crypt-md5.h		\
+	crypt-rc4.h		\
 	epan.h			\
 	epan_dissect.h		\
 	except.h		\
@@ -65,7 +98,8 @@
 	filesystem.h		\
 	frame_data.h		\
 	gdebug.h		\
-	int-64bit.h		\
+	in_cksum.h		\
+	ipproto.h		\
 	ipv4.h			\
 	ipv6-utils.h		\
 	nstime.h		\
@@ -74,39 +108,33 @@
 	packet_info.h		\
 	pint.h			\
 	plugins.h		\
+	prefs.h			\
+	prefs-int.h		\
 	proto.h			\
+	range.h			\
 	report_err.h		\
+	req_resp_hdrs.h		\
+	sha1.h			\
+	sigcomp_state_hdlr.h	\
+	sigcomp-udvm.h	\
 	slab.h			\
+	sminmpec.h		\
 	sna-utils.h		\
 	strutil.h		\
+	t35.h			\
+	tap.h			\
 	timestamp.h    		\
 	to_str.h		\
 	tvbuff.h		\
-	value_string.h
+	value_string.h		\
+	xdlc.h
 
 # dissector helpers (needed from the dissectors, but not a dissector itself)
 DISSECTOR_SUPPORT_SRC =	\
-	../adler32.c	\
-	../afn.c	\
 	../asn1.c	\
-	../column.c	\
-	../crc16.c	\
-	../crc32.c	\
-	../crypt-des.c	\
-	../crypt-md4.c	\
-	../crypt-md5.c	\
-	../crypt-rc4.c	\
 	../follow.c	\
 	../h225-persistentdata.c	\
-	../in_cksum.c	\
-	../ipproto.c	\
-	../prefs.c	\
 	../ptvcursor.c	\
 	../reassemble.c	\
-	../req_resp_hdrs.c	\
-	../t35.c	\
-	../tap.c	\
-	../util.c	\
-	../xdlc.c	\
 	../xmlstub.c
 
diff -urN ethereal-0.10.6/epan/Makefile.in ethereal-0.10.7/epan/Makefile.in
--- ethereal-0.10.6/epan/Makefile.in	2004-08-12 21:04:19.000000000 -0500
+++ ethereal-0.10.7/epan/Makefile.in	2004-10-20 21:50:16.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -18,7 +18,7 @@
 # Automake file for the EPAN library
 # (Ethereal Protocol ANalyzer Library)
 #
-# $Id: Makefile.am 11643 2004-08-10 14:09:30Z gerald $
+# $Id: Makefile.am 11906 2004-09-05 10:38:04Z guy $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -43,7 +43,7 @@
 #     a) common to both files and
 #     b) portable between both files
 #
-# $Id: Makefile.common 11643 2004-08-10 14:09:30Z gerald $
+# $Id: Makefile.common 12236 2004-10-08 15:54:06Z etxrab $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -123,6 +123,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -134,10 +137,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -218,8 +224,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -278,39 +284,72 @@
 LIBETHEREAL_SRC = \
 	addr_and_mask.c		\
 	addr_resolv.c		\
+	adler32.c		\
+	afn.c			\
 	atalk-utils.c		\
+	base64.c		\
 	bitswap.c		\
+	charsets.c		\
 	circuit.c		\
+	column.c		\
 	column-utils.c		\
 	conversation.c		\
+	crc16.c			\
+	crc32.c			\
+	crypt-des.c		\
+	crypt-md4.c		\
+	crypt-md5.c		\
+	crypt-rc4.c		\
 	epan.c			\
 	except.c		\
 	filesystem.c		\
 	frame_data.c		\
-	int-64bit.c		\
+	in_cksum.c		\
+	ipproto.c		\
 	ipv4.c			\
 	osi-utils.c		\
 	packet.c		\
 	plugins.c		\
+	prefs.c			\
 	proto.c			\
+	range.c			\
+	req_resp_hdrs.c		\
+	sha1.c			\
+	sigcomp_state_hdlr.c	\
+	sigcomp-udvm.c	\
+	sminmpec.c		\
 	sna-utils.c		\
 	strutil.c		\
+	t35.c			\
+	tap.c			\
 	timestamp.c		\
 	to_str.c		\
 	tvbuff.c		\
-	value_string.c
+	value_string.c		\
+	xdlc.c
 
 
 LIBETHEREAL_INCLUDES = \
 	addr_and_mask.h		\
 	addr_resolv.h		\
 	address.h		\
+	adler32.h		\
+	afn.h			\
 	atalk-utils.h		\
+	base64.h		\
 	bitswap.h		\
+	charsets.h		\
 	circuit.h		\
+	column.h		\
 	column_info.h		\
-	conversation.h		\
 	column-utils.h		\
+	conversation.h		\
+	crc16.h			\
+	crc32.h			\
+	crypt-des.h		\
+	crypt-md4.h		\
+	crypt-md5.h		\
+	crypt-rc4.h		\
 	epan.h			\
 	epan_dissect.h		\
 	except.h		\
@@ -318,7 +357,8 @@
 	filesystem.h		\
 	frame_data.h		\
 	gdebug.h		\
-	int-64bit.h		\
+	in_cksum.h		\
+	ipproto.h		\
 	ipv4.h			\
 	ipv6-utils.h		\
 	nstime.h		\
@@ -327,41 +367,35 @@
 	packet_info.h		\
 	pint.h			\
 	plugins.h		\
+	prefs.h			\
+	prefs-int.h		\
 	proto.h			\
+	range.h			\
 	report_err.h		\
+	req_resp_hdrs.h		\
+	sha1.h			\
+	sigcomp_state_hdlr.h	\
+	sigcomp-udvm.h	\
 	slab.h			\
+	sminmpec.h		\
 	sna-utils.h		\
 	strutil.h		\
+	t35.h			\
+	tap.h			\
 	timestamp.h    		\
 	to_str.h		\
 	tvbuff.h		\
-	value_string.h
+	value_string.h		\
+	xdlc.h
 
 
 # dissector helpers (needed from the dissectors, but not a dissector itself)
 DISSECTOR_SUPPORT_SRC = \
-	../adler32.c	\
-	../afn.c	\
 	../asn1.c	\
-	../column.c	\
-	../crc16.c	\
-	../crc32.c	\
-	../crypt-des.c	\
-	../crypt-md4.c	\
-	../crypt-md5.c	\
-	../crypt-rc4.c	\
 	../follow.c	\
 	../h225-persistentdata.c	\
-	../in_cksum.c	\
-	../ipproto.c	\
-	../prefs.c	\
 	../ptvcursor.c	\
 	../reassemble.c	\
-	../req_resp_hdrs.c	\
-	../t35.c	\
-	../tap.c	\
-	../util.c	\
-	../xdlc.c	\
 	../xmlstub.c
 
 
@@ -374,7 +408,9 @@
 
 
 EXTRA_libethereal_la_SOURCES = \
-        inet_aton.c		\
+	g_ascii_strtoull.c	\
+	g_ascii_strtoull.h	\
+	inet_aton.c		\
 	inet_pton.c		\
 	inet_ntop.c		\
 	inet_aton.h		\
@@ -403,8 +439,8 @@
 #
 # Add the object files for missing routines, if any.
 #
-libethereal_la_LIBADD = @INET_ATON_O@ @INET_PTON_O@ @INET_NTOP_O@ dfilter/libdfilter.la ftypes/libftypes.la dissectors/libdissectors.la
-libethereal_la_DEPENDENCIES = @INET_ATON_O@ @INET_PTON_O@ @INET_NTOP_O@ dfilter/libdfilter.la ftypes/libftypes.la dissectors/libdissectors.la
+libethereal_la_LIBADD = @G_ASCII_STRTOULL_LO@ @INET_ATON_LO@ @INET_PTON_LO@ @INET_NTOP_LO@ dfilter/libdfilter.la ftypes/libftypes.la dissectors/libdissectors.la
+libethereal_la_DEPENDENCIES = @G_ASCII_STRTOULL_LO@ @INET_ATON_LO@ @INET_PTON_LO@ @INET_NTOP_LO@ dfilter/libdfilter.la ftypes/libftypes.la dissectors/libdissectors.la
 
 @ENABLE_STATIC_FALSE@@HAVE_PLUGINS_TRUE@plugin_src = 
 
@@ -459,17 +495,18 @@
 CONFIG_CLEAN_FILES = doxygen.cfg
 LTLIBRARIES = $(lib_LTLIBRARIES)
 
-am__objects_1 = addr_and_mask.lo addr_resolv.lo atalk-utils.lo \
-	bitswap.lo circuit.lo column-utils.lo conversation.lo epan.lo \
-	except.lo filesystem.lo frame_data.lo int-64bit.lo ipv4.lo \
-	osi-utils.lo packet.lo plugins.lo proto.lo sna-utils.lo \
-	strutil.lo timestamp.lo to_str.lo tvbuff.lo value_string.lo
+am__objects_1 = addr_and_mask.lo addr_resolv.lo adler32.lo afn.lo \
+	atalk-utils.lo base64.lo bitswap.lo charsets.lo circuit.lo \
+	column.lo column-utils.lo conversation.lo crc16.lo crc32.lo \
+	crypt-des.lo crypt-md4.lo crypt-md5.lo crypt-rc4.lo epan.lo \
+	except.lo filesystem.lo frame_data.lo in_cksum.lo ipproto.lo \
+	ipv4.lo osi-utils.lo packet.lo plugins.lo prefs.lo proto.lo \
+	range.lo req_resp_hdrs.lo sha1.lo sigcomp_state_hdlr.lo \
+	sigcomp-udvm.lo sminmpec.lo sna-utils.lo strutil.lo t35.lo \
+	tap.lo timestamp.lo to_str.lo tvbuff.lo value_string.lo xdlc.lo
 am__objects_2 =
-am__objects_3 = adler32.lo afn.lo asn1.lo column.lo crc16.lo crc32.lo \
-	crypt-des.lo crypt-md4.lo crypt-md5.lo crypt-rc4.lo follow.lo \
-	h225-persistentdata.lo in_cksum.lo ipproto.lo prefs.lo \
-	ptvcursor.lo reassemble.lo req_resp_hdrs.lo t35.lo tap.lo \
-	util.lo xdlc.lo xmlstub.lo
+am__objects_3 = asn1.lo follow.lo h225-persistentdata.lo ptvcursor.lo \
+	reassemble.lo xmlstub.lo
 am_libethereal_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
 	$(am__objects_3)
 libethereal_la_OBJECTS = $(am_libethereal_la_OBJECTS)
@@ -480,7 +517,8 @@
 @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/addr_and_mask.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/addr_resolv.Plo ./$(DEPDIR)/adler32.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/afn.Plo ./$(DEPDIR)/asn1.Plo \
-@AMDEP_TRUE@	./$(DEPDIR)/atalk-utils.Plo ./$(DEPDIR)/bitswap.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/atalk-utils.Plo ./$(DEPDIR)/base64.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/bitswap.Plo ./$(DEPDIR)/charsets.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/circuit.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/column-utils.Plo ./$(DEPDIR)/column.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/conversation.Plo ./$(DEPDIR)/crc16.Plo \
@@ -489,20 +527,22 @@
 @AMDEP_TRUE@	./$(DEPDIR)/crypt-rc4.Plo ./$(DEPDIR)/epan.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/except.Plo ./$(DEPDIR)/filesystem.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/follow.Plo ./$(DEPDIR)/frame_data.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/g_ascii_strtoull.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/h225-persistentdata.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/in_cksum.Plo ./$(DEPDIR)/inet_aton.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/inet_ntop.Plo ./$(DEPDIR)/inet_pton.Plo \
-@AMDEP_TRUE@	./$(DEPDIR)/int-64bit.Plo ./$(DEPDIR)/ipproto.Plo \
-@AMDEP_TRUE@	./$(DEPDIR)/ipv4.Plo ./$(DEPDIR)/osi-utils.Plo \
-@AMDEP_TRUE@	./$(DEPDIR)/packet.Plo ./$(DEPDIR)/plugins.Plo \
-@AMDEP_TRUE@	./$(DEPDIR)/prefs.Plo ./$(DEPDIR)/proto.Plo \
-@AMDEP_TRUE@	./$(DEPDIR)/ptvcursor.Plo \
-@AMDEP_TRUE@	./$(DEPDIR)/reassemble.Plo \
-@AMDEP_TRUE@	./$(DEPDIR)/req_resp_hdrs.Plo \
-@AMDEP_TRUE@	./$(DEPDIR)/sna-utils.Plo ./$(DEPDIR)/strutil.Plo \
-@AMDEP_TRUE@	./$(DEPDIR)/t35.Plo ./$(DEPDIR)/tap.Plo \
-@AMDEP_TRUE@	./$(DEPDIR)/timestamp.Plo ./$(DEPDIR)/to_str.Plo \
-@AMDEP_TRUE@	./$(DEPDIR)/tvbuff.Plo ./$(DEPDIR)/util.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/ipproto.Plo ./$(DEPDIR)/ipv4.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/osi-utils.Plo ./$(DEPDIR)/packet.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/plugins.Plo ./$(DEPDIR)/prefs.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/proto.Plo ./$(DEPDIR)/ptvcursor.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/range.Plo ./$(DEPDIR)/reassemble.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/req_resp_hdrs.Plo ./$(DEPDIR)/sha1.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/sigcomp-udvm.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/sigcomp_state_hdlr.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/sminmpec.Plo ./$(DEPDIR)/sna-utils.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/strutil.Plo ./$(DEPDIR)/t35.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/tap.Plo ./$(DEPDIR)/timestamp.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/to_str.Plo ./$(DEPDIR)/tvbuff.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/value_string.Plo ./$(DEPDIR)/xdlc.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/xmlstub.Plo
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
@@ -578,7 +618,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/afn.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atalk-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bitswap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/charsets.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/circuit.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/column-utils.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/column.Plo@am__quote@
@@ -594,12 +636,12 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filesystem.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/follow.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frame_data.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_ascii_strtoull.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h225-persistentdata.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/in_cksum.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inet_aton.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inet_ntop.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inet_pton.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int-64bit.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipproto.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipv4.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/osi-utils.Plo@am__quote@
@@ -608,8 +650,13 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prefs.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proto.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ptvcursor.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/range.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reassemble.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/req_resp_hdrs.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigcomp-udvm.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigcomp_state_hdlr.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sminmpec.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sna-utils.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strutil.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t35.Plo@am__quote@
@@ -617,7 +664,6 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timestamp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/to_str.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tvbuff.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/value_string.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdlc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlstub.Plo@am__quote@
@@ -655,72 +701,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
 
-adler32.o: ../adler32.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT adler32.o -MD -MP -MF "$(DEPDIR)/adler32.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o adler32.o `test -f '../adler32.c' || echo '$(srcdir)/'`../adler32.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/adler32.Tpo" "$(DEPDIR)/adler32.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/adler32.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../adler32.c' object='adler32.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/adler32.Po' tmpdepfile='$(DEPDIR)/adler32.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adler32.o `test -f '../adler32.c' || echo '$(srcdir)/'`../adler32.c
-
-adler32.obj: ../adler32.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT adler32.obj -MD -MP -MF "$(DEPDIR)/adler32.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o adler32.obj `if test -f '../adler32.c'; then $(CYGPATH_W) '../adler32.c'; else $(CYGPATH_W) '$(srcdir)/../adler32.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/adler32.Tpo" "$(DEPDIR)/adler32.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/adler32.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../adler32.c' object='adler32.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/adler32.Po' tmpdepfile='$(DEPDIR)/adler32.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adler32.obj `if test -f '../adler32.c'; then $(CYGPATH_W) '../adler32.c'; else $(CYGPATH_W) '$(srcdir)/../adler32.c'; fi`
-
-adler32.lo: ../adler32.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT adler32.lo -MD -MP -MF "$(DEPDIR)/adler32.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o adler32.lo `test -f '../adler32.c' || echo '$(srcdir)/'`../adler32.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/adler32.Tpo" "$(DEPDIR)/adler32.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/adler32.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../adler32.c' object='adler32.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/adler32.Plo' tmpdepfile='$(DEPDIR)/adler32.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o adler32.lo `test -f '../adler32.c' || echo '$(srcdir)/'`../adler32.c
-
-afn.o: ../afn.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT afn.o -MD -MP -MF "$(DEPDIR)/afn.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o afn.o `test -f '../afn.c' || echo '$(srcdir)/'`../afn.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/afn.Tpo" "$(DEPDIR)/afn.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/afn.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../afn.c' object='afn.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/afn.Po' tmpdepfile='$(DEPDIR)/afn.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o afn.o `test -f '../afn.c' || echo '$(srcdir)/'`../afn.c
-
-afn.obj: ../afn.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT afn.obj -MD -MP -MF "$(DEPDIR)/afn.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o afn.obj `if test -f '../afn.c'; then $(CYGPATH_W) '../afn.c'; else $(CYGPATH_W) '$(srcdir)/../afn.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/afn.Tpo" "$(DEPDIR)/afn.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/afn.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../afn.c' object='afn.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/afn.Po' tmpdepfile='$(DEPDIR)/afn.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o afn.obj `if test -f '../afn.c'; then $(CYGPATH_W) '../afn.c'; else $(CYGPATH_W) '$(srcdir)/../afn.c'; fi`
-
-afn.lo: ../afn.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT afn.lo -MD -MP -MF "$(DEPDIR)/afn.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o afn.lo `test -f '../afn.c' || echo '$(srcdir)/'`../afn.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/afn.Tpo" "$(DEPDIR)/afn.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/afn.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../afn.c' object='afn.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/afn.Plo' tmpdepfile='$(DEPDIR)/afn.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o afn.lo `test -f '../afn.c' || echo '$(srcdir)/'`../afn.c
-
 asn1.o: ../asn1.c
 @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT asn1.o -MD -MP -MF "$(DEPDIR)/asn1.Tpo" \
 @am__fastdepCC_TRUE@	  -c -o asn1.o `test -f '../asn1.c' || echo '$(srcdir)/'`../asn1.c; \
@@ -754,237 +734,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o asn1.lo `test -f '../asn1.c' || echo '$(srcdir)/'`../asn1.c
 
-column.o: ../column.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT column.o -MD -MP -MF "$(DEPDIR)/column.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o column.o `test -f '../column.c' || echo '$(srcdir)/'`../column.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/column.Tpo" "$(DEPDIR)/column.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/column.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../column.c' object='column.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/column.Po' tmpdepfile='$(DEPDIR)/column.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o column.o `test -f '../column.c' || echo '$(srcdir)/'`../column.c
-
-column.obj: ../column.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT column.obj -MD -MP -MF "$(DEPDIR)/column.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o column.obj `if test -f '../column.c'; then $(CYGPATH_W) '../column.c'; else $(CYGPATH_W) '$(srcdir)/../column.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/column.Tpo" "$(DEPDIR)/column.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/column.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../column.c' object='column.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/column.Po' tmpdepfile='$(DEPDIR)/column.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o column.obj `if test -f '../column.c'; then $(CYGPATH_W) '../column.c'; else $(CYGPATH_W) '$(srcdir)/../column.c'; fi`
-
-column.lo: ../column.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT column.lo -MD -MP -MF "$(DEPDIR)/column.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o column.lo `test -f '../column.c' || echo '$(srcdir)/'`../column.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/column.Tpo" "$(DEPDIR)/column.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/column.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../column.c' object='column.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/column.Plo' tmpdepfile='$(DEPDIR)/column.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o column.lo `test -f '../column.c' || echo '$(srcdir)/'`../column.c
-
-crc16.o: ../crc16.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crc16.o -MD -MP -MF "$(DEPDIR)/crc16.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crc16.o `test -f '../crc16.c' || echo '$(srcdir)/'`../crc16.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crc16.Tpo" "$(DEPDIR)/crc16.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crc16.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crc16.c' object='crc16.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crc16.Po' tmpdepfile='$(DEPDIR)/crc16.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crc16.o `test -f '../crc16.c' || echo '$(srcdir)/'`../crc16.c
-
-crc16.obj: ../crc16.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crc16.obj -MD -MP -MF "$(DEPDIR)/crc16.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crc16.obj `if test -f '../crc16.c'; then $(CYGPATH_W) '../crc16.c'; else $(CYGPATH_W) '$(srcdir)/../crc16.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crc16.Tpo" "$(DEPDIR)/crc16.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crc16.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crc16.c' object='crc16.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crc16.Po' tmpdepfile='$(DEPDIR)/crc16.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crc16.obj `if test -f '../crc16.c'; then $(CYGPATH_W) '../crc16.c'; else $(CYGPATH_W) '$(srcdir)/../crc16.c'; fi`
-
-crc16.lo: ../crc16.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crc16.lo -MD -MP -MF "$(DEPDIR)/crc16.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crc16.lo `test -f '../crc16.c' || echo '$(srcdir)/'`../crc16.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crc16.Tpo" "$(DEPDIR)/crc16.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crc16.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crc16.c' object='crc16.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crc16.Plo' tmpdepfile='$(DEPDIR)/crc16.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crc16.lo `test -f '../crc16.c' || echo '$(srcdir)/'`../crc16.c
-
-crc32.o: ../crc32.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crc32.o -MD -MP -MF "$(DEPDIR)/crc32.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crc32.o `test -f '../crc32.c' || echo '$(srcdir)/'`../crc32.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crc32.Tpo" "$(DEPDIR)/crc32.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crc32.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crc32.c' object='crc32.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crc32.Po' tmpdepfile='$(DEPDIR)/crc32.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crc32.o `test -f '../crc32.c' || echo '$(srcdir)/'`../crc32.c
-
-crc32.obj: ../crc32.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crc32.obj -MD -MP -MF "$(DEPDIR)/crc32.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crc32.obj `if test -f '../crc32.c'; then $(CYGPATH_W) '../crc32.c'; else $(CYGPATH_W) '$(srcdir)/../crc32.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crc32.Tpo" "$(DEPDIR)/crc32.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crc32.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crc32.c' object='crc32.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crc32.Po' tmpdepfile='$(DEPDIR)/crc32.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crc32.obj `if test -f '../crc32.c'; then $(CYGPATH_W) '../crc32.c'; else $(CYGPATH_W) '$(srcdir)/../crc32.c'; fi`
-
-crc32.lo: ../crc32.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crc32.lo -MD -MP -MF "$(DEPDIR)/crc32.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crc32.lo `test -f '../crc32.c' || echo '$(srcdir)/'`../crc32.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crc32.Tpo" "$(DEPDIR)/crc32.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crc32.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crc32.c' object='crc32.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crc32.Plo' tmpdepfile='$(DEPDIR)/crc32.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crc32.lo `test -f '../crc32.c' || echo '$(srcdir)/'`../crc32.c
-
-crypt-des.o: ../crypt-des.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypt-des.o -MD -MP -MF "$(DEPDIR)/crypt-des.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crypt-des.o `test -f '../crypt-des.c' || echo '$(srcdir)/'`../crypt-des.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crypt-des.Tpo" "$(DEPDIR)/crypt-des.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crypt-des.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crypt-des.c' object='crypt-des.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crypt-des.Po' tmpdepfile='$(DEPDIR)/crypt-des.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypt-des.o `test -f '../crypt-des.c' || echo '$(srcdir)/'`../crypt-des.c
-
-crypt-des.obj: ../crypt-des.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypt-des.obj -MD -MP -MF "$(DEPDIR)/crypt-des.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crypt-des.obj `if test -f '../crypt-des.c'; then $(CYGPATH_W) '../crypt-des.c'; else $(CYGPATH_W) '$(srcdir)/../crypt-des.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crypt-des.Tpo" "$(DEPDIR)/crypt-des.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crypt-des.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crypt-des.c' object='crypt-des.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crypt-des.Po' tmpdepfile='$(DEPDIR)/crypt-des.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypt-des.obj `if test -f '../crypt-des.c'; then $(CYGPATH_W) '../crypt-des.c'; else $(CYGPATH_W) '$(srcdir)/../crypt-des.c'; fi`
-
-crypt-des.lo: ../crypt-des.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypt-des.lo -MD -MP -MF "$(DEPDIR)/crypt-des.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crypt-des.lo `test -f '../crypt-des.c' || echo '$(srcdir)/'`../crypt-des.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crypt-des.Tpo" "$(DEPDIR)/crypt-des.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crypt-des.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crypt-des.c' object='crypt-des.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crypt-des.Plo' tmpdepfile='$(DEPDIR)/crypt-des.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypt-des.lo `test -f '../crypt-des.c' || echo '$(srcdir)/'`../crypt-des.c
-
-crypt-md4.o: ../crypt-md4.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypt-md4.o -MD -MP -MF "$(DEPDIR)/crypt-md4.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crypt-md4.o `test -f '../crypt-md4.c' || echo '$(srcdir)/'`../crypt-md4.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crypt-md4.Tpo" "$(DEPDIR)/crypt-md4.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crypt-md4.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crypt-md4.c' object='crypt-md4.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crypt-md4.Po' tmpdepfile='$(DEPDIR)/crypt-md4.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypt-md4.o `test -f '../crypt-md4.c' || echo '$(srcdir)/'`../crypt-md4.c
-
-crypt-md4.obj: ../crypt-md4.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypt-md4.obj -MD -MP -MF "$(DEPDIR)/crypt-md4.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crypt-md4.obj `if test -f '../crypt-md4.c'; then $(CYGPATH_W) '../crypt-md4.c'; else $(CYGPATH_W) '$(srcdir)/../crypt-md4.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crypt-md4.Tpo" "$(DEPDIR)/crypt-md4.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crypt-md4.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crypt-md4.c' object='crypt-md4.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crypt-md4.Po' tmpdepfile='$(DEPDIR)/crypt-md4.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypt-md4.obj `if test -f '../crypt-md4.c'; then $(CYGPATH_W) '../crypt-md4.c'; else $(CYGPATH_W) '$(srcdir)/../crypt-md4.c'; fi`
-
-crypt-md4.lo: ../crypt-md4.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypt-md4.lo -MD -MP -MF "$(DEPDIR)/crypt-md4.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crypt-md4.lo `test -f '../crypt-md4.c' || echo '$(srcdir)/'`../crypt-md4.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crypt-md4.Tpo" "$(DEPDIR)/crypt-md4.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crypt-md4.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crypt-md4.c' object='crypt-md4.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crypt-md4.Plo' tmpdepfile='$(DEPDIR)/crypt-md4.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypt-md4.lo `test -f '../crypt-md4.c' || echo '$(srcdir)/'`../crypt-md4.c
-
-crypt-md5.o: ../crypt-md5.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypt-md5.o -MD -MP -MF "$(DEPDIR)/crypt-md5.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crypt-md5.o `test -f '../crypt-md5.c' || echo '$(srcdir)/'`../crypt-md5.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crypt-md5.Tpo" "$(DEPDIR)/crypt-md5.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crypt-md5.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crypt-md5.c' object='crypt-md5.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crypt-md5.Po' tmpdepfile='$(DEPDIR)/crypt-md5.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypt-md5.o `test -f '../crypt-md5.c' || echo '$(srcdir)/'`../crypt-md5.c
-
-crypt-md5.obj: ../crypt-md5.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypt-md5.obj -MD -MP -MF "$(DEPDIR)/crypt-md5.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crypt-md5.obj `if test -f '../crypt-md5.c'; then $(CYGPATH_W) '../crypt-md5.c'; else $(CYGPATH_W) '$(srcdir)/../crypt-md5.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crypt-md5.Tpo" "$(DEPDIR)/crypt-md5.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crypt-md5.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crypt-md5.c' object='crypt-md5.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crypt-md5.Po' tmpdepfile='$(DEPDIR)/crypt-md5.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypt-md5.obj `if test -f '../crypt-md5.c'; then $(CYGPATH_W) '../crypt-md5.c'; else $(CYGPATH_W) '$(srcdir)/../crypt-md5.c'; fi`
-
-crypt-md5.lo: ../crypt-md5.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypt-md5.lo -MD -MP -MF "$(DEPDIR)/crypt-md5.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crypt-md5.lo `test -f '../crypt-md5.c' || echo '$(srcdir)/'`../crypt-md5.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crypt-md5.Tpo" "$(DEPDIR)/crypt-md5.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crypt-md5.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crypt-md5.c' object='crypt-md5.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crypt-md5.Plo' tmpdepfile='$(DEPDIR)/crypt-md5.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypt-md5.lo `test -f '../crypt-md5.c' || echo '$(srcdir)/'`../crypt-md5.c
-
-crypt-rc4.o: ../crypt-rc4.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypt-rc4.o -MD -MP -MF "$(DEPDIR)/crypt-rc4.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crypt-rc4.o `test -f '../crypt-rc4.c' || echo '$(srcdir)/'`../crypt-rc4.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crypt-rc4.Tpo" "$(DEPDIR)/crypt-rc4.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crypt-rc4.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crypt-rc4.c' object='crypt-rc4.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crypt-rc4.Po' tmpdepfile='$(DEPDIR)/crypt-rc4.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypt-rc4.o `test -f '../crypt-rc4.c' || echo '$(srcdir)/'`../crypt-rc4.c
-
-crypt-rc4.obj: ../crypt-rc4.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypt-rc4.obj -MD -MP -MF "$(DEPDIR)/crypt-rc4.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crypt-rc4.obj `if test -f '../crypt-rc4.c'; then $(CYGPATH_W) '../crypt-rc4.c'; else $(CYGPATH_W) '$(srcdir)/../crypt-rc4.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crypt-rc4.Tpo" "$(DEPDIR)/crypt-rc4.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crypt-rc4.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crypt-rc4.c' object='crypt-rc4.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crypt-rc4.Po' tmpdepfile='$(DEPDIR)/crypt-rc4.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypt-rc4.obj `if test -f '../crypt-rc4.c'; then $(CYGPATH_W) '../crypt-rc4.c'; else $(CYGPATH_W) '$(srcdir)/../crypt-rc4.c'; fi`
-
-crypt-rc4.lo: ../crypt-rc4.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypt-rc4.lo -MD -MP -MF "$(DEPDIR)/crypt-rc4.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o crypt-rc4.lo `test -f '../crypt-rc4.c' || echo '$(srcdir)/'`../crypt-rc4.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/crypt-rc4.Tpo" "$(DEPDIR)/crypt-rc4.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/crypt-rc4.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../crypt-rc4.c' object='crypt-rc4.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/crypt-rc4.Plo' tmpdepfile='$(DEPDIR)/crypt-rc4.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypt-rc4.lo `test -f '../crypt-rc4.c' || echo '$(srcdir)/'`../crypt-rc4.c
-
 follow.o: ../follow.c
 @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT follow.o -MD -MP -MF "$(DEPDIR)/follow.Tpo" \
 @am__fastdepCC_TRUE@	  -c -o follow.o `test -f '../follow.c' || echo '$(srcdir)/'`../follow.c; \
@@ -1051,105 +800,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o h225-persistentdata.lo `test -f '../h225-persistentdata.c' || echo '$(srcdir)/'`../h225-persistentdata.c
 
-in_cksum.o: ../in_cksum.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_cksum.o -MD -MP -MF "$(DEPDIR)/in_cksum.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o in_cksum.o `test -f '../in_cksum.c' || echo '$(srcdir)/'`../in_cksum.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/in_cksum.Tpo" "$(DEPDIR)/in_cksum.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/in_cksum.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../in_cksum.c' object='in_cksum.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/in_cksum.Po' tmpdepfile='$(DEPDIR)/in_cksum.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_cksum.o `test -f '../in_cksum.c' || echo '$(srcdir)/'`../in_cksum.c
-
-in_cksum.obj: ../in_cksum.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_cksum.obj -MD -MP -MF "$(DEPDIR)/in_cksum.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o in_cksum.obj `if test -f '../in_cksum.c'; then $(CYGPATH_W) '../in_cksum.c'; else $(CYGPATH_W) '$(srcdir)/../in_cksum.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/in_cksum.Tpo" "$(DEPDIR)/in_cksum.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/in_cksum.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../in_cksum.c' object='in_cksum.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/in_cksum.Po' tmpdepfile='$(DEPDIR)/in_cksum.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_cksum.obj `if test -f '../in_cksum.c'; then $(CYGPATH_W) '../in_cksum.c'; else $(CYGPATH_W) '$(srcdir)/../in_cksum.c'; fi`
-
-in_cksum.lo: ../in_cksum.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT in_cksum.lo -MD -MP -MF "$(DEPDIR)/in_cksum.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o in_cksum.lo `test -f '../in_cksum.c' || echo '$(srcdir)/'`../in_cksum.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/in_cksum.Tpo" "$(DEPDIR)/in_cksum.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/in_cksum.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../in_cksum.c' object='in_cksum.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/in_cksum.Plo' tmpdepfile='$(DEPDIR)/in_cksum.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o in_cksum.lo `test -f '../in_cksum.c' || echo '$(srcdir)/'`../in_cksum.c
-
-ipproto.o: ../ipproto.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ipproto.o -MD -MP -MF "$(DEPDIR)/ipproto.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o ipproto.o `test -f '../ipproto.c' || echo '$(srcdir)/'`../ipproto.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/ipproto.Tpo" "$(DEPDIR)/ipproto.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/ipproto.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../ipproto.c' object='ipproto.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/ipproto.Po' tmpdepfile='$(DEPDIR)/ipproto.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ipproto.o `test -f '../ipproto.c' || echo '$(srcdir)/'`../ipproto.c
-
-ipproto.obj: ../ipproto.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ipproto.obj -MD -MP -MF "$(DEPDIR)/ipproto.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o ipproto.obj `if test -f '../ipproto.c'; then $(CYGPATH_W) '../ipproto.c'; else $(CYGPATH_W) '$(srcdir)/../ipproto.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/ipproto.Tpo" "$(DEPDIR)/ipproto.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/ipproto.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../ipproto.c' object='ipproto.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/ipproto.Po' tmpdepfile='$(DEPDIR)/ipproto.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ipproto.obj `if test -f '../ipproto.c'; then $(CYGPATH_W) '../ipproto.c'; else $(CYGPATH_W) '$(srcdir)/../ipproto.c'; fi`
-
-ipproto.lo: ../ipproto.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ipproto.lo -MD -MP -MF "$(DEPDIR)/ipproto.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o ipproto.lo `test -f '../ipproto.c' || echo '$(srcdir)/'`../ipproto.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/ipproto.Tpo" "$(DEPDIR)/ipproto.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/ipproto.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../ipproto.c' object='ipproto.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/ipproto.Plo' tmpdepfile='$(DEPDIR)/ipproto.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ipproto.lo `test -f '../ipproto.c' || echo '$(srcdir)/'`../ipproto.c
-
-prefs.o: ../prefs.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT prefs.o -MD -MP -MF "$(DEPDIR)/prefs.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o prefs.o `test -f '../prefs.c' || echo '$(srcdir)/'`../prefs.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/prefs.Tpo" "$(DEPDIR)/prefs.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/prefs.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../prefs.c' object='prefs.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/prefs.Po' tmpdepfile='$(DEPDIR)/prefs.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o prefs.o `test -f '../prefs.c' || echo '$(srcdir)/'`../prefs.c
-
-prefs.obj: ../prefs.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT prefs.obj -MD -MP -MF "$(DEPDIR)/prefs.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o prefs.obj `if test -f '../prefs.c'; then $(CYGPATH_W) '../prefs.c'; else $(CYGPATH_W) '$(srcdir)/../prefs.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/prefs.Tpo" "$(DEPDIR)/prefs.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/prefs.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../prefs.c' object='prefs.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/prefs.Po' tmpdepfile='$(DEPDIR)/prefs.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o prefs.obj `if test -f '../prefs.c'; then $(CYGPATH_W) '../prefs.c'; else $(CYGPATH_W) '$(srcdir)/../prefs.c'; fi`
-
-prefs.lo: ../prefs.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT prefs.lo -MD -MP -MF "$(DEPDIR)/prefs.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o prefs.lo `test -f '../prefs.c' || echo '$(srcdir)/'`../prefs.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/prefs.Tpo" "$(DEPDIR)/prefs.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/prefs.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../prefs.c' object='prefs.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/prefs.Plo' tmpdepfile='$(DEPDIR)/prefs.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o prefs.lo `test -f '../prefs.c' || echo '$(srcdir)/'`../prefs.c
-
 ptvcursor.o: ../ptvcursor.c
 @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ptvcursor.o -MD -MP -MF "$(DEPDIR)/ptvcursor.Tpo" \
 @am__fastdepCC_TRUE@	  -c -o ptvcursor.o `test -f '../ptvcursor.c' || echo '$(srcdir)/'`../ptvcursor.c; \
@@ -1216,171 +866,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reassemble.lo `test -f '../reassemble.c' || echo '$(srcdir)/'`../reassemble.c
 
-req_resp_hdrs.o: ../req_resp_hdrs.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT req_resp_hdrs.o -MD -MP -MF "$(DEPDIR)/req_resp_hdrs.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o req_resp_hdrs.o `test -f '../req_resp_hdrs.c' || echo '$(srcdir)/'`../req_resp_hdrs.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/req_resp_hdrs.Tpo" "$(DEPDIR)/req_resp_hdrs.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/req_resp_hdrs.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../req_resp_hdrs.c' object='req_resp_hdrs.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/req_resp_hdrs.Po' tmpdepfile='$(DEPDIR)/req_resp_hdrs.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o req_resp_hdrs.o `test -f '../req_resp_hdrs.c' || echo '$(srcdir)/'`../req_resp_hdrs.c
-
-req_resp_hdrs.obj: ../req_resp_hdrs.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT req_resp_hdrs.obj -MD -MP -MF "$(DEPDIR)/req_resp_hdrs.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o req_resp_hdrs.obj `if test -f '../req_resp_hdrs.c'; then $(CYGPATH_W) '../req_resp_hdrs.c'; else $(CYGPATH_W) '$(srcdir)/../req_resp_hdrs.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/req_resp_hdrs.Tpo" "$(DEPDIR)/req_resp_hdrs.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/req_resp_hdrs.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../req_resp_hdrs.c' object='req_resp_hdrs.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/req_resp_hdrs.Po' tmpdepfile='$(DEPDIR)/req_resp_hdrs.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o req_resp_hdrs.obj `if test -f '../req_resp_hdrs.c'; then $(CYGPATH_W) '../req_resp_hdrs.c'; else $(CYGPATH_W) '$(srcdir)/../req_resp_hdrs.c'; fi`
-
-req_resp_hdrs.lo: ../req_resp_hdrs.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT req_resp_hdrs.lo -MD -MP -MF "$(DEPDIR)/req_resp_hdrs.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o req_resp_hdrs.lo `test -f '../req_resp_hdrs.c' || echo '$(srcdir)/'`../req_resp_hdrs.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/req_resp_hdrs.Tpo" "$(DEPDIR)/req_resp_hdrs.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/req_resp_hdrs.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../req_resp_hdrs.c' object='req_resp_hdrs.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/req_resp_hdrs.Plo' tmpdepfile='$(DEPDIR)/req_resp_hdrs.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o req_resp_hdrs.lo `test -f '../req_resp_hdrs.c' || echo '$(srcdir)/'`../req_resp_hdrs.c
-
-t35.o: ../t35.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t35.o -MD -MP -MF "$(DEPDIR)/t35.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o t35.o `test -f '../t35.c' || echo '$(srcdir)/'`../t35.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/t35.Tpo" "$(DEPDIR)/t35.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/t35.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../t35.c' object='t35.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/t35.Po' tmpdepfile='$(DEPDIR)/t35.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t35.o `test -f '../t35.c' || echo '$(srcdir)/'`../t35.c
-
-t35.obj: ../t35.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t35.obj -MD -MP -MF "$(DEPDIR)/t35.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o t35.obj `if test -f '../t35.c'; then $(CYGPATH_W) '../t35.c'; else $(CYGPATH_W) '$(srcdir)/../t35.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/t35.Tpo" "$(DEPDIR)/t35.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/t35.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../t35.c' object='t35.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/t35.Po' tmpdepfile='$(DEPDIR)/t35.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t35.obj `if test -f '../t35.c'; then $(CYGPATH_W) '../t35.c'; else $(CYGPATH_W) '$(srcdir)/../t35.c'; fi`
-
-t35.lo: ../t35.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT t35.lo -MD -MP -MF "$(DEPDIR)/t35.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o t35.lo `test -f '../t35.c' || echo '$(srcdir)/'`../t35.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/t35.Tpo" "$(DEPDIR)/t35.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/t35.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../t35.c' object='t35.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/t35.Plo' tmpdepfile='$(DEPDIR)/t35.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o t35.lo `test -f '../t35.c' || echo '$(srcdir)/'`../t35.c
-
-tap.o: ../tap.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tap.o -MD -MP -MF "$(DEPDIR)/tap.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o tap.o `test -f '../tap.c' || echo '$(srcdir)/'`../tap.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/tap.Tpo" "$(DEPDIR)/tap.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/tap.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../tap.c' object='tap.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/tap.Po' tmpdepfile='$(DEPDIR)/tap.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tap.o `test -f '../tap.c' || echo '$(srcdir)/'`../tap.c
-
-tap.obj: ../tap.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tap.obj -MD -MP -MF "$(DEPDIR)/tap.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o tap.obj `if test -f '../tap.c'; then $(CYGPATH_W) '../tap.c'; else $(CYGPATH_W) '$(srcdir)/../tap.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/tap.Tpo" "$(DEPDIR)/tap.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/tap.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../tap.c' object='tap.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/tap.Po' tmpdepfile='$(DEPDIR)/tap.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tap.obj `if test -f '../tap.c'; then $(CYGPATH_W) '../tap.c'; else $(CYGPATH_W) '$(srcdir)/../tap.c'; fi`
-
-tap.lo: ../tap.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tap.lo -MD -MP -MF "$(DEPDIR)/tap.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o tap.lo `test -f '../tap.c' || echo '$(srcdir)/'`../tap.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/tap.Tpo" "$(DEPDIR)/tap.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/tap.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../tap.c' object='tap.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/tap.Plo' tmpdepfile='$(DEPDIR)/tap.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tap.lo `test -f '../tap.c' || echo '$(srcdir)/'`../tap.c
-
-util.o: ../util.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT util.o -MD -MP -MF "$(DEPDIR)/util.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o util.o `test -f '../util.c' || echo '$(srcdir)/'`../util.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/util.Tpo" "$(DEPDIR)/util.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/util.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../util.c' object='util.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/util.Po' tmpdepfile='$(DEPDIR)/util.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o util.o `test -f '../util.c' || echo '$(srcdir)/'`../util.c
-
-util.obj: ../util.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT util.obj -MD -MP -MF "$(DEPDIR)/util.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o util.obj `if test -f '../util.c'; then $(CYGPATH_W) '../util.c'; else $(CYGPATH_W) '$(srcdir)/../util.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/util.Tpo" "$(DEPDIR)/util.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/util.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../util.c' object='util.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/util.Po' tmpdepfile='$(DEPDIR)/util.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o util.obj `if test -f '../util.c'; then $(CYGPATH_W) '../util.c'; else $(CYGPATH_W) '$(srcdir)/../util.c'; fi`
-
-util.lo: ../util.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT util.lo -MD -MP -MF "$(DEPDIR)/util.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o util.lo `test -f '../util.c' || echo '$(srcdir)/'`../util.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/util.Tpo" "$(DEPDIR)/util.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/util.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../util.c' object='util.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/util.Plo' tmpdepfile='$(DEPDIR)/util.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o util.lo `test -f '../util.c' || echo '$(srcdir)/'`../util.c
-
-xdlc.o: ../xdlc.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xdlc.o -MD -MP -MF "$(DEPDIR)/xdlc.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o xdlc.o `test -f '../xdlc.c' || echo '$(srcdir)/'`../xdlc.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/xdlc.Tpo" "$(DEPDIR)/xdlc.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/xdlc.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../xdlc.c' object='xdlc.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/xdlc.Po' tmpdepfile='$(DEPDIR)/xdlc.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xdlc.o `test -f '../xdlc.c' || echo '$(srcdir)/'`../xdlc.c
-
-xdlc.obj: ../xdlc.c
-@am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xdlc.obj -MD -MP -MF "$(DEPDIR)/xdlc.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o xdlc.obj `if test -f '../xdlc.c'; then $(CYGPATH_W) '../xdlc.c'; else $(CYGPATH_W) '$(srcdir)/../xdlc.c'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/xdlc.Tpo" "$(DEPDIR)/xdlc.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/xdlc.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../xdlc.c' object='xdlc.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/xdlc.Po' tmpdepfile='$(DEPDIR)/xdlc.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xdlc.obj `if test -f '../xdlc.c'; then $(CYGPATH_W) '../xdlc.c'; else $(CYGPATH_W) '$(srcdir)/../xdlc.c'; fi`
-
-xdlc.lo: ../xdlc.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xdlc.lo -MD -MP -MF "$(DEPDIR)/xdlc.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o xdlc.lo `test -f '../xdlc.c' || echo '$(srcdir)/'`../xdlc.c; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/xdlc.Tpo" "$(DEPDIR)/xdlc.Plo"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/xdlc.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='../xdlc.c' object='xdlc.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/xdlc.Plo' tmpdepfile='$(DEPDIR)/xdlc.TPlo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xdlc.lo `test -f '../xdlc.c' || echo '$(srcdir)/'`../xdlc.c
-
 xmlstub.o: ../xmlstub.c
 @am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xmlstub.o -MD -MP -MF "$(DEPDIR)/xmlstub.Tpo" \
 @am__fastdepCC_TRUE@	  -c -o xmlstub.o `test -f '../xmlstub.c' || echo '$(srcdir)/'`../xmlstub.c; \
@@ -1610,7 +1095,7 @@
 installcheck: installcheck-recursive
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -1632,7 +1117,6 @@
 
 distclean: distclean-recursive
 	-rm -rf ./$(DEPDIR)
-
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
@@ -1657,7 +1141,6 @@
 
 maintainer-clean: maintainer-clean-recursive
 	-rm -rf ./$(DEPDIR)
-
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
diff -urN ethereal-0.10.6/epan/Makefile.nmake ethereal-0.10.7/epan/Makefile.nmake
--- ethereal-0.10.6/epan/Makefile.nmake	2004-08-12 17:41:54.000000000 -0500
+++ ethereal-0.10.7/epan/Makefile.nmake	2004-10-20 17:34:36.000000000 -0500
@@ -1,7 +1,7 @@
 ## Makefile for building ethereal.exe with Microsoft C and nmake
 ## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake
 #
-# $Id: Makefile.nmake 11645 2004-08-10 15:11:38Z gerald $
+# $Id: Makefile.nmake 12305 2004-10-15 18:30:05Z gerald $
 
 include ..\config.nmake
 include <win32.mak>
@@ -21,8 +21,9 @@
 	$(GLIB_LIBS)	\
 	$(ADNS_LIBS) \
 	$(PCRE_LIBS) \
+	$(NETTLE_LIBS) \
 	$(ZLIB_LIBS) \
-	$(NET_SNMP_DIR)\win32\lib\netsnmp.lib \
+	$(NET_SNMP_DIR)\win32\lib\release\netsnmp.lib \
 	ftypes\ftypes.lib \
 	dfilter\dfilter.lib \
 	dissectors\dissectors.lib
@@ -72,7 +73,7 @@
 		dissectors\register.obj $(DISSECTOR_SUPPORT_OBJECTS) \
 		$(EXTRA_OBJECTS)
 
-ethereal.lib	: ..\config.h $(LIBETHEREAL_OBJECTS)
+ethereal.lib	: ..\config.h $(LIBETHEREAL_OBJECTS) $(EXTRA_OBJECTS) 
 	link /lib /out:ethereal.lib $(LIBETHEREAL_OBJECTS) \
 		$(EXTRA_OBJECTS) $(DISSECTOR_SUPPORT_OBJECTS)
 
diff -urN ethereal-0.10.6/epan/addr_resolv.c ethereal-0.10.7/epan/addr_resolv.c
--- ethereal-0.10.6/epan/addr_resolv.c	2004-08-12 17:41:54.000000000 -0500
+++ ethereal-0.10.7/epan/addr_resolv.c	2004-10-20 17:34:36.000000000 -0500
@@ -1,7 +1,7 @@
 /* addr_resolv.c
  * Routines for network object lookup
  *
- * $Id: addr_resolv.c 11637 2004-08-09 22:19:03Z gerald $
+ * $Id: addr_resolv.c 12214 2004-10-06 07:25:38Z guy $
  *
  * Laurent Deniel <laurent.deniel@free.fr>
  *
@@ -34,23 +34,33 @@
 #include <string.h>
 
 /*
- * Win32 doesn't have SIGALRM.
+ * Win32 doesn't have SIGALRM (and it's the OS where name lookup calls
+ * are most likely to take a long time, given the way address-to-name
+ * lookups are done over NBNS).
  *
- * Mac OS X does, but if you longjmp() out of a name resolution call in
- * a signal handler, you might crash, because the state of the resolution
- * code that sends messages to lookupd might be inconsistent if you jump
- * out of it in middle of a call.
+ * Mac OS X does have SIGALRM, but if you longjmp() out of a name resolution
+ * call in a signal handler, you might crash, because the state of the
+ * resolution code that sends messages to lookupd might be inconsistent
+ * if you jump out of it in middle of a call.
+ *
+ * In at least some Linux distributions (e.g., RedHat Linux 9), if ADNS
+ * is used, we appear to hang in host_name_lookup6() in a gethostbyaddr()
+ * call (and possibly in other gethostbyaddr() calls), because there's
+ * a mutex lock held in gethostbyaddr() and it doesn't get released
+ * if we longjmp out of it.
  *
  * There's no guarantee that longjmp()ing out of name resolution calls
  * will work on *any* platform; OpenBSD got rid of the alarm/longjmp
  * code in tcpdump, to avoid those sorts of problems, and that was
  * picked up by tcpdump.org tcpdump.
+ *
+ * So, for now, we do not define AVOID_DNS_TIMEOUT.  If we get a
+ * significantly more complaints about lookups taking a long time,
+ * we can reconsider that decision.  (Note that tcpdump originally
+ * added that for the benefit of systems using NIS to look up host
+ * names; that might now be fixed in NIS implementations, for those
+ * sites still using NIS rather than DNS for that....)
  */
-#if !defined(WIN32) && !defined(__APPLE__)
-#ifndef AVOID_DNS_TIMEOUT
-#define AVOID_DNS_TIMEOUT
-#endif
-#endif
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
@@ -95,7 +105,7 @@
 # include <adns.h>
 #endif
 
-#if defined(WIN32) && defined(INET6)
+#if defined(_WIN32) && defined(INET6)
 # include <ws2tcpip.h>
 #endif
 
@@ -103,7 +113,7 @@
 #include "ipv6-utils.h"
 #include "addr_resolv.h"
 #include "filesystem.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #define ENAME_ETHERS 		"ethers"
 #define ENAME_IPXNETS 		"ipxnets"
diff -urN ethereal-0.10.6/epan/addr_resolv.h ethereal-0.10.7/epan/addr_resolv.h
--- ethereal-0.10.6/epan/addr_resolv.h	2004-08-12 17:41:54.000000000 -0500
+++ ethereal-0.10.7/epan/addr_resolv.h	2004-10-20 17:34:36.000000000 -0500
@@ -1,7 +1,7 @@
 /* addr_resolv.h
  * Definitions for network object lookup
  *
- * $Id: addr_resolv.h 11637 2004-08-09 22:19:03Z gerald $
+ * $Id: addr_resolv.h 11638 2004-08-09 22:31:21Z gerald $
  *
  * Laurent Deniel <laurent.deniel@free.fr>
  *
diff -urN ethereal-0.10.6/epan/adler32.c ethereal-0.10.7/epan/adler32.c
--- ethereal-0.10.6/epan/adler32.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/adler32.c	2004-10-20 17:35:04.000000000 -0500
@@ -0,0 +1,59 @@
+/* adler32.c
+ * Compute the Adler32 checksum (RFC 1950)
+ * 2003 Tomas Kukosa
+ * Based on code from RFC 1950 (Chapter 9. Appendix: Sample code)
+ *
+ * $Id: adler32.c 12117 2004-09-28 00:06:32Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#include <string.h>
+
+#include <epan/adler32.h>
+
+#define BASE 65521 /* largest prime smaller than 65536 */
+
+/*--- update_adler32 --------------------------------------------------------*/
+unsigned long update_adler32(unsigned long adler, const unsigned char *buf, int len)
+{
+  unsigned long s1 = adler & 0xffff;
+  unsigned long s2 = (adler >> 16) & 0xffff;
+  int n;
+
+  for (n = 0; n < len; n++) {
+    s1 = (s1 + buf[n]) % BASE;
+    s2 = (s2 + s1)     % BASE;
+  }
+  return (s2 << 16) + s1;
+}
+
+/*--- adler32 ---------------------------------------------------------------*/
+unsigned long adler32_bytes(unsigned char *buf, int len)
+{
+  return update_adler32(1L, buf, len);
+}
+
+/*--- adler32_str -----------------------------------------------------------*/
+unsigned long adler32_str(const char *buf)
+{
+  return update_adler32(1L, (unsigned char*)buf, strlen(buf));
+}
+
+/*---------------------------------------------------------------------------*/
diff -urN ethereal-0.10.6/epan/adler32.h ethereal-0.10.7/epan/adler32.h
--- ethereal-0.10.6/epan/adler32.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/adler32.h	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,42 @@
+/* adler32.h
+ * Compute the Adler32 checksum (RFC 1950)
+ * 2003 Tomas Kukosa
+ *
+ * $Id: adler32.h 12117 2004-09-28 00:06:32Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef ADLER32_H
+#define ADLER32_H
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+unsigned long update_adler32(unsigned long adler, const unsigned char *buf, int len);
+unsigned long adler32_bytes(unsigned char *buf, int len);
+unsigned long adler32_str(const char *buf);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* ADLER32_H */
+
diff -urN ethereal-0.10.6/epan/afn.c ethereal-0.10.7/epan/afn.c
--- ethereal-0.10.6/epan/afn.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/afn.c	2004-10-20 17:35:03.000000000 -0500
@@ -0,0 +1,52 @@
+/* afn.c
+ * RFC 1700 address family numbers
+ *
+ * $Id: afn.c 12130 2004-09-29 00:52:45Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <epan/packet.h>
+#include <epan/afn.h>
+
+const value_string afn_vals[] = {
+    { 0, "Reserved" },
+    { AFNUM_INET, "IPv4" },
+    { AFNUM_INET6, "IPv6" },
+    { AFNUM_NSAP, "NSAP" },
+    { AFNUM_HDLC, "HDLC (8-bit multidrop)" },
+    { AFNUM_BBN1822, "BBN 1822" },
+    { AFNUM_802, "802" },
+    { AFNUM_E163, "E.163" },
+    { AFNUM_E164, "E.164" },
+    { AFNUM_F69, "F.69" },
+    { AFNUM_X121, "X.121" },
+    { AFNUM_IPX, "IPX" },
+    { AFNUM_ATALK, "Appletalk" },
+    { AFNUM_DECNET, "Decnet IV" },
+    { AFNUM_BANYAN, "Banyan Vines" },
+    { AFNUM_E164NSAP, "E.164 with NSAP subaddress" },
+    { AFNUM_L2VPN, "Layer-2 VPN" },
+    { 65535, "Reserved" },
+    { 0, NULL },
+};
diff -urN ethereal-0.10.6/epan/afn.h ethereal-0.10.7/epan/afn.h
--- ethereal-0.10.6/epan/afn.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/afn.h	2004-10-20 17:35:03.000000000 -0500
@@ -0,0 +1,48 @@
+/* afn.h
+ * RFC 1700 address family numbers
+ *
+ * $Id: afn.h 12130 2004-09-29 00:52:45Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef __AFN_H__
+#define __AFN_H__
+
+/* RFC1700 address family numbers */
+#define AFNUM_INET	1
+#define AFNUM_INET6	2
+#define AFNUM_NSAP	3
+#define AFNUM_HDLC	4
+#define AFNUM_BBN1822	5
+#define AFNUM_802	6
+#define AFNUM_E163	7
+#define AFNUM_E164	8
+#define AFNUM_F69	9
+#define AFNUM_X121	10
+#define AFNUM_IPX	11
+#define AFNUM_ATALK	12
+#define AFNUM_DECNET	13
+#define AFNUM_BANYAN	14
+#define AFNUM_E164NSAP	15
+/* draft-kompella-ppvpn-l2vpn */
+#define AFNUM_L2VPN     196
+extern const value_string afn_vals[];
+
+#endif /* __AFN_H__ */
diff -urN ethereal-0.10.6/epan/base64.c ethereal-0.10.7/epan/base64.c
--- ethereal-0.10.6/epan/base64.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/base64.c	2004-10-20 17:35:04.000000000 -0500
@@ -0,0 +1,62 @@
+/* base64.c
+ * Base-64 conversion
+ *
+ * $Id: base64.c 11960 2004-09-10 23:16:00Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+
+/* Decode a base64 string in-place - simple and slow algorithm.
+   Return length of result. Taken from rproxy/librsync/base64.c by
+   Andrew Tridgell. */
+
+size_t epan_base64_decode(char *s)
+{
+	static const char b64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+	int bit_offset, byte_offset, idx, i, n;
+	unsigned char *d = (unsigned char *)s;
+	char *p;
+
+	n=i=0;
+
+	while (*s && (p=strchr(b64, *s))) {
+		idx = (int)(p - b64);
+		byte_offset = (i*6)/8;
+		bit_offset = (i*6)%8;
+		d[byte_offset] &= ~((1<<(8-bit_offset))-1);
+		if (bit_offset < 3) {
+			d[byte_offset] |= (idx << (2-bit_offset));
+			n = byte_offset+1;
+		} else {
+			d[byte_offset] |= (idx >> (bit_offset-2));
+			d[byte_offset+1] = 0;
+			d[byte_offset+1] |= (idx << (8-(bit_offset-2))) & 0xFF;
+			n = byte_offset+2;
+		}
+		s++; i++;
+	}
+
+	return n;
+}
diff -urN ethereal-0.10.6/epan/base64.h ethereal-0.10.7/epan/base64.h
--- ethereal-0.10.6/epan/base64.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/base64.h	2004-10-20 17:35:04.000000000 -0500
@@ -0,0 +1,38 @@
+/* base64.h
+ * Base-64 conversion
+ *
+ * $Id: base64.h 11960 2004-09-10 23:16:00Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+#ifndef __BASE64_H__
+#define __BASE64_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* In-place decoding of a base64 string. */
+size_t epan_base64_decode(char *s);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __BASE64_H__ */
diff -urN ethereal-0.10.6/epan/charsets.c ethereal-0.10.7/epan/charsets.c
--- ethereal-0.10.6/epan/charsets.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/charsets.c	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,144 @@
+/* charsets.c
+ * Routines for handling character sets
+ *
+ * $Id: charsets.c 11958 2004-09-10 22:59:37Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include "charsets.h"
+
+/* ASCII/EBCDIC conversion tables from
+ * http://www.room42.com/store/computer_center/code_tables.shtml
+ */
+#if 0
+static guint8 ASCII_translate_EBCDIC [ 256 ] = {
+    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+    0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
+    0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
+    0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, 0x4D,
+    0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61,
+    0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
+    0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F,
+    0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8,
+    0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
+    0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
+    0xE8, 0xE9, 0xAD, 0xE0, 0xBD, 0x5F, 0x6D,
+    0x7D, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
+    0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
+    0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
+    0xA8, 0xA9, 0xC0, 0x6A, 0xD0, 0xA1, 0x4B,
+    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
+    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
+    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
+    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
+    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
+    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
+    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
+    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
+    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
+    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
+    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
+    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
+    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
+    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
+    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
+    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B
+};
+
+void
+ASCII_to_EBCDIC(guint8 *buf, guint bytes)
+{
+	guint	i;
+	guint8	*bufptr;
+
+	bufptr = buf;
+
+	for (i = 0; i < bytes; i++, bufptr++) {
+		*bufptr = ASCII_translate_EBCDIC[*bufptr];
+	}
+}
+
+guint8
+ASCII_to_EBCDIC1(guint8 c)
+{
+	return ASCII_translate_EBCDIC[c];
+}
+#endif
+
+static guint8 EBCDIC_translate_ASCII [ 256 ] = {
+    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+    0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
+    0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
+    0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
+    0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
+    0x2E, 0x2E, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
+    0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x2E, 0x3F,
+    0x20, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+    0x2E, 0x2E, 0x2E, 0x3C, 0x28, 0x2B, 0x7C,
+    0x26, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+    0x2E, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0x5E,
+    0x2D, 0x2F, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+    0x2E, 0x7C, 0x2C, 0x25, 0x5F, 0x3E, 0x3F,
+    0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+    0x2E, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22,
+    0x2E, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
+    0x69, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+    0x2E, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71,
+    0x72, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+    0x2E, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
+    0x7A, 0x2E, 0x2E, 0x2E, 0x5B, 0x2E, 0x2E,
+    0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+    0x2E, 0x2E, 0x2E, 0x2E, 0x5D, 0x2E, 0x2E,
+    0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
+    0x49, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+    0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51,
+    0x52, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+    0x5C, 0x2E, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
+    0x5A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
+    0x39, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E
+};
+
+void
+EBCDIC_to_ASCII(guint8 *buf, guint bytes)
+{
+	guint	i;
+	guint8	*bufptr;
+
+	bufptr = buf;
+
+	for (i = 0; i < bytes; i++, bufptr++) {
+		*bufptr = EBCDIC_translate_ASCII[*bufptr];
+	}
+}
+
+guint8
+EBCDIC_to_ASCII1(guint8 c)
+{
+	return EBCDIC_translate_ASCII[c];
+}
diff -urN ethereal-0.10.6/epan/charsets.h ethereal-0.10.7/epan/charsets.h
--- ethereal-0.10.6/epan/charsets.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/charsets.h	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,42 @@
+/* charsets.h
+ * Routines for handling character sets
+ *
+ * $Id: charsets.h 11958 2004-09-10 22:59:37Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+#ifndef __CHARSETS_H__
+#define __CHARSETS_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#if 0
+void ASCII_to_EBCDIC(guint8 *buf, guint bytes);
+guint8 ASCII_to_EBCDIC1(guint8 c);
+#endif
+void EBCDIC_to_ASCII(guint8 *buf, guint bytes);
+guint8 EBCDIC_to_ASCII1(guint8 c);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __CHARSETS_H__ */
diff -urN ethereal-0.10.6/epan/column-utils.c ethereal-0.10.7/epan/column-utils.c
--- ethereal-0.10.6/epan/column-utils.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/column-utils.c	2004-10-20 17:35:04.000000000 -0500
@@ -1,7 +1,7 @@
 /* column-utils.c
  * Routines for column utilities.
  *
- * $Id: column-utils.c 11716 2004-08-11 19:11:06Z gerald $
+ * $Id: column-utils.c 12283 2004-10-12 18:08:23Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -195,7 +195,7 @@
 {
   int i;
   int fence;
-  size_t len, max_len;
+  size_t max_len;
 
   if (el == COL_INFO)
 	max_len = COL_MAX_INFO_LEN;
@@ -213,8 +213,7 @@
          */
         COL_CHECK_APPEND(cinfo, i, max_len);
 
-        len = strlen(cinfo->col_buf[i]);
-        strncat(cinfo->col_buf[i], str, max_len - len);
+        strncpy(&cinfo->col_buf[i][fence], str, max_len - fence);
         cinfo->col_buf[i][max_len - 1] = 0;
       } else {
         /*
@@ -264,13 +263,12 @@
   va_end(ap);
 }
 
-/* Appends a vararg list to a packet info string. */
-void
-col_append_fstr(column_info *cinfo, gint el, const gchar *format, ...)
+static void
+col_do_append_sep_va_fstr(column_info *cinfo, gint el, const gchar *separator,
+			  const gchar *format, va_list ap)
 {
-  va_list ap;
   int     i;
-  size_t  len, max_len;
+  size_t  len, max_len, sep_len;
 
   g_assert(cinfo->col_first[el] >= 0);
   if (el == COL_INFO)
@@ -278,18 +276,42 @@
   else
 	max_len = COL_MAX_LEN;
 
-  va_start(ap, format);
+  if (separator == NULL)
+    sep_len = 0;
+  else
+    sep_len = strlen(separator);
   for (i = cinfo->col_first[el]; i <= cinfo->col_last[el]; i++) {
     if (cinfo->fmt_matx[i][el]) {
       /*
        * First arrange that we can append, if necessary.
        */
       COL_CHECK_APPEND(cinfo, i, max_len);
+
       len = strlen(cinfo->col_buf[i]);
+
+      /*
+       * If we have a separator, append it if the column isn't empty.
+       */
+      if (separator != NULL) {
+        if (len != 0) {
+          strncat(cinfo->col_buf[i], separator, max_len - len);
+          len += sep_len;
+        }
+      }
       vsnprintf(&cinfo->col_buf[i][len], max_len - len, format, ap);
-      cinfo->col_buf[i][max_len - 1] = '\0';
+      cinfo->col_buf[i][max_len-1] = 0;
     }
   }
+}
+
+/* Appends a vararg list to a packet info string. */
+void
+col_append_fstr(column_info *cinfo, gint el, const gchar *format, ...)
+{
+  va_list ap;
+
+  va_start(ap, format);
+  col_do_append_sep_va_fstr(cinfo, el, NULL, format, ap);
   va_end(ap);
 }
 
@@ -300,30 +322,11 @@
 		const gchar *format, ...)
 {
   va_list ap;
-  int     i;
-  size_t  len, max_len;
 
-  g_assert(cinfo->col_first[el] >= 0);
-  if (el == COL_INFO)
-	max_len = COL_MAX_INFO_LEN;
-  else
-	max_len = COL_MAX_LEN;
-
-  if (cinfo->col_buf[0]) {
-    col_append_str(cinfo, el, separator ? separator : ", ");
-  }
+  if (separator == NULL)
+    separator = ", ";    /* default */
   va_start(ap, format);
-  for (i = cinfo->col_first[el]; i <= cinfo->col_last[el]; i++) {
-    if (cinfo->fmt_matx[i][el]) {
-      /*
-       * First arrange that we can append, if necessary.
-       */
-      COL_CHECK_APPEND(cinfo, i, max_len);
-      len = strlen(cinfo->col_buf[i]);
-      vsnprintf(&cinfo->col_buf[i][len], max_len - len, format, ap);
-      cinfo->col_buf[i][max_len-1] = 0;
-    }
-  }
+  col_do_append_sep_va_fstr(cinfo, el, separator, format, ap);
   va_end(ap);
 }
 
@@ -411,11 +414,12 @@
   }
 }
 
-void
-col_append_str(column_info *cinfo, gint el, const gchar* str)
+static void
+col_do_append_str(column_info *cinfo, gint el, const gchar* separator,
+    const gchar* str)
 {
   int    i;
-  size_t len, max_len;
+  size_t len, max_len, sep_len;
 
   g_assert(cinfo->col_first[el] >= 0);
   if (el == COL_INFO)
@@ -423,13 +427,29 @@
   else
 	max_len = COL_MAX_LEN;
 
+  if (separator == NULL)
+    sep_len = 0;
+  else
+    sep_len = strlen(separator);
+
   for (i = cinfo->col_first[el]; i <= cinfo->col_last[el]; i++) {
     if (cinfo->fmt_matx[i][el]) {
       /*
        * First arrange that we can append, if necessary.
        */
       COL_CHECK_APPEND(cinfo, i, max_len);
+
       len = strlen(cinfo->col_buf[i]);
+
+      /*
+       * If we have a separator, append it if the column isn't empty.
+       */
+      if (separator != NULL) {
+        if (len != 0) {
+          strncat(cinfo->col_buf[i], separator, max_len - len);
+          len += sep_len;
+        }
+      }
       strncat(cinfo->col_buf[i], str, max_len - len);
       cinfo->col_buf[i][max_len - 1] = 0;
     }
@@ -437,13 +457,18 @@
 }
 
 void
+col_append_str(column_info *cinfo, gint el, const gchar* str)
+{
+  col_do_append_str(cinfo, el, NULL, str);
+}
+
+void
 col_append_sep_str(column_info *cinfo, gint el, const gchar* separator,
     const gchar* str)
 {
-  if (cinfo->col_buf[0]) {
-    col_append_str(cinfo, el, separator ? separator : ", ");
-  }  
-  col_append_str(cinfo, el, str);
+  if (separator == NULL)
+    separator = ", ";    /* default */
+  col_do_append_str(cinfo, el, separator, str);
 }
 
 static void
diff -urN ethereal-0.10.6/epan/column.c ethereal-0.10.7/epan/column.c
--- ethereal-0.10.6/epan/column.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/column.c	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,451 @@
+/* column.c
+ * Routines for handling column preferences
+ *
+ * $Id: column.c 12131 2004-09-29 02:54:22Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#include <epan/timestamp.h>
+#include <epan/prefs.h>
+#include <epan/column.h>
+#include <epan/packet.h>
+
+/* Given a format number (as defined in packet.h), returns its equivalent
+   string */
+gchar *
+col_format_to_string(gint fmt) {
+  gchar *slist[] = { "%m", "%t", "%Rt", "%At", "%Yt", "%Tt", "%s", "%rs",
+                     "%us","%hs", "%rhs", "%uhs", "%ns", "%rns", "%uns", "%d",
+                     "%rd", "%ud", "%hd", "%rhd", "%uhd", "%nd", "%rnd",
+                     "%und", "%S", "%rS", "%uS", "%D", "%rD", "%uD", "%p",
+                     "%i", "%L", "%B", "%XO", "%XR", "%I", "%c", "%Xs", 
+                     "%Xd", "%V", "%x", "%e" };
+                     
+  if (fmt < 0 || fmt > NUM_COL_FMTS)
+    return NULL;
+
+  return(slist[fmt]);
+}
+
+/* Given a format number (as defined in packet.h), returns its
+  description */
+static gchar *dlist[NUM_COL_FMTS] = {
+	"Number",
+	"Time (command line specified)",
+	"Relative time",
+	"Absolute time",
+	"Absolute date and time",
+	"Delta time",
+	"Source address",
+	"Src addr (resolved)",
+	"Src addr (unresolved)",
+	"Hardware src addr",
+	"Hw src addr (resolved)",
+	"Hw src addr (unresolved)",
+	"Network src addr",
+	"Net src addr (resolved)",
+	"Net src addr (unresolved)",
+	"Destination address",
+	"Dest addr (resolved)",
+	"Dest addr (unresolved)",
+	"Hardware dest addr",
+	"Hw dest addr (resolved)",
+	"Hw dest addr (unresolved)",
+	"Network dest addr",
+	"Net dest addr (resolved)",
+	"Net dest addr (unresolved)",
+	"Source port",
+	"Src port (resolved)",
+	"Src port (unresolved)",
+	"Destination port",
+	"Dest port (resolved)",
+	"Dest port (unresolved)",
+	"Protocol",
+	"Information",
+	"Packet length (bytes)" ,
+	"Cumulative Bytes" ,
+	"OXID",
+	"RXID",
+	"FW-1 monitor if/direction",
+	"Circuit ID",
+	"Src PortIdx",
+	"Dst PortIdx",
+	"VSAN",
+	"IEEE 802.11 TX rate",
+	"IEEE 802.11 RSSI",
+};
+
+gchar *
+col_format_desc(gint fmt) {
+  g_assert((fmt >= 0) && (fmt < NUM_COL_FMTS));
+  return(dlist[fmt]);
+}
+
+/* Marks each array element true if it can be substituted for the given
+   column format */
+void
+get_column_format_matches(gboolean *fmt_list, gint format) {
+
+  /* Get the obvious: the format itself */
+  if ((format >= 0) && (format < NUM_COL_FMTS))
+    fmt_list[format] = TRUE;
+
+  /* Get any formats lower down on the chain */
+  switch (format) {
+    case COL_DEF_SRC:
+      fmt_list[COL_RES_DL_SRC] = TRUE;
+      fmt_list[COL_RES_NET_SRC] = TRUE;
+      break;
+    case COL_RES_SRC:
+      fmt_list[COL_RES_DL_SRC] = TRUE;
+      fmt_list[COL_RES_NET_SRC] = TRUE;
+      break;
+    case COL_UNRES_SRC:
+      fmt_list[COL_UNRES_DL_SRC] = TRUE;
+      fmt_list[COL_UNRES_NET_SRC] = TRUE;
+      break;
+    case COL_DEF_DST:
+      fmt_list[COL_RES_DL_DST] = TRUE;
+      fmt_list[COL_RES_NET_DST] = TRUE;
+      break;
+    case COL_RES_DST:
+      fmt_list[COL_RES_DL_DST] = TRUE;
+      fmt_list[COL_RES_NET_DST] = TRUE;
+      break;
+    case COL_UNRES_DST:
+      fmt_list[COL_UNRES_DL_DST] = TRUE;
+      fmt_list[COL_UNRES_NET_DST] = TRUE;
+      break;
+    case COL_DEF_DL_SRC:
+      fmt_list[COL_RES_DL_SRC] = TRUE;
+      break;
+    case COL_DEF_DL_DST:
+      fmt_list[COL_RES_DL_DST] = TRUE;
+      break;
+    case COL_DEF_NET_SRC:
+      fmt_list[COL_RES_NET_SRC] = TRUE;
+      break;
+    case COL_DEF_NET_DST:
+      fmt_list[COL_RES_NET_DST] = TRUE;
+      break;
+    case COL_DEF_SRC_PORT:
+      fmt_list[COL_RES_SRC_PORT] = TRUE;
+      break;
+    case COL_DEF_DST_PORT:
+      fmt_list[COL_RES_DST_PORT] = TRUE;
+      break;
+    case COL_OXID:
+      fmt_list[COL_OXID] = TRUE;
+      break;
+    case COL_RXID:
+      fmt_list[COL_RXID] = TRUE;
+      break;
+    case COL_IF_DIR:
+      fmt_list[COL_IF_DIR] = TRUE;
+      break;
+    case COL_CIRCUIT_ID:
+      fmt_list[COL_CIRCUIT_ID] = TRUE;
+      break;
+    case COL_SRCIDX:
+      fmt_list[COL_SRCIDX] = TRUE;
+      break;
+    case COL_DSTIDX:
+      fmt_list[COL_DSTIDX] = TRUE;
+      break;
+    case COL_VSAN:
+      fmt_list[COL_VSAN] = TRUE;
+      break;
+    case COL_TX_RATE:
+      fmt_list[COL_TX_RATE] = TRUE;
+      break;
+    case COL_RSSI:
+      fmt_list[COL_RSSI] = TRUE;
+      break;
+    default:
+      break;
+  }
+}
+
+/* Returns a string representing the longest possible value for a
+   particular column type.
+
+   Except for the COL...SRC and COL...DST columns, these are used
+   only when a capture is being displayed while it's taking place;
+   they are arguably somewhat fragile, as changes to the code that
+   generates them don't cause these widths to change, but that's
+   probably not too big a problem, given that the sizes are
+   recomputed based on the actual data in the columns when the capture
+   is done, and given that the width for COL...SRC and COL...DST columns
+   is somewhat arbitrary in any case.  We should probably clean
+   that up eventually, though. */
+char *
+get_column_longest_string(gint format)
+{
+  switch (format) {
+    case COL_NUMBER:
+      return "0000000";
+      break;
+    case COL_CLS_TIME:
+      if (get_timestamp_setting() == TS_ABSOLUTE)
+        return "00:00:00.000000";
+      else if (get_timestamp_setting() == TS_ABSOLUTE_WITH_DATE)
+        return "0000-00-00 00:00:00.000000";
+      else
+        return "0000.000000";
+      break;
+    case COL_ABS_TIME:
+      return "00:00:00.000000";
+      break;
+    case COL_ABS_DATE_TIME:
+      return "0000-00-00 00:00:00.000000";
+      break;
+    case COL_REL_TIME:
+    case COL_DELTA_TIME:
+      return "0000.000000";
+      break;
+    case COL_DEF_SRC:
+    case COL_RES_SRC:
+    case COL_UNRES_SRC:
+    case COL_DEF_DL_SRC:
+    case COL_RES_DL_SRC:
+    case COL_UNRES_DL_SRC:
+    case COL_DEF_NET_SRC:
+    case COL_RES_NET_SRC:
+    case COL_UNRES_NET_SRC:
+    case COL_DEF_DST:
+    case COL_RES_DST:
+    case COL_UNRES_DST:
+    case COL_DEF_DL_DST:
+    case COL_RES_DL_DST:
+    case COL_UNRES_DL_DST:
+    case COL_DEF_NET_DST:
+    case COL_RES_NET_DST:
+    case COL_UNRES_NET_DST:
+      return "00000000.000000000000"; /* IPX-style */
+      break;
+    case COL_DEF_SRC_PORT:
+    case COL_RES_SRC_PORT:
+    case COL_UNRES_SRC_PORT:
+    case COL_DEF_DST_PORT:
+    case COL_RES_DST_PORT:
+    case COL_UNRES_DST_PORT:
+      return "000000";
+      break;
+    case COL_PROTOCOL:
+      return "Protocol";	/* not the longest, but the longest is too long */
+      break;
+    case COL_PACKET_LENGTH:
+      return "000000";
+      break;
+    case COL_CUMULATIVE_BYTES:
+      return "00000000";
+      break;
+    case COL_RXID:
+    case COL_OXID:
+      return "000000";
+      break;
+    case COL_IF_DIR:
+      return "i 00000000 I";
+      break;
+    case COL_CIRCUIT_ID:
+      return "000000";
+      break;
+    case COL_SRCIDX:
+    case COL_DSTIDX:
+      return "0000000";
+      break;
+    case COL_VSAN:
+      return "000000";
+      break;
+    case COL_TX_RATE:
+      return "108.0";
+      break;
+    case COL_RSSI:
+      return "100";
+      break;
+    default: /* COL_INFO */
+      return "Source port: kerberos-master  Destination port: kerberos-master";
+      break;
+  }
+}
+
+/* Returns the longest possible width, in characters, for a particular
+   column type. */
+gint
+get_column_char_width(gint format)
+{
+  return strlen(get_column_longest_string(format));
+}
+
+#define TIME_DEF      0
+#define TIME_REL      1
+#define TIME_ABS      2
+#define DATE_TIME_ABS 3
+#define TIME_DEL      4
+
+#define RES_DEF  0
+#define RES_DO   1
+#define RES_DONT 2
+
+#define ADDR_DEF 0
+#define ADDR_DL  3
+#define ADDR_NET 6
+
+gint
+get_column_format(gint col) {
+  GList    *clp = g_list_nth(prefs.col_list, col);
+  fmt_data *cfmt;
+
+  cfmt = (fmt_data *) clp->data;
+
+  return(get_column_format_from_str(cfmt->fmt));
+}
+
+gint
+get_column_format_from_str(gchar *str) {
+  gchar *cptr = str;
+  gint      res_off = RES_DEF, addr_off = ADDR_DEF, time_off = TIME_DEF;
+  gint      prev_code = -1;
+
+  /* To do: Make this parse %-formatted strings "for real" */
+  while (*cptr != '\0') {
+    switch (*cptr) {
+      case 't':  /* To do: fix for absolute and delta */
+        return COL_CLS_TIME + time_off;
+        break;
+      case 'm':
+        return COL_NUMBER;
+        break;
+      case 's':
+        if (prev_code == COL_OXID) {
+          return COL_SRCIDX;
+        }
+        else {
+          return COL_DEF_SRC + res_off + addr_off;
+        }
+        break;
+      case 'd':
+        if (prev_code == COL_OXID) {
+          return COL_DSTIDX;
+        }
+        else {
+          return COL_DEF_DST + res_off + addr_off;
+        }
+        break;
+      case 'S':
+        return COL_DEF_SRC_PORT + res_off;
+        break;
+      case 'D':
+        return COL_DEF_DST_PORT + res_off;
+        break;
+      case 'p':
+        return COL_PROTOCOL;
+        break;
+      case 'i':
+        return COL_INFO;
+        break;
+      case 'r':
+        res_off = RES_DO;
+        break;
+      case 'u':
+        res_off = RES_DONT;
+        break;
+      case 'h':
+        addr_off = ADDR_DL;
+        break;
+      case 'n':
+        addr_off = ADDR_NET;
+        break;
+      case 'R':
+        if (prev_code == COL_OXID) {
+            return COL_RXID;
+        }
+        else {
+            time_off = TIME_REL;
+        }
+        break;
+      case 'A':
+        time_off = TIME_ABS;
+        break;
+      case 'Y':
+        time_off = DATE_TIME_ABS;
+        break;
+      case 'T':
+        time_off = TIME_DEL;
+        break;
+      case 'L':
+        return COL_PACKET_LENGTH;
+        break;
+      case 'B':
+        return COL_CUMULATIVE_BYTES;
+        break;
+      case 'X':
+        prev_code = COL_OXID;
+        break;
+      case 'O':
+        return COL_OXID;
+        break;
+      case 'I':
+        return COL_IF_DIR;
+        break;
+      case 'c':
+        return COL_CIRCUIT_ID;
+        break;
+      case 'V':
+        return COL_VSAN;
+        break;
+      case 'x':
+        return COL_TX_RATE;
+        break;
+      case 'e':
+        return COL_RSSI;
+        break;
+    }
+    cptr++;
+  }
+  return -1;	/* illegal */
+}
+
+gchar *
+get_column_title(gint col) {
+  GList    *clp = g_list_nth(prefs.col_list, col);
+  fmt_data *cfmt;
+
+  cfmt = (fmt_data *) clp->data;
+
+  return(cfmt->title);
+}
diff -urN ethereal-0.10.6/epan/column.h ethereal-0.10.7/epan/column.h
--- ethereal-0.10.6/epan/column.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/column.h	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,42 @@
+/* column.h
+ * Definitions for column handling routines
+ *
+ * $Id: column.h 12131 2004-09-29 02:54:22Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef __COLUMN_H__
+#define __COLUMN_H__
+
+typedef struct _fmt_data {
+  gchar *title;
+  gchar *fmt;
+} fmt_data;
+
+gchar               *col_format_to_string(gint);
+gchar               *col_format_desc(gint);
+gint                 get_column_format(gint);
+void                 get_column_format_matches(gboolean *, gint);
+gint                 get_column_format_from_str(gchar *);
+gchar               *get_column_title(gint);
+char                *get_column_longest_string(gint);
+gint                 get_column_char_width(gint format);
+
+#endif /* column.h */
diff -urN ethereal-0.10.6/epan/crc16.c ethereal-0.10.7/epan/crc16.c
--- ethereal-0.10.6/epan/crc16.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/crc16.c	2004-10-20 17:35:03.000000000 -0500
@@ -0,0 +1,182 @@
+/* crc16.c
+ * CRC-16 routine
+ *
+ * 2004 Richard van der Hoff <richardv@mxtelecom.com>
+ *
+ * $Id: crc16.c 12117 2004-09-28 00:06:32Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@xxxxxxxxxxxx>
+ * Copyright 1998 Gerald Combs
+ *
+ * Copied from README.developer
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * References:
+ *  "A Painless Guide to CRC Error Detection Algorithms", Ross Williams
+ *      http://www.repairfaq.org/filipg/LINK/F_crc_v3.html
+ *
+ *  ITU-T Recommendation V.42 (2002), "Error-Correcting Procedures for
+ *      DCEs using asynchronous-to-synchronous conversion", Para. 8.1.1.6.1
+ */
+
+#include <glib.h>
+#include <epan/tvbuff.h>
+#include <epan/crc16.h>
+
+
+/*****************************************************************/
+
+/*
+ * Table for the CCITT/ITU/CRC-16 16-bit CRC
+ *
+ * Polynomial is
+ *
+ *     x^16 + x^12 + x^5 + 1
+ */
+
+/*                                                               */
+/* CRC LOOKUP TABLE                                              */
+/* ================                                              */
+/* The following CRC lookup table was generated automagically    */
+/* by the Rocksoft^tm Model CRC Algorithm Table Generation       */
+/* Program V1.0 using the following model parameters:            */
+/*                                                               */
+/*    Width   : 2 bytes.                                         */
+/*    Poly    : 0x1021                                           */
+/*    Reverse : TRUE.                                           */
+/*                                                               */
+/* For more information on the Rocksoft^tm Model CRC Algorithm,  */
+/* see the document titled "A Painless Guide to CRC Error        */
+/* Detection Algorithms" by Ross Williams                        */
+/* (ross@xxxxxxxxxxxxxxxxxxxxxx). This document is likely to be  */
+/* in the FTP archive "ftp.adelaide.edu.au/pub/rocksoft".        */
+/*                                                               */
+/*****************************************************************/
+
+static const guint crc16_ccitt_table[256] =
+{
+ 0x0000, 0x1189, 0x2312, 0x329B, 0x4624, 0x57AD, 0x6536, 0x74BF,
+ 0x8C48, 0x9DC1, 0xAF5A, 0xBED3, 0xCA6C, 0xDBE5, 0xE97E, 0xF8F7,
+ 0x1081, 0x0108, 0x3393, 0x221A, 0x56A5, 0x472C, 0x75B7, 0x643E,
+ 0x9CC9, 0x8D40, 0xBFDB, 0xAE52, 0xDAED, 0xCB64, 0xF9FF, 0xE876,
+ 0x2102, 0x308B, 0x0210, 0x1399, 0x6726, 0x76AF, 0x4434, 0x55BD,
+ 0xAD4A, 0xBCC3, 0x8E58, 0x9FD1, 0xEB6E, 0xFAE7, 0xC87C, 0xD9F5,
+ 0x3183, 0x200A, 0x1291, 0x0318, 0x77A7, 0x662E, 0x54B5, 0x453C,
+ 0xBDCB, 0xAC42, 0x9ED9, 0x8F50, 0xFBEF, 0xEA66, 0xD8FD, 0xC974,
+ 0x4204, 0x538D, 0x6116, 0x709F, 0x0420, 0x15A9, 0x2732, 0x36BB,
+ 0xCE4C, 0xDFC5, 0xED5E, 0xFCD7, 0x8868, 0x99E1, 0xAB7A, 0xBAF3,
+ 0x5285, 0x430C, 0x7197, 0x601E, 0x14A1, 0x0528, 0x37B3, 0x263A,
+ 0xDECD, 0xCF44, 0xFDDF, 0xEC56, 0x98E9, 0x8960, 0xBBFB, 0xAA72,
+ 0x6306, 0x728F, 0x4014, 0x519D, 0x2522, 0x34AB, 0x0630, 0x17B9,
+ 0xEF4E, 0xFEC7, 0xCC5C, 0xDDD5, 0xA96A, 0xB8E3, 0x8A78, 0x9BF1,
+ 0x7387, 0x620E, 0x5095, 0x411C, 0x35A3, 0x242A, 0x16B1, 0x0738,
+ 0xFFCF, 0xEE46, 0xDCDD, 0xCD54, 0xB9EB, 0xA862, 0x9AF9, 0x8B70,
+ 0x8408, 0x9581, 0xA71A, 0xB693, 0xC22C, 0xD3A5, 0xE13E, 0xF0B7,
+ 0x0840, 0x19C9, 0x2B52, 0x3ADB, 0x4E64, 0x5FED, 0x6D76, 0x7CFF,
+ 0x9489, 0x8500, 0xB79B, 0xA612, 0xD2AD, 0xC324, 0xF1BF, 0xE036,
+ 0x18C1, 0x0948, 0x3BD3, 0x2A5A, 0x5EE5, 0x4F6C, 0x7DF7, 0x6C7E,
+ 0xA50A, 0xB483, 0x8618, 0x9791, 0xE32E, 0xF2A7, 0xC03C, 0xD1B5,
+ 0x2942, 0x38CB, 0x0A50, 0x1BD9, 0x6F66, 0x7EEF, 0x4C74, 0x5DFD,
+ 0xB58B, 0xA402, 0x9699, 0x8710, 0xF3AF, 0xE226, 0xD0BD, 0xC134,
+ 0x39C3, 0x284A, 0x1AD1, 0x0B58, 0x7FE7, 0x6E6E, 0x5CF5, 0x4D7C,
+ 0xC60C, 0xD785, 0xE51E, 0xF497, 0x8028, 0x91A1, 0xA33A, 0xB2B3,
+ 0x4A44, 0x5BCD, 0x6956, 0x78DF, 0x0C60, 0x1DE9, 0x2F72, 0x3EFB,
+ 0xD68D, 0xC704, 0xF59F, 0xE416, 0x90A9, 0x8120, 0xB3BB, 0xA232,
+ 0x5AC5, 0x4B4C, 0x79D7, 0x685E, 0x1CE1, 0x0D68, 0x3FF3, 0x2E7A,
+ 0xE70E, 0xF687, 0xC41C, 0xD595, 0xA12A, 0xB0A3, 0x8238, 0x93B1,
+ 0x6B46, 0x7ACF, 0x4854, 0x59DD, 0x2D62, 0x3CEB, 0x0E70, 0x1FF9,
+ 0xF78F, 0xE606, 0xD49D, 0xC514, 0xB1AB, 0xA022, 0x92B9, 0x8330,
+ 0x7BC7, 0x6A4E, 0x58D5, 0x495C, 0x3DE3, 0x2C6A, 0x1EF1, 0x0F78
+};
+
+static const guint16 crc16_ccitt_start = 0xFFFF;
+static const guint16 crc16_ccitt_xorout = 0xFFFF;
+
+/* two types of crcs are possible: unreflected (bits shift left) and
+ * reflected (bits shift right).
+ */
+#if 0
+static guint16 crc16_unreflected(const guint8 *buf, guint len,
+                                guint16 crc_in, const guint table[])
+{
+    /* we use guints, rather than guint16s, as they are likely to be
+       faster. We just ignore the top 16 bits and let them do what they want. */
+    guint crc16 = (guint)crc_in;;
+
+    while( len-- != 0 )
+       crc16 = table[(crc16 ^ *buf++) & 0xff] ^ (crc16 << 8);
+
+    return (guint16)crc16;
+}
+#endif
+
+static guint16 crc16_reflected(const guint8 *buf, guint len,
+                                guint16 crc_in, const guint table[])
+{
+    /* we use guints, rather than guint16s, as they are likely to be
+       faster. We just ignore the top 16 bits and let them do what they want.
+       XXX - does any time saved not zero-extending guint16's to 32 bits
+       into a register outweigh any increased cache footprint from the
+       larger CRC table? */
+    guint crc16 = (guint)crc_in;
+
+    while( len-- != 0 )
+       crc16 = table[(crc16 ^ *buf++) & 0xff] ^ (crc16 >> 8);
+
+    return (guint16)crc16;
+}
+
+guint16 crc16_ccitt(const guint8 *buf, guint len)
+{
+    return crc16_reflected(buf,len,crc16_ccitt_start,crc16_ccitt_table)
+       ^ crc16_ccitt_xorout;
+}
+
+guint16 crc16_ccitt_seed(const guint8 *buf, guint len, guint16 seed)
+{
+    return crc16_reflected(buf,len,seed,crc16_ccitt_table)
+       ^ crc16_ccitt_xorout;
+}
+
+guint16 crc16_ccitt_tvb(tvbuff_t *tvb, guint len)
+{
+    const guint8* buf = tvb_get_ptr(tvb, 0, len);
+
+    return crc16_ccitt(buf, len);
+}
+
+guint16 crc16_ccitt_tvb_offset(tvbuff_t *tvb, guint offset, guint len)
+{
+    const guint8* buf = tvb_get_ptr(tvb, offset, len);
+
+    return crc16_ccitt(buf, len);
+}
+
+guint16 crc16_ccitt_tvb_seed(tvbuff_t *tvb, guint len, guint16 seed)
+{
+    const guint8* buf = tvb_get_ptr(tvb, 0, len);
+
+    return crc16_ccitt_seed(buf, len, seed);
+}
+
+guint16 crc16_ccitt_tvb_offset_seed(tvbuff_t *tvb, guint offset, guint len, guint16 seed)
+{
+    const guint8* buf = tvb_get_ptr(tvb, offset, len);
+
+    return crc16_ccitt_seed(buf, len, seed);
+}
+
diff -urN ethereal-0.10.6/epan/crc16.h ethereal-0.10.7/epan/crc16.h
--- ethereal-0.10.6/epan/crc16.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/crc16.h	2004-10-20 17:35:03.000000000 -0500
@@ -0,0 +1,86 @@
+/* crc16.h
+ * Declaration of CRC-16 routines and table
+ *
+ * 2004 Richard van der Hoff <richardv@mxtelecom.com>
+ *
+ * $Id: crc16.h 12117 2004-09-28 00:06:32Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@xxxxxxxxxxxx>
+ * Copyright 1998 Gerald Combs
+ *
+ * Copied from README.developer
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+/* Calculate the CCITT/ITU/CRC-16 16-bit CRC
+
+   (parameters for this CRC are:
+       Polynomial: x^16 + x^12 + x^5 + 1  (0x1021);
+       Start value 0xFFFF;
+       XOR result with 0xFFFF;
+       First bit is LSB)
+*/
+
+/** Compute CRC16 CCITT checksum of a buffer of data.
+ @param buf The buffer containing the data.
+ @param len The number of bytes to include in the computation.
+ @return The CRC16 CCITT checksum. */
+extern guint16 crc16_ccitt(const guint8 *buf, guint len);
+
+/** Compute CRC16 CCITT checksum of a buffer of data.  If computing the
+ *  checksum over multiple buffers and you want to feed the partial CRC16
+ *  back in, remember to take the 1's complement of the partial CRC16 first.
+ @param buf The buffer containing the data.
+ @param len The number of bytes to include in the computation.
+ @param seed The seed to use.
+ @return The CRC16 CCITT checksum (using the given seed). */
+extern guint16 crc16_ccitt_seed(const guint8 *buf, guint len, guint16 seed);
+
+/** Compute CRC16 CCITT checksum of a tv buffer.
+ @param tvb The tv buffer containing the data.
+ @param len The number of bytes to include in the computation.
+ @return The CRC16 CCITT checksum. */
+extern guint16 crc16_ccitt_tvb(tvbuff_t *tvb, guint len);
+
+/** Compute CRC16 CCITT checksum of a tv buffer.
+ @param tvb The tv buffer containing the data.
+ @param offset The offset into the tv buffer.
+ @param len The number of bytes to include in the computation.
+ @return The CRC16 CCITT checksum. */
+extern guint16 crc16_ccitt_tvb_offset(tvbuff_t *tvb, guint offset, guint len);
+
+/** Compute CRC16 CCITT checksum of a tv buffer.  If computing the
+ *  checksum over multiple tv buffers and you want to feed the partial CRC16
+ *  back in, remember to take the 1's complement of the partial CRC16 first.
+ @param tvb The tv buffer containing the data.
+ @param len The number of bytes to include in the computation.
+ @param seed The seed to use.
+ @return The CRC16 CCITT checksum (using the given seed). */
+extern guint16 crc16_ccitt_tvb_seed(tvbuff_t *tvb, guint len, guint16 seed);
+
+/** Compute CRC16 CCITT checksum of a tv buffer.  If computing the
+ *  checksum over multiple tv buffers and you want to feed the partial CRC16
+ *  back in, remember to take the 1's complement of the partial CRC16 first.
+ @param tvb The tv buffer containing the data.
+ @param offset The offset into the tv buffer.
+ @param len The number of bytes to include in the computation.
+ @param seed The seed to use.
+ @return The CRC16 CCITT checksum (using the given seed). */
+extern guint16 crc16_ccitt_tvb_offset_seed(tvbuff_t *tvb, guint offset,
+                                           guint len, guint16 seed);
+
+
diff -urN ethereal-0.10.6/epan/crc32.c ethereal-0.10.7/epan/crc32.c
--- ethereal-0.10.6/epan/crc32.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/crc32.c	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,174 @@
+/* crc32.c
+ * CRC-32 routine
+ *
+ * $Id: crc32.c 12117 2004-09-28 00:06:32Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * Copied from README.developer
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Credits:
+ *
+ * Table from Solomon Peachy
+ * Routine from Chris Waters
+ */
+
+#include <glib.h>
+#include <epan/tvbuff.h>
+#include <epan/crc32.h>
+
+/*
+ * Table for the AUTODIN/HDLC/802.x CRC.
+ *
+ * Polynomial is
+ *
+ *  x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^8 + x^7 +
+ *      x^5 + x^4 + x^2 + x + 1
+ */
+const guint32 crc32_ccitt_table[256] = {
+        0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
+        0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
+        0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
+        0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+        0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
+        0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+        0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
+        0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+        0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
+        0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
+        0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
+        0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+        0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
+        0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
+        0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
+        0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+        0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
+        0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+        0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
+        0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+        0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
+        0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
+        0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
+        0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+        0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
+        0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
+        0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
+        0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+        0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
+        0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+        0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
+        0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+        0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
+        0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
+        0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
+        0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+        0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
+        0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
+        0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
+        0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+        0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
+        0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+        0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
+        0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+        0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
+        0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
+        0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
+        0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+        0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
+        0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
+        0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
+        0x2d02ef8d
+};
+
+#define CRC32_CCITT_SEED    0xFFFFFFFF
+
+guint32
+crc32_ccitt(const guint8 *buf, guint len)
+{
+  return ( crc32_ccitt_seed(buf, len, CRC32_CCITT_SEED) );
+}
+
+guint32
+crc32_ccitt_seed(const guint8 *buf, guint len, guint32 seed)
+{
+  guint i;
+  guint32 crc32 = seed;
+
+  for (i = 0; i < len; i++)
+    crc32 = crc32_ccitt_table[(crc32 ^ buf[i]) & 0xff] ^ (crc32 >> 8);
+
+  return ( ~crc32 );
+}
+
+guint32
+crc32_ccitt_tvb(tvbuff_t *tvb, guint len)
+{
+  const guint8* buf = tvb_get_ptr(tvb, 0, len);
+
+  return ( crc32_ccitt_seed(buf, len, CRC32_CCITT_SEED) );
+}
+
+guint32
+crc32_ccitt_tvb_offset(tvbuff_t *tvb, guint offset, guint len)
+{
+  const guint8* buf = tvb_get_ptr(tvb, offset, len);
+
+  return ( crc32_ccitt(buf, len) );
+}
+
+guint32
+crc32_ccitt_tvb_seed(tvbuff_t *tvb, guint len, guint32 seed)
+{
+  const guint8* buf = tvb_get_ptr(tvb, 0, len);
+
+  return ( crc32_ccitt_seed(buf, len, seed) );
+}
+
+guint32
+crc32_ccitt_tvb_offset_seed(tvbuff_t *tvb, guint offset, guint len, guint32 seed)
+{
+  const guint8* buf = tvb_get_ptr(tvb, offset, len);
+
+  return ( crc32_ccitt_seed(buf, len, seed) );
+}
+
+/*
+ * IEEE 802.x version (Ethernet and 802.11, at least) - byte-swap
+ * the result of "crc32()".
+ *
+ * XXX - does this mean we should fetch the Ethernet and 802.11
+ * FCS with "tvb_get_letohl()" rather than "tvb_get_ntohl()",
+ * or is fetching it big-endian and byte-swapping the CRC done
+ * to cope with 802.x sending stuff out in reverse bit order?
+ */
+guint32
+crc32_802_tvb(tvbuff_t *tvb, guint len)
+{
+  guint32 c_crc;
+
+  c_crc = crc32_ccitt_tvb(tvb, len);
+
+  /* Byte reverse. */
+  c_crc = ((unsigned char)(c_crc>>0)<<24) |
+    ((unsigned char)(c_crc>>8)<<16) |
+    ((unsigned char)(c_crc>>16)<<8) |
+    ((unsigned char)(c_crc>>24)<<0);
+
+  return ( c_crc );
+}
diff -urN ethereal-0.10.6/epan/crc32.h ethereal-0.10.7/epan/crc32.h
--- ethereal-0.10.6/epan/crc32.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/crc32.h	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,82 @@
+/* crc32.h
+ * Declaration of CRC-32 routine and table
+ *
+ * $Id: crc32.h 12117 2004-09-28 00:06:32Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * Copied from README.developer
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+extern const guint32 crc32_ccitt_table[256];
+
+/** Compute CRC32 CCITT checksum of a buffer of data.
+ @param buf The buffer containing the data.
+ @param len The number of bytes to include in the computation.
+ @return The CRC32 CCITT checksum. */
+extern guint32 crc32_ccitt(const guint8 *buf, guint len);
+
+/** Compute CRC32 CCITT checksum of a buffer of data.  If computing the
+ *  checksum over multiple buffers and you want to feed the partial CRC32
+ *  back in, remember to take the 1's complement of the partial CRC32 first.
+ @param buf The buffer containing the data.
+ @param len The number of bytes to include in the computation.
+ @param seed The seed to use.
+ @return The CRC32 CCITT checksum (using the given seed). */
+extern guint32 crc32_ccitt_seed(const guint8 *buf, guint len, guint32 seed);
+
+/** Compute CRC32 CCITT checksum of a tv buffer.
+ @param tvb The tv buffer containing the data.
+ @param len The number of bytes to include in the computation.
+ @return The CRC32 CCITT checksum. */
+extern guint32 crc32_ccitt_tvb(tvbuff_t *tvb, guint len);
+
+/** Compute CRC32 CCITT checksum of a tv buffer.
+ @param tvb The tv buffer containing the data.
+ @param offset The offset into the tv buffer.
+ @param len The number of bytes to include in the computation.
+ @return The CRC32 CCITT checksum. */
+extern guint32 crc32_ccitt_tvb_offset(tvbuff_t *tvb, guint offset, guint len);
+
+/** Compute CRC32 CCITT checksum of a tv buffer.  If computing the
+ *  checksum over multiple tv buffers and you want to feed the partial CRC32
+ *  back in, remember to take the 1's complement of the partial CRC32 first.
+ @param tvb The tv buffer containing the data.
+ @param len The number of bytes to include in the computation.
+ @param seed The seed to use.
+ @return The CRC32 CCITT checksum (using the given seed). */
+extern guint32 crc32_ccitt_tvb_seed(tvbuff_t *tvb, guint len, guint32 seed);
+
+/** Compute CRC32 CCITT checksum of a tv buffer.  If computing the
+ *  checksum over multiple tv buffers and you want to feed the partial CRC32
+ *  back in, remember to take the 1's complement of the partial CRC32 first.
+ @param tvb The tv buffer containing the data.
+ @param offset The offset into the tv buffer.
+ @param len The number of bytes to include in the computation.
+ @param seed The seed to use.
+ @return The CRC32 CCITT checksum (using the given seed). */
+extern guint32 crc32_ccitt_tvb_offset_seed(tvbuff_t *tvb, guint offset,
+                                           guint len, guint32 seed);
+
+/** Compute IEEE 802.x CRC32 checksum of a tv buffer.
+ @param tvb The tv buffer containing the data.
+ @param len The number of bytes to include in the computation.
+ @return The IEEE 802.x CRC32 checksum. */
+extern guint32 crc32_802_tvb(tvbuff_t *tvb, guint len);
+
diff -urN ethereal-0.10.6/epan/crypt-des.c ethereal-0.10.7/epan/crypt-des.c
--- ethereal-0.10.6/epan/crypt-des.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/crypt-des.c	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,313 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   a partial implementation of DES designed for use in the 
+   SMB authentication protocol
+
+   Copyright (C) Andrew Tridgell 1998
+
+   $Id: crypt-des.c 12116 2004-09-27 23:29:22Z guy $
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+#include <glib.h>
+
+#include <epan/crypt-des.h>
+
+/* NOTES: 
+
+   This code makes no attempt to be fast! In fact, it is a very
+   slow implementation 
+
+   This code is NOT a complete DES implementation. It implements only
+   the minimum necessary for SMB authentication, as used by all SMB
+   products (including every copy of Microsoft Windows95 ever sold)
+
+   In particular, it can only do a unchained forward DES pass. This
+   means it is not possible to use this code for encryption/decryption
+   of data, instead it is only useful as a "hash" algorithm.
+
+   There is no entry point into this code that allows normal DES operation.
+
+   I believe this means that this code does not come under ITAR
+   regulations but this is NOT a legal opinion. If you are concerned
+   about the applicability of ITAR regulations to this code then you
+   should confirm it for yourself (and maybe let me know if you come
+   up with a different answer to the one above)
+*/
+
+
+#define uchar unsigned char
+
+static const uchar perm1[56] = {57, 49, 41, 33, 25, 17,  9,
+			 1, 58, 50, 42, 34, 26, 18,
+			10,  2, 59, 51, 43, 35, 27,
+			19, 11,  3, 60, 52, 44, 36,
+			63, 55, 47, 39, 31, 23, 15,
+			 7, 62, 54, 46, 38, 30, 22,
+			14,  6, 61, 53, 45, 37, 29,
+			21, 13,  5, 28, 20, 12,  4};
+
+static const uchar perm2[48] = {14, 17, 11, 24,  1,  5,
+                         3, 28, 15,  6, 21, 10,
+                        23, 19, 12,  4, 26,  8,
+                        16,  7, 27, 20, 13,  2,
+                        41, 52, 31, 37, 47, 55,
+                        30, 40, 51, 45, 33, 48,
+                        44, 49, 39, 56, 34, 53,
+                        46, 42, 50, 36, 29, 32};
+
+static const uchar perm3[64] = {58, 50, 42, 34, 26, 18, 10,  2,
+			60, 52, 44, 36, 28, 20, 12,  4,
+			62, 54, 46, 38, 30, 22, 14,  6,
+			64, 56, 48, 40, 32, 24, 16,  8,
+			57, 49, 41, 33, 25, 17,  9,  1,
+			59, 51, 43, 35, 27, 19, 11,  3,
+			61, 53, 45, 37, 29, 21, 13,  5,
+			63, 55, 47, 39, 31, 23, 15,  7};
+
+static const uchar perm4[48] = {   32,  1,  2,  3,  4,  5,
+                            4,  5,  6,  7,  8,  9,
+                            8,  9, 10, 11, 12, 13,
+                           12, 13, 14, 15, 16, 17,
+                           16, 17, 18, 19, 20, 21,
+                           20, 21, 22, 23, 24, 25,
+                           24, 25, 26, 27, 28, 29,
+                           28, 29, 30, 31, 32,  1};
+
+static const uchar perm5[32] = {      16,  7, 20, 21,
+                              29, 12, 28, 17,
+                               1, 15, 23, 26,
+                               5, 18, 31, 10,
+                               2,  8, 24, 14,
+                              32, 27,  3,  9,
+                              19, 13, 30,  6,
+                              22, 11,  4, 25};
+
+
+static const uchar perm6[64] ={ 40,  8, 48, 16, 56, 24, 64, 32,
+                        39,  7, 47, 15, 55, 23, 63, 31,
+                        38,  6, 46, 14, 54, 22, 62, 30,
+                        37,  5, 45, 13, 53, 21, 61, 29,
+                        36,  4, 44, 12, 52, 20, 60, 28,
+                        35,  3, 43, 11, 51, 19, 59, 27,
+                        34,  2, 42, 10, 50, 18, 58, 26,
+                        33,  1, 41,  9, 49, 17, 57, 25};
+
+
+static const uchar sc[16] = {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1};
+
+static const uchar sbox[8][4][16] = {
+	{{14,  4, 13,  1,  2, 15, 11,  8,  3, 10,  6, 12,  5,  9,  0,  7},
+	 {0, 15,  7,  4, 14,  2, 13,  1, 10,  6, 12, 11,  9,  5,  3,  8},
+	 {4,  1, 14,  8, 13,  6,  2, 11, 15, 12,  9,  7,  3, 10,  5,  0},
+	 {15, 12,  8,  2,  4,  9,  1,  7,  5, 11,  3, 14, 10,  0,  6, 13}},
+
+	{{15,  1,  8, 14,  6, 11,  3,  4,  9,  7,  2, 13, 12,  0,  5, 10},
+	 {3, 13,  4,  7, 15,  2,  8, 14, 12,  0,  1, 10,  6,  9, 11,  5},
+	 {0, 14,  7, 11, 10,  4, 13,  1,  5,  8, 12,  6,  9,  3,  2, 15},
+	 {13,  8, 10,  1,  3, 15,  4,  2, 11,  6,  7, 12,  0,  5, 14,  9}},
+
+	{{10,  0,  9, 14,  6,  3, 15,  5,  1, 13, 12,  7, 11,  4,  2,  8},
+	 {13,  7,  0,  9,  3,  4,  6, 10,  2,  8,  5, 14, 12, 11, 15,  1},
+	 {13,  6,  4,  9,  8, 15,  3,  0, 11,  1,  2, 12,  5, 10, 14,  7},
+	 {1, 10, 13,  0,  6,  9,  8,  7,  4, 15, 14,  3, 11,  5,  2, 12}},
+
+	{{7, 13, 14,  3,  0,  6,  9, 10,  1,  2,  8,  5, 11, 12,  4, 15},
+	 {13,  8, 11,  5,  6, 15,  0,  3,  4,  7,  2, 12,  1, 10, 14,  9},
+	 {10,  6,  9,  0, 12, 11,  7, 13, 15,  1,  3, 14,  5,  2,  8,  4},
+	 {3, 15,  0,  6, 10,  1, 13,  8,  9,  4,  5, 11, 12,  7,  2, 14}},
+
+	{{2, 12,  4,  1,  7, 10, 11,  6,  8,  5,  3, 15, 13,  0, 14,  9},
+	 {14, 11,  2, 12,  4,  7, 13,  1,  5,  0, 15, 10,  3,  9,  8,  6},
+	 {4,  2,  1, 11, 10, 13,  7,  8, 15,  9, 12,  5,  6,  3,  0, 14},
+	 {11,  8, 12,  7,  1, 14,  2, 13,  6, 15,  0,  9, 10,  4,  5,  3}},
+
+	{{12,  1, 10, 15,  9,  2,  6,  8,  0, 13,  3,  4, 14,  7,  5, 11},
+	 {10, 15,  4,  2,  7, 12,  9,  5,  6,  1, 13, 14,  0, 11,  3,  8},
+	 {9, 14, 15,  5,  2,  8, 12,  3,  7,  0,  4, 10,  1, 13, 11,  6},
+	 {4,  3,  2, 12,  9,  5, 15, 10, 11, 14,  1,  7,  6,  0,  8, 13}},
+
+	{{4, 11,  2, 14, 15,  0,  8, 13,  3, 12,  9,  7,  5, 10,  6,  1},
+	 {13,  0, 11,  7,  4,  9,  1, 10, 14,  3,  5, 12,  2, 15,  8,  6},
+	 {1,  4, 11, 13, 12,  3,  7, 14, 10, 15,  6,  8,  0,  5,  9,  2},
+	 {6, 11, 13,  8,  1,  4, 10,  7,  9,  5,  0, 15, 14,  2,  3, 12}},
+
+	{{13,  2,  8,  4,  6, 15, 11,  1, 10,  9,  3, 14,  5,  0, 12,  7},
+	 {1, 15, 13,  8, 10,  3,  7,  4, 12,  5,  6, 11,  0, 14,  9,  2},
+	 {7, 11,  4,  1,  9, 12, 14,  2,  0,  6, 10, 13, 15,  3,  5,  8},
+	 {2,  1, 14,  7,  4, 10,  8, 13, 15, 12,  9,  0,  3,  5,  6, 11}}};
+
+static void permute(char *out, const char *in, const uchar *p, int n)
+{
+	int i;
+	for (i=0;i<n;i++)
+		out[i] = in[p[i]-1];
+}
+
+static void lshift(char *d, int count, int n)
+{
+	char out[64];
+	int i;
+	for (i=0;i<n;i++)
+		out[i] = d[(i+count)%n];
+	for (i=0;i<n;i++)
+		d[i] = out[i];
+}
+
+static void concat(char *out, char *in1, char *in2, int l1, int l2)
+{
+	while (l1--)
+		*out++ = *in1++;
+	while (l2--)
+		*out++ = *in2++;
+}
+
+static void xor(char *out, char *in1, char *in2, int n)
+{
+	int i;
+	for (i=0;i<n;i++)
+		out[i] = in1[i] ^ in2[i];
+}
+
+static void dohash(char *out, char *in, char *key, int forw)
+{
+	int i, j, k;
+	char pk1[56];
+	char c[28];
+	char d[28];
+	char cd[56];
+	char ki[16][48];
+	char pd1[64];
+	char l[32], r[32];
+	char rl[64];
+
+	permute(pk1, key, perm1, 56);
+
+	for (i=0;i<28;i++)
+		c[i] = pk1[i];
+	for (i=0;i<28;i++)
+		d[i] = pk1[i+28];
+
+	for (i=0;i<16;i++) {
+		lshift(c, sc[i], 28);
+		lshift(d, sc[i], 28);
+
+		concat(cd, c, d, 28, 28); 
+		permute(ki[i], cd, perm2, 48); 
+	}
+
+	permute(pd1, in, perm3, 64);
+
+	for (j=0;j<32;j++) {
+		l[j] = pd1[j];
+		r[j] = pd1[j+32];
+	}
+
+	for (i=0;i<16;i++) {
+		char er[48];
+		char erk[48];
+		char b[8][6];
+		char cb[32];
+		char pcb[32];
+		char r2[32];
+
+		permute(er, r, perm4, 48);
+
+		xor(erk, er, ki[forw ? i : 15 - i], 48);
+
+		for (j=0;j<8;j++)
+			for (k=0;k<6;k++)
+				b[j][k] = erk[j*6 + k];
+
+		for (j=0;j<8;j++) {
+			int m, n;
+			m = (b[j][0]<<1) | b[j][5];
+
+			n = (b[j][1]<<3) | (b[j][2]<<2) | (b[j][3]<<1) | b[j][4]; 
+
+			for (k=0;k<4;k++) 
+				b[j][k] = (sbox[j][m][n] & (1<<(3-k)))?1:0; 
+		}
+
+		for (j=0;j<8;j++)
+			for (k=0;k<4;k++)
+				cb[j*4+k] = b[j][k];
+		permute(pcb, cb, perm5, 32);
+
+		xor(r2, l, pcb, 32);
+
+		for (j=0;j<32;j++)
+			l[j] = r[j];
+
+		for (j=0;j<32;j++)
+			r[j] = r2[j];
+	}
+
+	concat(rl, r, l, 32, 32);
+
+	permute(out, rl, perm6, 64);
+}
+
+static void str_to_key(const unsigned char *str,unsigned char *key)
+{
+	int i;
+
+	key[0] = str[0]>>1;
+	key[1] = ((str[0]&0x01)<<6) | (str[1]>>2);
+	key[2] = ((str[1]&0x03)<<5) | (str[2]>>3);
+	key[3] = ((str[2]&0x07)<<4) | (str[3]>>4);
+	key[4] = ((str[3]&0x0F)<<3) | (str[4]>>5);
+	key[5] = ((str[4]&0x1F)<<2) | (str[5]>>6);
+	key[6] = ((str[5]&0x3F)<<1) | (str[6]>>7);
+	key[7] = str[6]&0x7F;
+	for (i=0;i<8;i++) {
+		key[i] = (key[i]<<1);
+	}
+}
+
+
+void crypt_des_ecb(unsigned char *out, const unsigned char *in, const unsigned char *key, int forw)
+{
+	int i;
+	char outb[64];
+	char inb[64];
+	char keyb[64];
+	unsigned char key2[8];
+
+	str_to_key(key, key2);
+
+	for (i=0;i<64;i++) {
+		inb[i] = (in[i/8] & (1<<(7-(i%8)))) ? 1 : 0;
+		keyb[i] = (key2[i/8] & (1<<(7-(i%8)))) ? 1 : 0;
+		outb[i] = 0;
+	}
+
+	dohash(outb, inb, keyb, forw);
+
+	for (i=0;i<8;i++) {
+		out[i] = 0;
+	}
+
+	for (i=0;i<64;i++) {
+		if (outb[i])
+			out[i/8] |= (1<<(7-(i%8)));
+	}
+}
+
diff -urN ethereal-0.10.6/epan/crypt-des.h ethereal-0.10.7/epan/crypt-des.h
--- ethereal-0.10.6/epan/crypt-des.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/crypt-des.h	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,26 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   a partial implementation of DES designed for use in the 
+   SMB authentication protocol
+
+   Copyright (C) Andrew Tridgell 1998
+
+   $Id: crypt-des.h 12116 2004-09-27 23:29:22Z guy $
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+void crypt_des_ecb(unsigned char *out, const unsigned char *in, const unsigned char *key, int forw);
diff -urN ethereal-0.10.6/epan/crypt-md4.c ethereal-0.10.7/epan/crypt-md4.c
--- ethereal-0.10.6/epan/crypt-md4.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/crypt-md4.c	2004-10-20 17:35:03.000000000 -0500
@@ -0,0 +1,178 @@
+/* 
+   Unix SMB/CIFS implementation.
+   a implementation of MD4 designed for use in the SMB authentication protocol
+   Copyright (C) Andrew Tridgell 1997-1998.
+
+   $Id: crypt-md4.c 12116 2004-09-27 23:29:22Z guy $
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <string.h>
+
+#include <epan/crypt-md4.h>
+
+/* NOTE: This code makes no attempt to be fast! 
+
+   It assumes that a int is at least 32 bits long
+*/
+
+static guint32 A, B, C, D;
+
+static guint32 F(guint32 X, guint32 Y, guint32 Z)
+{
+	return (X&Y) | ((~X)&Z);
+}
+
+static guint32 G(guint32 X, guint32 Y, guint32 Z)
+{
+	return (X&Y) | (X&Z) | (Y&Z); 
+}
+
+static guint32 H(guint32 X, guint32 Y, guint32 Z)
+{
+	return X^Y^Z;
+}
+
+static guint32 lshift(guint32 x, int s)
+{
+	x &= 0xFFFFFFFF;
+	return ((x<<s)&0xFFFFFFFF) | (x>>(32-s));
+}
+
+#define ROUND1(a,b,c,d,k,s) a = lshift(a + F(b,c,d) + X[k], s)
+#define ROUND2(a,b,c,d,k,s) a = lshift(a + G(b,c,d) + X[k] + (guint32)0x5A827999,s)
+#define ROUND3(a,b,c,d,k,s) a = lshift(a + H(b,c,d) + X[k] + (guint32)0x6ED9EBA1,s)
+
+/* this applies md4 to 64 byte chunks */
+static void mdfour64(guint32 *M)
+{
+	int j;
+	guint32 AA, BB, CC, DD;
+	guint32 X[16];
+
+	for (j=0;j<16;j++)
+		X[j] = M[j];
+
+	AA = A; BB = B; CC = C; DD = D;
+
+        ROUND1(A,B,C,D,  0,  3);  ROUND1(D,A,B,C,  1,  7);  
+	ROUND1(C,D,A,B,  2, 11);  ROUND1(B,C,D,A,  3, 19);
+        ROUND1(A,B,C,D,  4,  3);  ROUND1(D,A,B,C,  5,  7);  
+	ROUND1(C,D,A,B,  6, 11);  ROUND1(B,C,D,A,  7, 19);
+        ROUND1(A,B,C,D,  8,  3);  ROUND1(D,A,B,C,  9,  7);  
+	ROUND1(C,D,A,B, 10, 11);  ROUND1(B,C,D,A, 11, 19);
+        ROUND1(A,B,C,D, 12,  3);  ROUND1(D,A,B,C, 13,  7);  
+	ROUND1(C,D,A,B, 14, 11);  ROUND1(B,C,D,A, 15, 19);	
+
+        ROUND2(A,B,C,D,  0,  3);  ROUND2(D,A,B,C,  4,  5);  
+	ROUND2(C,D,A,B,  8,  9);  ROUND2(B,C,D,A, 12, 13);
+        ROUND2(A,B,C,D,  1,  3);  ROUND2(D,A,B,C,  5,  5);  
+	ROUND2(C,D,A,B,  9,  9);  ROUND2(B,C,D,A, 13, 13);
+        ROUND2(A,B,C,D,  2,  3);  ROUND2(D,A,B,C,  6,  5);  
+	ROUND2(C,D,A,B, 10,  9);  ROUND2(B,C,D,A, 14, 13);
+        ROUND2(A,B,C,D,  3,  3);  ROUND2(D,A,B,C,  7,  5);  
+	ROUND2(C,D,A,B, 11,  9);  ROUND2(B,C,D,A, 15, 13);
+
+	ROUND3(A,B,C,D,  0,  3);  ROUND3(D,A,B,C,  8,  9);  
+	ROUND3(C,D,A,B,  4, 11);  ROUND3(B,C,D,A, 12, 15);
+        ROUND3(A,B,C,D,  2,  3);  ROUND3(D,A,B,C, 10,  9);  
+	ROUND3(C,D,A,B,  6, 11);  ROUND3(B,C,D,A, 14, 15);
+        ROUND3(A,B,C,D,  1,  3);  ROUND3(D,A,B,C,  9,  9);  
+	ROUND3(C,D,A,B,  5, 11);  ROUND3(B,C,D,A, 13, 15);
+        ROUND3(A,B,C,D,  3,  3);  ROUND3(D,A,B,C, 11,  9);  
+	ROUND3(C,D,A,B,  7, 11);  ROUND3(B,C,D,A, 15, 15);
+
+	A += AA; B += BB; C += CC; D += DD;
+	
+	A &= 0xFFFFFFFF; B &= 0xFFFFFFFF;
+	C &= 0xFFFFFFFF; D &= 0xFFFFFFFF;
+
+	for (j=0;j<16;j++)
+		X[j] = 0;
+}
+
+static void copy64(guint32 *M, const unsigned char *in)
+{
+	int i;
+
+	for (i=0;i<16;i++)
+		M[i] = (in[i*4+3]<<24) | (in[i*4+2]<<16) |
+			(in[i*4+1]<<8) | (in[i*4+0]<<0);
+}
+
+static void copy4(unsigned char *out, guint32 x)
+{
+	out[0] = x&0xFF;
+	out[1] = (x>>8)&0xFF;
+	out[2] = (x>>16)&0xFF;
+	out[3] = (x>>24)&0xFF;
+}
+
+/* produce a md4 message digest from data of length n bytes */
+void crypt_md4(unsigned char *out, const unsigned char *in, int n)
+{
+	unsigned char buf[128];
+	guint32 M[16];
+	guint32 b = n * 8;
+	int i;
+
+	A = 0x67452301;
+	B = 0xefcdab89;
+	C = 0x98badcfe;
+	D = 0x10325476;
+
+	while (n > 64) {
+		copy64(M, in);
+		mdfour64(M);
+		in += 64;
+		n -= 64;
+	}
+
+	for (i=0;i<128;i++)
+		buf[i] = 0;
+	memcpy(buf, in, n);
+	buf[n] = 0x80;
+	
+	if (n <= 55) {
+		copy4(buf+56, b);
+		copy64(M, buf);
+		mdfour64(M);
+	} else {
+		copy4(buf+120, b); 
+		copy64(M, buf);
+		mdfour64(M);
+		copy64(M, buf+64);
+		mdfour64(M);
+	}
+
+	for (i=0;i<128;i++)
+		buf[i] = 0;
+	copy64(M, buf);
+
+	copy4(out, A);
+	copy4(out+4, B);
+	copy4(out+8, C);
+	copy4(out+12, D);
+
+	A = B = C = D = 0;
+}
+
+
diff -urN ethereal-0.10.6/epan/crypt-md4.h ethereal-0.10.7/epan/crypt-md4.h
--- ethereal-0.10.6/epan/crypt-md4.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/crypt-md4.h	2004-10-20 17:35:03.000000000 -0500
@@ -0,0 +1,23 @@
+/* 
+   Unix SMB/CIFS implementation.
+   a implementation of MD4 designed for use in the SMB authentication protocol
+   Copyright (C) Andrew Tridgell 1997-1998.
+
+   $Id: crypt-md4.h 12116 2004-09-27 23:29:22Z guy $
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+void crypt_md4(unsigned char *out, const unsigned char *in, int n);
diff -urN ethereal-0.10.6/epan/crypt-md5.c ethereal-0.10.7/epan/crypt-md5.c
--- ethereal-0.10.6/epan/crypt-md5.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/crypt-md5.c	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,386 @@
+/*
+  Copyright (C) 1999, 2000, 2002 Aladdin Enterprises.  All rights reserved.
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  L. Peter Deutsch
+  ghost@aladdin.com
+
+ */
+/* $Id: crypt-md5.c 12116 2004-09-27 23:29:22Z guy $ */
+/*
+  Independent implementation of MD5 (RFC 1321).
+
+  This code implements the MD5 Algorithm defined in RFC 1321, whose
+  text is available at
+	http://www.ietf.org/rfc/rfc1321.txt
+  The code is derived from the text of the RFC, including the test suite
+  (section A.5) but excluding the rest of Appendix A.  It does not include
+  any code or documentation that is identified in the RFC as being
+  copyrighted.
+
+  The original and principal author of md5.c is L. Peter Deutsch
+  <ghost@aladdin.com>.  Other authors are noted in the change history
+  that follows (in reverse chronological order):
+
+  2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order
+	either statically or dynamically; added missing #include <string.h>
+	in library.
+  2002-03-11 lpd Corrected argument list for main(), and added int return
+	type, in test program and T value program.
+  2002-02-21 lpd Added missing #include <stdio.h> in test program.
+  2000-07-03 lpd Patched to eliminate warnings about "constant is
+	unsigned in ANSI C, signed in traditional"; made test program
+	self-checking.
+  1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
+  1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5).
+  1999-05-03 lpd Original version.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+
+#include <epan/crypt-md5.h>
+
+#undef BYTE_ORDER	/* 1 = big-endian, -1 = little-endian, 0 = unknown */
+#ifdef WORDS_BIGENDIAN
+#  define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1)
+#else
+#  define BYTE_ORDER 0
+#endif
+
+#define T_MASK ((md5_word_t)~0)
+#define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87)
+#define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9)
+#define T3    0x242070db
+#define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111)
+#define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050)
+#define T6    0x4787c62a
+#define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec)
+#define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe)
+#define T9    0x698098d8
+#define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850)
+#define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e)
+#define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841)
+#define T13    0x6b901122
+#define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c)
+#define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71)
+#define T16    0x49b40821
+#define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d)
+#define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf)
+#define T19    0x265e5a51
+#define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855)
+#define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2)
+#define T22    0x02441453
+#define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e)
+#define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437)
+#define T25    0x21e1cde6
+#define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829)
+#define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278)
+#define T28    0x455a14ed
+#define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa)
+#define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07)
+#define T31    0x676f02d9
+#define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375)
+#define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd)
+#define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e)
+#define T35    0x6d9d6122
+#define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3)
+#define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb)
+#define T38    0x4bdecfa9
+#define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f)
+#define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f)
+#define T41    0x289b7ec6
+#define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805)
+#define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a)
+#define T44    0x04881d05
+#define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6)
+#define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a)
+#define T47    0x1fa27cf8
+#define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a)
+#define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb)
+#define T50    0x432aff97
+#define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58)
+#define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6)
+#define T53    0x655b59c3
+#define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d)
+#define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82)
+#define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e)
+#define T57    0x6fa87e4f
+#define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f)
+#define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb)
+#define T60    0x4e0811a1
+#define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d)
+#define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca)
+#define T63    0x2ad7d2bb
+#define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e)
+
+
+static void
+md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
+{
+    md5_word_t
+	a = pms->abcd[0], b = pms->abcd[1],
+	c = pms->abcd[2], d = pms->abcd[3];
+    md5_word_t t;
+#if BYTE_ORDER > 0
+    /* Define storage only for big-endian CPUs. */
+    md5_word_t X[16];
+#else
+    /* Define storage for little-endian or both types of CPUs. */
+    md5_word_t xbuf[16];
+    const md5_word_t *X;
+#endif
+
+    {
+#if BYTE_ORDER == 0
+	/*
+	 * Determine dynamically whether this is a big-endian or
+	 * little-endian machine, since we can use a more efficient
+	 * algorithm on the latter.
+	 */
+	static const int w = 1;
+
+	if (*((const md5_byte_t *)&w)) /* dynamic little-endian */
+#endif
+#if BYTE_ORDER <= 0		/* little-endian */
+	{
+	    /*
+	     * On little-endian machines, we can process properly aligned
+	     * data without copying it.
+	     */
+	    if (!((data - (const md5_byte_t *)0) & 3)) {
+		/* data are properly aligned */
+		X = (const md5_word_t *)data;
+	    } else {
+		/* not aligned */
+		memcpy(xbuf, data, 64);
+		X = xbuf;
+	    }
+	}
+#endif
+#if BYTE_ORDER == 0
+	else			/* dynamic big-endian */
+#endif
+#if BYTE_ORDER >= 0		/* big-endian */
+	{
+	    /*
+	     * On big-endian machines, we must arrange the bytes in the
+	     * right order.
+	     */
+	    const md5_byte_t *xp = data;
+	    int i;
+
+#  if BYTE_ORDER == 0
+	    X = xbuf;		/* (dynamic only) */
+#  else
+#    define xbuf X		/* (static only) */
+#  endif
+	    for (i = 0; i < 16; ++i, xp += 4)
+		xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);
+	}
+#endif
+    }
+
+#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
+
+    /* Round 1. */
+    /* Let [abcd k s i] denote the operation
+       a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
+#define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
+#define SET(a, b, c, d, k, s, Ti)\
+  t = a + F(b,c,d) + X[k] + Ti;\
+  a = ROTATE_LEFT(t, s) + b
+    /* Do the following 16 operations. */
+    SET(a, b, c, d,  0,  7,  T1);
+    SET(d, a, b, c,  1, 12,  T2);
+    SET(c, d, a, b,  2, 17,  T3);
+    SET(b, c, d, a,  3, 22,  T4);
+    SET(a, b, c, d,  4,  7,  T5);
+    SET(d, a, b, c,  5, 12,  T6);
+    SET(c, d, a, b,  6, 17,  T7);
+    SET(b, c, d, a,  7, 22,  T8);
+    SET(a, b, c, d,  8,  7,  T9);
+    SET(d, a, b, c,  9, 12, T10);
+    SET(c, d, a, b, 10, 17, T11);
+    SET(b, c, d, a, 11, 22, T12);
+    SET(a, b, c, d, 12,  7, T13);
+    SET(d, a, b, c, 13, 12, T14);
+    SET(c, d, a, b, 14, 17, T15);
+    SET(b, c, d, a, 15, 22, T16);
+#undef SET
+
+     /* Round 2. */
+     /* Let [abcd k s i] denote the operation
+          a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
+#define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))
+#define SET(a, b, c, d, k, s, Ti)\
+  t = a + G(b,c,d) + X[k] + Ti;\
+  a = ROTATE_LEFT(t, s) + b
+     /* Do the following 16 operations. */
+    SET(a, b, c, d,  1,  5, T17);
+    SET(d, a, b, c,  6,  9, T18);
+    SET(c, d, a, b, 11, 14, T19);
+    SET(b, c, d, a,  0, 20, T20);
+    SET(a, b, c, d,  5,  5, T21);
+    SET(d, a, b, c, 10,  9, T22);
+    SET(c, d, a, b, 15, 14, T23);
+    SET(b, c, d, a,  4, 20, T24);
+    SET(a, b, c, d,  9,  5, T25);
+    SET(d, a, b, c, 14,  9, T26);
+    SET(c, d, a, b,  3, 14, T27);
+    SET(b, c, d, a,  8, 20, T28);
+    SET(a, b, c, d, 13,  5, T29);
+    SET(d, a, b, c,  2,  9, T30);
+    SET(c, d, a, b,  7, 14, T31);
+    SET(b, c, d, a, 12, 20, T32);
+#undef SET
+
+     /* Round 3. */
+     /* Let [abcd k s t] denote the operation
+          a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
+#define H(x, y, z) ((x) ^ (y) ^ (z))
+#define SET(a, b, c, d, k, s, Ti)\
+  t = a + H(b,c,d) + X[k] + Ti;\
+  a = ROTATE_LEFT(t, s) + b
+     /* Do the following 16 operations. */
+    SET(a, b, c, d,  5,  4, T33);
+    SET(d, a, b, c,  8, 11, T34);
+    SET(c, d, a, b, 11, 16, T35);
+    SET(b, c, d, a, 14, 23, T36);
+    SET(a, b, c, d,  1,  4, T37);
+    SET(d, a, b, c,  4, 11, T38);
+    SET(c, d, a, b,  7, 16, T39);
+    SET(b, c, d, a, 10, 23, T40);
+    SET(a, b, c, d, 13,  4, T41);
+    SET(d, a, b, c,  0, 11, T42);
+    SET(c, d, a, b,  3, 16, T43);
+    SET(b, c, d, a,  6, 23, T44);
+    SET(a, b, c, d,  9,  4, T45);
+    SET(d, a, b, c, 12, 11, T46);
+    SET(c, d, a, b, 15, 16, T47);
+    SET(b, c, d, a,  2, 23, T48);
+#undef SET
+
+     /* Round 4. */
+     /* Let [abcd k s t] denote the operation
+          a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
+#define I(x, y, z) ((y) ^ ((x) | ~(z)))
+#define SET(a, b, c, d, k, s, Ti)\
+  t = a + I(b,c,d) + X[k] + Ti;\
+  a = ROTATE_LEFT(t, s) + b
+     /* Do the following 16 operations. */
+    SET(a, b, c, d,  0,  6, T49);
+    SET(d, a, b, c,  7, 10, T50);
+    SET(c, d, a, b, 14, 15, T51);
+    SET(b, c, d, a,  5, 21, T52);
+    SET(a, b, c, d, 12,  6, T53);
+    SET(d, a, b, c,  3, 10, T54);
+    SET(c, d, a, b, 10, 15, T55);
+    SET(b, c, d, a,  1, 21, T56);
+    SET(a, b, c, d,  8,  6, T57);
+    SET(d, a, b, c, 15, 10, T58);
+    SET(c, d, a, b,  6, 15, T59);
+    SET(b, c, d, a, 13, 21, T60);
+    SET(a, b, c, d,  4,  6, T61);
+    SET(d, a, b, c, 11, 10, T62);
+    SET(c, d, a, b,  2, 15, T63);
+    SET(b, c, d, a,  9, 21, T64);
+#undef SET
+
+     /* Then perform the following additions. (That is increment each
+        of the four registers by the value it had before this block
+        was started.) */
+    pms->abcd[0] += a;
+    pms->abcd[1] += b;
+    pms->abcd[2] += c;
+    pms->abcd[3] += d;
+}
+
+void
+md5_init(md5_state_t *pms)
+{
+    pms->count[0] = pms->count[1] = 0;
+    pms->abcd[0] = 0x67452301;
+    pms->abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476;
+    pms->abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301;
+    pms->abcd[3] = 0x10325476;
+}
+
+void
+md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes)
+{
+    const md5_byte_t *p = data;
+    int left = nbytes;
+    int offset = (pms->count[0] >> 3) & 63;
+    md5_word_t nbits = (md5_word_t)(nbytes << 3);
+
+    if (nbytes <= 0)
+	return;
+
+    /* Update the message length. */
+    pms->count[1] += nbytes >> 29;
+    pms->count[0] += nbits;
+    if (pms->count[0] < nbits)
+	pms->count[1]++;
+
+    /* Process an initial partial block. */
+    if (offset) {
+	int copy = (offset + nbytes > 64 ? 64 - offset : nbytes);
+
+	memcpy(pms->buf + offset, p, copy);
+	if (offset + copy < 64)
+	    return;
+	p += copy;
+	left -= copy;
+	md5_process(pms, pms->buf);
+    }
+
+    /* Process full blocks. */
+    for (; left >= 64; p += 64, left -= 64)
+	md5_process(pms, p);
+
+    /* Process a final partial block. */
+    if (left)
+	memcpy(pms->buf, p, left);
+}
+
+void
+md5_finish(md5_state_t *pms, md5_byte_t digest[16])
+{
+    static const md5_byte_t pad[64] = {
+	0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+    };
+    md5_byte_t data[8];
+    int i;
+
+    /* Save the length before padding. */
+    for (i = 0; i < 8; ++i)
+	data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3));
+    /* Pad to 56 bytes mod 64. */
+    md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1);
+    /* Append the length. */
+    md5_append(pms, data, 8);
+    for (i = 0; i < 16; ++i)
+	digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3));
+}
diff -urN ethereal-0.10.6/epan/crypt-md5.h ethereal-0.10.7/epan/crypt-md5.h
--- ethereal-0.10.6/epan/crypt-md5.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/crypt-md5.h	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,91 @@
+/*
+  Copyright (C) 1999, 2002 Aladdin Enterprises.  All rights reserved.
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  L. Peter Deutsch
+  ghost@aladdin.com
+
+ */
+/* $Id: crypt-md5.h 12116 2004-09-27 23:29:22Z guy $ */
+/*
+  Independent implementation of MD5 (RFC 1321).
+
+  This code implements the MD5 Algorithm defined in RFC 1321, whose
+  text is available at
+	http://www.ietf.org/rfc/rfc1321.txt
+  The code is derived from the text of the RFC, including the test suite
+  (section A.5) but excluding the rest of Appendix A.  It does not include
+  any code or documentation that is identified in the RFC as being
+  copyrighted.
+
+  The original and principal author of md5.h is L. Peter Deutsch
+  <ghost@aladdin.com>.  Other authors are noted in the change history
+  that follows (in reverse chronological order):
+
+  2002-04-13 lpd Removed support for non-ANSI compilers; removed
+	references to Ghostscript; clarified derivation from RFC 1321;
+	now handles byte order either statically or dynamically.
+  1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
+  1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
+	added conditionalization for C++ compilation from Martin
+	Purschke <purschke@bnl.gov>.
+  1999-05-03 lpd Original version.
+ */
+
+#ifndef md5_INCLUDED
+#  define md5_INCLUDED
+
+/*
+ * This package supports both compile-time and run-time determination of CPU
+ * byte order.  If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be
+ * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is
+ * defined as non-zero, the code will be compiled to run only on big-endian
+ * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to
+ * run on either big- or little-endian CPUs, but will run slightly less
+ * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined.
+ */
+
+typedef unsigned char md5_byte_t; /* 8-bit byte */
+typedef unsigned int md5_word_t; /* 32-bit word */
+
+/* Define the state of the MD5 Algorithm. */
+typedef struct md5_state_s {
+    md5_word_t count[2];	/* message length in bits, lsw first */
+    md5_word_t abcd[4];		/* digest buffer */
+    md5_byte_t buf[64];		/* accumulate block */
+} md5_state_t;
+
+#ifdef __cplusplus
+extern "C" 
+{
+#endif
+
+/* Initialize the algorithm. */
+void md5_init(md5_state_t *pms);
+
+/* Append a string to the message. */
+void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes);
+
+/* Finish the message and return the digest. */
+void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
+
+#ifdef __cplusplus
+}  /* end extern "C" */
+#endif
+
+#endif /* md5_INCLUDED */
diff -urN ethereal-0.10.6/epan/crypt-rc4.c ethereal-0.10.7/epan/crypt-rc4.c
--- ethereal-0.10.6/epan/crypt-rc4.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/crypt-rc4.c	2004-10-20 17:35:04.000000000 -0500
@@ -0,0 +1,104 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   a partial implementation of RC4 designed for use in the 
+   SMB authentication protocol
+
+   Copyright (C) Andrew Tridgell 1998
+
+   $Id: crypt-rc4.c 12116 2004-09-27 23:29:22Z guy $
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <string.h>
+
+#include <epan/crypt-rc4.h>
+
+/* Perform RC4 on a block of data using specified key.  "data" is a pointer
+   to the block to be processed.  Output is written to same memory as input,
+   so caller may need to make a copy before calling this function, since
+   the input will be overwritten.  
+   
+   Taken from Samba source code.  Modified to allow us to maintain state
+   between calls to crypt_rc4.
+*/
+
+void crypt_rc4_init(rc4_state_struct *rc4_state, 
+		    const unsigned char *key, int key_len)
+{
+  int ind;
+  unsigned char j = 0;
+  unsigned char *s_box;
+
+  memset(rc4_state, 0, sizeof(rc4_state_struct));
+  s_box = rc4_state->s_box;
+  
+  for (ind = 0; ind < 256; ind++)
+  {
+    s_box[ind] = (unsigned char)ind;
+  }
+
+  for( ind = 0; ind < 256; ind++)
+  {
+     unsigned char tc;
+
+     j += (s_box[ind] + key[ind%key_len]);
+
+     tc = s_box[ind];
+     s_box[ind] = s_box[j];
+     s_box[j] = tc;
+  }
+
+}
+
+void crypt_rc4(rc4_state_struct *rc4_state, unsigned char *data, int data_len)
+{
+  unsigned char *s_box;
+  unsigned char index_i;
+  unsigned char index_j;
+  int ind;
+
+  /* retrieve current state from the state struct (so we can resume where
+     we left off) */
+  index_i = rc4_state->index_i;
+  index_j = rc4_state->index_j;
+  s_box = rc4_state->s_box;
+
+  for( ind = 0; ind < data_len; ind++)
+  {
+    unsigned char tc;
+    unsigned char t;
+
+    index_i++;
+    index_j += s_box[index_i];
+
+    tc = s_box[index_i];
+    s_box[index_i] = s_box[index_j];
+    s_box[index_j] = tc;
+
+    t = s_box[index_i] + s_box[index_j];
+    data[ind] = data[ind] ^ s_box[t];
+  }
+
+  /* Store the updated state */
+  rc4_state->index_i = index_i;
+  rc4_state->index_j = index_j;
+}
diff -urN ethereal-0.10.6/epan/crypt-rc4.h ethereal-0.10.7/epan/crypt-rc4.h
--- ethereal-0.10.6/epan/crypt-rc4.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/crypt-rc4.h	2004-10-20 17:35:04.000000000 -0500
@@ -0,0 +1,36 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   a partial implementation of RC4 designed for use in the 
+   SMB authentication protocol
+
+   Copyright (C) Andrew Tridgell 1998
+
+   $Id: crypt-rc4.h 12116 2004-09-27 23:29:22Z guy $
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+typedef struct _rc4_state_struct {
+  unsigned char s_box[256];
+  unsigned char index_i;
+  unsigned char index_j;
+} rc4_state_struct;
+
+void crypt_rc4_init(rc4_state_struct *rc4_state, 
+		    const unsigned char *key, int key_len);
+
+void crypt_rc4(rc4_state_struct *rc4_state, unsigned char *data, int data_len);
+
diff -urN ethereal-0.10.6/epan/dfilter/Makefile.in ethereal-0.10.7/epan/dfilter/Makefile.in
--- ethereal-0.10.6/epan/dfilter/Makefile.in	2004-08-12 21:04:19.000000000 -0500
+++ ethereal-0.10.7/epan/dfilter/Makefile.in	2004-10-20 21:50:16.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -97,6 +97,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -108,10 +111,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -192,8 +198,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -509,7 +515,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -531,7 +537,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -556,7 +561,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/epan/dissectors/Makefile.common ethereal-0.10.7/epan/dissectors/Makefile.common
--- ethereal-0.10.6/epan/dissectors/Makefile.common	2004-08-12 17:42:04.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/Makefile.common	2004-10-20 17:34:43.000000000 -0500
@@ -3,7 +3,7 @@
 #     a) common to both files and
 #     b) portable between both files
 #
-# $Id: Makefile.common 11630 2004-08-09 01:53:26Z jmayer $
+# $Id: Makefile.common 12229 2004-10-07 09:28:28Z etxrab $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -46,6 +46,7 @@
 	packet-aim-chat.c	\
 	packet-aim-chatnav.c \
 	packet-aim-directory.c	\
+	packet-aim-email.c \
 	packet-aim-generic.c	\
 	packet-aim-icq.c \
 	packet-aim-invitation.c \
@@ -55,6 +56,7 @@
 	packet-aim-popup.c \
 	packet-aim-signon.c \
 	packet-aim-ssi.c \
+	packet-aim-sst.c \
 	packet-aim-stats.c \
 	packet-aim-translate.c \
 	packet-aim-userlookup.c \
@@ -96,6 +98,7 @@
 	packet-cdp.c	\
 	packet-cgmp.c	\
 	packet-chdlc.c	\
+	packet-cip.c	\
 	packet-cisco-oui.c	\
 	packet-clearcase.c	\
 	packet-clip.c	\
@@ -106,6 +109,7 @@
 	packet-cpfi.c	\
 	packet-cpha.c	\
 	packet-cups.c	\
+	packet-daap.c	\
 	packet-data.c	\
 	packet-dccp.c	\
 	packet-dcerpc-afs4int.c	\
@@ -134,6 +138,8 @@
 	packet-dcerpc-ftserver.c	\
 	packet-dcerpc-icl_rpc.c	\
 	packet-dcerpc-initshutdown.c	\
+	packet-dcerpc-iremunkn.c	\
+	packet-dcerpc-iremunkn2.c	\
 	packet-dcerpc-krb5rpc.c	\
 	packet-dcerpc-llb.c	\
 	packet-dcerpc-lsa-ds.c	\
@@ -174,6 +180,7 @@
 	packet-dcerpc-spoolss.c	\
 	packet-dcerpc-srvsvc.c	\
 	packet-dcerpc-svcctl.c	\
+	packet-dcerpc-sysact.c	\
 	packet-dcerpc-tapi.c	\
 	packet-dcerpc-tkn4int.c	\
 	packet-dcerpc-trksvr.c	\
@@ -206,6 +213,7 @@
 	packet-enrp.c	\
 	packet-esis.c	\
 	packet-eth.c	\
+	packet-etheric.c	\
 	packet-etherip.c	\
 	packet-ethertype.c	\
 	packet-fc.c	\
@@ -246,6 +254,7 @@
 	packet-h225.c	\
 	packet-h235.c	\
 	packet-h245.c	\
+	packet-h248.c	\
 	packet-h261.c	\
 	packet-h263.c	\
 	packet-h450.c	\
@@ -258,6 +267,7 @@
 	packet-iax2.c	\
 	packet-ib.c	\
 	packet-icap.c	\
+	packet-icep.c	\
 	packet-icmpv6.c	\
 	packet-icp.c	\
 	packet-icq.c	\
@@ -297,6 +307,7 @@
 	packet-jabber.c	\
 	packet-kadm5.c	\
 	packet-kerberos.c	\
+	packet-kerberos4.c	\
 	packet-klm.c	\
 	packet-kpasswd.c	\
 	packet-l2tp.c	\
@@ -309,12 +320,14 @@
 	packet-llc.c	\
 	packet-lmi.c	\
 	packet-lmp.c	\
+	packet-loop.c	\
 	packet-lpd.c	\
 	packet-lwapp.c	\
 	packet-m2pa.c	\
 	packet-m2tp.c	\
 	packet-m2ua.c	\
 	packet-m3ua.c	\
+	packet-maccontrol.c	\
 	packet-manolito.c	\
 	packet-mbtcp.c	\
 	packet-mdshdr.c	\
@@ -354,6 +367,7 @@
 	packet-nlm.c	\
 	packet-nlsp.c	\
 	packet-nntp.c	\
+	packet-ns_cert_exts.c	\
 	packet-nt-oui.c	\
 	packet-nt-sonmp.c	\
 	packet-nt-tpcp.c	\
@@ -364,12 +378,16 @@
 	packet-osi-options.c	\
 	packet-osi.c	\
 	packet-ospf.c	\
+	packet-pagp.c	\
 	packet-pcnfsd.c	\
 	packet-per.c	\
 	packet-pflog.c	\
 	packet-pgm.c	\
 	packet-pim.c	\
 	packet-pkcs1.c	\
+	packet-pkix1explicit.c	\
+	packet-pkix1implicit.c	\
+	packet-pkinit.c	\
 	packet-pktc.c	\
 	packet-pop.c	\
 	packet-portmap.c	\
@@ -459,6 +477,7 @@
 	packet-syslog.c	\
 	packet-t38.c	\
 	packet-tacacs.c	\
+	packet-tali.c	\
 	packet-tcap.c	\
 	packet-tcp.c	\
 	packet-tds.c	\
@@ -533,6 +552,7 @@
 	packet-bootparams.h	\
 	packet-bssap.h	\
 	packet-chdlc.h	\
+	packet-cip.h	\
 	packet-clearcase.h	\
 	packet-clip.h	\
 	packet-cms.h	\
@@ -597,6 +617,7 @@
 	packet-h225.h	\
 	packet-h235.h	\
 	packet-h245.h	\
+	packet-h248.h	\
 	packet-hclnfsd.h	\
 	packet-hpext.h	\
 	packet-http.h	\
@@ -646,6 +667,9 @@
 	packet-pflog.h	\
 	packet-pim.h	\
 	packet-pkcs1.h	\
+	packet-pkix1explicit.h	\
+	packet-pkix1implicit.h	\
+	packet-pkinit.h	\
 	packet-pktc.h	\
 	packet-portmap.h	\
 	packet-ppp.h	\
diff -urN ethereal-0.10.6/epan/dissectors/Makefile.in ethereal-0.10.7/epan/dissectors/Makefile.in
--- ethereal-0.10.6/epan/dissectors/Makefile.in	2004-08-12 21:04:20.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/Makefile.in	2004-10-20 21:50:16.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -41,7 +41,7 @@
 #     a) common to both files and
 #     b) portable between both files
 #
-# $Id: Makefile.common 11630 2004-08-09 01:53:26Z jmayer $
+# $Id: Makefile.common 12229 2004-10-07 09:28:28Z etxrab $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -121,6 +121,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -132,10 +135,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -216,8 +222,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -291,6 +297,7 @@
 	packet-aim-chat.c	\
 	packet-aim-chatnav.c \
 	packet-aim-directory.c	\
+	packet-aim-email.c \
 	packet-aim-generic.c	\
 	packet-aim-icq.c \
 	packet-aim-invitation.c \
@@ -300,6 +307,7 @@
 	packet-aim-popup.c \
 	packet-aim-signon.c \
 	packet-aim-ssi.c \
+	packet-aim-sst.c \
 	packet-aim-stats.c \
 	packet-aim-translate.c \
 	packet-aim-userlookup.c \
@@ -341,6 +349,7 @@
 	packet-cdp.c	\
 	packet-cgmp.c	\
 	packet-chdlc.c	\
+	packet-cip.c	\
 	packet-cisco-oui.c	\
 	packet-clearcase.c	\
 	packet-clip.c	\
@@ -351,6 +360,7 @@
 	packet-cpfi.c	\
 	packet-cpha.c	\
 	packet-cups.c	\
+	packet-daap.c	\
 	packet-data.c	\
 	packet-dccp.c	\
 	packet-dcerpc-afs4int.c	\
@@ -379,6 +389,8 @@
 	packet-dcerpc-ftserver.c	\
 	packet-dcerpc-icl_rpc.c	\
 	packet-dcerpc-initshutdown.c	\
+	packet-dcerpc-iremunkn.c	\
+	packet-dcerpc-iremunkn2.c	\
 	packet-dcerpc-krb5rpc.c	\
 	packet-dcerpc-llb.c	\
 	packet-dcerpc-lsa-ds.c	\
@@ -419,6 +431,7 @@
 	packet-dcerpc-spoolss.c	\
 	packet-dcerpc-srvsvc.c	\
 	packet-dcerpc-svcctl.c	\
+	packet-dcerpc-sysact.c	\
 	packet-dcerpc-tapi.c	\
 	packet-dcerpc-tkn4int.c	\
 	packet-dcerpc-trksvr.c	\
@@ -451,6 +464,7 @@
 	packet-enrp.c	\
 	packet-esis.c	\
 	packet-eth.c	\
+	packet-etheric.c	\
 	packet-etherip.c	\
 	packet-ethertype.c	\
 	packet-fc.c	\
@@ -491,6 +505,7 @@
 	packet-h225.c	\
 	packet-h235.c	\
 	packet-h245.c	\
+	packet-h248.c	\
 	packet-h261.c	\
 	packet-h263.c	\
 	packet-h450.c	\
@@ -503,6 +518,7 @@
 	packet-iax2.c	\
 	packet-ib.c	\
 	packet-icap.c	\
+	packet-icep.c	\
 	packet-icmpv6.c	\
 	packet-icp.c	\
 	packet-icq.c	\
@@ -542,6 +558,7 @@
 	packet-jabber.c	\
 	packet-kadm5.c	\
 	packet-kerberos.c	\
+	packet-kerberos4.c	\
 	packet-klm.c	\
 	packet-kpasswd.c	\
 	packet-l2tp.c	\
@@ -554,12 +571,14 @@
 	packet-llc.c	\
 	packet-lmi.c	\
 	packet-lmp.c	\
+	packet-loop.c	\
 	packet-lpd.c	\
 	packet-lwapp.c	\
 	packet-m2pa.c	\
 	packet-m2tp.c	\
 	packet-m2ua.c	\
 	packet-m3ua.c	\
+	packet-maccontrol.c	\
 	packet-manolito.c	\
 	packet-mbtcp.c	\
 	packet-mdshdr.c	\
@@ -599,6 +618,7 @@
 	packet-nlm.c	\
 	packet-nlsp.c	\
 	packet-nntp.c	\
+	packet-ns_cert_exts.c	\
 	packet-nt-oui.c	\
 	packet-nt-sonmp.c	\
 	packet-nt-tpcp.c	\
@@ -609,12 +629,16 @@
 	packet-osi-options.c	\
 	packet-osi.c	\
 	packet-ospf.c	\
+	packet-pagp.c	\
 	packet-pcnfsd.c	\
 	packet-per.c	\
 	packet-pflog.c	\
 	packet-pgm.c	\
 	packet-pim.c	\
 	packet-pkcs1.c	\
+	packet-pkix1explicit.c	\
+	packet-pkix1implicit.c	\
+	packet-pkinit.c	\
 	packet-pktc.c	\
 	packet-pop.c	\
 	packet-portmap.c	\
@@ -704,6 +728,7 @@
 	packet-syslog.c	\
 	packet-t38.c	\
 	packet-tacacs.c	\
+	packet-tali.c	\
 	packet-tcap.c	\
 	packet-tcp.c	\
 	packet-tds.c	\
@@ -779,6 +804,7 @@
 	packet-bootparams.h	\
 	packet-bssap.h	\
 	packet-chdlc.h	\
+	packet-cip.h	\
 	packet-clearcase.h	\
 	packet-clip.h	\
 	packet-cms.h	\
@@ -843,6 +869,7 @@
 	packet-h225.h	\
 	packet-h235.h	\
 	packet-h245.h	\
+	packet-h248.h	\
 	packet-hclnfsd.h	\
 	packet-hpext.h	\
 	packet-http.h	\
@@ -892,6 +919,9 @@
 	packet-pflog.h	\
 	packet-pim.h	\
 	packet-pkcs1.h	\
+	packet-pkix1explicit.h	\
+	packet-pkix1implicit.h	\
+	packet-pkinit.h	\
 	packet-pktc.h	\
 	packet-portmap.h	\
 	packet-ppp.h	\
@@ -1037,26 +1067,27 @@
 	packet-aim-adverts.lo packet-aim-admin.lo packet-aim-bos.lo \
 	packet-aim-buddylist.lo packet-aim-chat.lo \
 	packet-aim-chatnav.lo packet-aim-directory.lo \
-	packet-aim-generic.lo packet-aim-icq.lo \
+	packet-aim-email.lo packet-aim-generic.lo packet-aim-icq.lo \
 	packet-aim-invitation.lo packet-aim-location.lo \
 	packet-aim-messaging.lo packet-aim-oft.lo packet-aim-popup.lo \
-	packet-aim-signon.lo packet-aim-ssi.lo packet-aim-stats.lo \
-	packet-aim-translate.lo packet-aim-userlookup.lo \
-	packet-ajp13.lo packet-alcap.lo packet-ans.lo \
-	packet-ansi_637.lo packet-ansi_683.lo packet-ansi_801.lo \
-	packet-ansi_a.lo packet-ansi_map.lo packet-aodv.lo \
-	packet-ap1394.lo packet-arcnet.lo packet-arp.lo packet-asap.lo \
-	packet-ascend.lo packet-asf.lo packet-atalk.lo packet-atm.lo \
-	packet-auto_rp.lo packet-ax4000.lo packet-bacapp.lo \
-	packet-bacnet.lo packet-beep.lo packet-ber.lo packet-bfd.lo \
-	packet-bgp.lo packet-bofl.lo packet-bootp.lo \
+	packet-aim-signon.lo packet-aim-ssi.lo packet-aim-sst.lo \
+	packet-aim-stats.lo packet-aim-translate.lo \
+	packet-aim-userlookup.lo packet-ajp13.lo packet-alcap.lo \
+	packet-ans.lo packet-ansi_637.lo packet-ansi_683.lo \
+	packet-ansi_801.lo packet-ansi_a.lo packet-ansi_map.lo \
+	packet-aodv.lo packet-ap1394.lo packet-arcnet.lo packet-arp.lo \
+	packet-asap.lo packet-ascend.lo packet-asf.lo packet-atalk.lo \
+	packet-atm.lo packet-auto_rp.lo packet-ax4000.lo \
+	packet-bacapp.lo packet-bacnet.lo packet-beep.lo packet-ber.lo \
+	packet-bfd.lo packet-bgp.lo packet-bofl.lo packet-bootp.lo \
 	packet-bootparams.lo packet-bpdu.lo packet-brdwlk.lo \
 	packet-bssap.lo packet-bssgp.lo packet-bvlc.lo packet-cast.lo \
 	packet-ccsds.lo packet-cdp.lo packet-cgmp.lo packet-chdlc.lo \
-	packet-cisco-oui.lo packet-clearcase.lo packet-clip.lo \
-	packet-clnp.lo packet-cms.lo packet-cops.lo packet-cosine.lo \
-	packet-cpfi.lo packet-cpha.lo packet-cups.lo packet-data.lo \
-	packet-dccp.lo packet-dcerpc-afs4int.lo packet-dcerpc-atsvc.lo \
+	packet-cip.lo packet-cisco-oui.lo packet-clearcase.lo \
+	packet-clip.lo packet-clnp.lo packet-cms.lo packet-cops.lo \
+	packet-cosine.lo packet-cpfi.lo packet-cpha.lo packet-cups.lo \
+	packet-daap.lo packet-data.lo packet-dccp.lo \
+	packet-dcerpc-afs4int.lo packet-dcerpc-atsvc.lo \
 	packet-dcerpc-bossvr.lo packet-dcerpc-browser.lo \
 	packet-dcerpc-budb.lo packet-dcerpc-butc.lo \
 	packet-dcerpc-cds_clerkserver.lo packet-dcerpc-cds_solicit.lo \
@@ -1068,7 +1099,8 @@
 	packet-dcerpc-eventlog.lo packet-dcerpc-fldb.lo \
 	packet-dcerpc-frsapi.lo packet-dcerpc-frsrpc.lo \
 	packet-dcerpc-ftserver.lo packet-dcerpc-icl_rpc.lo \
-	packet-dcerpc-initshutdown.lo packet-dcerpc-krb5rpc.lo \
+	packet-dcerpc-initshutdown.lo packet-dcerpc-iremunkn.lo \
+	packet-dcerpc-iremunkn2.lo packet-dcerpc-krb5rpc.lo \
 	packet-dcerpc-llb.lo packet-dcerpc-lsa-ds.lo \
 	packet-dcerpc-lsa.lo packet-dcerpc-mapi.lo \
 	packet-dcerpc-messenger.lo packet-dcerpc-mgmt.lo \
@@ -1088,34 +1120,35 @@
 	packet-dcerpc-rs_unix.lo packet-dcerpc-rsec_login.lo \
 	packet-dcerpc-samr.lo packet-dcerpc-secidmap.lo \
 	packet-dcerpc-spoolss.lo packet-dcerpc-srvsvc.lo \
-	packet-dcerpc-svcctl.lo packet-dcerpc-tapi.lo \
-	packet-dcerpc-tkn4int.lo packet-dcerpc-trksvr.lo \
-	packet-dcerpc-ubikdisk.lo packet-dcerpc-ubikvote.lo \
-	packet-dcerpc-update.lo packet-dcerpc-wkssvc.lo \
-	packet-dcerpc.lo packet-dcm.lo packet-ddtp.lo \
-	packet-dec-bpdu.lo packet-dhcp-failover.lo packet-dhcpv6.lo \
-	packet-diameter.lo packet-diffserv-mpls-common.lo \
-	packet-distcc.lo packet-dlsw.lo packet-dnp.lo packet-dns.lo \
-	packet-dsi.lo packet-dvmrp.lo packet-e164.lo packet-eap.lo \
-	packet-eapol.lo packet-echo.lo packet-edonkey.lo \
-	packet-eigrp.lo packet-enc.lo packet-enip.lo packet-enrp.lo \
-	packet-esis.lo packet-eth.lo packet-etherip.lo \
-	packet-ethertype.lo packet-fc.lo packet-fcct.lo packet-fcdns.lo \
-	packet-fcels.lo packet-fcfcs.lo packet-fcfzs.lo packet-fcip.lo \
-	packet-fclctl.lo packet-fcp.lo packet-fcsb3.lo packet-fcsp.lo \
-	packet-fcswils.lo packet-fddi.lo packet-fix.lo packet-fr.lo \
-	packet-frame.lo packet-ftam.lo packet-ftp.lo packet-fw1.lo \
-	packet-gift.lo packet-giop.lo packet-gmrp.lo packet-gnutella.lo \
-	packet-gprs-llc.lo packet-gprs-ns.lo packet-gre.lo \
-	packet-gsm_a.lo packet-gsm_map.lo packet-gsm_sms.lo \
-	packet-gsm_sms_ud.lo packet-gsm_ss.lo packet-gssapi.lo \
-	packet-gtp.lo packet-gvrp.lo packet-h1.lo packet-h225.lo \
-	packet-h235.lo packet-h245.lo packet-h261.lo packet-h263.lo \
-	packet-h450.lo packet-hclnfsd.lo packet-hpext.lo packet-hsrp.lo \
-	packet-http.lo packet-hyperscsi.lo packet-iapp.lo \
-	packet-iax2.lo packet-ib.lo packet-icap.lo packet-icmpv6.lo \
-	packet-icp.lo packet-icq.lo packet-ieee80211.lo \
-	packet-ieee8023.lo packet-igap.lo packet-igmp.lo packet-igrp.lo \
+	packet-dcerpc-svcctl.lo packet-dcerpc-sysact.lo \
+	packet-dcerpc-tapi.lo packet-dcerpc-tkn4int.lo \
+	packet-dcerpc-trksvr.lo packet-dcerpc-ubikdisk.lo \
+	packet-dcerpc-ubikvote.lo packet-dcerpc-update.lo \
+	packet-dcerpc-wkssvc.lo packet-dcerpc.lo packet-dcm.lo \
+	packet-ddtp.lo packet-dec-bpdu.lo packet-dhcp-failover.lo \
+	packet-dhcpv6.lo packet-diameter.lo \
+	packet-diffserv-mpls-common.lo packet-distcc.lo packet-dlsw.lo \
+	packet-dnp.lo packet-dns.lo packet-dsi.lo packet-dvmrp.lo \
+	packet-e164.lo packet-eap.lo packet-eapol.lo packet-echo.lo \
+	packet-edonkey.lo packet-eigrp.lo packet-enc.lo packet-enip.lo \
+	packet-enrp.lo packet-esis.lo packet-eth.lo packet-etheric.lo \
+	packet-etherip.lo packet-ethertype.lo packet-fc.lo \
+	packet-fcct.lo packet-fcdns.lo packet-fcels.lo packet-fcfcs.lo \
+	packet-fcfzs.lo packet-fcip.lo packet-fclctl.lo packet-fcp.lo \
+	packet-fcsb3.lo packet-fcsp.lo packet-fcswils.lo packet-fddi.lo \
+	packet-fix.lo packet-fr.lo packet-frame.lo packet-ftam.lo \
+	packet-ftp.lo packet-fw1.lo packet-gift.lo packet-giop.lo \
+	packet-gmrp.lo packet-gnutella.lo packet-gprs-llc.lo \
+	packet-gprs-ns.lo packet-gre.lo packet-gsm_a.lo \
+	packet-gsm_map.lo packet-gsm_sms.lo packet-gsm_sms_ud.lo \
+	packet-gsm_ss.lo packet-gssapi.lo packet-gtp.lo packet-gvrp.lo \
+	packet-h1.lo packet-h225.lo packet-h235.lo packet-h245.lo \
+	packet-h248.lo packet-h261.lo packet-h263.lo packet-h450.lo \
+	packet-hclnfsd.lo packet-hpext.lo packet-hsrp.lo packet-http.lo \
+	packet-hyperscsi.lo packet-iapp.lo packet-iax2.lo packet-ib.lo \
+	packet-icap.lo packet-icep.lo packet-icmpv6.lo packet-icp.lo \
+	packet-icq.lo packet-ieee80211.lo packet-ieee8023.lo \
+	packet-igap.lo packet-igmp.lo packet-igrp.lo \
 	packet-image-gif.lo packet-image-jfif.lo packet-imap.lo \
 	packet-ip.lo packet-ipdc.lo packet-ipfc.lo packet-ipmi.lo \
 	packet-ipp.lo packet-ipsec-udp.lo packet-ipsec.lo \
@@ -1125,12 +1158,13 @@
 	packet-isis-lsp.lo packet-isis-snp.lo packet-isis.lo \
 	packet-isl.lo packet-ismp.lo packet-isns.lo packet-isup.lo \
 	packet-iua.lo packet-jabber.lo packet-kadm5.lo \
-	packet-kerberos.lo packet-klm.lo packet-kpasswd.lo \
-	packet-l2tp.lo packet-lapb.lo packet-lapbether.lo \
-	packet-lapd.lo packet-laplink.lo packet-ldap.lo packet-ldp.lo \
-	packet-llc.lo packet-lmi.lo packet-lmp.lo packet-lpd.lo \
-	packet-lwapp.lo packet-m2pa.lo packet-m2tp.lo packet-m2ua.lo \
-	packet-m3ua.lo packet-manolito.lo packet-mbtcp.lo \
+	packet-kerberos.lo packet-kerberos4.lo packet-klm.lo \
+	packet-kpasswd.lo packet-l2tp.lo packet-lapb.lo \
+	packet-lapbether.lo packet-lapd.lo packet-laplink.lo \
+	packet-ldap.lo packet-ldp.lo packet-llc.lo packet-lmi.lo \
+	packet-lmp.lo packet-loop.lo packet-lpd.lo packet-lwapp.lo \
+	packet-m2pa.lo packet-m2tp.lo packet-m2ua.lo packet-m3ua.lo \
+	packet-maccontrol.lo packet-manolito.lo packet-mbtcp.lo \
 	packet-mdshdr.lo packet-media.lo packet-mip.lo packet-mip6.lo \
 	packet-mmse.lo packet-mount.lo packet-mpeg1.lo packet-mpls.lo \
 	packet-mpls-echo.lo packet-mq.lo packet-mq-pcf.lo \
@@ -1141,44 +1175,46 @@
 	packet-ncp-nmas.lo packet-ndmp.lo packet-ndps.lo \
 	packet-netbios.lo packet-netflow.lo packet-nfs.lo \
 	packet-nfsacl.lo packet-nfsauth.lo packet-nisplus.lo \
-	packet-nlm.lo packet-nlsp.lo packet-nntp.lo packet-nt-oui.lo \
-	packet-nt-sonmp.lo packet-nt-tpcp.lo packet-ntlmssp.lo \
-	packet-ntp.lo packet-null.lo packet-olsr.lo \
-	packet-osi-options.lo packet-osi.lo packet-ospf.lo \
-	packet-pcnfsd.lo packet-per.lo packet-pflog.lo packet-pgm.lo \
-	packet-pim.lo packet-pkcs1.lo packet-pktc.lo packet-pop.lo \
-	packet-portmap.lo packet-postgresql.lo packet-ppp.lo \
-	packet-pppoe.lo packet-pptp.lo packet-pres.lo packet-prism.lo \
-	packet-ptp.lo packet-q2931.lo packet-q931.lo packet-q933.lo \
-	packet-qllc.lo packet-quake.lo packet-quake2.lo \
-	packet-quake3.lo packet-quakeworld.lo packet-radius.lo \
-	packet-radiotap.lo packet-ranap.lo packet-raw.lo packet-rip.lo \
-	packet-ripng.lo packet-rlogin.lo packet-rmcp.lo packet-rmi.lo \
-	packet-rmp.lo packet-rpc.lo packet-rpl.lo packet-rquota.lo \
-	packet-rsh.lo packet-rstat.lo packet-rsvp.lo packet-rsync.lo \
-	packet-rtcp.lo packet-rtp-events.lo packet-rtp.lo \
-	packet-rtps.lo packet-rtsp.lo packet-rwall.lo packet-rx.lo \
-	packet-sadmind.lo packet-sap.lo packet-sccp.lo packet-sccpmg.lo \
-	packet-scsi.lo packet-sctp.lo packet-sdlc.lo packet-sdp.lo \
-	packet-sebek.lo packet-ses.lo packet-sflow.lo packet-sip.lo \
-	packet-sigcomp.lo packet-sipfrag.lo packet-skinny.lo \
-	packet-slimp3.lo packet-sll.lo packet-slowprotocols.lo \
-	packet-slsk.lo packet-smb-browse.lo packet-smb-common.lo \
-	packet-smb-logon.lo packet-smb-mailslot.lo packet-smb-pipe.lo \
+	packet-nlm.lo packet-nlsp.lo packet-nntp.lo \
+	packet-ns_cert_exts.lo packet-nt-oui.lo packet-nt-sonmp.lo \
+	packet-nt-tpcp.lo packet-ntlmssp.lo packet-ntp.lo \
+	packet-null.lo packet-olsr.lo packet-osi-options.lo \
+	packet-osi.lo packet-ospf.lo packet-pagp.lo packet-pcnfsd.lo \
+	packet-per.lo packet-pflog.lo packet-pgm.lo packet-pim.lo \
+	packet-pkcs1.lo packet-pkix1explicit.lo packet-pkix1implicit.lo \
+	packet-pkinit.lo packet-pktc.lo packet-pop.lo packet-portmap.lo \
+	packet-postgresql.lo packet-ppp.lo packet-pppoe.lo \
+	packet-pptp.lo packet-pres.lo packet-prism.lo packet-ptp.lo \
+	packet-q2931.lo packet-q931.lo packet-q933.lo packet-qllc.lo \
+	packet-quake.lo packet-quake2.lo packet-quake3.lo \
+	packet-quakeworld.lo packet-radius.lo packet-radiotap.lo \
+	packet-ranap.lo packet-raw.lo packet-rip.lo packet-ripng.lo \
+	packet-rlogin.lo packet-rmcp.lo packet-rmi.lo packet-rmp.lo \
+	packet-rpc.lo packet-rpl.lo packet-rquota.lo packet-rsh.lo \
+	packet-rstat.lo packet-rsvp.lo packet-rsync.lo packet-rtcp.lo \
+	packet-rtp-events.lo packet-rtp.lo packet-rtps.lo \
+	packet-rtsp.lo packet-rwall.lo packet-rx.lo packet-sadmind.lo \
+	packet-sap.lo packet-sccp.lo packet-sccpmg.lo packet-scsi.lo \
+	packet-sctp.lo packet-sdlc.lo packet-sdp.lo packet-sebek.lo \
+	packet-ses.lo packet-sflow.lo packet-sip.lo packet-sigcomp.lo \
+	packet-sipfrag.lo packet-skinny.lo packet-slimp3.lo \
+	packet-sll.lo packet-slowprotocols.lo packet-slsk.lo \
+	packet-smb-browse.lo packet-smb-common.lo packet-smb-logon.lo \
+	packet-smb-mailslot.lo packet-smb-pipe.lo \
 	packet-smb-sidsnooping.lo packet-smb.lo packet-smpp.lo \
 	packet-smtp.lo packet-sna.lo packet-snaeth.lo packet-sndcp.lo \
 	packet-snmp.lo packet-socks.lo packet-spnego.lo packet-spray.lo \
 	packet-srvloc.lo packet-sscop.lo packet-ssh.lo packet-ssl.lo \
 	packet-stat-notify.lo packet-stat.lo packet-stun.lo \
 	packet-sua.lo packet-symantec.lo packet-syslog.lo packet-t38.lo \
-	packet-tacacs.lo packet-tcap.lo packet-tcp.lo packet-tds.lo \
-	packet-teimanagement.lo packet-telnet.lo packet-teredo.lo \
-	packet-text-media.lo packet-tftp.lo packet-time.lo \
-	packet-tns.lo packet-tpkt.lo packet-tr.lo packet-trmac.lo \
-	packet-tsp.lo packet-tuxedo.lo packet-tzsp.lo packet-ucp.lo \
-	packet-udp.lo packet-v120.lo packet-vines.lo packet-vj.lo \
-	packet-vlan.lo packet-vrrp.lo packet-vtp.lo packet-wap.lo \
-	packet-wbxml.lo packet-wccp.lo packet-wcp.lo \
+	packet-tacacs.lo packet-tali.lo packet-tcap.lo packet-tcp.lo \
+	packet-tds.lo packet-teimanagement.lo packet-telnet.lo \
+	packet-teredo.lo packet-text-media.lo packet-tftp.lo \
+	packet-time.lo packet-tns.lo packet-tpkt.lo packet-tr.lo \
+	packet-trmac.lo packet-tsp.lo packet-tuxedo.lo packet-tzsp.lo \
+	packet-ucp.lo packet-udp.lo packet-v120.lo packet-vines.lo \
+	packet-vj.lo packet-vlan.lo packet-vrrp.lo packet-vtp.lo \
+	packet-wap.lo packet-wbxml.lo packet-wccp.lo packet-wcp.lo \
 	packet-wfleet-hdlc.lo packet-who.lo packet-windows-common.lo \
 	packet-wlancap.lo packet-wsp.lo packet-wtls.lo packet-wtp.lo \
 	packet-x11.lo packet-x25.lo packet-x29.lo packet-x509af.lo \
@@ -1206,6 +1242,7 @@
 @AMDEP_TRUE@	./$(DEPDIR)/packet-aim-chat.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-aim-chatnav.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-aim-directory.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-aim-email.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-aim-generic.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-aim-icq.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-aim-invitation.Plo \
@@ -1215,6 +1252,7 @@
 @AMDEP_TRUE@	./$(DEPDIR)/packet-aim-popup.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-aim-signon.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-aim-ssi.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-aim-sst.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-aim-stats.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-aim-translate.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-aim-userlookup.Plo \
@@ -1257,6 +1295,7 @@
 @AMDEP_TRUE@	./$(DEPDIR)/packet-cdp.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-cgmp.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-chdlc.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-cip.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-cisco-oui.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-clearcase.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-clip.Plo \
@@ -1267,6 +1306,7 @@
 @AMDEP_TRUE@	./$(DEPDIR)/packet-cpfi.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-cpha.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-cups.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-daap.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-data.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-dccp.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-dcerpc-afs4int.Plo \
@@ -1295,6 +1335,8 @@
 @AMDEP_TRUE@	./$(DEPDIR)/packet-dcerpc-ftserver.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-dcerpc-icl_rpc.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-dcerpc-initshutdown.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-dcerpc-iremunkn.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-dcerpc-iremunkn2.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-dcerpc-krb5rpc.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-dcerpc-llb.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-dcerpc-lsa-ds.Plo \
@@ -1336,6 +1378,7 @@
 @AMDEP_TRUE@	./$(DEPDIR)/packet-dcerpc-spoolss.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-dcerpc-srvsvc.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-dcerpc-svcctl.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-dcerpc-sysact.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-dcerpc-tapi.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-dcerpc-tkn4int.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-dcerpc-trksvr.Plo \
@@ -1368,6 +1411,7 @@
 @AMDEP_TRUE@	./$(DEPDIR)/packet-enrp.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-esis.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-eth.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-etheric.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-etherip.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-ethertype.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-fc.Plo \
@@ -1408,6 +1452,7 @@
 @AMDEP_TRUE@	./$(DEPDIR)/packet-h225.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-h235.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-h245.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-h248.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-h261.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-h263.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-h450.Plo \
@@ -1420,6 +1465,7 @@
 @AMDEP_TRUE@	./$(DEPDIR)/packet-iax2.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-ib.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-icap.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-icep.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-icmpv6.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-icp.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-icq.Plo \
@@ -1459,6 +1505,7 @@
 @AMDEP_TRUE@	./$(DEPDIR)/packet-jabber.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-kadm5.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-kerberos.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-kerberos4.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-klm.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-kpasswd.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-l2tp.Plo \
@@ -1471,12 +1518,14 @@
 @AMDEP_TRUE@	./$(DEPDIR)/packet-llc.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-lmi.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-lmp.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-loop.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-lpd.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-lwapp.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-m2pa.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-m2tp.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-m2ua.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-m3ua.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-maccontrol.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-manolito.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-mbtcp.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-mdshdr.Plo \
@@ -1516,6 +1565,7 @@
 @AMDEP_TRUE@	./$(DEPDIR)/packet-nlm.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-nlsp.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-nntp.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-ns_cert_exts.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-nt-oui.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-nt-sonmp.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-nt-tpcp.Plo \
@@ -1526,12 +1576,16 @@
 @AMDEP_TRUE@	./$(DEPDIR)/packet-osi-options.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-osi.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-ospf.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-pagp.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-pcnfsd.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-per.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-pflog.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-pgm.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-pim.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-pkcs1.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-pkinit.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-pkix1explicit.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-pkix1implicit.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-pktc.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-pop.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-portmap.Plo \
@@ -1621,6 +1675,7 @@
 @AMDEP_TRUE@	./$(DEPDIR)/packet-syslog.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-t38.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-tacacs.Plo \
+@AMDEP_TRUE@	./$(DEPDIR)/packet-tali.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-tcap.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-tcp.Plo \
 @AMDEP_TRUE@	./$(DEPDIR)/packet-tds.Plo \
@@ -1729,6 +1784,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-aim-chat.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-aim-chatnav.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-aim-directory.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-aim-email.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-aim-generic.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-aim-icq.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-aim-invitation.Plo@am__quote@
@@ -1738,6 +1794,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-aim-popup.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-aim-signon.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-aim-ssi.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-aim-sst.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-aim-stats.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-aim-translate.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-aim-userlookup.Plo@am__quote@
@@ -1780,6 +1837,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-cdp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-cgmp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-chdlc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-cip.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-cisco-oui.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-clearcase.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-clip.Plo@am__quote@
@@ -1790,6 +1848,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-cpfi.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-cpha.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-cups.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-daap.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-data.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dccp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dcerpc-afs4int.Plo@am__quote@
@@ -1818,6 +1877,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dcerpc-ftserver.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dcerpc-icl_rpc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dcerpc-initshutdown.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dcerpc-iremunkn.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dcerpc-iremunkn2.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dcerpc-krb5rpc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dcerpc-llb.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dcerpc-lsa-ds.Plo@am__quote@
@@ -1859,6 +1920,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dcerpc-spoolss.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dcerpc-srvsvc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dcerpc-svcctl.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dcerpc-sysact.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dcerpc-tapi.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dcerpc-tkn4int.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-dcerpc-trksvr.Plo@am__quote@
@@ -1891,6 +1953,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-enrp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-esis.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-eth.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-etheric.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-etherip.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-ethertype.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-fc.Plo@am__quote@
@@ -1931,6 +1994,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-h225.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-h235.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-h245.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-h248.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-h261.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-h263.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-h450.Plo@am__quote@
@@ -1943,6 +2007,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-iax2.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-ib.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-icap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-icep.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-icmpv6.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-icp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-icq.Plo@am__quote@
@@ -1982,6 +2047,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-jabber.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-kadm5.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-kerberos.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-kerberos4.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-klm.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-kpasswd.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-l2tp.Plo@am__quote@
@@ -1994,12 +2060,14 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-llc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-lmi.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-lmp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-loop.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-lpd.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-lwapp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-m2pa.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-m2tp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-m2ua.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-m3ua.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-maccontrol.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-manolito.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-mbtcp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-mdshdr.Plo@am__quote@
@@ -2039,6 +2107,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-nlm.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-nlsp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-nntp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-ns_cert_exts.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-nt-oui.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-nt-sonmp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-nt-tpcp.Plo@am__quote@
@@ -2049,12 +2118,16 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-osi-options.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-osi.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-ospf.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-pagp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-pcnfsd.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-per.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-pflog.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-pgm.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-pim.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-pkcs1.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-pkinit.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-pkix1explicit.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-pkix1implicit.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-pktc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-pop.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-portmap.Plo@am__quote@
@@ -2144,6 +2217,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-syslog.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-t38.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-tacacs.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-tali.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-tcap.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-tcp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-tds.Plo@am__quote@
@@ -2344,7 +2418,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -2368,7 +2442,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -2393,7 +2466,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/epan/dissectors/Makefile.nmake ethereal-0.10.7/epan/dissectors/Makefile.nmake
--- ethereal-0.10.6/epan/dissectors/Makefile.nmake	2004-08-12 17:42:05.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/Makefile.nmake	2004-10-20 17:34:43.000000000 -0500
@@ -1,7 +1,7 @@
 ## Makefile for building ethereal.exe with Microsoft C and nmake
 ## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake
 #
-# $Id: Makefile.nmake 11541 2004-07-27 18:57:52Z guy $
+# $Id: Makefile.nmake 12304 2004-10-15 15:36:12Z gerald $
 
 include ..\..\config.nmake
 
@@ -11,7 +11,8 @@
 
 CFLAGS=-DHAVE_CONFIG_H /I. /I.. /I../.. $(GLIB_CFLAGS) \
 	/I$(NET_SNMP_DIR)\include /I$(NET_SNMP_DIR)\win32 \
-	$(PCRE_CFLAGS) /I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
+	$(PCRE_CFLAGS) $(NETTLE_CFLAGS) \
+	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
 CVARSDLL=-DWIN32 -DNULL=0 -D_MT -D_DLL 
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-acse.c ethereal-0.10.7/epan/dissectors/packet-acse.c
--- ethereal-0.10.6/epan/dissectors/packet-acse.c	2004-08-12 17:42:25.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-acse.c	2004-10-20 17:34:54.000000000 -0500
@@ -2,7 +2,7 @@
 *
 * Routine to dissect OSI ACSE Protocol packets
 *
-* $Id: packet-acse.c 11410 2004-07-18 18:06:47Z gram $
+* $Id: packet-acse.c 12115 2004-09-27 22:55:15Z guy $
 *
 * Yuriy Sidelnikov <YSidelnikov@hotmail.com>
 *
@@ -37,7 +37,7 @@
 
 #include "packet-acse.h"
 #include "packet-frame.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #include <epan/strutil.h>
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-admin.c ethereal-0.10.7/epan/dissectors/packet-aim-admin.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-admin.c	2004-08-12 17:42:05.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-admin.c	2004-10-20 17:34:44.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for AIM (OSCAR) dissection, Administration Service
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  *
- * $Id: packet-aim-admin.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-admin.c 12063 2004-09-22 08:04:40Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -41,28 +41,6 @@
 
 #define FAMILY_ADMIN      0x0007
 
-/* Family Admin */
-#define FAMILY_ADMIN_ERROR            0x0001
-#define FAMILY_ADMIN_ACCNT_INFO_REQ   0x0002
-#define FAMILY_ADMIN_ACCNT_INFO_REPL  0x0003
-#define FAMILY_ADMIN_INFOCHANGEREQ    0x0004
-#define FAMILY_ADMIN_INFOCHANGEREPLY  0x0005
-#define FAMILY_ADMIN_ACCT_CFRM_REQ    0x0006
-#define FAMILY_ADMIN_ACCT_CFRM_REPL   0x0007
-#define FAMILY_ADMIN_DEFAULT          0xffff
-
-static const value_string aim_fnac_family_admin[] = {
-  { FAMILY_ADMIN_ERROR, "Error" },
-  { FAMILY_ADMIN_ACCNT_INFO_REQ, "Request Account Information" },
-  { FAMILY_ADMIN_ACCNT_INFO_REPL, "Requested Account Information" },
-  { FAMILY_ADMIN_INFOCHANGEREQ, "Infochange Request" },
-  { FAMILY_ADMIN_INFOCHANGEREPLY, "Infochange Reply" },
-  { FAMILY_ADMIN_ACCT_CFRM_REQ, "Account Confirm Request" },
-  { FAMILY_ADMIN_ACCT_CFRM_REPL, "Account Confirm Reply" },
-  { FAMILY_ADMIN_DEFAULT, "Adminstrative Default" },
-  { 0, NULL }
-};
-
 #define CONFIRM_STATUS_EMAIL_SENT 		 0x00
 #define CONFIRM_STATUS_ALREADY_CONFIRMED 0x1E
 #define CONFIRM_STATUS_SERVER_ERROR	     0x23
@@ -83,51 +61,43 @@
 /* Initialize the subtree pointers */
 static gint ett_aim_admin          = -1;
 
-static int dissect_aim_admin(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
-	struct aiminfo *aiminfo = pinfo->private_data;
-    proto_item *ti = NULL;
-    proto_tree *admin_tree = NULL;
+static int dissect_aim_admin_accnt_info_req(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *admin_tree) 
+{
+	proto_tree_add_item(admin_tree, hf_admin_acctinfo_code, tvb, 0, 2, tvb_get_ntohs(tvb, 0)); 
+	proto_tree_add_text(admin_tree, tvb, 2, 2, "Unknown");
+	return 4;
+}
+
+static int dissect_aim_admin_accnt_info_repl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *admin_tree) 
+{
 	int offset = 0;
-                                                                                
-    if(tree) {
-        ti = proto_tree_add_text(tree, tvb, 0, -1,"AIM Administration Service");
-        admin_tree = proto_item_add_subtree(ti, ett_aim_admin);
-    }
-	
-	switch(aiminfo->subtype) {
-	case FAMILY_ADMIN_ERROR:
-		return dissect_aim_snac_error(tvb, pinfo, 0, admin_tree);
-	case FAMILY_ADMIN_ACCNT_INFO_REQ:
-		proto_tree_add_item(admin_tree, hf_admin_acctinfo_code, tvb, 0, 2, tvb_get_ntohs(tvb, 0)); 
-		proto_tree_add_text(admin_tree, tvb, 2, 2, "Unknown");
-		return 4;
-		
-	case FAMILY_ADMIN_INFOCHANGEREPLY:
-    case FAMILY_ADMIN_ACCNT_INFO_REPL:
-		{
-			proto_tree_add_uint(admin_tree, hf_admin_acctinfo_permissions, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
-			return dissect_aim_tlv_list(tvb, pinfo, offset, admin_tree, client_tlvs);
-		}
-	case FAMILY_ADMIN_INFOCHANGEREQ:
-		while(tvb_length_remaining(tvb, offset) > 0) {
-			offset = dissect_aim_tlv(tvb, pinfo, offset, admin_tree, client_tlvs);
-		}
-		return offset;
-	case FAMILY_ADMIN_ACCT_CFRM_REQ:
-		/* No data */
-		return 0;
-	case FAMILY_ADMIN_ACCT_CFRM_REPL:
-		proto_tree_add_uint(admin_tree, hf_admin_confirm_status, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
-		while(tvb_length_remaining(tvb, offset) > 0) {
-			offset = dissect_aim_tlv(tvb, pinfo, offset, admin_tree, client_tlvs);
-		}
-		return offset;
-
-	default: return 0;
-	}
-	return 0;
+	proto_tree_add_uint(admin_tree, hf_admin_acctinfo_permissions, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
+	return dissect_aim_tlv_list(tvb, pinfo, offset, admin_tree, client_tlvs);
 }
 
+static int dissect_aim_admin_info_change_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *admin_tree) 
+{
+	return dissect_aim_tlv_sequence(tvb, pinfo, 0, admin_tree, client_tlvs);
+}
+
+static int dissect_aim_admin_cfrm_repl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *admin_tree) 
+{
+	int offset = 0;	
+	proto_tree_add_uint(admin_tree, hf_admin_confirm_status, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
+	return dissect_aim_tlv_sequence(tvb, pinfo, offset, admin_tree, client_tlvs);
+}
+
+static const aim_subtype aim_fnac_family_admin[] = {
+  { 0x0001, "Error", dissect_aim_snac_error },
+  { 0x0002, "Request Account Information", dissect_aim_admin_accnt_info_req },
+  { 0x0003, "Requested Account Information", dissect_aim_admin_accnt_info_repl },
+  { 0x0004, "Infochange Request", dissect_aim_admin_info_change_req },
+  { 0x0005, "Infochange Reply", dissect_aim_admin_accnt_info_repl },
+  { 0x0006, "Account Confirm Request", NULL },
+  { 0x0007, "Account Confirm Reply", dissect_aim_admin_cfrm_repl},
+  { 0, NULL, NULL }
+};
+
 /* Register the protocol with Ethereal */
 void
 proto_register_aim_admin(void)
@@ -162,9 +132,5 @@
 void
 proto_reg_handoff_aim_admin(void)
 {
-  dissector_handle_t aim_handle;
-
-  aim_handle = new_create_dissector_handle(dissect_aim_admin, proto_aim_admin);
-  dissector_add("aim.family", FAMILY_ADMIN, aim_handle);
-  aim_init_family(FAMILY_ADMIN, "Administration", aim_fnac_family_admin);
+  aim_init_family(proto_aim_admin, ett_aim_admin, FAMILY_ADMIN, aim_fnac_family_admin);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-adverts.c ethereal-0.10.7/epan/dissectors/packet-aim-adverts.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-adverts.c	2004-08-12 17:42:05.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-adverts.c	2004-10-20 17:34:43.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for AIM (OSCAR) dissection, SNAC Advertisements
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  *
- * $Id: packet-aim-adverts.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-adverts.c 12060 2004-09-21 08:01:29Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -41,52 +41,23 @@
 
 #define FAMILY_ADVERTS    0x0005
 
-/* Family Advertising */
-#define FAMILY_ADVERTS_ERROR          0x0001
-#define FAMILY_ADVERTS_REQUEST        0x0002
-#define FAMILY_ADVERTS_DATA           0x0003
-#define FAMILY_ADVERTS_DEFAULT        0xffff
-
-static const value_string aim_fnac_family_adverts[] = {
-  { FAMILY_ADVERTS_ERROR, "Error" },
-  { FAMILY_ADVERTS_REQUEST, "Request" },
-  { FAMILY_ADVERTS_DATA, "Data (GIF)" },
-  { FAMILY_ADVERTS_DEFAULT, "Adverts Default" },
-  { 0, NULL }
+static const aim_subtype aim_fnac_family_adverts[] = {
+  { 0x0001, "Error", dissect_aim_snac_error },
+  { 0x0002, "Request", NULL },
+	/* FIXME: */
+	/* From other sources, I understand this response contains 
+	 * a GIF file, haven't actually seen one though. And this
+	 * family appears to be deprecated, so we might never find out.. */
+  { 0x0003, "Data (GIF)", NULL },
+  { 0, NULL, NULL }
 };
 
-
 /* Initialize the protocol and registered fields */
 static int proto_aim_adverts = -1;
 
 /* Initialize the subtree pointers */
 static gint ett_aim_adverts      = -1;
 
-static int dissect_aim_adverts(tvbuff_t *tvb _U_, 
-				     packet_info *pinfo _U_, 
-				     proto_tree *tree _U_)
-{
-	struct aiminfo *aiminfo = pinfo->private_data;
-	int offset = 0;
-
-	switch(aiminfo->subtype) {
-		case FAMILY_ADVERTS_ERROR:
-		return dissect_aim_snac_error(tvb, pinfo, offset, tree);
-		break;
-		case FAMILY_ADVERTS_REQUEST:
-			/* FIXME */
-		return 0;
-		case FAMILY_ADVERTS_DATA:
-			/* FIXME: */
-			/* From other sources, I understand this response contains 
-			 * a GIF file, haven't actually seen one though. And this
-			 * family appears to be deprecated, so we might never find out.. */
-		return 0;
-	}
-
-	return 0;
-}
-
 /* Register the protocol with Ethereal */
 void
 proto_register_aim_adverts(void)
@@ -114,8 +85,5 @@
 void
 proto_reg_handoff_aim_adverts(void)
 {
-  dissector_handle_t aim_handle;
-  aim_handle = new_create_dissector_handle(dissect_aim_adverts, proto_aim_adverts);
-  dissector_add("aim.family", FAMILY_ADVERTS, aim_handle);
-  aim_init_family(FAMILY_ADVERTS, "Advertisements", aim_fnac_family_adverts);
+  aim_init_family(proto_aim_adverts, ett_aim_adverts, FAMILY_ADVERTS, aim_fnac_family_adverts);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-bos.c ethereal-0.10.7/epan/dissectors/packet-aim-bos.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-bos.c	2004-08-12 17:42:04.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-bos.c	2004-10-20 17:34:43.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for AIM (OSCAR) dissection, SNAC BOS
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  *
- * $Id: packet-aim-bos.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-bos.c 12063 2004-09-22 08:04:40Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -42,28 +42,6 @@
 #define FAMILY_BOS        0x0009
 
 /* Family BOS (Misc) */
-#define FAMILY_BOS_ERROR              0x0001
-#define FAMILY_BOS_RIGHTSQUERY        0x0002
-#define FAMILY_BOS_RIGHTS             0x0003
-#define FAMILY_BOS_SET_GROUP_PERM     0x0004
-#define FAMILY_BOS_ADD_TO_VISIBLE     0x0005
-#define FAMILY_BOS_DEL_FROM_VISIBLE   0x0006
-#define FAMILY_BOS_ADD_TO_INVISIBLE   0x0007
-#define FAMILY_BOS_DEL_FROM_INVISIBLE 0x0008
-#define FAMILY_BOS_DEFAULT            0xffff
-
-static const value_string aim_fnac_family_bos[] = {
-  { FAMILY_BOS_ERROR, "Error" },
-  { FAMILY_BOS_RIGHTSQUERY, "Rights Query" },
-  { FAMILY_BOS_RIGHTS, "Rights" },
-  { FAMILY_BOS_SET_GROUP_PERM, "Set Group Permissions Mask" },
-  { FAMILY_BOS_ADD_TO_VISIBLE, "Add To Visible List" },
-  { FAMILY_BOS_DEL_FROM_VISIBLE, "Delete From Visible List" },
-  { FAMILY_BOS_ADD_TO_INVISIBLE, "Add To Invisible List" },
-  { FAMILY_BOS_DEL_FROM_INVISIBLE, "Delete From Invisible List" },
-  { FAMILY_BOS_DEFAULT, "BOS Default" },
-  { 0, NULL }
-};
 
 #define CLASS_UNCONFIRMED 			 0x0001
 #define CLASS_ADMINISTRATOR			 0x0002
@@ -95,45 +73,26 @@
 /* Initialize the subtree pointers */
 static gint ett_aim_bos      = -1;
 
-static int dissect_aim_bos(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
-	struct aiminfo *aiminfo = pinfo->private_data;
+static int dissect_aim_bos_set_group_perm(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *bos_tree) 
+{
 	int offset = 0;
-	proto_item *ti;
-	proto_tree *bos_tree = NULL;
-	guint32 userclass;
-
-	if(tree) {
-		ti = proto_tree_add_text(tree, tvb, 0, -1,"AIM Privacy Management Service");
-		bos_tree = proto_item_add_subtree(ti, ett_aim_bos);
-	}
+	guint32 userclass = tvb_get_ntohl(tvb, offset);
+	proto_item *ti = proto_tree_add_uint(bos_tree, hf_aim_bos_class, tvb, offset, 4, userclass); 
+	return dissect_aim_userclass(tvb, offset, 4, ti, userclass);
+}
+
+static int dissect_aim_bos_rights(tvbuff_t *tvb, packet_info *pinfo, proto_tree *bos_tree) 
+{
+	return dissect_aim_tlv_sequence(tvb, pinfo, 0, bos_tree, privacy_tlvs);
+}
 
-	switch(aiminfo->subtype) {
-		case FAMILY_BOS_ERROR:
-			return dissect_aim_snac_error(tvb, pinfo, offset, bos_tree);
-		case FAMILY_BOS_RIGHTSQUERY:
-			/* No data */
-			return 0;
-		case FAMILY_BOS_SET_GROUP_PERM:
-			userclass = tvb_get_ntohl(tvb, offset);
-			ti = proto_tree_add_uint(bos_tree, hf_aim_bos_class, tvb, offset, 4, userclass); 
-			return dissect_aim_userclass(tvb, offset, 4, ti, userclass);
-		case FAMILY_BOS_RIGHTS:
-			while(tvb_reported_length_remaining(tvb, offset) > 0) {
-				offset = dissect_aim_tlv(tvb, pinfo, offset, bos_tree, privacy_tlvs);
-			}
-			return offset;
-		case FAMILY_BOS_ADD_TO_VISIBLE:
-		case FAMILY_BOS_DEL_FROM_VISIBLE:
-	  	case FAMILY_BOS_ADD_TO_INVISIBLE:
-	  	case FAMILY_BOS_DEL_FROM_INVISIBLE:
-			while(tvb_reported_length_remaining(tvb, offset) > 0) {
-				offset = dissect_aim_buddyname(tvb, pinfo, offset, bos_tree);
-			}
-			return offset;
-			
-		default:
-			return 0;
+static int dissect_aim_bos_buddyname(tvbuff_t *tvb, packet_info *pinfo, proto_tree *bos_tree) 
+{
+	int offset = 0;
+	while(tvb_reported_length_remaining(tvb, offset) > 0) {
+		offset = dissect_aim_buddyname(tvb, pinfo, offset, bos_tree);
 	}
+	return offset;
 }
 
 /* Register the protocol with Ethereal */
@@ -141,35 +100,43 @@
 proto_register_aim_bos(void)
 {
 
-/* Setup list of header fields */
-  static hf_register_info hf[] = {
-    { &hf_aim_bos_data,
-      { "Data", "aim.data", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL }
-    },
-	{ &hf_aim_bos_class,
-	   { "User class", "aim.bos.userclass", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL },
-	},
-  };
-
-/* Setup protocol subtree array */
-  static gint *ett[] = {
-    &ett_aim_bos,
-  };
-
-/* Register the protocol name and description */
-  proto_aim_bos = proto_register_protocol("AIM Privacy Management Service", "AIM BOS", "aim_bos");
-
-/* Required function calls to register the header fields and subtrees used */
-  proto_register_field_array(proto_aim_bos, hf, array_length(hf));
-  proto_register_subtree_array(ett, array_length(ett));
+	/* Setup list of header fields */
+	static hf_register_info hf[] = {
+		{ &hf_aim_bos_data,
+			{ "Data", "aim.data", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL }
+		},
+		{ &hf_aim_bos_class,
+			{ "User class", "aim.bos.userclass", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL },
+		},
+	};
+
+	/* Setup protocol subtree array */
+	static gint *ett[] = {
+		&ett_aim_bos,
+	};
+
+	/* Register the protocol name and description */
+	proto_aim_bos = proto_register_protocol("AIM Privacy Management Service", "AIM BOS", "aim_bos");
+
+	/* Required function calls to register the header fields and subtrees used */
+	proto_register_field_array(proto_aim_bos, hf, array_length(hf));
+	proto_register_subtree_array(ett, array_length(ett));
 }
 
+static const aim_subtype aim_fnac_family_bos[] = {
+	{ 0x0001, "Error", dissect_aim_snac_error },
+	{ 0x0002, "Rights Query", NULL },
+	{ 0x0003, "Rights" , dissect_aim_bos_rights },
+	{ 0x0004, "Set Group Permissions Mask", dissect_aim_bos_set_group_perm },
+	{ 0x0005, "Add To Visible List", dissect_aim_bos_buddyname },
+	{ 0x0006, "Delete From Visible List", dissect_aim_bos_buddyname },
+	{ 0x0007, "Add To Invisible List", dissect_aim_bos_buddyname },
+	{ 0x0008, "Delete From Invisible List", dissect_aim_bos_buddyname },
+	{ 0, NULL, NULL }
+};
+
 void
 proto_reg_handoff_aim_bos(void)
 {
-  dissector_handle_t aim_handle;
-
-  aim_handle = new_create_dissector_handle(dissect_aim_bos, proto_aim_bos);
-  dissector_add("aim.family", FAMILY_BOS, aim_handle);
-  aim_init_family(FAMILY_BOS, "Privacy Management Service", aim_fnac_family_bos);
+	aim_init_family(proto_aim_bos, ett_aim_bos, FAMILY_BOS, aim_fnac_family_bos);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-buddylist.c ethereal-0.10.7/epan/dissectors/packet-aim-buddylist.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-buddylist.c	2004-08-12 17:42:31.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-buddylist.c	2004-10-20 17:35:01.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for AIM Instant Messenger (OSCAR) dissection, SNAC Buddylist
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  *
- * $Id: packet-aim-buddylist.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-buddylist.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -38,35 +38,10 @@
 #include <epan/strutil.h>
 
 #include "packet-aim.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #define FAMILY_BUDDYLIST  0x0003
 
-/* Family Buddy List */
-#define FAMILY_BUDDYLIST_ERROR        0x0001
-#define FAMILY_BUDDYLIST_REQRIGHTS    0x0002
-#define FAMILY_BUDDYLIST_RIGHTSINFO   0x0003
-#define FAMILY_BUDDYLIST_ADDBUDDY     0x0004
-#define FAMILY_BUDDYLIST_REMBUDDY     0x0005
-#define FAMILY_BUDDYLIST_WATCHERS_REQ 0x0006
-#define FAMILY_BUDDYLIST_WATCHERS_REP 0x0007
-#define FAMILY_BUDDYLIST_REJECT       0x000a
-#define FAMILY_BUDDYLIST_ONCOMING     0x000b
-#define FAMILY_BUDDYLIST_OFFGOING     0x000c
-#define FAMILY_BUDDYLIST_DEFAULT      0xffff
-
-static const value_string aim_fnac_family_buddylist[] = {
-  { FAMILY_BUDDYLIST_ERROR, "Error" },
-  { FAMILY_BUDDYLIST_REQRIGHTS, "Request Rights" },
-  { FAMILY_BUDDYLIST_RIGHTSINFO, "Rights Info" },
-  { FAMILY_BUDDYLIST_ADDBUDDY, "Add Buddy" },
-  { FAMILY_BUDDYLIST_REMBUDDY, "Remove Buddy" },
-  { FAMILY_BUDDYLIST_REJECT, "Reject Buddy" }, 
-  { FAMILY_BUDDYLIST_ONCOMING, "Oncoming Buddy" },
-  { FAMILY_BUDDYLIST_OFFGOING, "Offgoing Buddy" },
-  { FAMILY_BUDDYLIST_DEFAULT, "Buddy Default" },
-  { 0, NULL }
-};
 
 #define AIM_BUDDYLIST_TLV_MAX_CONTACT_ENTRIES 		0x0001
 #define AIM_BUDDYLIST_TLV_MAX_WATCHER_ENTRIES 		0x0002
@@ -82,154 +57,118 @@
 
 /* Initialize the protocol and registered fields */
 static int proto_aim_buddylist = -1;
-static int hf_aim_buddyname_len = -1;
-static int hf_aim_buddyname = -1;
 static int hf_aim_userinfo_warninglevel = -1;
-static int hf_aim_userinfo_tlvcount = -1;
 
 /* Initialize the subtree pointers */
 static gint ett_aim_buddylist = -1;
 
-static int dissect_aim_snac_buddylist(tvbuff_t *tvb, packet_info *pinfo, 
-				       proto_tree *tree)
+static int dissect_aim_buddylist_buddylist(tvbuff_t *tvb, packet_info *pinfo, proto_tree *buddy_tree)
+{
+	int offset = 0;
+	while(tvb_length_remaining(tvb, offset) > 0) {
+		offset = dissect_aim_buddyname( tvb, pinfo, offset, buddy_tree);
+	}
+	return offset;
+}
+
+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, buddylist_tlvs);
+}
+
+static int dissect_aim_buddylist_reject(tvbuff_t *tvb, packet_info *pinfo, proto_tree *buddy_tree)
 {
-  guint8 buddyname_length = 0;
-  char buddyname[MAX_BUDDYNAME_LENGTH + 1];
-  guint16 tlv_count = 0;
-  struct aiminfo *aiminfo = pinfo->private_data;
-  int offset = 0;
-  proto_item *ti;
-  proto_tree *buddy_tree = NULL;
-
-  if(tree) {
-	  ti = proto_tree_add_text(tree, tvb, 0, -1, "Buddy List Service");
-	  buddy_tree = proto_item_add_subtree(ti, ett_aim_buddylist);   
-  }
-
-
-  switch(aiminfo->subtype)
-    {
-	case FAMILY_BUDDYLIST_REQRIGHTS:
-	case FAMILY_BUDDYLIST_WATCHERS_REQ:
-		/* No data */
-		return 0;
-	case FAMILY_BUDDYLIST_REMBUDDY:
-	case FAMILY_BUDDYLIST_ADDBUDDY:
-	case FAMILY_BUDDYLIST_WATCHERS_REP:
-		while(tvb_length_remaining(tvb, offset) > 0) {
-			offset = dissect_aim_buddyname( tvb, pinfo, offset, buddy_tree);
-		}
-		return offset;
-	case FAMILY_BUDDYLIST_ERROR:
-      return dissect_aim_snac_error(tvb, pinfo, offset, buddy_tree);
-	case FAMILY_BUDDYLIST_RIGHTSINFO:
-		while(tvb_length_remaining(tvb, offset) > 0) {
-			offset = dissect_aim_tlv( tvb, pinfo, offset, buddy_tree, buddylist_tlvs);
-		}
-		return offset;
-	case FAMILY_BUDDYLIST_REJECT:
-		return dissect_aim_buddyname(tvb, pinfo, offset, buddy_tree);
-    case FAMILY_BUDDYLIST_ONCOMING:
-      buddyname_length = aim_get_buddyname( buddyname, tvb, offset, offset + 1 );
-
-      if (check_col(pinfo->cinfo, COL_INFO)) {
-	col_add_fstr(pinfo->cinfo, COL_INFO, "Oncoming Buddy");
-	col_append_fstr(pinfo->cinfo, COL_INFO, ": %s",
-	                format_text(buddyname, buddyname_length));
-      }
-      
-      if (buddy_tree) {
-	proto_tree_add_text(buddy_tree, tvb, offset + 1, buddyname_length, 
-			    "Screen Name: %s",
-			    format_text(buddyname, buddyname_length));
-      }
-      offset += buddyname_length + 1;
-
-      /* Warning level */
-      proto_tree_add_item(buddy_tree, hf_aim_userinfo_warninglevel, tvb, offset, 
-			  2, FALSE);
-      offset += 2;
-      
-      /* TLV Count */
-      tlv_count = tvb_get_ntohs(tvb, offset);
-      proto_tree_add_item(buddy_tree, hf_aim_userinfo_tlvcount, tvb, offset, 
-			  2, FALSE);
-      offset += 2;
-
-      while (tvb_length_remaining(tvb, offset) > 0) {
-	offset = dissect_aim_tlv(tvb, pinfo, offset, buddy_tree, onlinebuddy_tlvs);
-      }
-
-      return offset;
-      
-    case FAMILY_BUDDYLIST_OFFGOING:
-      buddyname_length = aim_get_buddyname( buddyname, tvb, offset, offset + 1 );
-      
-      if (check_col(pinfo->cinfo, COL_INFO)) {
-	col_add_fstr(pinfo->cinfo, COL_INFO, "Offgoing Buddy");
-	col_append_fstr(pinfo->cinfo, COL_INFO, ": %s",
-	                format_text(buddyname, buddyname_length));
-      }
-      
-      if (buddy_tree) {
-	proto_tree_add_text(buddy_tree, tvb, offset + 1, buddyname_length, 
-			    "Screen Name: %s",
-			    format_text(buddyname, buddyname_length));
-      }
-      offset += buddyname_length + 1;
-
-      /* Warning level */
-      proto_tree_add_item(buddy_tree, hf_aim_userinfo_warninglevel, tvb, offset, 
-			  2, FALSE);
-      offset += 2;
-
-	  return dissect_aim_tlv_list(tvb, pinfo, offset, buddy_tree, onlinebuddy_tlvs);
-	default:
-	  return 0;
-    }
+	return dissect_aim_buddyname(tvb, pinfo, 0, buddy_tree);
 }
 
+static int dissect_aim_buddylist_oncoming(tvbuff_t *tvb, packet_info *pinfo, proto_tree *buddy_tree)
+{
+	char buddyname[MAX_BUDDYNAME_LENGTH+1];
+	int offset = 0;
+	int buddyname_length = aim_get_buddyname( buddyname, tvb, offset, offset + 1 );
+
+	if (check_col(pinfo->cinfo, COL_INFO)) {
+		col_add_fstr(pinfo->cinfo, COL_INFO, "Oncoming Buddy");
+		col_append_fstr(pinfo->cinfo, COL_INFO, ": %s",
+						format_text(buddyname, buddyname_length));
+	}
+
+	offset += dissect_aim_buddyname(tvb, pinfo, offset, buddy_tree);
+
+	/* Warning level */
+	proto_tree_add_item(buddy_tree, hf_aim_userinfo_warninglevel, tvb, offset, 
+						2, FALSE);
+	offset += 2;
+
+	offset = dissect_aim_tlv_list(tvb, pinfo, offset, buddy_tree, onlinebuddy_tlvs);
+
+	return offset;
+}
+
+static int dissect_aim_buddylist_offgoing(tvbuff_t *tvb, packet_info *pinfo, proto_tree *buddy_tree) 
+{
+
+	char buddyname[MAX_BUDDYNAME_LENGTH+1];
+	int offset = 0;
+	int buddyname_length = aim_get_buddyname( buddyname, tvb, offset, offset + 1 );
+
+	if (check_col(pinfo->cinfo, COL_INFO)) {
+		col_add_fstr(pinfo->cinfo, COL_INFO, "Offgoing Buddy");
+		col_append_fstr(pinfo->cinfo, COL_INFO, ": %s",
+						format_text(buddyname, buddyname_length));
+	}
+
+	offset += dissect_aim_buddyname(tvb, pinfo, offset, buddy_tree);
+
+	/* Warning level */
+	proto_tree_add_item(buddy_tree, hf_aim_userinfo_warninglevel, tvb, offset, 
+						2, FALSE);
+	offset += 2;
+
+	return dissect_aim_tlv_list(tvb, pinfo, offset, buddy_tree, onlinebuddy_tlvs);
+}
+
+static const aim_subtype aim_fnac_family_buddylist[] = {
+	{ 0x0001, "Error", dissect_aim_snac_error },
+	{ 0x0002, "Rights Request", NULL },
+	{ 0x0003, "Rights Reply", dissect_aim_buddylist_rights_repl },
+	{ 0x0004, "Add Buddy", dissect_aim_buddylist_buddylist },
+	{ 0x0005, "Remove Buddy", dissect_aim_buddylist_buddylist },
+	{ 0x0006, "Watchers List Request", NULL },
+	{ 0x0007, "Watchers List Reply", dissect_aim_buddylist_buddylist },
+	{ 0x000a, "Reject Buddy", dissect_aim_buddylist_reject }, 
+	{ 0x000b, "Oncoming Buddy", dissect_aim_buddylist_oncoming },
+	{ 0x000c, "Offgoing Buddy", dissect_aim_buddylist_offgoing },
+	{ 0, NULL, NULL }
+};
 
 /* Register the protocol with Ethereal */
 void
 proto_register_aim_buddylist(void)
 {
 
-/* Setup list of header fields */
-  static hf_register_info hf[] = {
-    { &hf_aim_buddyname_len,
-      { "Buddyname len", "aim.buddynamelen", FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL }
-    },
-    { &hf_aim_buddyname,
-      { "Buddy Name", "aim.buddyname", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }
-    },
-    { &hf_aim_userinfo_warninglevel,
-      { "Warning Level", "aim.userinfo.warninglevel", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
-    },
-    { &hf_aim_userinfo_tlvcount,
-      { "TLV Count", "aim.userinfo.tlvcount", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
-    },
-  };
-
-/* Setup protocol subtree array */
-  static gint *ett[] = {
-    &ett_aim_buddylist,
-  };
-
-/* Register the protocol name and description */
-  proto_aim_buddylist = proto_register_protocol("AIM Buddylist Service", "AIM Buddylist", "aim_buddylist");
-
-/* Required function calls to register the header fields and subtrees used */
-  proto_register_field_array(proto_aim_buddylist, hf, array_length(hf));
-  proto_register_subtree_array(ett, array_length(ett));
+	/* Setup list of header fields */
+	static hf_register_info hf[] = {
+		{ &hf_aim_userinfo_warninglevel,
+			{ "Warning Level", "aim.userinfo.warninglevel", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
+		},
+	};
+
+	/* Setup protocol subtree array */
+	static gint *ett[] = {
+		&ett_aim_buddylist,
+	};
+
+	/* Register the protocol name and description */
+	proto_aim_buddylist = proto_register_protocol("AIM Buddylist Service", "AIM Buddylist", "aim_buddylist");
+
+	/* Required function calls to register the header fields and subtrees used */
+	proto_register_field_array(proto_aim_buddylist, hf, array_length(hf));
+	proto_register_subtree_array(ett, array_length(ett));
 }
 
 void
 proto_reg_handoff_aim_buddylist(void)
 {
-  dissector_handle_t aim_handle;
-
-  aim_handle = new_create_dissector_handle(dissect_aim_snac_buddylist, proto_aim_buddylist);
-  dissector_add("aim.family", FAMILY_BUDDYLIST, aim_handle);
-  aim_init_family(FAMILY_BUDDYLIST, "Buddylist", aim_fnac_family_buddylist);
+	aim_init_family(proto_aim_buddylist, ett_aim_buddylist, FAMILY_BUDDYLIST, aim_fnac_family_buddylist);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-chat.c ethereal-0.10.7/epan/dissectors/packet-aim-chat.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-chat.c	2004-08-12 17:42:24.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-chat.c	2004-10-20 17:34:53.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  * Copyright 2000, Ralf Hoelzer <ralf@well.com>
  *
- * $Id: packet-aim-chat.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-chat.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -40,35 +40,11 @@
 
 #include "packet-tcp.h"
 #include "packet-aim.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 /* SNAC families */
 #define FAMILY_CHAT       0x000E
 
-/* Family Chat */
-#define FAMILY_CHAT_ERROR             0x0001
-#define FAMILY_CHAT_ROOMINFOUPDATE    0x0002
-#define FAMILY_CHAT_USERJOIN          0x0003
-#define FAMILY_CHAT_USERLEAVE         0x0004
-#define FAMILY_CHAT_OUTGOINGMSG       0x0005
-#define FAMILY_CHAT_INCOMINGMSG       0x0006
-#define FAMILY_CHAT_EVIL_REQ          0x0007
-#define FAMILY_CHAT_EVIL_REPLY        0x0008
-#define FAMILY_CHAT_DEFAULT           0xffff
-
-static const value_string aim_fnac_family_chat[] = {
-  { FAMILY_CHAT_ERROR, "Error" },
-  { FAMILY_CHAT_ROOMINFOUPDATE, "Room Info Update" },
-  { FAMILY_CHAT_USERJOIN, "User Join" },
-  { FAMILY_CHAT_USERLEAVE, "User Leave" },
-  { FAMILY_CHAT_OUTGOINGMSG, "Outgoing Message" },
-  { FAMILY_CHAT_INCOMINGMSG, "Incoming Message" },
-  { FAMILY_CHAT_EVIL_REQ, "Evil Request" },
-  { FAMILY_CHAT_EVIL_REPLY, "Evil Reply" },
-  { FAMILY_CHAT_DEFAULT, "Chat Default" },
-  { 0, NULL }
-};
-
 #define AIM_CHAT_TLV_BROWSABLE_TREE 		0x001
 #define AIM_CHAT_TLV_CLASS_EXCLUSIVE		0x002
 #define AIM_CHAT_TLV_MAX_CONCURRENT_ROOMS	0x003
@@ -98,67 +74,67 @@
 /* Initialize the subtree pointers */
 static gint ett_aim_chat          = -1;
 
-static int dissect_aim_snac_chat(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+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;
+}
+
+static int dissect_aim_chat_outgoing_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *chat_tree)
 {
-  guint8 buddyname_length = 0;
-  int offset = 0;
-  struct aiminfo *aiminfo = pinfo->private_data;
-  char buddyname[MAX_BUDDYNAME_LENGTH + 1];
-  guchar msg[1000];
-  proto_item *ti;
-  proto_tree *chat_tree = NULL;
-                                                                                                                              
-  if(tree) {
-      ti = proto_tree_add_text(tree, tvb, 0, -1, "Chat Service");
-      chat_tree = proto_item_add_subtree(ti, ett_aim_chat);
-  }
-
-  switch(aiminfo->subtype)
-    {
-    case FAMILY_CHAT_ERROR:
-      return dissect_aim_snac_error(tvb, pinfo, offset, chat_tree);
-    case FAMILY_CHAT_USERLEAVE:
-    case FAMILY_CHAT_USERJOIN:
-      while(tvb_length_remaining(tvb, offset) > 0) {
-        offset = dissect_aim_userinfo(tvb, pinfo, offset, chat_tree);
-      }
-      return offset;
-    case FAMILY_CHAT_EVIL_REQ:
-    case FAMILY_CHAT_EVIL_REPLY:
-    case FAMILY_CHAT_ROOMINFOUPDATE:
-      /* FIXME */
-      return 0;
-    case FAMILY_CHAT_OUTGOINGMSG:
-      /* channel message from client */
-      aim_get_message( msg, tvb, 40 + buddyname_length, tvb_length(tvb) 
-           - 40 - buddyname_length );
-      
-      if (check_col(pinfo->cinfo, COL_INFO)) 
-        col_append_fstr(pinfo->cinfo, COL_INFO, " -> %s", msg);
-      return tvb_length(tvb);
-      
-    case FAMILY_CHAT_INCOMINGMSG:
-      /* channel message to client */
-      buddyname_length = aim_get_buddyname( buddyname, tvb, 30, 31 );
-      aim_get_message( msg, tvb, 36 + buddyname_length, tvb_length(tvb) 
-           - 36 - buddyname_length );
-      
-      if (check_col(pinfo->cinfo, COL_INFO)) {
-        col_append_fstr(pinfo->cinfo, COL_INFO, "from: %s", buddyname);
-        col_append_fstr(pinfo->cinfo, COL_INFO, " -> %s", msg);
-      }
-      
-      if(chat_tree) {
-        proto_tree_add_text(chat_tree, tvb, 31, buddyname_length, 
-                            "Screen Name: %s",
-                            format_text(buddyname, buddyname_length));
-      }
-      return tvb_length(tvb);
-    default:
-      return 0;
-    }
+	char buddyname[MAX_BUDDYNAME_LENGTH+1];
+	guchar msg[1000];
+	int buddyname_length = aim_get_buddyname( buddyname, tvb, 30, 31 );
+
+	/* channel message from client */
+	aim_get_message( msg, tvb, 40 + buddyname_length, tvb_length(tvb) 
+					 - 40 - buddyname_length );
+
+	if (check_col(pinfo->cinfo, COL_INFO)) 
+		col_append_fstr(pinfo->cinfo, COL_INFO, " -> %s", msg);
+	
+	return tvb_length(tvb);
 }
 
+
+static int dissect_aim_chat_incoming_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *chat_tree)
+{
+	char buddyname[MAX_BUDDYNAME_LENGTH+1];
+	guchar msg[1000];
+	/* channel message to client */
+	int buddyname_length = aim_get_buddyname( buddyname, tvb, 30, 31 );
+	
+	aim_get_message( msg, tvb, 36 + buddyname_length, tvb_length(tvb) 
+					 - 36 - buddyname_length );
+
+	if (check_col(pinfo->cinfo, COL_INFO)) {
+		col_append_fstr(pinfo->cinfo, COL_INFO, "from: %s", buddyname);
+		col_append_fstr(pinfo->cinfo, COL_INFO, " -> %s", msg);
+	}
+
+	if(chat_tree) {
+		proto_tree_add_text(chat_tree, tvb, 31, buddyname_length, 
+							"Screen Name: %s",
+							format_text(buddyname, buddyname_length));
+	}
+	return tvb_length(tvb);
+}
+
+static const aim_subtype aim_fnac_family_chat[] = {
+  { 0x0001, "Error", dissect_aim_snac_error },
+  { 0x0002, "Room Info Update", NULL },
+  { 0x0003, "User Join", dissect_aim_chat_userinfo_list },
+  { 0x0004, "User Leave", dissect_aim_chat_userinfo_list },
+  { 0x0005, "Outgoing Message", dissect_aim_chat_outgoing_msg },
+  { 0x0006, "Incoming Message", dissect_aim_chat_incoming_msg },
+  { 0x0007, "Evil Request", NULL },
+  { 0x0008, "Evil Reply", NULL },
+  { 0, NULL, NULL }
+};
+
 /* Register the protocol with Ethereal */
 void
 proto_register_aim_chat(void)
@@ -186,8 +162,5 @@
 void
 proto_reg_handoff_aim_chat(void)
 {
-  dissector_handle_t aim_handle;
-  aim_handle = new_create_dissector_handle(dissect_aim_snac_chat, proto_aim_chat);
-  dissector_add("aim.family", FAMILY_CHAT, aim_handle);
-  aim_init_family(FAMILY_CHAT, "Chat", aim_fnac_family_chat);
+  aim_init_family(proto_aim_chat, ett_aim_chat, FAMILY_CHAT, aim_fnac_family_chat);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-chatnav.c ethereal-0.10.7/epan/dissectors/packet-aim-chatnav.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-chatnav.c	2004-08-12 17:41:58.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-chatnav.c	2004-10-20 17:34:37.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for AIM Instant Messenger (OSCAR) dissection
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  *
- * $Id: packet-aim-chatnav.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-chatnav.c 12060 2004-09-21 08:01:29Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -41,68 +41,23 @@
 
 #define FAMILY_CHAT_NAV   0x000D
 
-/* Family Chat Navigation */
-#define FAMILY_CHATNAV_ERROR          0x0001
-#define FAMILY_CHATNAV_LIMITS_REQ     0x0002
-#define FAMILY_CHATNAV_EXCHANGE_REQ   0x0003
-#define FAMILY_CHATNAV_ROOM_INFO_REQ  0x0004
-#define FAMILY_CHATNAV_ROOMIF_EXT_REQ 0x0005
-#define FAMILY_CHATNAV_MEMBERLIST_REQ 0x0006
-#define FAMILY_CHATNAV_SEARCH_ROOM    0x0007
-#define FAMILY_CHATNAV_CREATE_ROOM    0x0008
-#define FAMILY_CHATNAV_INFO_REPLY     0x0009
-#define FAMILY_CHATNAV_DEFAULT        0xffff
-
-static const value_string aim_fnac_family_chatnav[] = {
-  { FAMILY_CHATNAV_ERROR, "Error" },
-  { FAMILY_CHATNAV_LIMITS_REQ, "Request Limits" },
-  { FAMILY_CHATNAV_EXCHANGE_REQ, "Request Exchange" },
-  { FAMILY_CHATNAV_ROOM_INFO_REQ, "Request Room Information" },
-  { FAMILY_CHATNAV_ROOMIF_EXT_REQ, "Request Extended Room Information" },
-  { FAMILY_CHATNAV_MEMBERLIST_REQ, "Request Member List" },
-  { FAMILY_CHATNAV_SEARCH_ROOM, "Search Room" },
-  { FAMILY_CHATNAV_CREATE_ROOM, "Create" },
-  { FAMILY_CHATNAV_INFO_REPLY, "Info" },
-  { FAMILY_CHATNAV_DEFAULT, "ChatNav Default" },
-  { 0, NULL }
+static const aim_subtype aim_fnac_family_chatnav[] = {
+  { 0x0001, "Error", dissect_aim_snac_error },
+  { 0x0002, "Request Limits", NULL },
+  { 0x0003, "Request Exchange", NULL },
+  { 0x0004, "Request Room Information", NULL },
+  { 0x0005, "Request Extended Room Information", NULL },
+  { 0x0006, "Request Member List", NULL },
+  { 0x0007, "Search Room", NULL },
+  { 0x0008, "Create", NULL },
+  { 0x0009, "Info", NULL },
+  { 0, NULL, NULL }
 };
 
 /* Initialize the protocol and registered fields */
 static int proto_aim_chatnav = -1;
 
-int ett_aim_chatnav = -1;
-
-static int dissect_aim_chatnav(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-  struct aiminfo *aiminfo = pinfo->private_data;
-	
-  proto_item *ti;
-  proto_tree *chatnav_tree = NULL;
-
-  if(tree) {
-      ti = proto_tree_add_text(tree, tvb, 0, -1, "Chat Navigation Service");
-      chatnav_tree = proto_item_add_subtree(ti, ett_aim_chatnav);
-  }
-
-  switch(aiminfo->subtype) {
-	  case FAMILY_CHATNAV_ERROR:
-		  return dissect_aim_snac_error(tvb, pinfo, 0, chatnav_tree);
-	case FAMILY_CHATNAV_LIMITS_REQ:
-		  /* No data */
-		  return 0;
-	case FAMILY_CHATNAV_EXCHANGE_REQ:
-	case FAMILY_CHATNAV_ROOM_INFO_REQ:
-	case FAMILY_CHATNAV_ROOMIF_EXT_REQ:
-	case FAMILY_CHATNAV_MEMBERLIST_REQ:
-	case FAMILY_CHATNAV_SEARCH_ROOM:
-	case FAMILY_CHATNAV_CREATE_ROOM:
-	case FAMILY_CHATNAV_INFO_REPLY:
-	case FAMILY_CHATNAV_DEFAULT:
-  /* FIXME */
-	  return 0;
-	default: return 0;
-  }
-}
+static int ett_aim_chatnav = -1;
 
 /* Register the protocol with Ethereal */
 void
@@ -130,10 +85,5 @@
 void
 proto_reg_handoff_aim_chatnav(void)
 {
-  dissector_handle_t aim_handle;
-
-  aim_handle = new_create_dissector_handle(dissect_aim_chatnav, proto_aim_chatnav);
-  dissector_add("aim.family", FAMILY_CHAT_NAV, aim_handle);
-  
-  aim_init_family(FAMILY_CHAT_NAV, "Chat Navigation", aim_fnac_family_chatnav);
+	aim_init_family(proto_aim_chatnav, ett_aim_chatnav, FAMILY_CHAT_NAV, aim_fnac_family_chatnav);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-directory.c ethereal-0.10.7/epan/dissectors/packet-aim-directory.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-directory.c	2004-08-12 17:41:56.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-directory.c	2004-10-20 17:34:37.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for AIM Instant Messenger (OSCAR) dissection, SNAC Directory
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  *
- * $Id: packet-aim-directory.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-directory.c 12060 2004-09-21 08:01:29Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -41,56 +41,28 @@
 
 #define FAMILY_DIRECTORY  0x000F
 
-#define FAMILY_DIRECTORY_ERROR			    0x0001
-#define FAMILY_DIRECTORY_SEARCH_USER_REQ	0x0002
-#define FAMILY_DIRECTORY_SEARCH_USER_REPL   0x0003
-#define FAMILY_DIRECTORY_INTERESTS_LIST_REQ 0x0004
-#define FAMILY_DIRECTORY_INTERESTS_LIST_REP 0x0005
-
-static const value_string aim_fnac_family_directory[] = {
-	{ FAMILY_DIRECTORY_ERROR, "Error" },
-	{ FAMILY_DIRECTORY_SEARCH_USER_REQ, "Client search for user request" },
-	{ FAMILY_DIRECTORY_SEARCH_USER_REPL, "Server reply for search request (found users)" },
-	{ FAMILY_DIRECTORY_INTERESTS_LIST_REQ, "Request interests list from server" },
-	{ FAMILY_DIRECTORY_INTERESTS_LIST_REP, "Interests list" },
-	{ 0, NULL },
-};
-
 static int proto_aim_directory = -1;
 static int ett_aim_directory = -1;
 
-static int dissect_aim_directory(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+static int dissect_aim_directory_user_repl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
-	struct aiminfo *aiminfo = pinfo->private_data;
-	proto_item *ti;
 	int offset = 0;
-	proto_tree *directory_tree = NULL;
-
-    if(tree) {
-    	ti = proto_tree_add_text(tree, tvb, 0, -1, "Directory Service");
-    	directory_tree = proto_item_add_subtree(ti, ett_aim_directory);
-   	}
-
-	switch(aiminfo->subtype) {
-	case FAMILY_DIRECTORY_ERROR:
-		return dissect_aim_snac_error(tvb, pinfo, 0, directory_tree);
-	case FAMILY_DIRECTORY_INTERESTS_LIST_REQ:
-		return 0;
-	case FAMILY_DIRECTORY_SEARCH_USER_REQ:
-		/* FIXME */
-		return 0;
-	case FAMILY_DIRECTORY_SEARCH_USER_REPL:
-		while (tvb_length_remaining(tvb, offset) > 0) {
-			offset = dissect_aim_tlv(tvb, pinfo, offset, tree, client_tlvs);
-		}
-		return offset;
-	case FAMILY_DIRECTORY_INTERESTS_LIST_REP:
-		/* FIXME */
-		return 0;
+	while (tvb_length_remaining(tvb, offset) > 0) {
+		offset = dissect_aim_tlv(tvb, pinfo, offset, tree, client_tlvs);
 	}
-	return 0;
+	return offset;
 }
 
+static const aim_subtype aim_fnac_family_directory[] = {
+	{ 0x0001, "Error", dissect_aim_snac_error },
+	{ 0x0002, "Client search for user request", NULL },
+	{ 0x0003, "Server reply for search request (found users)", dissect_aim_directory_user_repl },
+	{ 0x0004, "Request interests list from server", NULL },
+	{ 0x0005, "Interests list", NULL },
+	{ 0, NULL, NULL },
+};
+
+
 /* Register the protocol with Ethereal */
 void
 proto_register_aim_directory(void)
@@ -117,8 +89,5 @@
 void
 proto_reg_handoff_aim_directory(void)
 {
-  dissector_handle_t aim_handle;
-  aim_handle = new_create_dissector_handle(dissect_aim_directory, proto_aim_directory);
-  dissector_add("aim.family", FAMILY_DIRECTORY, aim_handle); 
-  aim_init_family(FAMILY_DIRECTORY, "Directory", aim_fnac_family_directory);
+  aim_init_family(proto_aim_directory, ett_aim_directory, FAMILY_DIRECTORY, aim_fnac_family_directory);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-email.c ethereal-0.10.7/epan/dissectors/packet-aim-email.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-email.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-aim-email.c	2004-10-20 17:35:01.000000000 -0500
@@ -0,0 +1,85 @@
+/* packet-aim-email.c
+ * Routines for AIM (OSCAR) dissection, SNAC Email
+ * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
+ *
+ * $Id: packet-aim-email.c 12060 2004-09-21 08:01:29Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <glib.h>
+
+#include <epan/packet.h>
+#include <epan/strutil.h>
+
+#include "packet-aim.h"
+
+#define FAMILY_EMAIL    0x0018
+
+static const aim_subtype aim_fnac_family_email[] = {
+  { 0x0006, "Email Status Request", NULL },
+  { 0x0007, "Email Status Reply", NULL },
+  { 0x0016, "Activate Email", NULL },
+  { 0, NULL, NULL }
+};
+
+/* Initialize the protocol and registered fields */
+static int proto_aim_email = -1;
+
+/* Initialize the subtree pointers */
+static gint ett_aim_email      = -1;
+
+/* Register the protocol with Ethereal */
+void
+proto_register_aim_email(void)
+{
+
+/* Setup list of header fields */
+/*FIXME
+  static hf_register_info hf[] = {
+  };*/
+
+/* Setup protocol subtree array */
+  static gint *ett[] = {
+    &ett_aim_email,
+  };
+
+/* Register the protocol name and description */
+  proto_aim_email = proto_register_protocol("AIM E-mail", "AIM Email", "aim_email");
+
+/* Required function calls to register the header fields and subtrees used */
+/*FIXME
+  proto_register_field_array(proto_aim_email, hf, array_length(hf));*/
+  proto_register_subtree_array(ett, array_length(ett));
+}
+
+void
+proto_reg_handoff_aim_email(void)
+{
+  aim_init_family(proto_aim_email, ett_aim_email, FAMILY_EMAIL, aim_fnac_family_email);
+}
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-generic.c ethereal-0.10.7/epan/dissectors/packet-aim-generic.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-generic.c	2004-08-12 17:42:10.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-generic.c	2004-10-20 17:34:49.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for AIM Instant Messenger (OSCAR) dissection, SNAC Family Generic
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  *
- * $Id: packet-aim-generic.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-generic.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -38,72 +38,13 @@
 #include <epan/strutil.h>
 
 #include "packet-aim.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #define STRIP_TAGS 1
 
 /* SNAC families */
 #define FAMILY_GENERIC    0x0001
 
-/* Family Generic */
-#define FAMILY_GENERIC_ERROR          0x0001
-#define FAMILY_GENERIC_CLIENTREADY    0x0002
-#define FAMILY_GENERIC_SERVERREADY    0x0003
-#define FAMILY_GENERIC_SERVICEREQ     0x0004
-#define FAMILY_GENERIC_REDIRECT       0x0005
-#define FAMILY_GENERIC_RATEINFOREQ    0x0006
-#define FAMILY_GENERIC_RATEINFO       0x0007
-#define FAMILY_GENERIC_RATEINFOACK    0x0008
-#define FAMILY_GENERIC_RATECHANGE     0x000a
-#define FAMILY_GENERIC_SERVERPAUSE    0x000b
-#define FAMILY_GENERIC_CLIENTPAUSEACK 0x000c
-#define FAMILY_GENERIC_SERVERRESUME   0x000d
-#define FAMILY_GENERIC_REQSELFINFO    0x000e
-#define FAMILY_GENERIC_SELFINFO       0x000f
-#define FAMILY_GENERIC_EVIL           0x0010
-#define FAMILY_GENERIC_SETIDLE        0x0011
-#define FAMILY_GENERIC_MIGRATIONREQ   0x0012
-#define FAMILY_GENERIC_MOTD           0x0013
-#define FAMILY_GENERIC_SETPRIVFLAGS   0x0014
-#define FAMILY_GENERIC_WELLKNOWNURL   0x0015
-#define FAMILY_GENERIC_NOP            0x0016
-#define FAMILY_GENERIC_CAPABILITIES   0x0017
-#define FAMILY_GENERIC_CAPACK         0x0018
-#define FAMILY_GENERIC_SETSTATUS      0x001e
-#define FAMILY_GENERIC_CLIENTVERREQ   0x001f
-#define FAMILY_GENERIC_CLIENTVERREPL  0x0020
-#define FAMILY_GENERIC_DEFAULT        0xffff
-
-static const value_string aim_fnac_family_generic[] = {
-  { FAMILY_GENERIC_ERROR, "Error" },
-  { FAMILY_GENERIC_CLIENTREADY , "Client Ready" },
-  { FAMILY_GENERIC_SERVERREADY, "Server Ready" },
-  { FAMILY_GENERIC_SERVICEREQ, "Service Request" },
-  { FAMILY_GENERIC_REDIRECT, "Redirect" },
-  { FAMILY_GENERIC_RATEINFOREQ, "Rate Info Request" },
-  { FAMILY_GENERIC_RATEINFO, "Rate Info" },
-  { FAMILY_GENERIC_RATEINFOACK, "Rate Info Ack" },
-  { FAMILY_GENERIC_RATECHANGE, "Rate Change" },
-  { FAMILY_GENERIC_SERVERPAUSE, "Server Pause" },
-  { FAMILY_GENERIC_CLIENTPAUSEACK, "Client Pause Ack" },
-  { FAMILY_GENERIC_SERVERRESUME, "Server Resume" },
-  { FAMILY_GENERIC_REQSELFINFO, "Self Info Request" },
-  { FAMILY_GENERIC_SELFINFO, "Self Info" },
-  { FAMILY_GENERIC_EVIL, "Evil" },
-  { FAMILY_GENERIC_SETIDLE, "Set Idle" },
-  { FAMILY_GENERIC_MIGRATIONREQ, "Migration Request" },
-  { FAMILY_GENERIC_MOTD, "Message Of The Day" },
-  { FAMILY_GENERIC_SETPRIVFLAGS, "Set Privilege Flags" },
-  { FAMILY_GENERIC_WELLKNOWNURL, "Well Known URL" },
-  { FAMILY_GENERIC_NOP, "noop" },
-  { FAMILY_GENERIC_CAPABILITIES, "Capabilities" },
-  { FAMILY_GENERIC_CAPACK, "Capabilities Ack" },
-  { FAMILY_GENERIC_SETSTATUS, "Set Status (ICQ specific)" },
-  { FAMILY_GENERIC_CLIENTVERREQ, "Client Verification Requst" },
-  { FAMILY_GENERIC_CLIENTVERREPL, "Client Verification Reply" },
-  { FAMILY_GENERIC_DEFAULT, "Generic Default" },
-  { 0, NULL }
-};
 
 #define FAMILY_GENERIC_MOTD_MOTDTYPE_MDT_UPGRADE       0x0001
 #define FAMILY_GENERIC_MOTD_MOTDTYPE_ADV_UPGRADE       0x0002
@@ -144,8 +85,26 @@
 	{ 0, NULL },
 };
 
-static int dissect_aim_snac_generic(tvbuff_t *tvb, packet_info *pinfo, 
-				     proto_tree *tree);
+#define EXT_STATUS_TYPE_BUDDY_ICON_0 0
+#define EXT_STATUS_TYPE_BUDDY_ICON_1 1
+#define EXT_STATUS_TYPE_AVAIL_MSG    2
+#define EXT_STATUS_TYPE_UNKNOWN		 6
+
+static const value_string ext_status_types[] = {
+	{ EXT_STATUS_TYPE_BUDDY_ICON_0, "Request to send buddy icon" },
+	{ EXT_STATUS_TYPE_BUDDY_ICON_1, "Request to send buddy icon" },
+	{ EXT_STATUS_TYPE_AVAIL_MSG, "Extended Status Update" },
+	{ 0, NULL },
+};
+
+#define EXT_STATUS_FLAG_INITIAL_SEND	0x41
+#define EXT_STATUS_FLAG_RESEND			0x81
+
+static const value_string ext_status_flags[] = {
+	{ EXT_STATUS_FLAG_INITIAL_SEND, "First Send Request" },
+	{ EXT_STATUS_FLAG_RESEND, 		"Request To Re-Send" },
+	{ 0, NULL },
+};
 
 /* Initialize the protocol and registered fields */
 static int proto_aim_generic = -1;
@@ -175,6 +134,10 @@
 static int hf_generic_client_ver_req_offset = -1;
 static int hf_generic_client_ver_req_length = -1;
 static int hf_generic_client_ver_req_hash = -1;
+static int hf_generic_ext_status_type = -1;
+static int hf_generic_ext_status_length = -1;
+static int hf_generic_ext_status_flags = -1;
+static int hf_generic_ext_status_data = -1;
 
 /* Initialize the subtree pointers */
 static gint ett_generic_clientready = -1;
@@ -189,7 +152,8 @@
 static gint ett_generic_rateinfo_group = -1;
 
 static int dissect_rate_class(tvbuff_t *tvb, packet_info *pinfo _U_, int offset,
-					proto_tree *class_tree) {
+							  proto_tree *class_tree) 
+{
 	proto_tree_add_uint(class_tree, hf_generic_rateinfo_classid, tvb, offset, 2, tvb_get_ntohs(tvb, offset));offset+=2;
 	proto_tree_add_uint(class_tree, hf_generic_rateinfo_windowsize, tvb, offset, 4, tvb_get_ntoh24(tvb, offset));offset+=4;
 	proto_tree_add_uint(class_tree, hf_generic_rateinfo_clearlevel, tvb, offset, 4, tvb_get_ntoh24(tvb, offset));offset+=4;
@@ -204,13 +168,14 @@
 }
 
 static int dissect_generic_rateinfo(tvbuff_t *tvb, packet_info *pinfo _U_, 
-				    proto_tree *tree) {
+									proto_tree *tree) 
+{
 	int offset = 0;
 	guint16 i;
 	proto_item *ti;
 	guint16 numclasses = tvb_get_ntohs(tvb, 0);	
 	proto_tree *classes_tree = NULL, *groups_tree, *group_tree;
-    proto_tree_add_uint(tree, hf_generic_rateinfo_numclasses, tvb, 0, 2, numclasses );
+	proto_tree_add_uint(tree, hf_generic_rateinfo_numclasses, tvb, 0, 2, numclasses );
 	offset+=2;
 
 	if(tree) {
@@ -239,217 +204,278 @@
 		numpairs = tvb_get_ntohs(tvb, offset);
 		proto_tree_add_uint(group_tree, hf_generic_rateinfo_numpairs, tvb, offset, 2, numpairs); offset+=2;
 		for(j = 0; j < numpairs; j++) {
-			const char *fam_name, *subtype_name;
-			guint16 family; 
-			guint16 subtype;
-			family = tvb_get_ntohs(tvb, offset); offset+=2;
-			subtype = tvb_get_ntohs(tvb, offset); offset+=2;
+			guint16 family_id; 
+			guint16 subtype_id;
+			const aim_family *family;
+			const aim_subtype *subtype;
+			family_id = tvb_get_ntohs(tvb, offset); offset+=2;
+			subtype_id = tvb_get_ntohs(tvb, offset); offset+=2;
 
-			fam_name = aim_get_familyname(family);
-			subtype_name = aim_get_subtypename(family, subtype);
+			family = aim_get_family(family_id);
+			subtype = aim_get_subtype(family_id, subtype_id);
 
-			proto_tree_add_text(group_tree, tvb, offset-4, 4, "Family: %s (0x%04x), Subtype: %s (0x%04x)", fam_name?fam_name:"Unknown", family, subtype_name?subtype_name:"Unknown", subtype);
+			proto_tree_add_text(group_tree, tvb, offset-4, 4, "Family: %s (0x%04x), Subtype: %s (0x%04x)", family?family->name:"Unknown", family_id, subtype?subtype->name:"Unknown", subtype_id);
 		}
 	}
-	
+
 	return offset;
 }
 
-static int dissect_aim_snac_generic(tvbuff_t *tvb, packet_info *pinfo, 
-				    proto_tree *tree)
+static int dissect_aim_generic_clientready(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *gen_tree)
 {
 	int offset = 0;
-	const char *name;
-	struct aiminfo *aiminfo = pinfo->private_data;
-	guint16 n, i;
-  	proto_item *ti = NULL;
-	proto_tree *gen_tree = NULL;
-	proto_tree *entry = NULL;
+	proto_item *ti = proto_tree_add_text(gen_tree, tvb, 0, tvb_length_remaining(tvb, 0), "Supported services");
+	proto_tree *entry = proto_item_add_subtree(ti, ett_generic_clientready);
 
-	if(tree) {
-		ti = proto_tree_add_text(tree, tvb, 0, -1,"AIM Generic Service");
-		gen_tree = proto_item_add_subtree(ti, ett_generic);
+	while(tvb_length_remaining(tvb, offset) > 0) {
+		guint16 famnum = tvb_get_ntohs(tvb, offset);
+		const aim_family *family = aim_get_family(famnum);
+
+		proto_tree *subentry;
+		ti = proto_tree_add_text(entry, tvb, offset, 2, "%s (0x%x)", family?family->name:"Unknown Family", famnum);
+		offset+=2;
+
+		subentry = proto_item_add_subtree(ti, ett_generic_clientready_item);
+
+		proto_tree_add_text(subentry, tvb, offset, 2, "Version: %d", tvb_get_ntohs(tvb, offset) ); offset += 2;
+		proto_tree_add_text(subentry, tvb, offset, 4, "DLL Version: %u", tvb_get_ntoh24(tvb, offset) ); offset += 4;
 	}
+	return offset;
+}
+
+
+static int dissect_aim_generic_serverready(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *gen_tree)
+{
+	int offset = 0;
+	proto_item *ti = proto_tree_add_text(gen_tree, tvb, offset, tvb_length_remaining(tvb, offset), "Supported services");
+	proto_tree *entry = proto_item_add_subtree(ti, ett_generic_clientready);
 	
-	if ((name = match_strval(aiminfo->subtype, aim_fnac_family_generic)) != NULL) {
-	  if (ti) proto_item_append_text(ti, ", %s", name);
+	while(tvb_length_remaining(tvb, offset) > 0) {
+		guint16 famnum = tvb_get_ntohs(tvb, offset);
+		const aim_family *family = aim_get_family(famnum);
+		proto_tree_add_text(entry, tvb, offset, 2, "%s (0x%x)", family?family->name:"Unknown Family", famnum);
+		offset+=2;
+	}
+	return offset;
+}
+
+
+static int dissect_aim_generic_service_req(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *gen_tree)
+{
+	int offset = 0;
+	const aim_family *family = aim_get_family( tvb_get_ntohs(tvb, offset) );
+
+	proto_tree_add_uint_format(gen_tree, hf_generic_servicereq_service, tvb, offset, 2, tvb_get_ntohs(tvb, offset), "%s (0x%04x)", family?family->name:"Unknown", tvb_get_ntohs(tvb, offset) );
+	offset+=2;
+	return offset;
+}
+
+static int dissect_aim_generic_redirect(tvbuff_t *tvb, packet_info *pinfo, proto_tree *gen_tree)
+{
+	return dissect_aim_tlv_sequence(tvb, pinfo, 0, gen_tree, client_tlvs);
+}
+
+static int dissect_aim_generic_capabilities(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *gen_tree)
+{
+	int offset = 0;
+	proto_item *ti = proto_tree_add_text(gen_tree, tvb, offset, tvb_length_remaining(tvb, offset), "Requested services");
+	proto_tree *entry = proto_item_add_subtree(ti, ett_generic_clientready);
+
+	while(tvb_length_remaining(tvb, offset) > 0) {
+		guint16 famnum = tvb_get_ntohs(tvb, offset);
+		const aim_family *family = aim_get_family(famnum);
+		ti = proto_tree_add_text(entry, tvb, offset, 4, "%s (0x%x), Version: %d", family?family->name:"Unknown Family", famnum, tvb_get_ntohs(tvb, offset+2));
+		offset += 4;
+	}
+	return offset;
+}
+
+static int dissect_aim_generic_capack(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *gen_tree)
+{
+	int offset = 0;
+	proto_item *ti = proto_tree_add_text(gen_tree, tvb, offset, tvb_length_remaining(tvb, offset), "Accepted requested services");
+	proto_tree *entry = proto_item_add_subtree(ti, ett_generic_clientready);
+
+	while(tvb_length_remaining(tvb, offset) > 0) {
+		guint16 famnum = tvb_get_ntohs(tvb, offset);
+		const aim_family *family = aim_get_family(famnum);
+		ti = proto_tree_add_text(entry, tvb, offset, 4, "%s (0x%x), Version: %d", family?family->name:"Unknown Family", famnum, tvb_get_ntohs(tvb, offset+2));
+		offset += 4;
+	}
+	return offset;
+}
+
+static int dissect_aim_generic_motd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *gen_tree)
+{
+	int offset = 0;
+	proto_tree_add_item(gen_tree, hf_generic_motd_motdtype, tvb, offset, 
+						2, tvb_get_ntohs(tvb, offset));
+	offset+=2;
+	return dissect_aim_tlv_sequence(tvb, pinfo, offset, gen_tree, motd_tlvs);
+}
+
+static int dissect_aim_generic_rateinfoack(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *gen_tree)
+{
+	int offset = 0;
+	while(tvb_length_remaining(tvb, offset) > 0) {
+		proto_tree_add_uint(gen_tree, hf_generic_rateinfoack_group, tvb, offset, 2, tvb_get_ntohs(tvb, offset));
+		offset+=2;
+	}
+	return offset;
+}
+
+static int dissect_aim_generic_ratechange(tvbuff_t *tvb, packet_info *pinfo, proto_tree *gen_tree)
+{
+	int offset = 0;
+	proto_tree_add_uint(gen_tree, hf_generic_ratechange_msg, tvb, offset, 2, tvb_get_ntohs(tvb, offset));
+	offset+=2;
+	offset = dissect_rate_class(tvb, pinfo, offset, gen_tree);
+	return offset;
+}
+
+
+static int dissect_aim_generic_clientpauseack(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *gen_tree)
+{
+	int offset = 0;
+	while(tvb_length_remaining(tvb, offset) > 0) {
+		guint16 famnum = tvb_get_ntohs(tvb, offset);
+		const aim_family *family = aim_get_family(famnum);
+		proto_tree_add_text(gen_tree, tvb, offset, 4, "Family: %s (0x%x)", family?family->name:"Unknown Family", famnum);
+		offset += 2;
+	}
+	return offset;
+}
 
-      if (check_col(pinfo->cinfo, COL_INFO)) col_add_fstr(pinfo->cinfo, COL_INFO, name);
+static int dissect_aim_generic_migration_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *gen_tree)
+{
+	int offset = 0;
+	guint32 n, i;
+	proto_item *ti;
+	proto_tree *entry;
+
+	n = tvb_get_ntohs(tvb, offset);offset+=2;
+	proto_tree_add_uint(gen_tree, hf_generic_migration_numfams, tvb, offset, 2, n);
+	ti = proto_tree_add_text(gen_tree, tvb, offset, 2 * n, "Families to migrate");
+	entry = proto_item_add_subtree(ti, ett_generic_migratefamilies);
+	for(i = 0; i < n; i++) {
+		guint16 famnum = tvb_get_ntohs(tvb, offset);
+		const aim_family *family = aim_get_family(famnum);
+		proto_tree_add_text(gen_tree, tvb, offset, 4, "Family: %s (0x%x)", family?family->name:"Unknown Family", famnum);
+		offset += 2;
 	}
 
-  switch(aiminfo->subtype)
-    {
-	case FAMILY_GENERIC_ERROR:
-      return dissect_aim_snac_error(tvb, pinfo, 0, gen_tree);
-	case FAMILY_GENERIC_CLIENTREADY:
-	   ti = proto_tree_add_text(gen_tree, tvb, 0, tvb_length_remaining(tvb, 0), "Supported services");
-	   entry = proto_item_add_subtree(ti, ett_generic_clientready);
-	   while(tvb_length_remaining(tvb, offset) > 0) {
-			guint16 famnum = tvb_get_ntohs(tvb, offset);
-			const char *famname = aim_get_familyname(famnum);
-			proto_tree *subentry;
-			ti = proto_tree_add_text(entry, tvb, offset, 2, "%s (0x%x)", famname?famname:"Unknown Family", famnum);
-			offset+=2;
-			
-			subentry = proto_item_add_subtree(ti, ett_generic_clientready_item);
-
-			proto_tree_add_text(subentry, tvb, offset, 2, "Version: %d", tvb_get_ntohs(tvb, offset) ); offset += 2;
-			proto_tree_add_text(subentry, tvb, offset, 4, "DLL Version: %u", tvb_get_ntoh24(tvb, offset) ); offset += 4;
-	  }
-	  return offset;
-	case FAMILY_GENERIC_SERVERREADY:
-	   ti = proto_tree_add_text(gen_tree, tvb, offset, tvb_length_remaining(tvb, offset), "Supported services");
-	   entry = proto_item_add_subtree(ti, ett_generic_clientready);
-	   while(tvb_length_remaining(tvb, offset) > 0) {
-			guint16 famnum = tvb_get_ntohs(tvb, offset);
-			const char *famname = aim_get_familyname(famnum);
-			proto_tree_add_text(entry, tvb, offset, 2, "%s (0x%x)", famname?famname:"Unknown Family", famnum);
-			offset+=2;
-	  }
-	  return offset;
-	case FAMILY_GENERIC_SERVICEREQ:
-	  name = aim_get_familyname( tvb_get_ntohs(tvb, offset) );
-      proto_tree_add_uint_format(gen_tree, hf_generic_servicereq_service, tvb, offset, 2, tvb_get_ntohs(tvb, offset), "%s (0x%04x)", name?name:"Unknown", tvb_get_ntohs(tvb, offset) );
-	  offset+=2;
-	  return offset;
-	case FAMILY_GENERIC_REDIRECT:
-	  while(tvb_length_remaining(tvb, offset) > 0) {
-		offset = dissect_aim_tlv(tvb, pinfo, offset, gen_tree, client_tlvs);
-	  }
-	  return offset;
-	case FAMILY_GENERIC_CAPABILITIES:
-	   ti = proto_tree_add_text(gen_tree, tvb, offset, tvb_length_remaining(tvb, offset), "Requested services");
-	   entry = proto_item_add_subtree(ti, ett_generic_clientready);
-	   while(tvb_length_remaining(tvb, offset) > 0) {
-			guint16 famnum = tvb_get_ntohs(tvb, offset);
-			const char *famname = aim_get_familyname(famnum);
-			ti = proto_tree_add_text(entry, tvb, offset, 4, "%s (0x%x), Version: %d", famname?famname:"Unknown Family", famnum, tvb_get_ntohs(tvb, offset+2));
-			offset += 4;
-	  }
-	  return offset;
-	case FAMILY_GENERIC_CAPACK:
-	   ti = proto_tree_add_text(gen_tree, tvb, offset, tvb_length_remaining(tvb, offset), "Accepted requested services");
-	   entry = proto_item_add_subtree(ti, ett_generic_clientready);
-	   while(tvb_length_remaining(tvb, offset) > 0) {
-			guint16 famnum = tvb_get_ntohs(tvb, offset);
-			const char *famname = aim_get_familyname(famnum);
-			ti = proto_tree_add_text(entry, tvb, offset, 4, "%s (0x%x), Version: %d", famname?famname:"Unknown Family", famnum, tvb_get_ntohs(tvb, offset+2));
-			offset += 4;
-	  }
-	   return offset;
-
-
-    case FAMILY_GENERIC_MOTD: 
-      proto_tree_add_item(gen_tree, hf_generic_motd_motdtype, tvb, offset, 
-			  2, tvb_get_ntohs(tvb, offset));
-	  offset+=2;
-	  while(tvb_length_remaining(tvb, offset) > 0) {
-		offset = dissect_aim_tlv(tvb, pinfo, offset, gen_tree, motd_tlvs);
-	  }
-	  return offset;
-
-	case FAMILY_GENERIC_RATEINFO:
-	  return dissect_generic_rateinfo(tvb, pinfo, gen_tree);
-	case FAMILY_GENERIC_RATEINFOACK:
-	  while(tvb_length_remaining(tvb, offset) > 0) {
-		  proto_tree_add_uint(gen_tree, hf_generic_rateinfoack_group, tvb, offset, 2, tvb_get_ntohs(tvb, offset));
-		  offset+=2;
-	  }
-	  return offset;
-	case FAMILY_GENERIC_RATECHANGE:
-	  proto_tree_add_uint(gen_tree, hf_generic_ratechange_msg, tvb, offset, 2, tvb_get_ntohs(tvb, offset));
-	  offset+=2;
-	  offset = dissect_rate_class(tvb, pinfo, offset, gen_tree);
-	  break;
-	  
-
-	case FAMILY_GENERIC_CLIENTPAUSEACK:
-	   while(tvb_length_remaining(tvb, offset) > 0) {
-			guint16 famnum = tvb_get_ntohs(tvb, offset);
-			const char *famname = aim_get_familyname(famnum);
-			proto_tree_add_text(gen_tree, tvb, offset, 4, "Family: %s (0x%x)", famname?famname:"Unknown Family", famnum);
-			offset += 2;
-	  }
-	  return offset;
-	case FAMILY_GENERIC_SERVERRESUME:
-	case FAMILY_GENERIC_REQSELFINFO:
-	case FAMILY_GENERIC_NOP:
-	case FAMILY_GENERIC_SERVERPAUSE:
-	case FAMILY_GENERIC_RATEINFOREQ:
-	  /* No data */
-	  return offset;
-	case FAMILY_GENERIC_MIGRATIONREQ:
-	  n = tvb_get_ntohs(tvb, offset);offset+=2;
-	  proto_tree_add_uint(gen_tree, hf_generic_migration_numfams, tvb, offset, 2, n);
-	  ti = proto_tree_add_text(gen_tree, tvb, offset, 2 * n, "Families to migrate");
-	  entry = proto_item_add_subtree(ti, ett_generic_migratefamilies);
-	  for(i = 0; i < n; i++) {
-			guint16 famnum = tvb_get_ntohs(tvb, offset);
-			const char *famname = aim_get_familyname(famnum);
-			proto_tree_add_text(gen_tree, tvb, offset, 4, "Family: %s (0x%x)", famname?famname:"Unknown Family", famnum);
-			offset += 2;
-	  }
-
-	  while(tvb_length_remaining(tvb, offset) > 0) {
-		offset = dissect_aim_tlv(tvb, pinfo, offset, gen_tree, client_tlvs);
-	  }
-
-	  return offset;
-	case FAMILY_GENERIC_SETPRIVFLAGS:
-	  {
-		  guint32 flags = tvb_get_ntoh24(tvb, offset); 
-		  ti = proto_tree_add_uint(gen_tree, hf_generic_priv_flags, tvb, offset, 4, flags);
-		  entry = proto_item_add_subtree(ti, ett_generic_priv_flags);
-		  proto_tree_add_boolean(entry, hf_generic_allow_idle_see, tvb, offset, 4, flags);
-		  proto_tree_add_boolean(entry, hf_generic_allow_member_see, tvb, offset, 4, flags);
-		  offset+=4;
-	  }
-	  return offset;
-	case FAMILY_GENERIC_SELFINFO:
-	  offset = dissect_aim_buddyname(tvb, pinfo, offset, gen_tree);
-	  proto_tree_add_item(gen_tree, hf_generic_selfinfo_warninglevel, tvb, offset, 2, FALSE);
-	  offset += 2;
-	  return dissect_aim_tlv_list(tvb, pinfo, offset, gen_tree, onlinebuddy_tlvs);
-	case FAMILY_GENERIC_EVIL:
-	  proto_tree_add_item(gen_tree, hf_generic_evil_new_warn_level, tvb, offset, 2, FALSE);
-	  while(tvb_length_remaining(tvb, offset)) {
+	return dissect_aim_tlv_sequence(tvb, pinfo, offset, gen_tree, client_tlvs);
+}
+
+static int dissect_aim_generic_setprivflags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *gen_tree)
+{
+	int offset = 0;
+	guint32 flags = tvb_get_ntoh24(tvb, offset); 
+	proto_item *ti = proto_tree_add_uint(gen_tree, hf_generic_priv_flags, tvb, offset, 4, flags);
+	proto_tree *entry = proto_item_add_subtree(ti, ett_generic_priv_flags);
+	proto_tree_add_boolean(entry, hf_generic_allow_idle_see, tvb, offset, 4, flags);
+	proto_tree_add_boolean(entry, hf_generic_allow_member_see, tvb, offset, 4, flags);
+	offset+=4;
+	return offset;
+}
+
+static int dissect_aim_generic_selfinfo_repl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *gen_tree)
+{
+	int offset = dissect_aim_buddyname(tvb, pinfo, 0, gen_tree);
+	proto_tree_add_item(gen_tree, hf_generic_selfinfo_warninglevel, tvb, offset, 2, FALSE);
+	offset += 2;
+	return dissect_aim_tlv_list(tvb, pinfo, offset, gen_tree, onlinebuddy_tlvs);
+}
+
+static int dissect_aim_generic_evil(tvbuff_t *tvb, packet_info *pinfo, proto_tree *gen_tree)
+{
+	int offset = 0;
+	proto_tree_add_item(gen_tree, hf_generic_evil_new_warn_level, tvb, offset, 2, FALSE);
+	while(tvb_length_remaining(tvb, offset)) {
 		offset = dissect_aim_userinfo(tvb, pinfo, offset, gen_tree);
-	  }
-	  return offset;
-	case FAMILY_GENERIC_SETIDLE:
-	  proto_tree_add_item(gen_tree, hf_generic_idle_time, tvb, offset, 2, FALSE);
-	  return 4;
-	case FAMILY_GENERIC_SETSTATUS:
-	  while(tvb_length_remaining(tvb, offset) > 0) {
-		offset = dissect_aim_tlv(tvb, pinfo, offset, gen_tree, onlinebuddy_tlvs);
-	  }
-	  return offset;
-	case FAMILY_GENERIC_CLIENTVERREQ:
-	  proto_tree_add_item(gen_tree, hf_generic_client_ver_req_offset, tvb, offset, 4, FALSE);
-	  offset+=4;
-	  proto_tree_add_item(gen_tree, hf_generic_client_ver_req_length, tvb, offset, 4, FALSE);
-	  return offset+4;
-	case FAMILY_GENERIC_CLIENTVERREPL:
-	  proto_tree_add_item(gen_tree, hf_generic_client_ver_req_hash, tvb, offset, 16, FALSE);
-	  return 16;
-	case FAMILY_GENERIC_WELLKNOWNURL:
-	  /* FIXME */
-	  return 0;
-	default: return 0;
-    }
-  return 0;
+	}
+	return offset;
+}
+
+static int dissect_aim_generic_setidle(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *gen_tree)
+{
+	proto_tree_add_item(gen_tree, hf_generic_idle_time, tvb, 0, 2, FALSE);
+	return 2;
 }
 
+static int dissect_aim_generic_ext_status_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *gen_tree)
+{
+	return dissect_aim_tlv_sequence(tvb, pinfo, 0, gen_tree, onlinebuddy_tlvs);
+}
+
+static int dissect_aim_generic_clientver_req(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *gen_tree)
+{
+	int offset = 0;
+	proto_tree_add_item(gen_tree, hf_generic_client_ver_req_offset, tvb, offset, 4, FALSE);
+	offset+=4;
+	proto_tree_add_item(gen_tree, hf_generic_client_ver_req_length, tvb, offset, 4, FALSE);
+	return offset+4;
+}
+
+static int dissect_aim_generic_clientver_repl(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *gen_tree)
+{
+	proto_tree_add_item(gen_tree, hf_generic_client_ver_req_hash, tvb, 0, 16, FALSE);
+	return 16;
+}
+
+static int dissect_aim_generic_ext_status_repl(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *gen_tree)
+{
+	guint8 length;
+	int offset = 0;
+	proto_tree_add_item(gen_tree, hf_generic_ext_status_type, tvb, offset, 2, FALSE); offset += 2;
+	proto_tree_add_item(gen_tree, hf_generic_ext_status_flags, tvb, offset, 1, FALSE); offset += 1;
+	proto_tree_add_item(gen_tree, hf_generic_ext_status_length, tvb, offset, 1, FALSE); length = tvb_get_guint8(tvb, offset); offset += 1;
+	proto_tree_add_item(gen_tree, hf_generic_ext_status_data, tvb, offset, length, FALSE); offset += 1;
+	return offset;
+}
+
+static const aim_subtype aim_fnac_family_generic[] = {
+	{ 0x0001, "Error", dissect_aim_snac_error },
+	{ 0x0002, "Client Ready", dissect_aim_generic_clientready },
+	{ 0x0003, "Server Ready", dissect_aim_generic_serverready  },
+	{ 0x0004, "Service Request", dissect_aim_generic_service_req },
+	{ 0x0005, "Redirect", dissect_aim_generic_redirect },
+	{ 0x0006, "Rate Info Request", NULL},
+	{ 0x0007, "Rate Info", dissect_generic_rateinfo },
+	{ 0x0008, "Rate Info Ack", dissect_aim_generic_rateinfoack },
+	{ 0x000a, "Rate Change", dissect_aim_generic_ratechange },
+	{ 0x000b, "Server Pause", NULL },
+	{ 0x000c, "Client Pause Ack", dissect_aim_generic_clientpauseack },
+	{ 0x000d, "Server Resume", NULL },
+	{ 0x000e, "Self Info Request", NULL },
+	{ 0x000f, "Self Info Reply", dissect_aim_generic_selfinfo_repl },
+	{ 0x0010, "Evil", dissect_aim_generic_evil },
+	{ 0x0011, "Set Idle", dissect_aim_generic_setidle },
+	{ 0x0012, "Migration Request", dissect_aim_generic_migration_req },
+	{ 0x0013, "Message Of The Day", dissect_aim_generic_motd },
+	{ 0x0014, "Set Privilege Flags", dissect_aim_generic_setprivflags },
+	{ 0x0015, "Well Known URL", NULL }, /* FIXME */
+	{ 0x0016, "noop", NULL },
+	{ 0x0017, "Capabilities",  dissect_aim_generic_capabilities },
+	{ 0x0018, "Capabilities Ack", dissect_aim_generic_capack },
+	{ 0x001e, "Set Extended Status Request", dissect_aim_generic_ext_status_req },
+	{ 0x001f, "Client Verification Request",  dissect_aim_generic_clientver_req },
+	{ 0x0020, "Client Verification Reply", dissect_aim_generic_clientver_repl },
+	{ 0x0021, "Set Extended Status Reply", dissect_aim_generic_ext_status_repl },
+	{ 0, NULL, NULL }
+};
+
+
 /* Register the protocol with Ethereal */
 void
 proto_register_aim_generic(void)
 {
 
-/* Setup list of header fields */
-  static hf_register_info hf[] = {
-	{ &hf_generic_servicereq_service, 
-	  { "Requested Service", "generic.servicereq.service", FT_UINT16,
-		  BASE_HEX, NULL, 0x0, "", HFILL },
+	/* Setup list of header fields */
+	static hf_register_info hf[] = {
+		{ &hf_generic_servicereq_service, 
+			{ "Requested Service", "generic.servicereq.service", FT_UINT16,
+				BASE_HEX, NULL, 0x0, "", HFILL },
 	},
 	{ &hf_generic_motd_motdtype, 
 	  { "MOTD Type", "generic.motd.motdtype", FT_UINT16,
@@ -527,6 +553,19 @@
 	{ &hf_generic_client_ver_req_hash,
 		{ "Client Verification MD5 Hash", "aim.client_verification.hash", FT_BYTES, BASE_DEC, NULL, 0x0, "", HFILL },
 	},
+	{ &hf_generic_ext_status_type,
+		{ "Extended Status Type", "aim.ext_status.type", FT_UINT16, BASE_DEC, VALS(ext_status_types), 0x0, "", HFILL },
+	},
+	{ &hf_generic_ext_status_flags,
+		{ "Extended Status Flags", "aim.ext_status.flags", FT_UINT8, BASE_HEX, VALS(ext_status_flags), 0x0, "", HFILL },
+	},
+	{ &hf_generic_ext_status_length,
+		{ "Extended Status Length", "aim.ext_status.length", FT_UINT8, BASE_HEX, NULL, 0x0, "" , HFILL },
+	},
+	{ &hf_generic_ext_status_data,
+		{ "Extended Status Data", "aim.ext_status.data", FT_BYTES, BASE_HEX, NULL, 0x0, "" , HFILL },
+	},
+
   };
 
 /* Setup protocol subtree array */
@@ -554,8 +593,5 @@
 void
 proto_reg_handoff_aim_generic(void)
 {
-  dissector_handle_t aim_handle;
-  aim_handle = new_create_dissector_handle(dissect_aim_snac_generic, proto_aim_generic);
-  dissector_add("aim.family", FAMILY_GENERIC, aim_handle);
-  aim_init_family(FAMILY_GENERIC, "Generic", aim_fnac_family_generic);
+  aim_init_family(proto_aim_generic, ett_generic, FAMILY_GENERIC, aim_fnac_family_generic);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-icq.c ethereal-0.10.7/epan/dissectors/packet-aim-icq.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-icq.c	2004-08-12 17:42:31.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-icq.c	2004-10-20 17:35:02.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for AIM Instant Messenger (OSCAR) dissection, SNAC ICQ
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  *
- * $Id: packet-aim-icq.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-icq.c 12072 2004-09-23 17:40:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -41,23 +41,26 @@
 
 #define FAMILY_ICQ        0x0015
 
-/* Family ICQ */
-#define FAMILY_ICQ_ERROR              0x0001
-#define FAMILY_ICQ_LOGINREQUEST       0x0002
-#define FAMILY_ICQ_LOGINRESPONSE      0x0003
-#define FAMILY_ICQ_AUTHREQUEST        0x0006
-#define FAMILY_ICQ_AUTHRESPONSE       0x0007
-
-static const value_string aim_fnac_family_icq[] = {
-  { FAMILY_ICQ_ERROR, "Error" },
-  { FAMILY_ICQ_LOGINREQUEST, "Login Request" },
-  { FAMILY_ICQ_LOGINRESPONSE, "Login Response" },
-  { FAMILY_ICQ_AUTHREQUEST, "Auth Request" },
-  { FAMILY_ICQ_AUTHRESPONSE, "Auth Response" },
+
+#define ICQ_CLI_OFFLINE_MESSAGE_REQ 	0x003c
+#define ICQ_CLI_DELETE_OFFLINE_MSGS		0x003e
+#define ICQ_SRV_OFFLINE_MSGS			0x0041
+#define ICQ_SRV_END_OF_OFFLINE_MSGS		0x0042
+#define ICQ_CLI_META_INFO_REQ			0x07d0
+#define ICQ_SRV_META_INFO_REPL			0x07da
+
+static const value_string aim_icq_data_types[] = {
+  { ICQ_CLI_OFFLINE_MESSAGE_REQ, "Offline Message Request" },
+  { ICQ_SRV_OFFLINE_MSGS, "Offline Messages Reply" },
+  { ICQ_SRV_END_OF_OFFLINE_MSGS, "End Of Offline Messages Reply" },
+  { ICQ_CLI_DELETE_OFFLINE_MSGS, "Delete Offline Messages Request" },
+  { ICQ_CLI_META_INFO_REQ, "Metainfo Request" },
+  { ICQ_SRV_META_INFO_REPL, "Metainfo Reply" },
   { 0, NULL }
 };
 
-int dissect_aim_tlv_value_icq(proto_item *ti, guint16, tvbuff_t *);
+
+static int dissect_aim_tlv_value_icq(proto_item *ti, guint16 subtype, tvbuff_t *tvb, packet_info *pinfo _U_);
 
 #define TLV_ICQ_META_DATA 			  0x0001
 
@@ -71,60 +74,189 @@
 
 /* Initialize the subtree pointers */
 static gint ett_aim_icq      = -1;
+static gint ett_aim_icq_tlv  = -1;
+
+static gint hf_icq_tlv_data_chunk_size = -1;
+static gint hf_icq_tlv_request_owner_uid = -1;
+static gint hf_icq_tlv_request_type = -1;
+static gint hf_icq_meta_subtype = -1;
+static gint hf_icq_tlv_request_seq_num = -1;
+static gint hf_icq_dropped_msg_flag = -1;
 
-int dissect_aim_tlv_value_icq(proto_item *ti _U_, guint16 subtype _U_, tvbuff_t *tvb _U_)
+
+static struct
 {
-	/* FIXME */
-	return 0;
-}
+	guint16 subtype;
+	char *name;
+	int (*dissector) (tvbuff_t *, packet_info *, proto_tree *);
+} icq_calls [] = {
+	{ 0x0001, "Server Error Reply", NULL },
+	{ 0x0064, "Set User Home Info Reply", NULL },
+	{ 0x006e, "Set User Work Info Reply", NULL },
+	{ 0x0078, "Set User More Info Reply", NULL },
+	{ 0x0082, "Set User Notes Info Reply", NULL },
+	{ 0x0087, "Set User Email Info Reply", NULL },
+	{ 0x008c, "Set User Interests Info Reply", NULL },
+	{ 0x0096, "Set User Affiliations Info Reply", NULL },
+	{ 0x00a0, "Set User Permissions Reply", NULL },
+	{ 0x00aa, "Set User Password Reply", NULL },
+	{ 0x00b4, "Unregister Account Reply", NULL },
+	{ 0x00be, "Set User Homepage Category Reply", NULL },
+	{ 0x00c8, "User Basic Info Reply", NULL },
+	{ 0x00d2, "User Work Info Reply", NULL },
+	{ 0x00dc, "User More Info Reply", NULL },
+	{ 0x00e6, "User Notes Info Reply", NULL },
+	{ 0x00eb, "User Extended Email Reply", NULL },
+	{ 0x00f0, "User Interests Info Reply", NULL },
+	{ 0x00fa, "User Affiliations Info Reply", NULL },
+	{ 0x0104, "Short User Info Reply", NULL },
+	{ 0x010e, "User Homepage Category Reply", NULL },
+	{ 0x01a4, "Search: User found", NULL },
+	{ 0x0302, "Registration Stats Reply", NULL },
+	{ 0x0366, "Random Search Server Reply", NULL },
+	{ 0x03ea, "Set User Home Info Request", NULL },
+	{ 0x03f3, "Set User Work Info Request", NULL },
+	{ 0x03fd, "Set User More Info Request", NULL },
+	{ 0x0406, "Set User Notes Request", NULL },
+	{ 0x040b, "Set User Extended Email Info Request", NULL },
+	{ 0x0410, "Set User Interests Info Request", NULL },
+	{ 0x041a, "Set User Affiliations Info Request", NULL },
+	{ 0x0424, "Set User Permissions Info Request", NULL },
+	{ 0x042e, "Change User Password Request", NULL },
+	{ 0x0442, "Set User Homepage Category Request", NULL },
+	{ 0x04b2, "Fullinfo Request", NULL },
+	{ 0x04ba, "Short User Info Request", NULL },
+	{ 0x04c4, "Unregister User Request", NULL },
+	{ 0x0515, "Search By Details Request", NULL },
+	{ 0x0569, "Search By UIN Request", NULL },
+	{ 0x055f, "Whitepages Search Request", NULL },
+	{ 0x0573, "Search By Email Request", NULL },
+	{ 0x074e, "Random Chat User Search Request", NULL },
+	{ 0x0898, "Server Variable Request (XML)", NULL },
+	{ 0x0aa5, "Registration Report Request", NULL },
+	{ 0x0aaf, "Shortcut Bar Stats Report Request", NULL },
+	{ 0x0c3a, "Save Info Request", NULL },
+	{ 0x1482, "Send SMS Request", NULL },
+	{ 0x2008, "Spam Report Request", NULL },
+	{ 0x08a2, "Server Variable Reply (XML)", NULL },
+	{ 0x0c3f, "Set Fullinfo Reply", NULL },
+	{ 0x2012, "User Spam Report Reply", NULL },
+	{ 0, NULL, NULL },
+};
+
 
-static int dissect_aim_icq(tvbuff_t *tvb, packet_info *pinfo, 
-				    proto_tree *tree)
+static int dissect_aim_tlv_value_icq(proto_item *ti _U_, guint16 subtype _U_, tvbuff_t *tvb _U_, packet_info *pinfo)
 {
-   struct aiminfo *aiminfo = pinfo->private_data;
-   int offset = 0;
-   switch(aiminfo->subtype) {
-   case FAMILY_ICQ_ERROR:
-	   return dissect_aim_snac_error(tvb, pinfo, offset, tree);
-   case FAMILY_ICQ_LOGINREQUEST:
-	   return dissect_aim_tlv(tvb, pinfo, offset, tree, icq_tlv);
-   case FAMILY_ICQ_LOGINRESPONSE:
-   case FAMILY_ICQ_AUTHREQUEST:
-	case FAMILY_ICQ_AUTHRESPONSE:
-	   /* FIXME */
+	int offset = 0;
+	int i;
+	proto_item *subtype_item;
+	guint16 req_type, req_subtype;
+	proto_tree *t = proto_item_add_subtree(ti, ett_aim_icq_tlv);
+
+	proto_tree_add_item(t, hf_icq_tlv_data_chunk_size, tvb, offset, 2, TRUE);
+	offset += 2;
+	
+	proto_tree_add_item(t, hf_icq_tlv_request_owner_uid, tvb, offset, 4, TRUE);
+	offset += 4;
+
+	proto_tree_add_item(t, hf_icq_tlv_request_type, tvb, offset, 2, TRUE);
+	req_type = tvb_get_letohs(tvb, offset);
+	offset += 2;
+
+	proto_tree_add_item(t, hf_icq_tlv_request_seq_num, tvb, offset, 2, TRUE);
+	offset += 2;
+
+	switch(req_type) {
+	case ICQ_CLI_OFFLINE_MESSAGE_REQ: return offset;
+	case ICQ_CLI_DELETE_OFFLINE_MSGS: return offset;
+	case ICQ_SRV_OFFLINE_MSGS:
+		/* FIXME */
+		break;
+	case ICQ_SRV_END_OF_OFFLINE_MSGS: 
+		proto_tree_add_item(t, hf_icq_dropped_msg_flag, tvb, offset, 1, TRUE);
+		return offset+1;
+	case ICQ_CLI_META_INFO_REQ:
+	case ICQ_SRV_META_INFO_REPL:
+		req_subtype = tvb_get_letohs(tvb, offset);
+		subtype_item = proto_tree_add_item(t, hf_icq_meta_subtype, tvb, offset, 2, TRUE); offset+=2;
+		
+		for(i = 0; icq_calls[i].name; i++) {
+			if(icq_calls[i].subtype == req_subtype) break;
+		}
+
+		if(check_col(pinfo->cinfo, COL_INFO)) 
+			col_set_str(pinfo->cinfo, COL_INFO, icq_calls[i].name?icq_calls[i].name:"Unknown ICQ Meta Call");
+
+		proto_item_append_text(subtype_item, " (%s)", icq_calls[i].name?icq_calls[i].name:"Unknown");
+
+		if(icq_calls[i].dissector) 
+			return icq_calls[i].dissector(tvb_new_subset(tvb, offset, -1, -1), pinfo, t);
+
 	default:
-	   return 0;
-   }
+		break;
+	}
+
+	return offset;
+}
+
+static int dissect_aim_icq_tlv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+	return dissect_aim_tlv(tvb, pinfo, 0, tree, icq_tlv);
 }
 
+static const aim_subtype aim_fnac_family_icq[] = {
+  { 0x0001, "Error", dissect_aim_snac_error },
+  { 0x0002, "ICQ Request", dissect_aim_icq_tlv },
+  { 0x0003, "ICQ Response", dissect_aim_icq_tlv },
+  { 0x0006, "Auth Request", NULL },
+  { 0x0007, "Auth Response", NULL },
+  { 0, NULL, NULL }
+};
+
+
 /* Register the protocol with Ethereal */
 void
 proto_register_aim_icq(void)
 {
 
 /* Setup list of header fields */
-/*  static hf_register_info hf[] = {
-  };*/
+  static hf_register_info hf[] = {
+	  { &hf_icq_tlv_data_chunk_size,
+	    { "Data chunk size", "aim_icq.chunk_size", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
+	  },
+	  { &hf_icq_tlv_request_owner_uid,
+	    { "Owner UID", "aim_icq.owner_uid", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL},
+	  },
+	  { &hf_icq_tlv_request_type,
+	    {"Request Type", "aim_icq.request_type", FT_UINT16, BASE_DEC, VALS(aim_icq_data_types), 0x0, "", HFILL},
+	  },
+	  { &hf_icq_tlv_request_seq_num,
+	    {"Request Sequence Number", "aim_icq.request_seq_number", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL},
+	  },
+	  { &hf_icq_dropped_msg_flag,
+		{"Dropped messages flag", "aim_icq.offline_msgs.dropped_flag", FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL },
+	  },
+	  { &hf_icq_meta_subtype,
+		{"Meta Request Subtype", "aim_icq.subtype", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL },
+	  },
+  };
 
 /* Setup protocol subtree array */
   static gint *ett[] = {
     &ett_aim_icq,
+	&ett_aim_icq_tlv
   };
 
 /* Register the protocol name and description */
   proto_aim_icq = proto_register_protocol("AIM ICQ", "AIM ICQ", "aim_icq");
 
 /* Required function calls to register the header fields and subtrees used */
-  /*proto_register_field_array(proto_aim_icq, hf, array_length(hf));*/
+  proto_register_field_array(proto_aim_icq, hf, array_length(hf));
   proto_register_subtree_array(ett, array_length(ett));
 }
 
 void
 proto_reg_handoff_aim_icq(void)
 {
-  dissector_handle_t aim_handle;
-
-  aim_handle = new_create_dissector_handle(dissect_aim_icq, proto_aim_icq);
-  dissector_add("aim.family", FAMILY_ICQ, aim_handle);
-  aim_init_family(FAMILY_ICQ, "ICQ", aim_fnac_family_icq);
+  aim_init_family(proto_aim_icq, ett_aim_icq, FAMILY_ICQ, aim_fnac_family_icq);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-invitation.c ethereal-0.10.7/epan/dissectors/packet-aim-invitation.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-invitation.c	2004-08-12 17:42:00.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-invitation.c	2004-10-20 17:34:40.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for AIM Instant Messenger (OSCAR) dissection, SNAC Invitation
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  *
- * $Id: packet-aim-invitation.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-invitation.c 12063 2004-09-22 08:04:40Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -41,53 +41,25 @@
 
 #define FAMILY_INVITATION 0x0006
 
-/* Family Invitation */
-#define FAMILY_INVITATION_ERROR       0x0001
-#define FAMILY_INVITATION_FRIEND_REQ  0x0002
-#define FAMILY_INVITATION_FRIEND_REPL 0x0003
-#define FAMILY_INVITATION_DEFAULT     0xffff
-
-static const value_string aim_fnac_family_invitation[] = {
-  { FAMILY_INVITATION_ERROR, "Error" },
-  { FAMILY_INVITATION_FRIEND_REQ, "Invite a friend to join AIM" },
-  { FAMILY_INVITATION_FRIEND_REPL, "Invitation Ack" },
-  { FAMILY_INVITATION_DEFAULT, "Invitation Default" },
-  { 0, NULL }
-};
-
 /* Initialize the protocol and registered fields */
 static int proto_aim_invitation = -1;
 
 static int ett_aim_invitation = -1;
 
-static int dissect_aim_invitation(tvbuff_t *tvb, packet_info *pinfo,
-                       proto_tree *tree)
+static int dissect_aim_invitation_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *invite_tree)
 {
-  int offset = 0;
-  struct aiminfo *aiminfo = pinfo->private_data;
-  proto_item *ti = NULL;
-  proto_tree *invite_tree = NULL;
-                                                                                
-  if(tree) {
-	ti = proto_tree_add_text(tree, tvb, 0, -1,"AIM Invite Service");
-    invite_tree = proto_item_add_subtree(ti, ett_aim_invitation);
-  }
-
-  switch(aiminfo->subtype) {
- 	case FAMILY_INVITATION_ERROR:
-      return dissect_aim_snac_error(tvb, pinfo, offset, invite_tree);
-    case FAMILY_INVITATION_FRIEND_REQ:
-       while(tvb_length_remaining(tvb, offset) > 0) {
-          offset = dissect_aim_tlv(tvb, pinfo, offset, invite_tree, onlinebuddy_tlvs);
-	   }
-	   return 0;
-    case FAMILY_INVITATION_FRIEND_REPL:
-		return 0;
-  }
-
-  return 0;
+	return dissect_aim_tlv_sequence(tvb, pinfo, 0, invite_tree, onlinebuddy_tlvs);
 }
-                                                                                
+
+static const aim_subtype aim_fnac_family_invitation[] = {
+	{ 0x0001, "Error", dissect_aim_snac_error },
+	{ 0x0002, "Invite a friend to join AIM", dissect_aim_invitation_req },
+	{ 0x0003, "Invitation Ack", NULL },
+	{ 0, NULL, NULL }
+};
+
+
+
 /* Register the protocol with Ethereal */
 void
 proto_register_aim_invitation(void)
@@ -108,9 +80,5 @@
 void
 proto_reg_handoff_aim_invitation(void)
 {
-  dissector_handle_t aim_handle;
-  
-  aim_handle = new_create_dissector_handle(dissect_aim_invitation, proto_aim_invitation);
-  dissector_add("aim.family", FAMILY_INVITATION, aim_handle);
-  aim_init_family(FAMILY_INVITATION, "Invitation", aim_fnac_family_invitation);
+  aim_init_family(proto_aim_invitation, ett_aim_invitation, FAMILY_INVITATION, aim_fnac_family_invitation);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-location.c ethereal-0.10.7/epan/dissectors/packet-aim-location.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-location.c	2004-08-12 17:42:30.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-location.c	2004-10-20 17:35:01.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  * Copyright 2000, Ralf Hoelzer <ralf@well.com>
  *
- * $Id: packet-aim-location.c 11577 2004-08-01 22:55:53Z guy $
+ * $Id: packet-aim-location.c 12063 2004-09-22 08:04:40Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -43,32 +43,6 @@
 /* SNAC families */
 #define FAMILY_LOCATION   0x0002
 
-/* Family Location Services */
-#define FAMILY_LOCATION_ERROR         0x0001
-#define FAMILY_LOCATION_REQRIGHTS     0x0002
-#define FAMILY_LOCATION_RIGHTSINFO    0x0003
-#define FAMILY_LOCATION_SETUSERINFO   0x0004
-#define FAMILY_LOCATION_REQUSERINFO   0x0005
-#define FAMILY_LOCATION_USERINFO      0x0006
-#define FAMILY_LOCATION_WATCHERSUBREQ 0x0007
-#define FAMILY_LOCATION_WATCHERNOT    0x0008
-#define FAMILY_LOCATION_USER_INFO_QUERY 0x0015
-#define FAMILY_LOCATION_DEFAULT       0xffff
-
-static const value_string aim_fnac_family_location[] = {
-  { FAMILY_LOCATION_ERROR, "Error" },
-  { FAMILY_LOCATION_REQRIGHTS, "Request Rights" },
-  { FAMILY_LOCATION_RIGHTSINFO, "Rights Info" },
-  { FAMILY_LOCATION_SETUSERINFO, "Set User Info" },
-  { FAMILY_LOCATION_REQUSERINFO, "Request User Info" },
-  { FAMILY_LOCATION_USERINFO, "User Info" },
-  { FAMILY_LOCATION_WATCHERSUBREQ, "Watcher Subrequest" },
-  { FAMILY_LOCATION_WATCHERNOT, "Watcher Notification" },
-  { FAMILY_LOCATION_DEFAULT, "Location Default" },
-  { FAMILY_LOCATION_USER_INFO_QUERY, "User Info Query" },
-  { 0, NULL }
-};
-
 #define FAMILY_LOCATION_USERINFO_INFOENCODING  0x0001
 #define FAMILY_LOCATION_USERINFO_INFOMSG       0x0002
 #define FAMILY_LOCATION_USERINFO_AWAYENCODING  0x0003
@@ -86,15 +60,23 @@
 
 #define AIM_LOCATION_RIGHTS_TLV_MAX_PROFILE_LENGTH 	0x0001
 #define AIM_LOCATION_RIGHTS_TLV_MAX_CAPABILITIES 	0x0002
-#define AIM_LOCATION_RIGHTS_TLV_CLIENT_CAPABILITIES 0x0005
 
 static const aim_tlv location_rights_tlvs[] = {
   { AIM_LOCATION_RIGHTS_TLV_MAX_PROFILE_LENGTH, "Max Profile Length", dissect_aim_tlv_value_uint16 },
   { AIM_LOCATION_RIGHTS_TLV_MAX_CAPABILITIES, "Max capabilities", dissect_aim_tlv_value_uint16 },
-  { AIM_LOCATION_RIGHTS_TLV_CLIENT_CAPABILITIES, "Client capabilities", dissect_aim_tlv_value_client_capabilities },
   { 0, "Unknown", NULL }
 };
 
+
+#define AIM_LOCATION_USERINFO_TLV_MIME_TYPE			  0x0001
+#define AIM_LOCATION_USERINFO_TLV_CLIENT_CAPABILITIES 0x0005
+
+static const aim_tlv location_userinfo_tlvs[] = {
+	{ AIM_LOCATION_USERINFO_TLV_MIME_TYPE, "Mime Type", dissect_aim_tlv_value_string },
+	{ AIM_LOCATION_USERINFO_TLV_CLIENT_CAPABILITIES, "Client capabilities", dissect_aim_tlv_value_client_capabilities },
+	{ 0, "Unknown", NULL }
+};
+
 #define FAMILY_LOCATION_USERINFO_INFOTYPE_GENERALINFO  0x0001
 #define FAMILY_LOCATION_USERINFO_INFOTYPE_AWAYMSG      0x0003
 #define FAMILY_LOCATION_USERINFO_INFOTYPE_CAPS         0x0005
@@ -106,9 +88,6 @@
   { 0, NULL }
 };
 
-static int dissect_aim_snac_location_request_user_information(tvbuff_t *tvb, int offset, proto_tree *tree);
-static int dissect_aim_snac_location_user_information(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *tree);
-
 /* Initialize the protocol and registered fields */
 static int proto_aim_location = -1;
 static int hf_aim_snac_location_request_user_info_infotype = -1;
@@ -119,146 +98,130 @@
 /* Initialize the subtree pointers */
 static gint ett_aim_location    = -1;
 
-static int dissect_aim_location(tvbuff_t *tvb, packet_info *pinfo, 
-				      proto_tree *tree )
+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, location_rights_tlvs);
+}
+
+static int dissect_aim_location_setuserinfo(tvbuff_t *tvb, packet_info *pinfo, proto_tree *loc_tree)
+{
+	return dissect_aim_tlv_sequence(tvb, pinfo, 0, loc_tree, location_userinfo_tlvs);
+}
+
+static int dissect_aim_location_watcher_notification(tvbuff_t *tvb, packet_info *pinfo, proto_tree *loc_tree)
 {
-	struct aiminfo *aiminfo = pinfo->private_data;
 	int offset = 0;
-	 proto_item *ti = NULL;
-    proto_tree *loc_tree = NULL;
+	while(tvb_length_remaining(tvb, offset) > 0) {
+		offset = dissect_aim_buddyname(tvb, pinfo, offset, loc_tree);
+	}
+	return offset;
+}
 
-    if(tree) {
-        ti = proto_tree_add_text(tree, tvb, 0, -1,"AIM Location Service");
-        loc_tree = proto_item_add_subtree(ti, ett_aim_location);
-    }
-
-  switch(aiminfo->subtype)
-    {
-	case FAMILY_LOCATION_ERROR:
-      return dissect_aim_snac_error(tvb, pinfo, offset, loc_tree);
-    case FAMILY_LOCATION_REQUSERINFO:
-      return dissect_aim_snac_location_request_user_information(tvb, offset, loc_tree);
-    case FAMILY_LOCATION_USERINFO:
-      return dissect_aim_snac_location_user_information(tvb, pinfo, offset, loc_tree);
-	case FAMILY_LOCATION_REQRIGHTS:
-	  /* No data */
-	  return 0;
-	case FAMILY_LOCATION_RIGHTSINFO:
-	   while(tvb_length_remaining(tvb, offset) > 0) {
-		offset = dissect_aim_tlv(tvb, pinfo, offset, loc_tree, location_rights_tlvs);
-	  }
-	  return 0;
-	case FAMILY_LOCATION_SETUSERINFO:
-	  while(tvb_length_remaining(tvb, offset) > 0) {
-		offset = dissect_aim_tlv(tvb, pinfo, offset, loc_tree, location_rights_tlvs);
-	  }
-	  return 0;
-	case FAMILY_LOCATION_WATCHERSUBREQ:
-	  /* FIXME */
-	  return 0;
-	case FAMILY_LOCATION_WATCHERNOT:
-	  while(tvb_length_remaining(tvb, offset) > 0) {
-		  offset = dissect_aim_buddyname(tvb, pinfo, offset, loc_tree);
-	  }
-	  return offset;
-	case FAMILY_LOCATION_USER_INFO_QUERY:
-	  offset = dissect_aim_buddyname(tvb, pinfo, offset+4, loc_tree);
-	  return offset;
-	default:
-	  return 0;
-    }
+static int dissect_aim_location_user_info_query(tvbuff_t *tvb, packet_info *pinfo, proto_tree *loc_tree)
+{
+	return dissect_aim_buddyname(tvb, pinfo, 4, loc_tree);
 }
 
 static int dissect_aim_snac_location_request_user_information(tvbuff_t *tvb, 
-							  int offset,
-							  proto_tree *tree)
+															  packet_info *pinfo _U_,
+															  proto_tree *tree)
 {
-  guint8 buddyname_length = 0;
+	int offset = 0;
+	guint8 buddyname_length = 0;
 
-  /* Info Type */
-  proto_tree_add_item(tree, hf_aim_snac_location_request_user_info_infotype, 
-		      tvb, offset, 2, FALSE);
-  offset += 2;
-
-  /* Buddy Name length */
-  buddyname_length = tvb_get_guint8(tvb, offset);
-  proto_tree_add_item(tree, hf_aim_buddyname_len, tvb, offset, 1, FALSE);
-  offset += 1;
-  
-  /* Buddy name */
-  proto_tree_add_item(tree, hf_aim_buddyname, tvb, offset, buddyname_length, FALSE);
-  offset += buddyname_length;
+	/* Info Type */
+	proto_tree_add_item(tree, hf_aim_snac_location_request_user_info_infotype, 
+						tvb, offset, 2, FALSE);
+	offset += 2;
+
+	/* Buddy Name length */
+	buddyname_length = tvb_get_guint8(tvb, offset);
+	proto_tree_add_item(tree, hf_aim_buddyname_len, tvb, offset, 1, FALSE);
+	offset += 1;
+
+	/* Buddy name */
+	proto_tree_add_item(tree, hf_aim_buddyname, tvb, offset, buddyname_length, FALSE);
+	offset += buddyname_length;
 
-  return offset;
+	return offset;
 }
 
 static int dissect_aim_snac_location_user_information(tvbuff_t *tvb, 
-						       packet_info *pinfo _U_, 
-						  int offset, proto_tree *tree)
+													  packet_info *pinfo _U_, 
+													  proto_tree *tree)
 {
-  guint8 buddyname_length = 0;
+	int offset = 0;
+	guint8 buddyname_length = 0;
+
+	/* Buddy Name length */
+	buddyname_length = tvb_get_guint8(tvb, offset);
+	proto_tree_add_item(tree, hf_aim_buddyname_len, tvb, offset, 1, FALSE);
+	offset += 1;
 
-  /* Buddy Name length */
-  buddyname_length = tvb_get_guint8(tvb, offset);
-  proto_tree_add_item(tree, hf_aim_buddyname_len, tvb, offset, 1, FALSE);
-  offset += 1;
-  
-  /* Buddy name */
-  proto_tree_add_item(tree, hf_aim_buddyname, tvb, offset, buddyname_length, FALSE);
-  offset += buddyname_length;
-
-  /* Warning level */
-  proto_tree_add_item(tree, hf_aim_userinfo_warninglevel, tvb, offset, 2, FALSE);
-  offset += 2;
-
-  offset = dissect_aim_tlv_list(tvb, pinfo, offset, tree, onlinebuddy_tlvs);
-
-  while(tvb_length_remaining(tvb, offset) > 0) {
-	  offset = dissect_aim_tlv(tvb, pinfo, offset, tree, msg_tlv);
-  }
+	/* Buddy name */
+	proto_tree_add_item(tree, hf_aim_buddyname, tvb, offset, buddyname_length, FALSE);
+	offset += buddyname_length;
 
-  return offset;
+	/* Warning level */
+	proto_tree_add_item(tree, hf_aim_userinfo_warninglevel, tvb, offset, 2, FALSE);
+	offset += 2;
+
+	offset = dissect_aim_tlv_list(tvb, pinfo, offset, tree, onlinebuddy_tlvs);
+
+	return dissect_aim_tlv_sequence(tvb, pinfo, offset, tree, msg_tlv);
 }
 
+static const aim_subtype aim_fnac_family_location[] = {
+	{ 0x0001, "Error", dissect_aim_snac_error },
+	{ 0x0002, "Request Rights", NULL },
+	{ 0x0003, "Rights Info", dissect_aim_location_rightsinfo },
+	{ 0x0004, "Set User Info", dissect_aim_location_setuserinfo },
+	{ 0x0005, "Request User Info", dissect_aim_snac_location_request_user_information },
+	{ 0x0006, "User Info", dissect_aim_snac_location_user_information },
+	{ 0x0007, "Watcher Subrequest", NULL },
+	{ 0x0008, "Watcher Notification", dissect_aim_location_watcher_notification },
+	{ 0x0015, "User Info Query", dissect_aim_location_user_info_query },
+	{ 0, NULL, NULL }
+};
+
+
+
 void
 proto_register_aim_location(void)
 {
 
-/* Setup list of header fields */
-  static hf_register_info hf[] = {
-    { &hf_aim_buddyname_len,
-      { "Buddyname len", "aim.buddynamelen", FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL }
-    },
-    { &hf_aim_buddyname,
-      { "Buddy Name", "aim.buddyname", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }
-    },
-    { &hf_aim_userinfo_warninglevel,
-      { "Warning Level", "aim.userinfo.warninglevel", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
-    },
-    { &hf_aim_snac_location_request_user_info_infotype,
-      { "Infotype", "aim.snac.location.request_user_info.infotype", FT_UINT16, BASE_HEX, VALS(aim_snac_location_request_user_info_infotypes), 0x0,
-	"", HFILL }
-    },
-  };
-
-/* Setup protocol subtree array */
-  static gint *ett[] = {
-    &ett_aim_location,
-  };
-
-/* Register the protocol name and description */
-  proto_aim_location = proto_register_protocol("AIM Location", "AIM Location", "aim_location");
-
-/* Required function calls to register the header fields and subtrees used */
-  proto_register_field_array(proto_aim_location, hf, array_length(hf));
-  proto_register_subtree_array(ett, array_length(ett));
+	/* Setup list of header fields */
+	static hf_register_info hf[] = {
+		{ &hf_aim_buddyname_len,
+			{ "Buddyname len", "aim.buddynamelen", FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL }
+		},
+		{ &hf_aim_buddyname,
+			{ "Buddy Name", "aim.buddyname", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }
+		},
+		{ &hf_aim_userinfo_warninglevel,
+			{ "Warning Level", "aim.userinfo.warninglevel", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
+		},
+		{ &hf_aim_snac_location_request_user_info_infotype,
+			{ "Infotype", "aim.snac.location.request_user_info.infotype", FT_UINT16, BASE_HEX, VALS(aim_snac_location_request_user_info_infotypes), 0x0,
+				"", HFILL }
+		},
+	};
+
+	/* Setup protocol subtree array */
+	static gint *ett[] = {
+		&ett_aim_location,
+	};
+
+	/* Register the protocol name and description */
+	proto_aim_location = proto_register_protocol("AIM Location", "AIM Location", "aim_location");
+
+	/* Required function calls to register the header fields and subtrees used */
+	proto_register_field_array(proto_aim_location, hf, array_length(hf));
+	proto_register_subtree_array(ett, array_length(ett));
 }
 
 void
 proto_reg_handoff_aim_location(void)
 {
-  dissector_handle_t aim_handle;
-  aim_handle = new_create_dissector_handle(dissect_aim_location, proto_aim_location);
-  dissector_add("aim.family", FAMILY_LOCATION, aim_handle);
-  aim_init_family(FAMILY_LOCATION, "Location", aim_fnac_family_location);
+	aim_init_family(proto_aim_location, ett_aim_location, FAMILY_LOCATION, aim_fnac_family_location);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-messaging.c ethereal-0.10.7/epan/dissectors/packet-aim-messaging.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-messaging.c	2004-08-12 17:42:03.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-messaging.c	2004-10-20 17:34:42.000000000 -0500
@@ -4,7 +4,7 @@
  * Copyright 2000, Ralf Hoelzer <ralf@well.com>
  * Copyright 2004, Devin Heitmueller <dheitmueller@netilla.com>
  *
- * $Id: packet-aim-messaging.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-messaging.c 12072 2004-09-23 17:40:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -43,40 +43,6 @@
 
 #define FAMILY_MESSAGING  0x0004
 
-/* Family Messaging Service */
-#define FAMILY_MESSAGING_ERROR          0x0001
-#define FAMILY_MESSAGING_SETICBMPARAM   0x0002
-#define FAMILY_MESSAGING_RESETICBMPARAM 0x0003
-#define FAMILY_MESSAGING_REQPARAMINFO   0x0004
-#define FAMILY_MESSAGING_PARAMINFO      0x0005
-#define FAMILY_MESSAGING_OUTGOING       0x0006
-#define FAMILY_MESSAGING_INCOMING       0x0007
-#define FAMILY_MESSAGING_EVILREQ		0x0008
-#define FAMILY_MESSAGING_EVIL           0x0009
-#define FAMILY_MESSAGING_MISSEDCALL     0x000a
-#define FAMILY_MESSAGING_CLIENTAUTORESP 0x000b
-#define FAMILY_MESSAGING_ACK            0x000c
-#define FAMILY_MESSAGING_MINITYPING     0x0014
-#define FAMILY_MESSAGING_DEFAULT        0xffff
-
-static const value_string aim_fnac_family_messaging[] = {
-  { FAMILY_MESSAGING_ERROR, "Error" },
-  { FAMILY_MESSAGING_SETICBMPARAM, "Set ICBM Parameter" },
-  { FAMILY_MESSAGING_RESETICBMPARAM, "Reset ICBM Parameter" },
-  { FAMILY_MESSAGING_REQPARAMINFO, "Request Parameter Info" },
-  { FAMILY_MESSAGING_PARAMINFO, "Parameter Info" },
-  { FAMILY_MESSAGING_INCOMING, "Incoming" },
-  { FAMILY_MESSAGING_OUTGOING, "Outgoing" },
-  { FAMILY_MESSAGING_EVILREQ, "Evil Request" },
-  { FAMILY_MESSAGING_EVIL, "Evil Response" },
-  { FAMILY_MESSAGING_MISSEDCALL, "Missed Call" },
-  { FAMILY_MESSAGING_CLIENTAUTORESP, "Client Auto Response" },
-  { FAMILY_MESSAGING_ACK, "Acknowledge" },
-  { FAMILY_MESSAGING_MINITYPING, "Mini Typing Notifications (MTN)" },
-  { FAMILY_MESSAGING_DEFAULT, "Messaging Default" },
-  { 0, NULL }
-};
-
 
 #define INCOMING_CH1_MESSAGE_BLOCK     0x0002
 #define INCOMING_CH1_SERVER_ACK_REQ    0x0003
@@ -94,7 +60,33 @@
   { INCOMING_CH1_ICON_PRESENT, "Icon present", dissect_aim_tlv_value_bytes },
   { INCOMING_CH1_BUDDY_REQ, "Buddy Req", dissect_aim_tlv_value_bytes },
   { INCOMING_CH1_TYPING, "Non-direct connect typing notification", dissect_aim_tlv_value_bytes },
-  { 0, "Unknown", NULL }
+  { 0, "Unknown", NULL },
+};
+
+int dissect_aim_tlv_value_rendezvous ( proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo _U_);
+extern int dissect_aim_tlv_value_capability_data ( proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo _U_);
+
+
+#define INCOMING_CH2_SERVER_ACK_REQ    	   0x0003
+#define INCOMING_CH2_RENDEZVOUS_DATA       0x0005
+
+static const aim_tlv messaging_incoming_ch2_tlvs[] = {
+  { INCOMING_CH2_SERVER_ACK_REQ, "Server Ack Requested", dissect_aim_tlv_value_bytes },
+  { INCOMING_CH2_RENDEZVOUS_DATA, "Rendez Vous Data", dissect_aim_tlv_value_rendezvous },
+  { 0, "Unknown", NULL },
+};
+
+#define RENDEZVOUS_TLV_INT_IP				0x0003
+#define RENDEZVOUS_TLV_EXT_IP				0x0004
+#define RENDEZVOUS_TLV_EXT_PORT				0x0005
+#define RENDEZVOUS_TLV_CAPABILITY_DATA		0x2711
+
+static const aim_tlv rendezvous_tlvs[] = {
+	{ RENDEZVOUS_TLV_INT_IP, "Internal IP", dissect_aim_tlv_value_ipv4 },
+	{ RENDEZVOUS_TLV_EXT_IP, "External IP", dissect_aim_tlv_value_ipv4 },
+	{ RENDEZVOUS_TLV_EXT_PORT, "External Port", dissect_aim_tlv_value_uint16 },
+	{ RENDEZVOUS_TLV_CAPABILITY_DATA, "Capability Data", dissect_aim_tlv_value_capability_data },
+	{ 0, "Unknown", NULL },
 };
 
 #define MINITYPING_FINISHED_SIGN			0x0000
@@ -108,6 +100,17 @@
 	{0, NULL }
 };
 
+#define RENDEZVOUS_MSG_REQUEST 		0
+#define RENDEZVOUS_MSG_CANCEL		1
+#define RENDEZVOUS_MSG_ACCEPT 		2
+
+static const value_string rendezvous_msg_types[] = {
+	{ RENDEZVOUS_MSG_REQUEST, "Request" },
+	{ RENDEZVOUS_MSG_CANCEL, "Cancel" },
+	{ RENDEZVOUS_MSG_ACCEPT, "Accept" },
+	{ 0, "Unknown" },
+};
+
 #define EVIL_ORIGIN_ANONYMOUS		1
 #define EVIL_ORIGIN_NONANONYMOUS 	2
 
@@ -134,190 +137,223 @@
 static int hf_aim_icbm_evil = -1;
 static int hf_aim_evil_warn_level = -1;
 static int hf_aim_evil_new_warn_level = -1;
+static int hf_aim_rendezvous_msg_type = -1;
 
 /* Initialize the subtree pointers */
 static gint ett_aim_messaging = -1;
+static gint ett_aim_rendezvous_data = -1;
+
+int dissect_aim_tlv_value_rendezvous ( proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo _U_)
+{
+	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, FALSE);
+	offset+=2;
+	
+	proto_tree_add_item(entry, hf_aim_icbm_cookie, tvb, offset, 8, FALSE);
+	offset += 8;
+
+	offset = dissect_aim_capability(entry, tvb, offset);
+
+	return dissect_aim_tlv_sequence(tvb, pinfo, offset, entry, rendezvous_tlvs);
+}
 
-static int dissect_aim_messaging(tvbuff_t *tvb, packet_info *pinfo, 
-				       proto_tree *tree)
+static int dissect_aim_msg_outgoing(tvbuff_t *tvb, packet_info *pinfo, proto_tree *msg_tree)
 {
-  guint8 buddyname_length = 0;
-  char buddyname[MAX_BUDDYNAME_LENGTH + 1];
-  int offset = 0;
-  struct aiminfo *aiminfo = pinfo->private_data;
-  proto_item *ti = NULL;
-  proto_tree *msg_tree = NULL;
-  
-  if(tree) {
-    ti = proto_tree_add_text(tree, tvb, 0, -1,"AIM Messaging Service");
-    msg_tree = proto_item_add_subtree(ti, ett_aim_messaging);
-  }
-
-  switch(aiminfo->subtype)
-    {    
-    case FAMILY_MESSAGING_ERROR:
-      return dissect_aim_snac_error(tvb, pinfo, offset, msg_tree);
-    case FAMILY_MESSAGING_RESETICBMPARAM:
-    case FAMILY_MESSAGING_REQPARAMINFO:
-      /* No data */
-      return 0;
-    case FAMILY_MESSAGING_OUTGOING:
-
-      /* ICBM Cookie */
-      proto_tree_add_item(msg_tree, hf_aim_icbm_cookie, tvb, offset, 8, FALSE);
-      offset += 8;
-
-      /* Message Channel ID */
-      proto_tree_add_item(msg_tree, hf_aim_message_channel_id, tvb, offset, 2,
-			  FALSE);
-      offset += 2;
-
-      /* Add the outgoing username to the info column */
-      if (check_col(pinfo->cinfo, COL_INFO)) {
-	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);
-
-      while(tvb_reported_length_remaining(tvb, offset) > 0) {
-	/* djh - Note that we reuse the "incoming ch1 tlv" set even though this
-	   is outgoing.  We may need to split this to a separate TLV set, but
-	   so far I haven't seen the need @@@@@@@@ */
-	offset = dissect_aim_tlv(tvb, pinfo, offset, msg_tree, 
-					  messaging_incoming_ch1_tlvs);
-      }
-
-      return offset;
-      
-    case FAMILY_MESSAGING_INCOMING:
-
-      /* ICBM Cookie */
-      proto_tree_add_item(msg_tree, hf_aim_icbm_cookie, tvb, offset, 8, FALSE);
-      offset += 8;
-
-      /* Message Channel ID */
-      proto_tree_add_item(msg_tree, hf_aim_message_channel_id, tvb, offset, 2,
-			  FALSE);
-      offset += 2;
-
-      offset = dissect_aim_userinfo(tvb, pinfo, offset, msg_tree);
-	  
-      while(tvb_reported_length_remaining(tvb, offset) > 0) {
-	offset = dissect_aim_tlv(tvb, pinfo, offset, msg_tree, 
-					  messaging_incoming_ch1_tlvs);
-      }
-      
-      return offset;
-    case FAMILY_MESSAGING_SETICBMPARAM:
-    case FAMILY_MESSAGING_PARAMINFO:
-      proto_tree_add_item(msg_tree, hf_aim_icbm_channel, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
-      proto_tree_add_item(msg_tree, hf_aim_icbm_msg_flags, tvb, offset, 4, tvb_get_ntoh24(tvb, offset)); offset+=4;
-      proto_tree_add_item(msg_tree, hf_aim_icbm_max_snac_size, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
-      proto_tree_add_item(msg_tree, hf_aim_icbm_max_sender_warnlevel, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
-      proto_tree_add_item(msg_tree, hf_aim_icbm_max_receiver_warnlevel, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
-      proto_tree_add_item(msg_tree, hf_aim_icbm_min_msg_interval, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
-      proto_tree_add_item(msg_tree, hf_aim_icbm_unknown, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
-      return offset;
-    case FAMILY_MESSAGING_EVILREQ:
-      proto_tree_add_item(msg_tree, hf_aim_icbm_evil, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
-      return dissect_aim_buddyname(tvb, pinfo, offset, tree);
-    case FAMILY_MESSAGING_EVIL:
-      proto_tree_add_item(msg_tree, hf_aim_evil_warn_level, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
-      proto_tree_add_item(msg_tree, hf_aim_evil_new_warn_level, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
-      return offset;
-    case FAMILY_MESSAGING_MINITYPING:
-      proto_tree_add_item(msg_tree,hf_aim_icbm_notification_cookie, tvb, offset, 8, FALSE); offset+=8;
-      proto_tree_add_item(msg_tree,hf_aim_icbm_notification_channel, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
-      offset = dissect_aim_buddyname(tvb, pinfo, offset, msg_tree);
-      proto_tree_add_item(msg_tree,hf_aim_icbm_notification_type, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
-      return offset;
-    case FAMILY_MESSAGING_MISSEDCALL:
-    case FAMILY_MESSAGING_CLIENTAUTORESP:
-    case FAMILY_MESSAGING_ACK:
-      /*FIXME*/
-
-
-    default:
-      return 0;
-    }
+	int offset = 0;
+	const aim_tlv *ch_tlvs = NULL;
+	guint16 channel_id;
+	
+	/* ICBM Cookie */
+	proto_tree_add_item(msg_tree, hf_aim_icbm_cookie, tvb, offset, 8, FALSE);
+	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,
+						FALSE);
+	offset += 2;
+
+	/* Add the outgoing username to the info column */
+	if (check_col(pinfo->cinfo, COL_INFO)) {
+		char buddyname[MAX_BUDDYNAME_LENGTH+1];
+		int 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 1: ch_tlvs = messaging_incoming_ch1_tlvs; break;
+	case 2: ch_tlvs = messaging_incoming_ch2_tlvs; break;
+	default: return offset;
+	}
+			
+	return dissect_aim_tlv_sequence(tvb, pinfo, offset, msg_tree, ch_tlvs);
 }
 
+
+static int dissect_aim_msg_incoming(tvbuff_t *tvb, packet_info *pinfo, proto_tree *msg_tree)
+{
+	int offset = 0;
+	const aim_tlv *ch_tlvs;
+	guint16 channel_id; 
+	
+	/* ICBM Cookie */
+	proto_tree_add_item(msg_tree, hf_aim_icbm_cookie, tvb, offset, 8, FALSE);
+	offset += 8;
+
+	/* Message Channel ID */
+	proto_tree_add_item(msg_tree, hf_aim_message_channel_id, tvb, offset, 2,
+						FALSE);
+	channel_id = tvb_get_ntohs(tvb, offset);
+	offset += 2;
+
+	offset = dissect_aim_userinfo(tvb, pinfo, offset, msg_tree);
+				
+	switch(channel_id) {
+	case 1: ch_tlvs = messaging_incoming_ch1_tlvs; break;
+	case 2: ch_tlvs = messaging_incoming_ch2_tlvs; break;
+	default: return offset;
+	}
+
+	return dissect_aim_tlv_sequence(tvb, pinfo, offset, msg_tree, 
+								 ch_tlvs);
+}
+
+static int dissect_aim_msg_params(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *msg_tree)
+{
+	int offset = 0;
+	proto_tree_add_item(msg_tree, hf_aim_icbm_channel, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
+	proto_tree_add_item(msg_tree, hf_aim_icbm_msg_flags, tvb, offset, 4, tvb_get_ntoh24(tvb, offset)); offset+=4;
+	proto_tree_add_item(msg_tree, hf_aim_icbm_max_snac_size, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
+	proto_tree_add_item(msg_tree, hf_aim_icbm_max_sender_warnlevel, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
+	proto_tree_add_item(msg_tree, hf_aim_icbm_max_receiver_warnlevel, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
+	proto_tree_add_item(msg_tree, hf_aim_icbm_min_msg_interval, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
+	proto_tree_add_item(msg_tree, hf_aim_icbm_unknown, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
+	return offset;
+}
+
+static int dissect_aim_msg_evil_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *msg_tree)
+{
+	int offset = 0;
+	proto_tree_add_item(msg_tree, hf_aim_icbm_evil, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
+	return dissect_aim_buddyname(tvb, pinfo, offset, msg_tree);
+}
+
+
+static int dissect_aim_msg_evil_repl(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *msg_tree)
+{
+	int offset = 0;
+	proto_tree_add_item(msg_tree, hf_aim_evil_warn_level, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
+	proto_tree_add_item(msg_tree, hf_aim_evil_new_warn_level, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
+	return offset;
+}
+
+static int dissect_aim_msg_minityping(tvbuff_t *tvb, packet_info *pinfo, proto_tree *msg_tree)
+{
+	int offset = 0;
+	proto_tree_add_item(msg_tree,hf_aim_icbm_notification_cookie, tvb, offset, 8, FALSE); offset+=8;
+	proto_tree_add_item(msg_tree,hf_aim_icbm_notification_channel, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
+	offset = dissect_aim_buddyname(tvb, pinfo, offset, msg_tree);
+	proto_tree_add_item(msg_tree,hf_aim_icbm_notification_type, tvb, offset, 2, tvb_get_ntohs(tvb, offset)); offset+=2;
+	return offset;
+}
+
+static const aim_subtype aim_fnac_family_messaging[] = {
+	{ 0x0001, "Error", dissect_aim_snac_error },
+	{ 0x0002, "Set ICBM Parameter", dissect_aim_msg_params },
+	{ 0x0003, "Reset ICBM Parameter", NULL },
+	{ 0x0004, "Request Parameter Info", NULL},
+	{ 0x0005, "Parameter Info", dissect_aim_msg_params },
+	{ 0x0006, "Outgoing", dissect_aim_msg_outgoing },
+	{ 0x0007, "Incoming", dissect_aim_msg_incoming },
+	{ 0x0008, "Evil Request", dissect_aim_msg_evil_req },
+	{ 0x0009, "Evil Response", dissect_aim_msg_evil_repl  },
+	{ 0x000a, "Missed Call", NULL },
+	{ 0x000b, "Client Auto Response", NULL },
+	{ 0x000c, "Acknowledge", NULL },
+	{ 0x0014, "Mini Typing Notifications (MTN)", dissect_aim_msg_minityping },
+	{ 0, NULL, NULL }
+};
+
+
+
 /* Register the protocol with Ethereal */
 void
 proto_register_aim_messaging(void)
 {
 
-/* Setup list of header fields */
-  static hf_register_info hf[] = {
-    { &hf_aim_icbm_channel,
-      { "Channel to setup", "aim.icbm.channel", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL },
-    },
-    { &hf_aim_icbm_msg_flags, 
-      { "Message Flags", "aim.icbm.flags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL },
-    },
-    { &hf_aim_icbm_max_snac_size,
-      { "Max SNAC Size", "aim.icbm.max_snac", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL },
-    },
-    { &hf_aim_icbm_max_sender_warnlevel,
-      { "Max sender warn level", "aim.icbm.max_sender_warn-level", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL },
-    },
-    { &hf_aim_icbm_max_receiver_warnlevel,
-      { "max receiver warn level", "aim.icbm.max_receiver_warnlevel", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL },
-    },
-    { &hf_aim_icbm_min_msg_interval,
-      { "Minimum message interval (seconds)", "aim.icbm.min_msg_interval", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL },
-    },
-    { &hf_aim_icbm_unknown,
-      { "Unknown parameter", "aim.icbm.unknown", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL },
-    },
-    { &hf_aim_icbm_cookie,
-      { "ICBM Cookie", "aim.messaging.icbmcookie", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL }
-    },
-    { &hf_aim_message_channel_id,
-      { "Message Channel ID", "aim.messaging.channelid", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }
-    },
-    { &hf_aim_icbm_evil,
-      { "Send Evil Bit As", "aim.evilreq.origin", FT_UINT16, BASE_DEC, VALS(evil_origins), 0x0, "", HFILL },
-    },
-    { &hf_aim_evil_warn_level,
-      { "Old warning level", "aim.evil.warn_level", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
-    },
-    { &hf_aim_evil_new_warn_level,
-      { "New warning level", "aim.evil.new_warn_level", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
-    },
-    { &hf_aim_icbm_notification_cookie,
-      { "Notification Cookie", "aim.notification.cookie", FT_BYTES, BASE_DEC, NULL, 0x0, "", HFILL },
-    },
-    { &hf_aim_icbm_notification_channel,
-      { "Notification Channel", "aim.notification.channel", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
-    },
-    { &hf_aim_icbm_notification_type,
-      { "Notification Type", "aim.notification.type", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
-    },
-  };
-
-/* Setup protocol subtree array */
-  static gint *ett[] = {
-    &ett_aim_messaging,
-  };
-
-/* Register the protocol name and description */
-  proto_aim_messaging = proto_register_protocol("AIM Messaging", "AIM Messaging", "aim_messaging");
-
-/* Required function calls to register the header fields and subtrees used */
-  proto_register_field_array(proto_aim_messaging, hf, array_length(hf));
-  proto_register_subtree_array(ett, array_length(ett));
+	/* Setup list of header fields */
+	static hf_register_info hf[] = {
+		{ &hf_aim_icbm_channel,
+			{ "Channel to setup", "aim.icbm.channel", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL },
+		},
+		{ &hf_aim_icbm_msg_flags, 
+			{ "Message Flags", "aim.icbm.flags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL },
+		},
+		{ &hf_aim_icbm_max_snac_size,
+			{ "Max SNAC Size", "aim.icbm.max_snac", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL },
+		},
+		{ &hf_aim_icbm_max_sender_warnlevel,
+			{ "Max sender warn level", "aim.icbm.max_sender_warn-level", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL },
+		},
+		{ &hf_aim_icbm_max_receiver_warnlevel,
+			{ "max receiver warn level", "aim.icbm.max_receiver_warnlevel", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL },
+		},
+		{ &hf_aim_icbm_min_msg_interval,
+			{ "Minimum message interval (seconds)", "aim.icbm.min_msg_interval", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL },
+		},
+		{ &hf_aim_icbm_unknown,
+			{ "Unknown parameter", "aim.icbm.unknown", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL },
+		},
+		{ &hf_aim_icbm_cookie,
+			{ "ICBM Cookie", "aim.messaging.icbmcookie", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL }
+		},
+		{ &hf_aim_message_channel_id,
+			{ "Message Channel ID", "aim.messaging.channelid", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }
+		},
+		{ &hf_aim_icbm_evil,
+			{ "Send Evil Bit As", "aim.evilreq.origin", FT_UINT16, BASE_DEC, VALS(evil_origins), 0x0, "", HFILL },
+		},
+		{ &hf_aim_evil_warn_level,
+			{ "Old warning level", "aim.evil.warn_level", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
+		},
+		{ &hf_aim_evil_new_warn_level,
+			{ "New warning level", "aim.evil.new_warn_level", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
+		},
+		{ &hf_aim_icbm_notification_cookie,
+			{ "Notification Cookie", "aim.notification.cookie", FT_BYTES, BASE_DEC, NULL, 0x0, "", HFILL },
+		},
+		{ &hf_aim_icbm_notification_channel,
+			{ "Notification Channel", "aim.notification.channel", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
+		},
+		{ &hf_aim_icbm_notification_type,
+			{ "Notification Type", "aim.notification.type", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
+		},
+		{ &hf_aim_rendezvous_msg_type,
+			{ "Message Type", "aim.rendezvous.msg_type", FT_UINT16, BASE_HEX, VALS(rendezvous_msg_types), 0x0, "", HFILL },
+		},
+	};
+
+	/* Setup protocol subtree array */
+	static gint *ett[] = {
+		&ett_aim_messaging,
+		&ett_aim_rendezvous_data,
+	};
+
+	/* Register the protocol name and description */
+	proto_aim_messaging = proto_register_protocol("AIM Messaging", "AIM Messaging", "aim_messaging");
+
+	/* Required function calls to register the header fields and subtrees used */
+	proto_register_field_array(proto_aim_messaging, hf, array_length(hf));
+	proto_register_subtree_array(ett, array_length(ett));
 }
 
 void
 proto_reg_handoff_aim_messaging(void)
 {
-  dissector_handle_t aim_handle;
-
-  aim_handle = new_create_dissector_handle(dissect_aim_messaging, proto_aim_messaging);
-  dissector_add("aim.family", FAMILY_MESSAGING, aim_handle);
-  aim_init_family(FAMILY_MESSAGING, "Messaging", aim_fnac_family_messaging);
+	aim_init_family(proto_aim_messaging, ett_aim_messaging, FAMILY_MESSAGING, aim_fnac_family_messaging);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-oft.c ethereal-0.10.7/epan/dissectors/packet-aim-oft.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-oft.c	2004-08-12 17:41:59.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-oft.c	2004-10-20 17:34:40.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for AIM Instant Messenger (OSCAR) dissection
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  *
- * $Id: packet-aim-oft.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-oft.c 12072 2004-09-23 17:40:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -44,6 +44,41 @@
 
 static int proto_aim_oft = -1;
 
+static int ett_aim_recvfile = -1;
+static int ett_aim_sendfile = -1;
+
+/* 
+ * cookie (8 chars)
+ * encrypt (uint16)
+ * compress (uint16)
+ * totfiles (uint16)
+ * filesleft (uint16)
+ * totparts (uint16)
+ * partsleft (uint16)
+ * totsize (uint32)
+ * size (uint32)
+ * modtime (uint32)
+ * checksum (uint32)
+ * rfrcsum (uint32)
+ * rfsize (uint32)
+ * cretime (uint32)
+ * rfcsum (uint32)
+ * nrecvd (uint32)
+ * recvscum (uint32)
+ * idstring (32 chars)
+ * flags (uint8)
+ * lnameoffset (uint8)
+ * lsizeoffset (uint8)
+ * unknown (69 chars)
+ * macfileinfo (16 chars)
+ * nencode (uint16)
+ * nlanguage (uint16)
+ * filename (raw, 64 chars)
+ * 
+ * length of file (uint16)
+ * file data
+ */
+
 
 /* Register the protocol with Ethereal */
 void
@@ -62,8 +97,8 @@
   proto_aim_oft = proto_register_protocol("AIM OFT", "AIM OFT", "aim_oft");
 
 /* Required function calls to register the header fields and subtrees used */
-/*  proto_register_field_array(proto_aim_oft, hf, array_length(hf));
-  proto_register_subtree_array(ett, array_length(ett));*/
+/*  proto_register_field_array(proto_aim_oft, hf, array_length(hf));*/
+/*	proto_register_subtree_array(ett, array_length(ett));*/
 }
 
 void
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-popup.c ethereal-0.10.7/epan/dissectors/packet-aim-popup.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-popup.c	2004-08-12 17:42:15.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-popup.c	2004-10-20 17:34:51.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for AIM Instant Messenger (OSCAR) dissection
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  *
- * $Id: packet-aim-popup.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-popup.c 12060 2004-09-21 08:01:29Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -42,17 +42,6 @@
 /* SNAC families */
 #define FAMILY_POPUP      0x0008
 
-/* Family Popup */
-#define FAMILY_POPUP_ERROR            0x0001
-#define FAMILY_POPUP_COMMAND          0x0002
-#define FAMILY_POPUP_DEFAULT          0xffff
-
-static const value_string aim_fnac_family_popup[] = {
-  { FAMILY_POPUP_ERROR, "Error" },
-  { FAMILY_POPUP_COMMAND, "Display Popup Message Server Command" },
-  { FAMILY_POPUP_DEFAULT, "Popup Default" },
-  { 0, NULL }
-};
 
 #define AIM_POPUP_TLV_MESSAGE_TEXT		0x001
 #define AIM_POPUP_TLV_URL_STRING		0x002
@@ -75,29 +64,18 @@
 /* Initialize the subtree pointers */
 static gint ett_aim_popup    = -1;
 
-static int dissect_aim_snac_popup(tvbuff_t *tvb, packet_info *pinfo, 
-								  proto_tree *tree) 
+static int dissect_aim_popup(tvbuff_t *tvb, packet_info *pinfo, proto_tree *popup_tree)
 {
-    int offset = 0;
-    struct aiminfo *aiminfo = pinfo->private_data;
-    proto_item *ti = NULL;
-    proto_tree *popup_tree = NULL;
-                                                                                
-    if(tree) {
-        ti = proto_tree_add_text(tree, tvb, 0, -1,"AIM Popup Service");
-        popup_tree = proto_item_add_subtree(ti, ett_aim_popup);
-    }
-                                                             
-	switch(aiminfo->subtype) {
-	case FAMILY_POPUP_ERROR:
-      return dissect_aim_snac_error(tvb, pinfo, 0, popup_tree);
-	case FAMILY_POPUP_COMMAND:
-	  return dissect_aim_tlv(tvb, pinfo, offset, popup_tree, popup_tlvs);
-	}
-
-	return 0;
+	return dissect_aim_tlv(tvb, pinfo, 0, popup_tree, popup_tlvs);
 }
 
+static const aim_subtype aim_fnac_family_popup[] = {
+  { 0x0001, "Error", dissect_aim_snac_error },
+  { 0x0002, "Display Popup Message Server Command" , dissect_aim_popup },
+  { 0, NULL, NULL }
+};
+
+
 /* Register the protocol with Ethereal */
 void
 proto_register_aim_popup(void)
@@ -118,8 +96,5 @@
 void
 proto_reg_handoff_aim_popup(void)
 {
-  dissector_handle_t aim_handle;
-  aim_handle = new_create_dissector_handle(dissect_aim_snac_popup, proto_aim_popup);
-  dissector_add("aim.family", FAMILY_POPUP, aim_handle);
-  aim_init_family(FAMILY_POPUP, "Popup", aim_fnac_family_popup);
+  aim_init_family(proto_aim_popup, ett_aim_popup, FAMILY_POPUP, aim_fnac_family_popup);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-signon.c ethereal-0.10.7/epan/dissectors/packet-aim-signon.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-signon.c	2004-08-12 17:42:21.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-signon.c	2004-10-20 17:34:52.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  * Copyright 2000, Ralf Hoelzer <ralf@well.com>
  *
- * $Id: packet-aim-signon.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-signon.c 12072 2004-09-23 17:40:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -42,35 +42,6 @@
 
 #define FAMILY_SIGNON     0x0017
 
-/* Family Signon */
-#define FAMILY_SIGNON_ERROR          0x0001
-#define FAMILY_SIGNON_LOGON          0x0002
-#define FAMILY_SIGNON_LOGON_REPLY    0x0003
-#define FAMILY_SIGNON_UIN_REQ        0x0004
-#define FAMILY_SIGNON_UIN_REPL       0x0005
-#define FAMILY_SIGNON_SIGNON         0x0006
-#define FAMILY_SIGNON_SIGNON_REPLY   0x0007
-#define FAMILY_SIGNON_S_SECUREID_REQ 0x000a
-#define FAMILY_SIGNON_C_SECUREID_REP 0x000b
-
-static const value_string aim_fnac_family_signon[] = {
-  { FAMILY_SIGNON_LOGON, "Logon" },
-  { FAMILY_SIGNON_LOGON_REPLY, "Logon Reply" },
-  { FAMILY_SIGNON_UIN_REQ, "Request UIN" },
-  { FAMILY_SIGNON_UIN_REPL, "New UIN response" },
-  { FAMILY_SIGNON_SIGNON, "Sign-on" },
-  { FAMILY_SIGNON_SIGNON_REPLY, "Sign-on Reply" },
-  { FAMILY_SIGNON_S_SECUREID_REQ, "Server SecureID Request" },
-  { FAMILY_SIGNON_C_SECUREID_REP, "Client SecureID Reply" },
-  { 0, NULL }
-};
-
-static int dissect_aim_snac_signon(tvbuff_t *tvb, packet_info *pinfo, 
-				    proto_tree *tree);
-static int dissect_aim_snac_signon_logon(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *tree);
-static int dissect_aim_snac_signon_logon_reply(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *tree);
-static int dissect_aim_snac_signon_signon(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *tree);
-static int dissect_aim_snac_signon_signon_reply(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *tree);
 
 /* Initialize the protocol and registered fields */
 static int proto_aim_signon = -1;
@@ -82,59 +53,21 @@
 /* Initialize the subtree pointers */
 static gint ett_aim_signon   = -1;
 
-static int dissect_aim_snac_signon(tvbuff_t *tvb, packet_info *pinfo, 
-				    proto_tree *tree)
-{
-	struct aiminfo *aiminfo = pinfo->private_data;
-	int offset = 0;
-
-	proto_item *ti = NULL;
-	proto_tree *signon_tree = NULL;
-	if(tree) {
-		ti = proto_tree_add_text(tree, tvb, 0, -1,"AIM Signon");
-		signon_tree = proto_item_add_subtree(ti, ett_aim_signon);
-	}                                                                                   
-	
-  switch(aiminfo->subtype)
-    {
-	case FAMILY_SIGNON_ERROR:
-      return dissect_aim_snac_error(tvb, pinfo, offset, signon_tree);
-    case FAMILY_SIGNON_LOGON:
-      return dissect_aim_snac_signon_logon(tvb, pinfo, offset, signon_tree);
-    case FAMILY_SIGNON_LOGON_REPLY:
-      return dissect_aim_snac_signon_logon_reply(tvb, pinfo, offset, signon_tree);
-    case FAMILY_SIGNON_SIGNON:
-      return dissect_aim_snac_signon_signon(tvb, pinfo, offset, signon_tree);
-    case FAMILY_SIGNON_SIGNON_REPLY:
-      return dissect_aim_snac_signon_signon_reply(tvb, pinfo, offset, signon_tree);
-	case FAMILY_SIGNON_S_SECUREID_REQ:
-	  /* No data */
-	  return 0;
-	case FAMILY_SIGNON_UIN_REQ:
-	case FAMILY_SIGNON_UIN_REPL:
-	case FAMILY_SIGNON_C_SECUREID_REP:
-	/*FIXME*/	
-	default:
-	  return 0;
-    }
-}
-
 static int dissect_aim_snac_signon_logon(tvbuff_t *tvb, packet_info *pinfo, 
-					  int offset, proto_tree *tree)
+					  proto_tree *tree)
 {
-  while (tvb_length_remaining(tvb, offset) > 0) {
-    offset = dissect_aim_tlv(tvb, pinfo, offset, tree, client_tlvs);
-  }
-  return offset;
+	int offset = 0;
+	while (tvb_length_remaining(tvb, offset) > 0) {
+		offset = dissect_aim_tlv(tvb, pinfo, offset, tree, client_tlvs);
+	}
+	return offset;
 }
 
 static int dissect_aim_snac_signon_logon_reply(tvbuff_t *tvb, 
 						packet_info *pinfo, 
-						int offset, proto_tree *tree)
+						proto_tree *tree)
 {
-    if (check_col(pinfo->cinfo, COL_INFO)) 
-      col_append_fstr(pinfo->cinfo, COL_INFO, ", Login information reply");
-
+	int offset = 0;
     while (tvb_length_remaining(tvb, offset) > 0) {
       offset = dissect_aim_tlv(tvb, pinfo, offset, tree, client_tlvs);
     }
@@ -142,93 +75,117 @@
 }
 
 static int dissect_aim_snac_signon_signon(tvbuff_t *tvb, packet_info *pinfo, 
-					   int offset, proto_tree *tree)
+					   proto_tree *tree)
 {
-  guint8 buddyname_length = 0;
-  char buddyname[MAX_BUDDYNAME_LENGTH + 1];
+	guint8 buddyname_length = 0;
+	int offset = 0;
+	char buddyname[MAX_BUDDYNAME_LENGTH + 1];
+
+	/* Info Type */
+	proto_tree_add_item(tree, hf_aim_infotype, tvb, offset, 2, FALSE);
+	offset += 2;
+
+	/* Unknown */
+	offset += 1;
+
+	/* Buddy Name */
+	buddyname_length = aim_get_buddyname( buddyname, tvb, offset, offset + 1 );
+
+	if (check_col(pinfo->cinfo, COL_INFO)) {
+		col_append_fstr(pinfo->cinfo, COL_INFO, " Username: %s",
+						format_text(buddyname, buddyname_length));
+	}
+
+	if(tree) {
+		offset+=dissect_aim_buddyname(tvb, pinfo, offset, tree);
+	}
 
-  /* Info Type */
-  proto_tree_add_item(tree, hf_aim_infotype, tvb, offset, 2, FALSE);
-  offset += 2;
-
-  /* Unknown */
-  offset += 1;
-
-  /* Buddy Name */
-  buddyname_length = aim_get_buddyname( buddyname, tvb, offset, offset + 1 );
-  
-  if (check_col(pinfo->cinfo, COL_INFO)) {
-    col_append_fstr(pinfo->cinfo, COL_INFO, " Username: %s",
-                    format_text(buddyname, buddyname_length));
-  }
-  
-  if(tree) {
-    proto_tree_add_text(tree, tvb, offset + 1, buddyname_length, 
-			"Screen Name: %s",
-			format_text(buddyname, buddyname_length));
-  }
-  
-  offset += buddyname_length + 1;
-  return offset;
+	return offset;
 }
 
 static int dissect_aim_snac_signon_signon_reply(tvbuff_t *tvb, 
-						 packet_info *pinfo, 
-						 int offset, proto_tree *tree)
+												packet_info *pinfo _U_, 
+												proto_tree *tree)
+{
+	int offset = 0;
+	guint16 challenge_length = 0;
+
+	/* Logon Challenge Length */
+	challenge_length = tvb_get_ntohs(tvb, offset);
+	proto_tree_add_item(tree, hf_aim_signon_challenge_len, tvb, offset, 2, FALSE);
+	offset += 2;
+
+	/* Challenge */
+	proto_tree_add_item(tree, hf_aim_signon_challenge, tvb, offset, challenge_length, FALSE);
+	offset += challenge_length;
+	return offset;
+}
+
+static int dissect_aim_tlv_value_registration(proto_item *ti _U_, guint16 value_id _U_, tvbuff_t *tvb _U_, packet_info *pinfo)
 {
-  guint16 challenge_length = 0;
+	/* FIXME */
+	return 0;
+}
+
+#define REG_TLV_REGISTRATION_INFO 	0x0001
 
-  if (check_col(pinfo->cinfo, COL_INFO)) 
-    col_append_fstr(pinfo->cinfo, COL_INFO, ", Sign-on reply");
+static const aim_tlv registration_tlvs[] = {
+	{ REG_TLV_REGISTRATION_INFO, "Registration Info", dissect_aim_tlv_value_registration },
+	{ 0, "Unknown", NULL },
+};
 
-  /* Logon Challenge Length */
-  challenge_length = tvb_get_ntohs(tvb, offset);
-  proto_tree_add_item(tree, hf_aim_signon_challenge_len, tvb, offset, 2, FALSE);
-  offset += 2;
-
-  /* Challenge */
-  proto_tree_add_item(tree, hf_aim_signon_challenge, tvb, offset, challenge_length, FALSE);
-  offset += challenge_length;
-  return offset;
+static int dissect_aim_snac_register (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+	return dissect_aim_tlv(tvb, pinfo, 0, tree, registration_tlvs);
 }
 
+static const aim_subtype aim_fnac_family_signon[] = {
+	{ 0x0001, "Error", dissect_aim_snac_error },
+	{ 0x0002, "Logon", dissect_aim_snac_signon_logon },
+	{ 0x0003, "Logon Reply", dissect_aim_snac_signon_logon_reply },
+	{ 0x0004, "Request UIN", dissect_aim_snac_register },
+	{ 0x0005, "New UIN response", dissect_aim_snac_register },
+	{ 0x0006, "Sign-on", dissect_aim_snac_signon_signon },
+	{ 0x0007, "Sign-on Reply", dissect_aim_snac_signon_signon_reply },
+	{ 0x000a, "Server SecureID Request", NULL },
+	{ 0x000b, "Client SecureID Reply", NULL },
+	{ 0, NULL, NULL }
+};
+
+
 /* Register the protocol with Ethereal */
 void
 proto_register_aim_signon(void)
 {
 
-/* Setup list of header fields */
-  static hf_register_info hf[] = {
-    { &hf_aim_infotype,
-      { "Infotype", "aim.infotype", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }
-    },
-    { &hf_aim_signon_challenge_len,
-      { "Signon challenge length", "aim.signon.challengelen", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }
-    },
-    { &hf_aim_signon_challenge,
-      { "Signon challenge", "aim.signon.challenge", FT_STRING, BASE_HEX, NULL, 0x0, "", HFILL }
-    },
-  };
-
-/* Setup protocol subtree array */
-  static gint *ett[] = {
-    &ett_aim_signon,
-  };
-
-/* Register the protocol name and description */
-  proto_aim_signon = proto_register_protocol("AIM Signon", "AIM Signon", "aim_signon");
-
-/* Required function calls to register the header fields and subtrees used */
-  proto_register_field_array(proto_aim_signon, hf, array_length(hf));
-  proto_register_subtree_array(ett, array_length(ett));
+	/* Setup list of header fields */
+	static hf_register_info hf[] = {
+		{ &hf_aim_infotype,
+			{ "Infotype", "aim.infotype", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }
+		},
+		{ &hf_aim_signon_challenge_len,
+			{ "Signon challenge length", "aim.signon.challengelen", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }
+		},
+		{ &hf_aim_signon_challenge,
+			{ "Signon challenge", "aim.signon.challenge", FT_STRING, BASE_HEX, NULL, 0x0, "", HFILL }
+		},
+	};
+
+	/* Setup protocol subtree array */
+	static gint *ett[] = {
+		&ett_aim_signon,
+	};
+
+	/* Register the protocol name and description */
+	proto_aim_signon = proto_register_protocol("AIM Signon", "AIM Signon", "aim_signon");
+
+	/* Required function calls to register the header fields and subtrees used */
+	proto_register_field_array(proto_aim_signon, hf, array_length(hf));
+	proto_register_subtree_array(ett, array_length(ett));
 }
 
 void
 proto_reg_handoff_aim_signon(void)
 {
-  dissector_handle_t aim_handle;
-
-  aim_handle = new_create_dissector_handle(dissect_aim_snac_signon, proto_aim_signon);
-  dissector_add("aim.family", FAMILY_SIGNON, aim_handle);
-  aim_init_family(FAMILY_SIGNON, "Signon", aim_fnac_family_signon);
+	aim_init_family(proto_aim_signon, ett_aim_signon, FAMILY_SIGNON, aim_fnac_family_signon);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-ssi.c ethereal-0.10.7/epan/dissectors/packet-aim-ssi.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-ssi.c	2004-08-12 17:42:00.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-ssi.c	2004-10-20 17:34:40.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  * Copyright 2000, Ralf Hoelzer <ralf@well.com>
  *
- * $Id: packet-aim-ssi.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-ssi.c 12063 2004-09-22 08:04:40Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -42,53 +42,6 @@
 
 #define FAMILY_SSI        0x0013
 
-/* Family Server-Stored Buddy Lists */
-#define FAMILY_SSI_ERROR              0x0001
-#define FAMILY_SSI_REQRIGHTS          0x0002
-#define FAMILY_SSI_RIGHTSINFO         0x0003
-#define FAMILY_SSI_REQLIST_FIRSTTIME  0x0004
-#define FAMILY_SSI_REQLIST            0x0005
-#define FAMILY_SSI_LIST               0x0006
-#define FAMILY_SSI_ACTIVATE           0x0007
-#define FAMILY_SSI_ADD                0x0008
-#define FAMILY_SSI_MOD                0x0009
-#define FAMILY_SSI_DEL                0x000a
-#define FAMILY_SSI_SRVACK             0x000e
-#define FAMILY_SSI_NOLIST             0x000f
-#define FAMILY_SSI_EDITSTART          0x0011
-#define FAMILY_SSI_EDITSTOP           0x0012
-#define FAMILY_SSI_GRANT_FUTURE_AUTH  0x0014
-#define FAMILY_SSI_FUTUR_AUTH_GRANTED 0x0015
-#define FAMILY_SSI_SEND_AUTH_REQ      0x0018
-#define FAMILY_SSI_AUTH_REQ           0x0019
-#define FAMILY_SSI_SEND_AUTH_REPLY    0x001a
-#define FAMILY_SSI_AUTH_REPLY         0x001b
-#define FAMILY_SSI_WAS_ADDED          0x001c
-
-static const value_string aim_fnac_family_ssi[] = {
-  { FAMILY_SSI_ERROR, "Error" },
-  { FAMILY_SSI_REQRIGHTS, "Request Rights" },
-  { FAMILY_SSI_RIGHTSINFO, "Rights Info" },
-  { FAMILY_SSI_REQLIST_FIRSTTIME, "Request List (first time)" },
-  { FAMILY_SSI_REQLIST, "Request List" },
-  { FAMILY_SSI_LIST, "List" },
-  { FAMILY_SSI_ACTIVATE, "Activate" },
-  { FAMILY_SSI_ADD, "Add Buddy" },
-  { FAMILY_SSI_MOD, "Modify Buddy" },
-  { FAMILY_SSI_DEL, "Delete Buddy" },
-  { FAMILY_SSI_SRVACK, "Server Ack" },
-  { FAMILY_SSI_NOLIST, "No List" },
-  { FAMILY_SSI_EDITSTART, "Edit Start" },
-  { FAMILY_SSI_EDITSTOP, "Edit Stop" },
-  { FAMILY_SSI_GRANT_FUTURE_AUTH, "Grant Future Authorization to Client" },
-  { FAMILY_SSI_FUTUR_AUTH_GRANTED, "Future Authorization Granted" },
-  { FAMILY_SSI_SEND_AUTH_REQ, "Send Authentication Request" },
-  { FAMILY_SSI_AUTH_REQ, "Authentication Request" },
-  { FAMILY_SSI_SEND_AUTH_REPLY, "Send Authentication Reply" },
-  { FAMILY_SSI_AUTH_REPLY, "Authentication Reply" },
-  { FAMILY_SSI_WAS_ADDED, "Remote User Added Client To List" },
-  { 0, NULL }
-};
 
 #define FAMILY_SSI_TYPE_BUDDY         0x0000
 #define FAMILY_SSI_TYPE_GROUP         0x0001
@@ -109,12 +62,12 @@
   { 0, NULL }
 };
 
-static const aim_tlv ssi_rights_tlvs[] = {
-	{ 0, NULL, NULL }
-};
+#define SSI_RIGHTSINFO_TLV_MAX_ITEMS	0x0004
 
-static int dissect_aim_snac_ssi_list(tvbuff_t *tvb, packet_info *pinfo _U_, 
-				      int offset, proto_tree *tree, guint16 subtype _U_);
+static const aim_tlv ssi_rightsinfo_tlvs[] = {
+	{ SSI_RIGHTSINFO_TLV_MAX_ITEMS, "Maximums For Items", dissect_aim_tlv_value_bytes }, 
+	{ 0, "Unknown", NULL },
+};
 
 /* Initialize the protocol and registered fields */
 static int proto_aim_ssi = -1;
@@ -134,198 +87,183 @@
 static gint ett_ssi      = -1;
 
 static int dissect_ssi_item(tvbuff_t *tvb, packet_info *pinfo _U_, 
-				      int offset, proto_tree *ssi_entry, 
-				      guint16 subtype _U_)
+				      int offset, proto_tree *ssi_entry)
 {
-  guint16 buddyname_length = 0;
-  int endoffset;
-  guint16 tlv_len = 0;
-	 /* Buddy Name Length */
-    buddyname_length = tvb_get_ntohs(tvb, offset);
-    proto_tree_add_item(ssi_entry, hf_aim_fnac_subtype_ssi_buddyname_len, 
-			tvb, offset, 2, FALSE);
-    offset += 2;
-    
-    /* Buddy Name */
-    if (buddyname_length > 0) {
-      proto_tree_add_item(ssi_entry, hf_aim_fnac_subtype_ssi_buddyname, tvb, 
-			  offset, buddyname_length, FALSE);
-      offset += buddyname_length;
-    }
-    
-    /* Buddy group ID */
-    proto_tree_add_item(ssi_entry, hf_aim_fnac_subtype_ssi_gid, tvb, offset, 
-			2, FALSE);
-    offset += 2;
-    
-    /* Buddy ID */
-    proto_tree_add_item(ssi_entry, hf_aim_fnac_subtype_ssi_bid, tvb, offset, 
-			2, FALSE);
-    offset += 2;
-    
-    /* Buddy Type */
-    proto_tree_add_item(ssi_entry, hf_aim_fnac_subtype_ssi_type, tvb, offset,
-			2, FALSE);
-    offset += 2;
-    
-    /* Size of the following TLV in bytes (as opposed to the number of 
-       TLV objects in the chain) */
-    tlv_len = tvb_get_ntohs(tvb, offset);
-    proto_tree_add_item(ssi_entry, hf_aim_fnac_subtype_ssi_tlvlen, tvb, 
-			offset, 2, FALSE);
-    offset += 2;
-    
+	guint16 buddyname_length = 0;
+	int endoffset;
+	guint16 tlv_len = 0;
+
+	/* Buddy Name Length */
+	buddyname_length = tvb_get_ntohs(tvb, offset);
+	proto_tree_add_item(ssi_entry, hf_aim_fnac_subtype_ssi_buddyname_len, 
+						tvb, offset, 2, FALSE);
+	offset += 2;
+
+	/* Buddy Name */
+	if (buddyname_length > 0) {
+		proto_tree_add_item(ssi_entry, hf_aim_fnac_subtype_ssi_buddyname, tvb, 
+							offset, buddyname_length, FALSE);
+		offset += buddyname_length;
+	}
+
+	/* Buddy group ID */
+	proto_tree_add_item(ssi_entry, hf_aim_fnac_subtype_ssi_gid, tvb, offset, 
+						2, FALSE);
+	offset += 2;
+
+	/* Buddy ID */
+	proto_tree_add_item(ssi_entry, hf_aim_fnac_subtype_ssi_bid, tvb, offset, 
+						2, FALSE);
+	offset += 2;
+
+	/* Buddy Type */
+	proto_tree_add_item(ssi_entry, hf_aim_fnac_subtype_ssi_type, tvb, offset,
+						2, FALSE);
+	offset += 2;
+
+	/* Size of the following TLV in bytes (as opposed to the number of 
+	   TLV objects in the chain) */
+	tlv_len = tvb_get_ntohs(tvb, offset);
+	proto_tree_add_item(ssi_entry, hf_aim_fnac_subtype_ssi_tlvlen, tvb, 
+						offset, 2, FALSE);
+	offset += 2;
+
 	endoffset = offset;
-    /* For now, we just dump the TLV contents as-is, since there is not a
-       TLV dissection utility that works based on total chain length */
+	/* For now, we just dump the TLV contents as-is, since there is not a
+	   TLV dissection utility that works based on total chain length */
 	while(endoffset < offset+tlv_len) {
-      	endoffset = dissect_aim_tlv(tvb, pinfo, endoffset, ssi_entry, client_tlvs);
-    }
+		endoffset = dissect_aim_tlv(tvb, pinfo, endoffset, ssi_entry, client_tlvs);
+	}
 	return endoffset;
 }
 
-static int dissect_aim_snac_ssi(tvbuff_t *tvb, packet_info *pinfo _U_, 
-				 proto_tree *tree)
+static int dissect_ssi_ssi_item(tvbuff_t *tvb, packet_info *pinfo, 
+				      proto_tree *ssi_entry)
 {
-	struct aiminfo *aiminfo = pinfo->private_data;
-	int offset = 0;
-    proto_item *ti = NULL;
-    proto_tree *ssi_tree = NULL;
-                                                                                
-    if(tree) {
-		ti = proto_tree_add_text(tree, tvb, 0, -1,"AIM Server Side Information Service");
-        ssi_tree = proto_item_add_subtree(ti, ett_ssi);
-    }
-
-  switch(aiminfo->subtype)
-    {    
-	case FAMILY_SSI_ERROR:
-      return dissect_aim_snac_error(tvb, pinfo, offset, ssi_tree);
-    case FAMILY_SSI_LIST:
-	  return dissect_aim_snac_ssi_list(tvb, pinfo, offset, ssi_tree, aiminfo->subtype);
-	case FAMILY_SSI_RIGHTSINFO:
-		while(tvb_length_remaining(tvb, offset) > 0) {
-			offset = dissect_aim_tlv(tvb, pinfo, offset, ssi_tree, ssi_rights_tlvs);
-		}
-	  return offset;
-	case FAMILY_SSI_REQRIGHTS:
-	case FAMILY_SSI_ACTIVATE:
-	case FAMILY_SSI_EDITSTART:
-	case FAMILY_SSI_EDITSTOP:
-	case FAMILY_SSI_REQLIST_FIRSTTIME:
-	  /* No data */
-	  return 0;
-	case FAMILY_SSI_ADD:
-	case FAMILY_SSI_MOD:
-	case FAMILY_SSI_DEL:
-      return dissect_ssi_item(tvb, pinfo, offset, ssi_tree, aiminfo->subtype);
-	case FAMILY_SSI_WAS_ADDED:
-	  return dissect_aim_buddyname(tvb, pinfo, offset, ssi_tree);
-	case FAMILY_SSI_REQLIST:
-	case FAMILY_SSI_SRVACK:
-	case FAMILY_SSI_NOLIST:
-	case FAMILY_SSI_GRANT_FUTURE_AUTH:
-	case FAMILY_SSI_FUTUR_AUTH_GRANTED:
-	case FAMILY_SSI_SEND_AUTH_REQ: 
-	case FAMILY_SSI_AUTH_REQ:
-	case FAMILY_SSI_SEND_AUTH_REPLY:
-	case FAMILY_SSI_AUTH_REPLY:
-		
-	  /* FIXME */
-	  return 0;
-	 
-    default:
-	  return 0;
-    }
+	return dissect_ssi_item(tvb, pinfo, 0, ssi_entry);
+}
+
+
+static int dissect_aim_ssi_rightsinfo(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ssi_tree)
+{
+	return dissect_aim_tlv_sequence(tvb, pinfo, 0, ssi_tree, ssi_rightsinfo_tlvs);
+}
+
+static int dissect_aim_ssi_was_added(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ssi_tree)
+{
+	return dissect_aim_buddyname(tvb, pinfo, 0, ssi_tree);
 }
 
 static int dissect_aim_snac_ssi_list(tvbuff_t *tvb, packet_info *pinfo _U_, 
-				      int offset, proto_tree *tree, 
-				      guint16 subtype)
+									 proto_tree *tree)
+
 {
-  proto_item *ti;
-  proto_tree *ssi_entry = NULL;
-  guint16 num_items, i;
-
-  /* SSI Version */
-  proto_tree_add_item(tree, hf_aim_fnac_subtype_ssi_version, tvb, offset, 1,
-		      FALSE);
-  offset += 1;
-  
-  /* Number of items */
-  proto_tree_add_item(tree, hf_aim_fnac_subtype_ssi_numitems, tvb, offset, 2,
-		      FALSE);
-  num_items = tvb_get_ntohs(tvb, offset);
-  offset += 2;
-  
-  for(i = 0; i < num_items; i++) {
-    ti = proto_tree_add_text(tree, tvb, offset, tvb_get_ntohs(tvb, offset+10)+10, "SSI Entry");
-    ssi_entry = proto_item_add_subtree(ti, ett_aim_ssi);
-    offset = dissect_ssi_item(tvb, pinfo, offset, ssi_entry, subtype);
-     }
-  proto_tree_add_item(tree, hf_aim_fnac_subtype_ssi_last_change_time, tvb, offset, 4, FALSE);
-  return offset;
+	int offset = 0;
+	proto_item *ti;
+	proto_tree *ssi_entry = NULL;
+	guint16 num_items, i;
+
+	/* SSI Version */
+	proto_tree_add_item(tree, hf_aim_fnac_subtype_ssi_version, tvb, offset, 1,
+						FALSE);
+	offset += 1;
+
+	/* Number of items */
+	proto_tree_add_item(tree, hf_aim_fnac_subtype_ssi_numitems, tvb, offset, 2,
+						FALSE);
+	num_items = tvb_get_ntohs(tvb, offset);
+	offset += 2;
+
+	for(i = 0; i < num_items; i++) {
+		ti = proto_tree_add_text(tree, tvb, offset, tvb_get_ntohs(tvb, offset+10)+10, "SSI Entry");
+		ssi_entry = proto_item_add_subtree(ti, ett_aim_ssi);
+		offset = dissect_ssi_item(tvb, pinfo, offset, ssi_entry);
+	}
+	proto_tree_add_item(tree, hf_aim_fnac_subtype_ssi_last_change_time, tvb, offset, 4, FALSE);
+	return offset;
 }
 
+static const aim_subtype aim_fnac_family_ssi[] = {
+	{ 0x0001, "Error", dissect_aim_snac_error },
+	{ 0x0002, "Request Rights", NULL },
+	{ 0x0003, "Rights Info", dissect_aim_ssi_rightsinfo },
+	{ 0x0004, "Request List (first time)", NULL },
+	{ 0x0005, "Request List", NULL },
+	{ 0x0006, "List", dissect_aim_snac_ssi_list },
+	{ 0x0007, "Activate", NULL },
+	{ 0x0008, "Add Buddy", dissect_ssi_ssi_item },
+	{ 0x0009, "Modify Buddy", dissect_ssi_ssi_item },
+	{ 0x000a, "Delete Buddy", dissect_ssi_ssi_item },
+	{ 0x000e, "Server Ack", NULL },
+	{ 0x000f, "No List", NULL },
+	{ 0x0011, "Edit Start", NULL },
+	{ 0x0012, "Edit Stop", NULL },
+	{ 0x0014, "Grant Future Authorization to Buddy", NULL },
+	{ 0x0015, "Future Authorization Granted", NULL },
+	{ 0x0018, "Send Authentication Request", NULL },
+	{ 0x0019, "Authentication Request", NULL },
+	{ 0x001a, "Send Authentication Reply", NULL },
+	{ 0x001b, "Authentication Reply", NULL },
+	{ 0x001c, "Remote User Added Client To List", dissect_aim_ssi_was_added },
+	{ 0, NULL, NULL }
+};
+
+
 /* Register the protocol with Ethereal */
 void
 proto_register_aim_ssi(void)
 {
 
-/* Setup list of header fields */
-  static hf_register_info hf[] = {
-    { &hf_aim_fnac_subtype_ssi_version,
-      { "SSI Version", "aim.fnac.ssi.version", FT_UINT8, BASE_HEX, NULL, 0x0, "", HFILL }
-    },
-    { &hf_aim_fnac_subtype_ssi_numitems,
-      { "SSI Object count", "aim.fnac.ssi.numitems", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }
-    },
-    { &hf_aim_fnac_subtype_ssi_last_change_time,
-      { "SSI Last Change Time", "aim.fnac.ssi.last_change_time", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }
-    },
-    { &hf_aim_fnac_subtype_ssi_buddyname_len,
-      { "SSI Buddy Name length", "aim.fnac.ssi.buddyname_len", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }
-    },
-    { &hf_aim_fnac_subtype_ssi_buddyname,
-      { "Buddy Name", "aim.fnac.ssi.buddyname", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }
-    },
-    { &hf_aim_fnac_subtype_ssi_gid,
-      { "SSI Buddy Group ID", "aim.fnac.ssi.gid", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }
-    },
-    { &hf_aim_fnac_subtype_ssi_bid,
-      { "SSI Buddy ID", "aim.fnac.ssi.bid", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }
-    },
-    { &hf_aim_fnac_subtype_ssi_type,
-      { "SSI Buddy type", "aim.fnac.ssi.type", FT_UINT16, BASE_HEX, VALS(aim_fnac_family_ssi_types), 0x0, "", HFILL }
-    },
-    { &hf_aim_fnac_subtype_ssi_tlvlen,
-      { "SSI TLV Len", "aim.fnac.ssi.tlvlen", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }
-    },
-    { &hf_aim_fnac_subtype_ssi_data,
-      { "SSI Buddy Data", "aim.fnac.ssi.data", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }
-    },
-  };
-
-/* Setup protocol subtree array */
-  static gint *ett[] = {
-    &ett_aim_ssi,
-	&ett_ssi,
-  };
-
-/* Register the protocol name and description */
-  proto_aim_ssi = proto_register_protocol("AIM Server Side Info", "AIM SSI", "aim_ssi");
-
-/* Required function calls to register the header fields and subtrees used */
-  proto_register_field_array(proto_aim_ssi, hf, array_length(hf));
-  proto_register_subtree_array(ett, array_length(ett));
+	/* Setup list of header fields */
+	static hf_register_info hf[] = {
+		{ &hf_aim_fnac_subtype_ssi_version,
+			{ "SSI Version", "aim.fnac.ssi.version", FT_UINT8, BASE_HEX, NULL, 0x0, "", HFILL }
+		},
+		{ &hf_aim_fnac_subtype_ssi_numitems,
+			{ "SSI Object count", "aim.fnac.ssi.numitems", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }
+		},
+		{ &hf_aim_fnac_subtype_ssi_last_change_time,
+			{ "SSI Last Change Time", "aim.fnac.ssi.last_change_time", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }
+		},
+		{ &hf_aim_fnac_subtype_ssi_buddyname_len,
+			{ "SSI Buddy Name length", "aim.fnac.ssi.buddyname_len", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }
+		},
+		{ &hf_aim_fnac_subtype_ssi_buddyname,
+			{ "Buddy Name", "aim.fnac.ssi.buddyname", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }
+		},
+		{ &hf_aim_fnac_subtype_ssi_gid,
+			{ "SSI Buddy Group ID", "aim.fnac.ssi.gid", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }
+		},
+		{ &hf_aim_fnac_subtype_ssi_bid,
+			{ "SSI Buddy ID", "aim.fnac.ssi.bid", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }
+		},
+		{ &hf_aim_fnac_subtype_ssi_type,
+			{ "SSI Buddy type", "aim.fnac.ssi.type", FT_UINT16, BASE_HEX, VALS(aim_fnac_family_ssi_types), 0x0, "", HFILL }
+		},
+		{ &hf_aim_fnac_subtype_ssi_tlvlen,
+			{ "SSI TLV Len", "aim.fnac.ssi.tlvlen", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }
+		},
+		{ &hf_aim_fnac_subtype_ssi_data,
+			{ "SSI Buddy Data", "aim.fnac.ssi.data", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }
+		},
+	};
+
+	/* Setup protocol subtree array */
+	static gint *ett[] = {
+		&ett_aim_ssi,
+		&ett_ssi,
+	};
+
+	/* Register the protocol name and description */
+	proto_aim_ssi = proto_register_protocol("AIM Server Side Info", "AIM SSI", "aim_ssi");
+
+	/* Required function calls to register the header fields and subtrees used */
+	proto_register_field_array(proto_aim_ssi, hf, array_length(hf));
+	proto_register_subtree_array(ett, array_length(ett));
 }
 
 void
 proto_reg_handoff_aim_ssi(void)
 {
-  dissector_handle_t aim_handle;
-
-  aim_handle = new_create_dissector_handle(dissect_aim_snac_ssi, proto_aim_ssi);
-  dissector_add("aim.family", FAMILY_SSI, aim_handle);
-  aim_init_family(FAMILY_SSI, "SSI", aim_fnac_family_ssi);
+	aim_init_family(proto_aim_ssi, ett_aim_ssi, FAMILY_SSI, aim_fnac_family_ssi);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-sst.c ethereal-0.10.7/epan/dissectors/packet-aim-sst.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-sst.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-aim-sst.c	2004-10-20 17:35:01.000000000 -0500
@@ -0,0 +1,193 @@
+/* packet-aim-sst.c
+ * Routines for AIM (OSCAR) dissection, SNAC Server Stored Themes
+ * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
+ *
+ * $Id: packet-aim-sst.c 12063 2004-09-22 08:04:40Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <glib.h>
+
+#include <epan/packet.h>
+#include <epan/strutil.h>
+
+#include "packet-aim.h"
+
+#define FAMILY_SST    0x0010
+
+
+/* Initialize the protocol and registered fields */
+static int proto_aim_sst = -1;
+static int hf_aim_sst_unknown = -1;
+static int hf_aim_sst_md5_hash = -1;
+static int hf_aim_sst_md5_hash_size = -1;
+static int hf_aim_sst_ref_num = -1;
+static int hf_aim_sst_icon_size = -1;
+static int hf_aim_sst_icon = -1;
+
+/* Initialize the subtree pointers */
+static gint ett_aim_sst      = -1;
+
+static int dissect_aim_sst_buddy_down_req (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
+{
+	int offset = dissect_aim_buddyname(tvb, pinfo, 0, tree);
+	guint8 md5_size;
+
+	proto_tree_add_item(tree, hf_aim_sst_unknown, tvb, offset, 4, FALSE);
+	offset+=4;
+
+	proto_tree_add_item(tree, hf_aim_sst_md5_hash_size, tvb, offset, 1, FALSE);
+	md5_size = tvb_get_guint8(tvb, offset);
+	offset++;
+
+	proto_tree_add_item(tree, hf_aim_sst_md5_hash, tvb, offset, md5_size, FALSE);
+
+	offset+=md5_size;
+	return offset;
+}
+
+static int dissect_aim_sst_buddy_down_repl (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
+{
+	int offset = dissect_aim_buddyname(tvb, pinfo, 0, tree);
+	guint8 md5_size;
+	guint16 icon_size;
+
+	proto_tree_add_item(tree, hf_aim_sst_unknown, tvb, offset, 3, FALSE);
+	offset+=3;
+
+	proto_tree_add_item(tree, hf_aim_sst_md5_hash_size, tvb, offset, 1, FALSE);
+	md5_size = tvb_get_guint8(tvb, offset);
+	offset++;
+
+	proto_tree_add_item(tree, hf_aim_sst_md5_hash, tvb, offset, md5_size, FALSE);
+
+	offset+=md5_size;
+
+	proto_tree_add_item(tree, hf_aim_sst_icon_size, tvb, offset, 2, FALSE);
+	icon_size = tvb_get_ntohs(tvb, offset);
+	offset+=2;
+
+	proto_tree_add_item(tree, hf_aim_sst_icon, tvb, offset, icon_size, FALSE);
+
+	offset+=icon_size;
+
+	return offset;
+}
+
+static int dissect_aim_sst_buddy_up_repl (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
+{
+	int offset = 0;
+	guint8 md5_size;
+
+	proto_tree_add_item(tree, hf_aim_sst_unknown, tvb, offset, 4, FALSE);
+	offset+=4;
+
+	proto_tree_add_item(tree, hf_aim_sst_md5_hash_size, tvb, offset, 1, FALSE);
+	md5_size = tvb_get_guint8(tvb, offset);
+	offset++;
+
+	proto_tree_add_item(tree, hf_aim_sst_md5_hash, tvb, offset, md5_size, FALSE);
+
+	offset+=md5_size;
+	return offset;
+}
+
+static int dissect_aim_sst_buddy_up_req (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
+{
+	int offset = 0;
+	guint16 icon_size;
+
+	proto_tree_add_item(tree, hf_aim_sst_ref_num, tvb, offset, 2, FALSE);
+	offset+=2;
+
+	proto_tree_add_item(tree, hf_aim_sst_icon_size, tvb, offset, 2, FALSE);
+	icon_size = tvb_get_ntohs(tvb, offset);
+	offset+=2;
+
+	proto_tree_add_item(tree, hf_aim_sst_icon, tvb, offset, icon_size, FALSE);
+
+	offset+=icon_size;
+	return offset;
+}
+
+static const aim_subtype aim_fnac_family_sst[] = {
+  { 0x0001, "Error", dissect_aim_snac_error },
+  { 0x0002, "Upload Buddy Icon Request", dissect_aim_sst_buddy_up_req },
+  { 0x0003, "Upload Buddy Icon Reply", dissect_aim_sst_buddy_up_repl },
+  { 0x0004, "Download Buddy Icon Request", dissect_aim_sst_buddy_down_req },
+  { 0x0005, "Download Buddy Icon Reply", dissect_aim_sst_buddy_down_repl },
+  { 0, NULL, NULL }
+};
+
+
+/* Register the protocol with Ethereal */
+void
+proto_register_aim_sst(void)
+{
+
+/* Setup list of header fields */
+  static hf_register_info hf[] = {
+	  { &hf_aim_sst_md5_hash,
+		  { "MD5 Hash", "aim.sst.md5", FT_BYTES, BASE_NONE, NULL, 0x0, "", HFILL },
+	  }, 
+	  { &hf_aim_sst_md5_hash_size,
+		  { "MD5 Hash Size", "aim.sst.md5.size", FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL },
+	  },
+	  { &hf_aim_sst_unknown,
+		  { "Unknown Data", "aim.sst.unknown", FT_BYTES, BASE_NONE, NULL, 0x0, "", HFILL },
+	  },
+	  { &hf_aim_sst_ref_num,
+		  { "Reference Number", "aim.sst.ref_num", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
+	  },
+	  { &hf_aim_sst_icon_size,
+		  { "Icon Size", "aim.sst.icon_size", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL },
+	  },
+	  { &hf_aim_sst_icon,
+		  { "Icon", "aim.sst.icon", FT_BYTES, BASE_NONE, NULL, 0x0, "", HFILL },
+	  },
+  };
+
+/* Setup protocol subtree array */
+  static gint *ett[] = {
+    &ett_aim_sst,
+  };
+
+/* Register the protocol name and description */
+  proto_aim_sst = proto_register_protocol("AIM Server Side Themes", "AIM SST", "aim_sst");
+
+/* Required function calls to register the header fields and subtrees used */
+  proto_register_field_array(proto_aim_sst, hf, array_length(hf));
+  proto_register_subtree_array(ett, array_length(ett));
+}
+
+void
+proto_reg_handoff_aim_sst(void)
+{
+  aim_init_family(proto_aim_sst, ett_aim_sst, FAMILY_SST, aim_fnac_family_sst);
+}
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-stats.c ethereal-0.10.7/epan/dissectors/packet-aim-stats.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-stats.c	2004-08-12 17:41:59.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-stats.c	2004-10-20 17:34:39.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for AIM Instant Messenger (OSCAR) dissection, SNAC Stats
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  *
- * $Id: packet-aim-stats.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-stats.c 12060 2004-09-21 08:01:29Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -41,28 +41,21 @@
 
 #define FAMILY_STATS      0x000B
 
-/* Family User Stats */
-#define FAMILY_STATS_ERROR             0x0001
-#define FAMILY_STATS_SETREPORTINTERVAL 0x0002
-#define FAMILY_STATS_REPORTREQ         0x0003
-#define FAMILY_STATS_REPORTACK         0x0004
-#define FAMILY_STATS_DEFAULT           0xffff
-
-static const value_string aim_fnac_family_stats[] = {
-  { FAMILY_STATS_ERROR, "Error" },
-  { FAMILY_STATS_SETREPORTINTERVAL, "Set Report Interval" },
-  { FAMILY_STATS_REPORTREQ, "Report Request" },
-  { FAMILY_STATS_REPORTACK, "Report Ack" },
-  { FAMILY_STATS_DEFAULT, "Stats Default" },
-  { 0, NULL }
-};
-
 /* Initialize the protocol and registered fields */
 static int proto_aim_stats = -1;
 
 /* Initialize the subtree pointers */
 static gint ett_aim_stats    = -1;
 
+static const aim_subtype aim_fnac_family_stats[] = {
+  { 0x0001, "Error", dissect_aim_snac_error },
+  { 0x0002, "Set Report Interval", NULL },
+  { 0x0003, "Report Request", NULL },
+  { 0x0004, "Report Ack", NULL },
+  { 0, NULL, NULL }
+};
+
+
 /* Register the protocol with Ethereal */
 void
 proto_register_aim_stats(void)
@@ -90,8 +83,5 @@
 void
 proto_reg_handoff_aim_stats(void)
 {
-  /*dissector_handle_t aim_handle;*/
-/*FIXME:  aim_handle = new_create_dissector_handle(dissect_aim_snac_stats, proto_aim_stats);
-  dissector_add("aim.family", FAMILY_STATS, aim_handle);*/
-  aim_init_family(FAMILY_STATS, "Statistic", aim_fnac_family_stats);
+  aim_init_family(proto_aim_stats, ett_aim_stats, FAMILY_STATS, aim_fnac_family_stats);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-translate.c ethereal-0.10.7/epan/dissectors/packet-aim-translate.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-translate.c	2004-08-12 17:41:59.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-translate.c	2004-10-20 17:34:40.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for AIM Instant Messenger (OSCAR) dissection, SNAC Translate
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  *
- * $Id: packet-aim-translate.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-translate.c 12060 2004-09-21 08:01:29Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -41,30 +41,17 @@
 
 #define FAMILY_TRANSLATE  0x000C
 
-/* Family Translation */
-#define FAMILY_TRANSLATE_ERROR        0x0001
-#define FAMILY_TRANSLATE_REQ          0x0002
-#define FAMILY_TRANSLATE_REPL         0x0003
-#define FAMILY_TRANSLATE_DEFAULT      0xffff
-
-static const value_string aim_fnac_family_translate[] = {
-  { FAMILY_TRANSLATE_ERROR, "Error" },
-  { FAMILY_TRANSLATE_REQ, "Translate Request" },
-  { FAMILY_TRANSLATE_REPL, "Translate Reply" },
-  { FAMILY_TRANSLATE_DEFAULT, "Translate Default" },
-  { 0, NULL }
-};
-
 static int proto_aim_translate = -1;
 
 /* Initialize the subtree pointers */
 static gint ett_aim_translate = -1;
 
-static int dissect_aim_translate(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
-	
-	/* FIXME */
-	return 0;
-}
+static const aim_subtype aim_fnac_family_translate[] = {
+  { 0x0001, "Error", dissect_aim_snac_error },
+  { 0x0002, "Translate Request", NULL },
+  { 0x0003, "Translate Reply", NULL },
+  { 0, NULL, NULL }
+};
 
 /* Register the protocol with Ethereal */
 void
@@ -92,8 +79,5 @@
 void
 proto_reg_handoff_aim_translate(void)
 {
-  dissector_handle_t aim_handle;
-  aim_handle = new_create_dissector_handle(dissect_aim_translate, proto_aim_translate);
-  dissector_add("aim.family", FAMILY_TRANSLATE, aim_handle);
-  aim_init_family(FAMILY_TRANSLATE, "Translate", aim_fnac_family_translate);
+  aim_init_family(proto_aim_translate, ett_aim_translate, FAMILY_TRANSLATE, aim_fnac_family_translate);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim-userlookup.c ethereal-0.10.7/epan/dissectors/packet-aim-userlookup.c
--- ethereal-0.10.6/epan/dissectors/packet-aim-userlookup.c	2004-08-12 17:42:06.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim-userlookup.c	2004-10-20 17:34:44.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for AIM Instant Messenger (OSCAR) dissection, SNAC Userlookup
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  *
- * $Id: packet-aim-userlookup.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim-userlookup.c 12063 2004-09-22 08:04:40Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -41,20 +41,6 @@
 
 #define FAMILY_USERLOOKUP 0x000A
 
-/* Family User Lookup */
-#define FAMILY_USERLOOKUP_ERROR        0x0001
-#define FAMILY_USERLOOKUP_SEARCHEMAIL  0x0002
-#define FAMILY_USERLOOKUP_SEARCHRESULT 0x0003
-#define FAMILY_USERLOOKUP_DEFAULT      0xffff
-
-static const value_string aim_fnac_family_userlookup[] = {
-  { FAMILY_USERLOOKUP_ERROR, "Error" },
-  { FAMILY_USERLOOKUP_SEARCHEMAIL, "Search for user by email address" },
-  { FAMILY_USERLOOKUP_SEARCHRESULT, "Search results" },
-  { FAMILY_USERLOOKUP_DEFAULT, "Userlookup Default" },
-  { 0, NULL }
-};
-
 /* Initialize the protocol and registered fields */
 static int hf_aim_userlookup_email = -1;
 static int proto_aim_userlookup = -1;
@@ -62,37 +48,25 @@
 /* Initialize the subtree pointers */
 static gint ett_aim_userlookup = -1;
 
-static int dissect_aim_snac_userlookup(tvbuff_t *tvb _U_, packet_info *pinfo, 
-					proto_tree *tree _U_)
+static int dissect_aim_userlookup_search(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *lookup_tree)
 {
-	struct aiminfo *aiminfo = pinfo->private_data;
-	int offset = 0;
-	
-    proto_item *ti = NULL;
-    proto_tree *lookup_tree = NULL;
-                                                                                
-    if(tree) {
-        ti = proto_tree_add_text(tree, tvb, 0, -1,"AIM Lookup Service");
-		lookup_tree = proto_item_add_subtree(ti, ett_aim_userlookup);
-    }
-
-
-	switch(aiminfo->subtype) {
-	case FAMILY_USERLOOKUP_ERROR:
-      return dissect_aim_snac_error(tvb, pinfo, offset, tree);
-	case FAMILY_USERLOOKUP_SEARCHEMAIL:
 	  proto_tree_add_item(lookup_tree, hf_aim_userlookup_email, tvb, 0, tvb_length(tvb), FALSE);
 	  return tvb_length(tvb);
-	case FAMILY_USERLOOKUP_SEARCHRESULT:
-        while(tvb_length_remaining(tvb, offset) > 0) {
-            offset = dissect_aim_tlv(tvb, pinfo, offset, lookup_tree, client_tlvs);
-        }
-		return offset;
-	}
+}
+
 
-	return 0;
+static int dissect_aim_userlookup_result(tvbuff_t *tvb, packet_info *pinfo, proto_tree *lookup_tree)
+{
+	return dissect_aim_tlv_sequence(tvb, pinfo, 0, lookup_tree, client_tlvs);
 }
 
+static const aim_subtype aim_fnac_family_userlookup[] = {
+  { 0x0001, "Error", dissect_aim_snac_error },
+  { 0x0002, "Search for user by email address", dissect_aim_userlookup_search },
+  { 0x0003, "Search results", dissect_aim_userlookup_result },
+  { 0, NULL, NULL }
+};
+
 /* Register the protocol with Ethereal */
 void
 proto_register_aim_userlookup(void)
@@ -120,8 +94,5 @@
 void
 proto_reg_handoff_aim_userlookup(void)
 {
-  dissector_handle_t aim_handle;
-  aim_handle = new_create_dissector_handle(dissect_aim_snac_userlookup, proto_aim_userlookup);
-  dissector_add("aim.family", FAMILY_USERLOOKUP, aim_handle);
-  aim_init_family(FAMILY_USERLOOKUP, "User Lookup", aim_fnac_family_userlookup);
+  aim_init_family(proto_aim_userlookup, ett_aim_userlookup, FAMILY_USERLOOKUP, aim_fnac_family_userlookup);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim.c ethereal-0.10.7/epan/dissectors/packet-aim.c
--- ethereal-0.10.6/epan/dissectors/packet-aim.c	2004-08-12 17:42:15.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim.c	2004-10-20 17:34:51.000000000 -0500
@@ -4,7 +4,7 @@
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  * Copyright 2004, Devin Heitmueller <dheitmueller@netilla.com>
  *
- * $Id: packet-aim.c 11577 2004-08-01 22:55:53Z guy $
+ * $Id: packet-aim.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -43,7 +43,7 @@
 
 #include "packet-tcp.h"
 #include "packet-aim.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #define TCP_PORT_AIM 5190
 
@@ -131,7 +131,7 @@
 #define AIM_CLIENT_TLV_RECONNECT_HOST		   0x000a
 #define AIM_CLIENT_TLV_URL					   0x000b
 #define AIM_CLIENT_TLV_DEBUG_DATA			   0x000c
-#define AIM_CLIENT_TLV_GENERIC_SERVICE_ID      0x000d
+#define AIM_CLIENT_TLV_FAMILY_ID		       0x000d
 #define AIM_CLIENT_TLV_CLIENT_COUNTRY          0x000e
 #define AIM_CLIENT_TLV_CLIENT_LANGUAGE         0x000f
 #define AIM_CLIENT_TLV_EMAILADDR			    0x0011
@@ -144,7 +144,7 @@
 #define AIM_CLIENT_TLV_CLIENT_MINOR_VERSION    0x0018
 #define AIM_CLIENT_TLV_CLIENT_LESSER_VERSION   0x0019
 #define AIM_CLIENT_TLV_CLIENT_BUILD_NUMBER     0x001a
-#define AIM_CLIENT_TLV_PASSWORD				0x0025
+#define AIM_CLIENT_TLV_PASSWORD_MD5 			0x0025
 #define AIM_CLIENT_TLV_LATESTBETABUILD     	0x0040
 #define AIM_CLIENT_TLV_LATESTBETAURL       	0x0041
 #define AIM_CLIENT_TLV_LATESTBETAINFO      	0x0042
@@ -157,6 +157,22 @@
 #define AIM_CLIENT_TLV_RELEASE_DIGEST_SIG   0x0049
 #define AIM_CLIENT_TLV_CLIENTUSESSI   			0x004a
 #define AIM_CLIENT_TLV_CHANGE_PASSWORD_URL		0x0054
+#define AIM_CLIENT_TLV_AWAITING_AUTH		0x0066
+#define AIM_CLIENT_TLV_MEMBERS				0x00c8
+#define AIM_CLIENT_TLV_VISIBILITY_BITS		0x00c9
+#define AIM_CLIENT_TLV_PRIVACY				0x00ca
+#define AIM_CLIENT_TLV_VISIBLE_CLASS		0x00cb
+#define AIM_CLIENT_TLV_VISIBLE_MISC			0x00cc
+#define AIM_CLIENT_TLV_ICQ2K_SHORTCUT		0x00cd
+#define AIM_CLIENT_TLV_FIRST_LOADED_TIME	0x00d4
+#define AIM_CLIENT_TLV_BUDDY_ICON_MD5SUM	0x00d5
+#define AIM_CLIENT_TLV_GIVEN_NAME			0x0131
+#define AIM_CLIENT_TLV_LOCAL_EMAIL			0x0137
+#define AIM_CLIENT_TLV_LOCAL_SMS			0x013a
+#define AIM_CLIENT_TLV_LOCAL_COMMENT		0x013c
+#define AIM_CLIENT_TLV_LOCAL_PERSONAL_ALERT 0x013d
+#define AIM_CLIENT_TLV_LOCAL_PERSONAL_SOUND	0x013e
+#define AIM_CLIENT_TLV_FIRST_MESSAGE_SENT	0x0145
 
 const aim_tlv client_tlvs[] = {
   {  AIM_CLIENT_TLV_SCREEN_NAME, "Screen name", dissect_aim_tlv_value_string },
@@ -168,6 +184,7 @@
   {  AIM_CLIENT_TLV_CLIENT_MINOR_VERSION, "Client minor version", dissect_aim_tlv_value_uint16 },
   {  AIM_CLIENT_TLV_CLIENT_LESSER_VERSION, "Client lesser version", dissect_aim_tlv_value_uint16 },
   {  AIM_CLIENT_TLV_CLIENT_BUILD_NUMBER, "Client build number", dissect_aim_tlv_value_uint16 },
+  {  AIM_CLIENT_TLV_PASSWORD_MD5, "Password Hash (MD5)", dissect_aim_tlv_value_bytes },
   {  AIM_CLIENT_TLV_CLIENT_DISTRIBUTION_NUM, "Client distribution number", dissect_aim_tlv_value_uint16 },
   {  AIM_CLIENT_TLV_CLIENT_LANGUAGE, "Client language", dissect_aim_tlv_value_string },
   {  AIM_CLIENT_TLV_CLIENT_COUNTRY, "Client country", dissect_aim_tlv_value_string },
@@ -192,14 +209,30 @@
   {  AIM_CLIENT_TLV_BETA_DIGEST_SIG, "Beta Digest Signature (MD5)" , dissect_aim_tlv_value_bytes },
   {  AIM_CLIENT_TLV_RELEASE_DIGEST_SIG, "Release Digest Signature (MD5)", dissect_aim_tlv_value_bytes },
   {  AIM_CLIENT_TLV_CLIENTUSESSI, "Use SSI", dissect_aim_tlv_value_uint8 },
-  {  AIM_CLIENT_TLV_GENERIC_SERVICE_ID, "Service (Family) ID", dissect_aim_tlv_value_uint16 },
+  {  AIM_CLIENT_TLV_FAMILY_ID, "Service (SNAC Family) ID", dissect_aim_tlv_value_uint16 },
   { AIM_CLIENT_TLV_CHANGE_PASSWORD_URL, "Change password url", dissect_aim_tlv_value_string },
+  { AIM_CLIENT_TLV_AWAITING_AUTH, "Awaiting Authorization", dissect_aim_tlv_value_bytes },
+  { AIM_CLIENT_TLV_MEMBERS, "Members of this Group", dissect_aim_tlv_value_bytes },
+  { AIM_CLIENT_TLV_VISIBILITY_BITS, "Bitfield", dissect_aim_tlv_value_bytes },
+  { AIM_CLIENT_TLV_PRIVACY, "Privacy Settings" , dissect_aim_tlv_value_uint8 },
+  { AIM_CLIENT_TLV_VISIBLE_CLASS, "Visible To Classes", dissect_aim_tlv_value_userclass },
+  { AIM_CLIENT_TLV_VISIBLE_MISC, "Allow Others to See Data", dissect_aim_tlv_value_bytes },
+  { AIM_CLIENT_TLV_ICQ2K_SHORTCUT, "ICQ2K Shortcut List", dissect_aim_tlv_value_string },
+  { AIM_CLIENT_TLV_FIRST_LOADED_TIME, "First Time Buddy Was Added (Unix Timestamp)" , dissect_aim_tlv_value_uint32 },
+  { AIM_CLIENT_TLV_BUDDY_ICON_MD5SUM, "MD5SUM of Current Buddy Icon", dissect_aim_tlv_value_bytes },
+  { AIM_CLIENT_TLV_GIVEN_NAME, "Locally Specified Buddy Name", dissect_aim_tlv_value_string },
+  { AIM_CLIENT_TLV_LOCAL_EMAIL, "Locally Specified Buddy Email", dissect_aim_tlv_value_string },
+  { AIM_CLIENT_TLV_LOCAL_SMS, "Locally Specified Buddy SMS", dissect_aim_tlv_value_string },
+  { AIM_CLIENT_TLV_LOCAL_COMMENT, "Locally Specified Buddy Comment", dissect_aim_tlv_value_string },
+  { AIM_CLIENT_TLV_LOCAL_PERSONAL_ALERT, "Personal Alert for Buddy", dissect_aim_tlv_value_uint16 },
+  { AIM_CLIENT_TLV_LOCAL_PERSONAL_SOUND, "Personal Sound for Buddy", dissect_aim_tlv_value_string },
+  { AIM_CLIENT_TLV_FIRST_MESSAGE_SENT, " First Time Message Sent to Buddy (Unix Timestamp)", dissect_aim_tlv_value_uint32 },
   { 0, "Unknown", NULL },
 };
 
 
-static int dissect_aim_tlv_value_userstatus(proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb);
-static int dissect_aim_tlv_value_dcinfo(proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb);
+static int dissect_aim_tlv_value_userstatus(proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo _U_);
+static int dissect_aim_tlv_value_dcinfo(proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo _U_);
 
 #define AIM_ONLINEBUDDY_USERCLASS      0x0001
 #define AIM_ONLINEBUDDY_ONSINCE        0x0003
@@ -213,6 +246,7 @@
 #define AIM_ONLINEBUDDY_UNKNOWN        0x000e
 #define AIM_ONLINEBUDDY_SESSIONLEN     0x000f
 #define AIM_ONLINEBUDDY_ICQSESSIONLEN  0x0010
+#define AIM_ONLINEBUDDY_AVAILMSG	   0x001d
 
 const aim_tlv onlinebuddy_tlvs[] = {
   { AIM_ONLINEBUDDY_USERCLASS, "User class", dissect_aim_tlv_value_userclass },
@@ -221,19 +255,46 @@
   { AIM_ONLINEBUDDY_STATUS, "Online status", dissect_aim_tlv_value_userstatus },
   { AIM_ONLINEBUDDY_IPADDR, "User IP Address", dissect_aim_tlv_value_ipv4 },
   { AIM_ONLINEBUDDY_DCINFO, "DC Info", dissect_aim_tlv_value_dcinfo},
-  { AIM_ONLINEBUDDY_CAPINFO, "Capability Info", dissect_aim_tlv_value_bytes },
+  { AIM_ONLINEBUDDY_CAPINFO, "Capability Info", dissect_aim_tlv_value_client_capabilities },
   { AIM_ONLINEBUDDY_MEMBERSINCE, "Member since", dissect_aim_tlv_value_time },
   { AIM_ONLINEBUDDY_UNKNOWN, "Unknown", dissect_aim_tlv_value_uint16 },
   { AIM_ONLINEBUDDY_TIMEUPDATE, "Time update", dissect_aim_tlv_value_bytes },
   { AIM_ONLINEBUDDY_SESSIONLEN, "Session Length (sec)", dissect_aim_tlv_value_uint32 },
   { AIM_ONLINEBUDDY_ICQSESSIONLEN, "ICQ Session Length (sec)", dissect_aim_tlv_value_uint32 },
+  { AIM_ONLINEBUDDY_AVAILMSG, "Available Message", dissect_aim_tlv_value_bytes },
   { 0, "Unknown", NULL }
 };
 
-struct aim_family {
-	guint16 family;
-	const char *name;
-	const value_string *subtypes;
+#define DC_DISABLED		0x0000
+#define DC_HTTPS		0x0001
+#define DC_SOCKS		0x0002
+#define DC_NORMAL		0x0003
+#define DC_IMPOSSIBLE	0x0004
+
+static const value_string dc_types[] = {
+	{ DC_DISABLED, "DC disabled" },
+	{ DC_HTTPS, "DC thru firewall or HTTPS proxy" },
+	{ DC_SOCKS, "DC thru SOCKS proxy" },
+	{ DC_NORMAL, "Regular connection" },
+	{ DC_IMPOSSIBLE, "DC not possible " },
+	{ 0, "Unknown" },
+};
+
+#define PROTO_VERSION_ICQ98		0x0004
+#define PROTO_VERSION_ICQ99		0x0006
+#define PROTO_VERSION_ICQ2K		0x0007
+#define PROTO_VERSION_ICQ2K1	0x0008
+#define PROTO_VERSION_ICQLITE	0x0009
+#define PROTO_VERSION_ICQ2K3B	0x000A
+
+static const value_string protocol_versions[] = {
+	{ PROTO_VERSION_ICQ98, "ICQ '98" },
+	{ PROTO_VERSION_ICQ99, "ICQ '99" },
+	{ PROTO_VERSION_ICQ2K, "ICQ 2000" },
+	{ PROTO_VERSION_ICQ2K1, "ICQ 2001" },
+	{ PROTO_VERSION_ICQLITE, "ICQ Lite" },
+	{ PROTO_VERSION_ICQ2K3B, "ICQ 2003B" },
+	{ 0, "Unknown" },
 };
 
 static GList *families = NULL;
@@ -245,32 +306,6 @@
   { 0, "Unknown", NULL }
 };
 
-#define FAMILY_GENERIC_REDIRECT_SERVER_ADDRESS		   0x0005
-#define FAMILY_GENERIC_REDIRECT_AUTH_COOKIE			   0x0006
-#define FAMILY_GENERIC_REDIRECT_FAMILY_ID              0x000D
-
-static const aim_tlv aim_fnac_family_generic_redirect_tlv[] = {
-  { FAMILY_GENERIC_REDIRECT_SERVER_ADDRESS, "Server address and (optional) port", dissect_aim_tlv_value_string },
-  { FAMILY_GENERIC_REDIRECT_AUTH_COOKIE, "Authorization cookie", dissect_aim_tlv_value_string },
-  { FAMILY_GENERIC_REDIRECT_FAMILY_ID, "Family ID", dissect_aim_tlv_value_uint16 },
-  { 0, "Unknown", NULL }
-};
-
-#define FAMILY_GENERIC_MOTD_MOTDTYPE_MDT_UPGRADE       0x0001
-#define FAMILY_GENERIC_MOTD_MOTDTYPE_ADV_UPGRADE       0x0002
-#define FAMILY_GENERIC_MOTD_MOTDTYPE_SYS_BULLETIN      0x0003
-#define FAMILY_GENERIC_MOTD_MOTDTYPE_NORMAL            0x0004
-#define FAMILY_GENERIC_MOTD_MOTDTYPE_NEWS              0x0006
-
-static const value_string aim_snac_generic_motd_motdtypes[] = {
-  { FAMILY_GENERIC_MOTD_MOTDTYPE_MDT_UPGRADE, "Mandatory Upgrade Needed Notice" },
-  { FAMILY_GENERIC_MOTD_MOTDTYPE_ADV_UPGRADE, "Advisable Upgrade Notice" },
-  { FAMILY_GENERIC_MOTD_MOTDTYPE_SYS_BULLETIN, "AIM/ICQ Service System Announcements" },
-  { FAMILY_GENERIC_MOTD_MOTDTYPE_NORMAL, "Standard Notice" },
-  { FAMILY_GENERIC_MOTD_MOTDTYPE_NEWS, "News from AOL service" },
-  { 0, NULL }
-};
-
 #define CLASS_UNCONFIRMED            0x0001
 #define CLASS_ADMINISTRATOR          0x0002
 #define CLASS_AOL                    0x0004
@@ -284,6 +319,16 @@
 #define CLASS_UNKNOWN400             0x0400
 #define CLASS_UNKNOWN800             0x0800
 
+#define FNAC_FLAG_NEXT_IS_RELATED 	 0x0001
+#define FNAC_FLAG_CONTAINS_VERSION	 0x8000
+
+#define FNAC_TLV_FAMILY_VERSION  0x0001
+
+static const aim_tlv fnac_tlvs[] = {
+  { FNAC_TLV_FAMILY_VERSION, "SNAC Family Version", dissect_aim_tlv_value_uint16 },
+  { 0, "Unknown", NULL }
+};
+
 static int dissect_aim(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
 static guint get_aim_pdu_len(tvbuff_t *tvb, int offset);
 static void dissect_aim_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
@@ -314,6 +359,8 @@
 static int hf_aim_fnac_family = -1;
 static int hf_aim_fnac_subtype = -1;
 static int hf_aim_fnac_flags = -1;
+static int hf_aim_fnac_flag_next_is_related = -1;
+static int hf_aim_fnac_flag_contains_version = -1;
 static int hf_aim_fnac_id = -1;
 static int hf_aim_infotype = -1;
 static int hf_aim_buddyname_len = -1;
@@ -343,14 +390,28 @@
 static int hf_aim_messageblock_charsubset = -1;
 static int hf_aim_messageblock_message = -1;
 
+static int hf_aim_dcinfo_ip = -1;
+static int hf_aim_dcinfo_tcpport = -1;
+static int hf_aim_dcinfo_type = -1;
+static int hf_aim_dcinfo_proto_version = -1;
+static int hf_aim_dcinfo_auth_cookie = -1;
+static int hf_aim_dcinfo_webport = -1;
+static int hf_aim_dcinfo_client_future = -1;
+static int hf_aim_dcinfo_last_info_update = -1;
+static int hf_aim_dcinfo_last_ext_info_update = -1;
+static int hf_aim_dcinfo_last_ext_status_update = -1;
+static int hf_aim_dcinfo_unknown = -1;
 
 /* Initialize the subtree pointers */
 static gint ett_aim          = -1;
+static gint ett_aim_dcinfo	 = -1;
 static gint ett_aim_buddyname= -1;
 static gint ett_aim_fnac     = -1;
+static gint ett_aim_fnac_flags = -1;
 static gint ett_aim_tlv      = -1;
 static gint ett_aim_userclass = -1;
 static gint ett_aim_messageblock = -1;
+static gint ett_aim_client_capabilities = -1;
 
 /* desegmentation of AIM over TCP */
 static gboolean aim_desegment = TRUE;
@@ -452,13 +513,17 @@
   }
 
 }
-
-const char *aim_get_subtypename( guint16 famnum, guint16 subtype )
+const aim_subtype *aim_get_subtype( guint16 famnum, guint16 subtype )
 {
 	GList *gl = families;
 	while(gl) {
-		struct aim_family *fam = gl->data;
-		if(fam->family == famnum) return match_strval(subtype, fam->subtypes);
+		aim_family *fam = gl->data;
+		if(fam->family == famnum) {
+			int i;
+			for(i = 0; fam->subtypes[i].name; i++) {
+				if(fam->subtypes[i].id == subtype) return &(fam->subtypes[i]);
+			}
+		}
 		gl = gl->next;
 	}
 
@@ -466,12 +531,12 @@
 
 }
 
-const char *aim_get_familyname( guint16 famnum ) 
+const aim_family *aim_get_family( guint16 famnum ) 
 {
 	GList *gl = families;
 	while(gl) {
-		struct aim_family *fam = gl->data;
-		if(fam->family == famnum) return fam->name;
+		aim_family *fam = gl->data;
+		if(fam->family == famnum) return fam;
 		gl = gl->next;
 	}
 
@@ -568,13 +633,17 @@
   }
 }
 
-void aim_init_family(guint16 family, const char *name, const value_string *subtypes) 
+void aim_init_family(int proto, int ett, guint16 family, const aim_subtype *subtypes) 
 {
-	struct aim_family *fam = g_new(struct aim_family, 1);
-	fam->name = g_strdup(name);
+	aim_family *fam = g_new(aim_family, 1);
+	fam->proto = find_protocol_by_id(proto);
+	fam->name = proto_get_protocol_short_name(fam->proto);
 	fam->family = family;
 	fam->subtypes = subtypes;
 	families = g_list_append(families, fam);
+
+	fam->proto_id = proto;
+	fam->ett = ett;
 }
 
 static void dissect_aim_newconn(tvbuff_t *tvb, packet_info *pinfo, 
@@ -586,9 +655,7 @@
   if (tvb_length_remaining(tvb, offset) > 0) {
 	  proto_tree_add_item(tree, hf_aim_authcookie, tvb, offset, 4, FALSE);
 	  offset+=4;
-	  while(tvb_reported_length_remaining(tvb, offset) > 0) {
-		  offset = dissect_aim_tlv(tvb, pinfo, offset, tree, client_tlvs);
-	  }
+	  offset = dissect_aim_tlv_sequence(tvb, pinfo, offset, tree, client_tlvs);
   }
 
   if (tvb_length_remaining(tvb, offset) > 0)
@@ -597,17 +664,18 @@
 
 
 int dissect_aim_snac_error(tvbuff_t *tvb, packet_info *pinfo, 
-			     int offset, proto_tree *aim_tree)
+			     proto_tree *aim_tree)
 {
   char *name;
-  if ((name = match_strval(tvb_get_ntohs(tvb, offset), aim_snac_errors)) != NULL) {
+  if ((name = match_strval(tvb_get_ntohs(tvb, 0), aim_snac_errors)) != NULL) {
      if (check_col(pinfo->cinfo, COL_INFO))
 		col_add_fstr(pinfo->cinfo, COL_INFO, name);
   }
 
   proto_tree_add_item (aim_tree, hf_aim_snac_error,
-			   tvb, offset, 2, FALSE);
-  return tvb_length_remaining(tvb, 2);
+			   tvb, 0, 2, FALSE);
+  
+  return dissect_aim_tlv_sequence(tvb, pinfo, 2, aim_tree, client_tlvs);
 }
 
 int dissect_aim_userinfo(tvbuff_t *tvb, packet_info *pinfo, 
@@ -621,75 +689,111 @@
 	return dissect_aim_tlv_list(tvb, pinfo, offset, tree, onlinebuddy_tlvs);
 }
 
+int dissect_aim_fnac_flags(tvbuff_t *tvb, int offset, int len, proto_item *ti, guint16 flags)
+{
+	proto_tree *entry = proto_item_add_subtree(ti, ett_aim_fnac_flags);
+	proto_tree_add_boolean(entry, hf_aim_fnac_flag_next_is_related, tvb, offset, len, flags);
+	proto_tree_add_boolean(entry, hf_aim_fnac_flag_contains_version, tvb, offset, len, flags);
+	return offset + len;
+}
+
 static void dissect_aim_snac(tvbuff_t *tvb, packet_info *pinfo, 
 			     int offset, proto_tree *aim_tree, proto_tree *root_tree)
 {
-  guint16 family;
-  guint16 subtype;
+  guint16 family_id;
+  guint16 subtype_id;
   guint16 flags;
   guint32 id;
   proto_item *ti1;
   struct aiminfo aiminfo;
-  const char *fam_name, *subtype_name;
   proto_tree *aim_tree_fnac = NULL;
   tvbuff_t *subtvb;
   int orig_offset;
+  const aim_subtype *subtype;
+  proto_tree *family_tree = NULL;
+  const aim_family *family;
 
   orig_offset = offset;
-  family = tvb_get_ntohs(tvb, offset);
-  fam_name = aim_get_familyname(family);
+  family_id = tvb_get_ntohs(tvb, offset);
+  family = aim_get_family(family_id);
   offset += 2;
-  subtype = tvb_get_ntohs(tvb, offset);
-  subtype_name = aim_get_subtypename(family, subtype);
+  subtype_id = tvb_get_ntohs(tvb, offset);
+  subtype = aim_get_subtype(family_id, subtype_id);
   offset += 2;
   flags = tvb_get_ntohs(tvb, offset);
   offset += 2;
   id = tvb_get_ntohl(tvb, offset);
   offset += 4;
   
-  if (check_col(pinfo->cinfo, COL_INFO)) {
-    col_add_fstr(pinfo->cinfo, COL_INFO, "SNAC data");
-  }
-  
+ 
   if( aim_tree )
     {
       offset = orig_offset;
-      ti1 = proto_tree_add_text(aim_tree, tvb, 6, 10, "FNAC");
+      ti1 = proto_tree_add_text(aim_tree, tvb, 6, 10, "FNAC: Family: 0x%04x, Subtype: %04x", family_id, subtype_id);
       aim_tree_fnac = proto_item_add_subtree(ti1, ett_aim_fnac);
 
       proto_tree_add_text (aim_tree_fnac, 
-			   tvb, offset, 2, "Family: %s (0x%04x)", fam_name?fam_name:"Unknown", family);
+			   tvb, offset, 2, "Family: %s (0x%04x)", family?family->name:"Unknown", family_id);
       offset += 2;
 
       proto_tree_add_text (aim_tree_fnac, 
-			   tvb, offset, 2, "Subtype: %s (0x%04x)", subtype_name?subtype_name:"Unknown", subtype);
+			   tvb, offset, 2, "Subtype: %s (0x%04x)", (subtype && subtype->name)?subtype->name:"Unknown", subtype_id);
       offset += 2;
 
-      proto_tree_add_uint(aim_tree_fnac, hf_aim_fnac_flags, tvb, offset, 
+      ti1 = proto_tree_add_uint(aim_tree_fnac, hf_aim_fnac_flags, tvb, offset, 
 			  2, flags);
-      offset += 2;
+
+	  offset = dissect_aim_fnac_flags(tvb, offset, 2, ti1, flags);
+
       proto_tree_add_uint(aim_tree_fnac, hf_aim_fnac_id, tvb, offset,
 			  4, id);
       offset += 4;
     }
+  
+  if(flags & FNAC_FLAG_CONTAINS_VERSION) {
+	guint16 len = tvb_get_ntohs(tvb, offset); 
+	int oldoffset;
+	offset+=2;
+	oldoffset = offset;
+	
+	while(offset < oldoffset + len) {
+	  offset = dissect_aim_tlv(tvb, pinfo, offset, aim_tree, fnac_tlvs);
+	}
+  }
 
   subtvb = tvb_new_subset(tvb, offset, -1, -1);
   aiminfo.tcpinfo = pinfo->private_data;
-  aiminfo.family = family;
-  aiminfo.subtype = subtype;
+  aiminfo.family = family_id;
+  aiminfo.subtype = subtype_id;
   pinfo->private_data = &aiminfo;
+
+  if (check_col(pinfo->cinfo, COL_PROTOCOL) && family) {
+	col_set_str(pinfo->cinfo, COL_PROTOCOL, family->name);
+  }
   
   if (check_col(pinfo->cinfo, COL_INFO)) {
-     if(fam_name) col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", fam_name);
-	 else col_append_fstr(pinfo->cinfo, COL_INFO, ", Family: 0x%04x", family);
-	 if(subtype_name) col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", subtype_name);
-	 else col_append_fstr(pinfo->cinfo, COL_INFO, ", Subtype: 0x%04x", subtype);
+	 if(subtype) {
+		 col_set_str(pinfo->cinfo, COL_INFO, family->name);
+		 col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", subtype->name);
+	 } else {
+	    col_set_str(pinfo->cinfo, COL_INFO, "SNAC data");
+	  
+     	if(family) col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", family->name);
+	 	else col_append_fstr(pinfo->cinfo, COL_INFO, ", Family: 0x%04x", family_id);
+
+	 	col_append_fstr(pinfo->cinfo, COL_INFO, ", Subtype: 0x%04x", subtype_id);
+	 }
   }
 
-  if(tvb_length_remaining(tvb, offset) == 0 || !dissector_try_port(subdissector_table, family, subtvb, pinfo, root_tree)) {
-    /* Show the undissected payload */
-    if (tvb_length_remaining(tvb, offset) > 0)
-      proto_tree_add_item(aim_tree, hf_aim_data, tvb, offset, -1, FALSE);
+  if(aim_tree && family) 
+  {
+	proto_item *ti = proto_tree_add_item(root_tree, family->proto_id, subtvb, 0, -1, FALSE); 
+	family_tree = proto_item_add_subtree(ti, family->ett);
+	if(subtype) proto_item_append_text(ti, ", %s", subtype->name);
+  }
+
+  if(tvb_length_remaining(tvb, offset) > 0 && subtype && subtype->dissector) {
+	  subtype->dissector(subtvb, pinfo, family_tree);	 
   }
 }
 
@@ -724,9 +828,7 @@
     col_add_fstr(pinfo->cinfo, COL_INFO, "Close Connection");
   }	  
   
-  while(tvb_reported_length_remaining(tvb, offset) > 0) {
-	  offset = dissect_aim_tlv(tvb, pinfo, offset, tree, client_tlvs);
-  }
+  offset = dissect_aim_tlv_sequence(tvb, pinfo, offset, tree, client_tlvs);
 }
 
 static void dissect_aim_unknown_channel(tvbuff_t *tvb, packet_info *pinfo, 
@@ -765,14 +867,192 @@
    return offset+buddyname_length;
 }
 
+typedef struct _aim_client_capability
+{
+	const char *name;
+	e_uuid_t clsid;	
+} aim_client_capability;
 
-int dissect_aim_tlv_value_client_capabilities(proto_item *ti _U_, guint16 valueid _U_, tvbuff_t *tvb)
+static const aim_client_capability known_client_caps[] = {
+	{ "Send File", 
+	  {0x09461343, 0x4c7f, 0x11d1,
+	    { 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "Recv File",
+	    { 0x09461348, 0x4c7f, 0x11d1,
+		   { 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+	
+	{ "iChat",
+	 {0x09460000, 0x4c7f, 0x11d1, 
+	   { 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "Security",
+	 {0x09460001, 0x4c7f, 0x11d1, 
+	   { 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "Video Chat",
+	 {0x09460100, 0x4c7f, 0x11d1, 
+	   { 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "Live Video",
+	 {0x09460101, 0x4c7f, 0x11d1, 
+	   { 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "Camera",
+	 {0x09460102, 0x4c7f, 0x11d1, 
+	   { 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "iChatAV info",
+	 {0x09460105, 0x4c7f, 0x11d1, 
+	   { 0x82, 0x22, 0x44, 0x45, 0x45, 0x53, 0x54, 0x00}}},
+
+	{ "Hiptop",
+	 {0x09461323, 0x4c7f, 0x11d1, 
+	   { 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "Voice Chat",
+	 {0x09461341, 0x4c7f, 0x11d1, 
+		 { 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "Direct ICQ Communication",
+	 {0x09461344, 0x4c7f, 0x11d1, 
+		 {0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "Direct Instant Messaging",
+	 {0x09461345, 0x4c7f, 0x11d1, 
+		 {0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "Buddy Icon",
+	 {0x09461346, 0x4c7f, 0x11d1, 
+		 {0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "Add-Ins",
+	 {0x09461347, 0x4c7f, 0x11d1,
+		 {0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "ICQ Server Relaying",
+	 {0x09461349, 0x4c7f, 0x11d1,
+		 {0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "Games",
+	 {0x0946134a, 0x4c7f, 0x11d1,
+		 {0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+	
+	{ "Games",
+	 {0x0946134a, 0x4c7f, 0x11d1,
+		 {0x22, 0x82, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "Send Buddy List",
+	 {0x0946134b, 0x4c7f, 0x11d1,
+		 {0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "AIM/ICQ Interoperability",
+	 {0x0946134d, 0x4c7f, 0x11d1,
+		 {0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "ICQ UTF8 Support",
+	 {0x0946134e, 0x4c7f, 0x11d1,
+		 {0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "Old ICQ UTF8 Support",
+	 {0x2e7a6475, 0xfadf, 0x4dc8,
+		 {0x88, 0x6f, 0xea, 0x35, 0x95, 0xfd, 0xb6, 0xdf}}},
+
+	{ "Chat",
+	 {0x748f2420, 0x6287, 0x11d1, 
+		 {0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "ICQ Rich Text Format Messages",
+	 {0x97b12751, 0x243c, 0x4334,
+		 {0xad, 0x22, 0xd6, 0xab, 0xf7, 0x3f, 0x14, 0x92}}},
+
+	{ "AP User", 
+	 {0xaa4a32b5, 0xf884, 0x48c6,
+		 {0xa3, 0xd7, 0x8c, 0x50, 0x97, 0x19, 0xfd, 0x5b}}},
+
+	{ "Trillian Encryption",
+	 {0xf2e7c7f4, 0xfead, 0x4dfb,
+		 {0xb2, 0x35, 0x36, 0x79, 0x8b, 0xdf, 0x00, 0x00}}},
+
+	{ "Unknown 1", 
+	 {0x0946f004, 0x4c7f, 0x11d1, 
+		 {0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "Unknown 2", 
+	 {0x0946f004, 0x4c7f, 0x11d1, 
+		 {0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "Unknown 3",
+	 {0x09460103, 0x4c7f, 0x11d1,
+		 {0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ "Unknown 4",
+	 {0x0946f003, 0x4c7f, 0x11d1,
+		 {0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}}},
+
+	{ NULL, {0x0, 0x0, 0x0, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } } }
+};
+
+const aim_client_capability *aim_find_capability ( e_uuid_t clsid)
 {
-	/* FIXME */
+	int i;
+
+	for(i = 0; known_client_caps[i].name; i++) 
+	{
+		const aim_client_capability *caps = &(known_client_caps[i]);
+
+		if(memcmp(&(caps->clsid), &clsid, sizeof(e_uuid_t)) == 0)
+			return caps;
+	}
+
+	return NULL;
+}
+
+int dissect_aim_tlv_value_capability_data ( proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb _U_, packet_info *pinfo _U_)
+{
+	return 0;
+}
+
+int dissect_aim_capability(proto_tree *entry, tvbuff_t *tvb, int offset)
+{
+	const aim_client_capability *caps = NULL;
+	e_uuid_t clsid;
+
+	clsid.Data1 = tvb_get_ntohl(tvb, offset);
+	clsid.Data2 = tvb_get_ntohs(tvb, offset+4);
+	clsid.Data3 = tvb_get_ntohs(tvb, offset+6);
+	tvb_memcpy(tvb, clsid.Data4, offset+8, 8);
+
+	caps = aim_find_capability(clsid);
+
+	proto_tree_add_text(entry, tvb, offset, 16, 
+		"%s {%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", 
+		caps?caps->name:"Unknown", clsid.Data1, clsid.Data2, 
+		clsid.Data3, clsid.Data4[0], clsid.Data4[1], clsid.Data4[2], 
+		clsid.Data4[3], clsid.Data4[4],	clsid.Data4[5], clsid.Data4[6], 
+			clsid.Data4[7]
+	);
+
+	return offset+16;
+}
+
+int dissect_aim_tlv_value_client_capabilities(proto_item *ti _U_, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo _U_)
+{
+	int offset = 0;
+	proto_tree *entry;
+
+	proto_item_set_text(ti, "Client Capabilities List");
+
+	entry = proto_item_add_subtree(ti, ett_aim_client_capabilities);
+	
+  	while (tvb_length_remaining(tvb, offset) > 0) {
+		offset = dissect_aim_capability(entry, tvb, offset);
+	}
+
 	return tvb_length(tvb);
 }
 
-int dissect_aim_tlv_value_time(proto_item *ti _U_, guint16 valueid _U_, tvbuff_t *tvb)
+int dissect_aim_tlv_value_time(proto_item *ti _U_, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo _U_)
 {
 	/* FIXME */
 	return tvb_length(tvb);
@@ -798,26 +1078,41 @@
 	return offset+len;
 }
 
-int dissect_aim_tlv_value_userclass(proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb)
+int dissect_aim_tlv_value_userclass(proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo _U_)
 {
 	guint16 value16 = tvb_get_ntohs(tvb, 0);
 	proto_item_set_text(ti, "Value: 0x%04x", value16);
 	return dissect_aim_userclass(tvb, 0, 2, ti, value16);
 }
 
-static int dissect_aim_tlv_value_userstatus(proto_item *ti _U_, guint16 valueid _U_, tvbuff_t *tvb)
+static int dissect_aim_tlv_value_userstatus(proto_item *ti _U_, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo _U_)
 {
 	/* FIXME */
 	return tvb_length(tvb);
 }
 
-static int dissect_aim_tlv_value_dcinfo(proto_item *ti _U_, guint16 valueid _U_, tvbuff_t *tvb)
+static int dissect_aim_tlv_value_dcinfo(proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo _U_)
 {
-	/* FIXME */
-	return tvb_length(tvb);
+	int offset = 0;
+	
+	proto_tree *dctree = proto_item_add_subtree(ti, ett_aim_dcinfo);
+	
+  	proto_tree_add_item(dctree, hf_aim_dcinfo_ip , tvb, offset, 4, FALSE); offset+=4;
+	proto_tree_add_item(dctree, hf_aim_dcinfo_tcpport, tvb, offset, 4, FALSE); offset+=4;
+	proto_tree_add_item(dctree, hf_aim_dcinfo_type, tvb, offset, 1, FALSE); offset+=1;
+	proto_tree_add_item(dctree, hf_aim_dcinfo_proto_version, tvb, offset, 2, FALSE); offset+=2;
+	proto_tree_add_item(dctree, hf_aim_dcinfo_auth_cookie, tvb, offset, 4, FALSE); offset+=2;
+	proto_tree_add_item(dctree, hf_aim_dcinfo_webport, tvb, offset, 4, FALSE); offset+=4;
+	proto_tree_add_item(dctree, hf_aim_dcinfo_client_future, tvb, offset, 4, FALSE); offset+=4;
+	proto_tree_add_item(dctree, hf_aim_dcinfo_last_info_update, tvb, offset, 4, FALSE); offset+=4;
+	proto_tree_add_item(dctree, hf_aim_dcinfo_last_ext_info_update, tvb, offset, 4, FALSE); offset+=4;
+	proto_tree_add_item(dctree, hf_aim_dcinfo_last_ext_status_update, tvb, offset, 4, FALSE); offset+=4;
+	proto_tree_add_item(dctree, hf_aim_dcinfo_unknown, tvb, offset, 2, FALSE); offset+=2;
+
+	return offset;
 }
 
-int dissect_aim_tlv_value_string (proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb)
+int dissect_aim_tlv_value_string (proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo _U_)
 {
    guint8 *buf;
    gint string_len;
@@ -829,37 +1124,37 @@
    return string_len;
 }
 
-int dissect_aim_tlv_value_bytes (proto_item *ti _U_, guint16 valueid _U_, tvbuff_t *tvb _U_)
+int dissect_aim_tlv_value_bytes (proto_item *ti _U_, guint16 valueid _U_, tvbuff_t *tvb _U_, packet_info *pinfo _U_)
 {
    return tvb_length(tvb);
 }
 
-int dissect_aim_tlv_value_uint8 (proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb){
+int dissect_aim_tlv_value_uint8 (proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo _U_){
   guint8 value8 = tvb_get_guint8(tvb, 0);
   proto_item_set_text(ti, "Value: %d", value8);
   return 1;
 }
 
-int dissect_aim_tlv_value_uint16 (proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb){
+int dissect_aim_tlv_value_uint16 (proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo _U_){
   guint16 value16 = tvb_get_ntohs(tvb, 0);
   proto_item_set_text(ti, "Value: %d", value16);
   return 2;
 }
 
-int dissect_aim_tlv_value_ipv4 (proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb){
+int dissect_aim_tlv_value_ipv4 (proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo _U_){
   /* FIXME: Somewhat more readable format ? */
   guint32 value32 = tvb_get_ntoh24(tvb, 0);
   proto_item_set_text(ti, "Value: %d", value32);
   return 4;
 }
 
-int dissect_aim_tlv_value_uint32 (proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb){
+int dissect_aim_tlv_value_uint32 (proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo _U_){
   guint32 value32 = tvb_get_ntoh24(tvb, 0);
   proto_item_set_text(ti, "Value: %d", value32);
   return 4;
 }
 
-int dissect_aim_tlv_value_messageblock (proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb){
+int dissect_aim_tlv_value_messageblock (proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb, packet_info *pinfo _U_){
   proto_tree *entry;
   guint8 *buf;
   guint16 featurelen;
@@ -978,7 +1273,7 @@
 			      "Value");
 	
     if (tmp[i].dissector) {
-      tmp[i].dissector(ti1, valueid, tvb_new_subset(tvb, offset, length, length));
+      tmp[i].dissector(ti1, valueid, tvb_new_subset(tvb, offset, length, length), pinfo);
     } 
 
     offset += length;
@@ -988,7 +1283,16 @@
   return offset;
 }
 
-int dissect_aim_tlv_list(tvbuff_t *tvb, packet_info *pinfo _U_, 
+int dissect_aim_tlv_sequence(tvbuff_t *tvb, packet_info *pinfo, 
+							 int offset, proto_tree *tree, const aim_tlv *tlv_table)
+{
+	while (tvb_length_remaining(tvb, offset) > 0) {
+		offset = dissect_aim_tlv(tvb, pinfo, offset, tree, tlv_table);
+	}
+	return offset;
+}
+
+int dissect_aim_tlv_list(tvbuff_t *tvb, packet_info *pinfo, 
 			   int offset, proto_tree *tree, const aim_tlv *tlv_table)
 {
     guint16 i, tlv_count = tvb_get_ntohs(tvb, offset);
@@ -1097,6 +1401,12 @@
 	{ &hf_aim_userclass_unknown800,
 		{ "Unknown bit", "aim.userclass.unknown800", FT_BOOLEAN, 32, TFS(&flags_set_truth), CLASS_UNKNOWN800, "", HFILL },
 	},
+	{ &hf_aim_fnac_flag_next_is_related,
+		{ "Followed By SNAC with related information", "aim.fnac.flags.next_is_related", FT_BOOLEAN, 16, TFS(&flags_set_truth), FNAC_FLAG_NEXT_IS_RELATED, "", HFILL },
+	},
+	{ &hf_aim_fnac_flag_contains_version,
+		{ "Contains Version of Family this SNAC is in", "aim.fnac.flags.contains_version", FT_BOOLEAN, 16, TFS(&flags_set_truth), FNAC_FLAG_CONTAINS_VERSION, "", HFILL },
+	},
 	{ &hf_aim_userinfo_warninglevel,
 		{ "Warning Level", "aim.userinfo.warninglevel", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
 	},
@@ -1124,16 +1434,53 @@
     { &hf_aim_messageblock_message,
 		{ "Message", "aim.messageblock.message", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL },
 	},
+	{ &hf_aim_dcinfo_ip,
+		{ "Internal IP address", "aim.dcinfo.addr", FT_IPv4, BASE_NONE, NULL, 0x0, "", HFILL },
+	},
+	{ &hf_aim_dcinfo_tcpport,
+		{ "TCP Port", "aim.dcinfo.tcpport", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL },
+	},
+	{ &hf_aim_dcinfo_type,
+		{ "Type", "aim.dcinfo.type", FT_UINT8, BASE_HEX, VALS(dc_types), 0x0, "", HFILL },
+	},
+	{ &hf_aim_dcinfo_proto_version,
+		{ "Protocol Version", "aim.dcinfo.proto_version", FT_UINT16, BASE_DEC, VALS(protocol_versions), 0x0, "", HFILL },
+	},
+	{ &hf_aim_dcinfo_auth_cookie,
+		{ "Authorization Cookie", "aim.dcinfo.auth_cookie", FT_BYTES, BASE_NONE, NULL, 0x0, "", HFILL },
+	},
+	{ &hf_aim_dcinfo_webport,
+		{ "Web Front Port", "aim.dcinfo.webport", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL },
+	},
+	{ &hf_aim_dcinfo_client_future,
+		{ "Client Futures", "aim.dcinfo.client_futures", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL },
+	},
+	{ &hf_aim_dcinfo_last_info_update,
+		{ "Last Info Update", "aim.dcinfo.last_info_update", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL },
+	},
+	{ &hf_aim_dcinfo_last_ext_info_update,
+		{ "Last Extended Info Update", "aim.dcinfo.last_ext_info_update", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL },
+	},
+	{ &hf_aim_dcinfo_last_ext_status_update,
+		{ "Last Extended Status Update", "aim.dcinfo.last_ext_status_update", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL },
+	},
+	{ &hf_aim_dcinfo_unknown,
+		{ "Unknown", "aim.dcinfo.unknown", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL },
+	},
+
   };
 
   /* Setup protocol subtree array */
   static gint *ett[] = {
 	  &ett_aim,
+	  &ett_aim_dcinfo,
 	  &ett_aim_fnac,
+	  &ett_aim_fnac_flags,
 	  &ett_aim_tlv,
 	  &ett_aim_buddyname,
 	  &ett_aim_userclass,
-	  &ett_aim_messageblock
+	  &ett_aim_messageblock,
+	  &ett_aim_client_capabilities
   };
   module_t *aim_module;
 
@@ -1146,8 +1493,9 @@
 
   aim_module = prefs_register_protocol(proto_aim, NULL);
   prefs_register_bool_preference(aim_module, "desegment",
-    "Desegment all AIM messages spanning multiple TCP segments",
-    "Whether the AIM dissector should desegment all messages spanning multiple TCP segments",
+    "Reassemble AIM messages spanning multiple TCP segments",
+    "Whether the AIM dissector should reassemble messages spanning multiple TCP segments."
+    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
     &aim_desegment);
 
   subdissector_table = register_dissector_table("aim.family", 
diff -urN ethereal-0.10.6/epan/dissectors/packet-aim.h ethereal-0.10.7/epan/dissectors/packet-aim.h
--- ethereal-0.10.6/epan/dissectors/packet-aim.h	2004-08-12 17:42:15.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aim.h	2004-10-20 17:34:51.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-tcp.h
  * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
  *
- * $Id: packet-aim.h 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aim.h 12072 2004-09-23 17:40:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -25,12 +25,15 @@
 #ifndef __PACKET_AIM_H__
 #define __PACKET_AIM_H__
 
+/* For e_uuid_t */
+#include "packet-dcerpc.h"
+
 #define MAX_BUDDYNAME_LENGTH 30
 
 typedef struct _aim_tlv {
   guint16 valueid;
   char *desc;
-  int (*dissector) (proto_item *ti, guint16 value_id, tvbuff_t *tvb);
+  int (*dissector) (proto_item *ti, guint16 value_id, tvbuff_t *tvb, packet_info *);
 } aim_tlv;
 
 struct aiminfo {
@@ -39,7 +42,22 @@
   struct tcpinfo *tcpinfo;
 };
 
-void aim_init_family(guint16 family, const char *name, const value_string *subtypes);
+typedef struct _aim_subtype {
+	guint16 id;
+	char *name;
+	int (*dissector) (tvbuff_t *, packet_info *, proto_tree *);
+} aim_subtype;
+
+typedef struct _aim_family {
+	int ett;
+	int proto_id;
+	protocol_t *proto;
+	guint16 family;
+	char *name;
+	const aim_subtype *subtypes;
+} aim_family;
+
+void aim_init_family(int proto, int ett, guint16 family, const aim_subtype *subtypes);
 
 int dissect_aim_buddyname(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *tree);
 void aim_get_message( guchar *msg, tvbuff_t *tvb, int msg_offset, int msg_length);
@@ -47,25 +65,27 @@
 int dissect_aim_userinfo(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *tree);
 
 int dissect_aim_snac_error(tvbuff_t *tvb, packet_info *pinfo,
-                 int offset, proto_tree *aim_tree);
+                 proto_tree *aim_tree);
 
 int dissect_aim_tlv(tvbuff_t *tvb, packet_info *pinfo _U_, int offset, proto_tree *tree, const aim_tlv *);
 int dissect_aim_tlv_list(tvbuff_t *tvb, packet_info *pinfo _U_, int offset, proto_tree *tree, const aim_tlv *);
+int dissect_aim_tlv_sequence(tvbuff_t *tvb, packet_info *pinfo _U_, int offset, proto_tree *tree, const aim_tlv *);
 
-const char *aim_get_familyname( guint16 family );
-const char *aim_get_subtypename( guint16 family, guint16 subtype);
+const aim_family *aim_get_family( guint16 family );
+const aim_subtype *aim_get_subtype( guint16 family, guint16 subtype);
 
-int dissect_aim_tlv_value_string(proto_item *ti, guint16, tvbuff_t *);
-int dissect_aim_tlv_value_uint8(proto_item *ti, guint16, tvbuff_t *);
-int dissect_aim_tlv_value_uint16(proto_item *ti, guint16, tvbuff_t *);
-int dissect_aim_tlv_value_uint32(proto_item *ti, guint16, tvbuff_t *);
-int dissect_aim_tlv_value_bytes(proto_item *ti, guint16, tvbuff_t *);
-int dissect_aim_tlv_value_ipv4(proto_item *ti, guint16, tvbuff_t *);
-int dissect_aim_tlv_value_time(proto_item *ti, guint16, tvbuff_t *);
-int dissect_aim_tlv_value_client_capabilities(proto_item *ti, guint16, tvbuff_t *);
+int dissect_aim_tlv_value_string(proto_item *ti, guint16, tvbuff_t *, packet_info *);
+int dissect_aim_tlv_value_uint8(proto_item *ti, guint16, tvbuff_t *, packet_info *);
+int dissect_aim_tlv_value_uint16(proto_item *ti, guint16, tvbuff_t *, packet_info *);
+int dissect_aim_tlv_value_uint32(proto_item *ti, guint16, tvbuff_t *, packet_info *);
+int dissect_aim_tlv_value_bytes(proto_item *ti, guint16, tvbuff_t *, packet_info *);
+int dissect_aim_tlv_value_ipv4(proto_item *ti, guint16, tvbuff_t *, packet_info *);
+int dissect_aim_tlv_value_time(proto_item *ti, guint16, tvbuff_t *, packet_info *);
+int dissect_aim_tlv_value_client_capabilities(proto_item *ti, guint16, tvbuff_t *, packet_info *);
+int dissect_aim_capability(proto_tree *entry, tvbuff_t *tvb, int offset);
 int dissect_aim_userclass(tvbuff_t *tvb, int offset, int len, proto_item *ti, guint32 flags);
-int dissect_aim_tlv_value_userclass(proto_item *ti, guint16, tvbuff_t *);
-int dissect_aim_tlv_value_messageblock (proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb);
+int dissect_aim_tlv_value_userclass(proto_item *ti, guint16, tvbuff_t *, packet_info *);
+int dissect_aim_tlv_value_messageblock (proto_item *ti, guint16 valueid _U_, tvbuff_t *tvb, packet_info *);
 
 extern const aim_tlv client_tlvs[];
 extern const aim_tlv onlinebuddy_tlvs[];
diff -urN ethereal-0.10.6/epan/dissectors/packet-ansi_a.c ethereal-0.10.7/epan/dissectors/packet-ansi_a.c
--- ethereal-0.10.6/epan/dissectors/packet-ansi_a.c	2004-08-12 17:42:09.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ansi_a.c	2004-10-20 17:34:47.000000000 -0500
@@ -10,7 +10,7 @@
  *   2000 Access Network Interfaces
  *			3GPP2 A.S0001-1		TIA/EIA-2001
  *
- * $Id: packet-ansi_a.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-ansi_a.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -40,8 +40,8 @@
 #include <string.h>
 
 #include "epan/packet.h"
-#include "prefs.h"
-#include "tap.h"
+#include <epan/prefs.h>
+#include <epan/tap.h>
 
 #include "packet-bssap.h"
 #include "packet-ansi_a.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-ansi_map.c ethereal-0.10.7/epan/dissectors/packet-ansi_map.c
--- ethereal-0.10.6/epan/dissectors/packet-ansi_map.c	2004-08-12 17:42:02.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ansi_map.c	2004-10-20 17:34:42.000000000 -0500
@@ -79,7 +79,7 @@
  *   UIM
  *			3GPP2 N.S0003
  *
- * $Id: packet-ansi_map.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-ansi_map.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -111,7 +111,7 @@
 
 #include "epan/packet.h"
 #include "asn1.h"
-#include "tap.h"
+#include <epan/tap.h>
 
 #include "packet-ansi_a.h"
 #include "packet-ansi_map.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-aodv.c ethereal-0.10.7/epan/dissectors/packet-aodv.c
--- ethereal-0.10.6/epan/dissectors/packet-aodv.c	2004-08-12 17:42:29.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-aodv.c	2004-10-20 17:35:00.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for AODV dissection
  * Copyright 2000, Erik Nordstrm <erik.nordstrom@it.uu.se>
  *
- * $Id: packet-aodv.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-aodv.c 11796 2004-08-22 00:31:58Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,6 @@
 
 #include <glib.h>
 
-#include <epan/int-64bit.h>
 #include <epan/packet.h>
 #include <epan/ipv6-utils.h>
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-atalk.c ethereal-0.10.7/epan/dissectors/packet-atalk.c
--- ethereal-0.10.6/epan/dissectors/packet-atalk.c	2004-08-12 17:42:15.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-atalk.c	2004-10-20 17:34:50.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for AppleTalk packet disassembly: LLAP, DDP, NBP, ATP, ASP,
  * RTMP.
  *
- * $Id: packet-atalk.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-atalk.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Simon Wilkinson <sxw@dcs.ed.ac.uk>
  *
@@ -40,7 +40,7 @@
 #include <epan/atalk-utils.h>
 #include <epan/conversation.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "reassemble.h"
 
 #include "packet-afp.h"
@@ -2244,8 +2244,8 @@
 
   atp_module = prefs_register_protocol(proto_atp, NULL);
   prefs_register_bool_preference(atp_module, "desegment",
-    "Desegment all ATP messages spanning multiple DDP packets",
-    "Whether the ATP dissector should desegment all messages spanning multiple DDP packets",
+    "Reassemble ATP messages spanning multiple DDP packets",
+    "Whether the ATP dissector should reassemble messages spanning multiple DDP packets",
     &atp_defragment);
 
   proto_rtmp = proto_register_protocol("Routing Table Maintenance Protocol",
diff -urN ethereal-0.10.6/epan/dissectors/packet-beep.c ethereal-0.10.7/epan/dissectors/packet-beep.c
--- ethereal-0.10.6/epan/dissectors/packet-beep.c	2004-08-12 17:42:09.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-beep.c	2004-10-20 17:34:46.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-beep.c
  * Routines for BEEP packet disassembly
  *
- * $Id: packet-beep.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-beep.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Copyright (c) 2000 by Richard Sharpe <rsharpe@ns.aus.com>
  * Modified 2001 Darren New <dnew@invisible.net> for BEEP.
@@ -40,7 +40,7 @@
 #include <string.h>
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/conversation.h>
 
 #define TCP_PORT_BEEP 10288
diff -urN ethereal-0.10.6/epan/dissectors/packet-ber.c ethereal-0.10.7/epan/dissectors/packet-ber.c
--- ethereal-0.10.6/epan/dissectors/packet-ber.c	2004-08-12 17:42:24.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ber.c	2004-10-20 17:34:53.000000000 -0500
@@ -2,7 +2,7 @@
  * Helpers for ASN.1/BER dissection
  * Ronnie Sahlberg (C) 2004
  *
- * $Id: packet-ber.c 11565 2004-07-29 09:52:14Z sahlberg $
+ * $Id: packet-ber.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -43,8 +43,7 @@
 #include <epan/packet.h>
 
 #include <epan/strutil.h>
-#include <epan/int-64bit.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-ber.h"
 
 
@@ -147,7 +146,7 @@
 }
 
 
-static int dissect_ber_sq_of(gboolean implicit_tag, guint32 type, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, ber_sequence *seq, gint hf_id, gint ett_id);
+static int dissect_ber_sq_of(gboolean implicit_tag, guint32 type, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, const ber_sequence *seq, gint hf_id, gint ett_id);
 
 /* 8.1 General rules for encoding */
 
@@ -272,7 +271,11 @@
 	offset = get_ber_length(tvb, offset, &tmp_length, &tmp_ind);
 	
 	if(show_internal_ber_fields){
-		proto_tree_add_uint(tree, hf_ber_length, tvb, old_offset, offset - old_offset, tmp_length);
+		if(tmp_ind){
+			proto_tree_add_text(tree, tvb, old_offset, 1, "Length: Indefinite length");
+		} else {
+			proto_tree_add_uint(tree, hf_ber_length, tvb, old_offset, offset - old_offset, tmp_length);
+		}
 	}
 	if (length)
 		*length = tmp_length;
@@ -344,6 +347,7 @@
 	guint32 tag;
 	guint32 len;
 	gint32 val;
+	gint64 val64;
 	guint32 i;
 
 	offset=dissect_ber_identifier(pinfo, tree, tvb, offset, &class, &pc, &tag);
@@ -360,19 +364,28 @@
 		pi=proto_tree_add_text(tree, tvb, offset, len, "%s : 0x", hfinfo->name);
 		if(pi){
 			for(i=0;i<len;i++){
-				proto_item_append_text(pi,"%02x",tvb_get_guint8(tvb, offset+i));
+				proto_item_append_text(pi,"%02x",tvb_get_guint8(tvb, offset));
+				offset++;
 			}
 		}
-		return 0xdeadbeef;
+		return offset;
 	}
 	if(len>4){
 		header_field_info *hfinfo;
-		char buf[8]={0,0,0,0,0,0,0,0};
 
-		tvb_memcpy(tvb, buf+8-len, offset, len);
+		val64=0;
+		if (len > 0) {
+			/* extend sign bit */
+			val64 = (gint8)tvb_get_guint8(tvb, offset);
+			offset++;
+		}
+		for(i=1;i<len;i++){
+			val64=(val64<<8)|tvb_get_guint8(tvb, offset);
+			offset++;
+		}
 		hfinfo = proto_registrar_get_nth(hf_id);
-		proto_tree_add_text(tree, tvb, offset, len, "%s: %s", hfinfo->name, u64toa(buf));
-		return 0xdeadbeef;
+		proto_tree_add_text(tree, tvb, offset-len, len, "%s: %" PRIu64, hfinfo->name, val64);
+		return offset;
 	}
 	
 	val=0;
@@ -440,9 +453,9 @@
 
 /* this function dissects a BER sequence 
  */
-int dissect_ber_sequence(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, ber_sequence *seq, gint hf_id, gint ett_id) {
+int dissect_ber_sequence(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, const ber_sequence *seq, gint hf_id, gint ett_id) {
 	guint8 class;
-	gboolean pc, ind;
+	gboolean pc, ind, ind_field;
 	guint32 tag;
 	guint32 len;
 	proto_tree *tree = parent_tree;
@@ -453,7 +466,14 @@
 	/* first we must read the sequence header */
 	offset = dissect_ber_identifier(pinfo, tree, tvb, offset, &class, &pc, &tag);
 	offset = dissect_ber_length(pinfo, tree, tvb, offset, &len, &ind);
-	end_offset = offset + len;
+	if(ind){
+	  /* if the length is indefinite we dont really know (yet) where the
+	   * object ends so assume it spans the rest of the tvb for now.
+           */
+	  end_offset = tvb_length(tvb);
+	} else {
+	  end_offset = offset + len;
+	}
 
 	/* sanity check: we only handle Constructed Universal Sequences */
 	if ((!pc)
@@ -477,12 +497,20 @@
 		gboolean pc;
 		guint32 tag;
 		guint32 len;
-		int hoffset, eoffset;
+		int hoffset, eoffset, count;
 
+		if(ind){ /* this sequence was of indefinite length, so check for EOC */
+			if((tvb_get_guint8(tvb, offset)==0)&&(tvb_get_guint8(tvb, offset+1)==0)){
+				if(show_internal_ber_fields){
+					proto_tree_add_text(tree, tvb, offset, 2, "EOC");
+				}
+				return offset+2;
+			}
+		}
 		hoffset = offset;
 		/* read header and len for next field */
 		offset = get_ber_identifier(tvb, offset, &class, &pc, &tag);
-		offset = get_ber_length(tvb, offset, &len, NULL);
+		offset = get_ber_length(tvb, offset, &len, &ind_field);
 		eoffset = offset + len;
 
 ber_sequence_try_again:
@@ -521,11 +549,27 @@
 		}
 		
 		/* call the dissector for this field */
-		next_tvb = tvb_new_subset(tvb, hoffset, eoffset-hoffset, eoffset-hoffset);
-		seq->func(pinfo, tree, next_tvb, 0);
+		if(ind_field){
+			/* creating a subtvb for indefinite length,  just
+			 * give it all of the tvb and hope for the best.
+			 */
+			next_tvb = tvb_new_subset(tvb, hoffset, tvb_length_remaining(tvb,hoffset), tvb_length_remaining(tvb,hoffset));
+		} else {
+			next_tvb = tvb_new_subset(tvb, hoffset, eoffset-hoffset, eoffset-hoffset);
+		}
 
-		seq++;
-		offset = eoffset;
+		count=seq->func(pinfo, tree, next_tvb, 0);
+		if(ind_field){
+			/* previous field was of indefinite length so we have
+			 * no choice but use whatever the subdissector told us
+			 * as size for the field.
+			 */
+			seq++;
+			offset = hoffset+count;
+		} else {
+			seq++;
+			offset = eoffset;
+		}
 	}
 
 	/* if we didnt end up at exactly offset, then we ate too many bytes */
@@ -778,7 +822,7 @@
 	return eoffset;
 }
 
-static int dissect_ber_sq_of(gboolean implicit_tag, guint32 type, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, ber_sequence *seq, gint hf_id, gint ett_id) {
+static int dissect_ber_sq_of(gboolean implicit_tag, guint32 type, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, const ber_sequence *seq, gint hf_id, gint ett_id) {
 	guint8 class;
 	gboolean pc, ind;
 	guint32 tag;
@@ -876,11 +920,11 @@
 	return end_offset;
 }
 
-int dissect_ber_sequence_of(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, ber_sequence *seq, gint hf_id, gint ett_id) {
+int dissect_ber_sequence_of(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, const ber_sequence *seq, gint hf_id, gint ett_id) {
 	return dissect_ber_sq_of(implicit_tag, BER_UNI_TAG_SEQUENCE, pinfo, parent_tree, tvb, offset, seq, hf_id, ett_id);
 }
 
-int dissect_ber_set_of(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, ber_sequence *seq, gint hf_id, gint ett_id) {
+int dissect_ber_set_of(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, const ber_sequence *seq, gint hf_id, gint ett_id) {
 	return dissect_ber_sq_of(implicit_tag, BER_UNI_TAG_SET, pinfo, parent_tree, tvb, offset, seq, hf_id, ett_id);
 }
 
@@ -922,7 +966,7 @@
 }
 
 /* 8.6 Encoding of a bitstring value */
-int dissect_ber_bitstring(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, asn_namedbit *named_bits, gint hf_id, gint ett_id, tvbuff_t **out_tvb) 
+int dissect_ber_bitstring(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, const asn_namedbit *named_bits, gint hf_id, gint ett_id, tvbuff_t **out_tvb) 
 {
 	guint8 class;
 	gboolean pc, ind;
@@ -932,7 +976,7 @@
 	int end_offset;
 	proto_item *item = NULL;
 	proto_tree *tree = NULL;
-	asn_namedbit *nb;
+	const asn_namedbit *nb;
 	char *sep;
 	gboolean term;
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-ber.h ethereal-0.10.7/epan/dissectors/packet-ber.h
--- ethereal-0.10.6/epan/dissectors/packet-ber.h	2004-08-12 17:42:24.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ber.h	2004-10-20 17:34:53.000000000 -0500
@@ -2,7 +2,7 @@
  * Helpers for ASN.1/BER dissection
  * Ronnie Sahlberg (C) 2004
  *
- * $Id: packet-ber.h 11565 2004-07-29 09:52:14Z sahlberg $
+ * $Id: packet-ber.h 12265 2004-10-11 18:34:54Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -105,7 +105,7 @@
 
 /* this function dissects a BER sequence 
  */
-extern int dissect_ber_sequence(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, ber_sequence *seq, gint hf_id, gint ett_id);
+extern int dissect_ber_sequence(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, const ber_sequence *seq, gint hf_id, gint ett_id);
 
 
 typedef struct _ber_choice {
@@ -134,9 +134,9 @@
 
 /* this function dissects a BER sequence of
  */
-extern int dissect_ber_sequence_of(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, ber_sequence *seq, gint hf_id, gint ett_id);
+extern int dissect_ber_sequence_of(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, const ber_sequence *seq, gint hf_id, gint ett_id);
 
-extern int dissect_ber_set_of(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, ber_sequence *seq, gint hf_id, gint ett_id);
+extern int dissect_ber_set_of(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, const ber_sequence *seq, gint hf_id, gint ett_id);
 
 
 extern int dissect_ber_generalized_time(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, gint hf_id);
@@ -151,7 +151,7 @@
 } asn_namedbit;
 /* this function dissects a BER BIT-STRING
  */
-extern int dissect_ber_bitstring(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, asn_namedbit *named_bits, gint hf_id, gint ett_id, tvbuff_t **out_tvb);
+extern int dissect_ber_bitstring(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, const asn_namedbit *named_bits, gint hf_id, gint ett_id, tvbuff_t **out_tvb);
 extern int dissect_ber_bitstring32(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, int **bit_fields, gint hf_id, gint ett_id, tvbuff_t **out_tvb);
 
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-bgp.c ethereal-0.10.7/epan/dissectors/packet-bgp.c
--- ethereal-0.10.6/epan/dissectors/packet-bgp.c	2004-08-12 17:42:25.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-bgp.c	2004-10-20 17:34:55.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for BGP packet dissection.
  * Copyright 1999, Jun-ichiro itojun Hagino <itojun@itojun.org>
  *
- * $Id: packet-bgp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-bgp.c 12165 2004-10-01 07:07:03Z guy $
  *
  * Supports:
  * RFC1771 A Border Gateway Protocol 4 (BGP-4)
@@ -60,8 +60,8 @@
 #include "packet-bgp.h"
 #include "packet-ipv6.h"
 #include "packet-frame.h"
-#include "afn.h"
-#include "prefs.h"
+#include <epan/afn.h>
+#include <epan/prefs.h>
 
 static const value_string bgptypevals[] = {
     { BGP_OPEN, "OPEN Message" },
@@ -511,7 +511,7 @@
                                         case FORMAT_AS2_LOC:
                                                 length = 8 + sizeof(ip4addr);
                                                 tvb_memcpy(tvb, ip4addr, offset + 8, sizeof(ip4addr));   /* Next Hop */
-                                                g_string_sprintf(buf, "Empty Label Stack RD=%u:%u IP=%s",
+                                                g_string_sprintf(buf, "Empty Label Stack RD=%u:%u IPv4=%s",
                                                                 tvb_get_ntohs(tvb, offset + 2),
                                                                 tvb_get_ntohl(tvb, offset + 4),
                                                                 ip_to_str(ip4addr));
@@ -520,14 +520,14 @@
                                                 length = 8 + sizeof(ip4addr);
                                                 tvb_memcpy(tvb, ip4addr, offset + 2, sizeof(ip4addr));   /* IP part of the RD            */
                                                 tvb_memcpy(tvb, ip4addr2, offset + 8, sizeof(ip4addr));  /* Next Hop   */
-                                                g_string_sprintf(buf, "Empty Label Stack RD=%s:%u IP=%s",
+                                                g_string_sprintf(buf, "Empty Label Stack RD=%s:%u IPv4=%s",
                                                                 ip_to_str(ip4addr),
                                                                 tvb_get_ntohs(tvb, offset + 6),
                                                                 ip_to_str(ip4addr2));
                                                 break ;
                                         default:
                                                 length = 0 ;
-                                                g_string_sprintf(buf, "Unknown (0x%04x)labeled VPN address format",rd_type);
+                                                g_string_sprintf(buf, "Unknown (0x%04x) labeled VPN IPv4 address format",rd_type);
                                                 break;
                                 }
                                 break;
@@ -555,7 +555,7 @@
                                         case FORMAT_AS2_LOC:
                                                 length = 8 + 16;
                                                 tvb_memcpy(tvb, ip6addr.u6_addr.u6_addr8, offset + 8, 16); /* Next Hop */
-                                                g_string_sprintf(buf, "Empty Label Stack RD=%u:%u IP=%s",
+                                                g_string_sprintf(buf, "Empty Label Stack RD=%u:%u IPv6=%s",
                                                                 tvb_get_ntohs(tvb, offset + 2),
                                                                 tvb_get_ntohl(tvb, offset + 4),
                                                                 ip6_to_str(&ip6addr));
@@ -564,14 +564,14 @@
                                                 length = 8 + 16;
                                                 tvb_memcpy(tvb, ip4addr, offset + 2, sizeof(ip4addr));   /* IP part of the RD            */
                                                 tvb_memcpy(tvb, ip6addr.u6_addr.u6_addr8, offset + 8, 16); /* Next Hop */
-                                                g_string_sprintf(buf, "Empty Label Stack RD=%s:%u IP=%s",
+                                                g_string_sprintf(buf, "Empty Label Stack RD=%s:%u IPv6=%s",
                                                                 ip_to_str(ip4addr),
                                                                 tvb_get_ntohs(tvb, offset + 6),
                                                                 ip6_to_str(&ip6addr));
                                                 break ;
                                         default:
                                                 length = 0 ;
-                                                g_string_sprintf(buf, "Unknown (0x%04x)labeled VPN address format",rd_type);
+                                                g_string_sprintf(buf, "Unknown (0x%04x) labeled VPN IPv6 address format",rd_type);
                                                 break;
                                 }
                                 break;
@@ -588,7 +588,7 @@
                         case SAFNUM_LAB_VPNUNIMULC:
                             length = 4; /* the next-hop is simply an ipv4 addr */
                             tvb_memcpy(tvb, ip4addr, offset + 0, 4);
-                            g_string_sprintf(buf, "IP=%s",
+                            g_string_sprintf(buf, "IPv4=%s",
                                      ip_to_str(ip4addr));
                             break;
                         default:
@@ -648,28 +648,33 @@
             offset += (1 + labnum * 3);
             if (plen <= (labnum * 3*8)) {
                 proto_tree_add_text(tree, tvb, start_offset, 1,
-                        "%s IPv4 prefix length %u invalid", tag, plen);
+                        "%s Labeled IPv4 prefix length %u invalid",
+                        tag, plen);
                 return -1;
             }
             plen -= (labnum * 3*8);
             length = ipv4_addr_and_mask(tvb, offset, ip4addr.addr_bytes, plen);
             if (length < 0) {
                 proto_tree_add_text(tree, tvb, start_offset, 1,
-                        "%s IPv4 prefix length %u invalid",
+                        "%s Labeled IPv4 prefix length %u invalid",
                         tag, plen + (labnum * 3*8));
                 return -1;
             }
 
             ti = proto_tree_add_text(tree, tvb, start_offset,
-                    (offset + 1 + length) - start_offset,
-                    "Label Stack=%s IP=%s/%u",
+                    (offset + length) - start_offset,
+                    "Label Stack=%s IPv4=%s/%u",
                     lab_stk, ip_to_str(ip4addr.addr_bytes), plen);
             prefix_tree = proto_item_add_subtree(ti, ett_bgp_prefix);
+            proto_tree_add_text(prefix_tree, tvb, start_offset, 1, "%s Prefix length: %u",
+                tag, plen + labnum * 3 * 8);
+            proto_tree_add_text(prefix_tree, tvb, start_offset + 1, 3 * labnum, "%s Label Stack: %s",
+                tag, lab_stk);
             if (hf_addr4 != -1) {
-                proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, offset + 1,
+                proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, offset,
                         length, ip4addr.addr);
             } else {
-                proto_tree_add_text(prefix_tree, tvb, offset + 1, length,
+                proto_tree_add_text(prefix_tree, tvb, offset, length,
                         "%s IPv4 prefix: %s",
                         tag, ip_to_str(ip4addr.addr_bytes));
             }
@@ -685,7 +690,8 @@
             offset += (1 + labnum * 3);
             if (plen <= (labnum * 3*8)) {
                 proto_tree_add_text(tree, tvb, start_offset, 1,
-                        "%s IPv4 prefix length %u invalid", tag, plen);
+                        "%s Labeled VPN IPv4 prefix length %u invalid",
+                        tag, plen);
                 return -1;
             }
             plen -= (labnum * 3*8);
@@ -693,7 +699,7 @@
             rd_type = tvb_get_ntohs(tvb, offset);
             if (plen <= 8*8) {
                 proto_tree_add_text(tree, tvb, start_offset, 1,
-                        "%s IPv4 prefix length %u invalid",
+                        "%s Labeled VPN IPv4 prefix length %u invalid",
                         tag, plen + (labnum * 3*8));
                 return -1;
             }
@@ -705,19 +711,26 @@
                 length = ipv4_addr_and_mask(tvb, offset + 8, ip4addr.addr_bytes, plen);
                 if (length < 0) {
                     proto_tree_add_text(tree, tvb, start_offset, 1,
-                            "%s IPv4 prefix length %u invalid",
+                            "%s Labeled VPN IPv4 prefix length %u invalid",
                             tag, plen + (labnum * 3*8) + 8*8);
                     return -1;
                 }
 
                 ti = proto_tree_add_text(tree, tvb, start_offset,
                         (offset + 8 + length) - start_offset,
-                        "Label Stack=%s RD=%u:%u, IP=%s/%u",
+                        "Label Stack=%s RD=%u:%u, IPv4=%s/%u",
                         lab_stk,
                         tvb_get_ntohs(tvb, offset + 2),
                         tvb_get_ntohl(tvb, offset + 4),
                         ip_to_str(ip4addr.addr_bytes), plen);
                 prefix_tree = proto_item_add_subtree(ti, ett_bgp_prefix);
+                proto_tree_add_text(prefix_tree, tvb, start_offset, 1, "%s Prefix length: %u",
+                        tag, plen + labnum * 3 * 8 + 8 * 8);
+                proto_tree_add_text(prefix_tree, tvb, start_offset + 1, 3 * labnum,
+                        "%s Label Stack: %s", tag, lab_stk);
+                proto_tree_add_text(prefix_tree, tvb, start_offset + 1 + 3 * labnum, 8,
+                        "%s Route Distinguisher: %u:%u", tag, tvb_get_ntohs(tvb, offset + 2),
+                        tvb_get_ntohl(tvb, offset + 4));
                 if (hf_addr4 != -1) {
                     proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb,
                             offset + 8, length, ip4addr.addr);
@@ -735,26 +748,42 @@
                 length = ipv4_addr_and_mask(tvb, offset + 8, ip4addr2.addr_bytes, plen);
                 if (length < 0) {
                         proto_tree_add_text(tree, tvb, start_offset, 1,
-                                "%s IPv4 prefix length %u invalid",
+                                "%s Labeled VPN IPv4 prefix length %u invalid",
                                 tag, plen + (labnum * 3*8) + 8*8);
                         return -1;
                 }
 
                 ti = proto_tree_add_text(tree, tvb, start_offset,
                         (offset + 8 + length) - start_offset,
-                        "Label Stack=%s RD=%s:%u, IP=%s/%u",
+                        "Label Stack=%s RD=%s:%u, IPv4=%s/%u",
                         lab_stk,
                         ip_to_str(ip4addr.addr_bytes),
                         tvb_get_ntohs(tvb, offset + 6),
                         ip_to_str(ip4addr2.addr_bytes),
                         plen);
+		prefix_tree = proto_item_add_subtree(ti, ett_bgp_prefix);
+		proto_tree_add_text(prefix_tree, tvb, start_offset, 1, "%s Prefix length: %u",
+			tag, plen + labnum * 3 * 8 + 8 * 8);
+		proto_tree_add_text(prefix_tree, tvb, start_offset + 1, 3 * labnum,
+			"%s Label Stack: %s", tag, lab_stk);
+		proto_tree_add_text(prefix_tree, tvb, start_offset + 1 + 3 * labnum, 8,
+			"%s Route Distinguisher: %s:%u", tag, ip_to_str(ip4addr.addr_bytes),
+			tvb_get_ntohs(tvb, offset + 6));
+		if (hf_addr4 != -1) {
+			proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb,
+				offset + 8, length, ip4addr2.addr);
+		} else {
+			proto_tree_add_text(prefix_tree, tvb, offset + 8,
+				length, "%s IPv4 prefix: %s", tag,
+				ip_to_str(ip4addr2.addr_bytes));
+		}
                 total_length = (1 + labnum * 3 + 8) + length;
                 break;
 
             default:
                 proto_tree_add_text(tree, tvb, start_offset,
                         (offset - start_offset) + 2,
-                        "Unknown labeled VPN address format %u", rd_type);
+                        "Unknown labeled VPN IPv4 address format %u", rd_type);
                 return -1;
             }
             break;
@@ -784,7 +813,7 @@
             offset += (1 + labnum * 3);
             if (plen <= (labnum * 3*8)) {
                 proto_tree_add_text(tree, tvb, start_offset, 1,
-                        "%s IPv6 prefix length %u invalid", tag, plen);
+                        "%s Labeled IPv6 prefix length %u invalid", tag, plen);
                 return -1;
             }
             plen -= (labnum * 3*8);
@@ -792,13 +821,13 @@
             length = ipv6_addr_and_mask(tvb, offset, &ip6addr, plen);
             if (length < 0) {
                 proto_tree_add_text(tree, tvb, start_offset, 1,
-                        "%s IPv6 prefix length %u invalid", tag, plen);
+                        "%s Labeled IPv6 prefix length %u invalid", tag, plen);
                 return -1;
             }
 
 	    ti = proto_tree_add_text(tree, tvb, start_offset,
 		 (offset + length) - start_offset,
-                 "Label Stack=%s, IP=%s/%u",
+                 "Label Stack=%s, IPv6=%s/%u",
                  lab_stk,
                  ip6_to_str(&ip6addr), plen);
 	    total_length = (1 + labnum * 3) + length;
@@ -813,7 +842,7 @@
             offset += (1 + labnum * 3);
             if (plen <= (labnum * 3*8)) {
                 proto_tree_add_text(tree, tvb, start_offset, 1,
-                        "%s IPv6 prefix length %u invalid", tag, plen);
+                        "%s Labeled VPN IPv6 prefix length %u invalid", tag, plen);
                 return -1;
             }
             plen -= (labnum * 3*8);
@@ -821,7 +850,7 @@
             rd_type = tvb_get_ntohs(tvb,offset);
             if (plen <= 8*8) {
                 proto_tree_add_text(tree, tvb, start_offset, 1,
-                        "%s IPv6 prefix length %u invalid",
+                        "%s Labeled VPN IPv6 prefix length %u invalid",
                         tag, plen + (labnum * 3*8));
                 return -1;
             }
@@ -833,14 +862,14 @@
                 length = ipv6_addr_and_mask(tvb, offset + 8, &ip6addr, plen);
                 if (length < 0) {
                     proto_tree_add_text(tree, tvb, start_offset, 1,
-                            "%s IPv6 prefix length %u invalid",
+                            "%s Labeled VPN IPv6 prefix length %u invalid",
                             tag, plen + (labnum * 3*8) + 8*8);
                     return -1;
                 }
 
                 ti = proto_tree_add_text(tree, tvb, start_offset,
                         (offset + 8 + length) - start_offset,
-                        "Label Stack=%s RD=%u:%u, IP=%s/%u",
+                        "Label Stack=%s RD=%u:%u, IPv6=%s/%u",
                         lab_stk,
                         tvb_get_ntohs(tvb, offset + 2),
                         tvb_get_ntohl(tvb, offset + 4),
@@ -854,14 +883,14 @@
                 length = ipv6_addr_and_mask(tvb, offset + 8, &ip6addr, plen);
                 if (length < 0) {
                     proto_tree_add_text(tree, tvb, start_offset, 1,
-                            "%s IPv6 prefix length %u invalid",
+                            "%s Labeled VPN IPv6 prefix length %u invalid",
                             tag, plen + (labnum * 3*8) + 8*8);
                     return -1;
                 }
 
                 ti = proto_tree_add_text(tree, tvb, start_offset,
                         (offset + 8 + length) - start_offset,
-                        "Label Stack=%s RD=%s:%u, IP=%s/%u",
+                        "Label Stack=%s RD=%s:%u, IPv6=%s/%u",
                         lab_stk,
                         ip_to_str(ip4addr.addr_bytes),
                         tvb_get_ntohs(tvb, offset + 6),
@@ -871,7 +900,7 @@
 
             default:
                 proto_tree_add_text(tree, tvb, start_offset, 0,
-                        "Unknown labeled VPN address format %u", rd_type);
+                        "Unknown labeled VPN IPv6 address format %u", rd_type);
                 return -1;
             }
             break;
@@ -1937,35 +1966,34 @@
 		    "Subsequent address family identifier: %s (%u)",
 		    val_to_str(saf, bgpattr_nlri_safi, saf >= 128 ? "Vendor specific" : "Unknown"),
 		    saf);
+		nexthop_len = tvb_get_guint8(tvb, o + i + aoff + 3);
+		ti = proto_tree_add_text(subtree2, tvb, o + i + aoff + 3,
+		        nexthop_len + 1,
+			"Next hop network address (%d %s)",
+			nexthop_len, plurality(nexthop_len, "byte", "bytes"));
+		subtree3 = proto_item_add_subtree(ti, ett_bgp_mp_nhna);
                 if (af != AFNUM_INET && af != AFNUM_INET6 && af != AFNUM_L2VPN) {
                     /*
                      * The addresses don't contain lengths, so if we
                      * don't understand the address family type, we
                      * cannot parse the subsequent addresses as we
                      * don't know how long they are.
-                     *
-                     * XXX - we should put a protocol tree item in for
-                     * this, as an unknown blob.
                      */
-                    break;
-                }
-                nexthop_len = tvb_get_guint8(tvb, o + i + aoff + 3);
-		ti = proto_tree_add_text(subtree2, tvb, o + i + aoff + 3,
-		        nexthop_len + 1,
-			"Next hop network address (%d %s)",
-			nexthop_len, plurality(nexthop_len, "byte", "bytes"));
-		subtree3 = proto_item_add_subtree(ti, ett_bgp_mp_nhna);
-		j = 0;
-		while (j < nexthop_len) {
-                    advance = mp_addr_to_str(af, saf, tvb, o + i + aoff + 4 + j,
-		        junk_gbuf) ;
-                    if (advance == 0) /* catch if this is a unknown AFI type*/
-                            break;
-                    if (j + advance > nexthop_len)
-			    break;
-                    proto_tree_add_text(subtree3, tvb,o + i + aoff + 4 + j,
-                        advance, "Next hop: %s (%u)", junk_gbuf->str, advance);
-		    j += advance;
+		    proto_tree_add_text(subtree3, tvb, o + i + aoff + 4,
+		    	nexthop_len, "Unknown Address Family");
+                } else {
+		    j = 0;
+		    while (j < nexthop_len) {
+			advance = mp_addr_to_str(af, saf, tvb, o + i + aoff + 4 + j,
+				junk_gbuf) ;
+			if (advance == 0) /* catch if this is a unknown AFI type*/
+				break;
+			if (j + advance > nexthop_len)
+				break;
+			proto_tree_add_text(subtree3, tvb,o + i + aoff + 4 + j,
+				advance, "Next hop: %s (%u)", junk_gbuf->str, advance);
+			j += advance;
+		    }
 		}
                 tlen -= nexthop_len + 4;
                 aoff += nexthop_len + 4 ;
@@ -1995,8 +2023,11 @@
 			"Network layer reachability information (%u %s)",
 			tlen, (tlen == 1) ? "byte" : "bytes");
 		if (tlen)  {
-	                subtree3 = proto_item_add_subtree(ti,ett_bgp_mp_reach_nlri);
-
+	            subtree3 = proto_item_add_subtree(ti,ett_bgp_mp_reach_nlri);
+		    if (af != AFNUM_INET && af != AFNUM_INET6 && af != AFNUM_L2VPN) {
+		    	proto_tree_add_text(subtree3, tvb, o + i + aoff,
+		    		tlen, "Unknown Address Family");
+		    } else {
       		        while (tlen > 0) {
                                 advance = decode_prefix_MP(subtree3,
                                     hf_bgp_mp_reach_nlri_ipv4_prefix,
@@ -2008,6 +2039,7 @@
 		                tlen -= advance;
 		                aoff += advance;
                         }
+		    }
                 }
 		break;
 	   case BGPTYPE_MP_UNREACH_NLRI:
@@ -2080,7 +2112,7 @@
 
                         while (q < end) {
                             ext_com = tvb_get_ntohs(tvb,q) ;
-                            g_string_sprintfa(junk_gbuf, "%s",
+                            g_string_sprintf(junk_gbuf, "%s",
                                                   val_to_str(ext_com,bgpext_com_type,"Unknown"));
                             switch (ext_com) {
                             case BGP_EXT_COM_RT_0:
@@ -2106,7 +2138,7 @@
                                 break;
                             case BGP_EXT_COM_OSPF_RTYPE:
                                 tvb_memcpy(tvb,ipaddr,q+2,4);
-                                g_string_sprintfa(junk_gbuf, ": Area:%s %s", ip_to_str(ipaddr),
+                                g_string_sprintfa(junk_gbuf, ": Area: %s, Type: %s", ip_to_str(ipaddr),
                                          val_to_str(tvb_get_guint8(tvb,q+6),bgpext_ospf_rtype,"Unknown"));
 				/* print OSPF Metric type if selected */
 				/* always print E2 even if not external route -- receiving router should ignore */
@@ -2114,7 +2146,9 @@
                                     g_string_sprintfa(junk_gbuf," E2");
                                 } else if (tvb_get_guint8(tvb,q+6)==(BGP_OSPF_RTYPE_EXT ||BGP_OSPF_RTYPE_NSSA ) ) {
                                     g_string_sprintfa(junk_gbuf," E1");
-                                }
+                                } else {
+				    g_string_sprintfa(junk_gbuf,", no options");
+				}
                                 proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf->str);
                                 break;
                             case BGP_EXT_COM_LINKBAND:
@@ -2124,7 +2158,7 @@
                                 proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf->str);
                                 break;
                             case BGP_EXT_COM_L2INFO:
-                                g_string_sprintf(junk_gbuf,
+                                g_string_sprintfa(junk_gbuf,
                                                        ": %s, Control Flags: %s%s%s%s%s, MTU: %u %s",
                                                        val_to_str(tvb_get_guint8(tvb,q+2),bgp_l2vpn_encaps,"Unknown"),
                                                        tvb_get_guint8(tvb,q+3) ? "" : "none",
@@ -2149,7 +2183,6 @@
                                                     tvb_get_ntohs(tvb,q+4)==1 ? "byte" : "bytes");
                                 break;
                             default:
-                                g_string_sprintf(junk_gbuf, " ");
                                 proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_gbuf->str);
                                 break ;
                             }
@@ -2783,8 +2816,9 @@
 
     bgp_module = prefs_register_protocol(proto_bgp, NULL);
     prefs_register_bool_preference(bgp_module, "desegment",
-      "Desegment all BGP messages spanning multiple TCP segments",
-      "Whether the BGP dissector should desegment all messages spanning multiple TCP segments",
+      "Reassemble BGP messages spanning multiple TCP segments",
+      "Whether the BGP dissector should reassemble messages spanning multiple TCP segments."
+      " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
       &bgp_desegment);
     prefs_register_enum_preference(bgp_module, "asn_len",
       "Length of the AS number",
diff -urN ethereal-0.10.6/epan/dissectors/packet-bootp.c ethereal-0.10.7/epan/dissectors/packet-bootp.c
--- ethereal-0.10.6/epan/dissectors/packet-bootp.c	2004-08-12 17:42:27.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-bootp.c	2004-10-20 17:34:59.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 1998, Gilbert Ramirez <gram@alumni.rice.edu>
  * Copyright 2004, Thomas Anders <thomas.anders [AT] blue-cable.de>
  *
- * $Id: packet-bootp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-bootp.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * The information used comes from:
  * RFC  951: Bootstrap Protocol
@@ -18,8 +18,16 @@
  * RFC 3203: DHCP reconfigure extension
  * RFC 3495: DHCP Option (122) for CableLabs Client Configuration
  * RFC 3594: PacketCable Security Ticket Control Sub-Option (122.9)
+ * draft-ietf-dhc-fqdn-option-07.txt
  * BOOTP and DHCP Parameters
  *     http://www.iana.org/assignments/bootp-dhcp-parameters
+ * DOCSIS(TM) 2.0 Radio Frequency Interface Specification
+ *     http://www.cablemodem.com/downloads/specs/CM-SP-RFIv2.0-I06-040804.pdf
+ * PacketCable(TM) MTA Device Provisioning Specification
+ *     http://www.packetcable.com/downloads/specs/PKT-SP-PROV-I10-040730.pdf
+ *     http://www.cablelabs.com/specifications/archives/PKT-SP-PROV-I05-021127.pdf (superseded by above)
+ * CableHome(TM) 1.1 Specification
+ *     http://www.cablelabs.com/projects/cablehome/downloads/specs/CH-SP-CH1.1-I05-040806.pdf
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -40,20 +48,31 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
+/*
+ * Some of the development of the BOOTP/DHCP protocol decoder was sponsored by
+ * Cable Television Laboratories, Inc. ("CableLabs") based upon proprietary
+ * CableLabs' specifications. Your license and use of this protocol decoder
+ * does not mean that you are licensed to use the CableLabs'
+ * specifications.  If you have questions about this protocol, contact
+ * jf.mule [AT] cablelabs.com or c.stuart [AT] cablelabs.com for additional
+ * information.
+ */
+
+
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
 
 #include <string.h>
 #include <glib.h>
-#include <epan/int-64bit.h>
 #include <epan/packet.h>
 #include "packet-arp.h"
 #include "packet-dns.h"				/* for get_dns_name() */
 
-#include "prefs.h"
-#include "tap.h"
- 
+#include <epan/prefs.h>
+#include <epan/tap.h>
+#include <epan/strutil.h>
+
 static int bootp_dhcp_tap = -1;
 static int proto_bootp = -1;
 static int hf_bootp_type = -1;
@@ -75,10 +94,22 @@
 static int hf_bootp_cookie = -1;
 static int hf_bootp_vendor = -1;
 static int hf_bootp_dhcp = -1;
-
-static guint ett_bootp = -1;
-static guint ett_bootp_flags = -1;
-static guint ett_bootp_option = -1;
+static int hf_bootp_fqdn_s = -1;
+static int hf_bootp_fqdn_o = -1;
+static int hf_bootp_fqdn_e = -1;
+static int hf_bootp_fqdn_n = -1;
+static int hf_bootp_fqdn_mbz = -1;
+static int hf_bootp_fqdn_rcode1 = -1;
+static int hf_bootp_fqdn_rcode2 = -1;
+static int hf_bootp_fqdn_name = -1;
+static int hf_bootp_fqdn_asciiname = -1;
+static int hf_bootp_pkt_mtacap_len = -1;
+static int hf_bootp_docsis_cmcap_len = -1;
+
+static gint ett_bootp = -1;
+static gint ett_bootp_flags = -1;
+static gint ett_bootp_option = -1;
+static gint ett_bootp_fqdn = -1;
 
 gboolean novell_string = FALSE;
 
@@ -88,6 +119,33 @@
 #define BOOTP_BC	0x8000
 #define BOOTP_MBZ	0x7FFF
 
+/* FQDN stuff */
+#define F_FQDN_S	0x01
+#define F_FQDN_O	0x02
+#define F_FQDN_E	0x04
+#define F_FQDN_N	0x08
+#define F_FQDN_MBZ	0xf0
+
+static const true_false_string tfs_fqdn_s = {
+  "Server",
+  "Client"
+};
+
+static const true_false_string tfs_fqdn_o = {
+  "Override",
+  "No override"
+};
+
+static const true_false_string tfs_fqdn_e = {
+  "Binary encoding",
+  "ASCII encoding"
+};
+
+static const true_false_string tfs_fqdn_n = {
+  "No server updates",
+  "Some server updates"
+};
+
 #define	PLURALIZE(n)	(((n) > 1) ? "s" : "")
 
 enum field_type { none, ipv4, string, toggle, yes_no, special, opaque,
@@ -106,16 +164,42 @@
 };
 
 
+/* PacketCable definitions */
+#define PACKETCABLE_MTA_CAP10 "pktc1.0:"
+#define PACKETCABLE_MTA_CAP15 "pktc1.5:"
+#define PACKETCABLE_CM_CAP11  "docsis1.1:"
+#define PACKETCABLE_CM_CAP20  "docsis2.0:"
+
+#define PACKETCABLE_CCC_I05      1
+#define PACKETCABLE_CCC_DRAFT5   2
+#define PACKETCABLE_CCC_RFC_3495 3
+
+static enum_val_t pkt_ccc_protocol_versions[] = {
+	{ "ccc_i05",     "PKT-SP-PROV-I05-021127", PACKETCABLE_CCC_I05 },
+	{ "ccc_draft_5", "IETF Draft 5",           PACKETCABLE_CCC_DRAFT5 },
+	{ "rfc_3495",    "RFC 3495",               PACKETCABLE_CCC_RFC_3495 },
+	{ NULL, NULL, 0 }
+};
+
+static gint pkt_ccc_protocol_version = PACKETCABLE_CCC_RFC_3495;
+static gint pkt_ccc_option = 122;
+
+
 static int dissect_vendor_pxeclient_suboption(proto_tree *v_tree, tvbuff_t *tvb,
     int optp);
 static int dissect_vendor_cablelabs_suboption(proto_tree *v_tree, tvbuff_t *tvb,
     int optp);
-static int dissect_cablelabs_clientconfig_suboption(proto_tree *v_tree, tvbuff_t *tvb,
-    int optp);
 static int dissect_netware_ip_suboption(proto_tree *v_tree, tvbuff_t *tvb,
     int optp);
 static int bootp_dhcp_decode_agent_info(proto_tree *v_tree, tvbuff_t *tvb,
     int optp);
+static void dissect_packetcable_mta_cap(proto_tree *v_tree, tvbuff_t *tvb,
+       int voff, int len);
+static void dissect_docsis_cm_cap(proto_tree *v_tree, tvbuff_t *tvb,
+       int voff, int len);
+static int dissect_packetcable_i05_ccc(proto_tree *v_tree, tvbuff_t *tvb, int optp);
+static int dissect_packetcable_ietf_ccc(proto_tree *v_tree, tvbuff_t *tvb, int optp, int revision);
+
 
 static const char *
 get_dhcp_type(guint8 byte)
@@ -176,13 +260,15 @@
 	guchar			byte;
 	int			i,optp, consumed;
 	gulong			time_secs;
-	proto_tree		*v_tree, *o52tree;
+	proto_tree		*v_tree, *o52tree, *flags_tree, *ft;
 	proto_item		*vti;
 	guint8			protocol;
 	guint8			algorithm;
 	guint8			rdm;
+	guint8			fqdn_flags;
 	int			o52voff, o52eoff;
 	gboolean		o52at_end;
+	gboolean		skip_opaque = FALSE;
 
 	static const value_string nbnt_vals[] = {
 	    {0x1,   "B-node" },
@@ -303,7 +389,7 @@
 		/*  78 */ { "Directory Agent Information",		special },
 		/*  79 */ { "Service Location Agent Scope",		special },
 		/*  80 */ { "Naming Authority",				opaque },
-		/*  81 */ { "Client Fully Qualified Domain Name",	opaque },
+		/*  81 */ { "Client Fully Qualified Domain Name",	special },
 		/*  82 */ { "Agent Information Option",                 special },
 		/*  83 */ { "Unassigned",				opaque },
 		/*  84 */ { "Unassigned",				opaque },
@@ -344,7 +430,7 @@
 		/* 119 */ { "Domain Search",				opaque },
 		/* 120 */ { "SIP Servers",				opaque },
 		/* 121 */ { "Classless Static Route",		       	opaque },
-		/* 122 */ { "CableLabs Client Configuration",		special },
+		/* 122 */ { "CableLabs Client Configuration",		opaque },
 		/* 123 */ { "Unassigned",				opaque },
 		/* 124 */ { "Unassigned",				opaque },
 		/* 125 */ { "Unassigned",				opaque },
@@ -596,9 +682,9 @@
 				optp = dissect_vendor_pxeclient_suboption(v_tree,
 					tvb, optp);
 			}
-		} else if (*vendor_class_id_p != NULL && 
-			   ((strncmp(*vendor_class_id_p, "pktc", strlen("pktc")) == 0) || 
-                            (strncmp(*vendor_class_id_p, "docsis", strlen("docsis")) == 0) || 
+		} else if (*vendor_class_id_p != NULL &&
+			   ((strncmp(*vendor_class_id_p, "pktc", strlen("pktc")) == 0) ||
+                            (strncmp(*vendor_class_id_p, "docsis", strlen("docsis")) == 0) ||
                             (strncmp(*vendor_class_id_p, "CableHome", strlen("CableHome")) == 0))) {
 		        /* CableLabs standard - see www.cablelabs.com/projects */
 		        vti = proto_tree_add_text(bp_tree, tvb, voff,
@@ -630,7 +716,7 @@
 			"Option %d: %s = %s", code, text,
 			val_to_str(byte, opt_overload_vals,
 			    "Unknown (0x%02x)"));
-			    
+
 		/* Just in case we find an option 52 in sname or file */
 		if (voff > VENDOR_INFO_OFFSET && byte >= 1 && byte <= 3) {
 			o52tree = proto_item_add_subtree(vti, ett_bootp_option);
@@ -650,7 +736,7 @@
 			}
 			if (byte == 2 || byte == 3) {	/* 'sname' */
 				vti = proto_tree_add_text (o52tree, tvb,
-					SERVER_NAME_OFFSET, SERVER_NAME_LEN, 
+					SERVER_NAME_OFFSET, SERVER_NAME_LEN,
 					"Server host name option overload");
 				v_tree = proto_item_add_subtree(vti, ett_bootp_option);
 				o52voff = SERVER_NAME_OFFSET;
@@ -691,30 +777,52 @@
 		break;
 
 	case 60:	/* Vendor class identifier */
-		proto_tree_add_text(bp_tree, tvb, voff, consumed,
-			"Option %d: %s = \"%.*s\"", code, text, vlen,
-			tvb_get_ptr(tvb, voff+2, consumed-2));
+		/*
+		 * XXX - RFC 2132 says this is a string of octets;
+		 * should we check for non-printables?
+		 */
+		vti = proto_tree_add_text(bp_tree, tvb, voff, consumed,
+			"Option %d: %s = \"%s\"", code, text,
+			tvb_format_stringzpad(tvb, voff+2, consumed-2));
+		if ((tvb_memeql(tvb, voff+2, PACKETCABLE_MTA_CAP10, strlen(PACKETCABLE_MTA_CAP10)) == 0) ||
+			(tvb_memeql(tvb, voff+2, PACKETCABLE_MTA_CAP15, strlen(PACKETCABLE_MTA_CAP10)) == 0)) {
+			v_tree = proto_item_add_subtree(vti, ett_bootp_option);
+			dissect_packetcable_mta_cap(v_tree, tvb, voff+2, vlen);
+		} else if (tvb_memeql(tvb, voff+2, PACKETCABLE_CM_CAP11, strlen(PACKETCABLE_CM_CAP11)) == 0 ||
+				tvb_memeql(tvb, voff+2, PACKETCABLE_CM_CAP20, strlen(PACKETCABLE_CM_CAP20)) == 0 ) {
+			v_tree = proto_item_add_subtree(vti, ett_bootp_option);
+			dissect_docsis_cm_cap(v_tree, tvb, voff+2, vlen);
+		}
 		break;
 
 	case 61:	/* Client Identifier */
+		if (vlen > 0)
+			byte = tvb_get_guint8(tvb, voff+2);
+		else
+			byte = 0;
+
 		/* We *MAY* use hwtype/hwaddr. If we have 7 bytes, I'll
 		   guess that the first is the hwtype, and the last 6
 		   are the hw addr */
-		if (vlen == 7) {
-			guint8 htype;
+		/* See http://www.iana.org/assignments/arp-parameters */
+		/* RFC2132 9.14 Client-identifier has the following to say:
+		   A hardware type of 0 (zero) should be used when the value
+		   field contains an identifier other than a hardware address
+		   (e.g. a fully qualified domain name). */
+
+		if (vlen == 7 && byte > 0 && byte < 48) {
 
 			vti = proto_tree_add_text(bp_tree, tvb, voff,
 				consumed, "Option %d: %s", code, text);
 			v_tree = proto_item_add_subtree(vti, ett_bootp_option);
-			htype = tvb_get_guint8(tvb, voff+2);
 			proto_tree_add_text(v_tree, tvb, voff+2, 1,
 				"Hardware type: %s",
-				arphrdtype_to_str(htype,
+				arphrdtype_to_str(byte,
 					"Unknown (0x%02x)"));
 			proto_tree_add_text(v_tree, tvb, voff+3, 6,
 				"Client hardware address: %s",
 				arphrdaddr_to_str(tvb_get_ptr(tvb, voff+3, 6),
-					6, htype));
+					6, byte));
 		} else {
 			/* otherwise, it's opaque data */
 			proto_tree_add_text(bp_tree, tvb, voff, consumed,
@@ -732,36 +840,63 @@
 			optp = dissect_netware_ip_suboption(v_tree, tvb, optp);
 		break;
 
-    case 78:	/* SLP Directory Agent Option RFC2610 Added by Greg Morris (gmorris@novell.com)*/
+	case 78:	/* SLP Directory Agent Option RFC2610 Added by Greg Morris (gmorris@novell.com)*/
 		byte = tvb_get_guint8(tvb, voff+2);
 		vti = proto_tree_add_text(bp_tree, tvb, voff, consumed,
 				"Option %d: %s = %s", code, text,
 				val_to_str(byte, slpda_vals,
 				    "Unknown (0x%02x)"));
-        if (byte == 0x80) {
-            voff++;
-            consumed--;
-        }
+		if (byte == 0x80) {
+			voff++;
+			consumed--;
+		}
 		v_tree = proto_item_add_subtree(vti, ett_bootp_option);
-        for (i = voff + 3; i < voff + consumed; i += 4) {
-            proto_tree_add_text(v_tree, tvb, i, 4, "SLPDA Address: %s",
-                ip_to_str(tvb_get_ptr(tvb, i, 4)));
-        }
-        if (byte == 0x80) {
-            consumed++;
-        }
+		for (i = voff + 3; i < voff + consumed; i += 4) {
+			proto_tree_add_text(v_tree, tvb, i, 4, "SLPDA Address: %s",
+			    ip_to_str(tvb_get_ptr(tvb, i, 4)));
+		}
+		if (byte == 0x80) {
+			consumed++;
+		}
 		break;
 
-    case 79:	/* SLP Service Scope Option RFC2610 Added by Greg Morris (gmorris@novell.com)*/
+	case 79:	/* SLP Service Scope Option RFC2610 Added by Greg Morris (gmorris@novell.com)*/
 		byte = tvb_get_guint8(tvb, voff+2);
 		vti = proto_tree_add_text(bp_tree, tvb, voff, consumed,
 				"Option %d: %s = %s", code, text,
 				val_to_str(byte, slp_scope_vals,
 				    "Unknown (0x%02x)"));
 		v_tree = proto_item_add_subtree(vti, ett_bootp_option);
-        proto_tree_add_text(v_tree, tvb, voff+3, consumed-3,
-                "%s = \"%.*s\"", text, vlen-1,
-                tvb_get_ptr(tvb, voff+3, vlen-1));
+		proto_tree_add_text(v_tree, tvb, voff+3, consumed-3,
+		    "%s = \"%s\"", text,
+		    tvb_format_stringzpad(tvb, voff+3, vlen-1));
+		break;
+
+	case 81:	/* Client Fully Qualified Domain Name */
+		vti = proto_tree_add_text(bp_tree, tvb, voff, consumed,
+				"Option %d: FQDN", code);
+		v_tree = proto_item_add_subtree(vti, ett_bootp_option);
+		fqdn_flags = tvb_get_guint8(tvb, voff+2);
+		ft = proto_tree_add_text(v_tree, tvb, voff+2, 1, "Flags: 0x%02x", fqdn_flags);
+		flags_tree = proto_item_add_subtree(ft, ett_bootp_fqdn);
+		proto_tree_add_item(flags_tree, hf_bootp_fqdn_mbz, tvb, voff+2, 1, FALSE);
+		proto_tree_add_item(flags_tree, hf_bootp_fqdn_n, tvb, voff+2, 1, FALSE);
+		proto_tree_add_item(flags_tree, hf_bootp_fqdn_e, tvb, voff+2, 1, FALSE);
+		proto_tree_add_item(flags_tree, hf_bootp_fqdn_o, tvb, voff+2, 1, FALSE);
+		proto_tree_add_item(flags_tree, hf_bootp_fqdn_s, tvb, voff+2, 1, FALSE);
+		/* XXX: use code from packet-dns for return code decoding */
+		proto_tree_add_item(v_tree, hf_bootp_fqdn_rcode1, tvb, voff+3, 1, FALSE);
+		/* XXX: use code from packet-dns for return code decoding */
+		proto_tree_add_item(v_tree, hf_bootp_fqdn_rcode2, tvb, voff+4, 1, FALSE);
+		if (fqdn_flags & F_FQDN_E) {
+			/* XXX: use code from packet-dns for binary encoded name */
+			proto_tree_add_item(v_tree, hf_bootp_fqdn_name, tvb, voff+5,
+				vlen-5, FALSE);
+
+		} else {
+			proto_tree_add_item(v_tree, hf_bootp_fqdn_asciiname, tvb, voff+5,
+				vlen-5, FALSE);
+		}
 		break;
 
 	case 82:        /* Relay Agent Information Option */
@@ -776,15 +911,13 @@
 		break;
 
 	case 85:        /* Novell Servers */
-        /* Option 85 can be sent as a string */
-        /* Added by Greg Morris (gmorris@novell.com) */
-        if (novell_string && code==85) {
-            proto_tree_add_text(bp_tree, tvb, voff, consumed,
-                    "Option %d: %s = \"%.*s\"", code, text, vlen,
-                    tvb_get_ptr(tvb, voff+2, consumed-2));
-        }
-        else
-        {
+		/* Option 85 can be sent as a string */
+		/* Added by Greg Morris (gmorris[AT]novell.com) */
+		if (novell_string) {
+			proto_tree_add_text(bp_tree, tvb, voff, consumed,
+			    "Option %d: %s = \"%s\"", code, text,
+			    tvb_format_stringzpad(tvb, voff+2, consumed-2));
+		} else {
 			if (vlen == 4) {
 				/* one IP address */
 				proto_tree_add_text(bp_tree, tvb, voff, consumed,
@@ -803,16 +936,6 @@
         }
         break;
 
-	case 122:       /* CableLabs Client Configuration */
-	        vti = proto_tree_add_text(bp_tree, tvb, voff,
-			vlen + 2, "Option %d: %s", code, text);
-		v_tree = proto_item_add_subtree(vti, ett_bootp_option);
-		optp = voff+2;
-		while (optp < voff+consumed) {
-		        optp = dissect_cablelabs_clientconfig_suboption(v_tree, tvb, optp);
-		}	        
-		break;
-
 	case 90:	/* DHCP Authentication */
 	case 210:	/* Was this used for authentication at one time? */
 		vti = proto_tree_add_text(bp_tree, tvb, voff,
@@ -850,8 +973,8 @@
 
 		case AUTHEN_RDM_MONOTONIC_COUNTER:
 			proto_tree_add_text(v_tree, tvb, voff+5, 8,
-				    "Replay Detection Value: %s",
-				    u64toh(tvb_get_ptr(tvb, voff+5, 8)));
+				    "Replay Detection Value: %" PRIx64,
+				    tvb_get_ntoh64(tvb, voff+5));
 			break;
 
 		default:
@@ -892,6 +1015,31 @@
 		break;
 
 	default:	/* not special */
+		/* The PacketCable CCC option number can vary.  If this is a CCC option,
+		   handle it and skip the "opaque" case below.
+		 */
+		if (code == pkt_ccc_option) {
+			skip_opaque = TRUE;
+			vti = proto_tree_add_text(bp_tree, tvb, voff, consumed,
+						  "Option %d: CableLabs Client Configuration (%d bytes)",
+						  code, vlen);
+			v_tree = proto_item_add_subtree(vti, ett_bootp_option);
+			optp = voff+2;
+			while (optp < voff+consumed) {
+				switch (pkt_ccc_protocol_version) {
+					case PACKETCABLE_CCC_I05:
+						optp = dissect_packetcable_i05_ccc(v_tree, tvb, optp);
+						break;
+					case PACKETCABLE_CCC_DRAFT5:
+					case PACKETCABLE_CCC_RFC_3495:
+						optp = dissect_packetcable_ietf_ccc(v_tree, tvb, optp, pkt_ccc_protocol_version);
+						break;
+					default: /* XXX Should we do something here? */
+						break;
+				}
+			}
+		}
+
 		break;
 	}
 
@@ -925,17 +1073,19 @@
 
 		case string:
 			/* Fix for non null-terminated string supplied by
-			 * John Lines <John.Lines@aeat.co.uk>
+			 * John Lines <John.Lines[AT]aeat.co.uk>
 			 */
 			proto_tree_add_text(bp_tree, tvb, voff, consumed,
-					"Option %d: %s = \"%.*s\"", code, text, vlen,
-					tvb_get_ptr(tvb, voff+2, consumed-2));
+					"Option %d: %s = \"%s\"", code, text,
+					tvb_format_stringzpad(tvb, voff+2, consumed-2));
 			break;
 
 		case opaque:
-			proto_tree_add_text(bp_tree, tvb, voff, consumed,
-					"Option %d: %s (%d bytes)",
-					code, text, vlen);
+			if (! skip_opaque) { /* Currently used by PacketCable CCC */
+				proto_tree_add_text(bp_tree, tvb, voff, consumed,
+						"Option %d: %s (%d bytes)",
+						code, text, vlen);
+			}
 			break;
 
 		case val_u_short:
@@ -1036,7 +1186,7 @@
 		break;
 	default:
 		proto_tree_add_text(v_tree, tvb, optp, subopt_len + 2,
-				    "Invalid agent suboption %d (%d bytes)", 
+				    "Invalid agent suboption %d (%d bytes)",
 				    subopt, subopt_len);
 		break;
 	}
@@ -1101,11 +1251,11 @@
 		proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
 			"Suboption %d: %s (%d byte%s)" ,
 	 		subopt, "PXE boot item",
-			subopt_len, PLURALIZE(subopt_len));
+			subopt_len, plurality(subopt_len, "", "s"));
 	} else if ((subopt < 1 ) || (subopt > array_length(o43pxeclient_opt))) {
 		proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
 			"Unknown suboption %d (%d byte%s)", subopt, subopt_len,
-			PLURALIZE(subopt_len));
+			plurality(subopt_len, "", "s"));
 	} else {
 		switch (o43pxeclient_opt[subopt].ft) {
 
@@ -1119,7 +1269,7 @@
 			proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
 				"Suboption %d: %s (%d byte%s)" ,
 		 		subopt, o43pxeclient_opt[subopt].text,
-				subopt_len, PLURALIZE(subopt_len));
+				subopt_len, plurality(subopt_len, "", "s"));
 			break;
 
 		case val_u_le_short:
@@ -1162,10 +1312,11 @@
 	return optp;
 }
 
+
 static int
 dissect_vendor_cablelabs_suboption(proto_tree *v_tree, tvbuff_t *tvb, int optp)
 {
-	guint8 subopt;
+	guint8 subopt, byte_val;
 	guint8 subopt_len;
 
 	struct o43cablelabs_opt_info {
@@ -1182,11 +1333,11 @@
 		/* 5 */ {"Hardware Version", string},
 		/* 6 */ {"Software Version", string},
 		/* 7 */ {"Boot ROM version", string},
-		/* 8 */ {"Organizational Unique Identifier", bytes},
+		/* 8 */ {"Organizationally Unique Identifier", special},
 		/* 9 */ {"Model Number", string},
 		/* 10 */ {"Vendor Name", string},
 		/* *** 11-30: CableHome *** */
-		/* 11 */ {"PS WAN-Man", special},
+		/* 11 */ {"Address Realm", special},
 		/* 12 */ {"CM/PS System Description", string},
 		/* 13 */ {"CM/PS Firmware Revision", string},
 		/* 14 */ {"Firewall Policy File Version", string},
@@ -1207,7 +1358,7 @@
 		/* 29 */ {"Unassigned (CableHome)", special},
 		/* 30 */ {"Unassigned (CableHome)", special},
 		/* *** 31-50: PacketCable *** */
-		/* 31 */ {"MTA MAC Address", string},
+		/* 31 */ {"MTA MAC Address", special},
 		/* 32 */ {"Correlation ID", string},
 		/* 33-50 {"Unassigned (PacketCable)", special}, */
 		/* *** 51-127: CableLabs *** */
@@ -1217,13 +1368,19 @@
 		/* 255 {"end options", special} */
 	};
 
+	static const value_string cablehome_subopt11_vals[] = {
+		{ 1, "PS WAN-Man" },
+		{ 2, "PS WAN-Data" },
+		{ 0, NULL }
+	};
+
 	subopt = tvb_get_guint8(tvb, optp);
 
 	if (subopt == 0 ) {
 		proto_tree_add_text(v_tree, tvb, optp, 1, "Padding");
                 return (optp+1);
 	} else if (subopt == 255) {	/* End Option */
-		proto_tree_add_text(v_tree, tvb, optp, 1, "End option");
+		proto_tree_add_text(v_tree, tvb, optp, 1, "End CableLabs option");
 		/* Make sure we skip any junk left this option */
 		return (optp+255);
 	}
@@ -1233,29 +1390,46 @@
 	if ( (subopt < 1 ) || (subopt > array_length(o43cablelabs_opt)) ) {
 		proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
 			"Suboption %d: Unassigned (%d byte%s)", subopt, subopt_len,
-			PLURALIZE(subopt_len));
+			plurality(subopt_len, "", "s"));
 	} else {
 		switch (o43cablelabs_opt[subopt].ft) {
 
 		case string:
 			proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
-				"Suboption %d: %s = \"%.*s\"", subopt, 
-				o43cablelabs_opt[subopt].text, subopt_len,
-				tvb_get_ptr(tvb, optp+2, subopt_len));
+				"Suboption %d: %s = \"%s\"", subopt,
+				o43cablelabs_opt[subopt].text,
+				tvb_format_stringzpad(tvb, optp+2, subopt_len));
 			break;
 
 		case bytes:
 			proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
-				"Suboption %d: %s = 0x%s", subopt, 
+				"Suboption %d: %s = 0x%s", subopt,
 				o43cablelabs_opt[subopt].text,
 				tvb_bytes_to_str(tvb, optp+2, subopt_len));
 			break;
-    
+
 		case special:
-			proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
-				"Suboption %d: %s (%d byte%s)" ,
-		 		subopt, o43cablelabs_opt[subopt].text,
-				subopt_len, PLURALIZE(subopt_len));
+			if ( subopt == 8 ) {	/* OUI */
+				proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
+					"Suboption %d: OUI = %s" ,
+					subopt, bytes_to_str_punct(tvb_get_ptr(tvb, optp+2, 3), 3, ':'));
+			} else if ( subopt == 11 ) { /* Address Realm */
+				byte_val = tvb_get_guint8(tvb, optp + 2);
+				proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
+					"Suboption %d: %s = %s (0x%02x)",
+					subopt, o43cablelabs_opt[subopt].text,
+					val_to_str(byte_val, cablehome_subopt11_vals, "Unknown"), byte_val);
+			} else if ( subopt == 31 ) { /* MTA MAC address */
+				proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
+					"Suboption %d: %s = %s",
+					subopt,  o43cablelabs_opt[subopt].text,
+					bytes_to_str_punct(tvb_get_ptr(tvb, optp+2, 6), 6, ':'));
+			} else {
+				proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
+					"Suboption %d: %s (%d byte%s)" ,
+					subopt, o43cablelabs_opt[subopt].text,
+					subopt_len, plurality(subopt_len, "", "s"));
+			}
 			break;
 
 		default:
@@ -1267,6 +1441,8 @@
 	return optp;
 }
 
+
+
 static int
 dissect_netware_ip_suboption(proto_tree *v_tree, tvbuff_t *tvb, int optp)
 {
@@ -1364,113 +1540,777 @@
 	return optp;
 }
 
-static int
-dissect_cablelabs_clientconfig_suboption(proto_tree *v_tree, tvbuff_t *tvb, int optp)
-{
-	guint8 subopt;
-	guint8 subopt_len;
-	guint8 flag;
-	char dname[MAXDNAME];
-	int dname_len;
 
-	struct o122cablelabs_opt_info {
-		char	*text;
-		enum field_type	ft;
-	};
+/* PacketCable Multimedia Terminal Adapter device capabilities (option 60).
+   Ref: PKT-SP-I05-021127 sections 8.2 and 10 */
 
-	static struct o122cablelabs_opt_info o122cablelabs_opt[]= {
-		/* 0 */ {"nop", special},	/* dummy */
-		/* 1 */ {"TSP's Primary DHCP Server Address", ipv4},
-		/* 2 */ {"TSP's Secondary DHCP Server Address", ipv4},
-		/* 3 */ {"TSP's Provisioning Server Address", ipv4_or_fqdn},
-		/* 4 */ {"TSP's AS-REQ/AS-REP Backoff and Retry", special},
-		/* 5 */ {"TSP's AP-REQ/AP-REP Backoff and Retry", special},
-		/* 6 */ {"TSP's Kerberos Realm Name", fqdn},
-		/* 7 */ {"TSP's Ticket Granting Server Utilization", special},
-		/* 8 */ {"TSP's Provisioning Timer Value", special},
-		/* 9 */ {"PacketCable Security Ticket Control", special},
-		/* *** 10-255: Reserved for future use *** */
-	};
+#define PKT_MDC_TLV_OFF 10
 
-	subopt = tvb_get_guint8(tvb, optp);
-	subopt_len = tvb_get_guint8(tvb, optp+1);
 
-	if ((subopt < 1 ) || (subopt > array_length(o122cablelabs_opt))) {
-		proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
-			"Suboption %d: Unassigned (%d byte%s)", subopt, subopt_len,
-			PLURALIZE(subopt_len));
-	} else {
-		switch (o122cablelabs_opt[subopt].ft) {
+/* These are ASCII-encoded hexadecimal digits.  We use the raw hex equivalent for
+   convenience. */
+#define PKT_MDC_VERSION			0x3031  /* "01" */
+#define PKT_MDC_TEL_END			0x3032  /* "02" */
+#define PKT_MDC_TGT			0x3033  /* "03" */
+#define PKT_MDC_HTTP_ACC		0x3034  /* "04" */
+#define PKT_MDC_SYSLOG			0x3035  /* "05" */
+#define PKT_MDC_NCS			0x3036  /* "06" */
+#define PKT_MDC_PRI_LINE		0x3037  /* "07" */
+#define PKT_MDC_VENDOR_TLV		0x3038  /* "08" */
+#define PKT_MDC_NVRAM_STOR		0x3039  /* "09" */
+#define PKT_MDC_PROV_REP		0x3041  /* "0A" */
+#define PKT_MDC_PROV_REP_LC		0x3061  /* "0A" */
+#define PKT_MDC_SUPP_CODECS		0x3042  /* "0B" */
+#define PKT_MDC_SUPP_CODECS_LC		0x3062  /* "0b" */
+#define PKT_MDC_SILENCE			0x3043  /* "0C" */
+#define PKT_MDC_SILENCE_LC		0x3063  /* "0c" */
+#define PKT_MDC_ECHO_CANCEL		0x3044  /* "0D" */
+#define PKT_MDC_ECHO_CANCEL_LC		0x3064  /* "0d" */
+#define PKT_MDC_RSVP			0x3045  /* "0E" */
+#define PKT_MDC_RSVP_LC			0x3065  /* "0e" */
+#define PKT_MDC_UGS_AD			0x3046  /* "0F" */
+#define PKT_MDC_UGS_AD_LC		0x3066  /* "0f" */
+#define PKT_MDC_IF_INDEX		0x3130  /* "10" */
+#define PKT_MDC_FLOW_LOG		0x3131  /* "11" */
+#define PKT_MDC_PROV_FLOWS		0x3132	/* "12" */
+/* PacketCable 1.5: */
+#define PKT_MDC_T38_VERSION		0x3133	/* "13" */
+#define	PKT_MDC_T38_EC			0x3134	/* "14" */
+#define	PKT_MDC_RFC2833_DTMF		0x3135	/* "15" */
+#define PKT_MDC_VOICE_METRICS		0x3136	/* "16" */
+#define	PKT_MDC_MIBS			0x3137	/* "17" */
+#define	PKT_MDC_MGPI			0x3138	/* "18" */
+
+static const value_string pkt_mdc_type_vals[] = {
+	{ PKT_MDC_VERSION,		"PacketCable Version" },
+	{ PKT_MDC_TEL_END,		"Number Of Telephony Endpoints" },
+	{ PKT_MDC_TGT,			"TGT Support" },
+	{ PKT_MDC_HTTP_ACC,		"HTTP Download File Access Method Support" },
+	{ PKT_MDC_SYSLOG,		"MTA-24 Event SYSLOG Notification Support" },
+	{ PKT_MDC_NCS,			"NCS Service Flow Support" },
+	{ PKT_MDC_PRI_LINE,		"Primary Line Support" },
+	{ PKT_MDC_VENDOR_TLV,		"Vendor Specific TLV Type(s)" },
+	{ PKT_MDC_NVRAM_STOR,		"NVRAM Ticket/Session Keys Storage Support" },
+	{ PKT_MDC_PROV_REP,		"Provisioning Event Reporting Support" },
+	{ PKT_MDC_PROV_REP_LC,		"Provisioning Event Reporting Support" },
+	{ PKT_MDC_SUPP_CODECS,		"Supported CODEC(s)" },
+	{ PKT_MDC_SUPP_CODECS_LC,	"Supported CODEC(s)" },
+	{ PKT_MDC_SILENCE,		"Silence Suppression Support" },
+	{ PKT_MDC_SILENCE_LC,		"Silence Suppression Support" },
+	{ PKT_MDC_ECHO_CANCEL,		"Echo Cancellation Support" },
+	{ PKT_MDC_ECHO_CANCEL_LC,	"Echo Cancellation Support" },
+	{ PKT_MDC_RSVP,			"RSVP Support/ Reserved" },
+	{ PKT_MDC_RSVP_LC,		"RSVP Support/ Reserved" },
+	{ PKT_MDC_UGS_AD,		"UGS-AD Support" },
+	{ PKT_MDC_UGS_AD_LC,		"UGS-AD Support" },
+	{ PKT_MDC_IF_INDEX,		"MTA's \"ifIndex\" starting number in \"ifTable\"" },
+	{ PKT_MDC_FLOW_LOG,		"Provisioning Flow Logging Support" },
+	{ PKT_MDC_PROV_FLOWS,		"Supported Provisioning Flows" },
+	/* PacketCable 1.5: */
+	{ PKT_MDC_T38_VERSION,		"T38 Version Support" },
+	{ PKT_MDC_T38_EC,		"T38 Error Correction Support" },
+	{ PKT_MDC_RFC2833_DTMF,		"RFC 2833 DTMF Support" },
+	{ PKT_MDC_VOICE_METRICS,	"Voice Metrics Support" },
+	{ PKT_MDC_MIBS,			"MIB Support" },
+	{ PKT_MDC_MGPI,			"Multiple Grants Per Interval Support" },
+	{ 0,					NULL }
+};
 
-		case string:
-			proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
-				"Suboption %d: %s = \"%.*s\"", subopt, 
-				o122cablelabs_opt[subopt].text, subopt_len,
-				tvb_get_ptr(tvb, optp+2, subopt_len));
-			break;
-    
-		case special:
-			proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
-				"Suboption %d: %s (%d byte%s)" ,
-		 		subopt, o122cablelabs_opt[subopt].text,
-				subopt_len, PLURALIZE(subopt_len));
-			break;
-		case ipv4:
-			proto_tree_add_text(v_tree, tvb, optp, 6,
-				"Suboption %d: %s = %s",
-				subopt, o122cablelabs_opt[subopt].text,
-				ip_to_str(tvb_get_ptr(tvb, optp+2, 4)));
-			break;
-		case fqdn:
-		        dname_len = get_dns_name(tvb, optp+2, optp+2, dname, sizeof(dname));
-			proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
-				"Suboption %d: %s = %.*s", subopt, 
-				o122cablelabs_opt[subopt].text, 
-				dname_len, dname);
-		        break;
-		case ipv4_or_fqdn:
-		        flag = tvb_get_guint8(tvb, optp+2);
-			if (flag == 0) { /* FQDN */
-			        dname_len = get_dns_name(tvb, optp+3, optp+3, dname, sizeof(dname));
-				proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
-				        "Suboption %d: %s = %.*s", subopt, 
-				        o122cablelabs_opt[subopt].text, 
-					dname_len, dname);
-			} else if (flag == 1) { /* IPv4 */
-			        proto_tree_add_text(v_tree, tvb, optp, 6,
-			                "Suboption %d: %s = %s",
-					subopt, o122cablelabs_opt[subopt].text,
-				        ip_to_str(tvb_get_ptr(tvb, optp+3, 4)));
+static const value_string pkt_mdc_version_vals[] = {
+	{ 0x3030,	"PacketCable 1.0" },
+	{ 0x3031,	"PacketCable 1.1/1.5" }, /* 1.5 replaces 1.1-1.3 */
+	{ 0x3032,	"PacketCable 1.2" },
+	{ 0x3033,	"PacketCable 1.3" },
+	{ 0,		NULL }
+};
+
+static const value_string pkt_mdc_boolean_vals[] = {
+	{ 0x3030,	"No" },
+	{ 0x3031,	"Yes" },
+	{ 0,		NULL }
+};
+
+static const value_string pkt_mdc_codec_vals[] = {
+	{ 0x3031,	"other" },           /* "01" */
+	{ 0x3032,	"unknown" },
+	{ 0x3033,	"G.729" },
+	{ 0x3034,	"reserved" },
+	{ 0x3035,	"G.729E" },
+	{ 0x3036,	"PCMU" },
+	{ 0x3037,	"G.726-32" },
+	{ 0x3038,	"G.728" },
+	{ 0x3039,	"PCMA" },            /* "09" */
+	{ 0x3041,	"G.726-16" },        /* "0A" */
+	{ 0x3042,	"G.726-24" },
+	{ 0x3043,	"G.726-40" },
+	{ 0x3044,	"iLBC" },
+	{ 0x3045,	"BV16" },
+	{ 0x3046,	"telephone-event" }, /* "0F" */
+	{ 0,		NULL }
+};
+
+static const value_string pkt_mdc_t38_version_vals[] = {
+	{ 0x3030,	"Unsupported" },
+	{ 0x3031,	"T.38 Version Zero" }, /* default */
+	{ 0x3032,	"T.38 Version One" },
+	{ 0x3033,	"T.38 Version Two" },
+	{ 0x3035,	"T.38 Version Three" },
+	{ 0,		NULL }
+};
+
+static const value_string pkt_mdc_t38_ec_vals[] = {
+	{ 0x3030,	"None" },
+	{ 0x3031,	"Redundancy" }, /* default */
+	{ 0x3032,	"FEC" },
+	{ 0,		NULL }
+};
+
+static const value_string pkt_mdc_mibs_vals[] = {
+	{ 0x3030,	"PacketCable 1.0" },
+	{ 0x3031,	"PacketCable 1.5" },
+	{ 0x3032,	"Reserved" },
+	{ 0x3033,	"Reserved" },
+	{ 0x3034,	"Reserved" },
+	{ 0x3035,	"IETF" },
+	{ 0,		NULL }
+};
+
+/* DOCSIS Cable Modem device capabilities (option 60). */
+/* XXX we should rename all PKT_CM_* variables to DOCSIS_CM_* */
+#define PKT_CM_TLV_OFF 12
+
+#define PKT_CM_CONCAT_SUP	0x3031  /* "01" */
+#define PKT_CM_DOCSIS_VER	0x3032  /* "02" */
+#define PKT_CM_FRAG_SUP		0x3033  /* "03" */
+#define PKT_CM_PHS_SUP		0x3034  /* "04" */
+#define PKT_CM_IGMP_SUP		0x3035  /* "05" */
+#define PKT_CM_PRIV_SUP		0x3036  /* "06" */
+#define PKT_CM_DSAID_SUP	0x3037  /* "07" */
+#define PKT_CM_USID_SUP		0x3038  /* "08" */
+#define PKT_CM_FILT_SUP		0x3039  /* "09" */
+#define PKT_CM_TET_MI		0x3041  /* "0A" */
+#define PKT_CM_TET_MI_LC	0x3061  /* "0a" */
+#define PKT_CM_TET		0x3042  /* "0B" */
+#define PKT_CM_TET_LC		0x3062  /* "0b" */
+#define PKT_CM_DCC_SUP		0x3043  /* "0C" */
+#define PKT_CM_DCC_SUP_LC	0x3063  /* "0c" */
+
+static const value_string pkt_cm_type_vals[] = {
+	{ PKT_CM_CONCAT_SUP,	"Concatenation Support" },
+	{ PKT_CM_DOCSIS_VER,	"DOCSIS Version" },
+	{ PKT_CM_FRAG_SUP,	"Fragmentation Support" },
+	{ PKT_CM_PHS_SUP,	"PHS Support" },
+	{ PKT_CM_IGMP_SUP,	"IGMP Support" },
+	{ PKT_CM_PRIV_SUP,	"Privacy Support" },
+	{ PKT_CM_DSAID_SUP,	"Downstream SAID Support" },
+	{ PKT_CM_USID_SUP,	"Upstream SID Support" },
+	{ PKT_CM_FILT_SUP,	"Optional Filtering Support" },
+	{ PKT_CM_TET_MI,	"Transmit Equalizer Taps per Modulation Interval" },
+	{ PKT_CM_TET_MI_LC,	"Transmit Equalizer Taps per Modulation Interval" },
+	{ PKT_CM_TET,		"Number of Transmit Equalizer Taps" },
+	{ PKT_CM_TET_LC,	"Number of Transmit Equalizer Taps" },
+	{ PKT_CM_DCC_SUP,	"DCC Support" },
+	{ PKT_CM_DCC_SUP_LC,	"DCC Support" }
+};
+
+static const value_string pkt_cm_version_vals[] = {
+	{ 0x3030,	"DOCSIS 1.0" },
+	{ 0x3031,	"DOCSIS 1.1" },
+	{ 0x3032,	"DOCSIS 2.0" },
+	{ 0,		NULL }
+};
+
+static const value_string pkt_cm_privacy_vals[] = {
+	{ 0x3030,	"BPI Support" },
+	{ 0x3031,	"BPI Plus Support" },
+	{ 0,		NULL }
+};
+
+
+static const value_string pkt_mdc_supp_flow_vals[] = {
+	{ 1 << 0, "Secure Flow (Full Secure Provisioning Flow)" },
+	{ 1 << 1, "Hybrid Flow" },
+	{ 1 << 2, "Basic Flow" },
+	{ 0, NULL }
+};
+
+
+static void
+dissect_packetcable_mta_cap(proto_tree *v_tree, tvbuff_t *tvb, int voff, int len)
+{
+	guint16 raw_val;
+	unsigned long flow_val = 0;
+	guint off = PKT_MDC_TLV_OFF + voff;
+	guint tlv_len, i;
+	guint8 asc_val[3] = "  ", flow_val_str[5];
+	static GString *tlv_str = NULL;
+	char bit_fld[64];
+	proto_item *ti;
+	proto_tree *subtree;
+
+	if (! tlv_str)
+		tlv_str = g_string_new("");
+
+	tvb_memcpy (tvb, asc_val, off, 2);
+	if (sscanf(asc_val, "%x", &tlv_len) != 1) {
+		proto_tree_add_text(v_tree, tvb, off, len - off,
+			"Bogus length: %s", asc_val);
+		return;
+	} else {
+		proto_tree_add_uint_format(v_tree, hf_bootp_pkt_mtacap_len, tvb, off, 2,
+				tlv_len, "MTA DC Length: %d", tlv_len);
+		off += 2;
+
+		while ((int) off - voff < len) {
+			/* Type */
+			raw_val = tvb_get_ntohs (tvb, off);
+			g_string_sprintf(tlv_str, "0x%.2s: %s = ",
+					tvb_get_ptr(tvb, off, 2),
+					val_to_str(raw_val, pkt_mdc_type_vals, "unknown"));
+
+			/* Length */
+			tvb_memcpy(tvb, asc_val, off + 2, 2);
+			if (sscanf(asc_val, "%x", &tlv_len) != 1) {
+				proto_tree_add_text(v_tree, tvb, off, len - off,
+							"[Bogus length: %s]", asc_val);
+				return;
 			} else {
-			        proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
-					"Suboption %d: %s = Invalid Value (%d byte%s)", 
-					subopt, o122cablelabs_opt[subopt].text, 
-					subopt_len, PLURALIZE(subopt_len));
+				/* Value(s) */
+				/*g_string_sprintfa(tlv_str, "Length: %d, Value: ", tlv_len);*/
+
+				switch (raw_val) {
+					case PKT_MDC_VERSION:
+						raw_val = tvb_get_ntohs(tvb, off + 4);
+						g_string_sprintfa(tlv_str, "%s (%.2s)",
+								val_to_str(raw_val, pkt_mdc_version_vals, "Reserved"),
+								tvb_get_ptr(tvb, off + 4, 2) );
+						break;
+					case PKT_MDC_TEL_END:
+					case PKT_MDC_IF_INDEX:
+						g_string_sprintfa(tlv_str, "%.2s",
+								tvb_get_ptr(tvb, off + 4, 2) );
+						break;
+					case PKT_MDC_TGT:
+					case PKT_MDC_HTTP_ACC:
+					case PKT_MDC_SYSLOG:
+					case PKT_MDC_NCS:
+					case PKT_MDC_PRI_LINE:
+					case PKT_MDC_NVRAM_STOR:
+					case PKT_MDC_PROV_REP:
+					case PKT_MDC_PROV_REP_LC:
+					case PKT_MDC_SILENCE:
+					case PKT_MDC_SILENCE_LC:
+					case PKT_MDC_ECHO_CANCEL:
+					case PKT_MDC_ECHO_CANCEL_LC:
+					case PKT_MDC_RSVP:
+					case PKT_MDC_RSVP_LC:
+					case PKT_MDC_UGS_AD:
+					case PKT_MDC_UGS_AD_LC:
+					case PKT_MDC_FLOW_LOG:
+					case PKT_MDC_RFC2833_DTMF:
+					case PKT_MDC_VOICE_METRICS:
+						raw_val = tvb_get_ntohs(tvb, off + 4);
+						g_string_sprintfa(tlv_str, "%s (%.2s)",
+								val_to_str(raw_val, pkt_mdc_boolean_vals, "unknown"),
+								tvb_get_ptr(tvb, off + 4, 2) );
+						break;
+					case PKT_MDC_SUPP_CODECS:
+					case PKT_MDC_SUPP_CODECS_LC:
+						for (i = 0; i < tlv_len; i++) {
+							raw_val = tvb_get_ntohs(tvb, off + 4 + (i * 2) );
+							g_string_sprintfa(tlv_str, "%s%s (%.2s)",
+									plurality(i + 1, "", ", "),
+									val_to_str(raw_val, pkt_mdc_codec_vals, "unknown"),
+									tvb_get_ptr(tvb, off + 4 + (i * 2), 2) );
+						}
+						break;
+					case PKT_MDC_PROV_FLOWS:
+						tvb_memcpy(tvb, flow_val_str, off + 4, 4);
+						flow_val_str[4] = '\0';
+						flow_val = strtoul(flow_val_str, NULL, 16);
+						g_string_sprintfa(tlv_str, "0x%04lx", flow_val);
+						break;
+					case PKT_MDC_T38_VERSION:
+						raw_val = tvb_get_ntohs(tvb, off + 4);
+						g_string_sprintfa(tlv_str, "%s (%.2s)",
+								val_to_str(raw_val, pkt_mdc_t38_version_vals, "unknown"),
+								tvb_get_ptr(tvb, off + 4, 2) );
+						break;
+					case PKT_MDC_T38_EC:
+						raw_val = tvb_get_ntohs(tvb, off + 4);
+						g_string_sprintfa(tlv_str, "%s (%.2s)",
+								val_to_str(raw_val, pkt_mdc_t38_ec_vals, "unknown"),
+								tvb_get_ptr(tvb, off + 4, 2) );
+						break;
+					case PKT_MDC_MIBS:
+						raw_val = tvb_get_ntohs(tvb, off + 4);
+						g_string_sprintfa(tlv_str, "%s (%.2s)",
+								val_to_str(raw_val, pkt_mdc_mibs_vals, "unknown"),
+								tvb_get_ptr(tvb, off + 4, 2) );
+						break;
+					case PKT_MDC_VENDOR_TLV:
+					default:
+						g_string_sprintfa(tlv_str, "%s",
+								tvb_format_stringzpad(tvb, off + 4, tlv_len * 2) );
+						break;
+				}
 			}
-			break;
-		case yes_no:
-			flag = tvb_get_guint8(tvb, optp+2);
-			if (flag == 0 || flag == 1) {
-				proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
-					"Suboption %d: %s = %s", subopt,
-					o122cablelabs_opt[subopt].text,    
-					flag == 0 ? "No" : "Yes");
+			ti = proto_tree_add_text(v_tree, tvb, off, (tlv_len * 2) + 4, tlv_str->str);
+			subtree = proto_item_add_subtree(ti, ett_bootp_option);
+			if (raw_val == PKT_MDC_PROV_FLOWS) {
+				for (i = 0 ; i < 3; i++) {
+					if (flow_val & pkt_mdc_supp_flow_vals[i].value) {
+						decode_bitfield_value(bit_fld, flow_val, pkt_mdc_supp_flow_vals[i].value, 16);
+						proto_tree_add_text(ti, tvb, off + 4, 4, "%s%s",
+							bit_fld, pkt_mdc_supp_flow_vals[i].strptr);
+					}
+				}
+			}
+			off += (tlv_len * 2) + 4;
+		}
+	}
+}
+
+static void
+dissect_docsis_cm_cap(proto_tree *v_tree, tvbuff_t *tvb, int voff, int len)
+{
+	unsigned long raw_val;
+	guint off = PKT_CM_TLV_OFF + voff;
+	guint tlv_len, i;
+	guint8 asc_val[3] = "  ";
+	static GString *tlv_str = NULL;
+
+	if (! tlv_str)
+		tlv_str = g_string_new("");
+
+	tvb_memcpy (tvb, asc_val, off, 2);
+	if (sscanf(asc_val, "%x", &tlv_len) != 1) {
+		proto_tree_add_text(v_tree, tvb, off, len - off,
+				    "Bogus length: %s", asc_val);
+		return;
+	} else {
+		proto_tree_add_uint_format(v_tree, hf_bootp_docsis_cmcap_len, tvb, off, 2,
+				tlv_len, "CM DC Length: %d", tlv_len);
+		off += 2;
+
+		while ((int) off - voff < len) {
+			/* Type */
+			raw_val = tvb_get_ntohs (tvb, off);
+			g_string_sprintf(tlv_str, "0x%.2s: %s = ",
+					tvb_get_ptr(tvb, off, 2),
+					val_to_str(raw_val, pkt_cm_type_vals, "unknown"));
+
+			/* Length */
+			tvb_memcpy(tvb, asc_val, off + 2, 2);
+			if (sscanf(asc_val, "%x", &tlv_len) != 1) {
+				proto_tree_add_text(v_tree, tvb, off, len - off,
+							"[Bogus length: %s]", asc_val);
+				return;
 			} else {
-				proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,
-					"Suboption %d: %s = Invalid Value %d",
-					subopt, o122cablelabs_opt[subopt].text, flag);
+				/* Value(s) */
+				/*g_string_sprintfa(tlv_str, "Length: %d, Value%s: ", tlv_len,
+						plurality(tlv_len, "", "s") );*/
+
+				switch (raw_val) {
+					case PKT_CM_CONCAT_SUP:
+					case PKT_CM_FRAG_SUP:
+					case PKT_CM_PHS_SUP:
+					case PKT_CM_IGMP_SUP:
+					case PKT_CM_DCC_SUP:
+					case PKT_CM_DCC_SUP_LC:
+						for (i = 0; i < tlv_len; i++) {
+							raw_val = tvb_get_ntohs(tvb, off + 4 + (i * 2) );
+							g_string_sprintfa(tlv_str, "%s%s (%.2s)",
+									plurality(i + 1, "", ", "),
+									val_to_str(raw_val, pkt_mdc_boolean_vals, "unknown"),
+									tvb_get_ptr(tvb, off + 4 + (i * 2), 2) );
+						}
+						break;
+					case PKT_CM_DOCSIS_VER:
+						raw_val = tvb_get_ntohs(tvb, off + 4);
+						g_string_sprintfa(tlv_str, "%s (%.2s)",
+								val_to_str(raw_val, pkt_cm_version_vals, "Reserved"),
+								tvb_get_ptr(tvb, off + 4, 2) );
+						break;
+					case PKT_CM_PRIV_SUP:
+						raw_val = tvb_get_ntohs(tvb, off + 4);
+						g_string_sprintfa(tlv_str, "%s (%.2s)",
+								val_to_str(raw_val, pkt_cm_privacy_vals, "Reserved"),
+								tvb_get_ptr(tvb, off + 4, 2) );
+						break;
+					case PKT_CM_DSAID_SUP:
+					case PKT_CM_USID_SUP:
+					case PKT_CM_TET_MI:
+					case PKT_CM_TET_MI_LC:
+					case PKT_CM_TET:
+					case PKT_CM_TET_LC:
+						tvb_memcpy (tvb, asc_val, off + 4, 2);
+						raw_val = strtoul(asc_val, NULL, 16);
+						g_string_sprintfa(tlv_str, "%lu", raw_val);
+						break;
+					case PKT_CM_FILT_SUP:
+						tvb_memcpy (tvb, asc_val, off + 4, 2);
+						raw_val = strtoul(asc_val, NULL, 16);
+						if (raw_val & 0x01)
+							g_string_append(tlv_str, "802.1P filtering");
+						if (raw_val & 0x02) {
+							if (raw_val & 0x01)
+								g_string_append(tlv_str, ", ");
+							g_string_append(tlv_str, "802.1Q filtering");
+						}
+						if (! raw_val & 0x03)
+							g_string_append(tlv_str, "None");
+						g_string_sprintfa(tlv_str, " (0x%02lx)", raw_val);
+						break;
+				}
 			}
+			proto_tree_add_text(v_tree, tvb, off, (tlv_len * 2) + 4, tlv_str->str);
+			off += (tlv_len * 2) + 4;
+		}
+	}
+}
+
+
+/* Definitions specific to PKT-SP-PROV-I05-021127 begin with "PKT_CCC_I05".
+   Definitions specific to IETF draft 5 and RFC 3495 begin with "PKT_CCC_IETF".
+   Shared definitions begin with "PKT_CCC".
+ */
+#define PKT_CCC_PRI_DHCP       1
+#define PKT_CCC_SEC_DHCP       2
+#define PKT_CCC_I05_SNMP       3
+#define PKT_CCC_IETF_PROV_SRV  3
+#define PKT_CCC_I05_PRI_DNS    4
+#define PKT_CCC_IETF_AS_KRB    4
+#define PKT_CCC_I05_SEC_DNS    5
+#define PKT_CCC_IETF_AP_KRB    5
+#define PKT_CCC_KRB_REALM      6
+#define PKT_CCC_TGT_FLAG       7
+#define PKT_CCC_PROV_TIMER     8
+#define PKT_CCC_CMS_FQDN       9
+#define PKT_CCC_IETF_SEC_TKT   9
+#define PKT_CCC_AS_KRB        10
+#define PKT_CCC_AP_KRB        11
+#define PKT_CCC_MTA_KRB_CLEAR 12
+
+static const value_string pkt_i05_ccc_opt_vals[] = {
+	{ PKT_CCC_PRI_DHCP,		"Primary DHCP Server" },
+	{ PKT_CCC_SEC_DHCP,		"Secondary DHCP Server" },
+	{ PKT_CCC_I05_SNMP,		"SNMP Entity" },
+	{ PKT_CCC_I05_PRI_DNS,		"Primary DNS Server" },
+	{ PKT_CCC_I05_SEC_DNS,		"Secondary DNS Server" },
+	{ PKT_CCC_KRB_REALM,		"Kerberos Realm" },
+	{ PKT_CCC_TGT_FLAG,		"MTA should fetch TGT?" },
+	{ PKT_CCC_PROV_TIMER,		"Provisioning Timer" },
+	{ PKT_CCC_CMS_FQDN,		"CMS FQDN" },
+	{ PKT_CCC_AS_KRB,		"AS-REQ/AS-REP Backoff and Retry" },
+	{ PKT_CCC_AP_KRB,		"AP-REQ/AP-REP Backoff and Retry" },
+	{ PKT_CCC_MTA_KRB_CLEAR,	"MTA should clear Kerberos tickets?" },
+	{ 0, NULL },
+};
+
+static const value_string pkt_draft5_ccc_opt_vals[] = {
+	{ PKT_CCC_PRI_DHCP,		"TSP's Primary DHCP Server" },
+	{ PKT_CCC_SEC_DHCP,		"TSP's Secondary DHCP Server" },
+	{ PKT_CCC_IETF_PROV_SRV,	"TSP's Provisioning Server" },
+	{ PKT_CCC_IETF_AS_KRB,		"TSP's AS-REQ/AS-REP Backoff and Retry" },
+	{ PKT_CCC_IETF_AP_KRB,		"TSP's AP-REQ/AP-REP Backoff and Retry" },
+	{ PKT_CCC_KRB_REALM,		"TSP's Kerberos Realm Name" },
+	{ PKT_CCC_TGT_FLAG,		"TSP's Ticket Granting Server Utilization" },
+	{ PKT_CCC_PROV_TIMER,		"TSP's Provisioning Timer Value" },
+	{ PKT_CCC_IETF_SEC_TKT,		"PacketCable Security Ticket Control" },
+	{ 0, NULL },
+};
+
+static const value_string pkt_i05_ccc_ticket_ctl_vals[] = {
+	{ 1, "Invalidate Provisioning Application Server's ticket" },
+	{ 2, "Invalidate all CMS Application Server tickets" },
+	{ 3, "Invalidate all Application Server tickets" },
+	{ 0, NULL },
+};
+
+static int
+dissect_packetcable_i05_ccc(proto_tree *v_tree, tvbuff_t *tvb, int optp)
+{
+	guint8 subopt, subopt_len, fetch_tgt, timer_val, ticket_ctl;
+	guint32 nom_to, max_to, max_ret;
+	proto_tree *pkt_s_tree;
+	proto_item *vti;
+	static GString *opt_str = NULL;
+
+	if (! opt_str)
+		opt_str = g_string_new("");
+
+	subopt = tvb_get_guint8(tvb, optp);
+	subopt_len = tvb_get_guint8(tvb, optp + 1);
+	optp += 2;
+
+	g_string_sprintf(opt_str, "Suboption %u: %s: ", subopt,
+			val_to_str(subopt, pkt_i05_ccc_opt_vals, "unknown/reserved") );
+
+	switch (subopt) {
+		case PKT_CCC_PRI_DHCP:	/* String values */
+		case PKT_CCC_SEC_DHCP:
+		case PKT_CCC_I05_SNMP:
+		case PKT_CCC_I05_PRI_DNS:
+		case PKT_CCC_I05_SEC_DNS:
+		case PKT_CCC_KRB_REALM:
+		case PKT_CCC_CMS_FQDN:
+			g_string_sprintfa(opt_str, "%s (%u byte%s)",
+					tvb_format_stringzpad(tvb, optp, subopt_len),
+					subopt_len,
+					plurality(subopt_len, "", "s") );
+			proto_tree_add_text(v_tree, tvb, optp - 2, subopt_len + 2, opt_str->str);
+			optp += subopt_len;
+			break;
+
+		case PKT_CCC_TGT_FLAG:
+			fetch_tgt = tvb_get_guint8(tvb, optp);
+			g_string_sprintfa(opt_str, "%s (%u byte%s%s)",
+					fetch_tgt ? "Yes" : "No",
+					subopt_len,
+					plurality(subopt_len, "", "s"),
+					subopt_len != 1 ? " [Invalid]" : "");
+			proto_tree_add_text(v_tree, tvb, optp - 2, subopt_len + 2, opt_str->str);
+			optp += 1;
+			break;
+
+		case PKT_CCC_PROV_TIMER:
+			timer_val = tvb_get_guint8(tvb, optp);
+			g_string_sprintfa(opt_str, "%u%s (%u byte%s%s)", timer_val,
+					timer_val > 30 ? " [Invalid]" : "",
+					subopt_len,
+					plurality(subopt_len, "", "s"),
+					subopt_len != 1 ? " [Invalid]" : "");
+			proto_tree_add_text(v_tree, tvb, optp - 2, subopt_len + 2, opt_str->str);
+			optp += 1;
+			break;
+
+		case PKT_CCC_AS_KRB:
+			nom_to = tvb_get_ntohl(tvb, optp);
+			max_to = tvb_get_ntohl(tvb, optp + 4);
+			max_ret = tvb_get_ntohl(tvb, optp + 8);
+			g_string_sprintfa(opt_str, "(%u byte%s%s)", subopt_len,
+					plurality(subopt_len, "", "s"),
+					subopt_len != 12 ? " [Invalid]" : "");
+			vti = proto_tree_add_text(v_tree, tvb, optp - 2, subopt_len + 2, opt_str->str);
+			pkt_s_tree = proto_item_add_subtree(vti, ett_bootp_option);
+			proto_tree_add_text(pkt_s_tree, tvb, optp, 4,
+					"pktcMtaDevRealmUnsolicitedKeyNomTimeout: %u", nom_to);
+			proto_tree_add_text(pkt_s_tree, tvb, optp + 4, 4,
+					"pktcMtaDevRealmUnsolicitedKeyMaxTimeout: %u", max_to);
+			proto_tree_add_text(pkt_s_tree, tvb, optp + 8, 4,
+					"pktcMtaDevRealmUnsolicitedKeyMaxRetries: %u", max_ret);
+			optp += 12;
+			break;
+
+		case PKT_CCC_AP_KRB:
+			nom_to = tvb_get_ntohl(tvb, optp);
+			max_to = tvb_get_ntohl(tvb, optp + 4);
+			max_ret = tvb_get_ntohl(tvb, optp + 8);
+			g_string_sprintfa(opt_str, "(%u byte%s%s)", subopt_len,
+					plurality(subopt_len, "", "s"),
+					subopt_len != 12 ? " [Invalid]" : "");
+			vti = proto_tree_add_text(v_tree, tvb, optp - 2, subopt_len + 2, opt_str->str);
+			pkt_s_tree = proto_item_add_subtree(vti, ett_bootp_option);
+			proto_tree_add_text(pkt_s_tree, tvb, optp, 4,
+					"pktcMtaDevProvUnsolicitedKeyNomTimeout: %u", nom_to);
+			proto_tree_add_text(pkt_s_tree, tvb, optp + 4, 4,
+					"pktcMtaDevProvUnsolicitedKeyMaxTimeout: %u", max_to);
+			proto_tree_add_text(pkt_s_tree, tvb, optp + 8, 4,
+					"pktcMtaDevProvUnsolicitedKeyMaxRetries: %u", max_ret);
+			optp += 12;
+			break;
+
+		case PKT_CCC_MTA_KRB_CLEAR:
+			ticket_ctl = tvb_get_guint8(tvb, optp);
+			g_string_sprintfa(opt_str, "%s (%u) (%u byte%s%s)",
+					val_to_str (ticket_ctl, pkt_i05_ccc_ticket_ctl_vals, "unknown/invalid"),
+					ticket_ctl,
+					subopt_len,
+					plurality(subopt_len, "", "s"),
+					subopt_len != 1 ? " [Invalid]" : "");
+			proto_tree_add_text(v_tree, tvb, optp - 2, subopt_len + 2, opt_str->str);
+			optp += 1;
 			break;
+
 		default:
-			proto_tree_add_text(v_tree, tvb, optp, subopt_len+2,"ERROR, please report: Unknown subopt type handler %d", subopt);
+			proto_tree_add_text(v_tree, tvb, optp - 2, subopt_len + 2, opt_str->str);
 			break;
-		}
+
 	}
-	optp += (subopt_len + 2);
 	return optp;
 }
 
 
+static const value_string sec_tcm_vals[] = {
+	{ 1 << 0, "PacketCable Provisioning Server" },
+	{ 1 << 1, "All PacketCable Call Management Servers" },
+	{ 0, NULL }
+};
+
+static int
+dissect_packetcable_ietf_ccc(proto_tree *v_tree, tvbuff_t *tvb, int optp,
+	int revision)
+{
+	guint8 subopt, subopt_len, ipv4_addr[4];
+	guint8 prov_type, fetch_tgt, timer_val;
+	guint16 sec_tcm;
+	guint32 nom_to, max_to, max_ret;
+	proto_tree *pkt_s_tree;
+	proto_item *vti;
+	static GString *opt_str = NULL;
+	int max_timer_val = 255, i;
+	char dns_name[255], bit_fld[24];
+
+	if (! opt_str)
+		opt_str = g_string_new("");
+
+	subopt = tvb_get_guint8(tvb, optp);
+	subopt_len = tvb_get_guint8(tvb, optp + 1);
+	optp += 2;
+
+	g_string_sprintf(opt_str, "Suboption %u: %s: ", subopt,
+			val_to_str(subopt, pkt_draft5_ccc_opt_vals, "unknown/reserved") );
+
+	switch (subopt) {
+		case PKT_CCC_PRI_DHCP:	/* IPv4 values */
+		case PKT_CCC_SEC_DHCP:
+			tvb_memcpy(tvb, ipv4_addr, optp, 4);
+			g_string_sprintfa(opt_str, "%u.%u.%u.%u (%u byte%s%s)",
+					ipv4_addr[0], ipv4_addr[1], ipv4_addr[2], ipv4_addr[3],
+					subopt_len,
+					plurality(subopt_len, "", "s"),
+					subopt_len != 4 ? " [Invalid]" : "");
+			proto_tree_add_text(v_tree, tvb, optp - 2, subopt_len + 2, opt_str->str);
+			optp += subopt_len;
+			break;
+
+		case PKT_CCC_IETF_PROV_SRV:
+			prov_type = tvb_get_guint8(tvb, optp);
+			optp += 1;
+			switch (prov_type) {
+				case 0:
+					get_dns_name(tvb, optp, optp + 1, dns_name,
+						sizeof(dns_name));
+					g_string_sprintfa(opt_str, "%s (%u byte%s)", dns_name,
+							subopt_len - 1, plurality(subopt_len, "", "s") );
+					proto_tree_add_text(v_tree, tvb, optp - 3, subopt_len + 2, opt_str->str);
+					optp += subopt_len - 1;
+					break;
+				case 1:
+					tvb_memcpy(tvb, ipv4_addr, optp, 4);
+					g_string_sprintfa(opt_str, "%u.%u.%u.%u (%u byte%s%s)",
+							ipv4_addr[0], ipv4_addr[1], ipv4_addr[2], ipv4_addr[3],
+							subopt_len,
+							plurality(subopt_len, "", "s"),
+							subopt_len != 5 ? " [Invalid]" : "");
+					proto_tree_add_text(v_tree, tvb, optp - 3, subopt_len + 2, opt_str->str);
+					optp += subopt_len - 1;
+					break;
+				default:
+					g_string_sprintfa(opt_str, "Invalid type: %u (%u byte%s)",
+							tvb_get_guint8(tvb, optp),
+							subopt_len,
+							plurality(subopt_len, "", "s") );
+					proto_tree_add_text(v_tree, tvb, optp - 3, subopt_len + 2, opt_str->str);
+					optp += subopt_len - 1;
+					break;
+			}
+			break;
+
+		case PKT_CCC_IETF_AS_KRB:
+			nom_to = tvb_get_ntohl(tvb, optp);
+			max_to = tvb_get_ntohl(tvb, optp + 4);
+			max_ret = tvb_get_ntohl(tvb, optp + 8);
+			g_string_sprintfa(opt_str, "(%u byte%s%s)", subopt_len,
+					plurality(subopt_len, "", "s"),
+					subopt_len != 12 ? " [Invalid]" : "");
+			vti = proto_tree_add_text(v_tree, tvb, optp - 2, subopt_len + 2, opt_str->str);
+			pkt_s_tree = proto_item_add_subtree(vti, ett_bootp_option);
+			proto_tree_add_text(pkt_s_tree, tvb, optp, 4,
+					"pktcMtaDevRealmUnsolicitedKeyNomTimeout: %u", nom_to);
+			proto_tree_add_text(pkt_s_tree, tvb, optp + 4, 4,
+					"pktcMtaDevRealmUnsolicitedKeyMaxTimeout: %u", max_to);
+			proto_tree_add_text(pkt_s_tree, tvb, optp + 8, 4,
+					"pktcMtaDevRealmUnsolicitedKeyMaxRetries: %u", max_ret);
+			optp += 12;
+			break;
+
+		case PKT_CCC_IETF_AP_KRB:
+			nom_to = tvb_get_ntohl(tvb, optp);
+			max_to = tvb_get_ntohl(tvb, optp + 4);
+			max_ret = tvb_get_ntohl(tvb, optp + 8);
+			g_string_sprintfa(opt_str, "(%u byte%s%s)", subopt_len,
+					plurality(subopt_len, "", "s"),
+					subopt_len != 12 ? " [Invalid]" : "");
+			vti = proto_tree_add_text(v_tree, tvb, optp - 2, subopt_len + 2, opt_str->str);
+			pkt_s_tree = proto_item_add_subtree(vti, ett_bootp_option);
+			proto_tree_add_text(pkt_s_tree, tvb, optp, 4,
+					"pktcMtaDevProvUnsolicitedKeyNomTimeout: %u", nom_to);
+			proto_tree_add_text(pkt_s_tree, tvb, optp + 4, 4,
+					"pktcMtaDevProvUnsolicitedKeyMaxTimeout: %u", max_to);
+			proto_tree_add_text(pkt_s_tree, tvb, optp + 8, 4,
+					"pktcMtaDevProvUnsolicitedKeyMaxRetries: %u", max_ret);
+			optp += 12;
+			break;
+
+		case PKT_CCC_KRB_REALM: /* String values */
+			get_dns_name(tvb, optp, optp + 1, dns_name, sizeof(dns_name));
+			g_string_sprintfa(opt_str, "%s (%u byte%s)", dns_name,
+					subopt_len, plurality(subopt_len, "", "s") );
+			proto_tree_add_text(v_tree, tvb, optp - 2, subopt_len + 2, opt_str->str);
+			optp += subopt_len;
+			break;
+
+		case PKT_CCC_TGT_FLAG:
+			fetch_tgt = tvb_get_guint8(tvb, optp);
+			g_string_sprintfa(opt_str, "%s (%u byte%s%s)",
+					fetch_tgt ? "Yes" : "No",
+					subopt_len,
+					plurality(subopt_len, "", "s"),
+					subopt_len != 1 ? " [Invalid]" : "");
+			proto_tree_add_text(v_tree, tvb, optp - 2, subopt_len + 2, opt_str->str);
+			optp += 1;
+			break;
+
+		case PKT_CCC_PROV_TIMER:
+			if (revision == PACKETCABLE_CCC_DRAFT5)
+				max_timer_val = 30;
+			timer_val = tvb_get_guint8(tvb, optp);
+			g_string_sprintfa(opt_str, "%u%s (%u byte%s%s)", timer_val,
+					timer_val > max_timer_val ? " [Invalid]" : "",
+					subopt_len,
+					plurality(subopt_len, "", "s"),
+					subopt_len != 1 ? " [Invalid]" : "");
+			proto_tree_add_text(v_tree, tvb, optp - 2, subopt_len + 2, opt_str->str);
+			optp += 1;
+			break;
+
+		case PKT_CCC_IETF_SEC_TKT:
+			sec_tcm = tvb_get_ntohs(tvb, optp);
+			g_string_sprintfa(opt_str, "0x%04x (%u byte%s%s)", sec_tcm, subopt_len,
+					plurality(subopt_len, "", "s"),
+					subopt_len != 2 ? " [Invalid]" : "");
+			vti = proto_tree_add_text(v_tree, tvb, optp - 2, subopt_len + 2, opt_str->str);
+			pkt_s_tree = proto_item_add_subtree(vti, ett_bootp_option);
+			for (i = 0 ; i < 2; i++) {
+				if (sec_tcm & sec_tcm_vals[i].value) {
+					decode_bitfield_value(bit_fld, sec_tcm, sec_tcm_vals[i].value, 16);
+					proto_tree_add_text(pkt_s_tree, tvb, optp, 2, "%sInvalidate %s",
+						bit_fld, sec_tcm_vals[i].strptr);
+				}
+			}
+			optp += 2;
+			break;
+
+		default:
+			proto_tree_add_text(v_tree, tvb, optp - 2, subopt_len + 2, opt_str->str);
+			break;
+
+	}
+	return optp;
+}
+
 #define BOOTREQUEST	1
 #define BOOTREPLY	2
 
@@ -1572,7 +2412,9 @@
 		if (hlen > 0) {
 			haddr = tvb_get_ptr(tvb, 28, hlen);
 			proto_tree_add_bytes_format(bp_tree, hf_bootp_hw_addr, tvb,
-						   28, hlen,
+				/* The chaddr element is 16 bytes in length, although
+				   only the first hlen bytes are used */
+						   28, 16,
 						   haddr,
 						   "Client hardware address: %s",
 						   arphrdaddr_to_str(haddr,
@@ -1581,18 +2423,18 @@
 		}
 		else {
 			proto_tree_add_text(bp_tree,  tvb,
-						   28, 0, "Client address not given");
+						   28, 16, "Client address not given");
 		}
 
 		/* The server host name is optional */
 		if (tvb_get_guint8(tvb, 44) != '\0') {
 			proto_tree_add_item(bp_tree, hf_bootp_server, tvb,
-						   SERVER_NAME_OFFSET, 
+						   SERVER_NAME_OFFSET,
 						   SERVER_NAME_LEN, FALSE);
 		}
 		else {
 			proto_tree_add_string_format(bp_tree, hf_bootp_server, tvb,
-						   SERVER_NAME_OFFSET, 
+						   SERVER_NAME_OFFSET,
 						   SERVER_NAME_LEN,
 						   tvb_get_ptr(tvb, SERVER_NAME_OFFSET, 1),
 						   "Server host name not given");
@@ -1789,11 +2631,67 @@
       { "Bootp Vendor Options",		"bootp.vendor", FT_BYTES,
         BASE_NONE,			NULL,		 0x0,
       	"", HFILL }},
+
+    { &hf_bootp_fqdn_s,
+      { "Server",		"bootp.fqdn.s",		FT_BOOLEAN,
+        8,			TFS(&tfs_fqdn_s),	F_FQDN_S,
+      	"Server should do ddns update", HFILL }},
+
+    { &hf_bootp_fqdn_o,
+      { "Server overrides",	"bootp.fqdn.o",		FT_BOOLEAN,
+        8,			TFS(&tfs_fqdn_o),	F_FQDN_O,
+      	"Server insists on doing DDNS update", HFILL }},
+
+    { &hf_bootp_fqdn_e,
+      { "Binary encoding",	"bootp.fqdn.e",		FT_BOOLEAN,
+        8,			TFS(&tfs_fqdn_e),	F_FQDN_E,
+      	"Name is binary encoded", HFILL }},
+
+    { &hf_bootp_fqdn_n,
+      { "No server ddns",	"bootp.fqdn.n",		FT_BOOLEAN,
+        8,			TFS(&tfs_fqdn_n),	F_FQDN_N,
+      	"Server should not do any DDNS updates", HFILL }},
+
+    { &hf_bootp_fqdn_mbz,
+      { "Reserved flags",	"bootp.fqdn.mbz",	FT_UINT8,
+        BASE_HEX,		NULL,			F_FQDN_MBZ,
+      	"", HFILL }},
+
+    { &hf_bootp_fqdn_rcode1,
+      { "A-RR result",	       	"bootp.fqdn.rcode1",	 FT_UINT8,
+        BASE_DEC,		NULL,			 0x0,
+      	"Result code of A-RR update", HFILL }},
+
+    { &hf_bootp_fqdn_rcode2,
+      { "PTR-RR result",       	"bootp.fqdn.rcode2",	 FT_UINT8,
+        BASE_DEC,		NULL,			 0x0,
+      	"Result code of PTR-RR update", HFILL }},
+
+    { &hf_bootp_fqdn_name,
+      { "Client name",		"bootp.fqdn.name",	FT_BYTES,
+        BASE_NONE,		NULL,			0x0,
+      	"Name to register via ddns", HFILL }},
+
+    { &hf_bootp_fqdn_asciiname,
+      { "Client name",		"bootp.fqdn.name",	FT_STRING,
+        BASE_NONE,		NULL,			0x0,
+      	"Name to register via ddns", HFILL }},
+
+    { &hf_bootp_pkt_mtacap_len,
+      { "PacketCable MTA Device Capabilities Length",	"bootp.vendor.pktc.mtacap_len",
+        FT_UINT8, BASE_DEC, NULL, 0x0,
+        "PacketCable MTA Device Capabilities Length", HFILL }},
+    { &hf_bootp_docsis_cmcap_len,
+      { "DOCSIS CM Device Capabilities Length",	"bootp.vendor.docsis.cmcap_len",
+        FT_UINT8, BASE_DEC, NULL, 0x0,
+        "DOCSIS Cable Modem Device Capabilities Length", HFILL }},
   };
+
   static gint *ett[] = {
     &ett_bootp,
     &ett_bootp_flags,
     &ett_bootp_option,
+    &ett_bootp_fqdn,
   };
 
   module_t *bootp_module;
@@ -1810,6 +2708,21 @@
     "Decode Option 85 as String",
     "Novell Servers option 85 can be configured as a string instead of address",
     &novell_string);
+
+  prefs_register_enum_preference(bootp_module, "pkt.ccc.protocol_version",
+    "PacketCable CCC protocol version",
+    "The PacketCable CCC protocol version",
+    &pkt_ccc_protocol_version,
+    pkt_ccc_protocol_versions,
+    FALSE);
+
+  prefs_register_uint_preference(bootp_module, "pkt.ccc.option",
+    "PacketCable CCC option",
+    "Option Number for PacketCable CableLabs Client Configuration",
+    10,
+    &pkt_ccc_option);
+
+
 }
 
 void
diff -urN ethereal-0.10.6/epan/dissectors/packet-bssap.c ethereal-0.10.7/epan/dissectors/packet-bssap.c
--- ethereal-0.10.6/epan/dissectors/packet-bssap.c	2004-08-12 17:41:59.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-bssap.c	2004-10-20 17:34:39.000000000 -0500
@@ -7,7 +7,7 @@
  * Copyright 2003, Michael Lum <mlum [AT] telostech.com>
  * In association with Telos Technology Inc.
  *
- * $Id: packet-bssap.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-bssap.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -47,7 +47,7 @@
 #include <string.h>
 
 #include "epan/packet.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-bssap.h"
 
 #define BSSAP 0
diff -urN ethereal-0.10.6/epan/dissectors/packet-bvlc.c ethereal-0.10.7/epan/dissectors/packet-bvlc.c
--- ethereal-0.10.6/epan/dissectors/packet-bvlc.c	2004-08-12 17:42:07.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-bvlc.c	2004-10-20 17:34:45.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for BACnet/IP (BVLL, BVLC) dissection
  * Copyright 2001, Hartmut Mueller <hartmut@abmlinux.org>, FH Dortmund
  *
- * $Id: packet-bvlc.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-bvlc.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -32,7 +32,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/strutil.h>
 
 #include <glib.h>
diff -urN ethereal-0.10.6/epan/dissectors/packet-cast.c ethereal-0.10.7/epan/dissectors/packet-cast.c
--- ethereal-0.10.6/epan/dissectors/packet-cast.c	2004-08-12 17:42:25.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-cast.c	2004-10-20 17:34:55.000000000 -0500
@@ -3,7 +3,7 @@
  * Dissector for the CAST Client Control Protocol
  *   (The "D-Channel"-Protocol for Cisco Systems' IP-Phones)
  *
- * $Id: packet-cast.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-cast.c 12115 2004-09-27 22:55:15Z guy $
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -31,7 +31,7 @@
 #include <string.h>
 
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #include "packet-tcp.h"
 
@@ -1759,8 +1759,9 @@
 
   cast_module = prefs_register_protocol(proto_cast, NULL);
   prefs_register_bool_preference(cast_module, "reassembly", /*"desegment",*/
-    "Desegment all CAST messages spanning multiple TCP segments",
-    "Whether the CAST dissector should desegment all messages spanning multiple TCP segments",
+    "Reassemble CAST messages spanning multiple TCP segments",
+    "Whether the CAST dissector should reassemble messages spanning multiple TCP segments."
+    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
     &cast_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-chdlc.c ethereal-0.10.7/epan/dissectors/packet-chdlc.c
--- ethereal-0.10.6/epan/dissectors/packet-chdlc.c	2004-08-12 17:42:31.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-chdlc.c	2004-10-20 17:35:02.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-chdlc.c
  * Routines for Cisco HDLC packet disassembly
  *
- * $Id: packet-chdlc.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-chdlc.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -29,7 +29,7 @@
 #include <glib.h>
 #include <epan/packet.h>
 #include "etypes.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "chdlctypes.h"
 #include <epan/addr_resolv.h>
 #include "packet-chdlc.h"
@@ -91,6 +91,7 @@
 const value_string chdlc_vals[] = {
 	{0x2000,               "Cisco Discovery Protocol"},
 	{ETHERTYPE_IP,         "IP"},
+	{ETHERTYPE_IPv6,       "IPv6"},
 	{CISCO_SLARP,          "SLARP"},
 	{ETHERTYPE_DEC_LB,     "DEC LanBridge"},
 	{CHDLCTYPE_BPDU,       "Spanning Tree BPDU"},
diff -urN ethereal-0.10.6/epan/dissectors/packet-cip.c ethereal-0.10.7/epan/dissectors/packet-cip.c
--- ethereal-0.10.6/epan/dissectors/packet-cip.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-cip.c	2004-10-20 17:34:37.000000000 -0500
@@ -0,0 +1,1809 @@
+/* packet-cip.c
+ * Routines for Common Industrial Protocol (CIP) dissection
+ * CIP Home: www.odva.org
+ *
+ * Copyright 2004
+ * Magnus Hansson <mah@hms.se>
+ * Joakim Wiberg <jow@hms.se>
+ *
+ * $Id: packet-cip.c 12070 2004-09-23 17:34:35Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+
+#ifdef NEED_SNPRINTF_H
+# include "snprintf.h"
+#endif
+
+#include <epan/packet.h>
+#include <prefs.h>
+#include "packet-tcp.h"
+#include "packet-cip.h"
+
+#define  ENIP_CIP_INTERFACE   0
+
+/* Initialize the protocol and registered fields */
+static int proto_cip              = -1;
+
+static int hf_cip_sc              = -1;
+static int hf_cip_rr              = -1;
+static int hf_cip_epath           = -1;
+static int hf_cip_genstat         = -1;
+
+static int hf_cip_fwo_comp        = -1;
+static int hf_cip_fwo_mrev        = -1;
+static int hf_cip_fwo_con_size    = -1;
+static int hf_cip_fwo_fixed_var   = -1;
+static int hf_cip_fwo_prio        = -1;
+static int hf_cip_fwo_typ         = -1;
+static int hf_cip_fwo_own         = -1;
+static int hf_cip_fwo_dir         = -1;
+static int hf_cip_fwo_trigg       = -1;
+static int hf_cip_fwo_class       = -1;
+
+static int hf_cip_vendor              = -1;
+static int hf_cip_devtype             = -1;
+static int hf_cip_port                = -1;
+static int hf_cip_link_address_byte   = -1;
+static int hf_cip_link_address_string = -1;
+static int hf_cip_class8              = -1;
+static int hf_cip_class16             = -1;
+static int hf_cip_class32             = -1;
+static int hf_cip_instance8           = -1;
+static int hf_cip_instance16          = -1;
+static int hf_cip_instance32          = -1;
+static int hf_cip_attribute8          = -1;
+static int hf_cip_attribute16         = -1;
+static int hf_cip_attribute32         = -1;
+static int hf_cip_conpoint8           = -1;
+static int hf_cip_conpoint16          = -1;
+static int hf_cip_conpoint32          = -1;
+static int hf_cip_symbol              = -1;
+
+/* Initialize the subtree pointers */
+static gint ett_cip           = -1;
+static gint ett_ekey_path     = -1;
+static gint ett_cia_path      = -1;
+static gint ett_data_seg      = -1;
+static gint ett_rrsc          = -1;
+static gint ett_mcsc          = -1;
+static gint ett_ncp           = -1;
+static gint ett_lsrcf         = -1;
+static gint ett_mes_req       = -1;
+static gint ett_cmd_data      = -1;
+static gint ett_port_path     = -1;
+static gint ett_mult_ser      = -1;
+static gint ett_path          = -1;
+static gint ett_status_item   = -1;
+
+
+/* Translate function to string - CIP Service codes */
+static const value_string cip_sc_vals[] = {
+	{ SC_GET_ATT_ALL,	         "Get Attribute All" },
+	{ SC_SET_ATT_ALL,	         "Set Attribute All" },
+	{ SC_GET_ATT_LIST,	      "Get Attribute List" },
+	{ SC_SET_ATT_LIST,	      "Set Attribute List" },
+	{ SC_RESET,	               "Reset" },
+   { SC_START,	               "Start" },
+   { SC_STOP,	               "Stop" },
+   { SC_CREATE,	            "Create" },
+   { SC_DELETE,	            "Delete" },
+   { SC_APPLY_ATTRIBUTES,	   "Apply Attributes" },
+	{ SC_GET_ATT_SINGLE,	      "Get Attribute Single" },
+	{ SC_SET_ATT_SINGLE,	      "Set Attribute Single" },
+   { SC_FIND_NEXT_OBJ_INST,	"Find Next Object Instance" },
+   { SC_RESTOR,	            "Restore" },
+	{ SC_SAVE,	               "Save" },
+	{ SC_NO_OP,	               "Nop" },
+	{ SC_GET_MEMBER,	         "Get Member" },
+	{ SC_SET_MEMBER,	         "Set Member" },
+	{ SC_MULT_SERV_PACK,       "Multiple Service Packet" },
+
+	/* Some class specific services */
+	{ SC_FWD_CLOSE,	         "Forward Close" },
+	{ SC_FWD_OPEN,	            "Forward Open" },
+	{ SC_UNCON_SEND,           "Unconnected Send" },
+
+	{ 0,				            NULL }
+};
+
+/* Translate function to string - CIP Request/Response */
+static const value_string cip_sc_rr[] = {
+	{ 0,	      "Request"  },
+	{ 1,	      "Response" },
+
+	{ 0,			NULL }
+};
+
+/* Translate function to string - Compatibility */
+static const value_string cip_com_bit_vals[] = {
+	{ 0,	      "Bit Cleared" },
+	{ 1,	      "Bit Set"     },
+
+	{ 0,        NULL          }
+};
+
+/* Translate function to string - Connection priority */
+static const value_string cip_con_prio_vals[] = {
+	{ 0,	      "Low Priority"  },
+	{ 1,	      "High Priority" },
+	{ 2,	      "Scheduled"     },
+	{ 3,	      "Urgent"        },
+
+	{ 0,        NULL            }
+};
+
+/* Translate function to string - Connection size fixed or variable */
+static const value_string cip_con_fw_vals[] = {
+	{ 0,	      "Fixed"    },
+	{ 1,	      "Variable" },
+
+	{ 0,        NULL       }
+};
+
+/* Translate function to string - Connection owner */
+static const value_string cip_con_owner_vals[] = {
+	{ 0,	      "Exclusive" },
+	{ 1,	      "Redundant" },
+
+	{ 0,        NULL        }
+};
+
+/* Translate function to string - Connection direction */
+static const value_string cip_con_dir_vals[] = {
+	{ 0,	      "Client" },
+	{ 1,	      "Server" },
+
+	{ 0,        NULL        }
+};
+
+/* Translate function to string - Production trigger */
+static const value_string cip_con_trigg_vals[] = {
+	{ 0,	      "Cyclic" },
+	{ 1,	      "Change-Of-State" },
+	{ 2,	      "Application Object" },
+
+	{ 0,        NULL        }
+};
+
+/* Translate function to string - Transport class */
+static const value_string cip_con_class_vals[] = {
+	{ 0,	      "0" },
+	{ 1,	      "1" },
+	{ 2,	      "2" },
+	{ 3,	      "3" },
+
+	{ 0,        NULL        }
+};
+
+/* Translate function to string - Connection type */
+static const value_string cip_con_type_vals[] = {
+	{ 0,	      "Null"           },
+	{ 1,	      "Multicast"      },
+	{ 2,	      "Point to Point" },
+	{ 3,	      "Reserved"       },
+
+	{ 0,        NULL             }
+};
+
+/* Translate function to string - Timeout Multiplier */
+static const value_string cip_con_time_mult_vals[] = {
+	{ 0,        "*4"   },
+	{ 1,        "*8"   },
+	{ 2,        "*16"  },
+	{ 3,        "*32"  },
+	{ 4,        "*64"  },
+	{ 5,        "*128" },
+	{ 6,        "*256" },
+	{ 7,        "*512" },
+
+   { 0,        NULL    }
+};
+
+/* Translate function to string - CIP General Status codes */
+static const value_string cip_gs_vals[] = {
+	{ CI_GRC_SUCCESS,             "Success" },
+   { CI_GRC_FAILURE,             "Connection failure" },
+   { CI_GRC_NO_RESOURCE,         "Resource unavailable" },
+   { CI_GRC_BAD_DATA,            "Invalid parameter value" },
+   { CI_GRC_BAD_PATH,            "Path segment error" },
+   { CI_GRC_BAD_CLASS_INSTANCE,  "Path destination unknown" },
+   { CI_GRC_PARTIAL_DATA,        "Partial transfer" },
+   { CI_GRC_CONN_LOST,           "Connection lost" },
+   { CI_GRC_BAD_SERVICE,         "Service not supported" },
+   { CI_GRC_BAD_ATTR_DATA,       "Invalid attribute value" },
+   { CI_GRC_ATTR_LIST_ERROR,     "Attribute list error" },
+   { CI_GRC_ALREADY_IN_MODE,     "Already in requested mode/state" },
+   { CI_GRC_BAD_OBJ_MODE,        "Object state conflict" },
+   { CI_GRC_OBJ_ALREADY_EXISTS,  "Object already exists" },
+   { CI_GRC_ATTR_NOT_SETTABLE,   "Attribute not settable" },
+   { CI_GRC_PERMISSION_DENIED,   "Privilege violation" },
+   { CI_GRC_DEV_IN_WRONG_STATE,  "Device state conflict" },
+   { CI_GRC_REPLY_DATA_TOO_LARGE,"Reply data too large" },
+   { CI_GRC_FRAGMENT_PRIMITIVE,  "Fragmentation of a primitive value" },
+   { CI_GRC_CONFIG_TOO_SMALL,    "Not enough data" },
+   { CI_GRC_UNDEFINED_ATTR,      "Attribute not supported" },
+   { CI_GRC_CONFIG_TOO_BIG,      "Too much data" },
+   { CI_GRC_OBJ_DOES_NOT_EXIST,  "Object does not exist" },
+   { CI_GRC_NO_FRAGMENTATION,    "Service fragmentation sequence not in progress" },
+   { CI_GRC_DATA_NOT_SAVED,      "No stored attribute data" },
+   { CI_GRC_DATA_WRITE_FAILURE,  "Store operation failure" },
+   { CI_GRC_REQUEST_TOO_LARGE,   "Routing failure, request packet too large" },
+   { CI_GRC_RESPONSE_TOO_LARGE,  "Routing failure, response packet too large" },
+   { CI_GRC_MISSING_LIST_DATA,   "Missing attribute list entry data" },
+   { CI_GRC_INVALID_LIST_STATUS, "Invalid attribute value list" },
+   { CI_GRC_SERVICE_ERROR,       "Embedded service error" },
+   { CI_GRC_CONN_RELATED_FAILURE,"Vendor specific error" },
+   { CI_GRC_INVALID_PARAMETER,   "Invalid parameter" },
+   { CI_GRC_WRITE_ONCE_FAILURE,  "Write-once value or medium already written" },
+   { CI_GRC_INVALID_REPLY,       "Invalid Reply Received" },
+   { CI_GRC_BAD_KEY_IN_PATH,     "Key Failure in path" },
+   { CI_GRC_BAD_PATH_SIZE,       "Path Size Invalid" },
+   { CI_GRC_UNEXPECTED_ATTR,     "Unexpected attribute in list" },
+   { CI_GRC_INVALID_MEMBER,      "Invalid Member ID" },
+   { CI_GRC_MEMBER_NOT_SETTABLE, "Member not settable" },
+
+  	{ 0,				               NULL }
+};
+
+/* Translate Vendor ID:s */
+const value_string cip_vendor_vals[] = {
+   VENDOR_ID_LIST
+
+	{ 0, NULL }
+};
+
+/* Translate Device Profile:s */
+const value_string cip_devtype_vals[] = {
+   { DP_GEN_DEV,              "Generic Device"              },
+   { DP_AC_DRIVE,             "AC Drive"                    },
+   { DP_MOTOR_OVERLOAD,       "Motor Overload"              },
+   { DP_LIMIT_SWITCH,         "Limit Switch"                },
+   { DP_IND_PROX_SWITCH,      "Inductive Proximity Switch"  },
+   { DP_PHOTO_SENSOR,         "Photoelectric Sensor"        },
+   { DP_GENP_DISC_IO,         "General Purpose Dicrete I/O" },
+   { DP_RESOLVER,             "Resolver"                    },
+   { DP_COM_ADAPTER,          "Communications Adapter"      },
+   { DP_POS_CNT,              "Position Controller",        },
+   { DP_DC_DRIVE,             "DC Drive"                    },
+   { DP_CONTACTOR,            "Contactor",                  },
+   { DP_MOTOR_STARTER,        "Motor Starter",              },
+   { DP_SOFT_START,           "Soft Start",                 },
+   { DP_HMI,                  "Human-Machine Interface"     },
+   { DP_MASS_FLOW_CNT,        "Mass Flow Controller"        },
+   { DP_PNEUM_VALVE,          "Pneumatic Valve"             },
+   { DP_VACUUM_PRES_GAUGE,    "Vaccuum Pressure Gauge"      },
+
+   { 0, NULL }
+};
+
+/* Translate class names */
+static const value_string cip_class_names_vals[] = {
+	{ 0x01,     "Identity Object"                       },
+	{ 0x02,     "Message Router"                        },
+	{ 0x03,     "DeviceNet Object"                      },
+	{ 0x04,     "Assembly Object"                       },
+	{ 0x05,     "Connection Object"                     },
+	{ 0x06,     "Connection Manager"                    },
+	{ 0x07,     "Register Object"                       },
+	{ 0x08,     "Discrete Input Point Object"           },
+	{ 0x09,     "Discrete Output Point Object"          },
+	{ 0x0A,     "Analog Input Point Object"             },
+	{ 0x0B,     "Analog Output Point Object"            },
+	{ 0x0E,     "Presence Sensing Object"               },
+	{ 0x0F,     "Parameter Object"                      },
+	{ 0x10,     "Parameter Group Object"                },
+	{ 0x12,     "Group Object"                          },
+	{ 0x1D,     "Discrete Input Group Object"           },
+	{ 0x1E,     "Discrete Output Group Object"          },
+	{ 0x1F,     "Discrete Group Object"                 },
+	{ 0x20,     "Analog Input Group Object"             },
+	{ 0x21,     "Analog Output Group Object"            },
+	{ 0x22,     "Analog Group Object"                   },
+	{ 0x23,     "Position Sensor Object"                },
+	{ 0x24,     "Position Controller Supervisor Object" },
+	{ 0x25,     "Position Controller Object"            },
+	{ 0x26,     "Block Sequencer Object"                },
+	{ 0x27,     "Command Block Object"                  },
+	{ 0x28,     "Motor Data Object"                     },
+	{ 0x29,     "Control Supervisor Object"             },
+	{ 0x2A,     "AC/DC Drive Object"                    },
+	{ 0x2B,     "Acknowledge Handler Object"            },
+	{ 0x2C,     "Overload Object"                       },
+	{ 0x2D,     "Softstart Object"                      },
+	{ 0x2E,     "Selection Object"                      },
+	{ 0x30,     "S-Device Supervisor Object"            },
+	{ 0x31,     "S-Analog Sensor Object"                },
+	{ 0x32,     "S-Analog Actuator Object"              },
+	{ 0x33,     "S-Single Stage Controller Object"      },
+	{ 0x34,     "S-Gas Calibration Object"              },
+	{ 0x35,     "Trip Point Object"                     },
+	{ 0x37,     "File Object"                           },
+	{ 0x38,     "S-Partial Pressure Object"             },
+	{ 0xF0,     "ControlNet Object"                     },
+	{ 0xF1,     "ControlNet Keeper Object"              },
+	{ 0xF2,     "ControlNet Scheduling Object"          },
+	{ 0xF3,     "Connection Configuration Object"       },
+	{ 0xF4,     "Port Object"                           },
+	{ 0xF5,     "TCP/IP Interface Object"               },
+	{ 0xF6,     "EtherNet Link Object"                  },
+
+	{ 0,			NULL                                    }
+};
+
+
+static proto_item*
+add_byte_array_text_to_proto_tree( proto_tree *tree, tvbuff_t *tvb, gint start, gint length, const char* str )
+{
+  const char *tmp;
+  char       *tmp2, *tmp2start;
+  proto_item *pi;
+  int         i,tmp_length,tmp2_length;
+  guint32     octet;
+  /* At least one version of Apple's C compiler/linker is buggy, causing
+     a complaint from the linker about the "literal C string section"
+     not ending with '\0' if we initialize a 16-element "char" array with
+     a 16-character string, the fact that initializing such an array with
+     such a string is perfectly legitimate ANSI C nonwithstanding, the 17th
+     '\0' byte in the string nonwithstanding. */
+  static const char my_hex_digits[16] =
+      { '0', '1', '2', '3', '4', '5', '6', '7',
+        '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+
+
+   if( ( length * 2 ) > 32 )
+   {
+      tmp_length = 16;
+      tmp2_length = 36;
+   }
+   else
+   {
+      tmp_length = length;
+      tmp2_length = ( length * 2 ) + 1;
+   }
+
+   tmp = tvb_get_ptr( tvb, start, tmp_length );
+   tmp2 = (char*)g_malloc( tmp2_length );
+
+   tmp2start = tmp2;
+
+   for( i = 0; i < tmp_length; i++ )
+   {
+      octet = tmp[i];
+      octet >>= 4;
+      *tmp2++ = my_hex_digits[octet&0xF];
+      octet = tmp[i];
+      *tmp2++ = my_hex_digits[octet&0xF];
+   }
+
+   if( tmp_length != length )
+   {
+      *tmp2++ = '.';
+      *tmp2++ = '.';
+      *tmp2++ = '.';
+   }
+
+   *tmp2 = 0;
+
+   pi = proto_tree_add_text( tree, tvb, start, length, "%s%s", str, tmp2start );
+
+   g_free( tmp2start );
+
+   return( pi );
+
+} /* end of add_byte_array_text_to_proto_tree() */
+
+
+/* Dissect EPATH */
+static void
+dissect_epath( tvbuff_t *tvb, proto_item *epath_item, int offset, int path_length )
+{
+   int pathpos, temp_data, temp_data2, seg_size, i, temp_word;
+   unsigned char segment_type, opt_link_size;
+   proto_tree *path_tree, *port_tree, *net_tree;
+   proto_item *qi, *cia_item, *ds_item;
+   proto_tree *e_key_tree, *cia_tree, *ds_tree;
+   proto_item *mcpi, *port_item, *net_item;
+   proto_tree *mc_tree;
+
+   /* Create a sub tree for the epath */
+   path_tree = proto_item_add_subtree( epath_item, ett_path );
+
+   proto_tree_add_item_hidden(path_tree, hf_cip_epath,
+							   tvb, offset, path_length, TRUE );
+
+   pathpos = 0;
+
+   while( pathpos < path_length )
+   {
+      /* Get segement type */
+      segment_type = tvb_get_guint8( tvb, offset + pathpos );
+
+      /* Determine the segment type */
+
+      switch( segment_type & CI_SEGMENT_TYPE_MASK )
+      {
+      case CI_PORT_SEGMENT:
+
+         port_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 0, "Port Segment" );
+         port_tree = proto_item_add_subtree( port_item, ett_port_path );
+
+         /* Add port number */
+         proto_tree_add_item( port_tree, hf_cip_port, tvb, offset + pathpos, 1, TRUE );
+         proto_item_append_text( epath_item, "Port: %d", ( segment_type & 0x0F ) );
+         proto_item_append_text( port_item, ": Port: %d", ( segment_type & 0x0F ) );
+
+         if( segment_type & 0x10 )
+         {
+            /* Add Extended Link Address flag */
+            proto_tree_add_text( port_tree, tvb, offset+pathpos, 1, "Extended Link Address: TRUE" );
+
+            /* Add size of extended link address */
+            opt_link_size = tvb_get_guint8( tvb, offset + pathpos + 1 );
+            proto_tree_add_text( port_tree, tvb, offset+pathpos+1, 1, "Link Address Size: %d", opt_link_size  );
+
+            /* Add extended link address */
+            proto_tree_add_item( port_tree, hf_cip_link_address_string, tvb, offset+pathpos+2, opt_link_size, FALSE );
+            proto_item_append_text( epath_item, ", Address: %s", tvb_format_text(tvb, offset+pathpos+2, opt_link_size) );
+            proto_item_append_text( port_item,  ", Address: %s", tvb_format_text(tvb, offset+pathpos+2, opt_link_size) );
+
+            /* Pad byte */
+            if( opt_link_size % 2 )
+            {
+              proto_item_set_len( port_item, 3 + opt_link_size );
+              pathpos = pathpos + 3 + opt_link_size;
+            }
+            else
+            {
+              proto_item_set_len( port_item, 2 + opt_link_size );
+              pathpos = pathpos + 2 + opt_link_size;
+            }
+         }
+         else
+         {
+            /* Add Extended Link Address flag */
+            proto_tree_add_text( port_tree, tvb, offset+pathpos, 1, "Extended Link Address: FALSE" );
+
+            /* Add Link Address */
+            proto_tree_add_item( port_tree, hf_cip_link_address_byte, tvb, offset+pathpos+1, 1, FALSE );
+            proto_item_append_text( epath_item, ", Address: %d",tvb_get_guint8( tvb, offset + pathpos + 1 ) );
+            proto_item_append_text( port_item,  ", Address: %d",tvb_get_guint8( tvb, offset + pathpos + 1 ) );
+
+            proto_item_set_len( port_item, 2 );
+            pathpos += 2;
+         }
+
+         break;
+
+      case CI_LOGICAL_SEGMENT:
+
+         /* Logical segment, determin the logical type */
+
+         switch( segment_type & CI_LOGICAL_SEG_TYPE_MASK )
+         {
+         case CI_LOGICAL_SEG_CLASS_ID:
+
+            /* Logical Class ID, do a format check */
+
+   		   if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_8_BIT )
+   		   {
+   		      temp_data = tvb_get_guint8( tvb, offset + pathpos + 1 );
+               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 2, "8-Bit Logical Class Segment (0x%02X)", segment_type );
+
+               /* Create a sub tree for the class */
+               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
+
+               /* Display the 8-bit class number */
+               proto_tree_add_item( cia_tree, hf_cip_class8, tvb, offset + pathpos + 1, 1, TRUE );
+               proto_item_append_text( epath_item, "%s", val_to_str( temp_data, cip_class_names_vals , "Class: 0x%02X" ) );
+
+               /* 2 bytes of path used */
+               pathpos += 2;
+            }
+            else if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_16_BIT )
+            {
+               temp_data = tvb_get_letohs( tvb, offset + pathpos + 2 );
+               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 4, "16-Bit Logical Class Segment (0x%02X)", segment_type );
+
+               /* Create a sub tree for the class */
+               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
+
+               /* Display the 16-bit class number */
+               proto_tree_add_item( cia_tree, hf_cip_class16, tvb, offset + pathpos + 2, 2, TRUE );
+               proto_item_append_text( epath_item, "%s", val_to_str( temp_data, cip_class_names_vals , "Class: 0x%04X" ) );
+
+               /* 4 bytes of path used */
+               pathpos += 4;
+            }
+            else if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_32_BIT )
+            {
+               temp_data = tvb_get_letohl( tvb, offset + pathpos + 2 );
+               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 6, "32-Bit Logical Instance Segment (0x%02X)", segment_type );
+
+               /* Create a sub tree for the class */
+               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
+
+               /* Display the 32-bit class number */
+               proto_tree_add_item( cia_tree, hf_cip_class32, tvb, offset + pathpos + 2, 4, TRUE );
+               proto_item_append_text( epath_item, "%s", val_to_str( temp_data, cip_class_names_vals , "Class: 0x%08X" ) );
+
+               /* 6 bytes of path used */
+               pathpos += 6;
+            }
+            else
+            {
+               /* Unsupported logical segment format */
+               proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Logical Segment Format" );
+               return;
+            }
+            break;
+
+
+         case CI_LOGICAL_SEG_INST_ID:
+
+            /* Logical Instance ID, do a format check */
+
+   		   if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_8_BIT )
+   		   {
+   		      temp_data = tvb_get_guint8( tvb, offset + pathpos + 1 );
+               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 2, "8-Bit Logical Instance Segment (0x%02X)", segment_type );
+
+               /* Create a sub tree for the instance */
+               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
+
+               /* Display the 8-bit instance number */
+               proto_tree_add_item( cia_tree, hf_cip_instance8, tvb, offset + pathpos + 1, 1, TRUE );
+               proto_item_append_text( epath_item, "Instance: 0x%02X", temp_data );
+
+               /* 2 bytes of path used */
+               pathpos += 2;
+            }
+            else if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_16_BIT )
+            {
+               temp_data = tvb_get_letohs( tvb, offset + pathpos + 2 );
+               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 4, "16-Bit Logical Instance Segment (0x%02X)", segment_type );
+
+               /* Create a sub tree for the instance */
+               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
+
+               /* Display the 16-bit instance number */
+               proto_tree_add_item( cia_tree, hf_cip_instance16, tvb, offset + pathpos + 2, 2, TRUE );
+               proto_item_append_text( epath_item, "Instance: 0x%04X", temp_data );
+
+               /* 4 bytes of path used */
+               pathpos += 4;
+            }
+            else if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_32_BIT )
+            {
+               temp_data = tvb_get_letohl( tvb, offset + pathpos + 2 );
+               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 6, "32-Bit Logical Instance Segment (0x%02X)", segment_type );
+
+               /* Create a sub tree for the instance */
+               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
+
+               /* Display the 32-bit instance number */
+               proto_tree_add_item( cia_tree, hf_cip_instance32, tvb, offset + pathpos + 2, 4, TRUE );
+               proto_item_append_text( epath_item, "Instance: 0x%08X", temp_data );
+
+
+               /* 6 bytes of path used */
+               pathpos += 6;
+            }
+            else
+            {
+               /* Unsupported logical segment format */
+               proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Logical Segment Format" );
+               return;
+            }
+            break;
+
+
+         case CI_LOGICAL_SEG_ATTR_ID:
+
+            /* Logical Attribute ID, do a format check */
+
+   		   if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_8_BIT )
+   		   {
+   		      temp_data = tvb_get_guint8( tvb, offset + pathpos + 1 );
+               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 2, "8-Bit Logical Attribute Segment (0x%02X)", segment_type );
+
+               /* Create a sub tree for the attribute */
+               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
+
+               /* Display the 8-bit attribute number */
+               proto_tree_add_item( cia_tree, hf_cip_attribute8, tvb, offset + pathpos + 1, 1, TRUE );
+               proto_item_append_text( epath_item, "Attribute: 0x%02X", temp_data );
+
+               /* 2 bytes of path used */
+               pathpos += 2;
+            }
+            else if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_16_BIT )
+            {
+               temp_data = tvb_get_letohs( tvb, offset + pathpos + 2 );
+               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 4, "16-Bit Logical Attribute Segment (0x%02X)", segment_type );
+
+               /* Create a sub tree for the attribute */
+               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
+
+               /* Display the 16-bit attribute number */
+               proto_tree_add_item( cia_tree, hf_cip_attribute16, tvb, offset + pathpos + 2, 2, TRUE );
+               proto_item_append_text( epath_item, "Attribute: 0x%04X", temp_data );
+
+               /* 4 bytes of path used */
+               pathpos += 4;
+            }
+            else if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_32_BIT )
+            {
+               temp_data = tvb_get_letohl( tvb, offset + pathpos + 2 );
+               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 6, "32-Bit Logical Attribute Segment (0x%02X)", segment_type );
+
+               /* Create a sub tree for the attribute */
+               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
+
+               /* Display the 32-bit attribute number */
+               proto_tree_add_item( cia_tree, hf_cip_attribute32, tvb, offset + pathpos + 2, 4, TRUE );
+               proto_item_append_text( epath_item, "Attribute: 0x%08X", temp_data );
+
+               /* 6 bytes of path used */
+               pathpos += 6;
+            }
+            else
+            {
+               /* Unsupported logical segment format */
+               proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Logical Segment Format" );
+               return;
+            }
+            break;
+
+
+         case CI_LOGICAL_SEG_CON_POINT:
+
+            /* Logical Connection point , do a format check */
+
+   		   if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_8_BIT )
+   		   {
+   		      temp_data = tvb_get_guint8( tvb, offset + pathpos + 1 );
+               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 2, "8-Bit Logical Connection Point Segment (0x%02X)", segment_type );
+
+               /* Create a sub tree for the connection point */
+               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
+
+               /* Display the 8-bit connection point number */
+               proto_tree_add_item( cia_tree, hf_cip_conpoint8, tvb, offset + pathpos + 1, 1, TRUE );
+               proto_item_append_text( epath_item, "Connection Point: 0x%02X", temp_data );
+
+               /* 2 bytes of path used */
+               pathpos += 2;
+            }
+            else if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_16_BIT )
+            {
+               temp_data = tvb_get_letohs( tvb, offset + pathpos + 2 );
+               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 4, "16-Bit Logical Connection Point Segment (0x%02X)", segment_type );
+
+               /* Create a sub tree for the connection point */
+               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
+
+               /* Display the 16-bit connection point number */
+               proto_tree_add_item( cia_tree, hf_cip_conpoint16, tvb, offset + pathpos + 2, 2, TRUE );
+               proto_item_append_text( epath_item, "Connection Point: 0x%04X", temp_data );
+
+               /* 4 bytes of path used */
+               pathpos += 4;
+            }
+            else if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_32_BIT )
+            {
+               temp_data = tvb_get_letohl( tvb, offset + pathpos + 2 );
+               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 6, "32-Bit Logical Connection Point Segment (0x%02X)", segment_type );
+
+               /* Create a sub tree for the connection point */
+               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
+
+               /* Display the 32-bit connection point number */
+               proto_tree_add_item( cia_tree, hf_cip_conpoint32, tvb, offset + pathpos + 2, 4, TRUE );
+               proto_item_append_text( epath_item, "Connection Point: 0x%08X", temp_data );
+
+               /* 6 bytes of path used */
+               pathpos += 6;
+            }
+            else
+            {
+               /* Unsupported logical segment format */
+               proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Logical Segment Format" );
+               return;
+            }
+            break;
+
+
+         case CI_LOGICAL_SEG_SPECIAL:
+
+            /* Logical Special ID, the only logical format sepcifyed is electronic key */
+
+            if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_E_KEY )
+            {
+               /* Get the Key Format */
+               temp_data = tvb_get_guint8( tvb, offset + pathpos + 1 );
+
+               if( temp_data == CI_E_KEY_FORMAT_VAL )
+               {
+                  qi = proto_tree_add_text( path_tree, tvb, offset + pathpos, 10, "Electronic Key Segment (0x%02X): ",segment_type );
+
+                  /* Create a sub tree for the IOI */
+                  e_key_tree = proto_item_add_subtree( qi, ett_ekey_path );
+
+                  /* Print the key type */
+                  proto_tree_add_text( e_key_tree, tvb, offset + pathpos + 1, 1, "Key Format: 0x%02X", temp_data );
+
+                  /* Get the Vendor ID */
+      		      temp_data = tvb_get_letohs( tvb, offset + pathpos + 2 );
+                  proto_tree_add_item( e_key_tree, hf_cip_vendor, tvb, offset + pathpos + 2, 2, TRUE);
+                  proto_item_append_text( qi, "VendorID: 0x%04X", temp_data );
+
+                  /* Get Device Type */
+   		         temp_data = tvb_get_letohs( tvb, offset + pathpos + 4 );
+   		         proto_tree_add_item( e_key_tree, hf_cip_devtype, tvb, offset + pathpos + 4, 2, TRUE);
+                  proto_item_append_text( qi, ", DevTyp: 0x%04X", temp_data );
+
+                  /* Product Code */
+   		         temp_data = tvb_get_letohs( tvb, offset + pathpos + 6 );
+                  proto_tree_add_text( e_key_tree, tvb, offset + pathpos + 6, 2, "Product Code: 0x%04X", temp_data );
+
+                  /* Major revision/Compatibility */
+   		         temp_data = tvb_get_guint8( tvb, offset + pathpos + 8 );
+
+   					/* Add Major revision/Compatibility tree */
+   					mcpi = proto_tree_add_text(e_key_tree, tvb, offset + pathpos + 8, 1, "Compatibility ");
+   					mc_tree = proto_item_add_subtree(mcpi, ett_mcsc);
+
+   					/* Add Compatibility bit info */
+                  proto_tree_add_item(mc_tree, hf_cip_fwo_comp,
+   							tvb, offset + pathpos + 8, 1, TRUE );
+
+                  proto_item_append_text( mcpi, "%s, Major Revision: %d",
+                              val_to_str( ( temp_data & 0x80 )>>7, cip_com_bit_vals , "" ),
+                              temp_data & 0x7F );
+
+   					/* Major revision */
+   					proto_tree_add_item(mc_tree, hf_cip_fwo_mrev,
+   							tvb, offset + pathpos + 8, 1, TRUE );
+
+                  /* Minor revision */
+                  temp_data2 = tvb_get_guint8( tvb, offset + pathpos + 9 );
+                  proto_tree_add_text( e_key_tree, tvb, offset + pathpos + 9, 1, "Minor Revision: %d", temp_data2 );
+
+                  proto_item_append_text( qi, ", %d.%d", ( temp_data & 0x7F ), temp_data2 );
+
+                  proto_item_append_text(epath_item, "[Key]" );
+
+                  /* Increment the path pointer */
+                  pathpos += 10;
+               }
+               else
+               {
+                  /* Unsupported electronic key format */
+                  proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Electronic Key Format" );
+                  return;
+               }
+            }
+            else
+            {
+               /* Unsupported special segment format */
+               proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Special Segment Format" );
+               return;
+            }
+            break;
+
+         default:
+
+            /* Unsupported logical segment type */
+            proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Logical Segment Type" );
+            return;
+
+         } /* end of switch( segment_type & CI_LOGICAL_SEG_TYPE_MASK ) */
+         break;
+
+
+      case CI_DATA_SEGMENT:
+
+         /* Data segment, determin the logical type */
+
+         switch( segment_type )
+         {
+            case CI_DATA_SEG_SIMPLE:
+
+               /* Simple data segment */
+               ds_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 1, "Simple Data Segment (0x%02X)", segment_type );
+
+               /* Create a sub tree */
+               ds_tree = proto_item_add_subtree( ds_item, ett_data_seg );
+
+               /* Segment size */
+               seg_size = tvb_get_guint8( tvb, offset + pathpos+1 )*2;
+               proto_tree_add_text( ds_tree, tvb, offset + pathpos+1, 1, "Data Size: %d (words)", seg_size/2 );
+
+               /* Segment data  */
+               if( seg_size != 0 )
+               {
+                  qi = proto_tree_add_text( ds_tree, tvb, offset + pathpos+2, 0, "Data: " );
+
+                  for( i=0; i < seg_size/2; i ++ )
+                  {
+                    temp_word = tvb_get_letohs( tvb, offset + pathpos+2+(i*2) );
+                    proto_item_append_text(qi, " 0x%04X", temp_word );
+                  }
+
+                  proto_item_set_len(qi, seg_size);
+               }
+
+               proto_item_set_len( ds_item, 2 + seg_size );
+               pathpos = pathpos + 2 + seg_size;
+
+               proto_item_append_text(epath_item, "[Data]" );
+
+               break;
+
+            case CI_DATA_SEG_SYMBOL:
+
+               /* ANSI extended symbol segment */
+               ds_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 1, "Extended Symbol Segment (0x%02X)", segment_type );
+
+               /* Create a sub tree */
+               ds_tree = proto_item_add_subtree( ds_item, ett_data_seg );
+
+               /* Segment size */
+               seg_size = tvb_get_guint8( tvb, offset + pathpos+1 );
+               proto_tree_add_text( ds_tree, tvb, offset + pathpos+1, 1, "Data Size: %d", seg_size );
+
+               /* Segment data  */
+               if( seg_size != 0 )
+               {
+                  qi = proto_tree_add_text( ds_tree, tvb, offset + pathpos + 2, seg_size, "Data: %s",
+                        tvb_format_text(tvb, offset + pathpos + 2, seg_size ) );
+
+                  proto_item_append_text(epath_item, "%s", tvb_format_text(tvb, offset + pathpos + 2, seg_size ) );
+                  proto_tree_add_item_hidden( ds_tree, hf_cip_symbol, tvb, offset + pathpos + 2, seg_size, FALSE );
+
+                  if( seg_size %2 )
+                  {
+                     /* We have a PAD BYTE */
+                     proto_tree_add_text( ds_tree, tvb, offset + pathpos + 2 + seg_size, 1, "Pad Byte (0x%02X)",
+                         tvb_get_guint8( tvb, offset + pathpos + 2 + seg_size ) );
+                     pathpos++;
+                     seg_size++;
+                  }
+               }
+
+               proto_item_set_len( ds_item, 2 + seg_size );
+               pathpos = pathpos + 2 + seg_size;
+
+               break;
+
+            default:
+               proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Sub-Segment Type" );
+               return;
+
+            } /* End of switch sub-type */
+
+            break;
+
+      case CI_NETWORK_SEGMENT:
+
+         /* Network segment -Determine the segment sub-type */
+
+         switch( segment_type & CI_NETWORK_SEG_TYPE_MASK )
+         {
+           case CI_NETWORK_SEG_SCHEDULE:
+               net_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 2, "Network Segment - Schedule" );
+               net_tree = proto_item_add_subtree( net_item, ett_port_path );
+
+               proto_tree_add_text( net_tree, tvb, offset + pathpos + 1, 1, "Multiplier/Phase: %02X", tvb_get_guint8( tvb, offset + pathpos + 1 ) );
+
+               /* 2 bytes of path used */
+               pathpos += 2;
+               break;
+
+            case CI_NETWORK_SEG_FIXED_TAG:
+               net_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 2, "Network Segment - Fixed Tag" );
+               net_tree = proto_item_add_subtree( net_item, ett_port_path );
+
+               proto_tree_add_text( net_tree, tvb, offset + pathpos + 1, 1, "Fixed Tag: %02X", tvb_get_guint8( tvb, offset + pathpos + 1 ) );
+
+               /* 2 bytes of path used */
+               pathpos += 2;
+               break;
+
+            case CI_NETWORK_SEG_PROD_INHI:
+               net_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 2, "Network Segment - Production Inhibit" );
+               net_tree = proto_item_add_subtree( net_item, ett_port_path );
+
+               proto_tree_add_text( net_tree, tvb, offset + pathpos + 1, 1, "Production Inhibit Time: %dms", tvb_get_guint8( tvb, offset + pathpos + 1 ) );
+
+               /* 2 bytes of path used */
+               pathpos += 2;
+               break;
+
+            default:
+               proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Sub-Segment Type" );
+               return;
+
+            } /* End of switch sub-type */
+
+      break;
+
+     default:
+
+         /* Unsupported segment type */
+         proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Segment Type" );
+         return;
+
+      } /* end of switch( segment_type & CI_SEGMENT_TYPE_MASK ) */
+
+      /* Next path segment */
+      if( pathpos < path_length )
+         proto_item_append_text( epath_item, ", " );
+
+   } /* end of while( pathpos < path_length ) */
+
+} /* end of dissect_epath() */
+
+
+static void
+dissect_cip_data( proto_tree *item_tree, tvbuff_t *tvb, int offset, int item_length, packet_info *pinfo )
+{
+   proto_item *pi, *rrsc_item, *ncppi, *ar_item, *temp_item, *temp_item2, *status_item;
+	proto_tree *temp_tree, *rrsc_tree, *ncp_tree, *cmd_data_tree, *status_tree;
+	int req_path_size, conn_path_size, temp_data;
+	unsigned char gen_status;
+   unsigned char add_stat_size;
+   unsigned char temp_byte, route_path_size;
+   unsigned char app_rep_size, i;
+   int msg_req_siz, num_services, serv_offset;
+
+
+   /* Add Service code & Request/Response tree */
+	rrsc_item = proto_tree_add_text( item_tree, tvb, offset, 1, "Service: " );
+	rrsc_tree = proto_item_add_subtree( rrsc_item, ett_rrsc );
+
+	/* Add Request/Response */
+   proto_tree_add_item( rrsc_tree, hf_cip_rr, tvb, offset, 1, TRUE );
+
+   proto_item_append_text( rrsc_item, "%s (%s)",
+               val_to_str( ( tvb_get_guint8( tvb, offset ) & 0x7F ),
+                  cip_sc_vals , "Unknown Service (%x)"),
+               val_to_str( ( tvb_get_guint8( tvb, offset ) & 0x80 )>>7,
+                  cip_sc_rr, "") );
+
+	/* Add Service code */
+	proto_tree_add_item(rrsc_tree, hf_cip_sc, tvb, offset, 1, TRUE );
+
+	if( tvb_get_guint8( tvb, offset ) & 0x80 )
+	{
+	   /* Response message */
+	   status_item = proto_tree_add_text( item_tree, tvb, offset+2, 1, "Status: " );
+	   status_tree = proto_item_add_subtree( status_item, ett_status_item );
+
+		/* Add general status */
+		gen_status = tvb_get_guint8( tvb, offset+2 );
+		proto_tree_add_item(status_tree, hf_cip_genstat, tvb, offset+2, 1, TRUE );
+		proto_item_append_text( status_item, "%s", val_to_str( ( tvb_get_guint8( tvb, offset+2 ) ),
+                     cip_gs_vals , "Unknown Response (%x)")   );
+
+      /* Add reply status to info column */
+      if(check_col(pinfo->cinfo, COL_INFO))
+      {
+         col_append_fstr( pinfo->cinfo, COL_INFO, "%s",
+                  val_to_str( ( tvb_get_guint8( tvb, offset+2 ) ),
+                     cip_gs_vals , "Unknown Response (%x)") );
+      }
+
+      /* Add additional status size */
+      proto_tree_add_text( status_tree, tvb, offset+3, 1, "Additional Status Size: %d (word)",
+         tvb_get_guint8( tvb, offset+3 ) );
+
+		add_stat_size = tvb_get_guint8( tvb, offset+3 ) * 2;
+
+		if( add_stat_size )
+		{
+         proto_item_append_text( status_item, ", Extended:" );
+
+         /* Add additional status */
+         pi = proto_tree_add_text( status_tree, tvb, offset+4, add_stat_size, "Additional Status:" );
+
+         for( i=0; i < add_stat_size/2; i ++ )
+         {
+           proto_item_append_text( pi, " 0x%04X", tvb_get_letohs( tvb, offset+4+(i*2) ) );
+           proto_item_append_text( status_item, " 0x%04X", tvb_get_letohs( tvb, offset+4+(i*2) ) );
+         }
+		}
+
+		proto_item_set_len( status_item, 2 + add_stat_size );
+
+      /* If there is any command specific data create a sub-tree for it */
+      if( ( item_length-4-add_stat_size ) != 0 )
+      {
+         pi = proto_tree_add_text( item_tree, tvb, offset+4+add_stat_size, item_length-4-add_stat_size, "Command Specific data" );
+         cmd_data_tree = proto_item_add_subtree( pi, ett_cmd_data );
+
+		   if( gen_status == CI_GRC_SUCCESS )
+   		{
+   			/* Success responses */
+
+   			if( ( tvb_get_guint8( tvb, offset ) & 0x7F ) == SC_FWD_OPEN )
+            {
+               /* Forward open Response (Success) */
+
+               /* Display originator to target connection ID */
+               temp_data = tvb_get_letohl( tvb, offset+4+add_stat_size );
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size, 4, "O->T Network Connection ID: 0x%08X", temp_data );
+
+               /* Display target to originator connection ID */
+               temp_data = tvb_get_letohl( tvb, offset+4+add_stat_size+4 );
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+4, 4, "T->O Network Connection ID: 0x%08X", temp_data );
+
+               /* Display connection serial number */
+               temp_data = tvb_get_letohs( tvb, offset+4+add_stat_size+8 );
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+8, 2, "Connection Serial Number: 0x%04X", temp_data );
+
+               /* Display the originator vendor id */
+               proto_tree_add_item( cmd_data_tree, hf_cip_vendor, tvb, offset+4+add_stat_size+10, 2, TRUE);
+
+               /* Display the originator serial number */
+               temp_data = tvb_get_letohl( tvb, offset+4+add_stat_size+12 );
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+12, 4, "Originator Serial Number: 0x%08X", temp_data );
+
+               /* Display originator to target actual packet interval */
+               temp_data = tvb_get_letohl( tvb, offset+4+add_stat_size+16 );
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+16, 4, "O->T API: %dms (0x%08X)", temp_data / 1000, temp_data );
+
+               /* Display originator to target actual packet interval */
+               temp_data = tvb_get_letohl( tvb, offset+4+add_stat_size+20 );
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+20, 4, "T->O API: %dms (0x%08X)", temp_data / 1000, temp_data );
+
+               /* Display the application reply size */
+               app_rep_size = tvb_get_guint8( tvb, offset+4+add_stat_size+24 ) * 2;
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+24, 1, "Application Reply Size: %d (words)", app_rep_size / 2 );
+
+               /* Display the Reserved byte */
+               temp_byte = tvb_get_guint8( tvb, offset+4+add_stat_size+25 );
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+25, 1, "Reserved: 0x%02X", temp_byte );
+
+               if( app_rep_size != 0 )
+               {
+                  /* Display application Reply data */
+                  ar_item = proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+26, app_rep_size, "Application Reply:" );
+
+                  for( i=0; i < app_rep_size; i++ )
+                  {
+                    temp_byte = tvb_get_guint8( tvb, offset+4+add_stat_size+26+i );
+                    proto_item_append_text(ar_item, " 0x%02X", temp_byte );
+                  }
+
+                } /* End of if reply data */
+
+            } /* End of if forward open response */
+   			else if( ( tvb_get_guint8( tvb, offset ) & 0x7F ) == SC_FWD_CLOSE )
+            {
+               /* Forward close response (Success) */
+
+               /* Display connection serial number */
+               temp_data = tvb_get_letohs( tvb, offset+4+add_stat_size );
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size, 2, "Connection Serial Number: 0x%04X", temp_data );
+
+               /* Display the originator vendor id */
+               proto_tree_add_item( cmd_data_tree, hf_cip_vendor, tvb, offset+4+add_stat_size+2, 2, TRUE);
+
+               /* Display the originator serial number */
+               temp_data = tvb_get_letohl( tvb, offset+4+add_stat_size+4 );
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+4, 4, "Originator Serial Number: 0x%08X", temp_data );
+
+               /* Display the application reply size */
+               app_rep_size = tvb_get_guint8( tvb, offset+4+add_stat_size+8 ) * 2;
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+8, 1, "Application Reply Size: %d (words)", app_rep_size / 2 );
+
+               /* Display the Reserved byte */
+               temp_byte = tvb_get_guint8( tvb, offset+4+add_stat_size+9 );
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+9, 1, "Reserved: 0x%02X", temp_byte );
+
+               if( app_rep_size != 0 )
+               {
+                  /* Display application Reply data */
+                  ar_item = proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+10, app_rep_size, "Application Reply:" );
+
+                  for( i=0; i < app_rep_size; i ++ )
+                  {
+                    temp_byte = tvb_get_guint8( tvb, offset+4+add_stat_size+10+i );
+                    proto_item_append_text(ar_item, " 0x%02X", temp_byte );
+                  }
+
+                } /* End of if reply data */
+
+            } /* End of if forward close response */
+            else if( ( tvb_get_guint8( tvb, offset ) & 0x7F ) == SC_UNCON_SEND )
+            {
+               /* Unconnected send response (Success) */
+
+               /* Display service response data */
+               add_byte_array_text_to_proto_tree( cmd_data_tree, tvb, offset+4+add_stat_size, item_length-4-add_stat_size, "Data: " );
+            }
+            else if( ( tvb_get_guint8( tvb, offset ) & 0x7F ) == SC_MULT_SERV_PACK )
+            {
+               /* Multiple Service Reply (Success)*/
+
+               /* Add number of replies */
+               num_services = tvb_get_letohs( tvb, offset+4+add_stat_size );
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size, 2, "Number of Replies: %d", num_services );
+
+               /* Add replies */
+               temp_item = proto_tree_add_text( cmd_data_tree, tvb, offset+2+add_stat_size+4, num_services*2, "Offsets: " );
+
+               for( i=0; i < num_services; i++ )
+               {
+                  int serv_length;
+
+                  serv_offset = tvb_get_letohs( tvb, offset+6+add_stat_size+(i*2) );
+
+                  if( i == (num_services-1) )
+                  {
+                     /* Last service to add */
+                     proto_item_append_text(temp_item, "%d", serv_offset );
+                     serv_length = item_length-add_stat_size-serv_offset-4;
+                  }
+                  else
+                  {
+                     proto_item_append_text(temp_item, "%d, ", serv_offset );
+                     serv_length = tvb_get_letohs( tvb, offset+6+add_stat_size+((i+1)*2) ) - serv_offset;
+                  }
+
+                  temp_item2 = proto_tree_add_text( cmd_data_tree, tvb, offset+serv_offset+4, serv_length, "Service Reply #%d", i+1 );
+                  temp_tree = proto_item_add_subtree( temp_item2, ett_mult_ser );
+
+                  /*
+                  ** We call our selves again to disect embedded packet
+                  */
+
+                  if(check_col(pinfo->cinfo, COL_INFO))
+                     col_append_fstr( pinfo->cinfo, COL_INFO, ", ");
+
+                  dissect_cip_data( temp_tree, tvb, offset+serv_offset+4, serv_length, pinfo );
+               }
+            } /* End if Multiple service Packet */
+            else if( ( tvb_get_guint8( tvb, offset ) & 0x7F ) == SC_GET_ATT_LIST )
+            {
+               /* Get Attribute List Reply (Success)*/
+
+               int att_count;
+
+               /* Add Attribute Count */
+               att_count = tvb_get_letohs( tvb, offset+4+add_stat_size );
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size, 2, "Attribute Count: %d", att_count );
+
+               /* Add the data */
+               add_byte_array_text_to_proto_tree( cmd_data_tree, tvb, offset+6+add_stat_size, item_length-6-add_stat_size, "Data: " );
+
+            } /* End if Multiple service Packet */
+            else
+   			{
+   			   /* Add data */
+               add_byte_array_text_to_proto_tree( cmd_data_tree, tvb, offset+4+add_stat_size, item_length-4-add_stat_size, "Data: " );
+   		   } /* end of check service code */
+
+   	   }
+         else
+         {
+            /* Error responses */
+
+            if( ( ( tvb_get_guint8( tvb, offset ) & 0x7F ) == SC_FWD_OPEN ) ||
+                ( ( tvb_get_guint8( tvb, offset ) & 0x7F ) == SC_FWD_CLOSE ) )
+            {
+               /* Forward open and forward close error response look the same */
+
+               /* Display connection serial number */
+               temp_data = tvb_get_letohs( tvb, offset+4+add_stat_size );
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size, 2, "Connection Serial Number: 0x%04X", temp_data );
+
+               /* Display the originator vendor id */
+               proto_tree_add_item( cmd_data_tree, hf_cip_vendor, tvb, offset+4+add_stat_size+2, 2, TRUE);
+
+               /* Display the originator serial number */
+               temp_data = tvb_get_letohl( tvb, offset+4+add_stat_size+4 );
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+4, 4, "Originator Serial Number: 0x%08X", temp_data );
+
+               /* Display remaining path size */
+               temp_data = tvb_get_guint8( tvb, offset+4+add_stat_size+8 );
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+8, 1, "Remaining Path Size: %d", temp_data );
+
+               /* Display reserved data */
+               temp_data = tvb_get_guint8( tvb, offset+4+add_stat_size+9 );
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+9, 1, "Reserved: 0x%02X", temp_data );
+            }
+            else if( ( tvb_get_guint8( tvb, offset ) & 0x7F ) == SC_UNCON_SEND )
+            {
+               /* Unconnected send response (Unsuccess) */
+
+               /* Display remaining path size */
+               temp_data = tvb_get_guint8( tvb, offset+4+add_stat_size);
+               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size, 1, "Remaining Path Size: %d", temp_data );
+            }
+            else
+            {
+               /* Add data */
+               add_byte_array_text_to_proto_tree( cmd_data_tree, tvb, offset+4+add_stat_size, item_length-4-add_stat_size, "Data: " );
+            }
+
+         } /* end of if-else( CI_CRC_SUCCESS ) */
+
+      } /* End of if command-specific data present */
+
+	} /* End of if reply */
+	else
+	{
+	   /* Request message */
+
+      /* Add service to info column */
+      if(check_col(pinfo->cinfo, COL_INFO))
+      {
+         col_append_fstr( pinfo->cinfo, COL_INFO, "%s",
+                  val_to_str( ( tvb_get_guint8( tvb, offset ) & 0x7F ),
+                     cip_sc_vals , "Unknown Service (%x)") );
+      }
+
+	   /* Add path size to tree */
+	   req_path_size = tvb_get_guint8( tvb, offset+1 )*2;
+	   proto_tree_add_text( item_tree, tvb, offset+1, 1, "Request Path Size: %d (words)", req_path_size/2 );
+
+      /* Add the epath */
+      pi = proto_tree_add_text(item_tree, tvb, offset+2, req_path_size, "Request Path: ");
+      dissect_epath( tvb, pi, offset+2, req_path_size );
+
+      /* If there is any command specific data creat a sub-tree for it */
+      if( (item_length-req_path_size-2) != 0 )
+      {
+
+         pi = proto_tree_add_text( item_tree, tvb, offset+2+req_path_size, item_length-req_path_size-2, "Command Specific Data" );
+         cmd_data_tree = proto_item_add_subtree( pi, ett_cmd_data );
+
+         /* Check what service code that recived */
+
+         if( tvb_get_guint8( tvb, offset ) == SC_FWD_OPEN )
+         {
+            /* Forward open Request*/
+
+            /* Display the priority/tick timer */
+            temp_byte = tvb_get_guint8( tvb, offset+2+req_path_size );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size, 1, "Priority/Time_tick: 0x%02X", temp_byte );
+
+            /* Display the time-out ticks */
+            temp_data = tvb_get_guint8( tvb, offset+2+req_path_size+1 );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+1, 1, "Time-out_ticks: %d", temp_data );
+
+            /* Display the actual time out */
+            temp_data = ( 1 << ( temp_byte & 0x0F ) ) * temp_data;
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size, 2, "Actual Time Out: %dms", temp_data );
+
+            /* Display originator to taget connection ID */
+            temp_data = tvb_get_letohl( tvb, offset+2+req_path_size+2 );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+2, 4, "O->T Network Connection ID: 0x%08X", temp_data );
+
+            /* Display target to originator connection ID */
+            temp_data = tvb_get_letohl( tvb, offset+2+req_path_size+6 );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+6, 4, "T->O Network Connection ID: 0x%08X", temp_data );
+
+            /* Display connection serial number */
+            temp_data = tvb_get_letohs( tvb, offset+2+req_path_size+10 );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+10, 2, "Connection Serial Number: 0x%04X", temp_data );
+
+            /* Display the originator vendor id */
+            proto_tree_add_item( cmd_data_tree, hf_cip_vendor, tvb, offset+2+req_path_size+12, 2, TRUE);
+
+            /* Display the originator serial number */
+            temp_data = tvb_get_letohl( tvb, offset+2+req_path_size+14 );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+14, 4, "Originator Serial Number: 0x%08X", temp_data );
+
+            /* Display the timeout multiplier */
+            temp_data = tvb_get_guint8( tvb, offset+2+req_path_size+18 );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+18, 1, "Connection Timeout Multiplier: %s (%d)", val_to_str( temp_data, cip_con_time_mult_vals , "Reserved" ), temp_data );
+
+            /* Put out an indicator for the reserved bytes */
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+19, 3, "Reserved Data" );
+
+            /* Display originator to target requested packet interval */
+            temp_data = tvb_get_letohl( tvb, offset+2+req_path_size+22 );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+22, 4, "O->T RPI: %dms (0x%08X)", temp_data / 1000, temp_data );
+
+   	      /* Display originator to target network connection patameterts, in a tree */
+   	      temp_data = tvb_get_letohs( tvb, offset+2+req_path_size+26 );
+   	      ncppi = proto_tree_add_text(cmd_data_tree, tvb, offset+2+req_path_size+26, 2, "O->T Network Connection Parameters: 0x%04X", temp_data );
+   	      ncp_tree = proto_item_add_subtree(ncppi, ett_ncp);
+
+            /* Add the data to the tree */
+            proto_tree_add_item(ncp_tree, hf_cip_fwo_own,
+   					tvb, offset+2+req_path_size+26, 2, TRUE );
+   			proto_tree_add_item(ncp_tree, hf_cip_fwo_typ,
+   					tvb, offset+2+req_path_size+26, 2, TRUE );
+            proto_tree_add_item(ncp_tree, hf_cip_fwo_prio,
+   					tvb, offset+2+req_path_size+26, 2, TRUE );
+   			proto_tree_add_item(ncp_tree, hf_cip_fwo_fixed_var,
+   					tvb, offset+2+req_path_size+26, 2, TRUE );
+   			proto_tree_add_item(ncp_tree, hf_cip_fwo_con_size,
+   					tvb, offset+2+req_path_size+26, 2, TRUE );
+
+            /* Display target to originator requested packet interval */
+            temp_data = tvb_get_letohl( tvb, offset+2+req_path_size+28 );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+28, 4, "T->O RPI: %dms (0x%08X)", temp_data / 1000, temp_data );
+
+   	      /* Display target to originator network connection patameterts, in a tree */
+   	      temp_data = tvb_get_letohs( tvb, offset+2+req_path_size+32 );
+   	      ncppi = proto_tree_add_text(cmd_data_tree, tvb, offset+2+req_path_size+32, 2, "T->O Network Connection Parameters: 0x%04X", temp_data );
+   	      ncp_tree = proto_item_add_subtree(ncppi, ett_ncp);
+
+            /* Add the data to the tree */
+            proto_tree_add_item(ncp_tree, hf_cip_fwo_own,
+   					tvb, offset+2+req_path_size+32, 2, TRUE );
+   			proto_tree_add_item(ncp_tree, hf_cip_fwo_typ,
+   					tvb, offset+2+req_path_size+32, 2, TRUE );
+            proto_tree_add_item(ncp_tree, hf_cip_fwo_prio,
+   					tvb, offset+2+req_path_size+32, 2, TRUE );
+   			proto_tree_add_item(ncp_tree, hf_cip_fwo_fixed_var,
+   					tvb, offset+2+req_path_size+32, 2, TRUE );
+   			proto_tree_add_item(ncp_tree, hf_cip_fwo_con_size,
+   					tvb, offset+2+req_path_size+32, 2, TRUE );
+
+            /* Transport type/trigger in tree*/
+            temp_data = tvb_get_guint8( tvb, offset+2+req_path_size+34 );
+
+   	      ncppi = proto_tree_add_text(cmd_data_tree, tvb, offset+2+req_path_size+34, 1, "Transport Type/Trigger: 0x%02X", temp_data );
+   	      ncp_tree = proto_item_add_subtree(ncppi, ett_ncp);
+
+            /* Add the data to the tree */
+            proto_tree_add_item(ncp_tree, hf_cip_fwo_dir,
+   					tvb, offset+2+req_path_size+34, 1, TRUE );
+
+   			proto_tree_add_item(ncp_tree, hf_cip_fwo_trigg,
+   					tvb, offset+2+req_path_size+34, 1, TRUE );
+
+            proto_tree_add_item(ncp_tree, hf_cip_fwo_class,
+   					tvb, offset+2+req_path_size+34, 1, TRUE );
+
+            /* Add path size */
+            conn_path_size = tvb_get_guint8( tvb, offset+2+req_path_size+35 )*2;
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+35, 1, "Connection Path Size: %d (words)", conn_path_size / 2 );
+
+            /* Add the epath */
+            pi = proto_tree_add_text(cmd_data_tree, tvb, offset+2+req_path_size+36, conn_path_size, "Connection Path: ");
+            dissect_epath( tvb, pi, offset+2+req_path_size+36, conn_path_size );
+         }
+         else if( tvb_get_guint8( tvb, offset ) == SC_FWD_CLOSE )
+         {
+            /* Forward Close Request */
+
+            /* Display the priority/tick timer */
+            temp_byte = tvb_get_guint8( tvb, offset+2+req_path_size );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size, 1, "Priority/Time_tick: 0x%02X", temp_byte );
+
+            /* Display the time-out ticks */
+            temp_data = tvb_get_guint8( tvb, offset+2+req_path_size+1 );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+1, 1, "Time-out_ticks: %d", temp_data );
+
+            /* Display the actual time out */
+            temp_data = ( 1 << ( temp_byte & 0x0F ) ) * temp_data;
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size, 2, "Actual Time Out: %dms", temp_data );
+
+            /* Display connection serial number */
+            temp_data = tvb_get_letohs( tvb, offset+2+req_path_size+2 );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+2, 2, "Connection Serial Number: 0x%04X", temp_data );
+
+            /* Display the originator vendor id */
+            proto_tree_add_item( cmd_data_tree, hf_cip_vendor, tvb, offset+2+req_path_size+4, 2, TRUE);
+
+            /* Display the originator serial number */
+            temp_data = tvb_get_letohl( tvb, offset+2+req_path_size+6 );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+6, 4, "Originator Serial Number: 0x%08X", temp_data );
+
+            /* Add the path size */
+            conn_path_size = tvb_get_guint8( tvb, offset+2+req_path_size+10 )*2;
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+10, 1, "Connection Path Size: %d (words)", conn_path_size / 2 );
+
+            /* Add the reserved byte */
+            temp_byte = tvb_get_guint8( tvb, offset+2+req_path_size+11 );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+11, 1, "Reserved: 0x%02X", temp_byte );
+
+            /* Add the EPATH */
+            pi = proto_tree_add_text(cmd_data_tree, tvb, offset+2+req_path_size+12, conn_path_size, "Connection Path: ");
+            dissect_epath( tvb, pi, offset+2+req_path_size+12, conn_path_size );
+
+         } /* End of forward close */
+         else if( tvb_get_guint8( tvb, offset ) == SC_UNCON_SEND )
+         {
+            /* Unconnected send */
+
+            /* Display the priority/tick timer */
+            temp_byte = tvb_get_guint8( tvb, offset+2+req_path_size );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size, 1, "Priority/Time_tick: 0x%02X", temp_byte );
+
+            /* Display the time-out ticks */
+            temp_data = tvb_get_guint8( tvb, offset+2+req_path_size+1 );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+1, 1, "Time-out_ticks: %d", temp_data );
+
+            /* Display the actual time out */
+            temp_data = ( 1 << ( temp_byte & 0x0F ) ) * temp_data;
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size, 2, "Actual Time Out: %dms", temp_data );
+
+            /* Message request size */
+            msg_req_siz = tvb_get_letohs( tvb, offset+2+req_path_size+2 );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+2, 2, "Message Request Size: 0x%04X", msg_req_siz );
+
+            /* Message Request */
+            temp_item = proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+4, msg_req_siz, "Message Request" );
+            temp_tree = proto_item_add_subtree(temp_item, ett_mes_req );
+
+            /*
+            ** We call our selves again to disect embedded packet
+            */
+
+            if(check_col(pinfo->cinfo, COL_INFO))
+               col_append_fstr( pinfo->cinfo, COL_INFO, ": ");
+
+            dissect_cip_data( temp_tree, tvb, offset+2+req_path_size+4, msg_req_siz, pinfo );
+
+            if( msg_req_siz % 2 )
+            {
+               /* Pad byte */
+               proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+4+msg_req_siz, 1, "Pad Byte (0x%02X)",
+                  tvb_get_guint8( tvb, offset+2+req_path_size+4+msg_req_siz ) );
+               msg_req_siz++;	/* include the padding */
+            }
+
+            /* Route Path Size */
+            route_path_size = tvb_get_guint8( tvb, offset+2+req_path_size+4+msg_req_siz )*2;
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+4+msg_req_siz, 1, "Route Path Size: %d (words)", route_path_size/2 );
+
+            /* Reserved */
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+5+msg_req_siz, 1, "Reserved (0x%02X)",
+                tvb_get_guint8( tvb, offset+2+req_path_size+5+msg_req_siz ) );
+
+            /* Route Path */
+            temp_item = proto_tree_add_text(cmd_data_tree, tvb, offset+2+req_path_size+6+msg_req_siz, route_path_size, "Route Path: ");
+            dissect_epath( tvb, temp_item, offset+2+req_path_size+6+msg_req_siz, route_path_size );
+
+         } /* End if unconnected send */
+         else if( tvb_get_guint8( tvb, offset ) == SC_MULT_SERV_PACK )
+         {
+            /* Multiple service packet */
+
+            /* Add number of services */
+            num_services = tvb_get_letohs( tvb, offset+2+req_path_size );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size, 2, "Number of Services: %d", num_services );
+
+            /* Add services */
+            temp_item = proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+2, num_services*2, "Offsets: " );
+
+            for( i=0; i < num_services; i++ )
+            {
+               int serv_length;
+
+               serv_offset = tvb_get_letohs( tvb, offset+4+req_path_size+(i*2) );
+
+               if( i == (num_services-1) )
+               {
+                  /* Last service to add */
+                  serv_length = item_length-2-req_path_size-serv_offset;
+                  proto_item_append_text(temp_item, "%d", serv_offset );
+               }
+               else
+               {
+                  serv_length = tvb_get_letohs( tvb, offset+4+req_path_size+((i+1)*2) ) - serv_offset;
+                  proto_item_append_text(temp_item, "%d, ", serv_offset );
+               }
+
+               temp_item2 = proto_tree_add_text( cmd_data_tree, tvb, offset+serv_offset+6, serv_length, "Service Packet #%d", i+1 );
+               temp_tree = proto_item_add_subtree( temp_item2, ett_mult_ser );
+
+               /*
+               ** We call our selves again to disect embedded packet
+               */
+
+               if(check_col(pinfo->cinfo, COL_INFO))
+                  col_append_fstr( pinfo->cinfo, COL_INFO, ", ");
+
+               dissect_cip_data( temp_tree, tvb, offset+serv_offset+6, serv_length, pinfo );
+            }
+         } /* End if Multiple service Packet */
+         else if( tvb_get_guint8( tvb, offset ) == SC_GET_ATT_LIST )
+         {
+            /* Get attribute list request */
+
+            int att_count;
+
+            /* Add number of services */
+            att_count = tvb_get_letohs( tvb, offset+2+req_path_size );
+            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size, 2, "Attribute Count: %d", att_count );
+
+            /* Add Attribute List */
+            temp_item = proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+2, att_count*2, "Attribute List: " );
+
+            for( i=0; i < att_count; i++ )
+            {
+               if( i == (att_count-1) )
+                  proto_item_append_text(temp_item, "%d",tvb_get_letohs( tvb, offset+4+req_path_size+(i*2) ) );
+               else
+                  proto_item_append_text(temp_item, "%d, ",tvb_get_letohs( tvb, offset+4+req_path_size+(i*2) ) );
+            }
+
+         } /* End of Get attribute list request */
+         else
+         {
+		      /* Add data */
+            add_byte_array_text_to_proto_tree( cmd_data_tree, tvb, offset+2+req_path_size, item_length-req_path_size-2, "Data: " );
+         } /* End of check service code */
+
+      } /* End of if command-specific data present */
+
+	} /* End of if-else( request ) */
+
+} /* End of dissect_cip_data() */
+
+
+static int
+dissect_cip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+   proto_item *ti;
+   proto_tree *cip_tree;
+
+   /* Make entries in Protocol column and Info column on summary display */
+   if( check_col( pinfo->cinfo, COL_PROTOCOL ) )
+      col_set_str( pinfo->cinfo, COL_PROTOCOL, "CIP" );
+
+   if (check_col( pinfo->cinfo, COL_INFO ) )
+      col_clear( pinfo->cinfo, COL_INFO );
+
+   if( tree )
+   {
+      /* Create display subtree for the protocol */
+      ti = proto_tree_add_item(tree, proto_cip, tvb, 0, -1, FALSE);
+      cip_tree = proto_item_add_subtree( ti, ett_cip );
+
+      dissect_cip_data( cip_tree, tvb, 0, tvb_length(tvb), pinfo );
+   }
+
+   return tvb_length(tvb);
+}
+
+
+void
+proto_register_cip(void)
+{
+   /* Setup list of header fields */
+	static hf_register_info hf[] = {
+
+      { &hf_cip_rr,
+		{ "Request/Response", "cip.rr",
+			FT_UINT8, BASE_HEX, VALS(cip_sc_rr), 0x80,
+			"Request or Response message", HFILL }
+		},
+		{ &hf_cip_sc,
+			{ "Service", "cip.sc",
+			FT_UINT8, BASE_HEX, VALS(cip_sc_vals), 0x7F,
+			"Service Code", HFILL }
+		},
+		{ &hf_cip_epath,
+			{ "EPath", "cip.epath",
+			FT_BYTES, BASE_HEX, NULL, 0,
+			"EPath", HFILL }
+		},
+		{ &hf_cip_genstat,
+			{ "General Status", "cip.genstat",
+			FT_UINT8, BASE_HEX, VALS(cip_gs_vals), 0,
+			"General Status", HFILL }
+		},
+		{ &hf_cip_port,
+			{ "Port", "cip.port",
+			FT_UINT8, BASE_DEC, NULL, 0,
+			"Port Identifier", HFILL }
+		},
+		{ &hf_cip_link_address_byte,
+			{ "Link Address", "cip.linkaddress",
+			FT_UINT8, BASE_DEC, NULL, 0,
+			"Link Address", HFILL }
+		},
+		{ &hf_cip_link_address_string,
+			{ "Link Address", "cip.linkaddress",
+			FT_STRING, BASE_NONE, NULL, 0,
+			"Link Address", HFILL }
+		},
+		{ &hf_cip_class8,
+			{ "Class", "cip.class",
+			FT_UINT8, BASE_HEX, VALS(cip_class_names_vals), 0,
+			"Class", HFILL }
+		},
+		{ &hf_cip_class16,
+			{ "Class", "cip.class",
+			FT_UINT16, BASE_HEX, VALS(cip_class_names_vals), 0,
+			"Class", HFILL }
+		},
+		{ &hf_cip_class32,
+			{ "Class", "cip.class",
+			FT_UINT32, BASE_HEX, VALS(cip_class_names_vals), 0,
+			"Class", HFILL }
+		},
+		{ &hf_cip_instance8,
+			{ "Instance", "cip.instance",
+			FT_UINT8, BASE_HEX, NULL, 0,
+			"Instance", HFILL }
+		},
+		{ &hf_cip_instance16,
+			{ "Instance", "cip.instance",
+			FT_UINT16, BASE_HEX, NULL, 0,
+			"Instance", HFILL }
+		},
+		{ &hf_cip_instance32,
+			{ "Instance", "cip.instance",
+			FT_UINT32, BASE_HEX, NULL, 0,
+			"Instance", HFILL }
+		},
+		{ &hf_cip_attribute8,
+			{ "Attribute", "cip.attribute",
+			FT_UINT8, BASE_HEX, NULL, 0,
+			"Attribute", HFILL }
+		},
+		{ &hf_cip_attribute16,
+			{ "Attribute", "cip.attribute",
+			FT_UINT16, BASE_HEX, NULL, 0,
+			"Attribute", HFILL }
+		},
+		{ &hf_cip_attribute32,
+			{ "Attribute", "cip.attribute",
+			FT_UINT32, BASE_HEX, NULL, 0,
+			"Attribute", HFILL }
+		},
+		{ &hf_cip_conpoint8,
+			{ "Connection Point", "cip.connpoint",
+			FT_UINT8, BASE_HEX, NULL, 0,
+			"Connection Point", HFILL }
+		},
+		{ &hf_cip_conpoint16,
+			{ "Connection Point", "cip.connpoint",
+			FT_UINT16, BASE_HEX, NULL, 0,
+			"Connection Point", HFILL }
+		},
+		{ &hf_cip_conpoint32,
+			{ "Connection Point", "cip.connpoint",
+			FT_UINT16, BASE_HEX, NULL, 0,
+			"Connection Point", HFILL }
+		},
+		{ &hf_cip_symbol,
+			{ "Symbol", "cip.symbol",
+			FT_STRING, BASE_NONE, NULL, 0,
+			"ANSI Extended Symbol Segment", HFILL }
+		},
+		{ &hf_cip_vendor,
+			{ "Vendor ID", "cip.vendor",
+			FT_UINT16, BASE_HEX, VALS(cip_vendor_vals), 0,
+			"Vendor ID", HFILL }
+		},
+		{ &hf_cip_devtype,
+			{ "Device Type", "cip.devtype",
+			FT_UINT16, BASE_DEC, VALS(cip_devtype_vals), 0,
+			"Device Type", HFILL }
+		},
+		{ &hf_cip_fwo_comp,
+			{ "Compatibility", "cip.fwo.cmp",
+			FT_UINT8, BASE_HEX, VALS(cip_com_bit_vals), 0x80,
+			"Fwd Open: Compatibility bit", HFILL }
+		},
+      { &hf_cip_fwo_mrev,
+			{ "Major Revision", "cip.fwo.major",
+			FT_UINT8, BASE_DEC, NULL, 0x7F,
+			"Fwd Open: Major Revision", HFILL }
+		},
+      { &hf_cip_fwo_con_size,
+			{ "Connection Size", "cip.fwo.consize",
+			FT_UINT16, BASE_DEC, NULL, 0x01FF,
+			"Fwd Open: Connection size", HFILL }
+		},
+      { &hf_cip_fwo_fixed_var,
+			{ "Connection Size Type", "cip.fwo.f_v",
+			FT_UINT16, BASE_DEC, VALS(cip_con_fw_vals), 0x0200,
+			"Fwd Open: Fixed or variable connection size", HFILL }
+		},
+      { &hf_cip_fwo_prio,
+			{ "Priority", "cip.fwo.prio",
+			FT_UINT16, BASE_DEC, VALS(cip_con_prio_vals), 0x0C00,
+			"Fwd Open: Connection priority", HFILL }
+		},
+      { &hf_cip_fwo_typ,
+			{ "Connection Type", "cip.fwo.type",
+			FT_UINT16, BASE_DEC, VALS(cip_con_type_vals), 0x6000,
+			"Fwd Open: Connection type", HFILL }
+		},
+      { &hf_cip_fwo_own,
+			{ "Owner", "cip.fwo.owner",
+			FT_UINT16, BASE_DEC, VALS(cip_con_owner_vals), 0x8000,
+			"Fwd Open: Redundant owner bit", HFILL }
+		},
+		{ &hf_cip_fwo_dir,
+			{ "Direction", "cip.fwo.dir",
+			FT_UINT8, BASE_DEC, VALS(cip_con_dir_vals), 0x80,
+			"Fwd Open: Direction", HFILL }
+		},
+      { &hf_cip_fwo_trigg,
+			{ "Trigger", "cip.fwo.trigger",
+			FT_UINT8, BASE_DEC, VALS(cip_con_trigg_vals), 0x70,
+			"Fwd Open: Production trigger", HFILL }
+		},
+      { &hf_cip_fwo_class,
+			{ "Class", "cip.fwo.transport",
+			FT_UINT8, BASE_DEC, VALS(cip_con_class_vals), 0x0F,
+			"Fwd Open: Transport Class", HFILL }
+		}
+   };
+
+   /* Setup protocol subtree array */
+	static gint *ett[] = {
+		&ett_cip,
+		&ett_path,
+		&ett_ekey_path,
+		&ett_rrsc,
+		&ett_mcsc,
+		&ett_ncp,
+		&ett_cia_path,
+		&ett_data_seg,
+		&ett_lsrcf,
+		&ett_mes_req,
+		&ett_cmd_data,
+		&ett_port_path,
+		&ett_mult_ser,
+		&ett_path,
+		&ett_status_item
+	};
+
+   /* Register the protocol name and description */
+   proto_cip = proto_register_protocol("Common Industrial Protocol",
+	    "CIP", "cip");
+
+   /* Required function calls to register the header fields and subtrees used */
+	proto_register_field_array(proto_cip, hf, array_length(hf));
+	proto_register_subtree_array(ett, array_length(ett));
+
+} /* end of proto_register_cip() */
+
+
+void
+proto_reg_handoff_cip(void)
+{
+	dissector_handle_t cip_handle;
+
+   /* Create dissector handles */
+   cip_handle = new_create_dissector_handle( dissect_cip, proto_cip );
+
+   /* Register for UCMM CIP data, using EtherNet/IP SendRRData service*/
+	dissector_add( "enip.srrd.iface", ENIP_CIP_INTERFACE, cip_handle );
+
+	/* Register for Connected CIP data, using EtherNet/IP SendUnitData service*/
+	dissector_add( "enip.sud.iface", ENIP_CIP_INTERFACE, cip_handle );
+
+} /* end of proto_reg_handoff_cip() */
diff -urN ethereal-0.10.6/epan/dissectors/packet-cip.h ethereal-0.10.7/epan/dissectors/packet-cip.h
--- ethereal-0.10.6/epan/dissectors/packet-cip.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-cip.h	2004-10-20 17:34:37.000000000 -0500
@@ -0,0 +1,960 @@
+/* packet-cip.h
+ * Routines for CIP (Common Industrial Protocol) dissection
+ * CIP Home: www.odva.org
+ *
+ * Copyright 2004
+ * Magnus Hansson <mah@hms.se>
+ * Joakim Wiberg <jow@hms.se>
+ *
+ * $Id: packet-cip.h 12081 2004-09-23 22:36:01Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/* CIP Service Codes */
+#define SC_GET_ATT_ALL           0x01
+#define SC_SET_ATT_ALL           0x02
+#define SC_GET_ATT_LIST          0x03
+#define SC_SET_ATT_LIST          0x04
+#define SC_RESET                 0x05
+#define SC_START                 0x06
+#define SC_STOP                  0x07
+#define SC_CREATE                0x08
+#define SC_DELETE                0x09
+#define SC_MULT_SERV_PACK        0x0A
+#define SC_APPLY_ATTRIBUTES      0x0D
+#define SC_GET_ATT_SINGLE        0x0E
+#define SC_SET_ATT_SINGLE        0x10
+#define SC_FIND_NEXT_OBJ_INST    0x11
+#define SC_RESTOR                0x15
+#define SC_SAVE                  0x16
+#define SC_NO_OP                 0x17
+#define SC_GET_MEMBER            0x18
+#define SC_SET_MEMBER            0x19
+/* Class specific services */
+#define SC_FWD_CLOSE             0x4E
+#define SC_UNCON_SEND            0x52
+#define SC_FWD_OPEN              0x54
+
+/* CIP Genral status codes */
+#define CI_GRC_SUCCESS              0x00
+#define CI_GRC_FAILURE              0x01
+#define CI_GRC_NO_RESOURCE          0x02
+#define CI_GRC_BAD_DATA             0x03
+#define CI_GRC_BAD_PATH             0x04
+#define CI_GRC_BAD_CLASS_INSTANCE   0x05
+#define CI_GRC_PARTIAL_DATA         0x06
+#define CI_GRC_CONN_LOST            0x07
+#define CI_GRC_BAD_SERVICE          0x08
+#define CI_GRC_BAD_ATTR_DATA        0x09
+#define CI_GRC_ATTR_LIST_ERROR      0x0A
+#define CI_GRC_ALREADY_IN_MODE      0x0B
+#define CI_GRC_BAD_OBJ_MODE         0x0C
+#define CI_GRC_OBJ_ALREADY_EXISTS   0x0D
+#define CI_GRC_ATTR_NOT_SETTABLE    0x0E
+#define CI_GRC_PERMISSION_DENIED    0x0F
+#define CI_GRC_DEV_IN_WRONG_STATE   0x10
+#define CI_GRC_REPLY_DATA_TOO_LARGE 0x11
+#define CI_GRC_FRAGMENT_PRIMITIVE   0x12
+#define CI_GRC_CONFIG_TOO_SMALL     0x13
+#define CI_GRC_UNDEFINED_ATTR       0x14
+#define CI_GRC_CONFIG_TOO_BIG       0x15
+#define CI_GRC_OBJ_DOES_NOT_EXIST   0x16
+#define CI_GRC_NO_FRAGMENTATION     0x17
+#define CI_GRC_DATA_NOT_SAVED       0x18
+#define CI_GRC_DATA_WRITE_FAILURE   0x19
+#define CI_GRC_REQUEST_TOO_LARGE    0x1A
+#define CI_GRC_RESPONSE_TOO_LARGE   0x1B
+#define CI_GRC_MISSING_LIST_DATA    0x1C
+#define CI_GRC_INVALID_LIST_STATUS  0x1D
+#define CI_GRC_SERVICE_ERROR        0x1E
+#define CI_GRC_CONN_RELATED_FAILURE 0x1F
+#define CI_GRC_INVALID_PARAMETER    0x20
+#define CI_GRC_WRITE_ONCE_FAILURE   0x21
+#define CI_GRC_INVALID_REPLY        0x22
+#define CI_GRC_BAD_KEY_IN_PATH      0x25
+#define CI_GRC_BAD_PATH_SIZE        0x26
+#define CI_GRC_UNEXPECTED_ATTR      0x27
+#define CI_GRC_INVALID_MEMBER       0x28
+#define CI_GRC_MEMBER_NOT_SETTABLE  0x29
+
+#define CI_GRC_STILL_PROCESSING     0xFF
+
+
+/* IOI Path types */
+#define CI_SEGMENT_TYPE_MASK        0xE0
+
+#define CI_PORT_SEGMENT             0x00
+#define CI_LOGICAL_SEGMENT          0x20
+#define CI_NETWORK_SEGMENT          0x40
+#define CI_SYMBOLIC_SEGMENT         0x60
+#define CI_DATA_SEGMENT             0x80
+
+#define CI_LOGICAL_SEG_TYPE_MASK    0x1C
+#define CI_LOGICAL_SEG_CLASS_ID     0x00
+#define CI_LOGICAL_SEG_INST_ID      0x04
+#define CI_LOGICAL_SEG_MBR_ID       0x08
+#define CI_LOGICAL_SEG_CON_POINT    0x0C
+#define CI_LOGICAL_SEG_ATTR_ID      0x10
+#define CI_LOGICAL_SEG_SPECIAL      0x14
+#define CI_LOGICAL_SEG_SERV_ID      0x18
+#define CI_LOGICAL_SEG_RES_1        0x1C
+
+#define CI_LOGICAL_SEG_FORMAT_MASK  0x03
+#define CI_LOGICAL_SEG_8_BIT        0x00
+#define CI_LOGICAL_SEG_16_BIT       0x01
+#define CI_LOGICAL_SEG_32_BIT       0x02
+#define CI_LOGICAL_SEG_RES_2        0x03
+#define CI_LOGICAL_SEG_E_KEY        0x00
+
+#define CI_E_KEY_FORMAT_VAL         0x04
+
+#define CI_DATA_SEG_SIMPLE          0x80
+#define CI_DATA_SEG_SYMBOL          0x91
+
+#define CI_NETWORK_SEG_TYPE_MASK    0x07
+#define CI_NETWORK_SEG_SCHEDULE     0x01
+#define CI_NETWORK_SEG_FIXED_TAG    0x02
+#define CI_NETWORK_SEG_PROD_INHI    0x03
+
+/* Device Profile:s */
+#define DP_GEN_DEV                           0x00
+#define DP_AC_DRIVE	                        0x02
+#define DP_MOTOR_OVERLOAD                    0x03
+#define DP_LIMIT_SWITCH                      0x04
+#define DP_IND_PROX_SWITCH                   0x05
+#define DP_PHOTO_SENSOR                      0x06
+#define DP_GENP_DISC_IO                      0x07
+#define DP_RESOLVER                          0x09
+#define DP_COM_ADAPTER                       0x0C
+#define DP_POS_CNT                           0x10
+#define DP_DC_DRIVE                          0x13
+#define DP_CONTACTOR                         0x15
+#define DP_MOTOR_STARTER                     0x16
+#define DP_SOFT_START                        0x17
+#define DP_HMI                               0x18
+#define DP_MASS_FLOW_CNT                     0x1A
+#define DP_PNEUM_VALVE                       0x1B
+#define DP_VACUUM_PRES_GAUGE                 0x1C
+
+/* Define vendor IDs (ControlNet + DeviceNet + EtherNet/IP) */
+#define VENDOR_ID_LIST \
+   { 1,     "Rockwell Automation/Allen-Bradley" }, \
+   { 2,     "Namco Controls Corp." }, \
+   { 4,     "Parker Hannifin Corp. (Veriflo Division)" }, \
+   { 5,     "Rockwell Automation/Reliance Electric" }, \
+   { 7,     "SMC Corporation of America" }, \
+   { 8,     "Woodhead Software & Electronics (SST)" }, \
+   { 9,     "Western Reserve Controls Inc." }, \
+   { 10,    "Advanced Micro Controls Inc. (AMCI)" }, \
+   { 11,    "ASCO Pneumatic Controls" }, \
+   { 12,    "Banner Engineering Corp." }, \
+   { 13,    "Belden Wire & Cable Company" }, \
+   { 14,    "Crouse-Hinds Molded Products" }, \
+   { 16,    "Daniel Woodhead Co. (Woodhead Connectivity)" }, \
+   { 17,    "Dearborn Group Inc." }, \
+   { 19,    "Helm Instrument" }, \
+   { 20,    "Huron Net Works" }, \
+   { 21,    "Lumberg, Inc." }, \
+   { 22,    "Online Development Inc. (Automation Value)" }, \
+   { 23,    "Vorne Industries, Inc." }, \
+   { 24,    "ODVA Special Reserve" }, \
+   { 25,    "ACCU-Sort Systems, Inc." }, \
+   { 26,    "Festo Corporation" }, \
+   { 28,    "Crouzet Automatismes SA" }, \
+   { 30,    "Unico, Inc." }, \
+   { 31,    "Ross Controls" }, \
+   { 34,    "Hohner Corp." }, \
+   { 35,    "Micro Mo Electronics, Inc." }, \
+   { 36,    "MKS Instruments, Inc." }, \
+   { 37,    "Yaskawa Electric America formerly Magnetek Drives" }, \
+   { 39,    "AVG Automation (Uticor)" }, \
+   { 40,    "WAGO Corporation" }, \
+   { 41,    "CELERITY (Kinetics/Unit Instruments)" }, \
+   { 42,    "IMI Norgren Limited" }, \
+   { 43,    "BALLUFF GmbH" }, \
+   { 44,    "Yaskawa Electric America, Inc." }, \
+   { 45,    "Eurotherm Controls Inc." }, \
+   { 46,    "ABB Inc." }, \
+   { 47,    "Omron Corporation" }, \
+   { 48,    "Turck, Inc." }, \
+   { 49,    "Grayhill Inc." }, \
+   { 50,    "Real Time Automation (C&ID)" }, \
+   { 51,    "Microsmith, Inc." }, \
+   { 52,    "Numatics, Inc." }, \
+   { 53,    "Lutze, Inc." }, \
+   { 56,    "Softing AG" }, \
+   { 57,    "Pepperl + Fuchs" }, \
+   { 58,    "Spectrum Controls, Inc." }, \
+   { 59,    "MKS Instruments, CIT Group (formerly - D.I.P.)" }, \
+   { 60,    "Applied Motion Products, Inc." }, \
+   { 61,    "Sencon Inc." }, \
+   { 62,    "High Country Tek" }, \
+   { 63,    "SWAC Automation Consult GmbH" }, \
+   { 64,    "Clippard Instrument Laboratory" }, \
+   { 68,    "Cutler-Hammer Products" }, \
+   { 71,    "Toshiba International Corp." }, \
+   { 72,    "Control Technology Incorporated" }, \
+   { 73,    "Tait Control Systems  Ltd." }, \
+   { 74,    "Hitachi, Ltd." }, \
+   { 75,    "ABB Automation Technology Products AB/Robotics" }, \
+   { 76,    "NKE Corporation" }, \
+   { 77,    "Rockwell Software, Inc." }, \
+   { 78,    "Escort Memory Systems" }, \
+   { 80,    "Industrial Devices Corporation" }, \
+   { 81,    "IXXAT Automation GmbH" }, \
+   { 82,    "Mitsubishi Electric Automation, Inc." }, \
+   { 83,    "OPTO-22" }, \
+   { 86,    "Horner Electric" }, \
+   { 87,    "Burkert Werke GmbH & Co. KG" }, \
+   { 89,    "Industrial Indexing Systems, Inc." }, \
+   { 90,    "HMS Industrial Networks AB" }, \
+   { 91,    "Robicon" }, \
+   { 92,    "Helix Technology Corp (Granville-Phillips)" }, \
+   { 93,    "Arlington Laboratory" }, \
+   { 94,    "Advantech Co. Ltd." }, \
+   { 95,    "Square D Company" }, \
+   { 96,    "Digital Electronics Corp." }, \
+   { 97,    "Danfoss" }, \
+   { 98,    "Hewlett-Packard" }, \
+   { 100,   "Bosch Rexroth (Mecman)" }, \
+   { 101,   "Applied Materials, Inc." }, \
+   { 102,   "Showa Electric Wire & Cable Co." }, \
+   { 103,   "Pacific Scientific" }, \
+   { 104,   "Sharp Manufacturing Systems Corp." }, \
+   { 105,   "Lapp USA, Inc.(Olflex Wire & Cable)" }, \
+   { 107,   "Unitrode" }, \
+   { 108,   "Beckhoff Industrie Elektronik" }, \
+   { 109,   "National Instruments" }, \
+   { 110,   "Mykrolis Corporation (Millipore)" }, \
+   { 111,   "International Motion Controls Corp." }, \
+   { 113,   "SEG Kempen GmbH" }, \
+   { 116,   "MTS Systems Corp." }, \
+   { 117,   "Krones, Inc" }, \
+   { 118,   "Molex Incorporated" }, \
+   { 119,   "EXOR Electronic R & D" }, \
+   { 120,   "SIEI S.p.A." }, \
+   { 121,   "KUKA Roboter GmbH" }, \
+   { 123,   "SEC (Samsung Electronics Co., Ltd)" }, \
+   { 124,   "Binary Electronics Ltd" }, \
+   { 125,   "Flexible Machine Controls" }, \
+   { 127,   "ABB Inc. (Entrelec)" }, \
+   { 128,   "MAC Valves, Inc." }, \
+   { 129,   "Auma Actuators Inc." }, \
+   { 130,   "Toyoda Machine Works, Ltd." }, \
+   { 133,   "Balogh T.A.G., Corporation" }, \
+   { 134,   "TR Systemtechnik GmbH" }, \
+   { 135,   "UNIPULSE Corporation" }, \
+   { 138,   "Conxall Corporation Inc." }, \
+   { 141,   "Kuramo Electric Co., Ltd." }, \
+   { 142,   "Creative Micro Designs" }, \
+   { 143,   "GE Industrial Systems" }, \
+   { 144,   "Leybold Vakuum GmbH" }, \
+   { 145,   "Siemens Energy & Automation/Drives" }, \
+   { 146,   "Kodensha Ltd" }, \
+   { 147,   "Motion Engineering, Inc." }, \
+   { 148,   "Honda Engineering Co., Ltd" }, \
+   { 149,   "EIM Valve Controls" }, \
+   { 150,   "Melec Inc." }, \
+   { 151,   "Sony Precision Technology Inc." }, \
+   { 152,   "North American Mfg." }, \
+   { 153,   "Watlow Electric Inc." }, \
+   { 154,   "Japan Radio Co., Ltd" }, \
+   { 155,   "NADEX Co., Ltd" }, \
+   { 156,   "Ametek Automation & Process Technologies" }, \
+   { 158,   "Kvaser-AB" }, \
+   { 159,   "IDEC IZUMI Corporation" }, \
+   { 160,   "Mitsubishi Heavy Industries Ltd" }, \
+   { 161,   "Mitsubishi Electric Corporation" }, \
+   { 162,   "Horiba-STEC Inc." }, \
+   { 163,   "esd electronic system design gmbh" }, \
+   { 164,   "DAIHEN Corporation" }, \
+   { 165,   "Tyco Valves & Controls/Keystone" }, \
+   { 166,   "EBARA Corporation" }, \
+   { 169,   "Hokuyo Automatic Co., Ltd." }, \
+   { 170,   "Pyramid Solutions, Inc." }, \
+   { 171,   "Denso Wave Incorporated" }, \
+   { 172,   "HLS Hard-Line Solutions Inc" }, \
+   { 173,   "Caterpillar, Inc." }, \
+   { 174,   "PDL Electronics Ltd." }, \
+   { 176,   "Red Lion Controls" }, \
+   { 177,   "ANELVA Corporation" }, \
+   { 178,   "Toyo Denki Seizo KK" }, \
+   { 179,   "Sanyo Denki Co., Ltd." }, \
+   { 180,   "Aera Japan Ltd." }, \
+   { 181,   "Pilz GmbH & Co" }, \
+   { 182,   "Bellofram Corp." }, \
+   { 184,   "M-SYSTEM Co., Ltd." }, \
+   { 185,   "Nissin Electric Co., Ltd" }, \
+   { 186,   "Hitachi Metals, Ltd" }, \
+   { 187,   "Oriental Motor Company" }, \
+   { 188,   "A&D Co., Ltd" }, \
+   { 189,   "Phasetronics, Inc." }, \
+   { 190,   "Cummins Engine Company" }, \
+   { 191,   "Deltron Inc." }, \
+   { 192,   "Geneer Corporation" }, \
+   { 193,   "Anatol Automation, Inc." }, \
+   { 196,   "Medar, Inc." }, \
+   { 197,   "Comdel Inc." }, \
+   { 198,   "Advanced Energy Industries, Inc." }, \
+   { 200,   "DAIDEN Co., Ltd" }, \
+   { 201,   "CKD Corporation" }, \
+   { 202,   "Toyo Electric Corporation" }, \
+   { 203,   "HM Computing Ltd." }, \
+   { 204,   "AuCom Electronics Ltd" }, \
+   { 205,   "Shinko Electric Co., Ltd" }, \
+   { 206,   "Vector Informatik GmbH" }, \
+   { 208,   "Moog Inc." }, \
+   { 209,   "Contemporary Controls" }, \
+   { 210,   "Tokyo Sokki Kenkyujo Co., Ltd" }, \
+   { 211,   "Schenck-AccuRate, Inc." }, \
+   { 212,   "The Oilgear Company" }, \
+   { 214,   "ASM Japan K.K." }, \
+   { 215,   "HIRATA Corp." }, \
+   { 216,   "SUNX Limited" }, \
+   { 217,   "Meidensha Corporation" }, \
+   { 218,   "Sankyo Seiki Mfg. Co., Ltd" }, \
+   { 219,   "KAMRO Corp." }, \
+   { 220,   "Nippon System Development Co., Ltd" }, \
+   { 221,   "EBARA Technologies Inc." }, \
+   { 222,   "JP Tech" }, \
+   { 224,   "SG Co., Ltd" }, \
+   { 225,   "Vaasa Institute of Technology" }, \
+   { 226,   "ENI (Electronic Navigation Industry)" }, \
+   { 227,   "Tateyama System Laboratory Co., Ltd." }, \
+   { 228,   "QLOG Corporation" }, \
+   { 229,   "Matric Limited Inc." }, \
+   { 230,   "NSD Corporation" }, \
+   { 232,   "Sumitomo Wiring Systems, Ltd." }, \
+   { 233,   "Group3 Technology Ltd" }, \
+   { 234,   "CTI Cryogenics" }, \
+   { 235,   "POLSYS CORP" }, \
+   { 236,   "Ampere Inc." }, \
+   { 238,   "Simplatroll Ltd" }, \
+   { 241,   "Leading Edge Design" }, \
+   { 242,   "Humphrey Products" }, \
+   { 243,   "Schneider Automation, Inc." }, \
+   { 244,   "Westlock Controls Corp." }, \
+   { 245,   "Nihon Weidmuller Co., Ltd" }, \
+   { 246,   "Brooks Instrument (Div. of Emerson)" }, \
+   { 248,   "Moeller GmbH" }, \
+   { 249,   "Varian Vacuum Products" }, \
+   { 250,   "Yokogawa Electric Corporation" }, \
+   { 251,   "Electrical Design Daiyu Co., Ltd" }, \
+   { 252,   "Omron Software Co., Ltd." }, \
+   { 253,   "BOC Edwards" }, \
+   { 254,   "Control Technology Corporation" }, \
+   { 255,   "Bosch Rexroth (Bosch)" }, \
+   { 256,   "InterlinkBT LLC" }, \
+   { 257,   "Control Techniques PLC" }, \
+   { 258,   "Hardy Instruments, Inc." }, \
+   { 259,   "LG Industrial System Co., Ltd." }, \
+   { 260,   "E.O.A. Systems Inc." }, \
+   { 262,   "New Cosmos Electric Co., Ltd." }, \
+   { 263,   "Sense Eletronica LTDA." }, \
+   { 264,   "Xycom, Inc." }, \
+   { 265,   "Baldor Electric" }, \
+   { 267,   "Patlite Corporation" }, \
+   { 269,   "Mogami Wire & Cable Corporation" }, \
+   { 270,   "Welding Technology Corporation (WTC)" }, \
+   { 272,   "Deutschmann Automation GmbH" }, \
+   { 273,   "ICP Panel-Tec, Inc." }, \
+   { 274,   "Bray Controls USA" }, \
+   { 275,   "Lantronix, Inc." }, \
+   { 276,   "Status Technologies" }, \
+   { 278,   "Sherrex Systems Ltd" }, \
+   { 279,   "Adept Technology, Inc." }, \
+   { 280,   "Spang Power Electronics" }, \
+   { 282,   "Acrosser Technology Co. Ltd" }, \
+   { 283,   "Hilscher GmbH" }, \
+   { 284,   "Imax Corporation" }, \
+   { 285,   "Electronic Innovation, Inc.(Falter Engineering)" }, \
+   { 286,   "Netlogic Inc." }, \
+   { 287,   "Bosch Rexroth Corporation" }, \
+   { 290,   "Murata Machinery, Ltd." }, \
+   { 291,   "MTT Company Ltd." }, \
+   { 292,   "Kanematsu Semiconductor Corp." }, \
+   { 293,   "Takehishi Electric Sales Co." }, \
+   { 294,   "Tokyo Electron Device Limited" }, \
+   { 295,   "PFU Limited" }, \
+   { 296,   "Hakko Automation Co., Ltd." }, \
+   { 297,   "Advanet Inc." }, \
+   { 298,   "Tokyo Electron Software Technologies Ltd." }, \
+   { 300,   "Shinagawa Electric Wire Co. Ltd." }, \
+   { 301,   "Yokogawa M&C Corporation" }, \
+   { 302,   "KONAN Electric Co., Ltd" }, \
+   { 303,   "Binar Elektronik AB" }, \
+   { 304,   "The Furukawa Electric Co." }, \
+   { 305,   "Cooper Energy Services" }, \
+   { 306,   "Schleicher GmbH & Co." }, \
+   { 307,   "Hirose Electric Co., Ltd" }, \
+   { 308,   "Western Servo Design Inc." }, \
+   { 309,   "Prosoft Technology" }, \
+   { 311,   "Towa Shoko Co., Ltd" }, \
+   { 312,   "Kyopal Co., Ltd" }, \
+   { 313,   "Extron Co." }, \
+   { 314,   "Wieland Electric GmbH" }, \
+   { 315,   "SEW Eurodrive GmbH" }, \
+   { 316,   "Aera Corporation" }, \
+   { 317,   "STA Reutlingen" }, \
+   { 319,   "Fuji Electric Co., Ltd." }, \
+   { 322,   "ifm efector, inc." }, \
+   { 324,   "IDEACOD-Hohner AUTOMATION S.A." }, \
+   { 325,   "CommScope, Inc." }, \
+   { 326,   "GE Fanuc Automation North America, Inc." }, \
+   { 327,   "Matsushita Electric Industrial Co., Ltd" }, \
+   { 328,   "Okaya Electronics Corporation" }, \
+   { 329,   "KASHIYAMA Industries, Ltd." }, \
+   { 330,   "JVC" }, \
+   { 331,   "Interface Corporation" }, \
+   { 332,   "Grape Systems Inc." }, \
+   { 335,   "Toshiba IT & Control Systems Corporation" }, \
+   { 336,   "Sanyo Machine Works, Ltd." }, \
+   { 337,   "Vansco Electronics Ltd." }, \
+   { 338,   "Dart Container Corp." }, \
+   { 339,   "Livingston & Co., Inc." }, \
+   { 340,   "Alfa Laval LKM as" }, \
+   { 341,   "BF ENTRON Ltd. (British Federal)" }, \
+   { 342,   "Bekaert Engineering NV" }, \
+   { 343,   "Ferran  Scientific Inc." }, \
+   { 344,   "KEBA AG" }, \
+   { 345,   "Endress + Hauser" }, \
+   { 346,   "The Lincoln Electric Company" }, \
+   { 347,   "ABB ALSTOM Power UK Ltd. (EGT)" }, \
+   { 348,   "Berger Lahr GmbH 3333" }, \
+   { 350,   "Federal Signal Corporation" }, \
+   { 351,   "Kawasaki Robotics (USA), Inc." }, \
+   { 352,   "Bently Nevada Corporation" }, \
+   { 353,   "JP Tech, Inc." }, \
+   { 354,   "FRABA Posital GmbH" }, \
+   { 355,   "Elsag Bailey, Inc." }, \
+   { 356,   "Fanuc Robotics America" }, \
+   { 358,   "Surface Combustion, Inc." }, \
+   { 359,   "Redwood MicroSystems, Inc." }, \
+   { 360,   "AILES Electronics Ind. Co, Ltd." }, \
+   { 361,   "Wonderware Corporation" }, \
+   { 362,   "Particle Measuring Systems, Inc." }, \
+   { 365,   "BITS Co., Ltd" }, \
+   { 366,   "Japan Aviation Electronics Industry Ltd" }, \
+   { 367,   "Keyence Corporation" }, \
+   { 368,   "Kuroda Precision Industries Ltd." }, \
+   { 369,   "Mitsubishi Electric Semiconductor Application" }, \
+   { 370,   "Nippon Seisen Cable, Ltd." }, \
+   { 371,   "Omron ASO Co., Ltd" }, \
+   { 372,   "Seiko Seiki Co., Ltd." }, \
+   { 373,   "Sumitomo Heavy Industries, Ltd." }, \
+   { 374,   "Tango Computer Service Corporation" }, \
+   { 375,   "Technology Service, Inc." }, \
+   { 376,   "Toshiba Information Systems (Japan) Corporation" }, \
+   { 377,   "TOSHIBA Schneider Inverter Corporation" }, \
+   { 378,   "Toyooki Kogyo Co., Ltd." }, \
+   { 379,   "XEBEC" }, \
+   { 380,   "Madison Cable Corporation" }, \
+   { 381,   "Hitachi Engineering & Services Co., Ltd" }, \
+   { 382,   "TEM-TECH Lab Co., Ltd" }, \
+   { 383,   "International Laboratory Corporation" }, \
+   { 384,   "Dyadic Systems Co., Ltd." }, \
+   { 385,   "SETO Electronics Industry Co., Ltd" }, \
+   { 386,   "Tokyo Electron Kyushu Limited" }, \
+   { 387,   "KEI System Co., Ltd" }, \
+   { 389,   "Asahi Engineering Co., Ltd" }, \
+   { 390,   "Contrex Inc." }, \
+   { 391,   "Paradigm Controls Ltd." }, \
+   { 393,   "Ohm Electric Co., Ltd." }, \
+   { 394,   "RKC Instrument Inc." }, \
+   { 395,   "Suzuki Motor Corporation" }, \
+   { 396,   "Custom Servo Motors Inc." }, \
+   { 397,   "PACE Control Systems" }, \
+   { 400,   "LINTEC Co., Ltd" }, \
+   { 401,   "Hitachi Cable Ltd." }, \
+   { 402,   "BUSWARE Direct" }, \
+   { 403,   "Holec Holland N.V." }, \
+   { 404,   "VAT Vakuumventile AG" }, \
+   { 405,   "Scientific Technologies, Inc." }, \
+   { 406,   "Alfa Instrumentos Eletronicos Ltda" }, \
+   { 407,   "TWK Elektronik GmbH" }, \
+   { 408,   "ABB Welding Systems AB" }, \
+   { 409,   "Bystronic Maschinen AG" }, \
+   { 410,   "Kimura Electric Co., Ltd" }, \
+   { 411,   "Nissei Plastic Industrial Co., Ltd" }, \
+   { 412,   "Hitachi Naka Electronics Co. Ltd." }, \
+   { 413,   "Kistler-Morse Corporation" }, \
+   { 414,   "Proteus Industries Inc." }, \
+   { 415,   "IDC Corporation" }, \
+   { 416,   "Nordson Corporation" }, \
+   { 417,   "Rapistan Systems" }, \
+   { 418,   "LP-Elektronik GmbH" }, \
+   { 419,   "GERBI & FASE S.p.A (Fase Saldatura)" }, \
+   { 420,   "Phoenix Digital Corporation" }, \
+   { 421,   "Z-World Engineering" }, \
+   { 422,   "Honda R&D Co., Ltd." }, \
+   { 423,   "Bionics Instrument Co., Ltd." }, \
+   { 424,   "Teknic, Inc." }, \
+   { 425,   "R. Stahl, Inc." }, \
+   { 427,   "Ryco Graphic Manufacturing Inc." }, \
+   { 428,   "Giddings & Lewis, Inc." }, \
+   { 429,   "Koganei Corporation" }, \
+   { 431,   "Nichigoh Communication Electric Wire Co., Ltd." }, \
+   { 433,   "Fujikura Ltd." }, \
+   { 434,   "AD Link Technology Inc." }, \
+   { 435,   "StoneL Corp." }, \
+   { 436,   "Computer Optical Products, Inc." }, \
+   { 437,   "CONOS Inc." }, \
+   { 438,   "Erhardt + Leimer GmbH" }, \
+   { 439,   "UNIQUE Co. Ltd." }, \
+   { 440,   "Roboticsware, Inc." }, \
+   { 441,   "Nachi Fujikoshi Corporation" }, \
+   { 442,   "Hengstler GmbH" }, \
+   { 444,   "SUNNY GIKEN Inc." }, \
+   { 445,   "Lenze" }, \
+   { 446,   "CD Systems B.V." }, \
+   { 447,   "FMT/Aircraft Gate Support Systems AB" }, \
+   { 448,   "Axiomatic Technologies Corporation" }, \
+   { 449,   "Embedded System Products, Inc." }, \
+   { 450,   "AMC Technologies Corporation" }, \
+   { 451,   "Mencom Corporation" }, \
+   { 452,   "Danaher Motion/Kollmorgen" }, \
+   { 453,   "Matsushita Welding Systems Co., Ltd." }, \
+   { 454,   "Dengensha Mfg. Co. Ltd." }, \
+   { 455,   "Quin Systems Ltd" }, \
+   { 456,   "Tellima Technology Ltd" }, \
+   { 457,   "MDT, Software" }, \
+   { 458,   "Taiwan Keiso Co., Ltd" }, \
+   { 459,   "Pinnacle Systems" }, \
+   { 460,   "Ascom Hasler Mailing Sys" }, \
+   { 461,   "INSTRUMAR Limited" }, \
+   { 463,   "Navistar International Transportation Corp" }, \
+   { 464,   "Huettinger Elektronik GmbH + Co. KG" }, \
+   { 465,   "OCM Technology Inc." }, \
+   { 466,   "Professional Supply Inc." }, \
+   { 467,   "Control Solutions" }, \
+   { 468,   "IVO GmbH & Co." }, \
+   { 469,   "Worcester Controls Corporation" }, \
+   { 470,   "Pyramid Technical Consultants, Inc." }, \
+   { 471,   "Eilersen Electric A/S" }, \
+   { 472,   "Apollo Fire Detectors Limited" }, \
+   { 473,   "Avtron Manufacturing, Inc." }, \
+   { 475,   "Tokyo Keiso Co., Ltd." }, \
+   { 476,   "Daishowa Swiki Co., Ltd." }, \
+   { 477,   "Kojima Instruments Inc." }, \
+   { 478,   "Shimadzu Corporation" }, \
+   { 479,   "Tatsuta Electric Wire & Cable Co., Ltd." }, \
+   { 480,   "MECS Corporation" }, \
+   { 481,   "Tahara Electric" }, \
+   { 482,   "Koyo Electronics" }, \
+   { 483,   "Clever Devices" }, \
+   { 484,   "GCD Hardware & Software GmbH" }, \
+   { 486,   "Miller Electric Mfg Co." }, \
+   { 487,   "GEA Tuchenhagen GmbH" }, \
+   { 488,   "Riken Keiki Co., Ltd." }, \
+   { 489,   "Keisokugiken Corporation" }, \
+   { 490,   "Fuji Machine Mfg. Co., Ltd" }, \
+   { 492,   "Nidec-Shimpo Corp." }, \
+   { 493,   "UTEC Corporation" }, \
+   { 494,   "SANYO Electric Co. Ltd." }, \
+   { 497,   "Okano Electric Wire Co. Ltd" }, \
+   { 498,   "Shimaden Co. Ltd." }, \
+   { 499,   "Teddington Controls Ltd" }, \
+   { 500,   "Control Logic Inc." }, \
+   { 501,   "VIPA GmbH" }, \
+   { 502,   "Warwick Manufacturing Group" }, \
+   { 503,   "Danaher Controls" }, \
+   { 506,   "American Science & Engineering" }, \
+   { 507,   "Accutron Technologies Inc." }, \
+   { 508,   "Norcott Technologies Ltd" }, \
+   { 509,   "T.B. Wood's, Incorporated" }, \
+   { 510,   "Proportion-Air, Inc." }, \
+   { 511,   "Max Stegmann GmbH" }, \
+   { 513,   "Edwards Signaling" }, \
+   { 514,   "Sumitomo Metal Industries, Ltd" }, \
+   { 515,   "Cosmo Instruments Co., Ltd." }, \
+   { 516,   "Denshosha Co., Ltd." }, \
+   { 517,   "Kaijo Corp." }, \
+   { 518,   "Michiproducts Co., Ltd." }, \
+   { 519,   "Miura Corporation" }, \
+   { 520,   "TG Information Network Co., Ltd." }, \
+   { 521,   "Fujikin , Inc." }, \
+   { 522,   "Estic Corp." }, \
+   { 523,   "GS Hydraulic Sales" }, \
+   { 525,   "MTE Limited" }, \
+   { 526,   "Hyde Park Electronics, Inc." }, \
+   { 527,   "Pfeiffer Vacuum GmbH" }, \
+   { 528,   "Cyberlogic Technologies" }, \
+   { 529,   "OKUMA Corporation FA System Division" }, \
+   { 530,   "NSK Precision Co., Ltd." }, \
+   { 531,   "Hitachi Kokusai Electric Co., Ltd." }, \
+   { 532,   "Shinko Technos Co. Ltd." }, \
+   { 533,   "Itoh Electric Co., Ltd." }, \
+   { 534,   "Colorado Flow Tech Inc." }, \
+   { 535,   "Love Controls Division/Dwyer Instruments" }, \
+   { 536,   "Alstom Drives and Controls" }, \
+   { 537,   "The Foxboro Company" }, \
+   { 538,   "Tescom Corporation" }, \
+   { 540,   "Atlas Copco Controls UK" }, \
+   { 542,   "Autojet Technologies" }, \
+   { 543,   "Prima Electronics S.p.A." }, \
+   { 544,   "PMA GmbH" }, \
+   { 545,   "Shimafuji Electric Co., Ltd" }, \
+   { 546,   "Oki Electric Industry Co., Ltd" }, \
+   { 547,   "Kyushu Matsushita Electric Co., Ltd" }, \
+   { 548,   "Nihon Electric Wire & Cable Co., Ltd" }, \
+   { 549,   "Tsuken Electric Ind Co., Ltd" }, \
+   { 550,   "Tamadic Co." }, \
+   { 551,   "MAATEL SA" }, \
+   { 552,   "OKUMA America" }, \
+   { 553,   "Control Techniques PLC-NA" }, \
+   { 554,   "TPC Wire & Cable" }, \
+   { 555,   "ATI Industrial Automation" }, \
+   { 556,   "Microcontrol (Australia) Pty Ltd" }, \
+   { 557,   "Serra Soldadura, S.A." }, \
+   { 558,   "Southwest Research Institute" }, \
+   { 559,   "Cabinplant International" }, \
+   { 560,   "GWT/Global Weighing Technologies GmbH" }, \
+   { 561,   "Comau Robotics & Final Assembly" }, \
+   { 562,   "Phoenix Contact" }, \
+   { 563,   "Yokogawa MAT Corporation" }, \
+   { 564,   "asahi sangyo co., ltd." }, \
+   { 566,   "Akita Myotoku Ltd." }, \
+   { 567,   "OBARA Corp." }, \
+   { 568,   "Suetron Electronic GmbH" }, \
+   { 570,   "Serck Controls Limited" }, \
+   { 571,   "Fairchild Industrial Products Company" }, \
+   { 572,   "ARO Controls S.A.S." }, \
+   { 573,   "M2C GmbH" }, \
+   { 574,   "Shin Caterpillar Mitsubishi Ltd." }, \
+   { 575,   "Santest Co., Ltd." }, \
+   { 576,   "Cosmotechs Co., Ltd." }, \
+   { 577,   "Hitachi Electric Systems" }, \
+   { 578,   "Smartscan Ltd" }, \
+   { 579,   "Applicom international" }, \
+   { 580,   "Athena Controls Incorporated" }, \
+   { 581,   "Syron Engineering & Manufacturing, Inc." }, \
+   { 582,   "Asahi Optical Co., Ltd." }, \
+   { 583,   "Sansha Electric Mfg. Co.,Ltd." }, \
+   { 584,   "Nikki Denso Co., Ltd." }, \
+   { 585,   "Star Micronics, Co., Ltd." }, \
+   { 586,   "Ecotecnia Socirtat Corp." }, \
+   { 587,   "AC Technology Corp" }, \
+   { 588,   "West Instruments Limited" }, \
+   { 589,   "NTI Limited" }, \
+   { 590,   "Delta Computer Systems Inc." }, \
+   { 591,   "FANUC Ltd." }, \
+   { 592,   "HEARN-GU LEE" }, \
+   { 593,   "ABB Automation Products" }, \
+   { 594,   "Orion Machinery Co., Ltd." }, \
+   { 596,   "Wire-Pro, Inc." }, \
+   { 597,   "Beijing Huakong Technology Co. Ltd." }, \
+   { 598,   "Yokoyama Shokai Co., Ltd." }, \
+   { 599,   "Toyogiken Co., Ltd." }, \
+   { 600,   "Coester Equipamentos Eletronicos Ltda." }, \
+   { 601,   "Kawasaki Heavy Industries, Ltd." }, \
+   { 602,   "Electroplating Engineers of Japan Ltd." }, \
+   { 603,   "Robox S.p.a." }, \
+   { 604,   "Spraying Systems Company" }, \
+   { 605,   "Benshaw Inc." }, \
+   { 606,   "ZPA-DP A.S." }, \
+   { 607,   "Wired Rite Systems" }, \
+   { 608,   "Tandis Research, Inc." }, \
+   { 609,   "Eurotherm Antriebstechnik GmbH" }, \
+   { 610,   "ULVAC, Inc." }, \
+   { 611,   "DYNAX Corporation" }, \
+   { 612,   "Nor-Cal Products, Inc." }, \
+   { 613,   "Aros Electronics AB" }, \
+   { 614,   "Jun-Tech Co., Ltd." }, \
+   { 615,   "HAN-MI Co. Ltd." }, \
+   { 616,   "SungGi Internet Co.,  Ltd." }, \
+   { 617,   "Hae Pyung Electronics Research Institute" }, \
+   { 618,   "Milwaukee Electronics" }, \
+   { 619,   "OBERG Industries" }, \
+   { 620,   "Parker Hannifin/Compumotor Division" }, \
+   { 621,   "TECHNO DIGITAL CORPORATION" }, \
+   { 622,   "network supply Co., Ltd." }, \
+   { 623,   "Union Electronics Co., Ltd." }, \
+   { 624,   "Tritronics Services PM Ltd." }, \
+   { 625,   "Rockwell Automation/Sprecher+Schuh" }, \
+   { 626,   "Matsushita Electric Industrial Co., Ltd/Motor Co." }, \
+   { 627,   "Rolls-Royce Energy Systems, Inc." }, \
+   { 628,   "JEONGIL INTERCOM CO., LTD" }, \
+   { 629,   "Interroll Corp." }, \
+   { 630,   "Hubbell Wiring Device-Kellems (Delaware)" }, \
+   { 631,   "Intelligent Motion Systems" }, \
+   { 632,   "Shanghai Aton Electric Co., Ltd" }, \
+   { 633,   "INFICON AG" }, \
+   { 634,   "Hirschmann, Inc." }, \
+   { 635,   "The Siemon Company" }, \
+   { 636,   "YAMAHA Motor Co. Ltd." }, \
+   { 637,   "aska corporation" }, \
+   { 638,   "Woodhead Connectivity" }, \
+   { 639,   "Trimble AB" }, \
+   { 640,   "Murrelektronik GmbH" }, \
+   { 641,   "Creatrix Labs, Inc." }, \
+   { 642,   "TopWorx" }, \
+   { 643,   "Kumho Industrial Co., Ltd." }, \
+   { 644,   "Wind River Systems, Inc." }, \
+   { 645,   "Bihl & Wiedemann GmbH" }, \
+   { 646,   "Harmonic Drive Systems Inc." }, \
+   { 647,   "Rikei Corporation" }, \
+   { 648,   "BL Autotec, Ltd." }, \
+   { 649,   "HANA Information Technology Co., Ltd." }, \
+   { 650,   "Seoil Electric Co., Ltd." }, \
+   { 651,   "Fife Corporation" }, \
+   { 652,   "Shanghai Electrical Apparatus Research Institute" }, \
+   { 653,   "UniControls as" }, \
+   { 654,   "Parasense Development Centre" }, \
+   { 657,   "Six Tau SpA" }, \
+   { 658,   "Aucos GmbH" }, \
+   { 659,   "Rotork Controls Ltd." }, \
+   { 660,   "Automationdirect.com" }, \
+   { 661,   "Thermo BLH" }, \
+   { 662,   "System Controls, Limited" }, \
+   { 663,   "Univer S.p.A." }, \
+   { 664,   "MKS - Tenta Technology" }, \
+   { 665,   "Lika Electronic SNC" }, \
+   { 666,   "Mettler-Toledo" }, \
+   { 667,   "DXL USA, Inc." }, \
+   { 668,   "Rockwell Automation/Entek IRD Intl." }, \
+   { 669,   "Nippon Otis Elevator Company" }, \
+   { 670,   "Sinano Electric, Co., Ltd." }, \
+   { 673,   "CONTEC CO., LTD." }, \
+   { 674,   "Automated Solutions" }, \
+   { 675,   "Controlweigh" }, \
+   { 676,   "SICK AG" }, \
+   { 677,   "Fincor Electronics" }, \
+   { 678,   "Cognex Corporation" }, \
+   { 679,   "Qualiflow" }, \
+   { 680,   "Weidmuller Inc." }, \
+   { 681,   "Morinaga Milk Industry Co., Ltd." }, \
+   { 682,   "Takagi Industrial Co., Ltd." }, \
+   { 683,   "Wittenstein AG" }, \
+   { 684,   "Sena Technologies, Inc." }, \
+   { 685,   "Marathon Ltd." }, \
+   { 686,   "APV Products Unna" }, \
+   { 687,   "Creator Teknisk Utvedkling AB" }, \
+   { 689,   "Mibu Denki Industrial Co., Ltd." }, \
+   { 690,   "Takamatsu Machineer Section" }, \
+   { 691,   "Startco Engineering Ltd." }, \
+   { 693,   "Holjeron" }, \
+   { 694,   "ALCATEL High Vacuum Technology" }, \
+   { 695,   "Taesan LCD Co., Ltd." }, \
+   { 696,   "POSCON" }, \
+   { 697,   "VMIC" }, \
+   { 698,   "Matsushita Electric Works, Ltd." }, \
+   { 699,   "IAI Corporation" }, \
+   { 700,   "Horst GmbH" }, \
+   { 701,   "MicroControl GmbH & Co." }, \
+   { 702,   "Leine & Linde AB" }, \
+   { 703,   "Hastings Instruments" }, \
+   { 704,   "EC Elettronica Srl" }, \
+   { 705,   "VIT Software HB" }, \
+   { 706,   "Bronkhorst High-Tech B.V." }, \
+   { 707,   "Optex Co.,Ltd." }, \
+   { 708,   "Yosio Electronic Co." }, \
+   { 709,   "Terasaki Electric Co., Ltd." }, \
+   { 710,   "Sodick Co., Ltd." }, \
+   { 711,   "MTS Systems Corporation-Automation Division" }, \
+   { 712,   "Mesa Systemtechnik" }, \
+   { 713,   "SHIN HO SYSTEM Co., Ltd." }, \
+   { 714,   "Kokusai Denki Engineering Co., Ltd." }, \
+   { 715,   "Loreme" }, \
+   { 716,   "SAB Brockskes GmbH & Co. KG" }, \
+   { 717,   "Trumpf Laser GmbH + Co. KG" }, \
+   { 718,   "Niigata Electronic Instruments Co., Ltd." }, \
+   { 719,   "Yokogawa Digital Computer Corporation" }, \
+   { 720,   "O.N. Electronic Co., Ltd." }, \
+   { 721,   "Industrial Control Communication, Inc." }, \
+   { 722,   "ABB Inc. (Elsag Bailey)" }, \
+   { 723,   "Electrowave USA, Inc." }, \
+   { 724,   "Industrial Network Controls, LLC" }, \
+   { 725,   "KDT Systems Co., Ltd." }, \
+   { 726,   "SEFA Technology Inc." }, \
+   { 727,   "Nippon POP Rivets and Fasteners Ltd." }, \
+   { 728,   "Yamato Scale Co., Ltd." }, \
+   { 729,   "Zener Electric" }, \
+   { 730,   "GSE Scale Systems" }, \
+   { 731,   "ISAS (Integrated Switchgear & Sys. Pty Ltd)" }, \
+   { 732,   "Beta LaserMike Limited" }, \
+   { 733,   "TOEI Electric Co., Ltd." }, \
+   { 734,   "Hakko Electronics Co., Ltd" }, \
+   { 735,   "Tang & Associates" }, \
+   { 736,   "RFID, Inc." }, \
+   { 737,   "Adwin Corporation" }, \
+   { 738,   "Osaka Vacuum, Ltd." }, \
+   { 739,   "A-Kyung Motion, Inc." }, \
+   { 740,   "Camozzi S.P. A." }, \
+   { 741,   "Crevis Co., LTD" }, \
+   { 742,   "Rice Lake Weighing Systems" }, \
+   { 743,   "Linux Network Services" }, \
+   { 744,   "KEB Antriebstechnik GmbH" }, \
+   { 745,   "Hagiwara Electric Co., Ltd." }, \
+   { 746,   "Glass Inc. International" }, \
+   { 748,   "DVT Corporation" }, \
+   { 749,   "Woodward Governor" }, \
+   { 750,   "Mosaic Systems, Inc." }, \
+   { 751,   "Laserline GmbH" }, \
+   { 752,   "COM-TEC, Inc." }, \
+   { 754,   "Prof-face European Technology Center" }, \
+   { 755,   "Fuji Automation Co.,Ltd." }, \
+   { 756,   "Matsutame Co., Ltd." }, \
+   { 757,   "Hitachi Via Mechanics, Ltd." }, \
+   { 758,   "Dainippon Screen Mfg. Co. Ltd." }, \
+   { 759,   "FLS Automation A/S" }, \
+   { 760,   "ABB Stotz Kontakt GmbH" }, \
+   { 761,   "Technical Marine Service" }, \
+   { 762,   "Advanced Automation Associates, Inc." }, \
+   { 763,   "Baumer Ident GmbH" }, \
+   { 764,   "Tsubaki Emerson Co." }, \
+   { 766,   "Furukawa Co.,Ltd." }, \
+   { 767,   "Active Power" }, \
+   { 768,   "CSIRO Mining Automation" }, \
+   { 769,   "Matrix Integrated Systems" }, \
+   { 770,   "Digitronic Automationsanlagen GmbH" }, \
+   { 771,   "Stegmann, Inc." }, \
+   { 772,   "TAE-Antriebstechnik GmbH" }, \
+   { 773,   "Electronic Solutions" }, \
+   { 774,   "Rocon L.L.C." }, \
+   { 775,   "Dijitized Communications Inc." }, \
+   { 776,   "Asahi Organic Chemicals Industry Co.,Ltd." }, \
+   { 777,   "Hodensha" }, \
+   { 778,   "Harting, Inc. NA" }, \
+   { 779,   "Kuebler GmbH" }, \
+   { 780,   "Yamatake Corporation" }, \
+   { 781,   "JOEL" }, \
+   { 782,   "Yamatake Industrial Systems Co.,Ltd." }, \
+   { 783,   "HAEHNE Elektronische Messgerate GmbH" }, \
+   { 784,   "Ci Technologies Pty Ltd (for Pelamos Industries)" }, \
+   { 785,   "N. SCHLUMBERGER" }, \
+   { 786,   "Teijin Seiki Co., Ltd." }, \
+   { 787,   "DAIKIN Industries, Ltd" }, \
+   { 788,   "RyuSyo Industrial Co., Ltd." }, \
+   { 789,   "SAGINOMIYA SEISAKUSHO, INC." }, \
+   { 790,   "Seishin Engineering Co., Ltd." }, \
+   { 791,   "Japan Support System Ltd." }, \
+   { 792,   "Decsys" }, \
+   { 793,   "Metronix Messgerate u. Elektronik GmbH" }, \
+   { 795,   "Vaccon Company, Inc." }, \
+   { 796,   "Siemens Energy & Automation, Inc." }, \
+   { 797,   "Ten X Technology, Inc." }, \
+   { 798,   "Tyco Electronics" }, \
+   { 799,   "Delta Power Electronics Center" }, \
+   { 800,   "Denker" }, \
+   { 801,   "Autonics Corporation" }, \
+   { 802,   "JFE Electronic Engineering Pty. Ltd." }, \
+   { 803,   "ICP DAS Co., LTD" }, \
+   { 804,   "Electro-Sensors, Inc." }, \
+   { 805,   "Digi International, Inc." }, \
+   { 806,   "Texas Instruments" }, \
+   { 807,   "ADTEC Plasma Technology Co., Ltd" }, \
+   { 808,   "SICK AG" }, \
+   { 809,   "Ethernet Peripherals, Inc." }, \
+   { 810,   "Animatics Corporation" }, \
+   { 811,   "Partlow" }, \
+   { 812,   "Process Control Corporation" }, \
+   { 813,   "SystemV. Inc." }, \
+   { 814,   "Danaher Motion SRL" }, \
+   { 815,   "SHINKAWA Sensor Technology, Inc." }, \
+   { 816,   "Tesch GmbH & Co. KG" }, \
+   { 817,   "Advance Electric Company, Inc." }, \
+   { 818,   "Trend Controls Systems Ltd." }, \
+   { 819,   "Guangzhou ZHIYUAN Electronic Co., Ltd." }, \
+   { 820,   "Mykrolis Corporation" }, \
+   { 821,   "Bethlehem Steel Corporation" }, \
+   { 822,   "KK ICP" }, \
+   { 823,   "Takemoto Denki Corporation" }, \
+   { 824,   "The Montalvo Corporation" }, \
+   { 825,   "General Controls Sistemas Ltd." }, \
+   { 826,   "LEONI Special Cables GmbH" }, \
+   { 828,   "ONO SOKKI CO.,LTD." }, \
+   { 829,   "Rockwell Samsung Automation" }, \
+   { 830,   "Shindengen Electric Mfg. Co. Ltd." }, \
+   { 831,   "Origin Electric Co. Ltd" }, \
+   { 832,   "Quest Technical Solutions, Inc." }, \
+   { 833,   "LG Cable Ltd." }, \
+   { 834,   "Enercon-Nord Electronic GmbH" }, \
+   { 835,   "Northwire Inc." }, \
+   { 836,   "Engel Elektroantriebe GmbH" }, \
+   { 837,   "The Stanley Works" }, \
+   { 838,   "Celesco Transducer Products, Inc." }, \
+   { 839,   "Chugoku Electric Wire and Cable Co." }, \
+   { 840,   "Kongsberg Simrad AS" }, \
+   { 841,   "Panduit Corporation" }, \
+   { 842,   "Spellman High Voltage Electronics Corporation" }, \
+   { 843,   "Kokusai Electric Alpha Co., Ltd." }, \
+   { 844,   "Brooks Automation, Inc." }, \
+   { 845,   "ANYWIRE CORPORATION" }, \
+   { 846,   "Honda Electronics Co. Ltd" }, \
+   { 847,   "REO Elektronik AG" }, \
+   { 848,   "Fusion UV Systems, Inc." }, \
+   { 849,   "ASI Advanced Semiconductor Instruments GmbH" }, \
+   { 850,   "Datalogic, Inc." }, \
+   { 851,   "SoftPLC Corporation" }, \
+   { 852,   "Dynisco Instruments LLC" }, \
+   { 853,   "WEG Industrias SA" }, \
+   { 854,   "Frontline Test Equipment, Inc." }, \
+   { 855,   "Tamagawa Seiki Co Ltd" }, \
+   { 856,   "Multi Computing Co., Ltd." }, \
+   { 857,   "RVSI" }, \
+   { 858,   "Commercial Timesharing Inc." }, \
+   { 859,   "Tennessee Rand Automation" }, \
+   { 860,   "Wacogiken Co., Ltd" }, \
+   { 861,   "Reflex Integration Inc." }, \
+   { 862,   "Siemens AG, A&D PI Flow Instruments" }, \
+   { 863,   "G. Bachmann Electronik GmbH" }, \
+   { 864,   "NT International" }, \
+   { 865,   "Schweitzer Engineering Laboratories" }, \
+   { 866,   "ATR Industrie-Elektronik GmbH Co." }, \
+   { 867,   "PLASMATECH CO. LTD" }, \
+   { 868,   "Unaxis USA Inc." }, \
+   { 869,   "GEMU GmbH & Co. KG" }, \
+   { 870,   "Alcorn McBride Inc." }, \
+   { 871,   "MORI SEIKI CO., LTD" }, \
+   { 872,   "NodeTech Systems Ltd." }, \
+   { 873,   "Emhart Teknologies" }, \
+   { 874,   "Cervis, Inc." }, \
+   { 875,   "FieldServer Technologies (Div Sierra Monitor Corp)" }, \
+   { 876,   "NEDAP Power Supplies" }, \
+   { 877,   "Nippon Sanso Corporation" }, \
+   { 878,   "Mitomi Giken Co. Ltd." }, \
+   { 879,   "PULS GmbH " }, \
+   { 880,   "Elotech Industrieelektronik GmbH" }, \
+   { 881,   "Japan Control Engineering Co Ltd" }, \
+   { 882,   "Zues Emtek Co Ltd" }, \
+   { 883,   "Automa SRL" }, \
+   { 884,   "Harms+Wende GmbH & Co KG" }, \
+   { 887,   "Bernecker + Rainer Industrie-Elektronik GmbH" }, \
+   { 888,   "Hiprom (Pty) Ltd." }, \
+   { 889,   "Agilicom" }, \
+   { 890,   "Nitta Corporation" }, \
+   { 891,   "Kontron Modular Computers GmbH" }, \
+   { 892,   "Marlin Control" }, \
+   { 893,   "ELCIS srl" }, \
+   { 895,   "Avery Weigh-Tronix" }, \
+   { 896,   "Vital Systems Inc." }, \
+   { 897,   "Draka USA" }, \
+   { 899,   "Practicon Ltd" }, \
+   { 900,   "Schunk GmbH & Co. KG" }, \
+   { 902,   "Defontaine Groupe" }, \
+   { 903,   "Emerson Process Management Power & Water Solutions" },
+
+
+/*
+** Exported variables
+*/
+
+extern const value_string cip_devtype_vals[];
+extern const value_string cip_vendor_vals[];
diff -urN ethereal-0.10.6/epan/dissectors/packet-cisco-oui.c ethereal-0.10.7/epan/dissectors/packet-cisco-oui.c
--- ethereal-0.10.6/epan/dissectors/packet-cisco-oui.c	2004-08-12 17:42:08.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-cisco-oui.c	2004-10-20 17:34:46.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-cisco-oui.c
  * Register an LLC dissector table for Cisco's OUI 00:00:0c
  *
- * $Id: packet-cisco-oui.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-cisco-oui.c 11904 2004-09-05 07:06:23Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -43,7 +43,7 @@
  */
 static const value_string cisco_pid_vals[] = {
 	{ 0x0102,	"DRIP" },
-	{ 0x0104,	"PagP" },	/* Port Aggregation Protocol */
+	{ 0x0104,	"PAgP" },	/* Port Aggregation Protocol */
 	{ 0x0105,	"MLS Hello" },	/* from a mail message found on the Web */
 	{ 0x010b,	"PVSTP+" },	/* Per-VLAN Spanning Tree Protocol */
 	{ 0x010c,	"VLAN Bridge" },
diff -urN ethereal-0.10.6/epan/dissectors/packet-clnp.c ethereal-0.10.7/epan/dissectors/packet-clnp.c
--- ethereal-0.10.6/epan/dissectors/packet-clnp.c	2004-08-12 17:42:04.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-clnp.c	2004-10-20 17:34:43.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-clnp.c
  * Routines for ISO/OSI network and transport protocol packet disassembly
  *
- * $Id: packet-clnp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-clnp.c 12130 2004-09-29 00:52:45Z guy $
  * Laurent Deniel <laurent.deniel@free.fr>
  * Ralf Schneider <Ralf.Schneider@t-online.de>
  *
@@ -31,7 +31,7 @@
 #include <string.h>
 #include <ctype.h>
 #include <glib.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/packet.h>
 #include "reassemble.h"
 #include "packet-osi.h"
@@ -39,7 +39,7 @@
 #include "packet-isis.h"
 #include "packet-esis.h"
 #include "nlpid.h"
-#include "ipproto.h"
+#include <epan/ipproto.h>
 
 /* protocols and fields */
 
@@ -77,6 +77,13 @@
 
 static int hf_cotp_srcref      = -1;
 static int hf_cotp_destref     = -1;
+static int hf_cotp_tpdu_number = -1;
+static int hf_cotp_tpdu_number_extended = -1;
+static int hf_cotp_next_tpdu_number = -1;
+static int hf_cotp_next_tpdu_number_extended = -1;
+static int hf_cotp_eot			= -1;
+static int hf_cotp_eot_extended	= -1;
+
 static int hf_cotp_type        = -1;
 static int hf_cotp_segments    = -1;
 static int hf_cotp_segment     = -1;
@@ -87,6 +94,11 @@
 static int hf_cotp_segment_error = -1;
 static int hf_cotp_reassembled_in = -1;
 
+static const true_false_string fragment_descriptions = {
+	"Yes",
+	"No"
+};
+
 static int  proto_cltp         = -1;
 static gint ett_cltp           = -1;
 
@@ -859,7 +871,7 @@
   gboolean is_class_234;
   guint16  dst_ref;
   guint    tpdu_nr;
-  guint    fragment = 0;
+  gboolean fragment = FALSE;
   guint32  fragment_length = 0;
   tvbuff_t *next_tvb;
   tvbuff_t *reassembled_tvb = NULL;
@@ -880,7 +892,7 @@
       if ( tpdu_nr & 0x80 )
 	tpdu_nr = tpdu_nr & 0x7F;
       else
-	fragment = 1;
+	fragment = TRUE;
       is_extended = FALSE;
       is_class_234 = TRUE;
       dst_ref = tvb_get_ntohs(tvb, offset + P_DST_REF);
@@ -896,7 +908,7 @@
       if ( tpdu_nr & 0x80000000 )
 	tpdu_nr = tpdu_nr & 0x7FFFFFFF;
       else
-	fragment = 1;
+	fragment = TRUE;
       is_extended = TRUE;
       is_class_234 = TRUE;
       dst_ref = tvb_get_ntohs(tvb, offset + P_DST_REF);
@@ -907,7 +919,7 @@
       if ( tpdu_nr & 0x80 )
 	tpdu_nr = tpdu_nr & 0x7F;
       else
-	fragment = 1;
+	fragment = TRUE;
       is_extended = FALSE;
       is_class_234 = FALSE;
       dst_ref = 0;
@@ -959,19 +971,18 @@
 
   if (is_extended) {
     if (tree) {
-      proto_tree_add_text(cotp_tree, tvb, offset, 4,
-			    "TPDU number: 0x%08x (%s)",
-			    tpdu_nr,
-			    (fragment)? "fragment":"complete");
+      proto_tree_add_uint(cotp_tree, hf_cotp_tpdu_number_extended, tvb, offset, 4,
+			  tpdu_nr);
+      proto_tree_add_item(cotp_tree, hf_cotp_eot_extended, tvb, offset, 4,
+      			  TRUE);
     }
     offset += 4;
     li -= 4;
   } else {
     if (tree) {
-      proto_tree_add_text(cotp_tree, tvb, offset, 1,
-			    "TPDU number: 0x%02x (%s)",
-			    tpdu_nr,
-			    (fragment)? "fragment":"complete");
+      proto_tree_add_uint(cotp_tree, hf_cotp_tpdu_number, tvb, offset, 1,
+			  tpdu_nr);
+      proto_tree_add_item(cotp_tree, hf_cotp_eot, tvb, offset, 1, TRUE);
     }
     offset += 1;
     li -= 1;
@@ -1143,15 +1154,15 @@
 
   if (is_extended) {
     if (tree) {
-      proto_tree_add_text(cotp_tree, tvb, offset, 4,
-			    "TPDU number: 0x%02x", tpdu_nr);
+      proto_tree_add_uint(cotp_tree, hf_cotp_tpdu_number_extended, tvb,
+			  offset, 4, tpdu_nr);
     }
     offset += 4;
     li -= 4;
   } else {
     if (tree) {
-      proto_tree_add_text(cotp_tree, tvb, offset, 1,
-			    "TPDU number: 0x%02x", tpdu_nr);
+      proto_tree_add_uint(cotp_tree, hf_cotp_tpdu_number, tvb, offset, 1,
+			  tpdu_nr);
     }
     offset += 1;
     li -= 1;
@@ -1214,11 +1225,11 @@
 			  "Credit: %u", cdt);
     proto_tree_add_uint(cotp_tree, hf_cotp_destref, tvb, offset +  2, 2, dst_ref);
     if (li == LI_NORMAL_RJ)
-      proto_tree_add_text(cotp_tree, tvb, offset +  4, 1,
-			  "Your TPDU number: 0x%02x", tpdu_nr);
+      proto_tree_add_uint(cotp_tree, hf_cotp_next_tpdu_number, tvb, offset + 4,
+			  1, tpdu_nr);
     else {
-      proto_tree_add_text(cotp_tree, tvb, offset +  4, 4,
-			  "Your TPDU number: 0x%02x", tpdu_nr);
+      proto_tree_add_uint(cotp_tree, hf_cotp_next_tpdu_number_extended, tvb,
+			  offset + 4, 4, tpdu_nr);
       proto_tree_add_text(cotp_tree, tvb, offset +  8, 2,
 			  "Credit: 0x%02x", credit);
     }
@@ -1415,8 +1426,8 @@
     li -= 2;
 
     if (tree) {
-      proto_tree_add_text(cotp_tree, tvb, offset, 1,
-			  "Your TPDU number: 0x%02x", tpdu_nr);
+      proto_tree_add_uint(cotp_tree, hf_cotp_next_tpdu_number, tvb, offset, 1,
+			  tpdu_nr);
     }
     offset += 1;
     li -= 1;
@@ -1456,8 +1467,8 @@
     li -= 2;
 
     if (tree) {
-      proto_tree_add_text(cotp_tree, tvb, offset, 4,
-			  "Your TPDU number: 0x%08x", tpdu_nr);
+      proto_tree_add_uint(cotp_tree, hf_cotp_next_tpdu_number_extended, tvb,
+			  offset, 4, tpdu_nr);
     }
     offset += 4;
     li -= 4;
@@ -1553,15 +1564,15 @@
 
   if (is_extended) {
     if (tree) {
-      proto_tree_add_text(cotp_tree, tvb, offset, 4,
-			    "Your TPDU number: 0x%08x", tpdu_nr);
+      proto_tree_add_uint(cotp_tree, hf_cotp_next_tpdu_number_extended, tvb,
+			  offset, 4, tpdu_nr);
     }
     offset += 4;
     li -= 4;
   } else {
     if (tree) {
-      proto_tree_add_text(cotp_tree, tvb, offset, 1,
-			    "Your TPDU number: 0x%02x", tpdu_nr);
+      proto_tree_add_uint(cotp_tree, hf_cotp_next_tpdu_number, tvb, offset, 1,
+			  tpdu_nr);
     }
     offset += 1;
     li -= 1;
@@ -2292,6 +2303,24 @@
     { &hf_cotp_type,
       { "COTP PDU Type", "cotp.type", FT_UINT8, BASE_HEX, VALS(cotp_tpdu_type_abbrev_vals), 0x0,
         "COTP PDU Type", HFILL}},
+    { &hf_cotp_tpdu_number,
+      { "TPDU number", "cotp.tpdu-number", FT_UINT8, BASE_HEX, NULL, 0x0,
+        "TPDU number", HFILL}},
+    { &hf_cotp_tpdu_number_extended,
+      { "TPDU number", "cotp.tpdu-number", FT_UINT32, BASE_HEX, NULL, 0x0,
+        "TPDU number", HFILL}},
+    { &hf_cotp_next_tpdu_number,
+      { "Your TPDU number", "cotp.next-tpdu-number", FT_UINT8, BASE_HEX, NULL, 0x0,
+        "Your TPDU number", HFILL}},
+    { &hf_cotp_next_tpdu_number_extended,
+      { "Your TPDU number", "cotp.next-tpdu-number", FT_UINT32, BASE_HEX, NULL, 0x0,
+        "Your TPDU number", HFILL}},
+    { &hf_cotp_eot,
+      { "Last data unit", "cotp.eot", FT_BOOLEAN, 8, TFS(&fragment_descriptions),  0x80,
+        "Is current TPDU the last data unit of a complete DT TPDU sequence?", HFILL}},
+    { &hf_cotp_eot_extended,
+      { "Last data unit", "cotp.eot", FT_BOOLEAN, 32, TFS(&fragment_descriptions),  0x80000000,
+        "Is current TPDU the last data unit of a complete DT TPDU sequence?", HFILL}},
     { &hf_cotp_segment_overlap,
       { "Segment overlap", "cotp.segment.overlap", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
 	"Segment overlaps with other segments", HFILL }},
@@ -2350,7 +2379,8 @@
 
   prefs_register_bool_preference(cotp_module, "reassemble",
 	 "Reassemble segmented COTP datagrams",
-	 "Whether segmented COTP datagrams should be reassembled",
+	 "Whether segmented COTP datagrams should be reassembled."
+    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 	&cotp_reassemble);
 
   prefs_register_enum_preference(cotp_module, "tsap_display",
diff -urN ethereal-0.10.6/epan/dissectors/packet-cms.c ethereal-0.10.7/epan/dissectors/packet-cms.c
--- ethereal-0.10.6/epan/dissectors/packet-cms.c	2004-08-12 17:42:20.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-cms.c	2004-10-20 17:34:51.000000000 -0500
@@ -1,15 +1,14 @@
 /* Do not modify this file.                                                   */
 /* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-cms.c                                                               */
-/* ../../tools/asn2eth.py -X -b -p cms -c cms.cnf -s packet-cms-template CryptographicMessageSyntax.asn */
+/* ./packet-cms.c                                                             */
+/* ../../tools/asn2eth.py -e -X -b -p cms -c cms.cnf -s packet-cms-template CryptographicMessageSyntax.asn */
 
 /* Input file: packet-cms-template.c */
-/* Include files: packet-cms-hf.c, packet-cms-ett.c, packet-cms-fn.c, packet-cms-hfarr.c, packet-cms-ettarr.c, packet-cms-val.h */
 
 /* packet-cms.c
  * Routines for RFC2630 Cryptographic Message Syntax packet dissection
  *
- * $Id: packet-cms-template.c,v 1.2 2004/05/25 21:07:43 guy Exp $
+ * $Id: packet-cms-template.c 12245 2004-10-08 20:28:04Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -53,14 +52,10 @@
 /* Initialize the protocol and registered fields */
 int proto_cms = -1;
 static int hf_cms_keyAttr_id = -1;
+static int hf_cms_ci_contentType = -1;
 
 /*--- Included file: packet-cms-hf.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-cms-hf.c                                                            */
-/* ../../tools/asn2eth.py -X -b -p cms -c cms.cnf -s packet-cms-template CryptographicMessageSyntax.asn */
-
 static int hf_cms_version = -1;                   /* CMSVersion */
 static int hf_cms_digestAlgorithms = -1;          /* DigestAlgorithmIdentifiers */
 static int hf_cms_encapContentInfo = -1;          /* EncapsulatedContentInfo */
@@ -75,7 +70,7 @@
 static int hf_cms_digestAlgorithm = -1;           /* DigestAlgorithmIdentifier */
 static int hf_cms_signedAttrs = -1;               /* SignedAttributes */
 static int hf_cms_signatureAlgorithm = -1;        /* SignatureAlgorithmIdentifier */
-static int hf_cms_signature = -1;                 /* SignatureValue */
+static int hf_cms_signatureValue = -1;            /* SignatureValue */
 static int hf_cms_unsignedAttrs = -1;             /* UnsignedAttributes */
 static int hf_cms_issuerAndSerialNumber = -1;     /* IssuerAndSerialNumber */
 static int hf_cms_subjectKeyIdentifier = -1;      /* SubjectKeyIdentifier */
@@ -105,7 +100,7 @@
 static int hf_cms_algorithm = -1;                 /* AlgorithmIdentifier */
 static int hf_cms_publicKey = -1;                 /* BIT_STRING */
 static int hf_cms_RecipientEncryptedKeys_item = -1;  /* RecipientEncryptedKey */
-static int hf_cms_rid1 = -1;                      /* KeyAgreeRecipientIdentifier */
+static int hf_cms_rekRid = -1;                    /* KeyAgreeRecipientIdentifier */
 static int hf_cms_rKeyId = -1;                    /* RecipientKeyIdentifier */
 static int hf_cms_date = -1;                      /* GeneralizedTime */
 static int hf_cms_other = -1;                     /* OtherKeyAttribute */
@@ -126,21 +121,17 @@
 static int hf_cms_issuer = -1;                    /* Name */
 static int hf_cms_serialNumber = -1;              /* CertificateSerialNumber */
 static int hf_cms_extendedCertificateInfo = -1;   /* ExtendedCertificateInfo */
-static int hf_cms_signature1 = -1;                /* Signature */
+static int hf_cms_signature = -1;                 /* Signature */
 static int hf_cms_attributes = -1;                /* UnauthAttributes */
 
 /*--- End of included file: packet-cms-hf.c ---*/
 
 
 /* Initialize the subtree pointers */
+static gint ett_cms_ContentInfo = -1;
 
 /*--- Included file: packet-cms-ett.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-cms-ett.c                                                           */
-/* ../../tools/asn2eth.py -X -b -p cms -c cms.cnf -s packet-cms-template CryptographicMessageSyntax.asn */
-
 static gint ett_cms_SignedData = -1;
 static gint ett_cms_DigestAlgorithmIdentifiers = -1;
 static gint ett_cms_SignerInfos = -1;
@@ -189,10 +180,7 @@
 
 /*--- Included file: packet-cms-fn.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-cms-fn.c                                                            */
-/* ../../tools/asn2eth.py -X -b -p cms -c cms.cnf -s packet-cms-template CryptographicMessageSyntax.asn */
+/*--- Fields for imported types ---*/
 
 static int dissect_algorithm(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_x509af_AlgorithmIdentifier(FALSE, tvb, offset, pinfo, tree, hf_cms_algorithm);
@@ -213,6 +201,7 @@
   return dissect_x509af_CertificateSerialNumber(FALSE, tvb, offset, pinfo, tree, hf_cms_serialNumber);
 }
 
+
 static int
 dissect_cms_ContentType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
   offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset,
@@ -261,8 +250,11 @@
 static int dissect_digestAlgorithm(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_cms_DigestAlgorithmIdentifier(FALSE, tvb, offset, pinfo, tree, hf_cms_digestAlgorithm);
 }
+static int dissect_digestAlgorithm_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_cms_DigestAlgorithmIdentifier(TRUE, tvb, offset, pinfo, tree, hf_cms_digestAlgorithm);
+}
 
-static ber_sequence DigestAlgorithmIdentifiers_set_of[1] = {
+static const ber_sequence DigestAlgorithmIdentifiers_set_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_DigestAlgorithmIdentifiers_item },
 };
 
@@ -292,7 +284,7 @@
   return dissect_cms_OCTET_STRING(FALSE, tvb, offset, pinfo, tree, hf_cms_keyIdentifier);
 }
 
-static ber_sequence EncapsulatedContentInfo_sequence[] = {
+static const ber_sequence EncapsulatedContentInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_eContentType },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_eContent },
   { 0, 0, 0, NULL }
@@ -321,7 +313,7 @@
   return dissect_cms_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_cms_attrType);
 }
 
-static ber_sequence Attribute_sequence[] = {
+static const ber_sequence Attribute_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_attrType },
   { 0, 0, 0, NULL }
 };
@@ -349,7 +341,7 @@
   return dissect_cms_Attribute(FALSE, tvb, offset, pinfo, tree, hf_cms_UnauthAttributes_item);
 }
 
-static ber_sequence UnauthAttributes_set_of[1] = {
+static const ber_sequence UnauthAttributes_set_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_UnauthAttributes_item },
 };
 
@@ -367,7 +359,7 @@
   return dissect_cms_UnauthAttributes(FALSE, tvb, offset, pinfo, tree, hf_cms_attributes);
 }
 
-static ber_sequence ExtendedCertificateInfo_sequence[] = {
+static const ber_sequence ExtendedCertificateInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_version },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_certificate },
   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_attributes },
@@ -405,14 +397,14 @@
 
   return offset;
 }
-static int dissect_signature1(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_cms_Signature(FALSE, tvb, offset, pinfo, tree, hf_cms_signature1);
+static int dissect_signature(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_cms_Signature(FALSE, tvb, offset, pinfo, tree, hf_cms_signature);
 }
 
-static ber_sequence ExtendedCertificate_sequence[] = {
+static const ber_sequence ExtendedCertificate_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_extendedCertificateInfo },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signatureAlgorithm },
-  { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_signature1 },
+  { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_signature },
   { 0, 0, 0, NULL }
 };
 
@@ -435,7 +427,7 @@
   { 0, NULL }
 };
 
-static ber_choice CertificateChoices_choice[] = {
+static const ber_choice CertificateChoices_choice[] = {
   {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_certificate },
   {   1, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_extendedCertificate_impl },
   {   2, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_attrCert_impl },
@@ -453,7 +445,7 @@
   return dissect_cms_CertificateChoices(FALSE, tvb, offset, pinfo, tree, hf_cms_CertificateSet_item);
 }
 
-static ber_sequence CertificateSet_set_of[1] = {
+static const ber_sequence CertificateSet_set_of[1] = {
   { -1/*choice*/ , -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_CertificateSet_item },
 };
 
@@ -471,7 +463,7 @@
   return dissect_cms_CertificateSet(TRUE, tvb, offset, pinfo, tree, hf_cms_certs);
 }
 
-static ber_sequence CertificateRevocationLists_set_of[1] = {
+static const ber_sequence CertificateRevocationLists_set_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_CertificateRevocationLists_item },
 };
 
@@ -486,13 +478,13 @@
   return dissect_cms_CertificateRevocationLists(TRUE, tvb, offset, pinfo, tree, hf_cms_crls);
 }
 
-static ber_sequence IssuerAndSerialNumber_sequence[] = {
+static const ber_sequence IssuerAndSerialNumber_sequence[] = {
   { BER_CLASS_ANY, -1, BER_FLAGS_NOOWNTAG, dissect_issuer },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_serialNumber },
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_cms_IssuerAndSerialNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
                                 IssuerAndSerialNumber_sequence, hf_index, ett_cms_IssuerAndSerialNumber);
@@ -514,6 +506,9 @@
 static int dissect_subjectKeyIdentifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_cms_SubjectKeyIdentifier(FALSE, tvb, offset, pinfo, tree, hf_cms_subjectKeyIdentifier);
 }
+static int dissect_subjectKeyIdentifier_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_cms_SubjectKeyIdentifier(TRUE, tvb, offset, pinfo, tree, hf_cms_subjectKeyIdentifier);
+}
 
 
 static const value_string SignerIdentifier_vals[] = {
@@ -522,9 +517,9 @@
   { 0, NULL }
 };
 
-static ber_choice SignerIdentifier_choice[] = {
+static const ber_choice SignerIdentifier_choice[] = {
   {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_issuerAndSerialNumber },
-  {   1, BER_CLASS_CON, 0, 0, dissect_subjectKeyIdentifier },
+  {   1, BER_CLASS_CON, 0, 0, dissect_subjectKeyIdentifier_impl },
   { 0, 0, 0, 0, NULL }
 };
 
@@ -539,7 +534,7 @@
   return dissect_cms_SignerIdentifier(FALSE, tvb, offset, pinfo, tree, hf_cms_sid);
 }
 
-static ber_sequence SignedAttributes_set_of[1] = {
+static const ber_sequence SignedAttributes_set_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_SignedAttributes_item },
 };
 
@@ -562,11 +557,11 @@
 
   return offset;
 }
-static int dissect_signature(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_cms_SignatureValue(FALSE, tvb, offset, pinfo, tree, hf_cms_signature);
+static int dissect_signatureValue(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_cms_SignatureValue(FALSE, tvb, offset, pinfo, tree, hf_cms_signatureValue);
 }
 
-static ber_sequence UnsignedAttributes_set_of[1] = {
+static const ber_sequence UnsignedAttributes_set_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_UnsignedAttributes_item },
 };
 
@@ -581,13 +576,13 @@
   return dissect_cms_UnsignedAttributes(TRUE, tvb, offset, pinfo, tree, hf_cms_unsignedAttrs);
 }
 
-static ber_sequence SignerInfo_sequence[] = {
+static const ber_sequence SignerInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_version },
   { -1/*choice*/ , -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_sid },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_digestAlgorithm },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_signedAttrs_impl },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signatureAlgorithm },
-  { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_signature },
+  { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_signatureValue },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_unsignedAttrs_impl },
   { 0, 0, 0, NULL }
 };
@@ -603,7 +598,7 @@
   return dissect_cms_SignerInfo(FALSE, tvb, offset, pinfo, tree, hf_cms_SignerInfos_item);
 }
 
-static ber_sequence SignerInfos_set_of[1] = {
+static const ber_sequence SignerInfos_set_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_SignerInfos_item },
 };
 
@@ -618,7 +613,7 @@
   return dissect_cms_SignerInfos(FALSE, tvb, offset, pinfo, tree, hf_cms_signerInfos);
 }
 
-static ber_sequence SignedData_sequence[] = {
+static const ber_sequence SignedData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_version },
   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_digestAlgorithms },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_encapContentInfo },
@@ -636,7 +631,7 @@
   return offset;
 }
 
-static ber_sequence OriginatorInfo_sequence[] = {
+static const ber_sequence OriginatorInfo_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_certs_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_crls_impl },
   { 0, 0, 0, NULL }
@@ -660,9 +655,9 @@
   { 0, NULL }
 };
 
-static ber_choice RecipientIdentifier_choice[] = {
+static const ber_choice RecipientIdentifier_choice[] = {
   {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_issuerAndSerialNumber },
-  {   1, BER_CLASS_CON, 0, 0, dissect_subjectKeyIdentifier },
+  {   1, BER_CLASS_CON, 0, 0, dissect_subjectKeyIdentifier_impl },
   { 0, 0, 0, 0, NULL }
 };
 
@@ -700,7 +695,7 @@
   return dissect_cms_EncryptedKey(FALSE, tvb, offset, pinfo, tree, hf_cms_encryptedKey);
 }
 
-static ber_sequence KeyTransRecipientInfo_sequence[] = {
+static const ber_sequence KeyTransRecipientInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_version },
   { -1/*choice*/ , -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_rid },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_keyEncryptionAlgorithm },
@@ -732,7 +727,7 @@
   return dissect_cms_BIT_STRING(FALSE, tvb, offset, pinfo, tree, hf_cms_publicKey);
 }
 
-static ber_sequence OriginatorPublicKey_sequence[] = {
+static const ber_sequence OriginatorPublicKey_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithm },
   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_publicKey },
   { 0, 0, 0, NULL }
@@ -745,8 +740,8 @@
 
   return offset;
 }
-static int dissect_originatorKey(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_cms_OriginatorPublicKey(FALSE, tvb, offset, pinfo, tree, hf_cms_originatorKey);
+static int dissect_originatorKey_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_cms_OriginatorPublicKey(TRUE, tvb, offset, pinfo, tree, hf_cms_originatorKey);
 }
 
 
@@ -757,10 +752,10 @@
   { 0, NULL }
 };
 
-static ber_choice OriginatorIdentifierOrKey_choice[] = {
+static const ber_choice OriginatorIdentifierOrKey_choice[] = {
   {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_issuerAndSerialNumber },
-  {   1, BER_CLASS_CON, 0, 0, dissect_subjectKeyIdentifier },
-  {   2, BER_CLASS_CON, 1, 0, dissect_originatorKey },
+  {   1, BER_CLASS_CON, 0, 0, dissect_subjectKeyIdentifier_impl },
+  {   2, BER_CLASS_CON, 1, 0, dissect_originatorKey_impl },
   { 0, 0, 0, 0, NULL }
 };
 
@@ -802,7 +797,7 @@
   return dissect_cms_OtherKeyAttribute(FALSE, tvb, offset, pinfo, tree, hf_cms_other);
 }
 
-static ber_sequence RecipientKeyIdentifier_sequence[] = {
+static const ber_sequence RecipientKeyIdentifier_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_subjectKeyIdentifier },
   { BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_date },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_other },
@@ -827,7 +822,7 @@
   { 0, NULL }
 };
 
-static ber_choice KeyAgreeRecipientIdentifier_choice[] = {
+static const ber_choice KeyAgreeRecipientIdentifier_choice[] = {
   {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_issuerAndSerialNumber },
   {   1, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_rKeyId_impl },
   { 0, 0, 0, 0, NULL }
@@ -840,12 +835,12 @@
 
   return offset;
 }
-static int dissect_rid1(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_cms_KeyAgreeRecipientIdentifier(FALSE, tvb, offset, pinfo, tree, hf_cms_rid1);
+static int dissect_rekRid(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_cms_KeyAgreeRecipientIdentifier(FALSE, tvb, offset, pinfo, tree, hf_cms_rekRid);
 }
 
-static ber_sequence RecipientEncryptedKey_sequence[] = {
-  { -1/*choice*/ , -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_rid1 },
+static const ber_sequence RecipientEncryptedKey_sequence[] = {
+  { -1/*choice*/ , -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_rekRid },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_encryptedKey },
   { 0, 0, 0, NULL }
 };
@@ -861,7 +856,7 @@
   return dissect_cms_RecipientEncryptedKey(FALSE, tvb, offset, pinfo, tree, hf_cms_RecipientEncryptedKeys_item);
 }
 
-static ber_sequence RecipientEncryptedKeys_sequence_of[1] = {
+static const ber_sequence RecipientEncryptedKeys_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_RecipientEncryptedKeys_item },
 };
 
@@ -876,7 +871,7 @@
   return dissect_cms_RecipientEncryptedKeys(FALSE, tvb, offset, pinfo, tree, hf_cms_recipientEncryptedKeys);
 }
 
-static ber_sequence KeyAgreeRecipientInfo_sequence[] = {
+static const ber_sequence KeyAgreeRecipientInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_version },
   { BER_CLASS_CON, 0, BER_FLAGS_NOTCHKTAG, dissect_originator },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_ukm },
@@ -892,11 +887,11 @@
 
   return offset;
 }
-static int dissect_kari(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_cms_KeyAgreeRecipientInfo(FALSE, tvb, offset, pinfo, tree, hf_cms_kari);
+static int dissect_kari_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_cms_KeyAgreeRecipientInfo(TRUE, tvb, offset, pinfo, tree, hf_cms_kari);
 }
 
-static ber_sequence KEKIdentifier_sequence[] = {
+static const ber_sequence KEKIdentifier_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_keyIdentifier },
   { BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_date },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_other },
@@ -914,7 +909,7 @@
   return dissect_cms_KEKIdentifier(FALSE, tvb, offset, pinfo, tree, hf_cms_kekid);
 }
 
-static ber_sequence KEKRecipientInfo_sequence[] = {
+static const ber_sequence KEKRecipientInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_version },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_kekid },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_keyEncryptionAlgorithm },
@@ -929,8 +924,8 @@
 
   return offset;
 }
-static int dissect_kekri(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_cms_KEKRecipientInfo(FALSE, tvb, offset, pinfo, tree, hf_cms_kekri);
+static int dissect_kekri_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_cms_KEKRecipientInfo(TRUE, tvb, offset, pinfo, tree, hf_cms_kekri);
 }
 
 
@@ -941,10 +936,10 @@
   { 0, NULL }
 };
 
-static ber_choice RecipientInfo_choice[] = {
+static const ber_choice RecipientInfo_choice[] = {
   {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_ktri },
-  {   1, BER_CLASS_CON, 1, 0, dissect_kari },
-  {   2, BER_CLASS_CON, 2, 0, dissect_kekri },
+  {   1, BER_CLASS_CON, 1, 0, dissect_kari_impl },
+  {   2, BER_CLASS_CON, 2, 0, dissect_kekri_impl },
   { 0, 0, 0, 0, NULL }
 };
 
@@ -959,7 +954,7 @@
   return dissect_cms_RecipientInfo(FALSE, tvb, offset, pinfo, tree, hf_cms_RecipientInfos_item);
 }
 
-static ber_sequence RecipientInfos_set_of[1] = {
+static const ber_sequence RecipientInfos_set_of[1] = {
   { -1/*choice*/ , -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_RecipientInfos_item },
 };
 
@@ -997,7 +992,7 @@
   return dissect_cms_EncryptedContent(TRUE, tvb, offset, pinfo, tree, hf_cms_encryptedContent);
 }
 
-static ber_sequence EncryptedContentInfo_sequence[] = {
+static const ber_sequence EncryptedContentInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_contentType },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_contentEncryptionAlgorithm },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_encryptedContent_impl },
@@ -1015,7 +1010,7 @@
   return dissect_cms_EncryptedContentInfo(FALSE, tvb, offset, pinfo, tree, hf_cms_encryptedContentInfo);
 }
 
-static ber_sequence UnprotectedAttributes_set_of[1] = {
+static const ber_sequence UnprotectedAttributes_set_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_UnprotectedAttributes_item },
 };
 
@@ -1030,7 +1025,7 @@
   return dissect_cms_UnprotectedAttributes(TRUE, tvb, offset, pinfo, tree, hf_cms_unprotectedAttrs);
 }
 
-static ber_sequence EnvelopedData_sequence[] = {
+static const ber_sequence EnvelopedData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_version },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_originatorInfo_impl },
   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_recipientInfos },
@@ -1059,7 +1054,7 @@
   return dissect_cms_Digest(FALSE, tvb, offset, pinfo, tree, hf_cms_digest);
 }
 
-static ber_sequence DigestedData_sequence[] = {
+static const ber_sequence DigestedData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_version },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_digestAlgorithm },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_encapContentInfo },
@@ -1075,7 +1070,7 @@
   return offset;
 }
 
-static ber_sequence EncryptedData_sequence[] = {
+static const ber_sequence EncryptedData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_version },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_encryptedContentInfo },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_unprotectedAttrs_impl },
@@ -1101,7 +1096,7 @@
   return dissect_cms_MessageAuthenticationCodeAlgorithm(FALSE, tvb, offset, pinfo, tree, hf_cms_macAlgorithm);
 }
 
-static ber_sequence AuthAttributes_set_of[1] = {
+static const ber_sequence AuthAttributes_set_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_AuthAttributes_item },
 };
 
@@ -1128,12 +1123,12 @@
   return dissect_cms_MessageAuthenticationCode(FALSE, tvb, offset, pinfo, tree, hf_cms_mac);
 }
 
-static ber_sequence AuthenticatedData_sequence[] = {
+static const ber_sequence AuthenticatedData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_version },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_originatorInfo_impl },
   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_recipientInfos },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_macAlgorithm },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_digestAlgorithm },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digestAlgorithm_impl },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_encapContentInfo },
   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authenticatedAttributes_impl },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_mac },
@@ -1179,7 +1174,7 @@
   return offset;
 }
 
-static ber_sequence OtherKeyAttribute_sequence[] = {
+static const ber_sequence OtherKeyAttribute_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_keyAttrId },
   { BER_CLASS_ANY, 0, 0, dissect_keyAttr_type },
   { 0, 0, 0, NULL }
@@ -1224,11 +1219,49 @@
 	dissect_cms_AuthenticatedData(FALSE, tvb, 0, pinfo, tree, -1);
 }
 
+
+
+/* ContentInfo can not yet be handled by the compiler */
+static char ci_contentType[64]; /*64 chars should be long enough? */
+static int 
+dissect_hf_cms_contentType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) 
+{
+  offset = dissect_ber_object_identifier(FALSE, pinfo, tree, tvb, offset,
+                                         hf_cms_ci_contentType, ci_contentType);
+  return offset;
+}
+static int 
+dissect_hf_cms_contentType_content(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) 
+{
+  offset=call_ber_oid_callback(ci_contentType, tvb, offset, pinfo, tree);
+
+  return offset;
+}
+
+static const ber_sequence ContentInfo_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_hf_cms_contentType },
+  { BER_CLASS_ANY, 0, 0, dissect_hf_cms_contentType_content },
+  { 0, 0, 0, NULL }
+};
+
+int
+dissect_cms_ContentInfo(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                ContentInfo_sequence, hf_index, ett_cms_ContentInfo);
+
+  return offset;
+}
+
+
 /*--- proto_register_cms ----------------------------------------------*/
 void proto_register_cms(void) {
 
   /* List of fields */
   static hf_register_info hf[] = {
+    { &hf_cms_ci_contentType,
+      { "contentType", "cms.contentInfo.contentType",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "ContentType", HFILL }},
     { &hf_cms_keyAttr_id,
       { "keyAttr_id", "cms.keyAttr_id",
         FT_STRING, BASE_NONE, NULL, 0,
@@ -1236,11 +1269,6 @@
 
 /*--- Included file: packet-cms-hfarr.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-cms-hfarr.c                                                         */
-/* ../../tools/asn2eth.py -X -b -p cms -c cms.cnf -s packet-cms-template CryptographicMessageSyntax.asn */
-
     { &hf_cms_version,
       { "version", "cms.version",
         FT_INT32, BASE_DEC, VALS(CMSVersion_vals), 0,
@@ -1266,11 +1294,11 @@
         FT_UINT32, BASE_DEC, NULL, 0,
         "SignedData/signerInfos", HFILL }},
     { &hf_cms_DigestAlgorithmIdentifiers_item,
-      { "Item(##)", "cms.DigestAlgorithmIdentifiers_item",
+      { "Item", "cms.DigestAlgorithmIdentifiers_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "DigestAlgorithmIdentifiers/_item", HFILL }},
     { &hf_cms_SignerInfos_item,
-      { "Item(##)", "cms.SignerInfos_item",
+      { "Item", "cms.SignerInfos_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "SignerInfos/_item", HFILL }},
     { &hf_cms_eContentType,
@@ -1297,7 +1325,7 @@
       { "signatureAlgorithm", "cms.signatureAlgorithm",
         FT_NONE, BASE_NONE, NULL, 0,
         "", HFILL }},
-    { &hf_cms_signature,
+    { &hf_cms_signatureValue,
       { "signature", "cms.signature",
         FT_BYTES, BASE_HEX, NULL, 0,
         "SignerInfo/signature", HFILL }},
@@ -1314,11 +1342,11 @@
         FT_BYTES, BASE_HEX, NULL, 0,
         "", HFILL }},
     { &hf_cms_SignedAttributes_item,
-      { "Item(##)", "cms.SignedAttributes_item",
+      { "Item", "cms.SignedAttributes_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "SignedAttributes/_item", HFILL }},
     { &hf_cms_UnsignedAttributes_item,
-      { "Item(##)", "cms.UnsignedAttributes_item",
+      { "Item", "cms.UnsignedAttributes_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "UnsignedAttributes/_item", HFILL }},
     { &hf_cms_attrType,
@@ -1346,7 +1374,7 @@
         FT_UINT32, BASE_DEC, NULL, 0,
         "OriginatorInfo/certs", HFILL }},
     { &hf_cms_RecipientInfos_item,
-      { "Item(##)", "cms.RecipientInfos_item",
+      { "Item", "cms.RecipientInfos_item",
         FT_UINT32, BASE_DEC, VALS(RecipientInfo_vals), 0,
         "RecipientInfos/_item", HFILL }},
     { &hf_cms_contentType,
@@ -1362,7 +1390,7 @@
         FT_BYTES, BASE_HEX, NULL, 0,
         "EncryptedContentInfo/encryptedContent", HFILL }},
     { &hf_cms_UnprotectedAttributes_item,
-      { "Item(##)", "cms.UnprotectedAttributes_item",
+      { "Item", "cms.UnprotectedAttributes_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "UnprotectedAttributes/_item", HFILL }},
     { &hf_cms_ktri,
@@ -1414,10 +1442,10 @@
         FT_BYTES, BASE_HEX, NULL, 0,
         "OriginatorPublicKey/publicKey", HFILL }},
     { &hf_cms_RecipientEncryptedKeys_item,
-      { "Item[##]", "cms.RecipientEncryptedKeys_item",
+      { "Item", "cms.RecipientEncryptedKeys_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "RecipientEncryptedKeys/_item", HFILL }},
-    { &hf_cms_rid1,
+    { &hf_cms_rekRid,
       { "rid", "cms.rid",
         FT_UINT32, BASE_DEC, VALS(KeyAgreeRecipientIdentifier_vals), 0,
         "RecipientEncryptedKey/rid", HFILL }},
@@ -1462,15 +1490,15 @@
         FT_UINT32, BASE_DEC, NULL, 0,
         "AuthenticatedData/unauthenticatedAttributes", HFILL }},
     { &hf_cms_AuthAttributes_item,
-      { "Item(##)", "cms.AuthAttributes_item",
+      { "Item", "cms.AuthAttributes_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "AuthAttributes/_item", HFILL }},
     { &hf_cms_UnauthAttributes_item,
-      { "Item(##)", "cms.UnauthAttributes_item",
+      { "Item", "cms.UnauthAttributes_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "UnauthAttributes/_item", HFILL }},
     { &hf_cms_CertificateRevocationLists_item,
-      { "Item(##)", "cms.CertificateRevocationLists_item",
+      { "Item", "cms.CertificateRevocationLists_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "CertificateRevocationLists/_item", HFILL }},
     { &hf_cms_certificate,
@@ -1486,7 +1514,7 @@
         FT_NONE, BASE_NONE, NULL, 0,
         "CertificateChoices/attrCert", HFILL }},
     { &hf_cms_CertificateSet_item,
-      { "Item(##)", "cms.CertificateSet_item",
+      { "Item", "cms.CertificateSet_item",
         FT_UINT32, BASE_DEC, VALS(CertificateChoices_vals), 0,
         "CertificateSet/_item", HFILL }},
     { &hf_cms_issuer,
@@ -1501,7 +1529,7 @@
       { "extendedCertificateInfo", "cms.extendedCertificateInfo",
         FT_NONE, BASE_NONE, NULL, 0,
         "ExtendedCertificate/extendedCertificateInfo", HFILL }},
-    { &hf_cms_signature1,
+    { &hf_cms_signature,
       { "signature", "cms.signature",
         FT_BYTES, BASE_HEX, NULL, 0,
         "ExtendedCertificate/signature", HFILL }},
@@ -1516,14 +1544,10 @@
 
   /* List of subtrees */
   static gint *ett[] = {
+	&ett_cms_ContentInfo,
 
 /*--- Included file: packet-cms-ettarr.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-cms-ettarr.c                                                        */
-/* ../../tools/asn2eth.py -X -b -p cms -c cms.cnf -s packet-cms-template CryptographicMessageSyntax.asn */
-
     &ett_cms_SignedData,
     &ett_cms_DigestAlgorithmIdentifiers,
     &ett_cms_SignerInfos,
diff -urN ethereal-0.10.6/epan/dissectors/packet-cms.h ethereal-0.10.7/epan/dissectors/packet-cms.h
--- ethereal-0.10.6/epan/dissectors/packet-cms.h	2004-08-12 17:42:21.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-cms.h	2004-10-20 17:34:51.000000000 -0500
@@ -1,15 +1,14 @@
 /* Do not modify this file.                                                   */
 /* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-cms.h                                                               */
-/* ../../tools/asn2eth.py -X -b -p cms -c cms.cnf -s packet-cms-template CryptographicMessageSyntax.asn */
+/* ./packet-cms.h                                                             */
+/* ../../tools/asn2eth.py -e -X -b -p cms -c cms.cnf -s packet-cms-template CryptographicMessageSyntax.asn */
 
 /* Input file: packet-cms-template.h */
-/* Include files: packet-cms-exp.h, packet-cms-valexp.h */
 
 /* packet-cms.h
  * Routines for RFC2630 Cryptographic Message Syntax packet dissection
  *
- * $Id: packet-cms-template.h,v 1.1 2004/05/24 08:42:29 sahlberg Exp $
+ * $Id: packet-cms-template.h 12203 2004-10-05 09:18:55Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -33,15 +32,13 @@
 #ifndef PACKET_CMS_H
 #define PACKET_CMS_H
 
+int dissect_cms_ContentInfo(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index);
 
-/*--- Included file: packet-cms-exp.h ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-cms-exp.h                                                           */
-/* ../../tools/asn2eth.py -X -b -p cms -c cms.cnf -s packet-cms-template CryptographicMessageSyntax.asn */
+/*--- Included file: packet-cms-exp.h ---*/
 
 int dissect_cms_SignedData(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
+int dissect_cms_IssuerAndSerialNumber(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
 int dissect_cms_Countersignature(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
 
 /*--- End of included file: packet-cms-exp.h ---*/
diff -urN ethereal-0.10.6/epan/dissectors/packet-cops.c ethereal-0.10.7/epan/dissectors/packet-cops.c
--- ethereal-0.10.6/epan/dissectors/packet-cops.c	2004-08-12 17:41:59.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-cops.c	2004-10-20 17:34:39.000000000 -0500
@@ -4,16 +4,20 @@
  *
  * Copyright 2000, Heikki Vatiainen <hessu@cs.tut.fi>
  *
- * Added PacketCable specifications by Dick Gooris <gooris@lucent.com>
+ * Added PacketCable D-QoS specifications by Dick Gooris <gooris@lucent.com>
  *
  * Taken from PacketCable specifications :
  *    PacketCable Dynamic Quality-of-Service Specification
  *    Based on PKT-SP-DQOS-I09-040402 (April 2, 2004)
+ *
+ *    PacketCable Multimedia Specification
+ *    Based on PKT-SP-MM-I02-040930
+ *
  *    www.packetcable.com
  *
  * Implemented in ethereal at April 7-8, 2004
  *
- * $Id: packet-cops.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-cops.c 12306 2004-10-15 19:02:47Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,6 +38,17 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
+/*
+ * Some of the development of the COPS protocol decoder was sponsored by
+ * Cable Television Laboratories, Inc. ("CableLabs") based upon proprietary
+ * CableLabs' specifications. Your license and use of this protocol decoder
+ * does not mean that you are licensed to use the CableLabs'
+ * specifications.  If you have questions about this protocol, contact
+ * jf.mule [AT] cablelabs.com or c.stuart [AT] cablelabs.com for additional
+ * information.
+ */
+
+
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
@@ -71,10 +86,13 @@
 
 #include "asn1.h"
 #include "format-oid.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
-/* For PacketCable, port 2126 */
+/* XXX - The "plain" COPS port (3288) can be overridden in the prefs.
+   The PacketCable port cannot - should this be the case? */
 #define TCP_PORT_COPS 3288
+#define TCP_PORT_PKTCABLE_COPS 2126
+#define TCP_PORT_PKTCABLE_MM_COPS 3918
 
 /* Preference: Variable to hold the tcp port preference */
 static guint global_cops_tcp_port = TCP_PORT_COPS;
@@ -391,10 +409,38 @@
   {0, NULL },
 };
 
+
+/* Client-type descriptions */
+/* http://www.iana.org/assignments/cops-parameters */
+
+/* PacketCable Types */
+
+/* static dissector_handle_t sdp_handle; */
+
+#define COPS_CLIENT_PC_DQOS	0x8008
+#define COPS_CLIENT_PC_MM	0x800a
+
+static const value_string cops_client_type_vals[] = {
+	{0,                   "None"},
+	{1,                   "RSVP"},
+	{2,                   "DiffServ QoS"},
+	{0x8001,              "IP Highway"},
+	{0x8002,              "IP Highway"},
+	{0x8003,              "IP Highway"},
+	{0x8004,              "IP Highway"},
+	{0x8005,              "Fujitsu"},
+	{0x8006,              "HP OpenView PolicyXpert"},
+	{0x8007,              "HP OpenView PolicyXpert"},
+	{COPS_CLIENT_PC_DQOS, "PacketCable Dynamic Quality-of-Service"},
+	{0x8009,              "3GPP"},
+	{COPS_CLIENT_PC_MM,   "PacketCable Multimedia"},
+	{0, NULL},
+};
+
 /* The next tables are for PacketCable */
 
 /* Transaction ID table */
-static const value_string table_cops_transaction_id[] =
+static const value_string table_cops_dqos_transaction_id[] =
 {
   { 0x1,  "Gate Alloc" },
   { 0x2,  "Gate Alloc Ack" },
@@ -456,9 +502,9 @@
 static const value_string table_cops_reason_subcode_close[] =
 {
   { 0x0,  "Client initiated release (normal operation)" },
-  { 0x1,  "Reservation reassignment" },
-  { 0x2,  "Lack of reservation maintenance" },
-  { 0x3,  "Lack of Docsis Mac-layer responses" },
+  { 0x1,  "Reservation reassignment (e.g., for priority session)" },
+  { 0x2,  "Lack of reservation maintenance (e.g., RSVP refreshes)" },
+  { 0x3,  "Lack of Docsis Mac-layer responses (e.g., station maintenance)" },
   { 0x4,  "Timer T0 expiration; no Gate-Set received from CMS" },
   { 0x5,  "Timer T1 expiration; no Commit received from MTA" },
   { 0x6,  "Timer T7 expiration; Service Flow reservation timeout" },
@@ -481,6 +527,75 @@
   { 0xFF, NULL },
 };
 
+
+/* PacketCable Multimedia */
+
+static const value_string table_cops_mm_transaction_id[] = {
+	{1,  "Reserved"},
+	{2,  "Reserved"},
+	{3,  "Reserved"},
+	{4,  "Gate Set"},
+	{5,  "Gate Set Ack"},
+	{6,  "Gate Set Err"},
+	{7,  "Gate Info"},
+	{8,  "Gate Info Ack"},
+	{9,  "Gate Info Err"},
+	{10, "Gate Delete"},
+	{11, "Gate Delete Ack"},
+	{12, "Gate Delete Err"},
+	{13, "Gate Open"},
+	{14, "Gate Close"},
+	{15, "Gate Report State"},
+	{0, NULL },
+};
+
+static const value_string pcmm_flow_spec_service_vals[] = {
+	{2, "Guaranteed Rate"},
+	{5, "Controlled Load"},
+	{0, NULL },
+};
+
+static const value_string pcmm_packetcable_error_code[] = {
+	{1,  "Insufficient Resources"},
+	{2,  "Unknown GateID"},
+	{6,  "Missing Required Object"},
+	{7,  "Invalid Object"},
+	{8,  "Volume-Based Usage Limit Exceeded"},
+	{9,  "Time-Based Usage Limit Exceeded"},
+	{10, "Session Class Limit Exceeded"},
+	{11, "Undefined Service Class Name"},
+	{12, "Incompatible Envelope"},
+	{13, "Invalid SubscriberID"},
+	{14, "Unauthorized AMID"},
+	{15, "Number of Classifiers Not Supported"},
+	{127, "Other, Unspecified Error"},
+	{0, NULL},
+};
+
+static const value_string pcmm_gate_state[] = {
+	{1, "Idle/Closed"},
+	{2, "Authorized"},
+	{3, "Reserved"},
+	{4, "Committed"},
+	{5, "Committed-Recovery"},
+	{0, NULL},
+};
+
+static const value_string pcmm_gate_state_reason[] = {
+	{1, "Close initiated by CMTS due to reservation reassignment"},
+	{2, "Close initiated by CMTS due to lack of DOCSIS MAC-layer responses"},
+	{3, "Close initiated by CMTS due to timer T1 expiration"},
+	{4, "Close initiated by CMTS due to timer T2 expiration"},
+	{5, "Inactivity timer expired due to Service Flow inactivity (timer T3 expiration)"},
+	{6, "Close initiated by CMTS due to lack of Reservation Maintenance"},
+	{7, "Gate state unchanged, but volume limit reached"},
+	{8, "Close initiated by CMTS due to timer T4 expiration"},
+	{9, "Gate state unchanged, but timer T2 expiration caused reservation reduction"},
+	{65535, "Other"},
+	{0, NULL},
+};
+
+
 /* End of PacketCable Tables */
 
 
@@ -542,7 +657,7 @@
 static gint hf_cops_key_id = -1;
 static gint hf_cops_seq_num = -1;
 
-/* For PacketCable */
+/* For PacketCable D-QoS */
 static gint hf_cops_subtree = -1;
 static gint hf_cops_pc_activity_count = -1;
 static gint hf_cops_pc_algorithm = -1;
@@ -577,7 +692,8 @@
 static gint hf_cops_pc_spec_rate = -1;
 static gint hf_cops_pc_src_ip = -1;
 static gint hf_cops_pc_src_port = -1;
-static gint hf_cops_pc_subscriber_id = -1;
+static gint hf_cops_pc_subscriber_id_ipv4 = -1;
+static gint hf_cops_pc_subscriber_id_ipv6 = -1;
 static gint hf_cops_pc_t1_value = -1;
 static gint hf_cops_pc_t7_value = -1;
 static gint hf_cops_pc_t8_value = -1;
@@ -592,6 +708,56 @@
 static gint hf_cops_pc_dfcdc_ip_port = -1;
 static gint hf_cops_pc_dfccc_ip_port = -1;
 
+/* PacketCable Multimedia */
+static gint hf_cops_pcmm_amid = -1;
+static gint hf_cops_pcmm_gate_spec_flags = -1;
+static gint hf_cops_pcmm_gate_spec_dscp_tos_field = -1;
+static gint hf_cops_pcmm_gate_spec_dscp_tos_mask = -1;
+static gint hf_cops_pcmm_gate_spec_session_class_id = -1;
+static gint hf_cops_pcmm_gate_spec_session_class_id_priority = -1;
+static gint hf_cops_pcmm_gate_spec_session_class_id_preemption = -1;
+static gint hf_cops_pcmm_gate_spec_session_class_id_configurable = -1;
+static gint hf_cops_pcmm_gate_spec_timer_t1 = -1;
+static gint hf_cops_pcmm_gate_spec_timer_t2 = -1;
+static gint hf_cops_pcmm_gate_spec_timer_t3 = -1;
+static gint hf_cops_pcmm_gate_spec_timer_t4 = -1;
+static gint hf_cops_pcmm_classifier_protocol_id = -1;
+static gint hf_cops_pcmm_classifier_dscp_tos_field = -1;
+static gint hf_cops_pcmm_classifier_dscp_tos_mask = -1;
+static gint hf_cops_pcmm_classifier_src_addr = -1;
+static gint hf_cops_pcmm_classifier_dst_addr = -1;
+static gint hf_cops_pcmm_classifier_src_port = -1;
+static gint hf_cops_pcmm_classifier_dst_port = -1;
+static gint hf_cops_pcmm_classifier_priority = -1;
+static gint hf_cops_pcmm_flow_spec_envelope = -1;
+static gint hf_cops_pcmm_flow_spec_service_number = -1;
+static gint hf_cops_pcmm_docsis_scn = -1;
+static gint hf_cops_pcmm_envelope = -1;
+static gint hf_cops_pcmm_traffic_priority = -1;
+static gint hf_cops_pcmm_request_transmission_policy = -1;
+static gint hf_cops_pcmm_max_sustained_traffic_rate = -1;
+static gint hf_cops_pcmm_max_traffic_burst = -1;
+static gint hf_cops_pcmm_min_reserved_traffic_rate = -1;
+static gint hf_cops_pcmm_ass_min_rtr_packet_size = -1;
+static gint hf_cops_pcmm_nominal_polling_interval = -1;
+static gint hf_cops_pcmm_tolerated_poll_jitter = -1;
+static gint hf_cops_pcmm_unsolicited_grant_size = -1;
+static gint hf_cops_pcmm_grants_per_interval = -1;
+static gint hf_cops_pcmm_nominal_grant_interval = -1;
+static gint hf_cops_pcmm_tolerated_grant_jitter = -1;
+static gint hf_cops_pcmm_max_downstream_latency = -1;
+static gint hf_cops_pcmm_volume_based_usage_limit = -1;
+static gint hf_cops_pcmm_time_based_usage_limit = -1;
+static gint hf_cops_pcmm_gate_time_info = -1;
+static gint hf_cops_pcmm_gate_usage_info = -1;
+static gint hf_cops_pcmm_packetcable_error_code = -1;
+static gint hf_cops_pcmm_packetcable_error_subcode = -1;
+static gint hf_cops_pcmm_packetcable_gate_state = -1;
+static gint hf_cops_pcmm_packetcable_gate_state_reason = -1;
+static gint hf_cops_pcmm_packetcable_version_info_major = -1;
+static gint hf_cops_pcmm_packetcable_version_info_minor = -1;
+
+
 /* Initialize the subtree pointers */
 static gint ett_cops = -1;
 static gint ett_cops_ver_flags = -1;
@@ -612,37 +778,47 @@
 /* For PacketCable */
 static gint ett_cops_subtree = -1;
 
+static gint ett_docsis_request_transmission_policy = -1;
+
+
 void proto_reg_handoff_cops(void);
 
 static guint get_cops_pdu_len(tvbuff_t *tvb, int offset);
 static void dissect_cops_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
 
-static int dissect_cops_object(tvbuff_t *tvb, guint32 offset, proto_tree *tree);
-static void dissect_cops_object_data(tvbuff_t *tvb, guint32 offset, proto_tree *tree,
-                                     guint8 c_num, guint8 c_type, guint16 len);
+static int dissect_cops_object(tvbuff_t *tvb, packet_info *pinfo, guint8 op_code, guint32 offset, proto_tree *tree, guint16 client_type);
+static void dissect_cops_object_data(tvbuff_t *tvb, packet_info *pinfo, guint32 offset, proto_tree *tree,
+                                     guint8 op_code, guint16 client_type, guint8 c_num, guint8 c_type, guint16 len);
 
 static void dissect_cops_pr_objects(tvbuff_t *tvb, guint32 offset, proto_tree *tree, guint16 pr_len);
 static int dissect_cops_pr_object_data(tvbuff_t *tvb, guint32 offset, proto_tree *tree,
                                        guint8 s_num, guint8 s_type, guint16 len);
 
 /* Added for PacketCable */
-proto_tree *info_to_cops_subtree(tvbuff_t *, proto_tree *, int, int, char *);
-void   info_to_display(tvbuff_t *, proto_item *, int, int, char *, const value_string *, int, gint *);
-void   cops_transaction_id(tvbuff_t *, proto_tree *, guint, guint32);
-void   cops_subscriber_id_v4(tvbuff_t *, proto_tree *, guint, guint32);
-void   cops_gate_id(tvbuff_t *, proto_tree *, guint, guint32);
-void   cops_activity_count(tvbuff_t *, proto_tree *, guint, guint32);
-void   cops_gate_specs(tvbuff_t *, proto_tree *, guint, guint32);
-void   cops_remote_gate_info(tvbuff_t *, proto_tree *, guint, guint32);
-void   cops_packetcable_reason(tvbuff_t *, proto_tree *, guint, guint32);
-void   cops_packetcable_error(tvbuff_t *, proto_tree *, guint, guint32);
-void   cops_analyze_packetcable_obj(tvbuff_t *, proto_tree *, guint32);
-void   cops_event_generation_info(tvbuff_t *, proto_tree *, guint, guint32);
-void   cops_surveillance_parameters(tvbuff_t *, proto_tree *, guint, guint32);
+static proto_tree *info_to_cops_subtree(tvbuff_t *, proto_tree *, int, int, char *);
+static proto_item *info_to_display(tvbuff_t *, proto_item *, int, int, char *, const value_string *, int, gint *);
+
+static void cops_transaction_id(tvbuff_t *, packet_info *, proto_tree *, guint8, guint, guint32);
+static void cops_subscriber_id_v4(tvbuff_t *, proto_tree *, guint, guint32);
+static void cops_subscriber_id_v6(tvbuff_t *, proto_tree *, guint, guint32);
+static void cops_gate_id(tvbuff_t *, proto_tree *, guint, guint32);
+static void cops_activity_count(tvbuff_t *, proto_tree *, guint, guint32);
+static void cops_gate_specs(tvbuff_t *, proto_tree *, guint, guint32);
+static void cops_remote_gate_info(tvbuff_t *, proto_tree *, guint, guint32);
+static void cops_packetcable_reason(tvbuff_t *, proto_tree *, guint, guint32);
+static void cops_packetcable_error(tvbuff_t *, proto_tree *, guint, guint32);
+static void cops_event_generation_info(tvbuff_t *, proto_tree *, guint, guint32);
+static void cops_surveillance_parameters(tvbuff_t *, proto_tree *, guint, guint32);
+
+static void cops_amid(tvbuff_t *, proto_tree *, guint, guint32);
+
+static void decode_docsis_request_transmission_policy(tvbuff_t *tvb, guint32 offset, proto_tree *tree, gint hf);
+
+static void cops_analyze_packetcable_dqos_obj(tvbuff_t *, packet_info *, proto_tree *, guint8, guint32);
+static void cops_analyze_packetcable_mm_obj(tvbuff_t *, packet_info *, proto_tree *, guint8, guint32);
 
-static packet_info *cpinfo;
-static guint8 opcode_idx;
 static gboolean cops_packetcable = TRUE;
+
 /* End of addition for PacketCable */
 
 
@@ -667,6 +843,7 @@
 dissect_cops_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
   guint8 op_code;
+  guint16 client_type;
   int object_len;
 
   if (check_col(pinfo->cinfo, COL_PROTOCOL))
@@ -679,9 +856,8 @@
     col_add_fstr(pinfo->cinfo, COL_INFO, "COPS %s",
                  val_to_str(op_code, cops_op_code_vals, "Unknown Op Code"));
 
-  /* PacketCable: Remember the next two values to manipulate the info field in the Gui */
-  cpinfo = pinfo;
-  opcode_idx = op_code;
+  /* Currently used by PacketCable */
+  client_type = tvb_get_ntohs(tvb, 2);
 
   if (tree) {
     proto_item *ti, *tv;
@@ -715,7 +891,7 @@
     offset += 4;
 
     while (tvb_reported_length_remaining(tvb, offset) >= COPS_OBJECT_HDR_SIZE) {
-      object_len = dissect_cops_object(tvb, offset, cops_tree);
+      object_len = dissect_cops_object(tvb, pinfo, op_code, offset, cops_tree, client_type);
       if (object_len < 0)
         return;
       offset += object_len;
@@ -786,7 +962,7 @@
   return "";
 }
 
-static int dissect_cops_object(tvbuff_t *tvb, guint32 offset, proto_tree *tree)
+static int dissect_cops_object(tvbuff_t *tvb, packet_info *pinfo, guint8 op_code, guint32 offset, proto_tree *tree, guint16 client_type)
 {
   guint16 object_len, contents_len;
   guint8 c_num, c_type;
@@ -825,7 +1001,7 @@
   offset++;
 
   contents_len = object_len - COPS_OBJECT_HDR_SIZE;
-  dissect_cops_object_data(tvb, offset, obj_tree, c_num, c_type, contents_len);
+  dissect_cops_object_data(tvb, pinfo, offset, obj_tree, op_code, client_type, c_num, c_type, contents_len);
 
   /* Pad to 32bit boundary */
   if (object_len % sizeof (guint32))
@@ -892,8 +1068,8 @@
   }
 }
 
-static void dissect_cops_object_data(tvbuff_t *tvb, guint32 offset, proto_tree *tree,
-                                     guint8 c_num, guint8 c_type, guint16 len)
+static void dissect_cops_object_data(tvbuff_t *tvb, packet_info *pinfo, guint32 offset, proto_tree *tree,
+                                     guint8 op_code, guint16 client_type, guint8 c_num, guint8 c_type, guint16 len)
 {
   proto_item *ti;
   proto_tree *r_type_tree, *itf_tree, *reason_tree, *dec_tree, *error_tree, *clientsi_tree, *pdp_tree;
@@ -978,7 +1154,11 @@
     }
 
     /* PacketCable : Analyze the remaining data if available */
-    cops_analyze_packetcable_obj(tvb, tree, offset);
+    if (client_type == COPS_CLIENT_PC_DQOS && c_type == 4) {
+	cops_analyze_packetcable_dqos_obj(tvb, pinfo, tree, op_code, offset);
+    } else if (client_type == COPS_CLIENT_PC_MM && c_type == 4) {
+	cops_analyze_packetcable_mm_obj(tvb, pinfo, tree, op_code, offset);
+    }
 
     break;
   case COPS_OBJ_ERROR:
@@ -1003,8 +1183,11 @@
   case COPS_OBJ_CLIENTSI:
 
     /* For PacketCable */
-    if (c_type == 1) {
-       cops_analyze_packetcable_obj(tvb, tree, offset);
+    if (client_type == COPS_CLIENT_PC_DQOS && c_type == 1) {
+       cops_analyze_packetcable_dqos_obj(tvb, pinfo, tree, op_code, offset);
+       break;
+    } else if (client_type == COPS_CLIENT_PC_MM && c_type == 1) {
+       cops_analyze_packetcable_mm_obj(tvb, pinfo, tree, op_code, offset);
        break;
     }
 
@@ -1525,7 +1708,7 @@
     },
     { &hf_cops_client_type,
       { "Client Type",           "cops.client_type",
-      FT_UINT16, BASE_DEC, NULL, 0x0,
+      FT_UINT16, BASE_DEC, VALS(cops_client_type_vals), 0x0,
       "Client Type in COPS Common Header", HFILL }
     },
     { &hf_cops_msg_len,
@@ -1820,27 +2003,27 @@
     },
     { &hf_cops_pc_cmts_ip,
       { "CMTS IP Address", "cops.pc_cmts_ip",
-        FT_UINT32, BASE_HEX, NULL, 0x00,
+        FT_IPv4, BASE_HEX, NULL, 0x00,
         "CMTS IP Address", HFILL }
     },
     { &hf_cops_pc_prks_ip,
       { "PRKS IP Address", "cops.pc_prks_ip",
-        FT_UINT32, BASE_HEX, NULL, 0x00,
+        FT_IPv4, BASE_HEX, NULL, 0x00,
         "PRKS IP Address", HFILL }
     },
     { &hf_cops_pc_srks_ip,
       { "SRKS IP Address", "cops.pc_srks_ip",
-        FT_UINT32, BASE_HEX, NULL, 0x00,
+        FT_IPv4, BASE_HEX, NULL, 0x00,
         "SRKS IP Address", HFILL }
     },
     { &hf_cops_pc_dfcdc_ip,
       { "DF IP Address CDC", "cops.pc_dfcdc_ip",
-        FT_UINT32, BASE_HEX, NULL, 0x00,
+        FT_IPv4, BASE_HEX, NULL, 0x00,
         "DF IP Address CDC", HFILL }
     },
     { &hf_cops_pc_dfccc_ip,
       { "DF IP Address CCC", "cops.pc_dfccc_ip",
-        FT_UINT32, BASE_HEX, NULL, 0x00,
+        FT_IPv4, BASE_HEX, NULL, 0x00,
         "DF IP Address CCC", HFILL }
     },
     { &hf_cops_pc_dfcdc_ip_port,
@@ -1860,7 +2043,7 @@
     },
     { &hf_cops_pc_dest_ip,
       { "Destination IP Address", "cops.pc_dest_ip",
-        FT_UINT32, BASE_HEX, NULL, 0x00,
+        FT_IPv4, BASE_HEX, NULL, 0x00,
         "Destination IP Address", HFILL }
     },
     { &hf_cops_pc_gate_id,
@@ -1910,14 +2093,19 @@
     },
     { &hf_cops_pc_src_ip,
       { "Source IP Address", "cops.pc_src_ip",
-        FT_UINT32, BASE_HEX, NULL, 0x00,
+        FT_IPv4, BASE_HEX, NULL, 0x00,
         "Source IP Address", HFILL }
     },
-    { &hf_cops_pc_subscriber_id,
-      { "Subscriber Identifier (IPv4)", "cops.pc_subscriber_id",
-        FT_UINT32, BASE_HEX, NULL, 0x00,
+    { &hf_cops_pc_subscriber_id_ipv4,
+      { "Subscriber Identifier (IPv4)", "cops.pc_subscriber_id4",
+        FT_IPv4, BASE_HEX, NULL, 0x00,
         "Subscriber Identifier (IPv4)", HFILL }
     },
+    { &hf_cops_pc_subscriber_id_ipv6,
+      { "Subscriber Identifier (IPv6)", "cops.pc_subscriber_id6",
+        FT_IPv6, BASE_HEX, NULL, 0x00,
+        "Subscriber Identifier (IPv6)", HFILL }
+    },
     { &hf_cops_pc_token_bucket_rate,
       { "Token Bucket Rate", "cops.pc_token_bucket_rate",
         FT_FLOAT, BASE_NONE, NULL, 0x00,
@@ -1944,6 +2132,257 @@
         "BCID Event Counter", HFILL }
     },
 
+    { &hf_cops_pcmm_amid,
+	    { "AMID", "cops.pc_mm_amid",
+	    FT_UINT32, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia AMID", HFILL }
+    },
+
+    { &hf_cops_pcmm_gate_spec_flags,
+	    { "Flags", "cops.pc_mm_gs_flags",
+	    FT_UINT8, BASE_HEX, NULL, 0,
+	    "PacketCable Multimedia GateSpec Flags", HFILL }
+    },
+    { &hf_cops_pcmm_gate_spec_dscp_tos_field,
+	    { "DSCP/TOS Field",           "cops.pc_mm_gs_dscp",
+	    FT_UINT8, BASE_HEX, NULL, 0,
+	    "PacketCable Multimedia GateSpec DSCP/TOS Field", HFILL }
+    },
+    { &hf_cops_pcmm_gate_spec_dscp_tos_mask,
+	    { "DSCP/TOS Mask",           "cops.pc_mm_gs_dscp_mask",
+	    FT_UINT8, BASE_HEX, NULL, 0,
+	    "PacketCable Multimedia GateSpec DSCP/TOS Mask", HFILL }
+    },
+    { &hf_cops_pcmm_gate_spec_session_class_id,
+	    { "SessionClassID", "cops.pc_mm_gs_scid",
+	    FT_UINT8, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia GateSpec SessionClassID", HFILL }
+    },
+    { &hf_cops_pcmm_gate_spec_session_class_id_priority,
+	    { "SessionClassID Priority", "cops.pc_mm_gs_scid_prio",
+	    FT_UINT8, BASE_DEC, NULL, 0x07,
+	    "PacketCable Multimedia GateSpec SessionClassID Priority", HFILL }
+    },
+    { &hf_cops_pcmm_gate_spec_session_class_id_preemption,
+	    { "SessionClassID Preemption", "cops.pc_mm_gs_scid_preempt",
+	    FT_UINT8, BASE_DEC, NULL, 0x08,
+	    "PacketCable Multimedia GateSpec SessionClassID Preemption", HFILL }
+    },
+    { &hf_cops_pcmm_gate_spec_session_class_id_configurable,
+	    { "SessionClassID Configurable", "cops.pc_mm_gs_scid_conf",
+	    FT_UINT8, BASE_DEC, NULL, 0xf0,
+	    "PacketCable Multimedia GateSpec SessionClassID Configurable", HFILL }
+    },
+    { &hf_cops_pcmm_gate_spec_timer_t1,
+	    { "Timer T1", "cops.pc_mm_gs_timer_t1",
+	    FT_UINT16, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia GateSpec Timer T1", HFILL }
+    },
+    { &hf_cops_pcmm_gate_spec_timer_t2,
+	    { "Timer T2", "cops.pc_mm_gs_timer_t2",
+	    FT_UINT16, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia GateSpec Timer T2", HFILL }
+    },
+    { &hf_cops_pcmm_gate_spec_timer_t3,
+	    { "Timer T3", "cops.pc_mm_gs_timer_t3",
+	    FT_UINT16, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia GateSpec Timer T3", HFILL }
+    },
+    { &hf_cops_pcmm_gate_spec_timer_t4,
+	    { "Timer T4", "cops.pc_mm_gs_timer_t4",
+	    FT_UINT16, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia GateSpec Timer T4", HFILL }
+    },
+
+    { &hf_cops_pcmm_classifier_protocol_id,
+	    { "Protocol ID", "cops.pc_mm_classifier_proto_id",
+	    FT_UINT16, BASE_HEX, NULL, 0,
+	    "PacketCable Multimedia Classifier Protocol ID", HFILL }
+    },
+    { &hf_cops_pcmm_classifier_dscp_tos_field,
+	    { "DSCP/TOS Field", "cops.pc_mm_classifier_dscp",
+	    FT_UINT8, BASE_HEX, NULL, 0,
+	    "PacketCable Multimedia Classifier DSCP/TOS Field", HFILL }
+    },
+    { &hf_cops_pcmm_classifier_dscp_tos_mask,
+	    { "DSCP/TOS Mask", "cops.pc_mm_classifier_dscp_mask",
+	    FT_UINT8, BASE_HEX, NULL, 0,
+	    "PacketCable Multimedia Classifer DSCP/TOS Mask", HFILL }
+    },
+    { &hf_cops_pcmm_classifier_src_addr,
+	    { "Source address", "cops.pc_mm_classifier_src_addr",
+	    FT_IPv4, 0, NULL, 0xFFFF,
+	    "PacketCable Multimedia Classifier Source IP Address", HFILL }
+    },
+    { &hf_cops_pcmm_classifier_dst_addr,
+	    { "Destination address", "cops.pc_mm_classifier_dst_addr",
+	    FT_IPv4, 0, NULL, 0xFFFF,
+	    "PacketCable Multimedia Classifier Destination IP Address", HFILL }
+    },
+    { &hf_cops_pcmm_classifier_src_port,
+	    { "Source Port", "cops.pc_mm_classifier_src_port",
+	    FT_UINT16, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Classifier Source Port", HFILL }
+    },
+    { &hf_cops_pcmm_classifier_dst_port,
+	    { "Destination Port", "cops.pc_mm_classifier_dst_port",
+	    FT_UINT16, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Classifier Source Port", HFILL }
+    },
+    { &hf_cops_pcmm_classifier_priority,
+	    { "Priority", "cops.pc_mm_classifier_priority",
+	    FT_UINT8, BASE_HEX, NULL, 0,
+	    "PacketCable Multimedia Classifier Priority", HFILL }
+    },
+
+    { &hf_cops_pcmm_flow_spec_envelope,
+	    { "Envelope", "cops.pc_mm_fs_envelope",
+	    FT_UINT8, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Flow Spec Envelope", HFILL }
+    },
+    { &hf_cops_pcmm_flow_spec_service_number,
+	    { "Service Number", "cops.pc_mm_fs_svc_num",
+	    FT_UINT8, BASE_DEC, pcmm_flow_spec_service_vals, 0,
+	    "PacketCable Multimedia Flow Spec Service Number", HFILL }
+    },
+
+    { &hf_cops_pcmm_docsis_scn,
+	    { "Service Class Name", "cops.pc_mm_docsis_scn",
+	    FT_STRINGZ, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia DOCSIS Service Class Name", HFILL }
+    },
+
+    { &hf_cops_pcmm_envelope,
+	    { "Envelope", "cops.pc_mm_envelope",
+	    FT_UINT8, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Envelope", HFILL }
+    },
+
+    { &hf_cops_pcmm_traffic_priority,
+	    { "Traffic Priority", "cops.pc_mm_tp",
+	    FT_UINT8, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Committed Envelope Traffic Priority", HFILL }
+    },
+    { &hf_cops_pcmm_request_transmission_policy,
+	    { "Request Transmission Policy", "cops.pc_mm_rtp",
+	    FT_UINT32, BASE_HEX, NULL, 0,
+	    "PacketCable Multimedia Committed Envelope Traffic Priority", HFILL }
+    },
+    { &hf_cops_pcmm_max_sustained_traffic_rate,
+	    { "Maximum Sustained Traffic Rate", "cops.pc_mm_mstr",
+	    FT_UINT32, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Committed Envelope Maximum Sustained Traffic Rate", HFILL }
+    },
+    { &hf_cops_pcmm_max_traffic_burst,
+	    { "Maximum Traffic Burst", "cops.pc_mm_mtb",
+	    FT_UINT32, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Committed Envelope Maximum Traffic Burst", HFILL }
+    },
+    { &hf_cops_pcmm_min_reserved_traffic_rate,
+	    { "Minimum Reserved Traffic Rate", "cops.pc_mm_mrtr",
+	    FT_UINT32, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Committed Envelope Minimum Reserved Traffic Rate", HFILL }
+    },
+    { &hf_cops_pcmm_ass_min_rtr_packet_size,
+	    { "Assumed Minimum Reserved Traffic Rate Packet Size", "cops.pc_mm_amrtrps",
+	    FT_UINT16, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Committed Envelope Assumed Minimum Reserved Traffic Rate Packet Size", HFILL }
+    },
+
+    { &hf_cops_pcmm_nominal_polling_interval,
+	    { "Nominal Polling Interval", "cops.pc_mm_npi",
+	    FT_UINT32, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Nominal Polling Interval", HFILL }
+    },
+
+    { &hf_cops_pcmm_tolerated_poll_jitter,
+	    { "Tolerated Poll Jitter", "cops.pc_mm_tpj",
+	    FT_UINT32, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Tolerated Poll Jitter", HFILL }
+    },
+
+    { &hf_cops_pcmm_unsolicited_grant_size,
+	    { "Unsolicited Grant Size", "cops.pc_mm_ugs",
+	    FT_UINT16, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Unsolicited Grant Size", HFILL }
+    },
+    { &hf_cops_pcmm_grants_per_interval,
+	    { "Grants Per Interval", "cops.pc_mm_gpi",
+	    FT_UINT8, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Grants Per Interval", HFILL }
+    },
+    { &hf_cops_pcmm_nominal_grant_interval,
+	    { "Nominal Grant Interval", "cops.pc_mm_ngi",
+	    FT_UINT32, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Nominal Grant Interval", HFILL }
+    },
+    { &hf_cops_pcmm_tolerated_grant_jitter,
+	    { "Tolerated Grant Jitter", "cops.pc_mm_tgj",
+	    FT_UINT32, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Tolerated Grant Jitter", HFILL }
+    },
+
+    { &hf_cops_pcmm_max_downstream_latency,
+	    { "Maximum Downstream Latency", "cops.pc_mm_mdl",
+	    FT_UINT32, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Maximum Downstream Latency", HFILL }
+    },
+
+    { &hf_cops_pcmm_volume_based_usage_limit,
+	    { "Usage Limit", "cops.pc_mm_vbul_ul",
+	    FT_UINT64, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Volume-Based Usage Limit", HFILL }
+    },
+
+    { &hf_cops_pcmm_time_based_usage_limit,
+	    { "Usage Limit", "cops.pc_mm_tbul_ul",
+	    FT_UINT32, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Time-Based Usage Limit", HFILL }
+    },
+
+    { &hf_cops_pcmm_gate_time_info,
+	    { "Gate Time Info", "cops.pc_mm_gti",
+	    FT_UINT32, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Gate Time Info", HFILL }
+    },
+
+    { &hf_cops_pcmm_gate_usage_info,
+	    { "Gate Usage Info", "cops.pc_mm_gui",
+	    FT_UINT32, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Gate Usage Info", HFILL }
+    },
+
+    { &hf_cops_pcmm_packetcable_error_code,
+	    { "Error-Code", "cops.pc_mm_error_ec",
+	    FT_UINT16, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia PacketCable-Error Error-Code", HFILL }
+    },
+    { &hf_cops_pcmm_packetcable_error_subcode,
+	    { "Error-code", "cops.pc_mm_error_esc",
+	    FT_UINT16, BASE_HEX, NULL, 0,
+	    "PacketCable Multimedia PacketCable-Error Error Sub-code", HFILL }
+    },
+
+    { &hf_cops_pcmm_packetcable_gate_state,
+	    { "State", "cops.pc_mm_gs_state",
+	    FT_UINT16, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Gate State", HFILL }
+    },
+    { &hf_cops_pcmm_packetcable_gate_state_reason,
+	    { "Reason", "cops.pc_mm_gs_reason",
+	    FT_UINT16, BASE_HEX, NULL, 0,
+	    "PacketCable Multimedia Gate State Reason", HFILL }
+    },
+    { &hf_cops_pcmm_packetcable_version_info_major,
+	    { "Major Version Number", "cops.pc_mm_vi_major",
+	    FT_UINT16, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Major Version Number", HFILL }
+    },
+    { &hf_cops_pcmm_packetcable_version_info_minor,
+	    { "Minor Version Number", "cops.pc_mm_vi_minor",
+	    FT_UINT16, BASE_DEC, NULL, 0,
+	    "PacketCable Multimedia Minor Version Number", HFILL }
+    },
 
     /* End of addition for PacketCable */
 
@@ -1967,6 +2406,7 @@
     &ett_cops_cperror,
     &ett_cops_pdp,
     &ett_cops_subtree,
+    &ett_docsis_request_transmission_policy,
   };
 
   module_t* cops_module;
@@ -1986,8 +2426,9 @@
                                  "Set the TCP port for COPS messages",
                                  10,&global_cops_tcp_port);
   prefs_register_bool_preference(cops_module, "desegment",
-                                 "Desegment all COPS messages\nspanning multiple TCP segments",
-                                 "Whether the COPS dissector should desegment all messages spanning multiple TCP segments",
+                                 "Reassemble COPS messages spanning multiple TCP segments",
+                                 "Whether the COPS dissector should reassemble messages spanning multiple TCP segments."
+                                 " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
                                  &cops_desegment);
 
   /* For PacketCable */
@@ -2019,16 +2460,20 @@
   cops_tcp_port = global_cops_tcp_port;
 
   dissector_add("tcp.port", cops_tcp_port, cops_handle);
+  dissector_add("tcp.port", TCP_PORT_PKTCABLE_COPS, cops_handle);
+  dissector_add("tcp.port", TCP_PORT_PKTCABLE_MM_COPS, cops_handle);
 }
 
 
 /* Additions for PacketCable ( Added by Dick Gooris, Lucent Technologies ) */
 
 /* Definitions for print formatting */
+/* XXX - Why don't we just use ftenum types here? */
 #define   FMT_DEC   0
 #define   FMT_HEX   1
-#define   FMT_IP    2
-#define   FMT_FLT   3
+#define   FMT_IPv4  2
+#define   FMT_IPv6  3
+#define   FMT_FLT   4
 
 /* Print the translated information in the display gui in a formatted way
  *
@@ -2038,20 +2483,21 @@
  *
  * mode   = 0 -> print decimal value
  *          1 -> print hexadecimal vaue
- *          2 -> print value as an ip address
- *          3 -> print value as an ieee float
+ *          2 -> print value as an IPv4 address
+ *          3 -> print value as an IPv6 address
+ *          4 -> print value as an IEEE float
  *
  * This function in combination with the separate function info_to_cops_subtree() for subtrees.
  *
  */
 
-void info_to_display(tvbuff_t *tvb, proto_item *stt, int offset, int octets, char *str, const value_string *vsp, int mode,gint *hf_proto_parameter)
+static proto_item *
+info_to_display(tvbuff_t *tvb, proto_item *stt, int offset, int octets, char *str, const value_string *vsp, int mode,gint *hf_proto_parameter)
 {
-
+     proto_item *pi = NULL;
      guint8   code8  = 0;
      guint16  code16 = 0;
      guint32  code32 = 0;
-     guint32  codeip = 0;
      float    codefl = 0.0;
 
      /* Print information elements in the specified way */
@@ -2063,21 +2509,21 @@
              if (vsp == NULL) {
                 /* Hexadecimal format */
                 if (mode==FMT_HEX)
-                   proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb,
+                   pi = proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb,
                        offset, octets, code8,"%-28s : 0x%02x",str,code8);
                 else
                    /* Print an 8 bits integer */
-                   proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb,
+                   pi = proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb,
                        offset, octets, code8,"%-28s : %u",str,code8);
              } else {
                if (mode==FMT_HEX)
                   /* Hexadecimal format */
-                  proto_tree_add_uint_format(
+                  pi = proto_tree_add_uint_format(
                       stt, *hf_proto_parameter,tvb, offset, octets, code8,
                       "%-28s : %s (0x%02x)",str,val_to_str(code8, vsp, "Unknown"),code8);
                else
                   /* String table indexed */
-                  proto_tree_add_uint_format(
+                  pi = proto_tree_add_uint_format(
                       stt, *hf_proto_parameter,tvb, offset, octets, code8,
                       "%-28s : %s (%u)",str,val_to_str(code8, vsp, "Unknown"),code8);
              }
@@ -2090,21 +2536,21 @@
              if (vsp == NULL) {
                 /* Hexadecimal format */
                 if (mode==FMT_HEX)
-                   proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb,
+                   pi = proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb,
                        offset, octets, code16,"%-28s : 0x%04x",str,code16);
                 else
                    /* Print a 16 bits integer */
-                   proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb,
+                   pi = proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb,
                        offset, octets, code16,"%-28s : %u",str,code16);
              }  else {
                 if (mode==FMT_HEX)
                    /* Hexadecimal format */
-                   proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb,
+                   pi = proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb,
                        offset, octets, code16,"%-28s : %s (0x%04x)", str,
                        val_to_str(code16, vsp, "Unknown (0x%04x)"),code16);
                 else
                    /* Print a 16 bits integer */
-                   proto_tree_add_uint_format(
+                   pi = proto_tree_add_uint_format(
                        stt, *hf_proto_parameter,tvb, offset, octets, code16,
                        "%-28s : %s (%u)",str,val_to_str(code16, vsp, "Unknown (0x%04x)"),code16);
              }
@@ -2116,8 +2562,7 @@
              switch (mode) {
                case FMT_FLT:  codefl  = tvb_get_ntohieee_float(tvb,offset);
                               break;
-               case FMT_IP:   tvb_memcpy(tvb, (guint8 *)&code32, offset, 4);
-                              codeip  = tvb_get_ntohl(tvb,offset);
+               case FMT_IPv4: tvb_memcpy(tvb, (guint8 *)&code32, offset, 4);
                               break;
                default:       code32  = tvb_get_ntohl(tvb,offset);
 	     }
@@ -2125,104 +2570,125 @@
              if (vsp == NULL) {
                 /* Hexadecimal format */
                 if (mode==FMT_HEX) {
-                   proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb,
+                   pi = proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb,
                        offset, octets, code32,"%-28s : 0x%08x",str,code32);
                    break;
                 }
                 /* Ip address format*/
-                if (mode==FMT_IP) {
-                   proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb, offset,octets,
-                       codeip,"%-28s : %s",str,ip_to_str((guint8 *)&code32));
+                if (mode==FMT_IPv4) {
+                   pi = proto_tree_add_ipv4(stt, *hf_proto_parameter,tvb, offset, octets, code32);
                    break;
                 }
                 /* Ieee float format */
                 if (mode==FMT_FLT) {
-                   proto_tree_add_float_format(stt, *hf_proto_parameter,tvb, offset, octets,
+                   pi = proto_tree_add_float_format(stt, *hf_proto_parameter,tvb, offset, octets,
                        codefl,"%-28s : %.10g",str,codefl);
                    break;
                 }
                 /* Print a 32 bits integer */
-                proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb, offset, octets,
+                pi = proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb, offset, octets,
                     code32,"%-28s : %u",str,code32);
              } else {
                 /* Hexadecimal format */
                 if (mode==FMT_HEX)
-                   proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb, offset, octets,
+                   pi = proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb, offset, octets,
                            code32,"%-28s : %s (0x%08x)",str,val_to_str(code32, vsp, "Unknown"),code32);
                 else
                    /* String table indexed */
-                   proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb, offset, octets,
+                   pi = proto_tree_add_uint_format(stt, *hf_proto_parameter,tvb, offset, octets,
                        code32,"%-28s : %s (%u)",str,val_to_str(code32, vsp, "Unknown"),code32);
              }
              break;
 
         /* In case of more than 4 octets.... */
         default: {
-             if (mode==FMT_HEX)
-                proto_tree_add_bytes(stt, *hf_proto_parameter,
+             if (mode==FMT_HEX) {
+                pi = proto_tree_add_bytes(stt, *hf_proto_parameter,
                    tvb, offset, octets, tvb_get_ptr(tvb, offset,octets));
-             else
-                proto_tree_add_uint_format(stt, *hf_proto_parameter,
+	     } else if (mode==FMT_IPv6 && octets==16) {
+		pi = proto_tree_add_ipv6(stt, *hf_proto_parameter, tvb, offset, octets,
+		   tvb_get_ptr(tvb, offset, octets));
+             } else {
+                pi = proto_tree_add_uint_format(stt, *hf_proto_parameter,
                    tvb, offset, octets, code32,"%s",str);
+	     }
              break;
         }
 
      }
+     return pi;
 }
 
 /* Print the subtree information for cops */
-proto_tree *info_to_cops_subtree(tvbuff_t *tvb, proto_tree *st, int n, int offset, char *str) {
+static proto_tree *
+info_to_cops_subtree(tvbuff_t *tvb, proto_tree *st, int n, int offset, char *str) {
      proto_item *tv;
 
      tv  = proto_tree_add_uint_format( st, hf_cops_subtree, tvb, offset, n, (guint)NULL, str);
      return( proto_item_add_subtree( tv, ett_cops_subtree ) );
 }
 
-/* Cops - Section : Transaction ID */
-void cops_transaction_id(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+/* Cops - Section : D-QoS Transaction ID */
+static void
+cops_transaction_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *st, guint8 op_code, guint n, guint32 offset) {
 
      proto_tree *stt;
      guint16  code16;
      char info[50];
 
      /* Create a subtree */
-     stt = info_to_cops_subtree(tvb,st,n,offset,"Transaction ID");
+     stt = info_to_cops_subtree(tvb,st,n,offset,"D-QoS Transaction ID");
 
      /* Transaction Identifier */
-     info_to_display(tvb,stt,offset,2,"Transaction Identifier", NULL,FMT_DEC,&hf_cops_pc_transaction_id);
+     info_to_display(tvb,stt,offset,2,"D-QoS Transaction Identifier", NULL,FMT_DEC,&hf_cops_pc_transaction_id);
      offset +=2;
 
      /* Gate Command Type */
      code16 = tvb_get_ntohs(tvb,offset);
      proto_tree_add_uint_format(stt, hf_cops_pc_gate_command_type,tvb, offset, 2,
             code16,"%-28s : %s (%u)", "Gate Command Type",
-            val_to_str(code16,table_cops_transaction_id, "Unknown (0x%04x)"),code16);
+            val_to_str(code16,table_cops_dqos_transaction_id, "Unknown (0x%04x)"),code16);
 
      /* Write the right data into the 'info field' on the Gui */
-     sprintf(info,"COPS %-20s - ",val_to_str(opcode_idx,cops_op_code_vals, "Unknown"));
-     strcat(info,val_to_str(code16,table_cops_transaction_id, "Unknown"));
+     sprintf(info,"COPS %-20s - ",val_to_str(op_code,cops_op_code_vals, "Unknown"));
+     strcat(info,val_to_str(code16,table_cops_dqos_transaction_id, "Unknown"));
 
-     if (check_col(cpinfo->cinfo, COL_INFO)) {
-          col_clear(cpinfo->cinfo, COL_INFO);
-          col_add_str(cpinfo->cinfo, COL_INFO,info);
+     if (check_col(pinfo->cinfo, COL_INFO)) {
+          col_clear(pinfo->cinfo, COL_INFO);
+          col_add_str(pinfo->cinfo, COL_INFO,info);
      }
 
 }
 
-/* Cops - Section : Subscriber ID */
-void cops_subscriber_id_v4(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+/* Cops - Section : Subscriber IDv4 */
+static void
+cops_subscriber_id_v4(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+
+     proto_item *tv;
+
+     /* Create a subtree */
+     tv = info_to_cops_subtree(tvb,st,n,offset,"Subscriber ID (IPv4)");
+
+     /* Subscriber Identifier */
+     info_to_display(tvb,tv,offset,4,"Subscriber Identifier (IPv4)", NULL,FMT_IPv4,&hf_cops_pc_subscriber_id_ipv4);
+}
+
+/* Cops - Section : Subscriber IDv6 */
+static void
+cops_subscriber_id_v6(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
 
      proto_item *tv;
 
      /* Create a subtree */
-     tv = info_to_cops_subtree(tvb,st,n,offset,"Subscriber ID");
+     tv = info_to_cops_subtree(tvb,st,n,offset,"Subscriber ID (IPv6)");
 
      /* Subscriber Identifier */
-     info_to_display(tvb,tv,offset,4,"Subscriber Identifier (IPv4)", NULL,FMT_IP,&hf_cops_pc_subscriber_id);
+     info_to_display(tvb,tv,offset,16,"Subscriber Identifier (IPv6)", NULL,FMT_IPv6,&hf_cops_pc_subscriber_id_ipv6);
 }
 
 /* Cops - Section : Gate ID */
-void cops_gate_id(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+static void
+cops_gate_id(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
 
      proto_tree *stt;
 
@@ -2234,7 +2700,8 @@
 }
 
 /* Cops - Section : Activity Count */
-void cops_activity_count(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+static void
+cops_activity_count(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
 
      proto_tree *stt;
 
@@ -2246,7 +2713,8 @@
 }
 
 /* Cops - Section : Gate Specifications */
-void cops_gate_specs(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+static void
+cops_gate_specs(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
 
      proto_tree *stt;
 
@@ -2270,11 +2738,11 @@
      offset += 1;
 
      /* Source IP Address */
-     info_to_display(tvb,stt,offset,4,"Source IP Address",NULL,FMT_IP,&hf_cops_pc_src_ip);
+     info_to_display(tvb,stt,offset,4,"Source IP Address",NULL,FMT_IPv4,&hf_cops_pc_src_ip);
      offset += 4;
 
      /* Destination IP Address */
-     info_to_display(tvb,stt,offset,4,"Destination IP Address",NULL,FMT_IP,&hf_cops_pc_dest_ip);
+     info_to_display(tvb,stt,offset,4,"Destination IP Address",NULL,FMT_IPv4,&hf_cops_pc_dest_ip);
      offset += 4;
 
      /* Source IP Port */
@@ -2337,7 +2805,8 @@
 }
 
 /* Cops - Section : Electronic Surveillance Parameters  */
-void  cops_surveillance_parameters(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+static void
+cops_surveillance_parameters(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
 
      proto_tree *stt;
      guint8 *bcid_str;
@@ -2346,7 +2815,7 @@
      stt = info_to_cops_subtree(tvb,st,n,offset,"Electronic Surveillance Parameters");
 
      /* DF IP Address for CDC */
-     info_to_display(tvb,stt,offset,4,"DF IP Address for CDC", NULL,FMT_IP,&hf_cops_pc_dfcdc_ip);
+     info_to_display(tvb,stt,offset,4,"DF IP Address for CDC", NULL,FMT_IPv4,&hf_cops_pc_dfcdc_ip);
      offset += 4;
 
      /* DF IP Port for CDC */
@@ -2358,7 +2827,7 @@
      offset += 2;
 
      /* DF IP Address for CCC */
-     info_to_display(tvb,stt,offset,4,"DF IP Address for CCC", NULL,FMT_IP,&hf_cops_pc_dfccc_ip);
+     info_to_display(tvb,stt,offset,4,"DF IP Address for CCC", NULL,FMT_IPv4,&hf_cops_pc_dfccc_ip);
      offset += 4;
 
      /* DF IP Port for CCC */
@@ -2370,7 +2839,7 @@
      offset += 2;
 
      /* CCCID */
-     info_to_display(tvb,stt,offset,4,"CCCID", NULL,FMT_HEX,&hf_cops_pc_srks_ip);
+     info_to_display(tvb,stt,offset,4,"CCCID", NULL,FMT_IPv4,&hf_cops_pc_srks_ip);
      offset += 4;
 
      /* BCID Timestamp */
@@ -2392,7 +2861,8 @@
 }
 
 /* Cops - Section : Event Gereration-Info */
-void  cops_event_generation_info(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+static void
+cops_event_generation_info(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
 
      proto_tree *stt;
      guint8 *bcid_str;
@@ -2401,7 +2871,7 @@
      stt = info_to_cops_subtree(tvb,st,n,offset,"Event Generation Info");
 
      /* Primary Record Keeping Server IP Address */
-     info_to_display(tvb,stt,offset,4,"PRKS IP Address", NULL,FMT_IP,&hf_cops_pc_prks_ip);
+     info_to_display(tvb,stt,offset,4,"PRKS IP Address", NULL,FMT_IPv4,&hf_cops_pc_prks_ip);
      offset += 4;
 
      /* Primary Record Keeping Server IP Port */
@@ -2416,11 +2886,11 @@
      info_to_display(tvb,stt,offset,1,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
      offset += 1;
 
-     /* Secundary Record Keeping Server IP Address */
-     info_to_display(tvb,stt,offset,4,"SRKS IP Address", NULL,FMT_IP,&hf_cops_pc_srks_ip);
+     /* Secondary Record Keeping Server IP Address */
+     info_to_display(tvb,stt,offset,4,"SRKS IP Address", NULL,FMT_IPv4,&hf_cops_pc_srks_ip);
      offset += 4;
 
-     /* Secundary Record Keeping Server IP Port */
+     /* Secondary Record Keeping Server IP Port */
      info_to_display(tvb,stt,offset,2,"SRKS IP Port",NULL,FMT_DEC,&hf_cops_pc_srks_ip_port);
      offset += 2;
 
@@ -2451,7 +2921,8 @@
 }
 
 /* Cops - Section : Remote Gate */
-void cops_remote_gate_info(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+static void
+cops_remote_gate_info(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
 
      proto_tree *stt;
 
@@ -2459,7 +2930,7 @@
      stt = info_to_cops_subtree(tvb,st,n,offset,"Remote Gate Info");
 
      /* CMTS IP Address */
-     info_to_display(tvb,stt,offset,4,"CMTS IP Address", NULL,FMT_IP,&hf_cops_pc_cmts_ip);
+     info_to_display(tvb,stt,offset,4,"CMTS IP Address", NULL,FMT_IPv4,&hf_cops_pc_cmts_ip);
      offset += 4;
 
      /* CMTS IP Port */
@@ -2475,11 +2946,11 @@
      offset += 4;
 
      /* Algorithm */
-     info_to_display(tvb,stt,offset,2,"Algorithm", NULL,FMT_IP,&hf_cops_pc_algorithm);
+     info_to_display(tvb,stt,offset,2,"Algorithm", NULL,FMT_DEC,&hf_cops_pc_algorithm);
      offset += 2;
 
      /* Reserved */
-     info_to_display(tvb,stt,offset,4,"Reserved", NULL,FMT_IP,&hf_cops_pc_reserved);
+     info_to_display(tvb,stt,offset,4,"Reserved", NULL,FMT_HEX,&hf_cops_pc_reserved);
      offset += 4;
 
      /* Security Key */
@@ -2499,7 +2970,8 @@
 }
 
 /* Cops - Section : PacketCable reason */
-void cops_packetcable_reason(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+static void
+cops_packetcable_reason(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
 
      proto_tree *stt;
      guint16  code16;
@@ -2524,7 +2996,8 @@
 }
 
 /* Cops - Section : PacketCable error */
-void cops_packetcable_error(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+static void
+cops_packetcable_error(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
 
      proto_tree *stt;
 
@@ -2540,98 +3013,1497 @@
 
 }
 
-/* Analyze the PacketCable objects */
-void cops_analyze_packetcable_obj(tvbuff_t *tvb, proto_tree *tree, guint32 offset) {
+/* Cops - Section : Multimedia Transaction ID */
+static void
+cops_mm_transaction_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *st, guint8 op_code, guint n, guint32 offset) {
 
-    gint remdata;
-    guint16 object_len;
-    guint8 s_num, s_type;
+     proto_tree *stt;
+     guint16  code16;
+     char info[50];
 
-    /* Only if this option is enabled by the Gui */
-    if ( cops_packetcable == FALSE ) {
-       return;
-    }
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"MM Transaction ID");
 
-    /* Do the remaining client specific objects */
-    remdata = tvb_length_remaining(tvb, offset);
-    while (remdata > 4) {
+     /* Transaction Identifier */
+     info_to_display(tvb,stt,offset,2,"Multimedia Transaction Identifier", NULL,FMT_DEC,&hf_cops_pc_transaction_id);
+     offset +=2;
 
-       /* In case we have remaining data, then lets try to get this analyzed */
-       object_len   = tvb_get_ntohs(tvb, offset);
-       if (object_len < 4) {
-	proto_tree_add_text(tree, tvb, offset, 2,
-	    "Incorrect PacketCable object length %u < 4", object_len);
-	return;
-       }
-	
-       s_num        = tvb_get_guint8(tvb, offset + 2);
-       s_type       = tvb_get_guint8(tvb, offset + 3);
+     /* Gate Command Type */
+     code16 = tvb_get_ntohs(tvb,offset);
+     proto_tree_add_uint_format(stt, hf_cops_pc_gate_command_type,tvb, offset, 2,
+            code16,"%-28s : %s (%u)", "Gate Command Type",
+            val_to_str(code16,table_cops_mm_transaction_id, "Unknown (0x%04x)"),code16);
 
-       /* Tune offset */
-       offset += 4;
+     /* Write the right data into the 'info field' on the Gui */
+     sprintf(info,"COPS %-20s - ",val_to_str(op_code,cops_op_code_vals, "Unknown"));
+     strcat(info,val_to_str(code16,table_cops_mm_transaction_id, "Unknown"));
 
-       /* Perform the appropriate functions */
-       switch (s_num){
-        case 1:
-               if (s_type == 1) {
-                  cops_transaction_id(tvb, tree, object_len, offset);
-               }
-               break;
-        case 2:
-               if (s_type == 1) {
-                  cops_subscriber_id_v4(tvb, tree, object_len, offset);
-               }
-               break;
-        case 3:
-               if (s_type == 1) {
-                  cops_gate_id(tvb, tree, object_len, offset);
-               }
-               break;
-        case 4:
-               if (s_type == 1) {
-                  cops_activity_count(tvb, tree, object_len, offset);
-               }
-               break;
-        case 5:
-               if (s_type == 1) {
-                  cops_gate_specs(tvb, tree, object_len, offset);
-               }
-               break;
-        case 6:
-               if (s_type == 1) {
-                  cops_remote_gate_info(tvb, tree, object_len, offset);
-               }
-               break;
-        case 7:
-               if (s_type == 1) {
-                  cops_event_generation_info(tvb, tree, object_len, offset);
-               }
-               break;
-        case 9:
-               if (s_type == 1) {
-                  cops_packetcable_error(tvb, tree, object_len, offset);
-               }
-               break;
-        case 10:
-               if (s_type == 1) {
-                  cops_surveillance_parameters(tvb, tree, object_len, offset);
-               }
-               break;
-        case 13:
-               if (s_type == 1) {
-                  cops_packetcable_reason(tvb, tree, object_len, offset);
-               }
-               break;
-       }
+     if (check_col(pinfo->cinfo, COL_INFO)) {
+          col_clear(pinfo->cinfo, COL_INFO);
+          col_add_str(pinfo->cinfo, COL_INFO,info);
+     }
 
-       /* Tune offset */
-       offset += object_len-4;
+}
 
-       /* See what we can still get from the buffer */
-       remdata = tvb_length_remaining(tvb, offset);
-    }
+/* Cops - Section : AMID */
+static void
+cops_amid(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+
+     proto_tree *stt;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"AMID");
+
+     /* Gate Identifier */
+     info_to_display(tvb,stt,offset,4,"Application Manager ID", NULL,FMT_DEC,&hf_cops_pcmm_amid);
 }
 
-/* End of PacketCable Addition */
 
+/* Cops - Section : Multimedia Gate Specifications */
+static void
+cops_mm_gate_spec(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+     proto_item *ti;
+     proto_tree *stt, *object_tree;
+     guint8 gs_flags;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"Gate Spec");
+
+     /* Flags */
+     gs_flags = tvb_get_guint8(tvb, offset);
+     ti = info_to_display(tvb,stt,offset,1,"Flags",NULL,FMT_HEX,&hf_cops_pcmm_gate_spec_flags);
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree );
+     proto_tree_add_text(object_tree, tvb, offset, 1, "%s gate",
+	    decode_boolean_bitfield(gs_flags, 1 << 0, 8,
+		    "Upstream", "Downstream"));
+     proto_tree_add_text(object_tree, tvb, offset, 1, "%s DSCP/TOS overwrite",
+	    decode_boolean_bitfield(gs_flags, 1 << 1, 8,
+		    "Enable", "Disable"));
+     offset += 1;
+
+     /* DiffServ Code Point */
+     info_to_display(tvb,stt,offset,1,"DS Field (DSCP or TOS)",NULL,FMT_HEX,&hf_cops_pcmm_gate_spec_dscp_tos_field);
+     offset += 1;
+
+     /* DiffServ Code Point Mask */
+     info_to_display(tvb,stt,offset,1,"DS Field (DSCP or TOS) Mask",NULL,FMT_HEX,&hf_cops_pcmm_gate_spec_dscp_tos_mask);
+     offset += 1;
+
+     /* Session Class */
+     ti = info_to_display(tvb,stt,offset,1,"Session Class",table_cops_session_class,FMT_DEC,&hf_cops_pcmm_gate_spec_session_class_id);
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+     proto_tree_add_item(object_tree, hf_cops_pcmm_gate_spec_session_class_id_priority, tvb, offset, 1, FALSE);
+     proto_tree_add_item(object_tree, hf_cops_pcmm_gate_spec_session_class_id_preemption, tvb, offset, 1, FALSE);
+     proto_tree_add_item(object_tree, hf_cops_pcmm_gate_spec_session_class_id_configurable, tvb, offset, 1, FALSE);
+     offset += 1;
+
+     /* Timer T1 Value */
+     info_to_display(tvb,stt,offset,2,"Timer T1 Value (sec)",NULL,FMT_DEC,&hf_cops_pcmm_gate_spec_timer_t1);
+     offset += 2;
+
+     /* Timer T2 Value */
+     info_to_display(tvb,stt,offset,2,"Timer T2 Value (sec)",NULL,FMT_DEC,&hf_cops_pcmm_gate_spec_timer_t2);
+     offset += 2;
+
+     /* Timer T3 Value */
+     info_to_display(tvb,stt,offset,2,"Timer T3 Value (sec)",NULL,FMT_DEC,&hf_cops_pcmm_gate_spec_timer_t3);
+     offset += 2;
+
+     /* Timer T4 Value */
+     info_to_display(tvb,stt,offset,2,"Timer T4 Value (sec)",NULL,FMT_DEC,&hf_cops_pcmm_gate_spec_timer_t4);
+     offset += 2;
+}
+
+/* Cops - Section : Classifier */
+static void
+cops_classifier(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+
+     proto_tree *stt;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"Classifier");
+
+     /* Protocol ID */
+     info_to_display(tvb,stt,offset,2,"Protocol ID",NULL,FMT_DEC,&hf_cops_pcmm_classifier_protocol_id);
+     offset += 2;
+
+     /* DiffServ Code Point */
+     info_to_display(tvb,stt,offset,1,"DS Field (DSCP or TOS)",NULL,FMT_HEX,&hf_cops_pcmm_classifier_dscp_tos_field);
+     offset += 1;
+
+     /* DiffServ Code Point Mask */
+     info_to_display(tvb,stt,offset,1,"DS Field (DSCP or TOS) Mask",NULL,FMT_HEX,&hf_cops_pcmm_classifier_dscp_tos_mask);
+     offset += 1;
+
+     /* Source IP Address */
+     info_to_display(tvb,stt,offset,4,"Source IP Address",NULL,FMT_IPv4,&hf_cops_pcmm_classifier_src_addr);
+     offset += 4;
+
+     /* Destination IP Address */
+     info_to_display(tvb,stt,offset,4,"Destination IP Address",NULL,FMT_IPv4,&hf_cops_pcmm_classifier_dst_addr);
+     offset += 4;
+
+     /* Source IP Port */
+     info_to_display(tvb,stt,offset,2,"Source IP Port",NULL,FMT_DEC,&hf_cops_pcmm_classifier_src_port);
+     offset += 2;
+
+     /* Destination IP Port */
+     info_to_display(tvb,stt,offset,2,"Destination IP Port",NULL,FMT_DEC,&hf_cops_pcmm_classifier_dst_port);
+     offset += 2;
+
+     /* Priority */
+     info_to_display(tvb,stt,offset,1,"Priority",NULL,FMT_HEX,&hf_cops_pcmm_classifier_priority);
+     offset += 1;
+
+     /* 3 octets Not specified */
+     offset += 3;
+}
+
+/* Cops - Section : Gate Specifications */
+static void
+cops_flow_spec(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+     proto_item *ti;
+     proto_tree *stt, *object_tree;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"Flow Spec");
+
+     /* Envelope */
+     info_to_display(tvb,stt,offset,1,"Envelope",NULL,FMT_DEC,&hf_cops_pcmm_flow_spec_envelope);
+     offset += 1;
+
+     /* Service Number */
+     info_to_display(tvb,stt,offset,1,"Service Number",NULL,FMT_DEC,&hf_cops_pcmm_flow_spec_service_number);
+     offset += 1;
+
+     /* Reserved */
+     info_to_display(tvb,stt,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+     offset += 2;
+
+     /* Authorized Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 28, "Authorized Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Token Bucket Rate */
+     info_to_display(tvb,object_tree,offset,4,"Token Bucket Rate",NULL,FMT_FLT,&hf_cops_pc_token_bucket_rate);
+     offset += 4;
+
+     /* Token Bucket Size */
+     info_to_display(tvb,object_tree,offset,4,"Token Bucket Size",NULL,FMT_FLT,&hf_cops_pc_token_bucket_size);
+     offset += 4;
+
+     /* Peak Data Rate */
+     info_to_display(tvb,object_tree,offset,4,"Peak Data Rate",NULL,FMT_FLT,&hf_cops_pc_peak_data_rate);
+     offset += 4;
+
+     /* Minimum Policed Unit */
+     info_to_display(tvb,object_tree,offset,4,"Minimum Policed Unit",NULL,FMT_DEC,&hf_cops_pc_min_policed_unit);
+     offset += 4;
+
+     /* Maximum Packet Size */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Packet Size",NULL,FMT_DEC,&hf_cops_pc_max_packet_size);
+     offset += 4;
+
+     /* Rate */
+     info_to_display(tvb,object_tree,offset,4,"Rate",NULL,FMT_FLT,&hf_cops_pc_spec_rate);
+     offset += 4;
+
+     /* Slack Term */
+     info_to_display(tvb,object_tree,offset,4,"Slack Term",NULL,FMT_DEC,&hf_cops_pc_slack_term);
+     offset += 4;
+
+     if (n < 64) return;
+
+     /* Reserved Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 28, "Reserved Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Token Bucket Rate */
+     info_to_display(tvb,object_tree,offset,4,"Token Bucket Rate",NULL,FMT_FLT,&hf_cops_pc_token_bucket_rate);
+     offset += 4;
+
+     /* Token Bucket Size */
+     info_to_display(tvb,object_tree,offset,4,"Token Bucket Size",NULL,FMT_FLT,&hf_cops_pc_token_bucket_size);
+     offset += 4;
+
+     /* Peak Data Rate */
+     info_to_display(tvb,object_tree,offset,4,"Peak Data Rate",NULL,FMT_FLT,&hf_cops_pc_peak_data_rate);
+     offset += 4;
+
+     /* Minimum Policed Unit */
+     info_to_display(tvb,object_tree,offset,4,"Minimum Policed Unit",NULL,FMT_DEC,&hf_cops_pc_min_policed_unit);
+     offset += 4;
+
+     /* Maximum Packet Size */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Packet Size",NULL,FMT_DEC,&hf_cops_pc_max_packet_size);
+     offset += 4;
+
+     /* Rate */
+     info_to_display(tvb,object_tree,offset,4,"Rate",NULL,FMT_FLT,&hf_cops_pc_spec_rate);
+     offset += 4;
+
+     /* Slack Term */
+     info_to_display(tvb,object_tree,offset,4,"Slack Term",NULL,FMT_DEC,&hf_cops_pc_slack_term);
+     offset += 4;
+
+     if (n < 92) return;
+
+     /* Committed Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 28, "Committed Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Token Bucket Rate */
+     info_to_display(tvb,object_tree,offset,4,"Token Bucket Rate",NULL,FMT_FLT,&hf_cops_pc_token_bucket_rate);
+     offset += 4;
+
+     /* Token Bucket Size */
+     info_to_display(tvb,object_tree,offset,4,"Token Bucket Size",NULL,FMT_FLT,&hf_cops_pc_token_bucket_size);
+     offset += 4;
+
+     /* Peak Data Rate */
+     info_to_display(tvb,object_tree,offset,4,"Peak Data Rate",NULL,FMT_FLT,&hf_cops_pc_peak_data_rate);
+     offset += 4;
 
+     /* Minimum Policed Unit */
+     info_to_display(tvb,object_tree,offset,4,"Minimum Policed Unit",NULL,FMT_DEC,&hf_cops_pc_min_policed_unit);
+     offset += 4;
+
+     /* Maximum Packet Size */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Packet Size",NULL,FMT_DEC,&hf_cops_pc_max_packet_size);
+     offset += 4;
+
+     /* Rate */
+     info_to_display(tvb,object_tree,offset,4,"Rate",NULL,FMT_FLT,&hf_cops_pc_spec_rate);
+     offset += 4;
+
+     /* Slack Term */
+     info_to_display(tvb,object_tree,offset,4,"Slack Term",NULL,FMT_DEC,&hf_cops_pc_slack_term);
+}
+
+/* Cops - Section : DOCSIS Service Class Name */
+static void
+cops_docsis_service_class_name(tvbuff_t *tvb, proto_tree *st, guint object_len, guint32 offset) {
+
+     proto_tree *stt;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,object_len,offset,"DOCSIS Service Class Name");
+
+     /* Envelope */
+     info_to_display(tvb,stt,offset,1,"Envelope",NULL,FMT_DEC,&hf_cops_pcmm_envelope);
+     offset += 1;
+
+     proto_tree_add_text(stt, tvb, offset, 3, "Reserved");
+     offset += 3;
+
+     if (object_len >= 12) {
+	    proto_tree_add_item(stt, hf_cops_pcmm_docsis_scn, tvb, offset, object_len - 8, FALSE);
+	    offset += object_len - 8;
+     } else {
+	    proto_tree_add_text(stt, tvb, offset - 8, 2, "Invalid object length: %u", object_len);
+     }
+}
+
+/* Cops - Section : Best Effort Service */
+static void
+cops_best_effort_service(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+     proto_item *ti;
+     proto_tree *stt, *object_tree;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"Best Effort Service");
+
+     /* Envelope */
+     info_to_display(tvb,stt,offset,1,"Envelope",NULL,FMT_DEC,&hf_cops_pcmm_envelope);
+     offset += 1;
+
+     proto_tree_add_text(stt, tvb, offset, 3, "Reserved");
+     offset += 3;
+
+     /* Authorized Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 24, "Authorized Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Traffic Priority */
+     info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+     offset += 1;
+
+     proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+     offset += 3;
+
+     /* Request Transmission Policy */
+     decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+     offset += 4;
+
+     /* Maximum Sustained Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+     offset += 4;
+
+     /* Maximum Traffic Burst */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+     offset += 4;
+
+     /* Minimum Reserved Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+     offset += 4;
+
+     /* Assumed Minimum Reserved Traffic Rate Packet Size */
+     info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+     offset += 2;
+
+     /* Reserved */
+     info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+     offset += 2;
+
+     if (n < 56) return;
+
+     /* Reserved Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 24, "Reserved Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Traffic Priority */
+     info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+     offset += 1;
+
+     proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+     offset += 3;
+
+     /* Request Transmission Policy */
+     decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+     offset += 4;
+
+     /* Maximum Sustained Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+     offset += 4;
+
+     /* Maximum Traffic Burst */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+     offset += 4;
+
+     /* Minimum Reserved Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+     offset += 4;
+
+     /* Assumed Minimum Reserved Traffic Rate Packet Size */
+     info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+     offset += 2;
+
+     /* Reserved */
+     info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+     offset += 2;
+
+     if (n < 80) return;
+
+     /* Committed Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 24, "Committed Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Traffic Priority */
+     info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+     offset += 1;
+
+     proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+     offset += 3;
+
+     /* Request Transmission Policy */
+     decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+     offset += 4;
+
+     /* Maximum Sustained Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+     offset += 4;
+
+     /* Maximum Traffic Burst */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+     offset += 4;
+
+     /* Minimum Reserved Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+     offset += 4;
+
+     /* Assumed Minimum Reserved Traffic Rate Packet Size */
+     info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+     offset += 2;
+
+     /* Reserved */
+     info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+     offset += 2;
+}
+
+/* Cops - Section : Non-Real-Time Polling Service */
+static void
+cops_non_real_time_polling_service(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+     proto_item *ti;
+     proto_tree *stt, *object_tree;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"Non-Real-Time Polling Service");
+
+     /* Envelope */
+     info_to_display(tvb,stt,offset,1,"Envelope",NULL,FMT_DEC,&hf_cops_pcmm_envelope);
+     offset += 1;
+
+     proto_tree_add_text(stt, tvb, offset, 3, "Reserved");
+     offset += 3;
+
+     /* Authorized Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 28, "Authorized Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Traffic Priority */
+     info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+     offset += 1;
+
+     proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+     offset += 3;
+
+     /* Request Transmission Policy */
+     decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+     offset += 4;
+
+     /* Maximum Sustained Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+     offset += 4;
+
+     /* Maximum Traffic Burst */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+     offset += 4;
+
+     /* Minimum Reserved Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+     offset += 4;
+
+     /* Assumed Minimum Reserved Traffic Rate Packet Size */
+     info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+     offset += 2;
+
+     /* Reserved */
+     info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+     offset += 2;
+
+     /* Nominal Polling Interval */
+     info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+     offset += 4;
+
+     if (n < 64) return;
+
+     /* Reserved Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 24, "Reserved Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Traffic Priority */
+     info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+     offset += 1;
+
+     proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+     offset += 3;
+
+     /* Request Transmission Policy */
+     decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+     offset += 4;
+
+     /* Maximum Sustained Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+     offset += 4;
+
+     /* Maximum Traffic Burst */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+     offset += 4;
+
+     /* Minimum Reserved Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+     offset += 4;
+
+     /* Assumed Minimum Reserved Traffic Rate Packet Size */
+     info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+     offset += 2;
+
+     /* Reserved */
+     info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+     offset += 2;
+
+     /* Nominal Polling Interval */
+     info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+     offset += 4;
+
+     if (n < 92) return;
+
+     /* Committed Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 24, "Committed Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Traffic Priority */
+     info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+     offset += 1;
+
+     proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+     offset += 3;
+
+     /* Request Transmission Policy */
+     decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+     offset += 4;
+
+     /* Maximum Sustained Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+     offset += 4;
+
+     /* Maximum Traffic Burst */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+     offset += 4;
+
+     /* Minimum Reserved Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+     offset += 4;
+
+     /* Assumed Minimum Reserved Traffic Rate Packet Size */
+     info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+     offset += 2;
+
+     /* Reserved */
+     info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+     offset += 2;
+
+     /* Nominal Polling Interval */
+     info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+     offset += 4;
+}
+
+/* Cops - Section : Real-Time Polling Service */
+static void
+cops_real_time_polling_service(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+     proto_item *ti;
+     proto_tree *stt, *object_tree;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"Real-Time Polling Service");
+
+     /* Envelope */
+     info_to_display(tvb,stt,offset,1,"Envelope",NULL,FMT_DEC,&hf_cops_pcmm_envelope);
+     offset += 1;
+
+     proto_tree_add_text(stt, tvb, offset, 3, "Reserved");
+     offset += 3;
+
+     /* Authorized Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 28, "Authorized Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Request Transmission Policy */
+     decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+     offset += 4;
+
+     /* Maximum Sustained Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+     offset += 4;
+
+     /* Maximum Traffic Burst */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+     offset += 4;
+
+     /* Minimum Reserved Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+     offset += 4;
+
+     /* Assumed Minimum Reserved Traffic Rate Packet Size */
+     info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+     offset += 2;
+
+     /* Reserved */
+     info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+     offset += 2;
+
+     /* Nominal Polling Interval */
+     info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+     offset += 4;
+
+     /* Tolerated Poll Jitter */
+     info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
+     offset += 4;
+
+     if (n < 64) return;
+
+     /* Reserved Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 24, "Reserved Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Request Transmission Policy */
+     decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+     offset += 4;
+
+     /* Maximum Sustained Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+     offset += 4;
+
+     /* Maximum Traffic Burst */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+     offset += 4;
+
+     /* Minimum Reserved Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+     offset += 4;
+
+     /* Assumed Minimum Reserved Traffic Rate Packet Size */
+     info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+     offset += 2;
+
+     /* Reserved */
+     info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+     offset += 2;
+
+     /* Nominal Polling Interval */
+     info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+     offset += 4;
+
+     /* Tolerated Poll Jitter */
+     info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
+     offset += 4;
+
+     if (n < 92) return;
+
+     /* Committed Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 24, "Committed Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Request Transmission Policy */
+     decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+     offset += 4;
+
+     /* Maximum Sustained Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+     offset += 4;
+
+     /* Maximum Traffic Burst */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+     offset += 4;
+
+     /* Minimum Reserved Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+     offset += 4;
+
+     /* Assumed Minimum Reserved Traffic Rate Packet Size */
+     info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+     offset += 2;
+
+     /* Reserved */
+     info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+     offset += 2;
+
+     /* Nominal Polling Interval */
+     info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+     offset += 4;
+
+     /* Tolerated Poll Jitter */
+     info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
+     offset += 4;
+}
+
+/* Cops - Section : Unsolicited Grant Service */
+static void
+cops_unsolicited_grant_service(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+     proto_item *ti;
+     proto_tree *stt, *object_tree;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"Unsolicited Grant Service");
+
+     /* Envelope */
+     info_to_display(tvb,stt,offset,1,"Envelope",NULL,FMT_DEC,&hf_cops_pcmm_envelope);
+     offset += 1;
+
+     proto_tree_add_text(stt, tvb, offset, 3, "Reserved");
+     offset += 3;
+
+     /* Authorized Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 16, "Authorized Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Request Transmission Policy */
+     decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+     offset += 4;
+
+     /* Unsolicited Grant Size */
+     info_to_display(tvb,object_tree,offset,2,"Unsolicited Grant Size",NULL,FMT_DEC,&hf_cops_pcmm_unsolicited_grant_size);
+     offset += 2;
+
+     /* Grants Per Interval */
+     info_to_display(tvb,object_tree,offset,1,"Grants Per Interval",NULL,FMT_DEC,&hf_cops_pcmm_grants_per_interval);
+     offset += 1;
+
+     proto_tree_add_text(object_tree, tvb, offset, 1, "Reserved");
+     offset += 1;
+
+     /* Nominal Grant Interval */
+     info_to_display(tvb,object_tree,offset,4,"Nominal Grant Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_grant_interval);
+     offset += 4;
+
+     /* Tolerated Grant Jitter */
+     info_to_display(tvb,object_tree,offset,4,"Tolerated Grant Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_grant_jitter);
+     offset += 4;
+
+     if (n < 40) return;
+
+     /* Reserved Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 16, "Reserved Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Request Transmission Policy */
+     decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+     offset += 4;
+
+     /* Unsolicited Grant Size */
+     info_to_display(tvb,object_tree,offset,2,"Unsolicited Grant Size",NULL,FMT_DEC,&hf_cops_pcmm_unsolicited_grant_size);
+     offset += 2;
+
+     /* Grants Per Interval */
+     info_to_display(tvb,object_tree,offset,1,"Grants Per Interval",NULL,FMT_DEC,&hf_cops_pcmm_grants_per_interval);
+     offset += 1;
+
+     proto_tree_add_text(object_tree, tvb, offset, 1, "Reserved");
+     offset += 1;
+
+     /* Nominal Grant Interval */
+     info_to_display(tvb,object_tree,offset,4,"Nominal Grant Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_grant_interval);
+     offset += 4;
+
+     /* Tolerated Grant Jitter */
+     info_to_display(tvb,object_tree,offset,4,"Tolerated Grant Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_grant_jitter);
+     offset += 4;
+
+     if (n < 56) return;
+
+     /* Committed Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 16, "Committed Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Request Transmission Policy */
+     decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+     offset += 4;
+
+     /* Unsolicited Grant Size */
+     info_to_display(tvb,object_tree,offset,2,"Unsolicited Grant Size",NULL,FMT_DEC,&hf_cops_pcmm_unsolicited_grant_size);
+     offset += 2;
+
+     /* Grants Per Interval */
+     info_to_display(tvb,object_tree,offset,1,"Grants Per Interval",NULL,FMT_DEC,&hf_cops_pcmm_grants_per_interval);
+     offset += 1;
+
+     proto_tree_add_text(object_tree, tvb, offset, 1, "Reserved");
+     offset += 1;
+
+     /* Nominal Grant Interval */
+     info_to_display(tvb,object_tree,offset,4,"Nominal Grant Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_grant_interval);
+     offset += 4;
+
+     /* Tolerated Grant Jitter */
+     info_to_display(tvb,object_tree,offset,4,"Tolerated Grant Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_grant_jitter);
+     offset += 4;
+}
+
+/* Cops - Section : Unsolicited Grant Service with Activity Detection */
+static void
+cops_ugs_with_activity_detection(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+     proto_item *ti;
+     proto_tree *stt, *object_tree;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"Unsolicited Grant Service with Activity Detection");
+
+     /* Envelope */
+     info_to_display(tvb,stt,offset,1,"Envelope",NULL,FMT_DEC,&hf_cops_pcmm_envelope);
+     offset += 1;
+
+     proto_tree_add_text(stt, tvb, offset, 3, "Reserved");
+     offset += 3;
+
+     /* Authorized Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 24, "Authorized Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Request Transmission Policy */
+     decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+     offset += 4;
+
+     /* Unsolicited Grant Size */
+     info_to_display(tvb,object_tree,offset,2,"Unsolicited Grant Size",NULL,FMT_DEC,&hf_cops_pcmm_unsolicited_grant_size);
+     offset += 2;
+
+     /* Grants Per Interval */
+     info_to_display(tvb,object_tree,offset,1,"Grants Per Interval",NULL,FMT_DEC,&hf_cops_pcmm_grants_per_interval);
+     offset += 1;
+
+     proto_tree_add_text(object_tree, tvb, offset, 1, "Reserved");
+     offset += 1;
+
+     /* Nominal Grant Interval */
+     info_to_display(tvb,object_tree,offset,4,"Nominal Grant Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_grant_interval);
+     offset += 4;
+
+     /* Tolerated Grant Jitter */
+     info_to_display(tvb,object_tree,offset,4,"Tolerated Grant Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_grant_jitter);
+     offset += 4;
+
+     /* Nominal Polling Interval */
+     info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+     offset += 4;
+
+     /* Tolerated Poll Jitter */
+     info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
+     offset += 4;
+
+     if (n < 56) return;
+
+     /* Reserved Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 24, "Reserved Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Request Transmission Policy */
+     decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+     offset += 4;
+
+     /* Unsolicited Grant Size */
+     info_to_display(tvb,object_tree,offset,2,"Unsolicited Grant Size",NULL,FMT_DEC,&hf_cops_pcmm_unsolicited_grant_size);
+     offset += 2;
+
+     /* Grants Per Interval */
+     info_to_display(tvb,object_tree,offset,1,"Grants Per Interval",NULL,FMT_DEC,&hf_cops_pcmm_grants_per_interval);
+     offset += 1;
+
+     proto_tree_add_text(object_tree, tvb, offset, 1, "Reserved");
+     offset += 1;
+
+     /* Nominal Grant Interval */
+     info_to_display(tvb,object_tree,offset,4,"Nominal Grant Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_grant_interval);
+     offset += 4;
+
+     /* Tolerated Grant Jitter */
+     info_to_display(tvb,object_tree,offset,4,"Tolerated Grant Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_grant_jitter);
+     offset += 4;
+
+     /* Nominal Polling Interval */
+     info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+     offset += 4;
+
+     /* Tolerated Poll Jitter */
+     info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
+     offset += 4;
+
+     if (n < 80) return;
+
+     /* Committed Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 24, "Committed Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Request Transmission Policy */
+     decode_docsis_request_transmission_policy(tvb, offset, object_tree, hf_cops_pcmm_request_transmission_policy);
+     offset += 4;
+
+     /* Unsolicited Grant Size */
+     info_to_display(tvb,object_tree,offset,2,"Unsolicited Grant Size",NULL,FMT_DEC,&hf_cops_pcmm_unsolicited_grant_size);
+     offset += 2;
+
+     /* Grants Per Interval */
+     info_to_display(tvb,object_tree,offset,1,"Grants Per Interval",NULL,FMT_DEC,&hf_cops_pcmm_grants_per_interval);
+     offset += 1;
+
+     proto_tree_add_text(object_tree, tvb, offset, 1, "Reserved");
+     offset += 1;
+
+     /* Nominal Grant Interval */
+     info_to_display(tvb,object_tree,offset,4,"Nominal Grant Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_grant_interval);
+     offset += 4;
+
+     /* Tolerated Grant Jitter */
+     info_to_display(tvb,object_tree,offset,4,"Tolerated Grant Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_grant_jitter);
+     offset += 4;
+
+     /* Nominal Polling Interval */
+     info_to_display(tvb,object_tree,offset,4,"Nominal Polling Interval",NULL,FMT_DEC,&hf_cops_pcmm_nominal_polling_interval);
+     offset += 4;
+
+     /* Tolerated Poll Jitter */
+     info_to_display(tvb,object_tree,offset,4,"Tolerated Poll Jitter",NULL,FMT_DEC,&hf_cops_pcmm_tolerated_poll_jitter);
+     offset += 4;
+}
+
+/* Cops - Section : Downstream Service */
+static void
+cops_downstream_service(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+     proto_item *ti;
+     proto_tree *stt, *object_tree;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"Downstream Service");
+
+     /* Envelope */
+     info_to_display(tvb,stt,offset,1,"Envelope",NULL,FMT_DEC,&hf_cops_pcmm_envelope);
+     offset += 1;
+
+     proto_tree_add_text(stt, tvb, offset, 3, "Reserved");
+     offset += 3;
+
+     /* Authorized Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 24, "Authorized Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Traffic Priority */
+     info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+     offset += 1;
+
+     proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+     offset += 3;
+
+     /* Maximum Sustained Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+     offset += 4;
+
+     /* Maximum Traffic Burst */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+     offset += 4;
+
+     /* Minimum Reserved Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+     offset += 4;
+
+     /* Assumed Minimum Reserved Traffic Rate Packet Size */
+     info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+     offset += 2;
+
+     /* Reserved */
+     info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+     offset += 2;
+
+     /* Maximum Downstream Latency */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Downstream Latency",NULL,FMT_DEC,&hf_cops_pcmm_max_downstream_latency);
+     offset += 4;
+
+     if (n < 56) return;
+
+     /* Reserved Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 24, "Reserved Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Traffic Priority */
+     info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+     offset += 1;
+
+     proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+     offset += 3;
+
+     /* Maximum Sustained Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+     offset += 4;
+
+     /* Maximum Traffic Burst */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+     offset += 4;
+
+     /* Minimum Reserved Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+     offset += 4;
+
+     /* Assumed Minimum Reserved Traffic Rate Packet Size */
+     info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+     offset += 2;
+
+     /* Reserved */
+     info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+     offset += 2;
+
+     /* Maximum Downstream Latency */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Downstream Latency",NULL,FMT_DEC,&hf_cops_pcmm_max_downstream_latency);
+     offset += 4;
+
+     if (n < 80) return;
+
+     /* Committed Envelope */
+     ti = proto_tree_add_text(stt, tvb, offset, 24, "Committed Envelope");
+     object_tree = proto_item_add_subtree(ti, ett_cops_subtree);
+
+     /* Traffic Priority */
+     info_to_display(tvb,object_tree,offset,1,"Traffic Priority",NULL,FMT_HEX,&hf_cops_pcmm_traffic_priority);
+     offset += 1;
+
+     proto_tree_add_text(object_tree, tvb, offset, 3, "Reserved");
+     offset += 3;
+
+     /* Maximum Sustained Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Sustained Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_max_sustained_traffic_rate);
+     offset += 4;
+
+     /* Maximum Traffic Burst */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Traffic Burst",NULL,FMT_DEC,&hf_cops_pcmm_max_traffic_burst);
+     offset += 4;
+
+     /* Minimum Reserved Traffic Rate */
+     info_to_display(tvb,object_tree,offset,4,"Minimum Reserved Traffic Rate",NULL,FMT_DEC,&hf_cops_pcmm_min_reserved_traffic_rate);
+     offset += 4;
+
+     /* Assumed Minimum Reserved Traffic Rate Packet Size */
+     info_to_display(tvb,object_tree,offset,2,"Assumed Minimum Reserved Traffic Rate Packet Size",NULL,FMT_DEC,&hf_cops_pcmm_ass_min_rtr_packet_size);
+     offset += 2;
+
+     /* Reserved */
+     info_to_display(tvb,object_tree,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+     offset += 2;
+
+     /* Maximum Downstream Latency */
+     info_to_display(tvb,object_tree,offset,4,"Maximum Downstream Latency",NULL,FMT_DEC,&hf_cops_pcmm_max_downstream_latency);
+     offset += 4;
+}
+
+/* Cops - Section : PacketCable Multimedia Event Gereration-Info */
+static void
+cops_mm_event_generation_info(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+
+     proto_tree *stt;
+     guint8 *bcid_str;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"Event Generation Info");
+
+     /* Primary Record Keeping Server IP Address */
+     info_to_display(tvb,stt,offset,4,"PRKS IP Address", NULL,FMT_IPv4,&hf_cops_pc_prks_ip);
+     offset += 4;
+
+     /* Primary Record Keeping Server IP Port */
+     info_to_display(tvb,stt,offset,2,"PRKS IP Port",NULL,FMT_DEC,&hf_cops_pc_prks_ip_port);
+     offset += 2;
+
+     /* Reserved */
+     info_to_display(tvb,stt,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+     offset += 2;
+
+     /* Secondary Record Keeping Server IP Address */
+     info_to_display(tvb,stt,offset,4,"SRKS IP Address", NULL,FMT_IPv4,&hf_cops_pc_srks_ip);
+     offset += 4;
+
+     /* Secondary Record Keeping Server IP Port */
+     info_to_display(tvb,stt,offset,2,"SRKS IP Port",NULL,FMT_DEC,&hf_cops_pc_srks_ip_port);
+     offset += 2;
+
+     /* Reserved */
+     info_to_display(tvb,stt,offset,2,"Reserved",NULL,FMT_HEX,&hf_cops_pc_reserved);
+     offset += 2;
+
+     /* BCID Timestamp */
+     info_to_display(tvb,stt,offset,4,"BCID - Timestamp",NULL,FMT_HEX,&hf_cops_pc_bcid_ts);
+     offset += 4;
+
+     /* BCID Element ID */
+     bcid_str = tvb_get_string(tvb, offset, 8);
+     proto_tree_add_text(stt, tvb, offset, 8,"%-28s : '%s'","BCID - Element ID",bcid_str);
+     offset += 8;
+
+     /* BCID Time Zone */
+     bcid_str = tvb_get_string(tvb, offset, 8);
+     proto_tree_add_text(stt, tvb, offset, 8,"%-28s : '%s'","BCID - Time Zone",bcid_str);
+     offset += 8;
+
+     /* BCID Event Counter */
+     info_to_display(tvb,stt,offset,4,"BCID - Event Counter",NULL,FMT_DEC,&hf_cops_pc_bcid_ev);
+}
+
+/* Cops - Section : Volume-Based Usage Limit */
+static void
+cops_volume_based_usage_limit(tvbuff_t *tvb, proto_tree *st, guint object_len, guint32 offset) {
+
+     proto_tree *stt;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,object_len,offset,"Volume-Based Usage Limit");
+
+     /* Usage Limit */
+     proto_tree_add_item(stt, hf_cops_pcmm_volume_based_usage_limit, tvb, offset, 8,
+	    FALSE);
+}
+
+/* Cops - Section : Time-Based Usage Limit */
+static void
+cops_time_based_usage_limit(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+
+     proto_tree *stt;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"Time-Based Usage Limit");
+
+     /* Time Limit */
+     info_to_display(tvb,stt,offset,4,"Time Limit", NULL,FMT_DEC,&hf_cops_pcmm_time_based_usage_limit);
+     offset += 4;
+}
+
+/* Cops - Section : Opaque Data */
+static void
+cops_opaque_data(tvbuff_t *tvb, proto_tree *st, guint object_len, guint32 offset) {
+
+     proto_tree *stt;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,object_len,offset,"Opaque Data");
+
+     /* Opaque Data */
+     proto_tree_add_text(stt, tvb, offset, 8,"Opaque Data");
+}
+
+/* Cops - Section : Gate Time Info */
+static void
+cops_gate_time_info(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+
+     proto_tree *stt;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"Gate Time Info");
+
+     /* Gate Time Info */
+     info_to_display(tvb,stt,offset,4,"Time Committed", NULL,FMT_DEC,&hf_cops_pcmm_gate_time_info);
+     offset += 4;
+}
+
+/* Cops - Section : Gate Usage Info */
+static void
+cops_gate_usage_info(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+
+     proto_tree *stt;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"Gate Usage Info");
+
+     /* Gate Time Info */
+     info_to_display(tvb,stt,offset,4,"Octet Count", NULL,FMT_DEC,&hf_cops_pcmm_gate_usage_info);
+     offset += 4;
+}
+
+/* Cops - Section : PacketCable error */
+static void
+cops_packetcable_mm_error(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+
+     proto_tree *stt;
+     guint16 code, subcode;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"PacketCable Error");
+
+     code = tvb_get_ntohs(tvb, offset);
+     proto_tree_add_uint_format(stt, hf_cops_pcmm_packetcable_error_code, tvb, offset, 2, code,
+	    "Error Code: %s (%u)", val_to_str(code, pcmm_packetcable_error_code, "Unknown"),
+	    code);
+     offset += 2;
+
+     subcode = tvb_get_ntohs(tvb, offset);
+     if (code == 6 || code == 7)
+	    proto_tree_add_uint_format(stt, hf_cops_pcmm_packetcable_error_subcode,
+		    tvb, offset, 2, code, "Error-Subcode: 0x%02x, S-Num: 0x%02x, S-Type: 0x%02x",
+		    subcode, subcode >> 8, subcode & 0xf);
+     else
+	    proto_tree_add_uint_format(stt, hf_cops_pcmm_packetcable_error_subcode,
+		    tvb, offset, 2, code, "Error-Subcode: 0x%04x", subcode);
+     offset += 2;
+}
+
+/* Cops - Section : Gate State */
+static void
+cops_gate_state(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+
+     proto_tree *stt;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"Gate State");
+
+     /* State */
+     info_to_display(tvb,stt,offset,2,"State",pcmm_gate_state,FMT_DEC,&hf_cops_pcmm_packetcable_gate_state);
+     offset += 2;
+
+     /* Reason */
+     info_to_display(tvb,stt,offset,2,"Reason",pcmm_gate_state_reason,FMT_DEC,&hf_cops_pcmm_packetcable_gate_state_reason);
+     offset += 2;
+}
+
+/* Cops - Section : Version Info */
+static void
+cops_version_info(tvbuff_t *tvb, proto_tree *st, guint n, guint32 offset) {
+
+     proto_tree *stt;
+
+     /* Create a subtree */
+     stt = info_to_cops_subtree(tvb,st,n,offset,"Version Info");
+
+     /* State */
+     info_to_display(tvb,stt,offset,2,"Major Version Number",NULL,FMT_DEC,&hf_cops_pcmm_packetcable_version_info_major);
+     offset += 2;
+
+     /* Reason */
+     info_to_display(tvb,stt,offset,2,"Minor Version Number",NULL,FMT_DEC,&hf_cops_pcmm_packetcable_version_info_minor);
+     offset += 2;
+}
+
+
+
+/* PacketCable D-QoS S-Num/S-Type globs */
+#define PCDQ_TRANSACTION_ID              0x0101
+#define PCDQ_SUBSCRIBER_IDv4             0x0201
+#define PCDQ_SUBSCRIBER_IDv6             0x0202
+#define PCDQ_GATE_ID                     0x0301
+#define PCDQ_ACTIVITY_COUNT              0x0401
+#define PCDQ_GATE_SPEC                   0x0501
+#define PCDQ_REMOTE_GATE_INFO            0x0601
+#define PCDQ_EVENT_GENERATION_INFO       0x0701
+#define PCDQ_MEDIA_CONNECTION_EVENT_INFO 0x0801
+#define PCDQ_PACKETCABLE_ERROR           0x0901
+#define PCDQ_PACKETCABLE_REASON          0x0d01
+#define PCDQ_ELECTRONIC_SURVEILLANCE     0x0a01
+#define PCDQ_SESSION_DESCRIPTION         0x0b01
+
+/* Analyze the PacketCable objects */
+static void
+cops_analyze_packetcable_dqos_obj(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint8 op_code, guint32 offset) {
+
+    gint remdata;
+    guint16 object_len;
+    guint8 s_num, s_type;
+    guint16 num_type_glob;
+
+    /* Only if this option is enabled by the Gui */
+    if ( cops_packetcable == FALSE ) {
+       return;
+    }
+
+    /* Do the remaining client specific objects */
+    remdata = tvb_length_remaining(tvb, offset);
+    while (remdata > 4) {
+
+       /* In case we have remaining data, then lets try to get this analyzed */
+       object_len   = tvb_get_ntohs(tvb, offset);
+       if (object_len < 4) {
+	proto_tree_add_text(tree, tvb, offset, 2,
+	    "Incorrect PacketCable object length %u < 4", object_len);
+	return;
+       }
+
+       s_num        = tvb_get_guint8(tvb, offset + 2);
+       s_type       = tvb_get_guint8(tvb, offset + 3);
+
+       /* Glom the s_num and s_type together to make switching easier */
+       num_type_glob = s_num << 8 | s_type;
+
+       /* Tune offset */
+       offset += 4;
+
+       /* Perform the appropriate functions */
+       switch (num_type_glob){
+        case PCDQ_TRANSACTION_ID:
+               cops_transaction_id(tvb, pinfo, tree, op_code, object_len, offset);
+               break;
+        case PCDQ_SUBSCRIBER_IDv4:
+               cops_subscriber_id_v4(tvb, tree, object_len, offset);
+               break;
+        case PCDQ_SUBSCRIBER_IDv6:
+               cops_subscriber_id_v6(tvb, tree, object_len, offset);
+               break;
+        case PCDQ_GATE_ID:
+               cops_gate_id(tvb, tree, object_len, offset);
+               break;
+        case PCDQ_ACTIVITY_COUNT:
+               cops_activity_count(tvb, tree, object_len, offset);
+               break;
+        case PCDQ_GATE_SPEC:
+               cops_gate_specs(tvb, tree, object_len, offset);
+               break;
+        case PCDQ_REMOTE_GATE_INFO:
+               cops_remote_gate_info(tvb, tree, object_len, offset);
+               break;
+        case PCDQ_EVENT_GENERATION_INFO:
+               cops_event_generation_info(tvb, tree, object_len, offset);
+               break;
+        case PCDQ_PACKETCABLE_ERROR:
+               cops_packetcable_error(tvb, tree, object_len, offset);
+               break;
+        case PCDQ_ELECTRONIC_SURVEILLANCE:
+               cops_surveillance_parameters(tvb, tree, object_len, offset);
+               break;
+        case PCDQ_PACKETCABLE_REASON:
+               cops_packetcable_reason(tvb, tree, object_len, offset);
+               break;
+       }
+
+       /* Tune offset */
+       offset += object_len-4;
+
+       /* See what we can still get from the buffer */
+       remdata = tvb_length_remaining(tvb, offset);
+    }
+}
+
+/* XXX - This duplicates code in the DOCSIS dissector. */
+static void
+decode_docsis_request_transmission_policy(tvbuff_t *tvb, guint32 offset, proto_tree *tree, gint hf) {
+	proto_tree *drtp_tree;
+	proto_item *item;
+	guint32 policy = tvb_get_ntohl(tvb, offset);
+	int i;
+	char bit_fld[48];
+	static const value_string drtp_vals[] = {
+		{ 1 << 0, "The Service Flow MUST NOT use \"all CMs\" broadcast request opportunities" },
+		{ 1 << 1, "The Service Flow MUST NOT use Priority Request multicast request opportunities" },
+		{ 1 << 2, "The Service Flow MUST NOT use Request/Data opportunities for Requests" },
+		{ 1 << 3, "The Service Flow MUST NOT use Request/Data opportunities for Data" },
+		{ 1 << 4, "The Service Flow MUST NOT piggyback requests with data" },
+		{ 1 << 5, "The Service Flow MUST NOT concatenate data" },
+		{ 1 << 6, "The Service Flow MUST NOT fragment data" },
+		{ 1 << 7, "The Service Flow MUST NOT suppress payload headers" },
+		{ 1 << 8, "The Service Flow MUST drop packets that do not fit in the Unsolicited Grant Size" },
+		{ 0, NULL }
+	};
+
+	item = proto_tree_add_item (tree, hf, tvb, offset, 4, FALSE);
+	drtp_tree = proto_item_add_subtree(item, ett_docsis_request_transmission_policy);
+	for (i = 0 ; i <= 8; i++) {
+		if (policy & drtp_vals[i].value) {
+			decode_bitfield_value(bit_fld, policy, drtp_vals[i].value, 32);
+			proto_tree_add_text(drtp_tree, tvb, offset, 4, "%s%s",
+				bit_fld, drtp_vals[i].strptr);
+		}
+	}
+}
+
+
+#define PCMM_TRANSACTION_ID                0x0101
+#define PCMM_AMID                          0x0201
+#define PCMM_SUBSCRIBER_ID                 0x0301
+#define PCMM_GATE_ID                       0x0401
+#define PCMM_GATE_SPEC                     0x0501
+#define PCMM_CLASSIFIER                    0x0601
+#define PCMM_FLOW_SPEC                     0x0701
+#define PCMM_DOCSIS_SERVICE_CLASS_NAME     0x0702
+#define PCMM_BEST_EFFORT_SERVICE           0x0703
+#define PCMM_NON_REAL_TIME_POLLING_SERVICE 0x0704
+#define PCMM_REAL_TIME_POLLING_SERVICE     0x0705
+#define PCMM_UNSOLICITED_GRANT_SERVICE     0x0706
+#define PCMM_UGS_WITH_ACTIVITY_DETECTION   0x0707
+#define PCMM_DOWNSTREAM_SERVICE            0x0708
+#define PCMM_EVENT_GENERATION_INFO         0x0801
+#define PCMM_VOLUME_BASED_USAGE_LIMIT      0x0901
+#define PCMM_TIME_BASED_USAGE_LIMIT        0x0a01
+#define PCMM_OPAQUE_DATA                   0x0b01
+#define PCMM_GATE_TIME_INFO                0x0c01
+#define PCMM_GATE_USAGE_INFO               0x0d01
+#define PCMM_PACKETCABLE_ERROR             0x0e01
+#define PCMM_GATE_STATE                    0x0f01
+#define PCMM_VERSION_INFO                  0x1001
+
+
+static void
+cops_analyze_packetcable_mm_obj(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint8 op_code, guint32 offset) {
+
+    gint remdata;
+    guint16 object_len;
+    guint8 s_num, s_type;
+    guint16 num_type_glob;
+
+    /* Only if this option is enabled by the Gui */
+    if ( cops_packetcable == FALSE ) {
+       return;
+    }
+
+    /* Do the remaining client specific objects */
+    remdata = tvb_length_remaining(tvb, offset);
+    while (remdata > 4) {
+
+       /* In case we have remaining data, then lets try to get this analyzed */
+       object_len   = tvb_get_ntohs(tvb, offset);
+       if (object_len < 4) {
+	proto_tree_add_text(tree, tvb, offset, 2,
+	    "Incorrect PacketCable object length %u < 4", object_len);
+	return;
+       }
+
+       s_num        = tvb_get_guint8(tvb, offset + 2);
+       s_type       = tvb_get_guint8(tvb, offset + 3);
+
+       /* Glom the s_num and s_type together to make switching easier */
+       num_type_glob = s_num << 8 | s_type;
+
+       /* Tune offset */
+       offset += 4;
+
+       /* Perform the appropriate functions */
+       switch (num_type_glob){
+        case PCMM_TRANSACTION_ID:
+               cops_mm_transaction_id(tvb, pinfo, tree, op_code, object_len, offset);
+               break;
+        case PCMM_AMID:
+               cops_amid(tvb, tree, object_len, offset);
+               break;
+        case PCMM_SUBSCRIBER_ID:
+               cops_subscriber_id_v4(tvb, tree, object_len, offset);
+               break;
+        case PCMM_GATE_ID:
+               cops_gate_id(tvb, tree, object_len, offset);
+               break;
+        case PCMM_GATE_SPEC:
+               cops_mm_gate_spec(tvb, tree, object_len, offset);
+               break;
+        case PCMM_CLASSIFIER:
+               cops_classifier(tvb, tree, object_len, offset);
+               break;
+        case PCMM_FLOW_SPEC:
+               cops_flow_spec(tvb, tree, object_len, offset);
+               break;
+        case PCMM_DOCSIS_SERVICE_CLASS_NAME:
+               cops_docsis_service_class_name(tvb, tree, object_len, offset);
+               break;
+        case PCMM_BEST_EFFORT_SERVICE:
+               cops_best_effort_service(tvb, tree, object_len, offset);
+               break;
+        case PCMM_NON_REAL_TIME_POLLING_SERVICE:
+               cops_non_real_time_polling_service(tvb, tree, object_len, offset);
+               break;
+        case PCMM_REAL_TIME_POLLING_SERVICE:
+               cops_real_time_polling_service(tvb, tree, object_len, offset);
+               break;
+        case PCMM_UNSOLICITED_GRANT_SERVICE:
+               cops_unsolicited_grant_service(tvb, tree, object_len, offset);
+               break;
+        case PCMM_UGS_WITH_ACTIVITY_DETECTION:
+               cops_ugs_with_activity_detection(tvb, tree, object_len, offset);
+               break;
+        case PCMM_DOWNSTREAM_SERVICE:
+               cops_downstream_service(tvb, tree, object_len, offset);
+               break;
+        case PCMM_EVENT_GENERATION_INFO:
+               cops_mm_event_generation_info(tvb, tree, object_len, offset);
+               break;
+        case PCMM_VOLUME_BASED_USAGE_LIMIT:
+               cops_volume_based_usage_limit(tvb, tree, object_len, offset);
+               break;
+        case PCMM_TIME_BASED_USAGE_LIMIT:
+               cops_time_based_usage_limit(tvb, tree, object_len, offset);
+               break;
+        case PCMM_OPAQUE_DATA:
+               cops_opaque_data(tvb, tree, object_len, offset);
+               break;
+        case PCMM_GATE_TIME_INFO:
+               cops_gate_time_info(tvb, tree, object_len, offset);
+               break;
+        case PCMM_GATE_USAGE_INFO:
+               cops_gate_usage_info(tvb, tree, object_len, offset);
+               break;
+        case PCMM_PACKETCABLE_ERROR:
+               cops_packetcable_mm_error(tvb, tree, object_len, offset);
+               break;
+        case PCMM_GATE_STATE:
+               cops_gate_state(tvb, tree, object_len, offset);
+               break;
+        case PCMM_VERSION_INFO:
+               cops_version_info(tvb, tree, object_len, offset);
+               break;
+       }
+
+       /* Tune offset */
+       offset += object_len-4;
+
+       /* See what we can still get from the buffer */
+       remdata = tvb_length_remaining(tvb, offset);
+    }
+}
+
+
+/* End of PacketCable Addition */
diff -urN ethereal-0.10.6/epan/dissectors/packet-cpfi.c ethereal-0.10.7/epan/dissectors/packet-cpfi.c
--- ethereal-0.10.6/epan/dissectors/packet-cpfi.c	2004-08-12 17:42:24.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-cpfi.c	2004-10-20 17:34:53.000000000 -0500
@@ -5,7 +5,7 @@
  *
  * Copyright 2003, Dave Sclarsky <dave_sclarsky[AT]cnt.com>
  *
- * $Id: packet-cpfi.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-cpfi.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -38,7 +38,7 @@
 #include <glib.h>
 
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 
 void proto_reg_handoff_cpfi(void);
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-cpha.c ethereal-0.10.7/epan/dissectors/packet-cpha.c
--- ethereal-0.10.6/epan/dissectors/packet-cpha.c	2004-08-12 17:42:04.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-cpha.c	2004-10-20 17:34:43.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for the Check Point High-Availability Protocol (CPHAP)
  * Copyright 2002, Yaniv Kaul <ykaul-at-netvision.net.il>
  *
- * $Id: packet-cpha.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-cpha.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -37,7 +37,7 @@
 #endif
 
 #include <epan/packet.h>
-#include "ipproto.h"
+#include <epan/ipproto.h>
 
 static int proto_cphap = -1;
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-daap.c ethereal-0.10.7/epan/dissectors/packet-daap.c
--- ethereal-0.10.6/epan/dissectors/packet-daap.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-daap.c	2004-10-20 17:35:01.000000000 -0500
@@ -0,0 +1,402 @@
+/* packet-daap.c
+ * Routines for Digital Audio Access Protocol dissection
+ * Copyright 2004, Kelly Byrd <kbyrd@memcpy.com>
+ *
+ * $Id: packet-daap.c 11805 2004-08-22 09:07:19Z jmayer $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include <epan/packet.h>
+#include <epan/dissectors/packet-http.h>
+
+#define TCP_PORT_DAAP 3689
+
+/* DAAP tags */
+/* Container tags */
+#define daap_mcon       0x6d636f6e
+#define daap_msrv       0x6d737276
+#define daap_mccr       0x6d636372
+#define daap_mdcl       0x6d64636c
+#define daap_mlog       0x6d6c6f67
+#define daap_mupd       0x6d757064
+#define daap_avdb       0x61766462
+#define daap_mlcl       0x6d6c636c
+#define daap_mlit       0x6d6c6974
+#define daap_mbcl       0x6d62636c
+#define daap_adbs       0x61646273
+#define daap_aply       0x61706c79
+#define daap_apso       0x6170736f
+#define daap_mudl       0x6d75646c
+#define daap_abro       0x6162726f
+#define daap_abal       0x6162616c
+#define daap_abcp       0x61626370
+#define daap_abgn       0x6162676e
+#define daap_prsv       0x70727376
+#define daap_arif       0x61726966
+/* String tags */
+#define daap_minm       0x6d696e6d
+#define daap_msts       0x6d737473
+#define daap_mcnm       0x6d636e6d
+#define daap_mcna       0x6d636e61
+#define daap_asal       0x6173616c
+#define daap_asar       0x61736172
+#define daap_ascm       0x6173636d
+#define daap_asfm       0x6173666d
+#define daap_aseq       0x61736571
+#define daap_asgn       0x6173676e
+#define daap_asdt       0x61736474
+#define daap_asul       0x6173756c
+/* uint64 tags */
+#define daap_mper       0x6d706572
+/* uint32 tags */
+#define daap_mstt       0x6d737474
+#define daap_musr       0x6d757372
+#define daap_miid       0x6d696964
+#define daap_mcti       0x6d637469
+#define daap_mpco       0x6d70636f
+#define daap_mimc       0x6d696d63
+#define daap_mrco       0x6d72636f
+#define daap_mtco       0x6d74636f
+#define daap_mstm       0x6d73746d
+#define daap_msdc       0x6d736463
+#define daap_mlid       0x6d6c6964
+#define daap_msur       0x6d737572
+#define daap_asda       0x61736461
+#define daap_asdm       0x6173646d
+#define daap_assr       0x61737372
+#define daap_assz       0x6173737a
+#define daap_asst       0x61737374
+#define daap_assp       0x61737370
+#define daap_astm       0x6173746d
+#define daap_aeNV       0x61654e56
+/* uint16 tags */
+#define daap_mcty       0x6d637479
+#define daap_asbt       0x61736274
+#define daap_asbr       0x61736272
+#define daap_asdc       0x61736463
+#define daap_asdn       0x6173646e
+#define daap_astc       0x61737463
+#define daap_astn       0x6173746e
+#define daap_asyr       0x61737972
+/* byte  tags */
+#define daap_mikd       0x6d696b64
+#define daap_msau       0x6d736175
+#define daap_msty       0x6d737479
+#define daap_asrv       0x61737276
+#define daap_asur       0x61737572
+#define daap_asdk       0x6173646b
+/* boolean  tags */
+#define daap_mslr       0x6d736c72
+#define daap_msal       0x6d73616c
+#define daap_msup       0x6d737570
+#define daap_mspi       0x6d737069
+#define daap_msex       0x6d736578
+#define daap_msbr       0x6d736272
+#define daap_msqy       0x6d737179
+#define daap_msix       0x6d736978
+#define daap_msrs       0x6d737273
+#define daap_asco       0x6173636f
+#define daap_asdb       0x61736462
+#define daap_abpl       0x6162706c
+#define daap_aeSP       0x61655350
+/* version (32-bit)*/
+#define daap_mpro       0x6d70726f
+#define daap_apro       0x6170726f
+
+
+/* Initialize the protocol and registered fields */
+static int proto_daap = -1;
+static int hf_daap_name = -1;
+static int hf_daap_size = -1;
+
+/* Initialize the subtree pointers */
+static gint ett_daap = -1;
+static gint ett_daap_sub = -1;
+
+/* Forward declarations */
+static int dissect_daap_one_tag(proto_tree *tree, tvbuff_t *tvb, int offset, int length);
+
+static void
+dissect_daap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+
+   proto_item *ti;
+   proto_tree *daap_tree;
+   int offset = 0;
+   gboolean is_request = (pinfo->destport == TCP_PORT_DAAP);
+   
+   
+   if (check_col(pinfo->cinfo, COL_PROTOCOL)) 
+      col_set_str(pinfo->cinfo, COL_PROTOCOL, "DAAP");
+   
+   
+   if (check_col(pinfo->cinfo, COL_INFO)) {
+      if (is_request) {
+	 col_add_str(pinfo->cinfo, COL_INFO, "DAAP Request");
+      } else {
+	 /* This is done in two functions on purpose. If the tvb_get_xxx()
+	  * functions fail, at least something will be in the info column
+	  */
+	 col_add_str(pinfo->cinfo, COL_INFO, "DAAP Response");
+	 col_append_fstr(pinfo->cinfo, COL_INFO, " [tag: %s, size: %d]",
+			 tvb_get_string(tvb, offset, 4), 
+			 tvb_get_ntohl(tvb, offset+4));
+      }
+   }
+
+   
+   
+   if (tree) {
+      ti = proto_tree_add_item(tree, proto_daap, tvb, 0, -1, FALSE);
+      daap_tree = proto_item_add_subtree(ti, ett_daap);     
+      dissect_daap_one_tag(daap_tree, tvb, offset, 0);
+   }
+}
+
+static int
+dissect_daap_one_tag(proto_tree *tree, tvbuff_t *tvb, int offset, int length)
+{
+   unsigned int tagname;
+   int tagsize;
+   int new_offset;
+   proto_item *ti = NULL;
+   proto_item *ti2 = NULL;
+   proto_tree *new_tree = NULL;
+
+   do {
+      if (!tvb_offset_exists(tvb, offset)) 
+	 break;
+
+      tagname = tvb_get_ntohl(tvb, offset);
+      tagsize = tvb_get_ntohl(tvb, offset+4);
+      ti = proto_tree_add_text(tree, tvb, offset, tagsize+8, 
+			       "Tag: %c%c%c%c, Size: %d", 
+			       tvb_get_guint8(tvb, offset),
+			       tvb_get_guint8(tvb, offset+1),
+			       tvb_get_guint8(tvb, offset+2),
+			       tvb_get_guint8(tvb, offset+3),
+			       tagsize);
+
+      ti2 = proto_tree_add_item(tree, hf_daap_name, tvb, offset, 4, FALSE);
+      PROTO_ITEM_SET_HIDDEN(ti2);
+      ti2 = proto_tree_add_item(tree, hf_daap_size, tvb, offset+4, 4, FALSE);
+      PROTO_ITEM_SET_HIDDEN(ti2);
+      offset += 8;
+      length -= 8;
+
+      switch (tagname) {
+      case daap_mcon:
+      case daap_msrv:
+      case daap_mccr:
+      case daap_mdcl:
+      case daap_mlog:
+      case daap_mupd:
+      case daap_avdb:
+      case daap_mlcl:
+      case daap_mlit:
+      case daap_mbcl:
+      case daap_adbs:
+      case daap_aply:
+      case daap_apso:
+      case daap_mudl:
+      case daap_abro:
+      case daap_abal:
+      case daap_abcp:
+      case daap_abgn:
+      case daap_prsv:
+      case daap_arif:
+	 /* Container tags */
+	 new_tree = proto_item_add_subtree(ti, ett_daap_sub);
+	 new_offset = dissect_daap_one_tag(new_tree, tvb, offset, 
+					   tagsize);
+	 break;
+      case daap_minm:
+      case daap_msts:
+      case daap_mcnm:
+      case daap_mcna:
+      case daap_asal:
+      case daap_asar:
+      case daap_ascm:
+      case daap_asfm:
+      case daap_aseq:
+      case daap_asgn:
+      case daap_asdt:
+      case daap_asul:
+	 /* Tags contain strings */
+	 proto_item_append_text(ti, ", Data: %s", 
+				tvb_get_string(tvb, offset, tagsize));
+	 break;
+      case daap_mper:
+	 /* Tags conain uint64 */
+	 proto_item_append_text(ti, ", Persistent Id: %" PRIu64, 
+				tvb_get_ntoh64(tvb, offset));
+	 break;
+      case daap_mstt:
+	 proto_item_append_text(ti, ", Status: %d", 
+				tvb_get_ntohl(tvb, offset));
+	 break;
+      case daap_musr:
+      case daap_msur:
+	 proto_item_append_text(ti, ", Revision: %d", 
+				tvb_get_ntohl(tvb, offset));
+	 break;
+      case daap_miid:
+      case daap_mcti:
+      case daap_mpco:
+      case daap_mlid:
+	 proto_item_append_text(ti, ", Id: %d", 
+				tvb_get_ntohl(tvb, offset));
+	 break;
+      case daap_mrco:
+      case daap_mtco:
+      case daap_mimc:
+      case daap_msdc:
+	 proto_item_append_text(ti, ", Count: %d", 
+				tvb_get_ntohl(tvb, offset));
+	 break;
+      case daap_mstm:
+	 proto_item_append_text(ti, ", Timeout: %d seconds", 
+				tvb_get_ntohl(tvb, offset));
+	 break;
+      case daap_asda:
+      case daap_asdm:
+      case daap_assr:
+      case daap_assz:
+      case daap_asst:
+      case daap_assp:
+      case daap_astm:
+      case daap_aeNV:
+	 /* Tags conain uint32 */
+	 proto_item_append_text(ti, ", Data: %d", 
+				tvb_get_ntohl(tvb, offset));
+	 break;
+
+      case daap_mcty:
+      case daap_asbt:
+      case daap_asbr:
+      case daap_asdc:
+      case daap_asdn:
+      case daap_astc:
+      case daap_astn:
+      case daap_asyr:
+	 /* Tags conain uint16 */
+	 proto_item_append_text(ti, ", Data: %d", 
+				tvb_get_ntohs(tvb, offset));
+	 break;
+
+      case daap_mikd:
+      case daap_msau:
+      case daap_msty:
+      case daap_asrv:
+      case daap_asur:
+      case daap_asdk:
+	 /* Tags conain uint8 */
+	 proto_item_append_text(ti, ", Data: %d", 
+				tvb_get_guint8(tvb, offset));
+
+	 break;
+
+      case daap_mslr:
+      case daap_msal:
+      case daap_msup:
+      case daap_mspi:
+      case daap_msex:
+      case daap_msbr:
+      case daap_msqy:
+      case daap_msix:
+      case daap_msrs:
+      case daap_asco:
+      case daap_asdb:
+      case daap_abpl:
+      case daap_aeSP:
+	 /* Tags ARE boolean. Data is (uint8), but it seems
+	  * the value is always zero. So, if the tag is present
+	  * the "bool" is true. 
+	  */
+	 proto_item_append_text(ti, ", Data: True");
+	 break;
+
+      case daap_mpro:
+      case daap_apro:
+	 /* Tags conain version (uint32) */
+	 proto_item_append_text(ti, ", Version: %d.%d.%d.%d",
+				tvb_get_guint8(tvb, offset),
+				tvb_get_guint8(tvb, offset+1),
+				tvb_get_guint8(tvb, offset+2),
+				tvb_get_guint8(tvb, offset+3));
+	 break;
+
+      default: 
+	 break;
+      }
+      offset += tagsize;
+      length -= tagsize;
+   } while (length > 0);
+   return offset;
+}
+
+
+/* Register the protocol with Ethereal */
+void
+proto_register_daap(void)
+{        
+   
+   static hf_register_info hf[] = {
+      { &hf_daap_name,
+	{ "Name", "daap.name", FT_STRING, BASE_NONE, NULL, 0x0, 
+	  "Tag Name", HFILL}
+      },
+      { &hf_daap_size,
+	{ "Size", "daap.size", FT_UINT32, BASE_DEC, NULL, 0x0, 
+	  "Tag Size", HFILL }
+      }
+   };
+
+   static gint *ett[] = {
+      &ett_daap,
+      &ett_daap_sub,
+   };
+
+   proto_daap = proto_register_protocol("Digital Audio Access Protocol",
+					"DAAP", "daap");
+
+   proto_register_field_array(proto_daap, hf, array_length(hf));
+   proto_register_subtree_array(ett, array_length(ett));
+}
+
+
+/* If this dissector uses sub-dissector registration add a registration routine.
+   This format is required because a script is used to find these routines and
+   create the code that calls these routines.
+*/
+void
+proto_reg_handoff_daap(void)
+{
+    dissector_handle_t daap_handle;
+
+    daap_handle = create_dissector_handle(dissect_daap, proto_daap);
+    http_dissector_add(TCP_PORT_DAAP, daap_handle);
+}
diff -urN ethereal-0.10.6/epan/dissectors/packet-dcerpc-epm.c ethereal-0.10.7/epan/dissectors/packet-dcerpc-epm.c
--- ethereal-0.10.6/epan/dissectors/packet-dcerpc-epm.c	2004-08-12 17:42:27.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-dcerpc-epm.c	2004-10-20 17:34:58.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for dcerpc endpoint mapper dissection
  * Copyright 2001, Todd Sabin <tas@webspan.net>
  *
- * $Id: packet-dcerpc-epm.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-dcerpc-epm.c 12023 2004-09-17 08:10:12Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -393,7 +393,7 @@
             break;
 
         case PROTO_ID_IP: /* this one is always big endian */
-            proto_tree_add_item(tr, hf_epm_proto_ip, tvb, offset, 4, TRUE);
+            proto_tree_add_item(tr, hf_epm_proto_ip, tvb, offset, 4, FALSE);
             proto_item_append_text(tr, "IP:%s", ip_to_str(tvb_get_ptr(tvb, offset, 4)));
             break;
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-dcerpc-iremunkn.c ethereal-0.10.7/epan/dissectors/packet-dcerpc-iremunkn.c
--- ethereal-0.10.6/epan/dissectors/packet-dcerpc-iremunkn.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-dcerpc-iremunkn.c	2004-10-20 17:34:43.000000000 -0500
@@ -0,0 +1,78 @@
+/* packet-dcerpc-iremunkn.c
+ * Routines for the IRemUnknown interface
+ * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
+ *
+ * $Id: packet-dcerpc-iremunkn.c 11736 2004-08-13 09:47:23Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include <glib.h>
+#include <epan/packet.h>
+#include "packet-dcerpc.h"
+#include "packet-dcerpc-dcom.h"
+#include "packet-smb-common.h"
+
+static int proto_IRemUnknown = -1;
+
+static int hf_opnum = -1;
+
+static gint ett_IRemUnknown = -1;
+
+static e_uuid_t uuid_IRemUnknown = { 0x00000131, 0x0000, 0x0000, { 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 } };
+static guint16  ver_IRemUnknown = 0;
+
+static dcerpc_sub_dissector IRemUnknown_dissectors[] = {
+	{ 0, "QueryInterface", NULL, NULL },
+	{ 1, "AddRef", NULL, NULL },
+	{ 2, "Release", NULL, NULL },
+    { 3, "RemQueryInterface", NULL, NULL },
+    { 4, "RemAddRef", NULL, NULL },
+    { 5, "RemRelease", NULL, NULL },
+    { 0, NULL, NULL, NULL },
+};
+
+void
+proto_register_IRemUnknown (void)
+{
+	static hf_register_info hf[] = {
+		{ &hf_opnum,
+		  { "Operation", "IRemUnknown.opnum", FT_UINT16, BASE_DEC,
+		    NULL, 0x0, "", HFILL }},
+	};
+	static gint *ett[] = {
+		&ett_IRemUnknown
+	};
+	proto_IRemUnknown = proto_register_protocol ("IRemUnknown IRemUnknown Resolver", "IRemUnknown", "IRemUnknown");
+	proto_register_field_array (proto_IRemUnknown, hf, array_length (hf));
+	proto_register_subtree_array (ett, array_length (ett));
+}
+
+void
+proto_reg_handoff_IRemUnknown (void)
+{
+	/* Register the protocol as dcerpc */
+	dcerpc_init_uuid (proto_IRemUnknown, ett_IRemUnknown, &uuid_IRemUnknown, ver_IRemUnknown, IRemUnknown_dissectors, hf_opnum);
+}
diff -urN ethereal-0.10.6/epan/dissectors/packet-dcerpc-iremunkn2.c ethereal-0.10.7/epan/dissectors/packet-dcerpc-iremunkn2.c
--- ethereal-0.10.6/epan/dissectors/packet-dcerpc-iremunkn2.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-dcerpc-iremunkn2.c	2004-10-20 17:35:01.000000000 -0500
@@ -0,0 +1,79 @@
+/* packet-dcerpc-iremunkn2.c
+ * Routines for the IRemUnknown2 interface
+ * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
+ *
+ * $Id: packet-dcerpc-iremunkn2.c 11736 2004-08-13 09:47:23Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include <glib.h>
+#include <epan/packet.h>
+#include "packet-dcerpc.h"
+#include "packet-dcerpc-dcom.h"
+#include "packet-smb-common.h"
+
+static int proto_IRemUnknown2 = -1;
+
+static int hf_opnum = -1;
+
+static gint ett_IRemUnknown2 = -1;
+
+static e_uuid_t uuid_IRemUnknown2 = { 0x00000143, 0x0000, 0x0000, { 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 } };
+static guint16  ver_IRemUnknown2 = 0;
+
+static dcerpc_sub_dissector IRemUnknown2_dissectors[] = {
+	{ 0, "QueryInterface", NULL, NULL },
+	{ 1, "AddRef", NULL, NULL },
+	{ 2, "Release", NULL, NULL },
+	{ 3, "RemQueryInterface", NULL, NULL },
+	{ 4, "RemAddRef", NULL, NULL },
+	{ 5, "RemRelease", NULL, NULL },
+    { 6, "RemQueryInterface2", NULL, NULL },
+    { 0, NULL, NULL, NULL },
+};
+
+void
+proto_register_IRemUnknown2 (void)
+{
+	static hf_register_info hf[] = {
+		{ &hf_opnum,
+		  { "Operation", "IRemUnknown2.opnum", FT_UINT16, BASE_DEC,
+		    NULL, 0x0, "", HFILL }},
+	};
+	static gint *ett[] = {
+		&ett_IRemUnknown2
+	};
+	proto_IRemUnknown2 = proto_register_protocol ("IRemUnknown2 IRemUnknown2 Resolver", "IRemUnknown2", "IRemUnknown2");
+	proto_register_field_array (proto_IRemUnknown2, hf, array_length (hf));
+	proto_register_subtree_array (ett, array_length (ett));
+}
+
+void
+proto_reg_handoff_IRemUnknown2 (void)
+{
+	/* Register the protocol as dcerpc */
+	dcerpc_init_uuid (proto_IRemUnknown2, ett_IRemUnknown2, &uuid_IRemUnknown2, ver_IRemUnknown2, IRemUnknown2_dissectors, hf_opnum);
+}
diff -urN ethereal-0.10.6/epan/dissectors/packet-dcerpc-mapi.c ethereal-0.10.7/epan/dissectors/packet-dcerpc-mapi.c
--- ethereal-0.10.6/epan/dissectors/packet-dcerpc-mapi.c	2004-08-12 17:42:02.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-dcerpc-mapi.c	2004-10-20 17:34:41.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for MS Exchange MAPI
  * Copyright 2002, Ronnie Sahlberg
  *
- * $Id: packet-dcerpc-mapi.c 11592 2004-08-03 02:28:49Z guy $
+ * $Id: packet-dcerpc-mapi.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -33,7 +33,7 @@
 #include "packet-dcerpc-nt.h"
 #include "packet-dcerpc-mapi.h"
 #include "packet-windows-common.h"	/* for "NT_errors[]" */
-#include "prefs.h"
+#include <epan/prefs.h>
 
 static int proto_dcerpc_mapi = -1;
 static int hf_mapi_opnum = -1;
@@ -72,80 +72,18 @@
 
 /* decryption */
 static gboolean mapi_decrypt = FALSE;
-static GMemChunk *mapi_decrypted_data_chunk = NULL;
-static int mapi_decrypted_data_init_count = 200;
-static GHashTable *mapi_decrypted_table = NULL;
-typedef struct {
-	guint32 frame;
-	guint32 callid;
-	tvbuff_t *tvb;
-	unsigned char *data;
-} mapi_decrypted_data_t;
-
-static gboolean
-free_all_decrypted(gpointer key_arg, gpointer value _U_, gpointer user_data _U_)
-{
-	mapi_decrypted_data_t *mdd=(mapi_decrypted_data_t *)key_arg;
-
-	if(mdd->tvb){
-		tvb_free(mdd->tvb);
-		mdd->tvb=NULL;
-	}
-	if(mdd->data){
-		g_free(mdd->data);
-		mdd->data=NULL;
-	}
-	return TRUE;
-}
-static guint
-mapi_decrypt_hash(gconstpointer k)
-{
-	const mapi_decrypted_data_t *mdd=(const mapi_decrypted_data_t *)k;
-	return mdd->frame;
-}
-static gint
-mapi_decrypt_equal(gconstpointer k1, gconstpointer k2)
-{
-	const mapi_decrypted_data_t *mdd1=(const mapi_decrypted_data_t *)k1;
-	const mapi_decrypted_data_t *mdd2=(const mapi_decrypted_data_t *)k2;
-
-	return	( (mdd1->frame==mdd2->frame)
-		&&(mdd1->callid==mdd2->callid) );
-}
-static void
-mapi_decrypt_init(void)
-{
-	if(mapi_decrypted_table){
-		g_hash_table_foreach_remove(mapi_decrypted_table,
-			free_all_decrypted, NULL);
-	} else {
-		mapi_decrypted_table=g_hash_table_new(mapi_decrypt_hash,
-			mapi_decrypt_equal);
-	}
-
-	if(mapi_decrypted_data_chunk){
-		g_mem_chunk_destroy(mapi_decrypted_data_chunk);
-		mapi_decrypted_data_chunk=NULL;
-	}
-
-	if(mapi_decrypt){
-		mapi_decrypted_data_chunk=g_mem_chunk_new("mapi_decrypt_chunk",
-			sizeof(mapi_decrypted_data_t),
-			mapi_decrypted_data_init_count*sizeof(mapi_decrypted_data_t),
-			G_ALLOC_ONLY);
-	}
-}
-
 
 static int
 mapi_decrypt_pdu(tvbuff_t *tvb, int offset,
 	packet_info *pinfo, proto_tree *tree, guint8 *drep)
 {
 	dcerpc_info *di;
-	mapi_decrypted_data_t *mmd=NULL;
-	guint32 len;
-	const unsigned char *ptr;
-	guint32 i;
+	guint8 *decrypted_data;
+	tvbuff_t *decrypted_tvb;
+	guint32 length;
+	gint len, reported_len;
+	const guint8 *ptr;
+	gint i;
 	guint16 pdu_len;
 	proto_item *it = NULL;
 	proto_tree *tr = NULL;
@@ -157,33 +95,38 @@
 
 	offset=dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_mapi_decrypted_data_maxlen, NULL);
 	offset=dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_mapi_decrypted_data_offset, NULL);
-	offset=dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_mapi_decrypted_data_len, &len);
-
-	if(len>(guint32)tvb_length_remaining(tvb, offset)){
-		len=tvb_length_remaining(tvb, offset);
-	}
+	offset=dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_mapi_decrypted_data_len, &length);
 
-	if(!pinfo->fd->flags.visited){
-		ptr=(const unsigned char *)tvb_get_ptr(tvb, offset, len);
-		mmd=g_mem_chunk_alloc(mapi_decrypted_data_chunk);
-		mmd->callid=di->call_id;
-		mmd->frame=pinfo->fd->num;
-		mmd->data=g_malloc(len);
-		for(i=0;i<len;i++){
-			mmd->data[i]=ptr[i]^0xa5;
-		}
-		mmd->tvb=tvb_new_real_data(mmd->data, len, len);
-		g_hash_table_insert(mapi_decrypted_table, mmd, mmd);
-	}
-
-	if(!mmd){
-		mapi_decrypted_data_t mmd_key;
-		mmd_key.callid=di->call_id;
-		mmd_key.frame=pinfo->fd->num;
-		mmd=g_hash_table_lookup(mapi_decrypted_table, &mmd_key);
-	}
+	len = tvb_length_remaining(tvb, offset);
+	reported_len = tvb_reported_length_remaining(tvb, offset);
+	if((guint32)reported_len > length)
+		reported_len = length;
+	if(len > reported_len)
+		len = reported_len;
+
+	ptr=tvb_get_ptr(tvb, offset, len);
+	decrypted_data=g_malloc(len);
+	for(i=0;i<len;i++){
+		/*
+		 * Now *that's* secure encryption!
+		 */
+		decrypted_data[i]=ptr[i]^0xa5;
+	}
+
+	/* Allocate a new tvbuff, referring to the decrypted data. */
+	decrypted_tvb=tvb_new_real_data(decrypted_data, len, reported_len);
+
+	/* Arrange that the allocated packet data copy be freed when the
+	   tvbuff is freed. */
+	tvb_set_free_cb(decrypted_tvb, g_free);
+
+	/* Add the tvbuff to the list of tvbuffs to which the tvbuff we
+	   were handed refers, so it'll get cleaned up when that tvbuff
+	   is cleaned up. */
+	tvb_set_child_real_data_tvbuff(tvb, decrypted_tvb);
 
-	add_new_data_source(pinfo, mmd->tvb, "Decrypted MAPI");
+	/* Add the decrypted data to the data source list. */
+	add_new_data_source(pinfo, decrypted_tvb, "Decrypted MAPI");
 
 	/* decrypted PDU */
 	/* All from 10 minutes eyeballing. This may be wrong.
@@ -214,18 +157,18 @@
 	   special meaning?
 	   More work needs to be done in this area.
 	*/
-	it=proto_tree_add_text(tree, mmd->tvb, 0, len, "Decrypted MAPI PDU");
+	it=proto_tree_add_text(tree, decrypted_tvb, 0, len, "Decrypted MAPI PDU");
 	tr=proto_item_add_subtree(it, ett_mapi_decrypted_pdu);
 
-	pdu_len=tvb_get_letohs(mmd->tvb, 0);
-	proto_tree_add_uint(tr, hf_mapi_pdu_len, mmd->tvb, 0, 2, pdu_len);
+	pdu_len=tvb_get_letohs(decrypted_tvb, 0);
+	proto_tree_add_uint(tr, hf_mapi_pdu_len, decrypted_tvb, 0, 2, pdu_len);
 
 	/*XXX call dissector here */
-	proto_tree_add_item(tr, hf_mapi_decrypted_data, mmd->tvb, 2, pdu_len-2, FALSE);
+	proto_tree_add_item(tr, hf_mapi_decrypted_data, decrypted_tvb, 2, pdu_len-2, FALSE);
 
-	proto_tree_add_item(tr, hf_mapi_pdu_trailer, mmd->tvb, pdu_len, 4, FALSE);
-	if(len>((guint32)pdu_len+4)){
-		proto_tree_add_item(tr, hf_mapi_pdu_extra_trailer, mmd->tvb, pdu_len+4, len-(pdu_len+4), FALSE);
+	proto_tree_add_item(tr, hf_mapi_pdu_trailer, decrypted_tvb, pdu_len, 4, FALSE);
+	if(len>((gint)pdu_len+4)){
+		proto_tree_add_item(tr, hf_mapi_pdu_extra_trailer, decrypted_tvb, pdu_len+4, len-(pdu_len+4), FALSE);
 	}
 
 
@@ -462,7 +405,6 @@
 		"Decrypt MAPI PDUs",
 		"Whether the dissector should decrypt MAPI PDUs",
 		&mapi_decrypt);
-	register_init_routine(mapi_decrypt_init);
 }
 
 void
diff -urN ethereal-0.10.6/epan/dissectors/packet-dcerpc-messenger.c ethereal-0.10.7/epan/dissectors/packet-dcerpc-messenger.c
--- ethereal-0.10.6/epan/dissectors/packet-dcerpc-messenger.c	2004-08-12 17:41:57.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-dcerpc-messenger.c	2004-10-20 17:34:37.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for SMB \PIPE\msgsvc packet disassembly
  * Copyright 2003 Ronnie Sahlberg
  *
- * $Id: packet-dcerpc-messenger.c 11592 2004-08-03 02:28:49Z guy $
+ * $Id: packet-dcerpc-messenger.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -28,7 +28,7 @@
 #endif
 
 #include <glib.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-dcerpc.h"
 #include "packet-dcerpc-nt.h"
 #include "packet-windows-common.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-dcerpc-oxid.c ethereal-0.10.7/epan/dissectors/packet-dcerpc-oxid.c
--- ethereal-0.10.6/epan/dissectors/packet-dcerpc-oxid.c	2004-08-12 17:42:10.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-dcerpc-oxid.c	2004-10-20 17:34:48.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for DCOM OXID Resolver
  * Copyright 2001, Todd Sabin <tas@webspan.net>
  *
- * $Id: packet-dcerpc-oxid.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-dcerpc-oxid.c 11736 2004-08-13 09:47:23Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -133,6 +133,8 @@
 		case 0x8:
 			return "NCADG_IP_UDP";
 			break;
+		case 0x9:
+			return "NCACN_IP";
 		case 0xC:
 			return "NCACN_SPX";
 			break;
@@ -269,7 +271,7 @@
 	static gint *ett[] = {
 		&ett_oxid
 	};
-	proto_oxid = proto_register_protocol ("DCOM OXID Resolver", "OXID", "oxid");
+	proto_oxid = proto_register_protocol ("DCOM OXID Resolver", "IOXIDResolver", "oxid");
 	proto_register_field_array (proto_oxid, hf, array_length (hf));
 	proto_register_subtree_array (ett, array_length (ett));
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-dcerpc-samr.c ethereal-0.10.7/epan/dissectors/packet-dcerpc-samr.c
--- ethereal-0.10.6/epan/dissectors/packet-dcerpc-samr.c	2004-08-12 17:42:10.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-dcerpc-samr.c	2004-10-20 17:34:48.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 2001,2003 Tim Potter <tpot@samba.org>
  *   2002 Added all command dissectors  Ronnie Sahlberg
  *
- * $Id: packet-dcerpc-samr.c 11592 2004-08-03 02:28:49Z guy $
+ * $Id: packet-dcerpc-samr.c 12116 2004-09-27 23:29:22Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -31,14 +31,14 @@
 #include <glib.h>
 #include <epan/packet.h>
 #include <string.h>
-#include "prefs.h"
+#include <epan/prefs.h>
+#include <epan/crypt-md4.h>
+#include <epan/crypt-rc4.h>
 #include "packet-dcerpc.h"
 #include "packet-dcerpc-nt.h"
 #include "packet-dcerpc-samr.h"
 #include "packet-windows-common.h"
 #include "packet-smb-common.h"
-#include "crypt-md4.h"
-#include "crypt-rc4.h"
 
 #ifdef NEED_SNPRINTF_H
 # include "snprintf.h"
@@ -1742,25 +1742,77 @@
     }
 }
 
-static int
-samr_dissect_NT_PASSCHANGE_BLOCK(tvbuff_t *tvb, int offset,
-				 packet_info *pinfo _U_, proto_tree *tree,
-				 guint8 *drep _U_)
+tvbuff_t *
+decrypt_tvb_using_nt_password(packet_info *pinfo, tvbuff_t *tvb, int offset, int len)
 {
-	dcerpc_info *di;
+	rc4_state_struct rc4_state;
+	guint i;
 	size_t password_len;
 	unsigned char *password_unicode;
 	size_t password_len_unicode;
 	unsigned char password_md4_hash[16];
 	guint8 *block;
 	tvbuff_t *decr_tvb; /* Used to store decrypted buffer */
-	rc4_state_struct rc4_state;
-	guint i;
-	
+
+	if (nt_password[0] == '\0') {
+		/* We dont have an NT password, so we cant decrypt the 
+		   blob. */
+		return NULL;
+	}
+
 	/* This implements the the algorithm discussed in lkcl -"DCE/RPC 
 	   over SMB" page 257.  Note that this code does not properly support
 	   Unicode. */
 
+	/* Convert the password provided in the Ethereal GUI to Unicode 
+	   (UCS-2).  Since the input is always ASCII, we can just fake
+	   it and pad every other byte with a NUL.  If we ever support
+	   UTF-8 in the GUI, we would have to perform a real UTF-8 to
+	   UCS-2 conversion */
+	password_len = strlen(nt_password);
+	password_len_unicode = password_len*2;
+	password_unicode = g_malloc(password_len_unicode);
+	for (i = 0; i < password_len; i++) {
+		password_unicode[i*2] = nt_password[i];
+		password_unicode[i*2+1] = 0;
+	}
+
+	/* Run MD4 against the resulting Unicode password.  This will
+	   be used to perform RC4 decryption on the blob.  
+	   Then free the Unicode password, as we're done
+	   with it. */
+	crypt_md4(password_md4_hash, password_unicode,
+	    password_len_unicode);
+	g_free(password_unicode);
+	
+	/* Copy the block into a temporary buffer so we can decrypt
+	   it */
+	block = g_malloc(len);
+	memset(block, 0, len);
+	tvb_memcpy(tvb, block, offset, len);
+
+	/* RC4 decrypt the block with the old NT password hash */
+	crypt_rc4_init(&rc4_state, password_md4_hash, 16);
+	crypt_rc4(&rc4_state, block, len);
+
+	/* Show the decrypted buffer in a new window */
+	decr_tvb = tvb_new_real_data(block, len, len);
+	tvb_set_free_cb(decr_tvb, g_free);
+	tvb_set_child_real_data_tvbuff(tvb, decr_tvb);
+	add_new_data_source(pinfo, decr_tvb,
+	    "Decrypted NT Blob");
+
+	return decr_tvb;
+}
+
+static int
+samr_dissect_NT_PASSCHANGE_BLOCK(tvbuff_t *tvb, int offset,
+				 packet_info *pinfo, proto_tree *tree,
+				 guint8 *drep _U_)
+{
+	dcerpc_info *di;
+	tvbuff_t *decr_tvb; /* Used to store decrypted buffer */
+	
 	di=pinfo->private_data;
 	if(di->conformant_run){
 		/* just a run to handle conformant arrays, no scalars to dissect */
@@ -1771,53 +1823,14 @@
 	proto_tree_add_text(tree, tvb, offset, NT_BLOCK_SIZE,
 	    "Encrypted NT Password Block");
 
-	if (nt_password[0] != '\0') {
-		/* We have an NT password, so we can decrypt the password
-		   change block. */
-
-		/* Convert the password provided in the Ethereal GUI to Unicode 
-		   (UCS-2).  Since the input is always ASCII, we can just fake
-		   it and pad every other byte with a NUL.  If we ever support
-		   UTF-8 in the GUI, we would have to perform a real UTF-8 to
-		   UCS-2 conversion */
-		password_len = strlen(nt_password);
-		password_len_unicode = password_len*2;
-		password_unicode = g_malloc(password_len_unicode);
-		for (i = 0; i < password_len; i++) {
-			password_unicode[i*2] = nt_password[i];
-			password_unicode[i*2+1] = 0;
-		}
-
-		/* Run MD4 against the resulting Unicode password.  This will
-		   be used to perform RC4 decryption on the password change
-		   block.  Then free the Unicode password, as we're done
-		   with it. */
-		crypt_md4(password_md4_hash, password_unicode,
-		    password_len_unicode);
-		g_free(password_unicode);
-	
-		/* Copy the block into a temporary buffer so we can decrypt
-		   it */
-		block = g_malloc(NT_BLOCK_SIZE);
-		memset(block, 0, NT_BLOCK_SIZE);
-		tvb_memcpy(tvb, block, offset, NT_BLOCK_SIZE);
-	
-		/* RC4 decrypt the block with the old NT password hash */
-		crypt_rc4_init(&rc4_state, password_md4_hash, 16);
-		crypt_rc4(&rc4_state, block, NT_BLOCK_SIZE);
-
-		/* Show the decrypted buffer in a new window */
-		decr_tvb = tvb_new_real_data(block, NT_BLOCK_SIZE,
-		    NT_BLOCK_SIZE);
-		tvb_set_free_cb(decr_tvb, g_free);
-		tvb_set_child_real_data_tvbuff(tvb, decr_tvb);
-		add_new_data_source(pinfo, decr_tvb,
-		    "Decrypted NT Password Block");
+	decr_tvb=decrypt_tvb_using_nt_password(pinfo, tvb, offset, NT_BLOCK_SIZE);
 
+	if(decr_tvb){
 		/* Dissect the decrypted block */
 		samr_dissect_decrypted_NT_PASSCHANGE_BLOCK(decr_tvb, 0, pinfo,
 							   tree, drep);
 	}
+
 	offset += NT_BLOCK_SIZE;
 	return offset;
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-dcerpc-samr.h ethereal-0.10.7/epan/dissectors/packet-dcerpc-samr.h
--- ethereal-0.10.6/epan/dissectors/packet-dcerpc-samr.h	2004-08-12 17:42:10.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-dcerpc-samr.h	2004-10-20 17:34:49.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for SMB \PIPE\samr packet disassembly
  * Copyright 2001, Tim Potter <tpot@samba.org>
  *
- * $Id: packet-dcerpc-samr.h 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-dcerpc-samr.h 11857 2004-08-31 08:30:58Z sahlberg $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -142,4 +142,6 @@
 #define GROUP_ACCESS_REMOVE_MEMBER   0x00000008
 #define GROUP_ACCESS_GET_MEMBERS     0x00000010
 
+tvbuff_t *decrypt_tvb_using_nt_password(packet_info *pinfo, tvbuff_t *tvb, int offset, int len);
+
 #endif /* packet-dcerpc-samr.h */
diff -urN ethereal-0.10.6/epan/dissectors/packet-dcerpc-sysact.c ethereal-0.10.7/epan/dissectors/packet-dcerpc-sysact.c
--- ethereal-0.10.6/epan/dissectors/packet-dcerpc-sysact.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-dcerpc-sysact.c	2004-10-20 17:35:02.000000000 -0500
@@ -0,0 +1,73 @@
+/* packet-dcerpc-sysact.c
+ * Routines for the ISystemActivator interface
+ * Copyright 2004, Jelmer Vernooij <jelmer@samba.org>
+ *
+ * $Id: packet-dcerpc-sysact.c 11736 2004-08-13 09:47:23Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include <glib.h>
+#include <epan/packet.h>
+#include "packet-dcerpc.h"
+#include "packet-dcerpc-dcom.h"
+#include "packet-smb-common.h"
+
+static int proto_ISystemActivator = -1;
+
+static int hf_opnum = -1;
+
+static gint ett_ISystemActivator = -1;
+
+static e_uuid_t uuid_ISystemActivator = { 0x000001a0, 0x0000, 0x0000, { 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 } };
+static guint16  ver_ISystemActivator = 0;
+
+static dcerpc_sub_dissector ISystemActivator_dissectors[] = {
+    { 0, "RemQueryInterface2", NULL, NULL },
+    { 0, NULL, NULL, NULL },
+};
+
+void
+proto_register_ISystemActivator (void)
+{
+	static hf_register_info hf[] = {
+		{ &hf_opnum,
+		  { "Operation", "ISystemActivator.opnum", FT_UINT16, BASE_DEC,
+		    NULL, 0x0, "", HFILL }},
+	};
+	static gint *ett[] = {
+		&ett_ISystemActivator
+	};
+	proto_ISystemActivator = proto_register_protocol ("ISystemActivator ISystemActivator Resolver", "ISystemActivator", "ISystemActivator");
+	proto_register_field_array (proto_ISystemActivator, hf, array_length (hf));
+	proto_register_subtree_array (ett, array_length (ett));
+}
+
+void
+proto_reg_handoff_ISystemActivator (void)
+{
+	/* Register the protocol as dcerpc */
+	dcerpc_init_uuid (proto_ISystemActivator, ett_ISystemActivator, &uuid_ISystemActivator, ver_ISystemActivator, ISystemActivator_dissectors, hf_opnum);
+}
diff -urN ethereal-0.10.6/epan/dissectors/packet-dcerpc.c ethereal-0.10.7/epan/dissectors/packet-dcerpc.c
--- ethereal-0.10.6/epan/dissectors/packet-dcerpc.c	2004-08-12 17:42:26.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-dcerpc.c	2004-10-20 17:34:56.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 2001, Todd Sabin <tas@webspan.net>
  * Copyright 2003, Tim Potter <tpot@samba.org>
  *
- * $Id: packet-dcerpc.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-dcerpc.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -35,9 +35,9 @@
 #include <epan/packet.h>
 #include <epan/dissectors/packet-dcerpc.h>
 #include <epan/conversation.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "reassemble.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include <epan/dissectors/packet-frame.h>
 #include <epan/dissectors/packet-dcerpc-nt.h>
 
@@ -282,6 +282,7 @@
 /* we need to keep track of what transport were used, ie what handle we came
  * in through so we know what kind of pinfo->private_data was passed to us.
  */
+/* Value of -1 is reserved for "not DCE packet" in packet_info.dcetransporttype. */
 #define DCE_TRANSPORT_UNKNOWN		0
 #define DCE_CN_TRANSPORT_SMBPIPE	1
 
@@ -432,9 +433,10 @@
 	"fragments"
 };
 
+/* list of hooks to be called when init_protocols is done */
+GHookList dcerpc_hooks_init_protos;
 
-
-#ifdef WIN32
+#ifdef _WIN32
 int ResolveWin32UUID(e_uuid_t if_id, char *UUID_NAME, int UUID_NAME_MAX_LEN)
 {
 	char REG_UUID_NAME[MAX_PATH];
@@ -1854,7 +1856,7 @@
     tvbuff_t *volatile stub_tvb;
     volatile guint auth_pad_len;
     volatile int auth_pad_offset;
-#ifdef WIN32
+#ifdef _WIN32
     char UUID_NAME[MAX_PATH];
 #endif
 
@@ -1872,7 +1874,7 @@
 	proto_tree_add_boolean_hidden(dcerpc_tree, hf_dcerpc_unknown_if_id,
 					  tvb, offset, 0, TRUE);
 	if (check_col (pinfo->cinfo, COL_INFO)) {
-#ifdef WIN32
+#ifdef _WIN32
 		if(ResolveWin32UUID(info->call_data->uuid, UUID_NAME, MAX_PATH))
 			col_append_fstr (pinfo->cinfo, COL_INFO, " [%s] UUID: %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x rpcver: %u",
 				UUID_NAME, info->call_data->uuid.Data1, info->call_data->uuid.Data2, info->call_data->uuid.Data3, info->call_data->uuid.Data4[0],
@@ -2201,12 +2203,12 @@
  * key as DCERPC over SMB allows several pipes over the same TCP/IP
  * socket. 
  * We pass this function the transport type here to make sure we only look
- * at this function iff it came across an SMB pipe.
+ * at this function if it came across an SMB pipe.
  * Other transports might need to mix in their own extra multiplexing data
  * as well in the future.
  */
 
-static guint16 get_transport_salt (packet_info *pinfo, int transport_type)
+guint16 dcerpc_get_transport_salt (packet_info *pinfo, int transport_type)
 {
     dcerpc_private_info *priv = (dcerpc_private_info *)pinfo->private_data;
 
@@ -2246,7 +2248,7 @@
     char uuid_str[DCERPC_UUID_STR_LEN]; 
     int uuid_str_len;
     dcerpc_auth_info auth_info;
-#ifdef WIN32
+#ifdef _WIN32
     char UUID_NAME[MAX_PATH];
 #endif
 
@@ -2271,6 +2273,12 @@
       offset = dissect_dcerpc_uint16 (tvb, offset, pinfo, NULL, hdr->drep,
                                       hf_dcerpc_cn_ctx_id, &ctx_id);
 
+      /* save context ID for use with dcerpc_add_conv_to_bind_table() */
+      /* (if we have multiple contexts, this might cause "decode as"
+       *  to behave unpredictably) */
+      pinfo->dcectxid = ctx_id;
+      pinfo->dcetransporttype = transport_type;
+
       if (dcerpc_tree) {
 	      proto_item *ctx_item;
 
@@ -2299,7 +2307,7 @@
 
 	  if (uuid_str_len >= DCERPC_UUID_STR_LEN)
 		  memset(uuid_str, 0, DCERPC_UUID_STR_LEN);
-#ifdef WIN32
+#ifdef _WIN32
 	  if(ResolveWin32UUID(if_id, UUID_NAME, MAX_PATH))
 		  iface_item = proto_tree_add_string_format (ctx_tree, hf_dcerpc_cn_bind_if_id, tvb,
                                         offset, 16, uuid_str, "Interface [%s] UUID: %s", UUID_NAME, uuid_str);
@@ -2331,6 +2339,7 @@
                                      pinfo->srcport, pinfo->destport, 0);
         }
 
+
 	/* if this is the first time we see this packet, we need to
 	   update the dcerpc_binds table so that any later calls can
 	   match to the interface.
@@ -2343,7 +2352,7 @@
 	        key = g_mem_chunk_alloc (dcerpc_bind_key_chunk);
         	key->conv = conv;
         	key->ctx_id = ctx_id;
-        	key->smb_fid = get_transport_salt(pinfo, transport_type);
+        	key->smb_fid = dcerpc_get_transport_salt(pinfo, transport_type);
 
         	value = g_mem_chunk_alloc (dcerpc_bind_value_chunk);
         	value->uuid = if_id;
@@ -2371,7 +2380,7 @@
 	  if ((value = g_hash_table_lookup(dcerpc_uuids, &key)))
 		  col_append_fstr(pinfo->cinfo, COL_INFO, " UUID: %s", value->name);
 	  else
-#ifdef WIN32
+#ifdef _WIN32
 		if(ResolveWin32UUID(if_id, UUID_NAME, MAX_PATH))
 			col_append_fstr(pinfo->cinfo, COL_INFO, " [%s] UUID: %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x ver %u.%u",
                            UUID_NAME, if_id.Data1, if_id.Data2, if_id.Data3,
@@ -2594,6 +2603,7 @@
                         dcerpc_auth_info *auth_info, guint32 alloc_hint,
                         guint32 frame)
 {
+    gint length, reported_length;
     gboolean save_fragmented;
     fragment_data *fd_head=NULL;
     guint32 tot_len;
@@ -2602,10 +2612,18 @@
 
     save_fragmented = pinfo->fragmented;
 
-    payload_tvb = tvb_new_subset(
-	    tvb, offset, tvb_length_remaining(tvb, offset) - 
-	    auth_info->auth_size, tvb_length_remaining(tvb, offset) - 
-	    auth_info->auth_size);    
+    length = tvb_length_remaining(tvb, offset);
+    reported_length = tvb_reported_length_remaining(tvb, offset);
+    if (reported_length < 0 ||
+	(guint32)reported_length < auth_info->auth_size) {
+	/* We don't even have enough bytes for the authentication
+	   stuff. */
+	return;
+    }
+    reported_length -= auth_info->auth_size;
+    if (length > reported_length)
+	length = reported_length;
+    payload_tvb = tvb_new_subset(tvb, offset, length, reported_length);
 
     /* Decrypt the PDU if it is encrypted */
 
@@ -2799,6 +2817,61 @@
     pinfo->fragmented = save_fragmented;
 }
 
+/**
+ *  Registers a conversation/UUID binding association, so that
+ *  we can invoke the proper sub-dissector for a given DCERPC
+ *  conversation.
+ * 
+ *  @param binding all values needed to create and bind a new conversation
+ * 
+ *  @return Pointer to newly-added UUID/conversation binding.
+ */
+struct _dcerpc_bind_value *
+dcerpc_add_conv_to_bind_table(decode_dcerpc_bind_values_t *binding)
+{
+    dcerpc_bind_value *bind_value;
+    dcerpc_bind_key *key;
+    conversation_t *conv;
+
+    conv = find_conversation (
+        &binding->addr_a, 
+        &binding->addr_b, 
+        binding->ptype, 
+        binding->port_a, 
+        binding->port_b, 
+        0);
+ 
+    if (!conv) {
+        conv = conversation_new (
+            &binding->addr_a, 
+            &binding->addr_b, 
+            binding->ptype, 
+            binding->port_a, 
+            binding->port_b, 
+            0);
+    }
+
+    bind_value = g_mem_chunk_alloc (dcerpc_bind_value_chunk);
+    bind_value->uuid = binding->uuid;
+    bind_value->ver = binding->ver;
+
+    key = g_mem_chunk_alloc(dcerpc_bind_key_chunk);
+    key->conv = conv;
+    key->ctx_id = binding->ctx_id;
+    key->smb_fid = binding->smb_fid;
+ 
+    /* add this entry to the bind table, first removing any
+       previous ones that are identical
+     */
+    if(g_hash_table_lookup(dcerpc_binds, key)){
+            g_hash_table_remove(dcerpc_binds, key);
+    }
+    g_hash_table_insert(dcerpc_binds, key, bind_value);
+
+    return bind_value;
+
+}
+
 static void
 dissect_dcerpc_cn_rqst (tvbuff_t *tvb, gint offset, packet_info *pinfo, 
 			proto_tree *dcerpc_tree, proto_tree *tree,
@@ -2823,6 +2896,10 @@
     offset = dissect_dcerpc_uint16 (tvb, offset, pinfo, dcerpc_tree, hdr->drep,
                                     hf_dcerpc_opnum, &opnum);
 
+    /* save context ID for use with dcerpc_add_conv_to_bind_table() */
+    pinfo->dcectxid = ctx_id;
+    pinfo->dcetransporttype = transport_type;
+
     if (check_col (pinfo->cinfo, COL_INFO)) {
         col_append_fstr (pinfo->cinfo, COL_INFO, " opnum: %u ctx_id: %u",
                          opnum, ctx_id);
@@ -2856,7 +2933,6 @@
      * and we just have a security context?
      */
     dissect_dcerpc_cn_auth (tvb, offset, pinfo, dcerpc_tree, hdr, FALSE, &auth_info);
-    dissect_dcerpc_verifier (tvb, pinfo, dcerpc_tree, hdr, &auth_info);
 
     conv = find_conversation (&pinfo->src, &pinfo->dst, pinfo->ptype,
                               pinfo->srcport, pinfo->destport, 0);
@@ -2880,7 +2956,7 @@
 
 		bind_key.conv=conv;
 		bind_key.ctx_id=ctx_id;
-		bind_key.smb_fid=get_transport_salt(pinfo, transport_type);
+		bind_key.smb_fid=dcerpc_get_transport_salt(pinfo, transport_type);
 
 		if((bind_value=g_hash_table_lookup(dcerpc_binds, &bind_key)) ){
 			if(!(hdr->flags&PFC_FIRST_FRAG)){
@@ -2889,7 +2965,7 @@
 
 				call_key.conv=conv;
 				call_key.call_id=hdr->call_id;
-				call_key.smb_fid=get_transport_salt(pinfo, transport_type);
+				call_key.smb_fid=dcerpc_get_transport_salt(pinfo, transport_type);
 				if((call_value=g_hash_table_lookup(dcerpc_cn_calls, &call_key))){
 					new_matched_key = g_mem_chunk_alloc(dcerpc_matched_key_chunk);
 					*new_matched_key = matched_key;
@@ -2908,7 +2984,7 @@
 				call_key=g_mem_chunk_alloc (dcerpc_cn_call_key_chunk);
 				call_key->conv=conv;
 				call_key->call_id=hdr->call_id;
-				call_key->smb_fid=get_transport_salt(pinfo, transport_type);
+				call_key->smb_fid=dcerpc_get_transport_salt(pinfo, transport_type);
 
 				/* if there is already a matching call in the table
 				   remove it so it is replaced with the new one */
@@ -2943,7 +3019,7 @@
             /* handoff this call */
 	    di->conv = conv;
 	    di->call_id = hdr->call_id;
-	    di->smb_fid = get_transport_salt(pinfo, transport_type);
+	    di->smb_fid = dcerpc_get_transport_salt(pinfo, transport_type);
 	    di->ptype = PDU_REQ;
 	    di->call_data = value;
 		di->hf_index = -1;
@@ -2960,6 +3036,10 @@
 	} else
 	    show_stub_data (tvb, offset, dcerpc_tree, &auth_info, TRUE);
     }
+
+    /* Dissect the verifier */
+    dissect_dcerpc_verifier (tvb, pinfo, dcerpc_tree, hdr, &auth_info);
+
 }
 
 static void
@@ -2980,6 +3060,10 @@
     offset = dissect_dcerpc_uint16 (tvb, offset, pinfo, dcerpc_tree, hdr->drep,
                                     hf_dcerpc_cn_ctx_id, &ctx_id);
 
+    /* save context ID for use with dcerpc_add_conv_to_bind_table() */
+    pinfo->dcectxid = ctx_id;
+    pinfo->dcetransporttype = transport_type;
+
     if (check_col (pinfo->cinfo, COL_INFO)) {
         col_append_fstr (pinfo->cinfo, COL_INFO, " ctx_id: %u", ctx_id);
     }
@@ -2994,7 +3078,6 @@
      * and we just have a security context?
      */
     dissect_dcerpc_cn_auth (tvb, offset, pinfo, dcerpc_tree, hdr, FALSE, &auth_info);
-    dissect_dcerpc_verifier (tvb, pinfo, dcerpc_tree, hdr, &auth_info);
 
     conv = find_conversation (&pinfo->src, &pinfo->dst, pinfo->ptype,
                               pinfo->srcport, pinfo->destport, 0);
@@ -3019,7 +3102,7 @@
 
 		call_key.conv=conv;
 		call_key.call_id=hdr->call_id;
-		call_key.smb_fid=get_transport_salt(pinfo, transport_type);
+		call_key.smb_fid=dcerpc_get_transport_salt(pinfo, transport_type);
 
 		if((call_value=g_hash_table_lookup(dcerpc_cn_calls, &call_key))){
 			new_matched_key = g_mem_chunk_alloc(dcerpc_matched_key_chunk);
@@ -3039,7 +3122,7 @@
             /* handoff this call */
 	    di->conv = conv;
 	    di->call_id = hdr->call_id;
-	    di->smb_fid = get_transport_salt(pinfo, transport_type);
+	    di->smb_fid = dcerpc_get_transport_salt(pinfo, transport_type);
 	    di->ptype = PDU_RESP;
 	    di->call_data = value;
 
@@ -3065,6 +3148,9 @@
         } else
             show_stub_data (tvb, offset, dcerpc_tree, &auth_info, TRUE);
     }
+
+    /* Dissect the verifier */
+    dissect_dcerpc_verifier (tvb, pinfo, dcerpc_tree, hdr, &auth_info);
 }
 
 static void
@@ -3094,6 +3180,10 @@
     offset = dissect_dcerpc_uint32 (tvb, offset, pinfo, dcerpc_tree, hdr->drep,
                                     hf_dcerpc_cn_status, &status);
 
+    /* save context ID for use with dcerpc_add_conv_to_bind_table() */
+    pinfo->dcectxid = ctx_id;
+    pinfo->dcetransporttype = transport_type;
+
     if (check_col (pinfo->cinfo, COL_INFO)) {
         col_append_fstr (pinfo->cinfo, COL_INFO,
                       " ctx_id: %u status: %s", ctx_id,
@@ -3131,7 +3221,7 @@
 
 		call_key.conv=conv;
 		call_key.call_id=hdr->call_id;
-		call_key.smb_fid=get_transport_salt(pinfo, transport_type);
+		call_key.smb_fid=dcerpc_get_transport_salt(pinfo, transport_type);
 
 		if((call_value=g_hash_table_lookup(dcerpc_cn_calls, &call_key))){
 			new_matched_key = g_mem_chunk_alloc(dcerpc_matched_key_chunk);
@@ -3153,7 +3243,7 @@
             /* handoff this call */
 	    di->conv = conv;
 	    di->call_id = hdr->call_id;
-	    di->smb_fid = get_transport_salt(pinfo, transport_type);
+	    di->smb_fid = dcerpc_get_transport_salt(pinfo, transport_type);
 	    di->ptype = PDU_FAULT;
 	    di->call_data = value;
 
@@ -4461,6 +4551,9 @@
                                              sizeof (dcerpc_matched_key),
                                              200 * sizeof (dcerpc_matched_key),
                                              G_ALLOC_ONLY);
+
+    /* call the registered hooks */
+    g_hook_list_invoke(&dcerpc_hooks_init_protos, FALSE /* not may_recurse */);
 }
 
 void
@@ -4755,17 +4848,20 @@
     dcerpc_module = prefs_register_protocol (proto_dcerpc, NULL);
     prefs_register_bool_preference (dcerpc_module,
                                     "desegment_dcerpc",
-                                    "Desegment all DCE/RPC over TCP",
-                                    "Whether the DCE/RPC dissector should desegment all DCE/RPC over TCP",
+                                    "Reassemble DCE/RPC messages spanning multiple TCP segments",
+                                    "Whether the DCE/RPC dissector should reassemble messages spanning multiple TCP segments."
+                                    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
                                     &dcerpc_cn_desegment);
     prefs_register_bool_preference (dcerpc_module,
                                     "reassemble_dcerpc",
                                     "Reassemble DCE/RPC fragments",
-                                    "Whether the DCE/RPC dissector should reassemble all fragmented PDUs",
+                                    "Whether the DCE/RPC dissector should reassemble fragmented DCE/RPC PDUs",
                                     &dcerpc_reassemble);
     register_init_routine(dcerpc_reassemble_init);
     dcerpc_uuids = g_hash_table_new (dcerpc_uuid_hash, dcerpc_uuid_equal);
     dcerpc_tap=register_tap("dcerpc");
+    
+    g_hook_list_init(&dcerpc_hooks_init_protos, sizeof(GHook));
 }
 
 void
diff -urN ethereal-0.10.6/epan/dissectors/packet-dcerpc.h ethereal-0.10.7/epan/dissectors/packet-dcerpc.h
--- ethereal-0.10.6/epan/dissectors/packet-dcerpc.h	2004-08-12 17:42:26.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-dcerpc.h	2004-10-20 17:34:56.000000000 -0500
@@ -2,7 +2,7 @@
  * Copyright 2001, Todd Sabin <tas@webspan.net>
  * Copyright 2003, Tim Potter <tpot@samba.org>
  *
- * $Id: packet-dcerpc.h 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-dcerpc.h 11924 2004-09-07 16:19:56Z ulfl $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -266,6 +266,11 @@
 } dcerpc_info;
 
 
+/* the init_protocol hooks. With MSVC and a 
+ * libethereal.dll, we need a special declaration.
+ */
+ETH_VAR_IMPORT GHookList dcerpc_hooks_init_protos;
+
 /* the registered subdissectors. With MSVC and a 
  * libethereal.dll, we need a special declaration.
  */
@@ -311,6 +316,30 @@
 void register_dcerpc_auth_subdissector(guint8 auth_level, guint8 auth_type,
 				       dcerpc_auth_subdissector_fns *fns);
 
+/* all values needed to (re-)build a dcerpc binding */
+typedef struct decode_dcerpc_bind_values_s {
+    /* values of a typical conversation */
+    address addr_a;
+    address addr_b;
+    port_type ptype;
+    guint32 port_a;
+    guint32 port_b;
+    /* dcerpc conversation specific */
+    guint16 ctx_id;
+    guint16 smb_fid;
+    /* corresponding "interface" */
+    GString *ifname;
+    e_uuid_t uuid;
+    guint16 ver;
+} decode_dcerpc_bind_values_t;
+
+/* Helper for "decode as" dialog to set up a UUID/conversation binding. */
+struct _dcerpc_bind_value *
+dcerpc_add_conv_to_bind_table(decode_dcerpc_bind_values_t *binding);
+
+guint16 
+dcerpc_get_transport_salt (packet_info *pinfo, int transport_type);
+
 /* Authentication services */
 
 /* 
diff -urN ethereal-0.10.6/epan/dissectors/packet-dcm.c ethereal-0.10.7/epan/dissectors/packet-dcm.c
--- ethereal-0.10.6/epan/dissectors/packet-dcm.c	2004-08-12 17:42:05.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-dcm.c	2004-10-20 17:34:44.000000000 -0500
@@ -11,7 +11,7 @@
  *        DICOM packets correctly.  
  *        This should probably be documented somewhere besides here.)
  *
- * $Id: packet-dcm.c 11492 2004-07-23 23:28:08Z jmayer $
+ * $Id: packet-dcm.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -354,7 +354,7 @@
     char *s = "";
     switch (reason) {
     case 0:  s = "not specified"; break;
-    case 1:  s = "unrecoginized"; break;
+    case 1:  s = "unrecognized"; break;
     case 2:  s = "unexpected"; break;
     case 4:  s = "unrecognized parameter"; break;
     case 5:  s = "unexpected parameter"; break;
diff -urN ethereal-0.10.6/epan/dissectors/packet-dhcp-failover.c ethereal-0.10.7/epan/dissectors/packet-dhcp-failover.c
--- ethereal-0.10.6/epan/dissectors/packet-dhcp-failover.c	2004-08-12 17:42:30.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-dhcp-failover.c	2004-10-20 17:35:00.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for ISC DHCP Server failover protocol dissection
  * Copyright 2004, M. Ortega y Strupp <moys@loplof.de>
  *
- * $Id: packet-dhcp-failover.c 11643 2004-08-10 14:09:30Z gerald $
+ * $Id: packet-dhcp-failover.c 11746 2004-08-16 01:13:11Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -27,6 +27,12 @@
  * This implementation is loosely based on draft-ietf-dhc-failover-07.txt.
  * As this document does not represent the actual implementation, the
  * source code of ISC DHCPD 3.0 was used too.
+ *
+ * See also
+ *
+ *	http://community.roxen.com/developers/idocs/drafts/draft-ietf-dhc-failover-10.html
+ *
+ * upon which the handling of the message-digest option is based.
  */
 
 #ifdef HAVE_CONFIG_H
@@ -835,7 +841,7 @@
 
         			case DHCP_FO_PD_MESSAGE_DIGEST:
 
-					message_digest_type = tvb_get_ntohs(tvb,helpliste->actualpoffset+4);
+					message_digest_type = tvb_get_guint8(tvb,helpliste->actualpoffset+4);
 					if(message_digest_type == 1)
 					{
 						proto_item_append_text(oi, ", HMAC-MD5");
diff -urN ethereal-0.10.6/epan/dissectors/packet-dhcpv6.c ethereal-0.10.7/epan/dissectors/packet-dhcpv6.c
--- ethereal-0.10.6/epan/dissectors/packet-dhcpv6.c	2004-08-12 17:42:27.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-dhcpv6.c	2004-10-20 17:34:59.000000000 -0500
@@ -5,7 +5,7 @@
  * SHIRASAKI Yasuhiro <yasuhiro@gnome.gr.jp>
  * Tony Lindstrom <tony.lindstrom@ericsson.com>
  *
- * $Id: packet-dhcpv6.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-dhcpv6.c 12173 2004-10-01 12:35:55Z jmayer $
  *
  * The information used comes from:
  * RFC3315.txt
@@ -42,15 +42,14 @@
 
 #include <string.h>
 #include <glib.h>
-#include <epan/int-64bit.h>
 #include <epan/packet.h>
 #include <epan/ipv6-utils.h>
 
 static int proto_dhcpv6 = -1;
 static int hf_dhcpv6_msgtype = -1;
 
-static guint ett_dhcpv6 = -1;
-static guint ett_dhcpv6_option = -1;
+static gint ett_dhcpv6 = -1;
+static gint ett_dhcpv6_option = -1;
 
 #define UDP_PORT_DHCPV6_DOWNSTREAM	546
 #define UDP_PORT_DHCPV6_UPSTREAM	547
@@ -210,7 +209,7 @@
 	opttype = tvb_get_ntohs(tvb, off);
 	optlen = tvb_get_ntohs(tvb, off + 2);
 
-	/* truncated case */
+	/* all option data must be present */
 	if (eoff - off < 4 + optlen) {
 		*at_end = TRUE;
 		return 0;
@@ -308,8 +307,12 @@
 
           temp_optlen = 12;
 	  while ((optlen - temp_optlen) > 0) {
-	    gboolean at_end_ = FALSE;
-	    temp_optlen += dhcpv6_option(tvb, subtree, off+temp_optlen, off + optlen, &at_end_);
+	    temp_optlen += dhcpv6_option(tvb, subtree, off+temp_optlen,
+					 off + optlen, at_end);
+	    if (*at_end) {
+	      /* Bad option - just skip to the end */
+	      temp_optlen = optlen;
+	    }
 	  }
 	  break;
 	case OPTION_IA_TA:
@@ -323,8 +326,12 @@
 			      tvb_get_ntohl(tvb, off));
           temp_optlen = 4;
 	  while ((optlen - temp_optlen) > 0) {
-	    gboolean at_end_;
-	    temp_optlen += dhcpv6_option(tvb, subtree, off+temp_optlen, off + optlen, &at_end_);
+	    temp_optlen += dhcpv6_option(tvb, subtree, off+temp_optlen,
+					 off + optlen, at_end);
+	    if (*at_end) {
+	      /* Bad option - just skip to the end */
+	      temp_optlen = optlen;
+	    }
 	  }
 	  break;
 	case OPTION_IAADDR:
@@ -361,8 +368,12 @@
            
            temp_optlen = 24;
            while ((optlen - temp_optlen) > 0) {
-              gboolean at_end_;
-              temp_optlen += dhcpv6_option(tvb, subtree, off+temp_optlen, off + optlen, &at_end_);
+              temp_optlen += dhcpv6_option(tvb, subtree, off+temp_optlen,
+                                           off + optlen, at_end);
+              if (*at_end) {
+                /* Bad option - just skip to the end */
+                temp_optlen = optlen;
+              }
            }
         }
         break;
@@ -404,8 +415,11 @@
 				optlen, "RELAY-MSG: malformed option");
 	    break;
 	  } else {
-	    gboolean at_end_;
-	    dhcpv6_option(tvb, subtree, off, off + optlen, &at_end_);
+	    /* XXX - shouldn't we be dissecting a full DHCP message
+	       here? */
+	    dhcpv6_option(tvb, subtree, off, off + optlen, at_end);
+	    if (*at_end)
+	      return 0;
           } 
 	  break;
 	case OPTION_AUTH:
@@ -635,8 +649,12 @@
                 
                 temp_optlen = 25;
                 while ((optlen - temp_optlen) > 0) {
-                   gboolean at_end_;
-                   temp_optlen += dhcpv6_option(tvb, subtree, off+temp_optlen, off + optlen, &at_end_);
+                   temp_optlen += dhcpv6_option(tvb, subtree, off+temp_optlen,
+                                                off + optlen, at_end);
+                   if (*at_end) {
+                     /* Bad option - just skip to the end */
+                     temp_optlen = optlen;
+                   }
                 }
 	    }
 	    break;
@@ -702,6 +720,8 @@
 
            while (!relay_msg_option && off < eoff) {
               length = dhcpv6_option(tvb, bp_tree, off, eoff, &at_end);
+              if (at_end)
+                return;
 
               if (tvb_get_ntohs(tvb, off) == OPTION_RELAY_MSG) {
                  relay_msg_option = TRUE;
diff -urN ethereal-0.10.6/epan/dissectors/packet-diameter-defs.h ethereal-0.10.7/epan/dissectors/packet-diameter-defs.h
--- ethereal-0.10.6/epan/dissectors/packet-diameter-defs.h	2004-08-12 17:42:06.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-diameter-defs.h	2004-10-20 17:34:44.000000000 -0500
@@ -5,16 +5,17 @@
  * AVPs.  If libxml is in the LD_LIBRARY_PATH, and dictionary.xml exists,
  * then it will not be used.
  *
- * $Id: packet-diameter-defs.h 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-diameter-defs.h 12293 2004-10-14 03:29:35Z guy $
  * Generated: Fri Feb 23 13:04:15 2001
  * References:
  * http://www.ietf.org/rfc/rfc3588.txt
  * http://www.iana.org/assignments/radius-types
- * http://www.ietf.org/internet-drafts/draft-ietf-aaa-diameter-cc-03.txt
- * http://www.ietf.org/internet-drafts/draft-ietf-aaa-diameter-nasreq-14.txt
- * http://www.ietf.org/internet-drafts/draft-ietf-aaa-diameter-mobileip-16.txt
- * http://www.ietf.org/internet-drafts/draft-ietf-aaa-diameter-sip-app-01.txt
+ * http://www.ietf.org/internet-drafts/draft-ietf-aaa-diameter-cc-06.txt
+ * http://www.ietf.org/internet-drafts/draft-ietf-aaa-diameter-nasreq-17.txt
+ * http://www.ietf.org/internet-drafts/draft-ietf-aaa-diameter-mobileip-20.txt
+ * http://www.ietf.org/internet-drafts/draft-ietf-aaa-diameter-sip-app-03.txt
  * http://www.ietf.org/html.charters/aaa-charter.html
+ * http://www.iana.org/assignments/aaa-parameters
  */
 
 #ifndef _PACKET_DIAMETER_DEFS_H
@@ -24,7 +25,7 @@
 /* Type to string table */
 
 /* Attribute to String tables */
-static value_string diameter_service_type_vals[]={
+static const value_string diameter_service_type_vals[]={
    {1, "Login"},
    {2, "Framed"},
    {3, "Callback-Login"},
@@ -45,7 +46,7 @@
    {0, (char *)NULL}
 };
 
-static value_string diameter_framed_protocol_vals[]={
+static const value_string diameter_framed_protocol_vals[]={
    {1,	"PPP"},
    {2,	"SLIP"},
    {3,	"AppleTalk Remote Access Protocol (ARAP)"},
@@ -63,7 +64,7 @@
    {0, (char *)NULL}
 };
 
-static value_string diameter_framed_routing_vals[]={
+static const value_string diameter_framed_routing_vals[]={
    {0, "None"},
    {1, "Send routing packets"},
    {2, "Listen for routing packets"},
@@ -71,7 +72,7 @@
    {0, (char *)NULL}
 };
 
-static value_string diameter_framed_compression_vals[]={
+static const value_string diameter_framed_compression_vals[]={
    {0,	"None"},
    {1,	"VJ TCP/IP header compression"},
    {2,	"IPX-Header-Compression"},
@@ -79,7 +80,7 @@
    {0, (char *)NULL}
 };
 
-static value_string diameter_login_service_vals[]={
+static const value_string diameter_login_service_vals[]={
    {0, "Telnet"},
    {1, "Rlogin"},
    {2, "TCP-Clear"},
@@ -92,29 +93,13 @@
    {0, (char *)NULL}
 };
 
-static value_string diameter_vendor_specific_vendors[]= {
-	{0, "None"},
-	{5, "ACC"},
-	{9, "Cisco"},
-	{42, "Sun Microsystems"},
-	{166, "Shiva"},
-	{307, "Livingston"},
-	{429, "3Com"},
-	{529, "Ascend"},
-	{1584, "Bay Networks"},
-	{2636, "Juniper Networks"},
-	{5925, "ipUnplugged"},
-	{10415, "3GPP"},
-	{0,NULL}
-};
-
-static value_string diameter_termination_action_vals[]={
+static const value_string diameter_termination_action_vals[]={
    {0, "Default"},
    {1, "RADIUS-Request"},
    {0, (char *)NULL}
 };
 
-static value_string diameter_acct_status_type_vals[]={
+static const value_string diameter_acct_status_type_vals[]={
    {1,	"Start"},
    {2,	"Stop"},
    {3,	"Alive"},
@@ -135,7 +120,7 @@
    {0, (char *)NULL}
 };
 
-static value_string diameter_acct_authentic_vals[]={
+static const value_string diameter_acct_authentic_vals[]={
    {1, "RADIUS"},
    {0, "None"},
    {2, "Local"},
@@ -144,7 +129,7 @@
    {0, (char *)NULL}
 };
 
-static value_string diameter_acct_terminate_cause_vals[]={
+static const value_string diameter_acct_terminate_cause_vals[]={
    {1, "User-Request"},
    {2, "Lost-Carrier"},
    {3, "Lost-Service"},
@@ -169,7 +154,7 @@
    {22,	"Port Administratively Disabled"},		/*[RFC3580]*/
    {0, (char *)NULL}
 };
-static value_string diameter_nas_port_type_vals[]={
+static const value_string diameter_nas_port_type_vals[]={
    {0, "Async"},
    {1, "Sync"},
    {2, "ISDN Sync"},
@@ -200,7 +185,7 @@
    {0, (char *)NULL}
 };
 
-static value_string diameter_tunnel_type_vals[]= {
+static const value_string diameter_tunnel_type_vals[]= {
 	{1,"PPTP"},
 	{2,"L2F"},
 	{3,"L2TP"},
@@ -217,7 +202,7 @@
 	{0,NULL}
 };
 
-static value_string diameter_tunnel_medium_type_vals[]= {
+static const value_string diameter_tunnel_medium_type_vals[]= {
 	{1,"IPv4"},
 	{2,"IPv6"},
 	{3,"NSAP"},
@@ -235,10 +220,38 @@
 	{15,"E-164-NSAP"},
 	{0,NULL}
 };
+
+static const value_string diameter_avp_data_addrfamily_vals[]= {
+	{1,"IPv4"},
+	{2,"IPv6"},
+	{3,"NSAP"},
+	{4,"HDLC"},
+	{5,"BBN"},
+	{6,"IEEE-802"},
+	{7,"E-163"},
+	{8,"E-164"},
+	{9,"F-69"},
+	{10,"X-121"},
+	{11,"IPX"},
+	{12,"Appletalk"},
+	{13,"Decnet4"},
+	{14,"Vines"},
+	{15,"E-164-NSAP"},
+	{16,"DNS"},
+	{17,"DistinguishedName"},
+	{18,"AS"},
+	{19,"XTPoIPv4"},
+	{20,"XTPoIPv6"},
+	{21,"XTPNative"},
+	{22,"FibrePortName"},
+	{23,"FibreNodeName"},
+	{24,"GWID"},
+	{0,NULL}
+};
 /*
  *Values for RADIUS Attribute 101, Error-Cause Attribute [RFC3576]:
  */
-static value_string diameter_error_cause_attribute_vals[]= {
+static const value_string diameter_error_cause_attribute_vals[]= {
 	{201,"Residual Session Context Removed"},
 	{202,"Invalid EAP Packet (Ignored)"},
 	{401,"Unsupported Attribute"},
@@ -257,7 +270,7 @@
 	{0,NULL}
 };
 
-static value_string diameter_accounting_record_type_vals[]= {
+static const value_string diameter_accounting_record_type_vals[]= {
 	{1, "Event Record"},
 	{2, "Start Record"},
 	{3, "Interim Record"},
@@ -265,33 +278,33 @@
 	{0,NULL}
 };
 
-static value_string diameter_auth_request_type_vals[]= {
+static const value_string diameter_auth_request_type_vals[]= {
 	{1, "Authenticate Only"},
 	{2, "Authorize Only"},
 	{3, "Authorize Authenticate"},
 	{0,NULL}
 };
 
-static value_string diameter_auth_session_state_vals[]= {
+static const value_string diameter_auth_session_state_vals[]= {
 	{0, "State Maintained"},
 	{1, "No State Maintained"},
 	{0,NULL}
 };
 
-static value_string diameter_re_auth_request_type_vals[]= {
+static const value_string diameter_re_auth_request_type_vals[]= {
 	{0, "Authorize Only"},
 	{1, "Authorize Authenticate"},
 	{0,NULL}
 };
 
-static value_string diameter_disconnect_cause_vals[]= {
+static const value_string diameter_disconnect_cause_vals[]= {
 	{0, "Rebooting"},
 	{1, "Busy"},
 	{2, "Do Not Want To Talk To You"},
 	{0,NULL}
 };
 
-static value_string diameter_redirect_host_usage_vals[]= {
+static const value_string diameter_redirect_host_usage_vals[]= {
 	{0, "Don't Cache"},
 	{1, "All Session"},
 	{2, "All Realm"},
@@ -301,7 +314,7 @@
 	{0,NULL}
 };
 
-static value_string diameter_session_server_failover_vals[]= {
+static const value_string diameter_session_server_failover_vals[]= {
 	{0, "Refuse Service"},
 	{1, "Try Again"},
 	{2, "Allow Service"},
@@ -309,7 +322,7 @@
 	{0,NULL}
 };
 
-static value_string diameter_termination_cause_vals[]= {
+static const value_string diameter_termination_cause_vals[]= {
 	{1, "Logout"},
 	{2, "Service Not Provided"},
 	{3, "Bad Answer"},
@@ -318,40 +331,44 @@
 	{0,NULL}
 };
 
-static value_string diameter_mip_algorithm_type[] = {
+static const value_string diameter_mip_algorithm_type[] = {
 	{1, "MD5 Prefix/Suffix"},
 	{2, "HMAC-MD5"},
 	{3, "HMAC-SHA1"},
 	{0, NULL}
 };
 
-static value_string diameter_mip_replay_type[] = {
+static const value_string diameter_mip_replay_type[] = {
 	{1, "None"},
 	{2, "Nonce"},
 	{3, "Timestamp"},
 	{0, NULL}
 };
-/* XXX TODO correct these values to IANA assigned ones */
-static value_string diameter_application_id_vals[] = {
+
+static const value_string diameter_application_id_vals[] = {
+	{0, "Diameter Common Messages"},
 	{1, "Diameter NASREQ Application"},
 	{2, "Diameter Mobile IPv4 Application"},
-	{4, "Diameter Credit-Control Application"},
-/*	{x, "Diameter Session Initiation Protocol (SIP) Application"},
- */
-  {2000, "Diameter EAP Application"},
+	{3, "Diameter Base Accounting"},
+	{4, "Diameter Credit-Control Application"},	/* draft-ietf-aaa-diameter-cc-06 */
+	{16777216, "3GPP Cx"},		/* 3GPP TS 29.228 and 29.229 */
+	{16777217, "3GPP Sh"},		/* 3GPP TS 29.328 and 29.329 */
+	{16777218, "3GPP Rf/Ro"},	/* 3GPP TS 32.225 */
+	{4294967295U, "Relay Application"},
+	
 	{0, NULL}
 
 };
 /* Diameter Session Initiation Protocol (SIP) Application value strings */
 /* Remove comment when IANA assigned values are avalable 
-static value_string SIP_user_data_request_type[] = {
+static const value_string SIP_user_data_request_type[] = {
 	{0, "COMPLETE_PROFILE"},
 	{1, "REGISTERED_PROFILE"},
 	{2, "UNREGISTERED_PROFILE"},
 	{0, NULL}
 
 };
-static value_string SIP_user_authorization_type[] = {
+static const value_string SIP_user_authorization_type[] = {
 	{0, "REGISTRATION"},
 	{1, "DE_REGISTRATION"},
 	{2, "REGISTRATION_AND_CAPABILITIES"},
@@ -359,7 +376,7 @@
 
 };
 
-static value_string SIP_reason_code_vals[] = {
+static const value_string SIP_reason_code_vals[] = {
 	{0, "PERMANENT_TERMINATION"},
 	{1, "NEW_SIP_SERVER_ASSIGNED "},
 	{2, "SIP_SERVER_CHANGE"},
@@ -367,14 +384,14 @@
 	{0, NULL}
 
 };
-static value_string SIP_user_data_already_available_vals[] = {
+static const value_string SIP_user_data_already_available_vals[] = {
 	{0, "USER_DATA_NOT_AVAILABLE"},
 	{1, "USER_DATA_ALREADY_AVAILABLE"},
 	{0, NULL}
 
 };
 
-static value_string SIP_server_assignment_type[] ={
+static const value_string SIP_server_assignment_type[] ={
 	{0, "NO_ASSIGNMENT"},
 	{1, "REGISTRATION"},
 	{2, "RE_REGISTRATION"},
@@ -406,7 +423,7 @@
  *    -  5xxx (Permanent Failure)
  */
 
-static value_string diameter_result_code_vals[] = {
+static const value_string diameter_result_code_vals[] = {
 	/* Informational
 	 * Errors that fall within this category are used to inform the
 	 * requester that a request could not be satisfied, and additional
@@ -500,6 +517,26 @@
 	{0, NULL}
 };
 
+static const value_string diameter_exp_result_code_vals[] = {
+        {2001, "DIAMETER_FIRST_REGISTRATION"},
+        {2002, "DIAMETER_SUBSEQUENT_REGISTRATION"},
+        {2003, "DIAMETER_UNREGISTERED_SERVICE"},
+        {2004, "DIAMETER_SUCCESS_SERVER_NAME_NOT_STORED"},
+        {2005, "DIAMETER_SERVER_SELECTION"},
+        {5001, "DIAMETER_ERROR_USER_UNKNOWN"},
+        {5002, "DIAMETER_ERROR_IDENTITIES_DONT_MATCH"},
+        {5003, "DIAMETER_ERROR_IDENTITY_NOT_REGISTERED"},
+        {5004, "DIAMETER_ERROR_ROAMING_NOT_ALLOWED"},
+        {5005, "DIAMETER_ERROR_ROAMING_IDENTITY_ALREADY_REGISTERED"},
+        {5006, "DIAMETER_ERROR_ROAMING_AUTH_SCHEME_NOT_SUPPORTED"},
+        {5007, "DIAMETER_ERROR_IN_ASSIGNMENT_TYPE"},
+        {5008, "DIAMETER_ERROR_TOO_MUCH_DATA"},
+        {5009, "DIAMETER_ERROR_NOT_SUPPORTED_USER_DATA"},
+
+	{0, NULL}
+};
+	 
+
 
 static struct old_avp_info old_diameter_avps[] = {
 	/* Radius Attributes */
@@ -528,7 +565,7 @@
 	{ 23, "Framed-IPX-Network",       DIAMETER_OCTET_STRING, (value_string *)NULL},
 	{ 24, "State",                    DIAMETER_OCTET_STRING, (value_string *)NULL},
 	{ 25, "Class",                    DIAMETER_OCTET_STRING, (value_string *)NULL},
-	{ 26, "Vendor-Specific",          DIAMETER_ENUMERATED,   diameter_vendor_specific_vendors},
+	{ 26, "Vendor-Specific",          DIAMETER_ENUMERATED,   sminmpec_values},
 	{ 27, "Session-Timeout",          DIAMETER_INTEGER32,    (value_string *)NULL},
 	{ 28, "Idle-Timeout",             DIAMETER_INTEGER32,    (value_string *)NULL},
 	{ 29, "Termination-Action",       DIAMETER_ENUMERATED,   diameter_termination_action_vals},
@@ -625,7 +662,7 @@
     { 277, "Auth-Session-State",          DIAMETER_ENUMERATED,  diameter_auth_session_state_vals},
     { 285, "Re-Auth-Request-Type",        DIAMETER_ENUMERATED,  diameter_re_auth_request_type_vals},
     { 293, "Destination-Host",            DIAMETER_IDENTITY,    (value_string *)NULL},
-    { 283, "Desintation-Realm",           DIAMETER_UTF8STRING,  (value_string *)NULL},
+    { 283, "Destination-Realm",           DIAMETER_UTF8STRING,  (value_string *)NULL},
     { 273, "Disconnect-Cause",            DIAMETER_ENUMERATED,  diameter_disconnect_cause_vals},
     { 281, "Error-Message",               DIAMETER_UTF8STRING,  (value_string *)NULL},
     { 294, "Error-Reporting-Host",        DIAMETER_IDENTITY,    (value_string *)NULL},
@@ -650,8 +687,11 @@
     { 286, "Source-Route",                DIAMETER_IDENTITY,    (value_string *)NULL},
     { 265, "Supported-Vendor-Id",         DIAMETER_UNSIGNED32,  (value_string *)NULL},
     { 295, "Termination-Cause",           DIAMETER_ENUMERATED,  diameter_termination_cause_vals},
-    { 266, "Vendor-Id",                   DIAMETER_ENUMERATED,  diameter_vendor_specific_vendors},
+    { 266, "Vendor-Id",                   DIAMETER_ENUMERATED,  sminmpec_values},
     { 260, "Vendor-Specific-Application-Id", DIAMETER_GROUPED, (value_string *)NULL},
+    { 297, "Experimental-Result",          DIAMETER_GROUPED,     (value_string *)NULL},
+    { 298, "Experimental-Result-Code",     DIAMETER_ENUMERATED,  diameter_exp_result_code_vals},
+
 /* Diameter Mobile IP AVPs */
     { 318, "MIP-FA-to-HA-SPI",            DIAMETER_UNSIGNED32,     (value_string *)NULL},
     { 319, "MIP-FA-to-MN-SPI",            DIAMETER_UNSIGNED32,     (value_string *)NULL},
@@ -767,7 +807,7 @@
 
 
 
-static value_string diameter_command_code_vals[] = {
+static const value_string diameter_command_code_vals[] = {
 
 	/* Base Protocol */
 	{257, "Capabilities-Exchange"},
@@ -801,6 +841,17 @@
 	{0, (char *)NULL}
 };
 
+/* stuff for supporting multiple versions */
+typedef enum {
+  DIAMETER_V16,
+  DIAMETER_RFC
+} Version_Type;
+
+static const enum_val_t options[] = {
+  { "draft-16", "Diameter base draft version 16 and below",  DIAMETER_V16  },
+  { "rfc3588", "Diameter base RFC 3588 ",                    DIAMETER_RFC  },
+  { NULL, NULL, 0 }
+};
 
 
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-diameter.c ethereal-0.10.7/epan/dissectors/packet-diameter.c
--- ethereal-0.10.6/epan/dissectors/packet-diameter.c	2004-08-12 17:41:57.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-diameter.c	2004-10-20 17:34:37.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-diameter.c
  * Routines for Diameter packet disassembly
  *
- * $Id: packet-diameter.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-diameter.c 12356 2004-10-20 15:30:19Z gerald $
  *
  * Copyright (c) 2001 by David Frascone <dave@frascone.com>
  *
@@ -31,7 +31,10 @@
  * http://www.ietf.org/internet-drafts/draft-ietf-aaa-diameter-mobileip-16.txt
  * http://www.ietf.org/internet-drafts/draft-ietf-aaa-diameter-sip-app-01.txt
  * http://www.ietf.org/html.charters/aaa-charter.html
- */
+ * http://www.iana.org/assignments/address-family-numbers
+ * http://www.iana.org/assignments/enterprise-numbers
+ * http://www.iana.org/assignments/aaa-parameters
+*/
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -49,7 +52,8 @@
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
 #include <epan/report_err.h>
-#include "prefs.h"
+#include <epan/prefs.h>
+#include <epan/sminmpec.h>
 #include "packet-tcp.h"
 
 #ifdef NEED_SNPRINTF_H
@@ -81,14 +85,14 @@
   DIAMETER_QOS_FILTER_RULE,    /* OctetString */
   DIAMETER_MIP_REG_REQ,        /* OctetString */
   DIAMETER_VENDOR_ID,          /* Integer32  */
-  DIAMETER_APPLICATION_ID,
+  DIAMETER_APPLICATION_ID,     /* Integer32  */
   DIAMETER_URI,                /* OctetString */
   DIAMETER_SESSION_ID          /* OctetString */
 
 } diameterDataType;
 
 
-static value_string TypeValues[]={
+static const value_string TypeValues[]={
   {  DIAMETER_OCTET_STRING,    "OctetString" },
   {  DIAMETER_INTEGER32,       "Integer32" },
   {  DIAMETER_INTEGER64,       "Integer64" },
@@ -124,7 +128,7 @@
   guint32           code;
   gchar            *name;
   diameterDataType  type;
-  value_string     *values;
+  const value_string *values;
 } oldAvpInfo;
 
 typedef struct avp_info {
@@ -166,8 +170,8 @@
 
 #define  NTP_TIME_DIFF                   (2208988800UL)
 
-#define TCP_PORT_DIAMETER	1812
-#define SCTP_PORT_DIAMETER	1812
+#define TCP_PORT_DIAMETER	3868
+#define SCTP_PORT_DIAMETER	3868
 
 static const true_false_string reserved_set = {
   "*** Error! Reserved Bit is Set",
@@ -181,6 +185,7 @@
 static int hf_diameter_endtoendid =-1;
 static int hf_diameter_version = -1;
 static int hf_diameter_vendor_id = -1;
+static int hf_diameter_application_id = -1;
 static int hf_diameter_flags = -1;
 static int hf_diameter_flags_request = -1;
 static int hf_diameter_flags_proxyable = -1;
@@ -211,6 +216,7 @@
 static int hf_diameter_avp_data_int64 = -1;
 static int hf_diameter_avp_data_bytes = -1;
 static int hf_diameter_avp_data_string = -1;
+static int hf_diameter_avp_data_addrfamily = -1;
 static int hf_diameter_avp_data_v4addr = -1;
 static int hf_diameter_avp_data_v6addr = -1;
 static int hf_diameter_avp_data_time = -1;
@@ -236,13 +242,21 @@
 #define DICT_FN  "diameter/dictionary.xml"
 static gchar *gbl_diameterDictionary;
 
-typedef struct _e_diameterhdr {
+typedef struct _e_diameterhdr_v16 {
   guint32  versionLength;
   guint32  flagsCmdCode;
   guint32  vendorId;
   guint32  hopByHopId;
   guint32  endToEndId;
-} e_diameterhdr;
+} e_diameterhdr_v16;
+
+typedef struct _e_diameterhdr_rfc {
+  guint32  versionLength;
+  guint32  flagsCmdCode;
+  guint32  applicationId;
+  guint32  hopByHopId;
+  guint32  endToEndId;
+} e_diameterhdr_rfc;
 
 typedef struct _e_avphdr {
   guint32 avp_code;
@@ -281,7 +295,9 @@
 #define AVP_FLAGS_RESERVED 0x1f          /* 00011111  -- V M P X X X X X */
 
 #define MIN_AVP_SIZE (sizeof(e_avphdr) - sizeof(guint32))
-#define MIN_DIAMETER_SIZE (sizeof(e_diameterhdr))
+#define MIN_DIAMETER_SIZE (sizeof(e_diameterhdr_rfc))
+
+static Version_Type gbl_version = DIAMETER_RFC;
 
 static void dissect_avps(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
 
@@ -292,16 +308,24 @@
  * the xmlsoft examples.
  */
 static xmlDocPtr
-xmlParseFilePush( char *filename, int checkValid) {
+xmlParseFilePush( char *filename, int checkValid
+#ifndef ETHEREAL_XML_DO_VALIDITY_CHECKING
+                 _U_
+#endif
+) {
   FILE *f;
   xmlDocPtr doc=NULL;
+#ifdef ETHEREAL_XML_DO_VALIDITY_CHECKING
   int valid=0;
+#endif
   int res, size = 1024;
   char chars[1024];
   xmlParserCtxtPtr ctxt;
 
+#ifdef ETHEREAL_XML_DO_VALIDITY_CHECKING
   /* I wonder what kind of a performance hit this is? */
   *XmlStub.xmlDoValidityCheckingDefaultValue = checkValid;
+#endif
 
   f = fopen(filename, "r");
   if (f == NULL) {
@@ -318,17 +342,22 @@
 	}
 	XmlStub.xmlParseChunk(ctxt, chars, 0, 1);
 	doc = ctxt->myDoc;
-	valid=ctxt->valid;
+#ifdef ETHEREAL_XML_DO_VALIDITY_CHECKING
+  valid=ctxt->valid;
+#endif
 	XmlStub.xmlFreeParserCtxt(ctxt);
   }
   fclose(f);
 
+#ifdef ETHEREAL_XML_DO_VALIDITY_CHECKING
   /* Check valid */
   if (!valid) {
 	report_failure( "Error!  Invalid xml in %s!  Failed DTD check!",
 			   filename);
 	return NULL;
   }
+#endif
+
   return doc;
 } /* xmlParseFilePush */
 
@@ -337,7 +366,7 @@
  * only called when the XML dictionary fails to load properly.
  */
 static int
-addStaticAVP(int code, gchar *name, diameterDataType type, value_string *values)
+addStaticAVP(int code, gchar *name, diameterDataType type, const value_string *values)
 {
   avpInfo *entry;
   ValueName *vEntry=NULL;
@@ -466,7 +495,7 @@
   entry->type = avpType;
   entry->values = vEntry;
   if (vEntry)
-	entry->type = DIAMETER_INTEGER32;
+	entry->type = DIAMETER_ENUMERATED;
 
   /* And, add it to the list */
   entry->next = avpListHead;
@@ -767,10 +796,11 @@
   int i;
 
   /* Add static vendors to list */
-  for(i=0; diameter_vendor_specific_vendors[i].strptr; i++) {
-	addVendor(diameter_vendor_specific_vendors[i].value,
-			  diameter_vendor_specific_vendors[i].strptr,
-			  diameter_vendor_specific_vendors[i].strptr);
+  for(i=0; sminmpec_values[i].strptr; i++) {
+	addVendor(sminmpec_values[i].value,
+			  sminmpec_values[i].strptr,
+			  sminmpec_values[i].strptr);
+
   }
   /* Add static commands to list. */
   for(i=0; diameter_command_code_vals[i].strptr; i++) {
@@ -843,6 +873,9 @@
   static gchar buffer[64];
   gchar *vendorName=NULL;
 
+  switch(gbl_version) {
+    case DIAMETER_V16:
+      /* In draft-v16 version, command code is depending on vendorID */
   if (vendorId)
 	vendorName = diameter_vendor_to_str(vendorId, FALSE);
 
@@ -871,24 +904,39 @@
 			commandCode, vendorId);
   snprintf(buffer, sizeof(buffer),
 		   "Cmd-0x%08x", commandCode);
+    break;
+    case DIAMETER_RFC:
+      /* In RFC3588 version, command code is independant on vendorID */
+      for (probe=commandListHead; probe; probe=probe->next) {
+        if (commandCode == probe->code) {
+          /* We found it */
+          return probe->name;
+        }
+      }
   
+    if ( suppress_console_output == FALSE )
+          g_warning("Diameter: Unable to find name for command code 0x%08x!",
+                        commandCode);
+    snprintf(buffer, sizeof(buffer),
+                   "Cmd-0x%08x", commandCode);
+    break;
+  }
   return buffer;
 }/*diameter_command_to_str */
 
 /* return application string, based on the id */
 static gchar *
-diameter_app_to_str(guint32 vendorId) {
+diameter_app_to_str(guint32 appId) {
   ApplicationId *probe;
   static gchar buffer[64];
 
   for (probe=ApplicationIdHead; probe; probe=probe->next) {
-	if (vendorId == probe->id) {
+	if (appId == probe->id) {
 	  return probe->name;
 	}
   }
 
-  snprintf(buffer, sizeof(buffer),
-		   "AppId 0x%08x", vendorId);
+  snprintf(buffer, sizeof(buffer), "Unknown");
   return buffer;
 } /*diameter_app_to_str */
 
@@ -1037,17 +1085,18 @@
   proto_tree      *flags_tree;
   tvbuff_t        *avp_tvb;
   proto_tree      *diameter_tree;
-  e_diameterhdr    dh;
+  e_diameterhdr_v16   dh;
+  e_diameterhdr_rfc   dh2;
   int              offset=0;
-  size_t           avplength;
+  size_t           avplength=0;
   proto_tree      *avp_tree;
   proto_item      *avptf;
   int              BadPacket = FALSE;
-  guint32          commandCode, pktLength;
-  guint8           version, flags;
+  guint32          commandCode=0, pktLength=0;
+  guint8           version=0, flags=0;
   gchar            flagstr[64] = "<None>";
   gchar           *fstr[] = {"RSVD7", "RSVD6", "RSVD5", "RSVD4", "RSVD3", "Error", "Proxyable", "Request" };
-  gchar            commandString[64], vendorName[64];
+  gchar            commandString[64], vendorName[64], applicationName[64];
   gint        i;
   guint      bpos;
   static  int initialized=FALSE;
@@ -1069,28 +1118,49 @@
 	col_clear(pinfo->cinfo, COL_INFO);
 
   /* Copy our header */
+  switch(gbl_version) {
+    case DIAMETER_V16:
   tvb_memcpy(tvb, (guint8*) &dh, offset, sizeof(dh));
-
   /* Fix byte ordering in our static structure */
   dh.versionLength = g_ntohl(dh.versionLength);
   dh.flagsCmdCode = g_ntohl(dh.flagsCmdCode);
   dh.vendorId = g_ntohl(dh.vendorId);
   dh.hopByHopId = g_ntohl(dh.hopByHopId);
   dh.endToEndId = g_ntohl(dh.endToEndId);
-
   if (dh.vendorId) {
 	strcpy(vendorName,
 		   diameter_vendor_to_str(dh.vendorId, TRUE));
   } else {
 	strcpy(vendorName, "None");
   }
-
-
   /* Do the bit twiddling */
   version = DIAM_GET_VERSION(dh);
   pktLength = DIAM_GET_LENGTH(dh);
   flags = DIAM_GET_FLAGS(dh);
   commandCode = DIAM_GET_COMMAND(dh);
+    break;
+    case DIAMETER_RFC:
+      tvb_memcpy(tvb, (guint8*) &dh2, offset, sizeof(dh2));
+      /* Fix byte ordering in our static structure */
+      dh2.versionLength = g_ntohl(dh2.versionLength);
+      dh2.flagsCmdCode = g_ntohl(dh2.flagsCmdCode);
+      dh2.applicationId = g_ntohl(dh2.applicationId);
+      dh2.hopByHopId = g_ntohl(dh2.hopByHopId);
+      dh2.endToEndId = g_ntohl(dh2.endToEndId);
+      if (dh2.applicationId) {
+ 	strcpy(applicationName,
+		   diameter_app_to_str(dh2.applicationId));
+      } else {
+  	strcpy(applicationName, "None");
+      }
+      /* Do the bit twiddling */
+      version = DIAM_GET_VERSION(dh2);
+      pktLength = DIAM_GET_LENGTH(dh2);
+      flags = DIAM_GET_FLAGS(dh2);
+      commandCode = DIAM_GET_COMMAND(dh2);
+    break;
+  }
+
 
   /* Set up our flags */
   if (check_col(pinfo->cinfo, COL_INFO) || tree) {
@@ -1110,7 +1180,16 @@
   }
 
   /* Set up our commandString */
+  switch(gbl_version) {
+    case DIAMETER_V16:
   strcpy(commandString, diameter_command_to_str(commandCode, dh.vendorId));
+    break;
+    case DIAMETER_RFC:
+      /* FIXME: in RFC, is applicationID needed to decode the command code?  */
+      strcpy(commandString, diameter_command_to_str(commandCode, dh2.applicationId));
+    break;
+  }
+
   if (flags & DIAM_FLAGS_R)
 	strcat(commandString, "-Request");
   else
@@ -1134,6 +1213,8 @@
   }
 
   if (check_col(pinfo->cinfo, COL_INFO)) {
+    switch(gbl_version) {
+      case DIAMETER_V16:
 	col_add_fstr(pinfo->cinfo, COL_INFO,
 				 "%s%s%s%s%s vendor=%s (hop-id=%u) (end-id=%u) RPE=%d%d%d",
 				 (BadPacket)?"***** Bad Packet!: ":"",
@@ -1147,6 +1228,23 @@
 				 (flags & DIAM_FLAGS_R)?1:0,
 				 (flags & DIAM_FLAGS_P)?1:0,
 				 (flags & DIAM_FLAGS_E)?1:0);
+      break;
+      case DIAMETER_RFC:
+	col_add_fstr(pinfo->cinfo, COL_INFO,
+				 "%s%s%s%s%s app=%s (hop-id=%u) (end-id=%u) RPE=%d%d%d",
+				 (BadPacket)?"***** Bad Packet!: ":"",
+				 (flags & DIAM_FLAGS_P)?"Proxyable ":"",
+				 (flags & DIAM_FLAGS_E)?" Error":"",
+				 ((BadPacket ||
+				   (flags & (DIAM_FLAGS_P|DIAM_FLAGS_E))) ?
+				   ": " : ""),
+				 commandString, applicationName,
+				 dh2.hopByHopId, dh2.endToEndId,
+				 (flags & DIAM_FLAGS_R)?1:0,
+				 (flags & DIAM_FLAGS_P)?1:0,
+				 (flags & DIAM_FLAGS_E)?1:0);
+      break;
+    }
   }
 
 
@@ -1194,20 +1292,37 @@
 							   tvb, offset, 3, commandCode, "Command Code: %s", commandString);
 	offset += 3;
 
+        switch(gbl_version) {
+          case DIAMETER_V16:
 	/* Vendor Id */
 	proto_tree_add_uint_format(diameter_tree,hf_diameter_vendor_id,
 							   tvb, offset, 4,	dh.vendorId, "Vendor-Id: %s", vendorName);
 	offset += 4;
-
 	/* Hop-by-hop Identifier */
 	proto_tree_add_uint(diameter_tree, hf_diameter_hopbyhopid,
 						tvb, offset, 4, dh.hopByHopId);
 	offset += 4;
-
 	/* End-to-end Identifier */
 	proto_tree_add_uint(diameter_tree, hf_diameter_endtoendid,
 						tvb, offset, 4, dh.endToEndId);
 	offset += 4;
+          break;
+          case DIAMETER_RFC:
+	    /* Application Id */
+	    proto_tree_add_uint_format(diameter_tree,hf_diameter_application_id,
+                                       tvb, offset, 4,	dh2.applicationId, "Application-Id: %s", applicationName);
+	    offset += 4;
+	    /* Hop-by-hop Identifier */
+	    proto_tree_add_uint(diameter_tree, hf_diameter_hopbyhopid,
+						tvb, offset, 4, dh2.hopByHopId);
+	    offset += 4;
+	    /* End-to-end Identifier */
+	    proto_tree_add_uint(diameter_tree, hf_diameter_endtoendid,
+						tvb, offset, 4, dh2.endToEndId);
+	    offset += 4;
+          break;
+        }
+
 
 	/* If we have a bad packet, don't bother trying to parse the AVPs */
 	if (BadPacket) {
@@ -1218,7 +1333,14 @@
 	/* Make the next tvbuff */
 
 	/* Update the lengths */
-	avplength= pktLength - sizeof(e_diameterhdr);
+        switch(gbl_version) {
+          case DIAMETER_V16:
+	    avplength= pktLength - sizeof(e_diameterhdr_v16);
+	  break;
+	  case DIAMETER_RFC:
+	    avplength= pktLength - sizeof(e_diameterhdr_rfc);
+	  break;
+	}
 
 	avp_tvb = tvb_new_subset(tvb, offset, avplength, avplength);
 	avptf = proto_tree_add_text(diameter_tree,
@@ -1503,7 +1625,7 @@
 
 	  if (flags & AVP_FLAGS_V) {
 		proto_tree_add_uint_format(avpi_tree, hf_diameter_avp_vendor_id,
-								   tvb, offset, 4, vendorId, vendorName);
+								   tvb, offset, 4, vendorId, "Vendor-Id: %s", vendorName);
 		offset += 4;
 	  }
 
@@ -1567,6 +1689,9 @@
 		}
 		break;
 	  case DIAMETER_IP_ADDRESS:
+    {
+      switch(gbl_version) {
+        case DIAMETER_V16:
 		if (avpDataLength == 4) {
 		  proto_tree_add_item(avpi_tree, hf_diameter_avp_data_v4addr,
 				      tvb, offset, avpDataLength, FALSE);
@@ -1577,7 +1702,28 @@
 		  proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
 					      tvb, offset, avpDataLength,
 					      tvb_get_ptr(tvb, offset, avpDataLength),
-					      "Error!  Bad Address Length");
+                  "Error! Bad Address Length (Address in RFC3588 format?)");
+          }
+          break;
+        case DIAMETER_RFC:
+          /* Indicate the address family */
+          proto_tree_add_item(avpi_tree, hf_diameter_avp_data_addrfamily,
+              tvb, offset, 2, FALSE);
+          if (tvb_get_ntohs(tvb, offset) == 0x0001) {
+            proto_tree_add_item(avpi_tree, hf_diameter_avp_data_v4addr,
+                    tvb, offset+2, avpDataLength-2, FALSE);
+          } else if (tvb_get_ntohs(tvb, offset) == 0x0002) {
+            proto_tree_add_item(avpi_tree, hf_diameter_avp_data_v6addr,
+                    tvb, offset+2, avpDataLength-2, FALSE);
+          } else {
+            proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
+                    tvb, offset, avpDataLength,
+                    tvb_get_ptr(tvb, offset, avpDataLength),
+                    "Error! Can't Parse Address Family %d (Address in draft v16 format?)",
+                    (int)tvb_get_ntohs(tvb, offset));
+          }
+          break;
+      }
 		}
 		break;
 
@@ -1814,6 +1960,9 @@
 		{ &hf_diameter_vendor_id,
 		  { "VendorId",	"diameter.vendorId", FT_UINT32, BASE_DEC, NULL,
 			0x0,"", HFILL }},
+		{ &hf_diameter_application_id,
+		  { "ApplicationId",	"diameter.applicationId", FT_UINT32, BASE_DEC, NULL,
+			0x0,"", HFILL }},
 		{ &hf_diameter_hopbyhopid,
 		  { "Hop-by-Hop Identifier", "diameter.hopbyhopid", FT_UINT32,
 		    BASE_HEX, NULL, 0x0, "", HFILL }},
@@ -1877,6 +2026,9 @@
 		{ &hf_diameter_avp_data_string,
 		  { "Value","diameter.avp.data.string", FT_STRING, BASE_NONE,
 		    NULL, 0x0, "", HFILL }},
+		{ &hf_diameter_avp_data_addrfamily,
+		  { "Address Family","diameter.avp.data.addrfamily", FT_UINT16, BASE_DEC,
+		    VALS(diameter_avp_data_addrfamily_vals), 0x0, "", HFILL }},
 		{ &hf_diameter_avp_data_v4addr,
 		  { "IPv4 Address","diameter.avp.data.v4addr", FT_IPv4, BASE_NONE,
 		    NULL, 0x0, "", HFILL }},
@@ -1908,6 +2060,9 @@
 	/* Register a configuration option for port */
 	diameter_module = prefs_register_protocol(proto_diameter,
 											  proto_reg_handoff_diameter);
+	/* Register a configuration option for Diameter version */
+  prefs_register_enum_preference(diameter_module, "version", "Diameter version", "Standard version used for decoding", (gint *)&gbl_version, options, FALSE);
+
 	prefs_register_uint_preference(diameter_module, "tcp.port",
 								   "Diameter TCP Port",
 								   "Set the TCP port for Diameter messages",
@@ -1942,8 +2097,9 @@
 
 	/* Desegmentation */
 	prefs_register_bool_preference(diameter_module, "desegment",
-								   "Desegment all Diameter messages\nspanning multiple TCP segments",
-								   "Whether the Diameter dissector should desegment all messages spanning multiple TCP segments",
+                                   "Reassemble Diameter messages\nspanning multiple TCP segments",
+								   "Whether the Diameter dissector should reassemble messages spanning multiple TCP segments."
+								   " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 								   &gbl_diameter_desegment);
 	/* Allow zero as valid application ID */
 	prefs_register_bool_preference(diameter_module, "allow_zero_as_app_id",
diff -urN ethereal-0.10.6/epan/dissectors/packet-distcc.c ethereal-0.10.7/epan/dissectors/packet-distcc.c
--- ethereal-0.10.6/epan/dissectors/packet-distcc.c	2004-08-12 17:41:58.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-distcc.c	2004-10-20 17:34:38.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 2003, Brad Hards <bradh@frogmouth.net>
  * Copyright 2003, Ronnie Sahlberg, added TCP desegmentation.
  *
- * $Id: packet-distcc.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-distcc.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -39,7 +39,7 @@
 #include <epan/packet.h>
 #include <epan/strutil.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 
 
 static int proto_distcc = -1;
@@ -405,8 +405,9 @@
 				   10,
 				   &glb_distcc_tcp_port);
 	prefs_register_bool_preference(distcc_module, "desegment_distcc_over_tcp",
-		"Desegment all DISTCC-over-TCP messages",
-		"Whether the DISTCC dissector should desegment all DISTCC-over-TCP messages",
+        "Reassemble DISTCC-over-TCP messages\nspanning multiple TCP segments",
+		"Whether the DISTCC dissector should reassemble messages spanning multiple TCP segments."
+		" To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 		&distcc_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-dnp.c ethereal-0.10.7/epan/dissectors/packet-dnp.c
--- ethereal-0.10.6/epan/dissectors/packet-dnp.c	2004-08-12 17:42:22.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-dnp.c	2004-10-20 17:34:53.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for DNP dissection
  * Copyright 2003, Graham Bloice <graham.bloice@trihedral.com>
  *
- * $Id: packet-dnp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-dnp.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -39,7 +39,7 @@
 #endif
 
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "reassemble.h"
 
 /* DNP 3.0 constants */
diff -urN ethereal-0.10.6/epan/dissectors/packet-dns.c ethereal-0.10.7/epan/dissectors/packet-dns.c
--- ethereal-0.10.6/epan/dissectors/packet-dns.c	2004-08-12 17:42:27.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-dns.c	2004-10-20 17:34:59.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-dns.c
  * Routines for DNS packet disassembly
  *
- * $Id: packet-dns.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-dns.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -37,11 +37,11 @@
 #include <glib.h>
 #include <epan/ipv6-utils.h>
 #include <epan/packet.h>
-#include "ipproto.h"
+#include <epan/ipproto.h>
 #include <epan/addr_resolv.h>
 #include "packet-dns.h"
 #include "packet-tcp.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 static int proto_dns = -1;
 static int hf_dns_length = -1;
@@ -141,6 +141,7 @@
 #define T_RRSIG         46              /* future RFC 2535bis */
 #define T_NSEC          47              /* future RFC 2535bis */
 #define T_DNSKEY        48              /* future RFC 2535bis */
+#define T_IPSECKEY      49              /* still TBD draft-ietf-ipseckey-rr */
 #define T_TKEY		249		/* Transaction Key (RFC 2930) */
 #define T_TSIG		250		/* Transaction Signature (RFC 2845) */
 #define T_WINS		65281		/* Microsoft's WINS RR */
@@ -339,7 +340,8 @@
     NULL,
     "RRSIG",                            /* future RFC 2535bis */
     "NSEC",                             /* future RFC 2535bis */
-    "DNSKEY"                            /* future RFC 2535bis */
+    "DNSKEY",                           /* future RFC 2535bis */
+    "IPSECKEY"                          /* draft-ietf-ipseckey-rr */
   };
 
   if (type < sizeof(type_names)/sizeof(type_names[0]))
@@ -438,7 +440,8 @@
     NULL,
     "RR signature",                     /* future RFC 2535bis */
     "Next secured",                     /* future RFC 2535bis */
-    "DNS public key"                    /* future RFC 2535bis */
+    "DNS public key",                   /* future RFC 2535bis */
+    "key to use with IPSEC"             /* draft-ietf-ipseckey-rr */
   };
   static char unkbuf[7+1+2+1+4+1+1+10+1+1];	/* "Unknown RR type (%u)" */
 
@@ -1419,6 +1422,74 @@
       }
     }
     break;
+  case T_IPSECKEY:
+    {
+      int rr_len = data_len;
+      guint8 gw_type, algo;
+      const guint8 *addr;
+      char gw[MAXDNAME];
+      int gw_name_len;
+      static const value_string gw_algo[] = {
+	  { 1,     "DSA" },
+	  { 2,     "RSA" },
+	  { 0,      NULL }
+      };
+      
+
+      if( dns_tree != NULL ) {
+	if(rr_len < 3) 
+	  goto bad_rr;
+
+	proto_tree_add_text(rr_tree, tvb, cur_offset, 1, "Gateway precedence: %u",
+		tvb_get_guint8(tvb, cur_offset));
+	cur_offset += 1;
+	rr_len -= 1;
+
+	gw_type = tvb_get_guint8(tvb, cur_offset);
+	cur_offset += 1;
+	rr_len -= 1;
+
+	algo = tvb_get_guint8(tvb, cur_offset);
+	proto_tree_add_text(rr_tree, tvb, cur_offset, 1, "Algorithm: %s",
+		val_to_str(algo, gw_algo, "Unknown (0x%02X)"));
+	cur_offset += 1;
+	rr_len -= 1;
+	switch( gw_type ) {
+	   case 0:
+	     proto_tree_add_text(rr_tree, tvb, cur_offset, 0, "Gateway: no gateway");
+	     break;
+	   case 1:
+	     addr = tvb_get_ptr(tvb, cur_offset, 4);
+	     proto_tree_add_text(rr_tree, tvb, cur_offset, 4, "Gateway: %s",
+				 ip_to_str(addr) );
+
+	     cur_offset += 4;
+	     rr_len -= 4;
+	     break;
+	   case 2:
+	     addr = tvb_get_ptr(tvb, cur_offset, 16);
+	     proto_tree_add_text(rr_tree, tvb, cur_offset, 16, "Gateway: %s", 
+				 ip6_to_str((const struct e_in6_addr *)addr));
+
+	     cur_offset += 16;
+	     rr_len -= 16;
+	     break;
+	   case 3:
+	     gw_name_len = get_dns_name(tvb, cur_offset, dns_data_offset, gw, sizeof(gw));
+	     proto_tree_add_text(rr_tree, tvb, cur_offset, gw_name_len, "Gateway: %s", gw);
+
+	     cur_offset += gw_name_len;
+	     rr_len -= gw_name_len;	     
+	     break;
+	   default:
+	     proto_tree_add_text(rr_tree, tvb, cur_offset, 0, "Gateway: Unknow gateway type(%u)", gw_type);
+	     break;
+	}
+	if (rr_len != 0)
+	  proto_tree_add_text(rr_tree, tvb, cur_offset, rr_len, "Public key");	
+      }
+    }
+    break;
 
   case T_AAAA:
     {
@@ -2488,8 +2559,9 @@
 
   dns_module = prefs_register_protocol(proto_dns, NULL);
   prefs_register_bool_preference(dns_module, "desegment_dns_messages",
-    "Desegment all DNS messages spanning multiple TCP segments",
-    "Whether the DNS dissector should desegment all messages spanning multiple TCP segments",
+    "Reassemble DNS messages spanning multiple TCP segments",
+    "Whether the DNS dissector should reassemble messages spanning multiple TCP segments."
+    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
     &dns_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-dsi.c ethereal-0.10.7/epan/dissectors/packet-dsi.c
--- ethereal-0.10.6/epan/dissectors/packet-dsi.c	2004-08-12 17:42:24.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-dsi.c	2004-10-20 17:34:53.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for dsi packet dissection
  * Copyright 2001, Randy McEoin <rmceoin@pe.com>
  *
- * $Id: packet-dsi.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-dsi.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <glib.h>
 #include <epan/packet.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-tcp.h"
 #include "packet-afp.h"
 
@@ -828,8 +828,9 @@
 
   dsi_module = prefs_register_protocol(proto_dsi, NULL);
   prefs_register_bool_preference(dsi_module, "desegment",
-    "Desegment all DSI messages spanning multiple TCP segments",
-    "Whether the DSI dissector should desegment all messages spanning multiple TCP segments",
+    "Reassemble DSI messages spanning multiple TCP segments",
+    "Whether the DSI dissector should reassemble messages spanning multiple TCP segments."
+    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
     &dsi_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-dvmrp.c ethereal-0.10.7/epan/dissectors/packet-dvmrp.c
--- ethereal-0.10.6/epan/dissectors/packet-dvmrp.c	2004-08-12 17:42:29.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-dvmrp.c	2004-10-20 17:35:00.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-dvmrp.c   2001 Ronnie Sahlberg <See AUTHORS for email>
  * Routines for IGMP/DVMRP packet disassembly
  *
- * $Id: packet-dvmrp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-dvmrp.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -60,7 +60,7 @@
 #include <glib.h>
 
 #include <epan/packet.h>
-#include "ipproto.h"
+#include <epan/ipproto.h>
 #include "packet-igmp.h"
 #include "packet-dvmrp.h"
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-eap.c ethereal-0.10.7/epan/dissectors/packet-eap.c
--- ethereal-0.10.6/epan/dissectors/packet-eap.c	2004-08-12 17:42:10.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-eap.c	2004-10-20 17:34:49.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for EAP Extensible Authentication Protocol dissection
  * RFC 2284, RFC 3748
  *
- * $Id: packet-eap.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-eap.c 12167 2004-10-01 07:29:22Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -75,8 +75,10 @@
 #define EAP_TYPE_LEAP	17
 #define EAP_TYPE_SIM	18
 #define EAP_TYPE_TTLS	21
+#define EAP_TYPE_AKA	23
 #define EAP_TYPE_PEAP	25
 #define EAP_TYPE_MSCHAPV2 26
+#define EAP_TYPE_FAST	43
 
 static const value_string eap_type_vals[] = {
   {EAP_TYPE_ID,  "Identity [RFC3748]" },
@@ -101,7 +103,7 @@
   { 20,          "SRP-SHA1 Part 2 [Carlson]" },
   {EAP_TYPE_TTLS,"EAP-TTLS [Funk]" },
   { 22,          "Remote Access Service [Fields]" },
-  { 23,          "UMTS Authentication and Key Agreement [Haverinen]" },
+  {EAP_TYPE_AKA, "UMTS Authentication and Key Agreement [Haverinen]" },
   { 24,          "EAP-3Com Wireless [Young]" },
   {EAP_TYPE_PEAP,"PEAP [Palekar]" },
   {EAP_TYPE_MSCHAPV2,"MS-EAP-Authentication [Palekar]" },
@@ -121,7 +123,7 @@
   { 40,          "DeviceConnect EAP [Pitard]" },
   { 41,          "EAP-SPEKE [Zick]" },
   { 42,          "EAP-MOBAC [Rixom]" },
-  { 43,          "EAP-FAST [Cam-Winget]" },
+  {EAP_TYPE_FAST,"EAP-FAST [Cam-Winget]" },
   { 44,          "ZoneLabs EAP (ZLXEAP) [Bogue]" },
   { 45,          "EAP-Link [Zick]" },
   { 254,         "RESERVED for the Expanded Type [RFC3748]" },
@@ -217,6 +219,7 @@
 static gint ett_eaptls_fragment  = -1;
 static gint ett_eaptls_fragments = -1;
 static gint ett_eap_sim_attr = -1;
+static gint ett_eap_aka_attr = -1;
 
 static const fragment_items eaptls_frag_items = {
 	&ett_eaptls_fragment,
@@ -427,14 +430,15 @@
 		{ 15, "AT_VERSION_LIST" },
 		{ 16, "AT_SELECTED_VERSION" },
 		{ 17, "AT_FULLAUTH_ID_REQ" },
-		{ 18, "AT_COUNTER" },
-		{ 19, "AT_COUNTER_TOO_SMALL" },
-		{ 20, "AT_NONCE_S" },
-		{ 21, "AT_CLIENT_ERROR_CODE" },
+		{ 19, "AT_COUNTER" },
+		{ 20, "AT_COUNTER_TOO_SMALL" },
+		{ 21, "AT_NONCE_S" },
+		{ 22, "AT_CLIENT_ERROR_CODE" },
 		{ 129, "AT_IV" },
 		{ 130, "AT_ENCR_DATA" },
 		{ 132, "AT_NEXT_PSEUDONYM" },
 		{ 133, "AT_NEXT_REAUTH_ID" },
+		{ 135, "AT_RESULT_IND" },
 		{ 0, NULL }
 	};
 
@@ -491,6 +495,107 @@
 	}
 }
 
+static void
+dissect_eap_aka(proto_tree *eap_tree, tvbuff_t *tvb, int offset, gint size)
+{
+	gint left = size;
+	enum {
+		AKA_CHALLENGE = 1,
+		AKA_AUTHENTICATION_REJECT = 2,
+		AKA_SYNCHRONIZATION_FAILURE = 4,
+		AKA_IDENTITY = 5,
+		AKA_NOTIFICATION = 12,
+		AKA_REAUTHENTICATION = 13,
+		AKA_CLIENT_ERROR = 14
+	} subtype;
+	static const value_string subtypes[] = {
+		{ AKA_CHALLENGE, "AKA-Challenge" },
+		{ AKA_AUTHENTICATION_REJECT, "AKA-Authentication-Reject" },
+		{ AKA_SYNCHRONIZATION_FAILURE, "AKA-Synchronization-Failure" },
+		{ AKA_IDENTITY, "AKA-Identity" },
+		{ AKA_NOTIFICATION, "Notification" },
+		{ AKA_REAUTHENTICATION, "Re-authentication" },
+		{ AKA_CLIENT_ERROR, "Client-Error" },
+		{ 0, NULL }
+	};
+	static const value_string attributes[] = {
+		{ 1, "AT_RAND" },
+		{ 2, "AT_AUTN" },
+		{ 3, "AT_RES" },
+		{ 4, "AT_AUTS" },
+		{ 6, "AT_PADDING" },
+		{ 10, "AT_PERMANENT_ID_REQ" },
+		{ 11, "AT_MAC" },
+		{ 12, "AT_NOTIFICATION" },
+		{ 13, "AT_ANY_ID_REQ" },
+		{ 14, "AT_IDENTITY" },
+		{ 17, "AT_FULLAUTH_ID_REQ" },
+		{ 19, "AT_COUNTER" },
+		{ 20, "AT_COUNTER_TOO_SMALL" },
+		{ 21, "AT_NONCE_S" },
+		{ 22, "AT_CLIENT_ERROR_CODE" },
+		{ 129, "AT_IV" },
+		{ 130, "AT_ENCR_DATA" },
+		{ 132, "AT_NEXT_PSEUDONYM" },
+		{ 133, "AT_NEXT_REAUTH_ID" },
+		{ 134, "AT_CHECKCODE" },
+		{ 135, "AT_RESULT_IND" },
+		{ 0, NULL }
+	};
+
+	subtype = tvb_get_guint8(tvb, offset);
+	proto_tree_add_text(eap_tree, tvb, offset, 1,
+			    "subtype: %d (%s)", 
+			    subtype, val_to_str(subtype, subtypes, "Unknown"));
+
+	offset++;
+	left--;
+
+	if (left < 2)
+		return;
+	proto_tree_add_text(eap_tree, tvb, offset, 2, "Reserved: %d",
+			    tvb_get_ntohs(tvb, offset));
+	offset += 2;
+	left -= 2;
+
+	/* Rest of EAP-AKA data is in Type-Len-Value format. */
+	while (left >= 2) {
+		guint8 type, length;
+		proto_item *pi;
+		proto_tree *attr_tree;
+		int aoffset;
+		gint aleft;
+		aoffset = offset;
+		type = tvb_get_guint8(tvb, aoffset);
+		length = tvb_get_guint8(tvb, aoffset + 1);
+		aleft = 4 * length;
+
+		pi = proto_tree_add_text(eap_tree, tvb, aoffset, aleft,
+					 "Attribute: %s", 
+					 val_to_str(type, attributes,
+						    "Unknown %u"));
+		attr_tree = proto_item_add_subtree(pi, ett_eap_aka_attr);
+		proto_tree_add_text(attr_tree, tvb, aoffset, 1,
+				    "Type: %u", type);
+		aoffset++;
+		aleft--;
+
+		if (aleft <= 0)
+			break;
+		proto_tree_add_text(attr_tree, tvb, aoffset, 1,
+				    "Length: %d (%d bytes)",
+				    length, 4 * length);
+		aoffset++;
+		aleft--;
+		proto_tree_add_text(attr_tree, tvb, aoffset, aleft,
+				    "Value: %s",
+				    tvb_bytes_to_str(tvb, aoffset, aleft));
+
+		offset += 4 * length;
+		left -= 4 * length;
+	}
+}
+
 static int
 dissect_eap_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
 		 gboolean fragmented)
@@ -695,6 +800,7 @@
       /*********************************************************************
                                   EAP-TLS
       **********************************************************************/
+      case EAP_TYPE_FAST:
       case EAP_TYPE_PEAP:
       case EAP_TYPE_TTLS:
       case EAP_TYPE_TLS:
@@ -717,9 +823,12 @@
 			      has_length                      ? "Length ":"",
 			      more_fragments                  ? "More "  :"",
 			      test_flag(flags,EAP_TLS_FLAG_S) ? "Start " :"");
-	  if (eap_type == EAP_TYPE_PEAP) {
+	  if (eap_type == EAP_TYPE_PEAP || eap_type == EAP_TYPE_TTLS ||
+	      eap_type == EAP_TYPE_FAST) {
 	    proto_tree_add_text(eap_tree, tvb, offset, 1,
-				"PEAP version %d",
+				"%s version %d",
+				eap_type == EAP_TYPE_PEAP ? "PEAP" :
+				(eap_type == EAP_TYPE_TTLS ? "TTLS" : "FAST"),
 				flags & EAP_PEAP_FLAG_VERSION);
 	  }
 	}
@@ -1046,13 +1155,20 @@
 	  dissect_eap_mschapv2(eap_tree, tvb, offset, size);
 	break; /* EAP_TYPE_MSCHAPV2 */
       /*********************************************************************
-              EAP-SIM - draft-haverinen-pppext-eap-sim-12.txt
+              EAP-SIM - draft-haverinen-pppext-eap-sim-13.txt
       **********************************************************************/
       case EAP_TYPE_SIM:
 	if (tree)
 	  dissect_eap_sim(eap_tree, tvb, offset, size);
 	break; /* EAP_TYPE_SIM */
       /*********************************************************************
+              EAP-AKA - draft-arkko-pppext-eap-aka-12.txt
+      **********************************************************************/
+      case EAP_TYPE_AKA:
+	if (tree)
+	  dissect_eap_aka(eap_tree, tvb, offset, size);
+	break; /* EAP_TYPE_AKA */
+      /*********************************************************************
       **********************************************************************/
       default:
         if (tree) {
@@ -1138,6 +1254,7 @@
 	&ett_eaptls_fragment,
 	&ett_eaptls_fragments,
 	&ett_eap_sim_attr,
+	&ett_eap_aka_attr,
   };
 
   proto_eap = proto_register_protocol("Extensible Authentication Protocol",
diff -urN ethereal-0.10.6/epan/dissectors/packet-eigrp.c ethereal-0.10.7/epan/dissectors/packet-eigrp.c
--- ethereal-0.10.6/epan/dissectors/packet-eigrp.c	2004-08-12 17:42:01.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-eigrp.c	2004-10-20 17:34:41.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for EIGRP dissection
  * Copyright 2000, Paul Ionescu <paul@acorp.ro>
  *
- * $Id: packet-eigrp.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-eigrp.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -33,7 +33,7 @@
 
 #include <epan/atalk-utils.h>
 #include <epan/addr_and_mask.h>
-#include "ipproto.h"
+#include <epan/ipproto.h>
 #include "packet-ipx.h"
 
 /*
diff -urN ethereal-0.10.6/epan/dissectors/packet-enip.c ethereal-0.10.7/epan/dissectors/packet-enip.c
--- ethereal-0.10.6/epan/dissectors/packet-enip.c	2004-08-12 17:42:08.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-enip.c	2004-10-20 17:34:46.000000000 -0500
@@ -6,7 +6,7 @@
  * Magnus Hansson <mah@hms.se>
  * Joakim Wiberg <jow@hms.se>
  *
- * $Id: packet-enip.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-enip.c 12070 2004-09-23 17:34:35Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -44,17 +44,19 @@
 #include <epan/packet.h>
 #include <prefs.h>
 #include "packet-tcp.h"
+#include "packet-cip.h"
 
-/* Defines */
-#define ENIP_ENCAP_PORT		44818	/* EtherNet/IP located on port 44818 */
+
+/* Communication Ports */
+#define ENIP_ENCAP_PORT		44818	/* EtherNet/IP located on port 44818    */
 #define ENIP_IO_PORT		   2222	/* EtherNet/IP IO located on port 2222  */
 
-/* return codes of function classifying packets as query/response */
+/* Return codes of function classifying packets as query/response */
 #define REQUEST_PACKET	   0
 #define RESPONSE_PACKET		1
 #define CANNOT_CLASSIFY		2
 
-/* CIP Encapsulation function codes */
+/* EtherNet/IP function codes */
 #define NOP                0x0000
 #define LIST_SERVICES      0x0004
 #define LIST_IDENTITY      0x0063
@@ -66,7 +68,7 @@
 #define INDICATE_STATUS    0x0072
 #define CANCEL             0x0073
 
-/* CIP Encapsulation status codes */
+/* EtherNet/IP status codes */
 #define SUCCESS               0x0000
 #define INVALID_CMD           0x0001
 #define NO_RESOURCES          0x0002
@@ -75,7 +77,7 @@
 #define INVALID_LENGTH        0x0065
 #define UNSUPPORTED_PROT_REV  0x0069
 
-/* CIP Common Data Format Type IDs */
+/* EtherNet/IP Common Data Format Type IDs */
 #define CDF_NULL              0x0000
 #define LIST_IDENTITY_RESP    0x000C
 #define CONNECTION_BASED      0x00A1
@@ -86,204 +88,54 @@
 #define SOCK_ADR_INFO_TO      0x8001
 #define SEQ_ADDRESS           0x8002
 
-/* CIP Service Codes */
-#define SC_GET_ATT_ALL           0x01
-#define SC_SET_ATT_ALL           0x02
-#define SC_GET_ATT_LIST          0x03
-#define SC_SET_ATT_LIST          0x04
-#define SC_RESET                 0x05
-#define SC_START                 0x06
-#define SC_STOP                  0x07
-#define SC_CREATE                0x08
-#define SC_DELETE                0x09
-#define SC_MULT_SERV_PACK        0x0A
-#define SC_APPLY_ATTRIBUTES      0x0D
-#define SC_GET_ATT_SINGLE        0x0E
-#define SC_SET_ATT_SINGLE        0x10
-#define SC_FIND_NEXT_OBJ_INST    0x11
-#define SC_RESTOR                0x15
-#define SC_SAVE                  0x16
-#define SC_NO_OP                 0x17
-#define SC_GET_MEMBER            0x18
-#define SC_SET_MEMBER            0x19
-
-#define SC_FWD_CLOSE             0x4E
-#define SC_UNCON_SEND            0x52
-#define SC_FWD_OPEN              0x54
-
-
-
-/* CIP Genral status codes */
-#define CI_GRC_SUCCESS              0x00
-#define CI_GRC_FAILURE              0x01
-#define CI_GRC_NO_RESOURCE          0x02
-#define CI_GRC_BAD_DATA             0x03
-#define CI_GRC_BAD_PATH             0x04
-#define CI_GRC_BAD_CLASS_INSTANCE   0x05
-#define CI_GRC_PARTIAL_DATA         0x06
-#define CI_GRC_CONN_LOST            0x07
-#define CI_GRC_BAD_SERVICE          0x08
-#define CI_GRC_BAD_ATTR_DATA        0x09
-#define CI_GRC_ATTR_LIST_ERROR      0x0A
-#define CI_GRC_ALREADY_IN_MODE      0x0B
-#define CI_GRC_BAD_OBJ_MODE         0x0C
-#define CI_GRC_OBJ_ALREADY_EXISTS   0x0D
-#define CI_GRC_ATTR_NOT_SETTABLE    0x0E
-#define CI_GRC_PERMISSION_DENIED    0x0F
-#define CI_GRC_DEV_IN_WRONG_STATE   0x10
-#define CI_GRC_REPLY_DATA_TOO_LARGE 0x11
-#define CI_GRC_FRAGMENT_PRIMITIVE   0x12
-#define CI_GRC_CONFIG_TOO_SMALL     0x13
-#define CI_GRC_UNDEFINED_ATTR       0x14
-#define CI_GRC_CONFIG_TOO_BIG       0x15
-#define CI_GRC_OBJ_DOES_NOT_EXIST   0x16
-#define CI_GRC_NO_FRAGMENTATION     0x17
-#define CI_GRC_DATA_NOT_SAVED       0x18
-#define CI_GRC_DATA_WRITE_FAILURE   0x19
-#define CI_GRC_REQUEST_TOO_LARGE    0x1A
-#define CI_GRC_RESPONSE_TOO_LARGE   0x1B
-#define CI_GRC_MISSING_LIST_DATA    0x1C
-#define CI_GRC_INVALID_LIST_STATUS  0x1D
-#define CI_GRC_SERVICE_ERROR        0x1E
-#define CI_GRC_CONN_RELATED_FAILURE 0x1F
-#define CI_GRC_INVALID_PARAMETER    0x20
-#define CI_GRC_WRITE_ONCE_FAILURE   0x21
-#define CI_GRC_INVALID_REPLY        0x22
-#define CI_GRC_BAD_KEY_IN_PATH      0x25
-#define CI_GRC_BAD_PATH_SIZE        0x26
-#define CI_GRC_UNEXPECTED_ATTR      0x27
-#define CI_GRC_INVALID_MEMBER       0x28
-#define CI_GRC_MEMBER_NOT_SETTABLE  0x29
-
-#define CI_GRC_STILL_PROCESSING     0xFF
-
-
-/* IOI Path types */
-#define CI_SEGMENT_TYPE_MASK        0xE0
-
-#define CI_PATH_SEGMENT             0x00
-#define CI_LOGICAL_SEGMENT          0x20
-#define CI_NETWORK_SEGMENT          0x40
-#define CI_SYMBOLIC_SEGMENT         0x60
-#define CI_DATA_SEGMENT             0x80
-
-#define CI_LOGICAL_SEG_TYPE_MASK    0x1C
-#define CI_LOGICAL_SEG_CLASS_ID     0x00
-#define CI_LOGICAL_SEG_INST_ID      0x04
-#define CI_LOGICAL_SEG_MBR_ID       0x08
-#define CI_LOGICAL_SEG_CON_POINT    0x0C
-#define CI_LOGICAL_SEG_ATTR_ID      0x10
-#define CI_LOGICAL_SEG_SPECIAL      0x14
-#define CI_LOGICAL_SEG_SERV_ID      0x18
-#define CI_LOGICAL_SEG_RES_1        0x1C
-
-#define CI_LOGICAL_SEG_FORMAT_MASK  0x03
-#define CI_LOGICAL_SEG_8_BIT        0x00
-#define CI_LOGICAL_SEG_16_BIT       0x01
-#define CI_LOGICAL_SEG_32_BIT       0x02
-#define CI_LOGICAL_SEG_RES_2        0x03
-#define CI_LOGICAL_SEG_E_KEY        0x00
-
-#define CI_E_KEY_FORMAT_VAL         0x04
-
-#define CI_DATA_SEG_SIMPLE          0x80
-#define CI_DATA_SEG_SYMBOL          0x91
-
-#define CI_NETWORK_SEG_TYPE_MASK    0x07
-#define CI_NETWORK_SEG_SCHEDULE     0x01
-#define CI_NETWORK_SEG_FIXED_TAG    0x02
-#define CI_NETWORK_SEG_PROD_INHI    0x03
-
-
-/* Device Profile:s */
-#define DP_GEN_DEV                           0x00
-#define DP_AC_DRIVE	                        0x02
-#define DP_MOTOR_OVERLOAD                    0x03
-#define DP_LIMIT_SWITCH                      0x04
-#define DP_IND_PROX_SWITCH                   0x05
-#define DP_PHOTO_SENSOR                      0x06
-#define DP_GENP_DISC_IO                      0x07
-#define DP_RESOLVER                          0x09
-#define DP_COM_ADAPTER                       0x0C
-#define DP_POS_CNT                           0x10
-#define DP_DC_DRIVE                          0x13
-#define DP_CONTACTOR                         0x15
-#define DP_MOTOR_STARTER                     0x16
-#define DP_SOFT_START                        0x17
-#define DP_HMI                               0x18
-#define DP_MASS_FLOW_CNT                     0x1A
-#define DP_PNEUM_VALVE                       0x1B
-#define DP_VACUUM_PRES_GAUGE                 0x1C
-
-
 
 /* Initialize the protocol and registered fields */
-static int proto_cipencap              = -1;
-static int hf_enip_command             = -1;
-static int hf_enip_ifacehnd            = -1;
-
-static int hf_enip_cpf_typeid          = -1;
-
-static int hf_enip_ucm_sc              = -1;
-static int hf_enip_ucm_rr              = -1;
-static int hf_enip_ucm_path            = -1;
-static int hf_enip_ucm_genstat         = -1;
-static int hf_enip_cpf_lir_sinfamily   = -1;
-static int hf_enip_cpf_lir_sinport     = -1;
-static int hf_enip_cpf_lir_sinaddr     = -1;
-static int hf_enip_cpf_lir_sinzero     = -1;
-static int hf_enip_cpf_lir_devtype     = -1;
-static int hf_enip_cpf_lir_prodcode    = -1;
-static int hf_enip_cpf_lir_status      = -1;
-static int hf_enip_cpf_lir_sernbr      = -1;
-static int hf_enip_cpf_lir_namelength  = -1;
-static int hf_enip_cpf_lir_name        = -1;
-static int hf_enip_cpf_lir_state       = -1;
-
-static int hf_enip_cpf_sat_connid      = -1;
-static int hf_enip_cpf_sat_seqnum      = -1;
-
-static int hf_enip_vendors             = -1;
-
-static int hf_enip_ucm_fwo_comp        = -1;
-static int hf_enip_ucm_fwo_mrev        = -1;
-
-static int hf_enip_ucm_fwo_con_size    = -1;
-static int hf_enip_ucm_fwo_fixed_var   = -1;
-static int hf_enip_ucm_fwo_prio        = -1;
-static int hf_enip_ucm_fwo_typ         = -1;
-static int hf_enip_ucm_fwo_own         = -1;
-
-static int hf_enip_ucm_fwo_dir         = -1;
-static int hf_enip_ucm_fwo_trigg       = -1;
-static int hf_enip_ucm_fwo_class       = -1;
-
-static int hf_enip_cpf_lsr_tcp         = -1;
-static int hf_enip_cpf_lsr_udp         = -1;
+static int proto_enip              = -1;
 
+static int hf_enip_command         = -1;
+static int hf_enip_options         = -1;
+static int hf_enip_sendercontex    = -1;
+static int hf_enip_status          = -1;
+static int hf_enip_session         = -1;
+
+static int hf_enip_lir_sinfamily   = -1;
+static int hf_enip_lir_sinport     = -1;
+static int hf_enip_lir_sinaddr     = -1;
+static int hf_enip_lir_sinzero     = -1;
+
+static int hf_enip_lir_vendor     = -1;
+static int hf_enip_lir_devtype     = -1;
+static int hf_enip_lir_prodcode    = -1;
+static int hf_enip_lir_status      = -1;
+static int hf_enip_lir_serial      = -1;
+static int hf_enip_lir_name        = -1;
+static int hf_enip_lir_state       = -1;
+
+static int hf_enip_lsr_tcp         = -1;
+static int hf_enip_lsr_udp         = -1;
+
+static int hf_enip_srrd_ifacehnd   = -1;
+
+static int hf_enip_sud_ifacehnd    = -1;
+
+static int hf_enip_cpf_typeid      = -1;
+static int hf_enip_cpf_sai_connid  = -1;
+static int hf_enip_cpf_sai_seqnum  = -1;
 
 /* Initialize the subtree pointers */
-static gint ett_cipencap   = -1;
-static gint ett_cip        = -1;
-static gint ett_cpf        = -1;
-static gint ett_path       = -1;
-static gint ett_ekey_path  = -1;
-static gint ett_cia_path   = -1;
-static gint ett_data_seg   = -1;
-
-static gint ett_cipencaph  = -1;
-static gint ett_csf        = -1;
-static gint ett_rrsc       = -1;
-static gint ett_sockadd    = -1;
-static gint ett_mcsc       = -1;
-static gint ett_ncp        = -1;
-static gint ett_lsrcf      = -1;
-static gint ett_mes_req    = -1;
-static gint ett_cmd_data   = -1;
-static gint ett_port_path  = -1;
-static gint ett_mult_ser   = -1;
+static gint ett_enip          = -1;
+static gint ett_count_tree    = -1;
+static gint ett_type_tree     = -1;
+static gint ett_command_tree  = -1;
+static gint ett_sockadd       = -1;
+static gint ett_lsrcf         = -1;
+
+static proto_tree          *g_tree;
+static dissector_table_t   subdissector_srrd_table;
+static dissector_table_t   subdissector_sud_table;
+static dissector_handle_t  data_handle;
 
-static gboolean cipencap_desegment = TRUE;
+static gboolean enip_desegment = TRUE;
 
 /* Translate function to string - Encapsulation commands */
 static const value_string encap_cmd_vals[] = {
@@ -301,7 +153,6 @@
 	{ 0,				      NULL                 }
 };
 
-
 /* Translate function to string - Encapsulation status */
 static const value_string encap_status_vals[] = {
 	{ SUCCESS,			      "Success" },
@@ -330,52 +181,6 @@
 	{ 0,				         NULL }
 };
 
-/* Translate function to string - CIP Service codes */
-static const value_string encap_sc_vals[] = {
-	{ SC_GET_ATT_ALL,	         "Get Attribute All" },
-	{ SC_SET_ATT_ALL,	         "Set Attribute All" },
-	{ SC_GET_ATT_LIST,	      "Get Attribute List" },
-	{ SC_SET_ATT_LIST,	      "Set Attribute List" },
-	{ SC_RESET,	               "Reset" },
-   { SC_START,	               "Start" },
-   { SC_STOP,	               "Stop" },
-   { SC_CREATE,	            "Create" },
-   { SC_DELETE,	            "Delete" },
-   { SC_APPLY_ATTRIBUTES,	   "Apply Attributes" },
-	{ SC_GET_ATT_SINGLE,	      "Get Attribute Single" },
-	{ SC_SET_ATT_SINGLE,	      "Set Attribute Single" },
-   { SC_FIND_NEXT_OBJ_INST,	"Find Next Object Instance" },
-   { SC_RESTOR,	            "Restore" },
-	{ SC_SAVE,	               "Save" },
-	{ SC_NO_OP,	               "Nop" },
-	{ SC_GET_MEMBER,	         "Get Member" },
-	{ SC_SET_MEMBER,	         "Set Member" },
-	{ SC_MULT_SERV_PACK,       "Multiple Service Packet" },
-
-	/* Some class specific services */
-	{ SC_FWD_CLOSE,	         "Forward Close" },
-	{ SC_FWD_OPEN,	            "Forward Open" },
-	{ SC_UNCON_SEND,           "Unconnected Send" },
-
-	{ 0,				            NULL }
-};
-
-/* Translate function to string - CIP Request/Response */
-static const value_string encap_sc_rr[] = {
-	{ 0,	      "Request"  },
-	{ 1,	      "Response" },
-
-	{ 0,			NULL }
-};
-
-
-/* Translate function to string - Compatibility */
-static const value_string enip_com_bit_vals[] = {
-	{ 0,	      "Bit Cleared" },
-	{ 1,	      "Bit Set"     },
-
-	{ 0,        NULL          }
-};
 
 /* Translate function to string - True/False */
 static const value_string enip_true_false_vals[] = {
@@ -386,278 +191,14 @@
 };
 
 
-/* Translate function to string - Connection priority */
-static const value_string enip_con_prio_vals[] = {
-	{ 0,	      "Low Priority"  },
-	{ 1,	      "High Priority" },
-	{ 2,	      "Scheduled"     },
-	{ 3,	      "Urgent"        },
-
-	{ 0,        NULL            }
-};
-
-
-/* Translate function to string - Connection size fixed or variable */
-static const value_string enip_con_fw_vals[] = {
-	{ 0,	      "Fixed"    },
-	{ 1,	      "Variable" },
-
-	{ 0,        NULL       }
-};
-
-
-/* Translate function to string - Connection owner */
-static const value_string enip_con_owner_vals[] = {
-	{ 0,	      "Exclusive" },
-	{ 1,	      "Redundant" },
-
-	{ 0,        NULL        }
-};
-
-/* Translate function to string - Connection direction */
-static const value_string enip_con_dir_vals[] = {
-	{ 0,	      "Client" },
-	{ 1,	      "Server" },
-
-	{ 0,        NULL        }
-};
-
-/* Translate function to string - Production trigger */
-static const value_string enip_con_trigg_vals[] = {
-	{ 0,	      "Cyclic" },
-	{ 1,	      "Change-Of-State" },
-	{ 2,	      "Application Object" },
-
-	{ 0,        NULL        }
-};
-
-/* Translate function to string - Transport class */
-static const value_string enip_con_class_vals[] = {
-	{ 0,	      "0" },
-	{ 1,	      "1" },
-	{ 2,	      "2" },
-	{ 3,	      "3" },
-
-	{ 0,        NULL        }
-};
-
-
-/* Translate function to string - Connection type */
-static const value_string enip_con_type_vals[] = {
-	{ 0,	      "Null"           },
-	{ 1,	      "Multicast"      },
-	{ 2,	      "Point to Point" },
-	{ 3,	      "Reserved"       },
-
-	{ 0,        NULL             }
-};
-
-/* Translate function to string - Timeout Multiplier */
-static const value_string enip_con_time_mult_vals[] = {
-	{ 0,        "*4"   },
-	{ 1,        "*8"   },
-	{ 2,        "*16"  },
-	{ 3,        "*32"  },
-	{ 4,        "*64"  },
-	{ 5,        "*128" },
-	{ 6,        "*256" },
-	{ 7,        "*512" },
-
-   { 0,        NULL    }
-};
-
-
-/* Translate function to string - CIP General Status codes */
-static const value_string encap_cip_gs_vals[] = {
-	{ CI_GRC_SUCCESS,             "Success" },
-   { CI_GRC_FAILURE,             "Connection failure" },
-   { CI_GRC_NO_RESOURCE,         "Resource unavailable" },
-   { CI_GRC_BAD_DATA,            "Invalid parameter value" },
-   { CI_GRC_BAD_PATH,            "Path segment error" },
-   { CI_GRC_BAD_CLASS_INSTANCE,  "Path destination unknown" },
-   { CI_GRC_PARTIAL_DATA,        "Partial transfer" },
-   { CI_GRC_CONN_LOST,           "Connection lost" },
-   { CI_GRC_BAD_SERVICE,         "Service not supported" },
-   { CI_GRC_BAD_ATTR_DATA,       "Invalid attribute value" },
-   { CI_GRC_ATTR_LIST_ERROR,     "Attribute list error" },
-   { CI_GRC_ALREADY_IN_MODE,     "Already in requested mode/state" },
-   { CI_GRC_BAD_OBJ_MODE,        "Object state conflict" },
-   { CI_GRC_OBJ_ALREADY_EXISTS,  "Object already exists" },
-   { CI_GRC_ATTR_NOT_SETTABLE,   "Attribute not settable" },
-   { CI_GRC_PERMISSION_DENIED,   "Privilege violation" },
-   { CI_GRC_DEV_IN_WRONG_STATE,  "Device state conflict" },
-   { CI_GRC_REPLY_DATA_TOO_LARGE,"Reply data too large" },
-   { CI_GRC_FRAGMENT_PRIMITIVE,  "Fragmentation of a primitive value" },
-   { CI_GRC_CONFIG_TOO_SMALL,    "Not enough data" },
-   { CI_GRC_UNDEFINED_ATTR,      "Attribute not supported" },
-   { CI_GRC_CONFIG_TOO_BIG,      "Too much data" },
-   { CI_GRC_OBJ_DOES_NOT_EXIST,  "Object does not exist" },
-   { CI_GRC_NO_FRAGMENTATION,    "Service fragmentation sequence not in progress" },
-   { CI_GRC_DATA_NOT_SAVED,      "No stored attribute data" },
-   { CI_GRC_DATA_WRITE_FAILURE,  "Store operation failure" },
-   { CI_GRC_REQUEST_TOO_LARGE,   "Routing failure, request packet too large" },
-   { CI_GRC_RESPONSE_TOO_LARGE,  "Routing failure, response packet too large" },
-   { CI_GRC_MISSING_LIST_DATA,   "Missing attribute list entry data" },
-   { CI_GRC_INVALID_LIST_STATUS, "Invalid attribute value list" },
-   { CI_GRC_SERVICE_ERROR,       "Embedded service error" },
-   { CI_GRC_CONN_RELATED_FAILURE,"Vendor specific error" },
-   { CI_GRC_INVALID_PARAMETER,   "Invalid parameter" },
-   { CI_GRC_WRITE_ONCE_FAILURE,  "Write-once value or medium already written" },
-   { CI_GRC_INVALID_REPLY,       "Invalid Reply Received" },
-   { CI_GRC_BAD_KEY_IN_PATH,     "Key Failure in path" },
-   { CI_GRC_BAD_PATH_SIZE,       "Path Size Invalid" },
-   { CI_GRC_UNEXPECTED_ATTR,     "Unexpected attribute in list" },
-   { CI_GRC_INVALID_MEMBER,      "Invalid Member ID" },
-   { CI_GRC_MEMBER_NOT_SETTABLE, "Member not settable" },
-
-  	{ 0,				               NULL }
-};
-
-
-/* Translate Vendor ID:s */
-static const value_string encap_cip_vendor_vals[] = {
-   { 1,     "Rockwell Automation/Allen-Bradley"                   },
-   { 5,     "Rockwell Automation/Reliance Electric"               },
-   { 24,    "ODVA Special Reserve"                                },
-   { 26,    "Festo Corporation"                                   },
-   { 40,    "WAGO Corporation"                                    },
-   { 48,    "Turck, Inc."                                         },
-   { 49,    "Grayhill Inc."                                       },
-   { 50,    "Real Time Automation (C&ID)"                         },
-   { 52,    "Numatics, Inc."                                      },
-   { 57,    "Pepperl + Fuchs"                                     },
-   { 81,    "IXXAT Automation GmbH"                               },
-   { 90,    "HMS Industrial Networks AB"                          },
-   { 96,    "Digital Electronics Corp"                            },
-   { 128,   "MAC Valves, Inc."                                    },
-   { 133,   "Balogh T.A.G., Corporation"                          },
-   { 170,   "Pyramid Solutions, Inc."                             },
-   { 256,   "InterlinkBT LLC"                                     },
-   { 258,   "Hardy Instruments, Inc."                             },
-   { 275,   "Lantronix, Inc."                                     },
-   { 283,   "Hilscher GmbH"                                       },
-   { 287,   "Bosch Rexroth Corporation, Indramat"                 },
-   { 356,   "Fanuc Robotics America"                              },
-   { 553,   "Control Techniques PLC-NA"                           },
-   { 562,   "Phoenix Contact"                                     },
-   { 579,   "Applicom international"                              },
-   { 588,   "West Instruments Limited"                            },
-   { 590,   "Delta Computer Systems Inc."                         },
-   { 596,   "Wire-Pro, Inc."                                      },
-   { 635,   "The Siemon Company"                                  },
-   { 638,   "Woodhead Connectivity"                               },
-   { 651,   "Fife Corporation"                                    },
-   { 668,   "Rockwell Automation/Entek IRD Intl."                 },
-   { 678,   "Cognex Corporation"                                  },
-   { 691,   "Startco Engineering Ltd"                             },
-   { 734,   "Hakko Electronics Co., Ltd"                          },
-   { 735,   "Tang & Associates"                                   },
-   { 743,   "Linux Network Services"                              },
-   { 748,   "DVT Corporation"                                     },
-   { 759,   "FLS Automation A/S"                                  },
-   { 768,   "CSIRO Mining Automation"                             },
-   { 778,   "Harting, Inc. NA"                                    },
-   { 784,   "Ci Technologies Pty Ltd (for Pelamos Industries)"    },
-   { 796,   "Siemens Energy & Automation, Inc."                   },
-   { 798,   "Tyco Electronics"                                    },
-   { 803,   "ICP DAS Co., LTD"                                    },
-   { 805,   "Digi International, Inc."                            },
-   { 808,   "SICK AG"                                             },
-   { 809,   "Ethernet Peripherals, Inc."                          },
-   { 812,   "Process Control Corporation"                         },
-   { 832,   "Quest Technical Solutions, Inc."                     },
-   { 841,   "Panduit Corporation"                                 },
-   { 850,   "Datalogic, Inc."                                     },
-   { 851,   "SoftPLC Corporation"                                 },
-   { 854,   "Frontline Test Equipment, Inc."                      },
-   { 857,   "RVSI"                                                },
-   { 859,   "Tennessee Rand Automation"                           },
-   { 866,   "ATR Industrie-Elektronik GmbH Co."                   },
-   { 875,   "FieldServer Technologies (Div Sierra Monitor Corp)"  },
-   { 883,   "Automa SRL"                                          },
-
-	{ 0,		NULL                                                  }
-};
-
-/* Translate Device Profile:s */
-static const value_string encap_cip_devtype_vals[] = {
-   { DP_GEN_DEV,              "Generic Device"              },
-   { DP_AC_DRIVE,             "AC Drive"                    },
-   { DP_MOTOR_OVERLOAD,       "Motor Overload"              },
-   { DP_LIMIT_SWITCH,         "Limit Switch"                },
-   { DP_IND_PROX_SWITCH,      "Inductive Proximity Switch"  },
-   { DP_PHOTO_SENSOR,         "Photoelectric Sensor"        },
-   { DP_GENP_DISC_IO,         "General Purpose Dicrete I/O" },
-   { DP_RESOLVER,             "Resolver"                    },
-   { DP_COM_ADAPTER,          "Communications Adapter"      },
-   { DP_POS_CNT,              "Position Controller",        },
-   { DP_DC_DRIVE,             "DC Drive"                    },
-   { DP_CONTACTOR,            "Contactor",                  },
-   { DP_MOTOR_STARTER,        "Motor Starter",              },
-   { DP_SOFT_START,           "Soft Start",                 },
-   { DP_HMI,                  "Human-Machine Interface"     },
-   { DP_MASS_FLOW_CNT,        "Mass Flow Controller"        },
-   { DP_PNEUM_VALVE,          "Pneumatic Valve"             },
-   { DP_VACUUM_PRES_GAUGE,    "Vaccuum Pressure Gauge"      },
+/* Translate interface handle to string */
+static const value_string enip_interface_handle_vals[] = {
+	{ 0,	      "CIP" },
 
-   { 0,				            NULL                          }
+	{ 0,        NULL  }
 };
 
 
-/* Translate class names */
-static const value_string enip_class_names_vals[] = {
-	{ 0x01,     "Identity Object"                       },
-	{ 0x02,     "Message Router"                        },
-	{ 0x03,     "DeviceNet Object"                      },
-	{ 0x04,     "Assembly Object"                       },
-	{ 0x05,     "Connection Object"                     },
-	{ 0x06,     "Connection Manager"                    },
-	{ 0x07,     "Register Object"                       },
-	{ 0x08,     "Discrete Input Point Object"           },
-	{ 0x09,     "Discrete Output Point Object"          },
-	{ 0x0A,     "Analog Input Point Object"             },
-	{ 0x0B,     "Analog Output Point Object"            },
-	{ 0x0E,     "Presence Sensing Object"               },
-	{ 0x0F,     "Parameter Object"                      },
-	{ 0x10,     "Parameter Group Object"                },
-	{ 0x12,     "Group Object"                          },
-	{ 0x1D,     "Discrete Input Group Object"           },
-	{ 0x1E,     "Discrete Output Group Object"          },
-	{ 0x1F,     "Discrete Group Object"                 },
-	{ 0x20,     "Analog Input Group Object"             },
-	{ 0x21,     "Analog Output Group Object"            },
-	{ 0x22,     "Analog Group Object"                   },
-	{ 0x23,     "Position Sensor Object"                },
-	{ 0x24,     "Position Controller Supervisor Object" },
-	{ 0x25,     "Position Controller Object"            },
-	{ 0x26,     "Block Sequencer Object"                },
-	{ 0x27,     "Command Block Object"                  },
-	{ 0x28,     "Motor Data Object"                     },
-	{ 0x29,     "Control Supervisor Object"             },
-	{ 0x2A,     "AC/DC Drive Object"                    },
-	{ 0x2B,     "Acknowledge Handler Object"            },
-	{ 0x2C,     "Overload Object"                       },
-	{ 0x2D,     "Softstart Object"                      },
-	{ 0x2E,     "Selection Object"                      },
-	{ 0x30,     "S-Device Supervisor Object"            },
-	{ 0x31,     "S-Analog Sensor Object"                },
-	{ 0x32,     "S-Analog Actuator Object"              },
-	{ 0x33,     "S-Single Stage Controller Object"      },
-	{ 0x34,     "S-Gas Calibration Object"              },
-	{ 0x35,     "Trip Point Object"                     },
-	{ 0xF0,     "ControlNet Object"                     },
-	{ 0xF1,     "ControlNet Keeper Object"              },
-	{ 0xF2,     "ControlNet Scheduling Object"          },
-	{ 0xF3,     "Connection Configuration Object"       },
-	{ 0xF4,     "Port Object"                           },
-	{ 0xF5,     "TCP/IP Interface Object"               },
-	{ 0xF6,     "EtherNet Link Object"                  },
-
-	{ 0,			NULL                                    }
-};
-
-
-
 static proto_item*
 add_byte_array_text_to_proto_tree( proto_tree *tree, tvbuff_t *tvb, gint start, gint length, const char* str )
 {
@@ -719,1220 +260,29 @@
 
 } /* end of add_byte_array_text_to_proto_tree() */
 
-
-
-/* Decode and add epath to tree */
+/* Disssect Common Packet Format */
 static void
-show_epath( tvbuff_t *tvb, proto_item *pi, int offset, int path_length )
+dissect_cpf( int command, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, guint32 ifacehndl )
 {
-   int pathpos;
-   int temp_data;
-   int temp_data2;
-   unsigned char segment_type, temp_byte, opt_link_size;
-   proto_tree *path_tree, *port_tree, *net_tree;
-   proto_item *qi, *cia_item, *ds_item;
-   proto_tree *e_key_tree, *cia_tree, *ds_tree;
-   proto_item *mcpi, *temp_item, *port_item, *ext_link_item, *net_item;
-   proto_tree *mc_tree;
-   int seg_size, i, temp_word;
-   char *temp_string;
-
-   /* Create a sub tree for the epath */
-   path_tree = proto_item_add_subtree( pi, ett_path );
-
-   proto_tree_add_item_hidden(path_tree, hf_enip_ucm_path,
-							   tvb, offset, path_length, TRUE );
-
-   pathpos = 0;
-
-   while( pathpos < path_length )
-   {
-      /* Get segement type */
-      segment_type = tvb_get_guint8( tvb, offset + pathpos );
-
-      /* Determine the segment type */
-
-      switch( segment_type & CI_SEGMENT_TYPE_MASK )
-      {
-      case CI_PATH_SEGMENT:
-
-         port_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 0, "Port Segment" );
-         port_tree = proto_item_add_subtree( port_item, ett_port_path );
-
-         /* Add port number */
-         proto_tree_add_text( port_tree, tvb, offset+pathpos, 1, "Port Identifier: %d", (segment_type & 0x0F)  );
-         proto_item_append_text( pi, ", Port: %d", (segment_type & 0x0F)  );
-
-         /* Add Extended Link Address flag */
-         temp_item = proto_tree_add_text( port_tree, tvb, offset+pathpos, 1, "Extended Link Address: " );
-
-         if( segment_type & 0x10 )
-         {
-            proto_item_append_text(temp_item, "TRUE");
-            opt_link_size = tvb_get_guint8( tvb, offset + pathpos + 1 );
-
-            proto_tree_add_text( port_tree, tvb, offset+pathpos+1, 1, "Link Address Size: %d", opt_link_size  );
-            ext_link_item = proto_tree_add_text( port_tree, tvb, offset+pathpos+2, opt_link_size, "Link Address: " );
-
-            proto_item_append_text(pi, ", Addess: " );
-
-            /* Add extended link address */
-            for( i=0; i < opt_link_size; i++ )
-            {
-               temp_byte = tvb_get_guint8( tvb, offset + pathpos+2+i );
-               proto_item_append_text(ext_link_item, "%c", temp_byte );
-               proto_item_append_text(pi, "%c", temp_byte );
-            }
-
-            /* Pad byte */
-            if( opt_link_size % 2 )
-            {
-              pathpos = pathpos + 3 + opt_link_size;
-              proto_item_set_len(port_item, 3+opt_link_size);
-            }
-            else
-            {
-              pathpos = pathpos + 2 + opt_link_size;
-              proto_item_set_len(port_item, 2+opt_link_size);
-            }
-
-         }
-         else
-         {
-            proto_item_append_text(pi, ", Address: %d", tvb_get_guint8( tvb, offset + pathpos + 1 ) );
-
-            proto_item_append_text(temp_item, "FALSE");
-            proto_tree_add_text( port_tree, tvb, offset+pathpos+1, 1, "Link Address: %d", tvb_get_guint8( tvb, offset + pathpos + 1 )  );
-            proto_item_set_len(port_item, 2);
-            pathpos += 2;
-         }
-
-         break;
-
-      case CI_LOGICAL_SEGMENT:
-
-         /* Logical segment, determin the logical type */
-
-         switch( segment_type & CI_LOGICAL_SEG_TYPE_MASK )
-         {
-         case CI_LOGICAL_SEG_CLASS_ID:
-
-            /* Logical Class ID, do a format check */
-
-   		   if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_8_BIT )
-   		   {
-   		      temp_data = tvb_get_guint8( tvb, offset + pathpos + 1 );
-               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 2, "8-Bit Logical Class Segment (0x%02X)", segment_type );
-
-               /* Create a sub tree for the class */
-               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
-
-               /* Display the 8-bit class number */
-               proto_tree_add_text( cia_tree, tvb, offset + pathpos + 1, 1, "Class: %s (0x%02X)", val_to_str( temp_data, enip_class_names_vals , "Unknown class" ), temp_data );
-
-               temp_string = match_strval( temp_data, enip_class_names_vals );
-
-               if( temp_string )
-               {
-                  proto_item_append_text(pi, "%s", temp_string );
-               }
-               else
-               {
-                  proto_item_append_text(pi, "Class: 0x%02X", temp_data );
-               }
-
-               /* 2 bytes of path used */
-               pathpos += 2;
-            }
-            else if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_16_BIT )
-            {
-               temp_data = tvb_get_letohs( tvb, offset + pathpos + 2 );
-               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 3, "16-Bit Logical Class Segment (0x%02X)", segment_type );
-
-               /* Create a sub tree for the class */
-               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
-
-               /* Display the 16-bit class number */
-               proto_tree_add_text( cia_tree, tvb, offset + pathpos + 2, 2, "Class: %s (0x%04X)", val_to_str( temp_data, enip_class_names_vals , "Unknown class" ), temp_data );
-               temp_string = match_strval( temp_data, enip_class_names_vals );
-
-               if( temp_string )
-               {
-                  proto_item_append_text(pi, "%s", temp_string );
-               }
-               else
-               {
-                  proto_item_append_text(pi, "Class: 0x%04X", temp_data );
-               }
-
-               /* 4 bytes of path used */
-               pathpos += 4;
-            }
-            else if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_32_BIT )
-            {
-               temp_data = tvb_get_letohl( tvb, offset + pathpos + 2 );
-               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 5, "32-Bit Logical Instance Segment (0x%02X)", segment_type );
-
-               /* Create a sub tree for the class */
-               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
-
-               /* Display the 32-bit instance number */
-               proto_tree_add_text( cia_tree, tvb, offset + pathpos + 2, 4, "Class: %s (0x%08X)", val_to_str( temp_data, enip_class_names_vals , "Unknown class" ), temp_data );
-               temp_string = match_strval( temp_data, enip_class_names_vals );
-
-               if( temp_string )
-               {
-                  proto_item_append_text(pi, "%s", temp_string );
-               }
-               else
-               {
-                  proto_item_append_text(pi, "Class: 0x%08X", temp_data );
-               }
-
-               /* 6 bytes of path used */
-               pathpos += 6;
-            }
-            else
-            {
-               /* Unsupported logical segment format */
-               proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Logical Segment Format" );
-               return;
-            }
-            break;
-
-
-         case CI_LOGICAL_SEG_INST_ID:
-
-            /* Logical Instance ID, do a format check */
-
-   		   if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_8_BIT )
-   		   {
-   		      temp_data = tvb_get_guint8( tvb, offset + pathpos + 1 );
-               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 2, "8-Bit Logical Instance Segment (0x%02X)", segment_type );
-
-               /* Create a sub tree for the instance */
-               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
-
-               /* Display the 8-bit instance number */
-               proto_tree_add_text( cia_tree, tvb, offset + pathpos + 1, 1, "Instance: 0x%02X", temp_data );
-               proto_item_append_text(pi, ", Inst: 0x%02X", temp_data );
-
-               /* 2 bytes of path used */
-               pathpos += 2;
-            }
-            else if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_16_BIT )
-            {
-               temp_data = tvb_get_letohs( tvb, offset + pathpos + 2 );
-               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 3, "16-Bit Logical Instance Segment (0x%02X)", segment_type );
-
-               /* Create a sub tree for the instance */
-               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
-
-               /* Display the 16-bit instance number */
-               proto_tree_add_text( cia_tree, tvb, offset + pathpos + 2, 2, "Instance: 0x%04X", temp_data );
-               proto_item_append_text(pi, ", Inst: 0x%04X", temp_data );
-
-               /* 4 bytes of path used */
-               pathpos += 4;
-            }
-            else if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_32_BIT )
-            {
-               temp_data = tvb_get_letohl( tvb, offset + pathpos + 2 );
-               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 5, "32-Bit Logical Instance Segment (0x%02X)", segment_type );
-
-               /* Create a sub tree for the instance */
-               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
-
-               /* Display the 16-bit instance number */
-               proto_tree_add_text( cia_tree, tvb, offset + pathpos + 2, 4, "Instance: 0x%08X", temp_data );
-               proto_item_append_text(pi, ", Inst: 0x%08X", temp_data );
-
-               /* 6 bytes of path used */
-               pathpos += 6;
-            }
-            else
-            {
-               /* Unsupported logical segment format */
-               proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Logical Segment Format" );
-               return;
-            }
-            break;
-
-
-         case CI_LOGICAL_SEG_ATTR_ID:
-
-            /* Logical Attribute ID, do a format check */
-
-   		   if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_8_BIT )
-   		   {
-   		      temp_data = tvb_get_guint8( tvb, offset + pathpos + 1 );
-               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 2, "8-Bit Logical Attribute Segment (0x%02X)", segment_type );
-
-               /* Create a sub tree for the attribute */
-               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
-
-               /* Display the 8-bit instance number */
-               proto_tree_add_text( cia_tree, tvb, offset + pathpos + 1, 1, "Attribute: 0x%02X", temp_data );
-               proto_item_append_text(pi, ", Att: 0x%02X", temp_data );
-
-               /* 2 bytes of path used */
-               pathpos += 2;
-            }
-            else if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_16_BIT )
-            {
-               temp_data = tvb_get_letohs( tvb, offset + pathpos + 2 );
-               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 3, "16-Bit Logical Attribute Segment (0x%02X)", segment_type );
-
-               /* Create a sub tree for the attribute */
-               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
-
-               /* Display the 16-bit instance number */
-               proto_tree_add_text( cia_tree, tvb, offset + pathpos + 2, 2, "Attribute: 0x%04X", temp_data );
-               proto_item_append_text(pi, ", Att: 0x%04X", temp_data );
-
-               /* 4 bytes of path used */
-               pathpos += 4;
-            }
-            else if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_32_BIT )
-            {
-               temp_data = tvb_get_letohl( tvb, offset + pathpos + 2 );
-               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 5, "32-Bit Logical Attribute Segment (0x%02X)", segment_type );
-
-               /* Create a sub tree for the attribute */
-               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
-
-               /* Display the 16-bit instance number */
-               proto_tree_add_text( cia_tree, tvb, offset + pathpos + 2, 4, "Attribute: 0x%08X", temp_data );
-               proto_item_append_text(pi, ", Att: 0x%08X", temp_data );
-
-               /* 6 bytes of path used */
-               pathpos += 6;
-            }
-            else
-            {
-               /* Unsupported logical segment format */
-               proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Logical Segment Format" );
-               return;
-            }
-            break;
-
-
-         case CI_LOGICAL_SEG_CON_POINT:
-
-            /* Logical Connection point , do a format check */
-
-   		   if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_8_BIT )
-   		   {
-   		      temp_data = tvb_get_guint8( tvb, offset + pathpos + 1 );
-               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 2, "8-Bit Logical Connection Point Segment (0x%02X)", segment_type );
-
-               /* Create a sub tree for the connection point */
-               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
-
-               /* Display the 8-bit instance number */
-               proto_tree_add_text( cia_tree, tvb, offset + pathpos + 1, 1, "Connection Point: 0x%02X", temp_data );
-               proto_item_append_text(pi, ", ConPnt: 0x%02X", temp_data );
-
-               /* 2 bytes of path used */
-               pathpos += 2;
-            }
-            else if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_16_BIT )
-            {
-               temp_data = tvb_get_letohs( tvb, offset + pathpos + 2 );
-               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 3, "16-Bit Logical Connection Point Segment (0x%02X)", segment_type );
-
-               /* Create a sub tree for the connection point */
-               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
-
-               /* Display the 16-bit instance number */
-               proto_tree_add_text( cia_tree, tvb, offset + pathpos + 2, 2, "Connection Point: 0x%04X", temp_data );
-               proto_item_append_text(pi, ", ConPnt: 0x%04X", temp_data );
-
-               /* 4 bytes of path used */
-               pathpos += 4;
-            }
-            else if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_32_BIT )
-            {
-               temp_data = tvb_get_letohl( tvb, offset + pathpos + 2 );
-               cia_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 5, "32-Bit Logical Connection Point Segment (0x%02X)", segment_type );
-
-               /* Create a sub tree for the connection point */
-               cia_tree = proto_item_add_subtree( cia_item, ett_cia_path );
-
-               /* Display the 16-bit instance number */
-               proto_tree_add_text( cia_tree, tvb, offset + pathpos + 2, 4, "Connection Point (0x%08X)", temp_data );
-               proto_item_append_text(pi, ", ConPnt: 0x%08X", temp_data );
-
-               /* 6 bytes of path used */
-               pathpos += 6;
-            }
-            else
-            {
-               /* Unsupported logical segment format */
-               proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Logical Segment Format" );
-               return;
-            }
-            break;
-
-
-         case CI_LOGICAL_SEG_SPECIAL:
-
-            /* Logical Special ID, the only logical format sepcifyed is electronic key */
-
-            if( ( segment_type & CI_LOGICAL_SEG_FORMAT_MASK ) == CI_LOGICAL_SEG_E_KEY )
-            {
-
-               /* Get the Key Format */
-
-               temp_data = tvb_get_guint8( tvb, offset + pathpos + 1 );
-
-               if( temp_data == CI_E_KEY_FORMAT_VAL )
-               {
-                  qi = proto_tree_add_text( path_tree, tvb, offset + pathpos, 10, "Electronic Key Segment (0x%02X): ",segment_type );
-
-                  /* Create a sub tree for the IOI */
-                  e_key_tree = proto_item_add_subtree( qi, ett_ekey_path );
-
-                  /* Print the key type */
-                  proto_tree_add_text( e_key_tree, tvb, offset + pathpos + 1, 1, "Key Format: 0x%02X", temp_data );
-
-                  /* Get the Vendor ID */
-      		      temp_data = tvb_get_letohs( tvb, offset + pathpos + 2 );
-                  proto_tree_add_item( e_key_tree, hf_enip_vendors, tvb, offset + pathpos + 2, 2, TRUE);
-                  proto_item_append_text( qi, "VendorID: 0x%04X", temp_data );
-
-                  /* Get Device Type */
-   		         temp_data = tvb_get_letohs( tvb, offset + pathpos + 4 );
-   		         proto_tree_add_item( e_key_tree, hf_enip_cpf_lir_devtype, tvb, offset + pathpos + 4, 2, TRUE);
-                  proto_item_append_text( qi, ", DevTyp: 0x%04X", temp_data );
-
-                  /* Product Code */
-   		         temp_data = tvb_get_letohs( tvb, offset + pathpos + 6 );
-                  proto_tree_add_text( e_key_tree, tvb, offset + pathpos + 6, 2, "Product Code: 0x%04X", temp_data );
-
-                  /* Major revision/Compatibility */
-   		         temp_data = tvb_get_guint8( tvb, offset + pathpos + 8 );
-
-   					/* Add Major revision/Compatibility tree */
-   					mcpi = proto_tree_add_text(e_key_tree, tvb, offset + pathpos + 8, 1, "Compatibility ");
-   					mc_tree = proto_item_add_subtree(mcpi, ett_mcsc);
-
-   					/* Add Compatibility bit info */
-                  proto_tree_add_item(mc_tree, hf_enip_ucm_fwo_comp,
-   							tvb, offset + pathpos + 8, 1, TRUE );
-
-                  proto_item_append_text( mcpi, "%s, Major Revision: %d",
-                              val_to_str( ( temp_data & 0x80 )>>7, enip_com_bit_vals , "" ),
-                              temp_data & 0x7F );
-
-   					/* Major revision */
-   					proto_tree_add_item(mc_tree, hf_enip_ucm_fwo_mrev,
-   							tvb, offset + pathpos + 8, 1, TRUE );
-
-                  /* Minor revision */
-                  temp_data2 = tvb_get_guint8( tvb, offset + pathpos + 9 );
-                  proto_tree_add_text( e_key_tree, tvb, offset + pathpos + 9, 1, "Minor Revision: %d", temp_data2 );
-
-                  proto_item_append_text( qi, ", V.%d.%d", ( temp_data & 0x7F ), temp_data2 );
-
-                  /* Increment the path pointer */
-                  pathpos += 10;
-
-               }
-               else
-               {
-                  /* Unsupported electronic key format */
-                  proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Electronic Key Format" );
-                  return;
-               }
-
-            }
-            else
-            {
-               /* Unsupported special segment format */
-               proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Special Segment Format" );
-               return;
-            }
-            break;
-
-
-         default:
-
-            /* Unsupported logical segment type */
-            proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Logical Segment Type" );
-            return;
-
-         } /* end of switch( segment_type & CI_LOGICAL_SEG_TYPE_MASK ) */
-         break;
-
-
-      case CI_DATA_SEGMENT:
-
-         /* Data segment, determin the logical type */
-
-         switch( segment_type )
-         {
-
-            case CI_DATA_SEG_SIMPLE:
-
-               /* Simple data segment */
-               ds_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 1, "Simple Data Segment (0x%02X)", segment_type );
-
-               /* Create a sub tree */
-               ds_tree = proto_item_add_subtree( ds_item, ett_data_seg );
-
-               /* Segment size */
-               seg_size = tvb_get_guint8( tvb, offset + pathpos+1 )*2;
-               proto_tree_add_text( ds_tree, tvb, offset + pathpos+1, 1, "Data Size: %d (words)", seg_size/2 );
-
-               /* Segment data  */
-               if( seg_size != 0 )
-               {
-                  qi = proto_tree_add_text( ds_tree, tvb, offset + pathpos+2, 0, "Data: " );
-
-                  for( i=0; i < seg_size/2; i ++ )
-                  {
-                    temp_word = tvb_get_letohs( tvb, offset + pathpos+2+(i*2) );
-                    proto_item_append_text(qi, " 0x%04X", temp_word );
-                  }
-
-                  proto_item_set_len(qi, seg_size);
-               }
-
-               proto_item_set_len( ds_item, 2 + seg_size );
-               pathpos = pathpos + 2 + seg_size;
-
-               break;
-
-            case CI_DATA_SEG_SYMBOL:
-
-               /* ANSI extended symbol segment */
-               ds_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 1, "Extended Symbol Segment (0x%02X)", segment_type );
-
-               /* Create a sub tree */
-               ds_tree = proto_item_add_subtree( ds_item, ett_data_seg );
-
-               /* Segment size */
-               seg_size = tvb_get_guint8( tvb, offset + pathpos+1 );
-               proto_tree_add_text( ds_tree, tvb, offset + pathpos+1, 1, "Data Size: %d", seg_size );
-
-               /* Segment data  */
-               if( seg_size != 0 )
-               {
-                  qi = proto_tree_add_text( ds_tree, tvb, offset + pathpos+2, 0, "Data: " );
-
-                  for( i=0; i < seg_size; i++ )
-                  {
-                    temp_byte = tvb_get_guint8( tvb, offset + pathpos+2+i );
-                    proto_item_append_text(qi, "%c", temp_byte );
-                  }
-
-                  proto_item_set_len(qi, seg_size);
-
-                  if( seg_size %2 )
-                  {
-                     /* We have a PAD BYTE */
-                     proto_tree_add_text( ds_tree, tvb, offset + pathpos+2+i, 1, "Pad Byte (0x%02X)",
-                         tvb_get_guint8( tvb, offset + pathpos+2+i ) );
-                     pathpos++;
-                     seg_size++;
-                  }
-               }
-
-               proto_item_set_len( ds_item, 2 + seg_size );
-               pathpos = pathpos + 2 + seg_size;
-
-               break;
-
-            default:
-               proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Sub-Segment Type" );
-               return;
-
-            } /* End of switch sub-type */
-
-            break;
-
-      case CI_NETWORK_SEGMENT:
-
-         /* Network segment -Determine the segment sub-type */
-
-         switch( segment_type & CI_NETWORK_SEG_TYPE_MASK )
-         {
-            case CI_NETWORK_SEG_SCHEDULE:
-               net_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 2, "Network Segment - Schedule" );
-               net_tree = proto_item_add_subtree( net_item, ett_port_path );
-
-               proto_tree_add_text( net_tree, tvb, offset + pathpos + 1, 1, "Multiplier/Phase: %02X", tvb_get_guint8( tvb, offset + pathpos + 1 ) );
-
-               /* 2 bytes of path used */
-               pathpos += 2;
-               break;
-
-            case CI_NETWORK_SEG_FIXED_TAG:
-               net_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 2, "Network Segment - Fixed Tag" );
-               net_tree = proto_item_add_subtree( net_item, ett_port_path );
-
-               proto_tree_add_text( net_tree, tvb, offset + pathpos + 1, 1, "Fixed Tag: %02X", tvb_get_guint8( tvb, offset + pathpos + 1 ) );
-
-               /* 2 bytes of path used */
-               pathpos += 2;
-               break;
-
-            case CI_NETWORK_SEG_PROD_INHI:
-               net_item = proto_tree_add_text( path_tree, tvb, offset + pathpos, 2, "Network Segment - Production Inhibit" );
-               net_tree = proto_item_add_subtree( net_item, ett_port_path );
-
-               proto_tree_add_text( net_tree, tvb, offset + pathpos + 1, 1, "Production Inhibit Time: %dms", tvb_get_guint8( tvb, offset + pathpos + 1 ) );
-
-               /* 2 bytes of path used */
-               pathpos += 2;
-               break;
-
-            default:
-               proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Sub-Segment Type" );
-               return;
-
-            } /* End of switch sub-type */
-
-      break;
-
-      default:
-
-         /* Unsupported segment type */
-         proto_tree_add_text( path_tree, tvb, 0, 0, "Unsupported Segment Type" );
-         return;
-
-      } /* end of switch( segment_type & CI_SEGMENT_TYPE_MASK ) */
-
-   } /* end of while( pathpos < path_length ) */
-
-} /* end of show_epath() */
-
-
-
-static void
-add_cip_data( proto_tree *item_tree, tvbuff_t *tvb, int offset, int item_length, packet_info *pinfo )
-{
-   proto_item *pi, *rrsci, *ncppi, *ar_item, *temp_item, *temp_item2;
-	proto_tree *temp_tree;
-   proto_tree *rrsci_tree;
-   proto_tree *ncp_tree;
-   proto_tree *cmd_data_tree;
-	int req_path_size, conn_path_size, mr_req_path_size;
-	int temp_data;
-	unsigned char gen_stat;
-   unsigned char add_stat_size;
-   unsigned char temp_byte, route_path_size;
-   unsigned char app_rep_size, i;
-   int msg_req_siz, num_services, serv_offset;
-
-
-   /* Add Service code & Request/Response tree */
-	rrsci = proto_tree_add_text(item_tree, tvb, offset, 1, "Service: ");
-	rrsci_tree = proto_item_add_subtree(rrsci, ett_rrsc);
-
-	/* Add Request/Response */
-   proto_tree_add_item(rrsci_tree, hf_enip_ucm_rr,
-			tvb, offset, 1, TRUE );
-
-   proto_item_append_text( rrsci, "%s (%s)",
-               val_to_str( ( tvb_get_guint8( tvb, offset ) & 0x7F ),
-                  encap_sc_vals , "Unknown Service (%x)"),
-               val_to_str( ( tvb_get_guint8( tvb, offset ) & 0x80 )>>7,
-                  encap_sc_rr, "") );
-
-
-	/* Add Service code */
-	proto_tree_add_item(rrsci_tree, hf_enip_ucm_sc,
-			tvb, offset, 1, TRUE );
-
-
-	if( tvb_get_guint8( tvb, offset ) & 0x80 )
-	{
-	   /* Response message */
-
-		/* Add general status */
-		gen_stat = tvb_get_guint8( tvb, offset+2 );
-
-		proto_tree_add_item(item_tree, hf_enip_ucm_genstat,
-			tvb, offset+2, 1, TRUE );
-
-      /* Add reply status to info column */
-      if(check_col(pinfo->cinfo, COL_INFO))
-      {
-         col_append_fstr( pinfo->cinfo, COL_INFO, ", %s",
-                  val_to_str( ( tvb_get_guint8( tvb, offset+2 ) ),
-                     encap_cip_gs_vals , "Unknown Response (%x)") );
-      }
-
-
-      /* Add additional status size */
-      temp_data = tvb_get_guint8( tvb, offset+3 );
-      proto_tree_add_text( item_tree, tvb, offset+3, 1, "Additional Status Size: %d (word)", temp_data );
-
-		add_stat_size = tvb_get_guint8( tvb, offset+3 )*2;
-
-		if( add_stat_size )
-		{
-         /* Add additional status */
-         pi = proto_tree_add_text( item_tree, tvb, offset+4, add_stat_size, "Additional Status:" );
-
-         for( i=0; i < add_stat_size/2; i ++ )
-         {
-           proto_item_append_text( pi, " 0x%04X", tvb_get_letohs( tvb, offset+4+(i*2) ) );
-         }
-		}
-
-      /* If there is any command specific data create a sub-tree for it */
-      if( ( item_length-4-add_stat_size ) != 0 )
-      {
-         pi = proto_tree_add_text( item_tree, tvb, offset+4+add_stat_size, item_length-4-add_stat_size, "Command Specific data" );
-         cmd_data_tree = proto_item_add_subtree( pi, ett_cmd_data );
-
-		   if( gen_stat == CI_GRC_SUCCESS )
-   		{
-   			/* Success responses */
-
-   			if( ( tvb_get_guint8( tvb, offset ) & 0x7F ) == SC_FWD_OPEN )
-            {
-               /* Forward open Response (Success) */
-
-               /* Display originator to target connection ID */
-               temp_data = tvb_get_letohl( tvb, offset+4+add_stat_size );
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size, 4, "O->T Network Connection ID: 0x%08X", temp_data );
-
-               /* Display target to originator connection ID */
-               temp_data = tvb_get_letohl( tvb, offset+4+add_stat_size+4 );
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+4, 4, "T->O Network Connection ID: 0x%08X", temp_data );
-
-               /* Display connection serial number */
-               temp_data = tvb_get_letohs( tvb, offset+4+add_stat_size+8 );
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+8, 2, "Connection Serial Number: 0x%04X", temp_data );
-
-               /* Display the originator vendor id */
-               proto_tree_add_item( cmd_data_tree, hf_enip_vendors, tvb, offset+4+add_stat_size+10, 2, TRUE);
-
-               /* Display the originator serial number */
-               temp_data = tvb_get_letohl( tvb, offset+4+add_stat_size+12 );
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+12, 4, "Originator Serial Number: 0x%08X", temp_data );
-
-               /* Display originator to target actual packet interval */
-               temp_data = tvb_get_letohl( tvb, offset+4+add_stat_size+16 );
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+16, 4, "O->T API: %dms (0x%08X)", temp_data / 1000, temp_data );
-
-               /* Display originator to target actual packet interval */
-               temp_data = tvb_get_letohl( tvb, offset+4+add_stat_size+20 );
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+20, 4, "T->O API: %dms (0x%08X)", temp_data / 1000, temp_data );
-
-               /* Display the application reply size */
-               app_rep_size = tvb_get_guint8( tvb, offset+4+add_stat_size+24 ) * 2;
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+24, 1, "Application Reply Size: %d (words)", app_rep_size / 2 );
-
-               /* Display the Reserved byte */
-               temp_byte = tvb_get_guint8( tvb, offset+4+add_stat_size+25 );
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+25, 1, "Reserved: 0x%02X", temp_byte );
-
-               if( app_rep_size != 0 )
-               {
-                  /* Display application Reply data */
-                  ar_item = proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+26, app_rep_size, "Application Reply:" );
-
-                  for( i=0; i < app_rep_size; i++ )
-                  {
-                    temp_byte = tvb_get_guint8( tvb, offset+4+add_stat_size+26+i );
-                    proto_item_append_text(ar_item, " 0x%02X", temp_byte );
-                  }
-
-                } /* End of if reply data */
-
-            } /* End of if forward open response */
-   			else if( ( tvb_get_guint8( tvb, offset ) & 0x7F ) == SC_FWD_CLOSE )
-            {
-               /* Forward close response (Success) */
-
-               /* Display connection serial number */
-               temp_data = tvb_get_letohs( tvb, offset+4+add_stat_size );
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size, 2, "Connection Serial Number: 0x%04X", temp_data );
-
-               /* Display the originator vendor id */
-               proto_tree_add_item( cmd_data_tree, hf_enip_vendors, tvb, offset+4+add_stat_size+2, 2, TRUE);
-
-               /* Display the originator serial number */
-               temp_data = tvb_get_letohl( tvb, offset+4+add_stat_size+4 );
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+4, 4, "Originator Serial Number: 0x%08X", temp_data );
-
-               /* Display the application reply size */
-               app_rep_size = tvb_get_guint8( tvb, offset+4+add_stat_size+8 ) * 2;
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+8, 1, "Application Reply Size: %d (words)", app_rep_size / 2 );
-
-               /* Display the Reserved byte */
-               temp_byte = tvb_get_guint8( tvb, offset+4+add_stat_size+9 );
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+9, 1, "Reserved: 0x%02X", temp_byte );
-
-               if( app_rep_size != 0 )
-               {
-                  /* Display application Reply data */
-                  ar_item = proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+10, app_rep_size, "Application Reply:" );
-
-                  for( i=0; i < app_rep_size; i ++ )
-                  {
-                    temp_byte = tvb_get_guint8( tvb, offset+4+add_stat_size+10+i );
-                    proto_item_append_text(ar_item, " 0x%02X", temp_byte );
-                  }
-
-                } /* End of if reply data */
-
-            } /* End of if forward close response */
-            else if( ( tvb_get_guint8( tvb, offset ) & 0x7F ) == SC_UNCON_SEND )
-            {
-               /* Unconnected send response (Success) */
-
-               /* Display service response data */
-               add_byte_array_text_to_proto_tree( cmd_data_tree, tvb, offset+4+add_stat_size, item_length-4-add_stat_size, "Data: " );
-            }
-            else if( ( tvb_get_guint8( tvb, offset ) & 0x7F ) == SC_MULT_SERV_PACK )
-            {
-               /* Multiple Service Reply (Success)*/
-
-               /* Add number of replies */
-               num_services = tvb_get_letohs( tvb, offset+4+add_stat_size );
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size, 2, "Number of Replies: %d", num_services );
-
-               /* Add replies */
-               temp_item = proto_tree_add_text( cmd_data_tree, tvb, offset+2+add_stat_size+4, num_services*2, "Offsets: " );
-
-               for( i=0; i < num_services; i++ )
-               {
-                  int serv_length;
-
-                  serv_offset = tvb_get_letohs( tvb, offset+6+add_stat_size+(i*2) );
-
-                  if( i == (num_services-1) )
-                  {
-                     /* Last service to add */
-                     proto_item_append_text(temp_item, "%d", serv_offset );
-                     serv_length = item_length-add_stat_size-serv_offset-4;
-                  }
-                  else
-                  {
-                     proto_item_append_text(temp_item, "%d, ", serv_offset );
-                     serv_length = tvb_get_letohs( tvb, offset+6+add_stat_size+((i+1)*2) ) - serv_offset;
-                  }
-
-                  temp_item2 = proto_tree_add_text( cmd_data_tree, tvb, offset+serv_offset+4, serv_length, "Service Reply #%d", i+1 );
-                  temp_tree = proto_item_add_subtree( temp_item2, ett_mult_ser );
-                  add_cip_data( temp_tree, tvb, offset+serv_offset+4, serv_length, pinfo );
-               }
-            } /* End if Multiple service Packet */
-            else if( ( tvb_get_guint8( tvb, offset ) & 0x7F ) == SC_GET_ATT_LIST )
-            {
-               /* Get Attribute List Reply (Success)*/
-
-               int att_count;
-
-               /* Add Attribute Count */
-               att_count = tvb_get_letohs( tvb, offset+4+add_stat_size );
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size, 2, "Attribute Count: %d", att_count );
-
-               /* Add the data */
-               add_byte_array_text_to_proto_tree( cmd_data_tree, tvb, offset+6+add_stat_size, item_length-6-add_stat_size, "Data: " );
-
-            } /* End if Multiple service Packet */
-            else
-   			{
-   			   /* Add data */
-               add_byte_array_text_to_proto_tree( cmd_data_tree, tvb, offset+4+add_stat_size, item_length-4-add_stat_size, "Data: " );
-   		   } /* end of check service code */
-
-   	   }
-         else
-         {
-            /* Error responses */
-
-            if( ( ( tvb_get_guint8( tvb, offset ) & 0x7F ) == SC_FWD_OPEN ) ||
-                ( ( tvb_get_guint8( tvb, offset ) & 0x7F ) == SC_FWD_CLOSE ) )
-            {
-               /* Forward open and forward close error response look the same */
-
-               /* Display connection serial number */
-               temp_data = tvb_get_letohs( tvb, offset+4+add_stat_size );
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size, 2, "Connection Serial Number: 0x%04X", temp_data );
-
-               /* Display the originator vendor id */
-               proto_tree_add_item( cmd_data_tree, hf_enip_vendors, tvb, offset+4+add_stat_size+2, 2, TRUE);
-
-               /* Display the originator serial number */
-               temp_data = tvb_get_letohl( tvb, offset+4+add_stat_size+4 );
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+4, 4, "Originator Serial Number: 0x%08X", temp_data );
-
-               /* Display remaining path size */
-               temp_data = tvb_get_guint8( tvb, offset+4+add_stat_size+8 );
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+8, 1, "Remaining Path Size: %d", temp_data );
-
-               /* Display reserved data */
-               temp_data = tvb_get_guint8( tvb, offset+4+add_stat_size+9 );
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size+9, 1, "Reserved: 0x%02X", temp_data );
-            }
-            else if( ( tvb_get_guint8( tvb, offset ) & 0x7F ) == SC_UNCON_SEND )
-            {
-               /* Unconnected send response (Unsuccess) */
-
-               /* Display remaining path size */
-               temp_data = tvb_get_guint8( tvb, offset+4+add_stat_size);
-               proto_tree_add_text( cmd_data_tree, tvb, offset+4+add_stat_size, 1, "Remaining Path Size: %d", temp_data );
-            }
-            else
-            {
-               /* Add data */
-               add_byte_array_text_to_proto_tree( cmd_data_tree, tvb, offset+4+add_stat_size, item_length-4-add_stat_size, "Data: " );
-            }
-
-         } /* end of if-else( CI_CRC_SUCCESS ) */
-
-      } /* End of if command-specific data present */
-
-	} /* End of if reply */
-	else
-	{
-	   /* Request message */
-
-      /* Add service to info column */
-      if(check_col(pinfo->cinfo, COL_INFO))
-      {
-         col_append_fstr( pinfo->cinfo, COL_INFO, ", %s",
-                  val_to_str( ( tvb_get_guint8( tvb, offset ) & 0x7F ),
-                     encap_sc_vals , "Unknown Service (%x)") );
-      }
-
-	   /* Add path size to tree */
-	   req_path_size = tvb_get_guint8( tvb, offset+1 )*2;
-	   proto_tree_add_text( item_tree, tvb, offset+1, 1, "Request Path Size: %d (words)", req_path_size/2 );
-
-      /* Add the epath */
-      pi = proto_tree_add_text(item_tree, tvb, offset+2, req_path_size, "Request Path: ");
-      show_epath( tvb, pi, offset+2, req_path_size );
-
-      /* If there is any command specific data creat a sub-tree for it */
-      if( (item_length-req_path_size-2) != 0 )
-      {
-
-         pi = proto_tree_add_text( item_tree, tvb, offset+2+req_path_size, item_length-req_path_size-2, "Command Specific Data" );
-         cmd_data_tree = proto_item_add_subtree( pi, ett_cmd_data );
-
-         /* Check what service code that recived */
-
-         if( tvb_get_guint8( tvb, offset ) == SC_FWD_OPEN )
-         {
-            /* Forward open Request*/
-
-            /* Display the priority/tick timer */
-            temp_byte = tvb_get_guint8( tvb, offset+2+req_path_size );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size, 1, "Priority/Time_tick: 0x%02X", temp_byte );
-
-            /* Display the time-out ticks */
-            temp_data = tvb_get_guint8( tvb, offset+2+req_path_size+1 );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+1, 1, "Time-out_ticks: %d", temp_data );
-
-            /* Display the actual time out */
-            temp_data = ( 1 << ( temp_byte & 0x0F ) ) * temp_data;
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size, 2, "Actual Time Out: %dms", temp_data );
-
-            /* Display originator to taget connection ID */
-            temp_data = tvb_get_letohl( tvb, offset+2+req_path_size+2 );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+2, 4, "O->T Network Connection ID: 0x%08X", temp_data );
-
-            /* Display target to originator connection ID */
-            temp_data = tvb_get_letohl( tvb, offset+2+req_path_size+6 );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+6, 4, "T->O Network Connection ID: 0x%08X", temp_data );
-
-            /* Display connection serial number */
-            temp_data = tvb_get_letohs( tvb, offset+2+req_path_size+10 );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+10, 2, "Connection Serial Number: 0x%04X", temp_data );
-
-            /* Display the originator vendor id */
-            proto_tree_add_item( cmd_data_tree, hf_enip_vendors, tvb, offset+2+req_path_size+12, 2, TRUE);
-
-            /* Display the originator serial number */
-            temp_data = tvb_get_letohl( tvb, offset+2+req_path_size+14 );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+14, 4, "Originator Serial Number: 0x%08X", temp_data );
-
-            /* Display the timeout multiplier */
-            temp_data = tvb_get_guint8( tvb, offset+2+req_path_size+18 );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+18, 1, "Connection Timeout Multiplier: %s (%d)", val_to_str( temp_data, enip_con_time_mult_vals , "Reserved" ), temp_data );
-
-            /* Put out an indicator for the reserved bytes */
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+19, 3, "Reserved Data" );
-
-            /* Display originator to target requested packet interval */
-            temp_data = tvb_get_letohl( tvb, offset+2+req_path_size+22 );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+22, 4, "O->T RPI: %dms (0x%08X)", temp_data / 1000, temp_data );
-
-   	      /* Display originator to target network connection patameterts, in a tree */
-   	      temp_data = tvb_get_letohs( tvb, offset+2+req_path_size+26 );
-   	      ncppi = proto_tree_add_text(cmd_data_tree, tvb, offset+2+req_path_size+26, 2, "O->T Network Connection Parameters: 0x%04X", temp_data );
-   	      ncp_tree = proto_item_add_subtree(ncppi, ett_ncp);
-
-            /* Add the data to the tree */
-            proto_tree_add_item(ncp_tree, hf_enip_ucm_fwo_own,
-   					tvb, offset+2+req_path_size+26, 2, TRUE );
-   			proto_tree_add_item(ncp_tree, hf_enip_ucm_fwo_typ,
-   					tvb, offset+2+req_path_size+26, 2, TRUE );
-            proto_tree_add_item(ncp_tree, hf_enip_ucm_fwo_prio,
-   					tvb, offset+2+req_path_size+26, 2, TRUE );
-   			proto_tree_add_item(ncp_tree, hf_enip_ucm_fwo_fixed_var,
-   					tvb, offset+2+req_path_size+26, 2, TRUE );
-   			proto_tree_add_item(ncp_tree, hf_enip_ucm_fwo_con_size,
-   					tvb, offset+2+req_path_size+26, 2, TRUE );
-
-            /* Display target to originator requested packet interval */
-            temp_data = tvb_get_letohl( tvb, offset+2+req_path_size+28 );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+28, 4, "T->O RPI: %dms (0x%08X)", temp_data / 1000, temp_data );
-
-   	      /* Display target to originator network connection patameterts, in a tree */
-   	      temp_data = tvb_get_letohs( tvb, offset+2+req_path_size+32 );
-   	      ncppi = proto_tree_add_text(cmd_data_tree, tvb, offset+2+req_path_size+32, 2, "T->O Network Connection Parameters: 0x%04X", temp_data );
-   	      ncp_tree = proto_item_add_subtree(ncppi, ett_ncp);
-
-            /* Add the data to the tree */
-            proto_tree_add_item(ncp_tree, hf_enip_ucm_fwo_own,
-   					tvb, offset+2+req_path_size+32, 2, TRUE );
-   			proto_tree_add_item(ncp_tree, hf_enip_ucm_fwo_typ,
-   					tvb, offset+2+req_path_size+32, 2, TRUE );
-            proto_tree_add_item(ncp_tree, hf_enip_ucm_fwo_prio,
-   					tvb, offset+2+req_path_size+32, 2, TRUE );
-   			proto_tree_add_item(ncp_tree, hf_enip_ucm_fwo_fixed_var,
-   					tvb, offset+2+req_path_size+32, 2, TRUE );
-   			proto_tree_add_item(ncp_tree, hf_enip_ucm_fwo_con_size,
-   					tvb, offset+2+req_path_size+32, 2, TRUE );
-
-            /* Transport type/trigger in tree*/
-            temp_data = tvb_get_guint8( tvb, offset+2+req_path_size+34 );
-
-   	      ncppi = proto_tree_add_text(cmd_data_tree, tvb, offset+2+req_path_size+34, 1, "Transport Type/Trigger: 0x%02X", temp_data );
-   	      ncp_tree = proto_item_add_subtree(ncppi, ett_ncp);
-
-            /* Add the data to the tree */
-            proto_tree_add_item(ncp_tree, hf_enip_ucm_fwo_dir,
-   					tvb, offset+2+req_path_size+34, 1, TRUE );
-
-   			proto_tree_add_item(ncp_tree, hf_enip_ucm_fwo_trigg,
-   					tvb, offset+2+req_path_size+34, 1, TRUE );
-
-            proto_tree_add_item(ncp_tree, hf_enip_ucm_fwo_class,
-   					tvb, offset+2+req_path_size+34, 1, TRUE );
-
-            /* Add path size */
-            conn_path_size = tvb_get_guint8( tvb, offset+2+req_path_size+35 )*2;
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+35, 1, "Connection Path Size: %d (words)", conn_path_size / 2 );
-
-            /* Add the epath */
-            pi = proto_tree_add_text(cmd_data_tree, tvb, offset+2+req_path_size+36, conn_path_size, "Connection Path: ");
-            show_epath( tvb, pi, offset+2+req_path_size+36, conn_path_size );
-         }
-         else if( tvb_get_guint8( tvb, offset ) == SC_FWD_CLOSE )
-         {
-            /* Forward Close Request */
-
-            /* Display the priority/tick timer */
-            temp_byte = tvb_get_guint8( tvb, offset+2+req_path_size );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size, 1, "Priority/Time_tick: 0x%02X", temp_byte );
-
-            /* Display the time-out ticks */
-            temp_data = tvb_get_guint8( tvb, offset+2+req_path_size+1 );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+1, 1, "Time-out_ticks: %d", temp_data );
-
-            /* Display the actual time out */
-            temp_data = ( 1 << ( temp_byte & 0x0F ) ) * temp_data;
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size, 2, "Actual Time Out: %dms", temp_data );
-
-            /* Display connection serial number */
-            temp_data = tvb_get_letohs( tvb, offset+2+req_path_size+2 );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+2, 2, "Connection Serial Number: 0x%04X", temp_data );
-
-            /* Display the originator vendor id */
-            proto_tree_add_item( cmd_data_tree, hf_enip_vendors, tvb, offset+2+req_path_size+4, 2, TRUE);
-
-            /* Display the originator serial number */
-            temp_data = tvb_get_letohl( tvb, offset+2+req_path_size+6 );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+6, 4, "Originator Serial Number: 0x%08X", temp_data );
-
-            /* Add the path size */
-            conn_path_size = tvb_get_guint8( tvb, offset+2+req_path_size+10 )*2;
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+10, 1, "Connection Path Size: %d (words)", conn_path_size / 2 );
-
-            /* Add the reserved byte */
-            temp_byte = tvb_get_guint8( tvb, offset+2+req_path_size+11 );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+11, 1, "Reserved: 0x%02X", temp_byte );
-
-            /* Add the EPATH */
-            pi = proto_tree_add_text(cmd_data_tree, tvb, offset+2+req_path_size+12, conn_path_size, "Connection Path: ");
-            show_epath( tvb, pi, offset+2+req_path_size+12, conn_path_size );
-
-         } /* End of forward close */
-         else if( tvb_get_guint8( tvb, offset ) == SC_UNCON_SEND )
-         {
-            /* Unconnected send */
-
-            /* Display the priority/tick timer */
-            temp_byte = tvb_get_guint8( tvb, offset+2+req_path_size );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size, 1, "Priority/Time_tick: 0x%02X", temp_byte );
-
-            /* Display the time-out ticks */
-            temp_data = tvb_get_guint8( tvb, offset+2+req_path_size+1 );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+1, 1, "Time-out_ticks: %d", temp_data );
-
-            /* Display the actual time out */
-            temp_data = ( 1 << ( temp_byte & 0x0F ) ) * temp_data;
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size, 2, "Actual Time Out: %dms", temp_data );
-
-            /* Message request size */
-            msg_req_siz = tvb_get_letohs( tvb, offset+2+req_path_size+2 );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+2, 2, "Message Request Size: 0x%04X", msg_req_siz );
-
-            /* Message Request */
-            temp_item = proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+4, msg_req_siz, "Message Request" );
-            temp_tree = proto_item_add_subtree(temp_item, ett_mes_req );
-
-            /* MR - Service */
-            temp_data = tvb_get_guint8( tvb, offset+2+req_path_size+4 );
-            proto_tree_add_text( temp_tree, tvb, offset+2+req_path_size+4, 1, "Service: %s (0x%02X)", val_to_str( temp_data, encap_sc_vals , "" ), temp_data );
-
-            /* Add service to info column */
-            if(check_col(pinfo->cinfo, COL_INFO))
-            {
-               col_append_fstr( pinfo->cinfo, COL_INFO, ", %s",
-                        val_to_str( ( temp_data & 0x7F ),
-                           encap_sc_vals , ", Unknown Service (%x)") );
-            }
-
-            /* MR - Request path Size */
-   		   mr_req_path_size = tvb_get_guint8( tvb, offset+2+req_path_size+5 )*2;
-   		   proto_tree_add_text( temp_tree, tvb, offset+2+req_path_size+5, 1, "Request Path Size: %d (words)", mr_req_path_size/2 );
-
-            /* MR - EPATH */
-            temp_item = proto_tree_add_text(temp_tree, tvb, offset+2+req_path_size+6, mr_req_path_size, "Request Path: ");
-            show_epath( tvb, temp_item, offset+2+req_path_size+6, mr_req_path_size );
-
-            /* MR - Request data */
-            if( ( msg_req_siz-2-mr_req_path_size ) != 0 )
-            {
-               add_byte_array_text_to_proto_tree( temp_tree, tvb, offset+2+req_path_size+6+mr_req_path_size, msg_req_siz-2-mr_req_path_size, "Request Data: " );
-            }
-
-            if( msg_req_siz % 2 )
-            {
-               /* Pad byte */
-               proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+4+msg_req_siz, 1, "Pad Byte (0x%02X)",
-                  tvb_get_guint8( tvb, offset+2+req_path_size+4+msg_req_siz ) );
-               msg_req_siz++;	/* include the padding */
-            }
-
-            /* Route Path Size */
-            route_path_size = tvb_get_guint8( tvb, offset+2+req_path_size+4+msg_req_siz )*2;
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+4+msg_req_siz, 1, "Route Path Size: %d (words)", route_path_size/2 );
-
-            /* Reserved */
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+5+msg_req_siz, 1, "Reserved (0x%02X)",
-                tvb_get_guint8( tvb, offset+2+req_path_size+5+msg_req_siz ) );
-
-            /* Route Path */
-            temp_item = proto_tree_add_text(cmd_data_tree, tvb, offset+2+req_path_size+6+msg_req_siz, route_path_size, "Route Path");
-            show_epath( tvb, temp_item, offset+2+req_path_size+6+msg_req_siz, route_path_size );
-
-         } /* End if unconnected send */
-         else if( tvb_get_guint8( tvb, offset ) == SC_MULT_SERV_PACK )
-         {
-            /* Multiple service packet */
-
-            /* Add number of services */
-            num_services = tvb_get_letohs( tvb, offset+2+req_path_size );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size, 2, "Number of Services: %d", num_services );
-
-            /* Add services */
-            temp_item = proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+2, num_services*2, "Offsets: " );
-
-            for( i=0; i < num_services; i++ )
-            {
-               int serv_length;
-
-               serv_offset = tvb_get_letohs( tvb, offset+4+req_path_size+(i*2) );
-
-               if( i == (num_services-1) )
-               {
-                  /* Last service to add */
-                  serv_length = item_length-2-req_path_size-serv_offset;
-                  proto_item_append_text(temp_item, "%d", serv_offset );
-               }
-               else
-               {
-                  serv_length = tvb_get_letohs( tvb, offset+4+req_path_size+((i+1)*2) ) - serv_offset;
-                  proto_item_append_text(temp_item, "%d, ", serv_offset );
-               }
-
-               temp_item2 = proto_tree_add_text( cmd_data_tree, tvb, offset+serv_offset+6, serv_length, "Service Packet #%d", i+1 );
-               temp_tree = proto_item_add_subtree( temp_item2, ett_mult_ser );
-               add_cip_data( temp_tree, tvb, offset+serv_offset+6, serv_length, pinfo );
-            }
-         } /* End if Multiple service Packet */
-         else if( tvb_get_guint8( tvb, offset ) == SC_GET_ATT_LIST )
-         {
-            /* Get attribute list request */
-
-            int att_count;
-
-            /* Add number of services */
-            att_count = tvb_get_letohs( tvb, offset+2+req_path_size );
-            proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size, 2, "Attribute Count: %d", att_count );
-
-            /* Add Attribute List */
-            temp_item = proto_tree_add_text( cmd_data_tree, tvb, offset+2+req_path_size+2, att_count*2, "Attribute List: " );
-
-            for( i=0; i < att_count; i++ )
-            {
-               if( i == (att_count-1) )
-                  proto_item_append_text(temp_item, "%d",tvb_get_letohs( tvb, offset+4+req_path_size+(i*2) ) );
-               else
-                  proto_item_append_text(temp_item, "%d, ",tvb_get_letohs( tvb, offset+4+req_path_size+(i*2) ) );
-            }
-
-         } /* End of Get attribute list request */
-         else
-         {
-		      /* Add data */
-            add_byte_array_text_to_proto_tree( cmd_data_tree, tvb, offset+2+req_path_size, item_length-req_path_size-2, "Data: " );
-         } /* End of check service code */
-
-      } /* End of if command-specific data present */
-
-	} /* end of if-else( request ) */
-
-} /* end of add_cip_data() */
-
-
-
-static void
-show_cdf( int encap_service, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset )
-{
-   proto_item *temp_item, *ri, *ci;
-   proto_item *sockaddr_item;
-	proto_tree *temp_tree, *cip_tree, *item_tree, *sockaddr_tree;
+   proto_item *temp_item, *count_item, *type_item, *sockaddr_item;
+	proto_tree *temp_tree, *count_tree, *item_tree, *sockaddr_tree;
 	int temp_data, item_count, item_length, item;
 	unsigned char name_length;
+	tvbuff_t *next_tvb;
 
-	/* Show Common Data Format sub tree */
+	/* Create item count tree */
 	item_count = tvb_get_letohs( tvb, offset );
-   ri = proto_tree_add_text( tree, tvb, offset, 2, "Item Count: %d", item_count );
-	cip_tree = proto_item_add_subtree(ri, ett_cip);
+   count_item  = proto_tree_add_text( tree, tvb, offset, 2, "Item Count: %d", item_count );
+	count_tree  = proto_item_add_subtree( count_item, ett_count_tree );
 
 	while( item_count-- )
 	{
-		/* Add item type tree */
-		ci = proto_tree_add_item(cip_tree, hf_enip_cpf_typeid, tvb, offset+2, 2, TRUE );
-		item_tree = proto_item_add_subtree(ci, ett_cpf);
-
-		/* Add length field */
-      temp_data = tvb_get_letohs( tvb, offset+4 );
-      proto_tree_add_text( item_tree, tvb, offset+4, 2, "Length: %d", temp_data );
+		/* Add item type tree to item count tree*/
+		type_item = proto_tree_add_item( count_tree, hf_enip_cpf_typeid, tvb, offset+2, 2, TRUE );
+		item_tree = proto_item_add_subtree( type_item, ett_type_tree );
+
+		/* Add length field to item type tree*/
+      proto_tree_add_text( item_tree, tvb, offset+4, 2, "Length: %d", tvb_get_letohs( tvb, offset+4 ) );
 
 		item        = tvb_get_letohs( tvb, offset+2 );
 		item_length = tvb_get_letohs( tvb, offset+4 );
@@ -1960,14 +310,21 @@
 
 			   case UNCONNECTED_MSG:
 
-					/* Add CIP data tree*/
-					add_cip_data( item_tree, tvb, offset+6, item_length, pinfo );
+					/* Call dissector for interface */
+					next_tvb = tvb_new_subset( tvb, offset+6, item_length, item_length );
+
+               if( tvb_length_remaining(next_tvb, 0) == 0 || !dissector_try_port(subdissector_srrd_table, ifacehndl, next_tvb, pinfo, g_tree) )
+               {
+                  /* Show the undissected payload */
+                   if( tvb_length_remaining(tvb, offset) > 0 )
+                     call_dissector( data_handle, next_tvb, pinfo, g_tree );
+               }
 
 					break;
 
             case CONNECTION_TRANSPORT:
 
-               if( encap_service == SEND_UNIT_DATA )
+               if( command == SEND_UNIT_DATA )
                {
                   /*
                   ** If the encapsulation service is SendUnit Data, this is a
@@ -1977,19 +334,16 @@
                   /* Add sequence count ( Transport Class 1,2,3 )*/
                   proto_tree_add_text( item_tree, tvb, offset+6, 2, "Sequence Count: 0x%04X", tvb_get_letohs( tvb, offset+6 ) );
 
-                  /* Add CIP data tree */
-                  add_cip_data( item_tree, tvb, offset+8, item_length-2, pinfo );
+                  /* Call dissector for interface */
+                  next_tvb = tvb_new_subset (tvb, offset+8, item_length-2, item_length-2);
 
-                  /* Add SEQ Count to Info col */
+                  if( tvb_length_remaining(next_tvb, 0) == 0 || !dissector_try_port(subdissector_sud_table, ifacehndl, next_tvb, pinfo, g_tree) )
+                  {
+                     /* Show the undissected payload */
+                      if( tvb_length_remaining(tvb, offset) > 0 )
+                        call_dissector( data_handle, next_tvb, pinfo, g_tree );
+                  }
 
-   			      /*
-   			      if(check_col(pinfo->cinfo, COL_INFO))
-   	            {
-                     col_append_fstr(pinfo->cinfo, COL_INFO,
-   				         ", SEQ=0x%04X",
-   				         tvb_get_letohs( tvb, offset+6 ) );
-   				   }
-   				   */
                }
                else
                {
@@ -2012,31 +366,31 @@
                sockaddr_tree = proto_item_add_subtree( sockaddr_item, ett_sockadd );
 
                /* Socket address struct - sin_family */
-               proto_tree_add_item(sockaddr_tree, hf_enip_cpf_lir_sinfamily,
+               proto_tree_add_item(sockaddr_tree, hf_enip_lir_sinfamily,
 							tvb, offset+8, 2, FALSE );
 
                /* Socket address struct - sin_port */
-               proto_tree_add_item(sockaddr_tree, hf_enip_cpf_lir_sinport,
+               proto_tree_add_item(sockaddr_tree, hf_enip_lir_sinport,
 							tvb, offset+10, 2, FALSE );
 
                /* Socket address struct - sin_address */
-               proto_tree_add_item(sockaddr_tree, hf_enip_cpf_lir_sinaddr,
+               proto_tree_add_item(sockaddr_tree, hf_enip_lir_sinaddr,
 							tvb, offset+12, 4, FALSE );
 
                /* Socket address struct - sin_zero */
-               proto_tree_add_item(sockaddr_tree, hf_enip_cpf_lir_sinzero,
+               proto_tree_add_item(sockaddr_tree, hf_enip_lir_sinzero,
 							tvb, offset+16, 8, FALSE );
 
                /* Vendor ID */
-               proto_tree_add_item(item_tree, hf_enip_vendors,
+               proto_tree_add_item(item_tree, hf_enip_lir_vendor,
 							tvb, offset+24, 2, TRUE );
 
                /* Device Type */
-               proto_tree_add_item(item_tree, hf_enip_cpf_lir_devtype,
+               proto_tree_add_item(item_tree, hf_enip_lir_devtype,
 							tvb, offset+26, 2, TRUE );
 
                /* Product Code */
-               proto_tree_add_item(item_tree, hf_enip_cpf_lir_prodcode,
+               proto_tree_add_item(item_tree, hf_enip_lir_prodcode,
 							tvb, offset+28, 2, TRUE );
 
                /* Revision */
@@ -2044,22 +398,19 @@
                proto_tree_add_text( item_tree, tvb, offset+30, 2, "Revision: %d.%02d", temp_data & 0xFF, ( temp_data & 0xFF00 ) >> 8 );
 
                /* Status */
-               proto_tree_add_item(item_tree, hf_enip_cpf_lir_status,
+               proto_tree_add_item(item_tree, hf_enip_lir_status,
 							tvb, offset+32, 2, TRUE );
 
                /* Serial Number */
-               proto_tree_add_item(item_tree, hf_enip_cpf_lir_sernbr,
+               proto_tree_add_item(item_tree, hf_enip_lir_serial,
 							tvb, offset+34, 4, TRUE );
 
                /* Product Name Length */
-               proto_tree_add_item(item_tree, hf_enip_cpf_lir_namelength,
-							tvb, offset+38, 1, TRUE );
-
-               /* Get the lenth of the name */
                name_length = tvb_get_guint8( tvb, offset+38 );
+               proto_tree_add_text( item_tree, tvb, offset+38, 1, "Product Name Length: %d", name_length );
 
                /* Product Name */
-               proto_tree_add_item(item_tree, hf_enip_cpf_lir_name,
+               proto_tree_add_item(item_tree, hf_enip_lir_name,
 							tvb, offset+39, name_length, TRUE );
 
                /* Append product name to info column */
@@ -2070,7 +421,7 @@
                }
 
                /* State */
-               proto_tree_add_item(item_tree, hf_enip_cpf_lir_state,
+               proto_tree_add_item(item_tree, hf_enip_lir_state,
 							tvb, offset+name_length+39, 1, TRUE );
                break;
 
@@ -2079,28 +430,28 @@
             case SOCK_ADR_INFO_TO:
 
                /* Socket address struct - sin_family */
-               proto_tree_add_item(item_tree, hf_enip_cpf_lir_sinfamily,
+               proto_tree_add_item(item_tree, hf_enip_lir_sinfamily,
 							tvb, offset+6, 2, FALSE );
 
                /* Socket address struct - sin_port */
-               proto_tree_add_item(item_tree, hf_enip_cpf_lir_sinport,
+               proto_tree_add_item(item_tree, hf_enip_lir_sinport,
 							tvb, offset+8, 2, FALSE );
 
                /* Socket address struct - sin_address */
-               proto_tree_add_item(item_tree, hf_enip_cpf_lir_sinaddr,
+               proto_tree_add_item(item_tree, hf_enip_lir_sinaddr,
 							tvb, offset+10, 4, FALSE );
 
                /* Socket address struct - sin_zero */
-               proto_tree_add_item( item_tree, hf_enip_cpf_lir_sinzero,
+               proto_tree_add_item( item_tree, hf_enip_lir_sinzero,
 							tvb, offset+14, 8, FALSE );
 				   break;
 
 
             case SEQ_ADDRESS:
-               proto_tree_add_item(item_tree, hf_enip_cpf_sat_connid,
+               proto_tree_add_item(item_tree, hf_enip_cpf_sai_connid,
 							tvb, offset+6, 4, TRUE );
 
-               proto_tree_add_item(item_tree, hf_enip_cpf_sat_seqnum,
+               proto_tree_add_item(item_tree, hf_enip_cpf_sai_seqnum,
 							tvb, offset+10, 4, TRUE );
 
                /* Add info to column */
@@ -2128,13 +479,13 @@
                temp_item = proto_tree_add_text(item_tree, tvb, offset+8, 2, "Capability Flags: 0x%04X", temp_data );
                temp_tree = proto_item_add_subtree(temp_item, ett_lsrcf);
 
-               proto_tree_add_item(temp_tree, hf_enip_cpf_lsr_tcp,
+               proto_tree_add_item(temp_tree, hf_enip_lsr_tcp,
                   tvb, offset+8, 2, TRUE );
-      		   proto_tree_add_item(temp_tree, hf_enip_cpf_lsr_udp,
+      		   proto_tree_add_item(temp_tree, hf_enip_lsr_udp,
       			   tvb, offset+8, 2, TRUE );
 
                /* Name of service */
-               temp_item = proto_tree_add_text( item_tree, tvb, offset+10, 16, "Name Of Service: %s",
+               temp_item = proto_tree_add_text( item_tree, tvb, offset+10, 16, "Name of Service: %s",
                    tvb_format_stringzpad(tvb, offset+10, 16) );
 
                /* Append service name to info column */
@@ -2160,7 +511,7 @@
 
 	} /* end of while( item count ) */
 
-} /* end of show_cdf() */
+} /* end of dissect_cpf() */
 
 
 
@@ -2181,7 +532,7 @@
 }
 
 static guint
-get_cipencap_pdu_len(tvbuff_t *tvb, int offset)
+get_enip_pdu_len(tvbuff_t *tvb, int offset)
 {
    guint16 plen;
 
@@ -2199,16 +550,16 @@
 
 /* Code to actually dissect the packets */
 static void
-dissect_cipencap_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+dissect_enip_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
-   int	    packet_type;
+   int	   packet_type;
    guint16  encap_cmd, encap_data_length;
    char     pkt_type_str[9] = "";
-   guint32  status;
+   guint32  ifacehndl;
 
    /* Set up structures needed to add the protocol subtree and manage it */
    proto_item *ti, *encaph, *csf;
-   proto_tree *cipencap_tree, *headertree, *csftree;
+   proto_tree *enip_tree, *header_tree, *csftree;
 
    /* Make entries in Protocol column and Info column on summary display */
    if (check_col(pinfo->cinfo, COL_PROTOCOL))
@@ -2238,7 +589,7 @@
 
       /* Add service and request/response to info column */
       col_add_fstr(pinfo->cinfo, COL_INFO,
-                "%-20s (%s)",
+                "%s (%s)",
 	      val_to_str(encap_cmd, encap_cmd_vals, "Unknown (0x%04x)"),
 	      pkt_type_str );
 
@@ -2250,33 +601,28 @@
    if (tree) {
 
       /* create display subtree for the protocol */
-      ti = proto_tree_add_item(tree, proto_cipencap, tvb, 0, -1, FALSE);
+      ti = proto_tree_add_item(tree, proto_enip, tvb, 0, -1, FALSE);
 
-      cipencap_tree = proto_item_add_subtree(ti, ett_cipencap);
+      enip_tree = proto_item_add_subtree(ti, ett_enip);
 
       /* Add encapsulation header tree */
-      encaph     = proto_tree_add_text( cipencap_tree, tvb, 0, 24, "Encapsulation Header");
-      headertree = proto_item_add_subtree(encaph, ett_cipencaph);
+      encaph     = proto_tree_add_text( enip_tree, tvb, 0, 24, "Encapsulation Header");
+      header_tree = proto_item_add_subtree(encaph, ett_enip);
 
-      /* CIP header information */
-      proto_tree_add_uint(headertree, hf_enip_command, tvb, 0, 2, encap_cmd);
+      /* Add EtherNet/IP encapsulation header */
+      proto_tree_add_item( header_tree, hf_enip_command, tvb, 0, 2, TRUE );
 
       encap_data_length = tvb_get_letohs( tvb, 2 );
-      proto_tree_add_text( headertree, tvb, 2, 2, "Length: %u", encap_data_length );
+      proto_tree_add_text( header_tree, tvb, 2, 2, "Length: %u", encap_data_length );
 
-      proto_tree_add_text( headertree, tvb, 4, 4, "Session Handle: 0x%08X",
-                          tvb_get_letohl( tvb, 4 ) );
-
-      status = tvb_get_letohl( tvb, 8 );
-      proto_tree_add_text( headertree, tvb, 8, 4, "Status: %s (0x%08X)",
-                          val_to_str( status, encap_status_vals,
-                                     "Unknown Status Code" ),
-                          status);
-
-      add_byte_array_text_to_proto_tree( headertree, tvb, 12, 8, "Sender context: " );
-
-      proto_tree_add_text( headertree, tvb, 20, 4, "Options: 0x%08X",
-                          tvb_get_letohl( tvb, 20 ) );
+      proto_tree_add_item( header_tree, hf_enip_session, tvb, 4, 4, TRUE );
+      proto_tree_add_item( header_tree, hf_enip_status, tvb, 8, 4, TRUE );
+      proto_tree_add_item( header_tree, hf_enip_sendercontex, tvb, 12, 8, TRUE );
+      proto_tree_add_item( header_tree, hf_enip_options, tvb, 20, 4, TRUE );
+
+      /* Append session and command to the protocol tree */
+      proto_item_append_text( ti, ", Session: 0x%08X, %s", tvb_get_letohl( tvb, 4 ),
+         val_to_str( encap_cmd, encap_cmd_vals, "Unknown (0x%04x)" ) );
 
       /*
       ** For some commands we want to add some info to the info column
@@ -2301,10 +647,10 @@
       {
          /* The packet have some command specific data, buid a sub tree for it */
 
-         csf = proto_tree_add_text( cipencap_tree, tvb, 24, encap_data_length,
+         csf = proto_tree_add_text( enip_tree, tvb, 24, encap_data_length,
                                    "Command Specific Data");
 
-         csftree = proto_item_add_subtree(csf, ett_csf);
+         csftree = proto_item_add_subtree(csf, ett_command_tree);
 
          switch( encap_cmd )
          {
@@ -2312,15 +658,15 @@
                break;
 
             case LIST_SERVICES:
-               show_cdf( encap_cmd, tvb, pinfo, csftree, 24 );
+               dissect_cpf( encap_cmd, tvb, pinfo, csftree, 24, 0 );
                break;
 
             case LIST_IDENTITY:
-               show_cdf( encap_cmd, tvb, pinfo, csftree, 24 );
+               dissect_cpf( encap_cmd, tvb, pinfo, csftree, 24, 0 );
                break;
 
             case LIST_INTERFACES:
-               show_cdf( encap_cmd, tvb, pinfo, csftree, 24 );
+               dissect_cpf( encap_cmd, tvb, pinfo, csftree, 24, 0 );
                break;
 
             case REGISTER_SESSION:
@@ -2336,13 +682,23 @@
                break;
 
             case SEND_RR_DATA:
+               proto_tree_add_item(csftree, hf_enip_srrd_ifacehnd, tvb, 24, 4, TRUE);
+
+               proto_tree_add_text( csftree, tvb, 28, 2, "Timeout: %u",
+                                   tvb_get_letohs( tvb, 28 ) );
+
+               ifacehndl = tvb_get_letohl( tvb, 24 );
+               dissect_cpf( encap_cmd, tvb, pinfo, csftree, 30, ifacehndl );
+               break;
+
             case SEND_UNIT_DATA:
-               proto_tree_add_item(csftree, hf_enip_ifacehnd, tvb, 24, 4, TRUE);
+               proto_tree_add_item(csftree, hf_enip_sud_ifacehnd, tvb, 24, 4, TRUE);
 
                proto_tree_add_text( csftree, tvb, 28, 2, "Timeout: %u",
                                    tvb_get_letohs( tvb, 28 ) );
 
-               show_cdf( encap_cmd, tvb, pinfo, csftree, 30 );
+               ifacehndl = tvb_get_letohl( tvb, 24 );
+               dissect_cpf( encap_cmd, tvb, pinfo, csftree, 30, ifacehndl );
                break;
 
             case INDICATE_STATUS:
@@ -2350,7 +706,7 @@
             default:
 
                /* Can not decode - Just show the data */
-               add_byte_array_text_to_proto_tree( headertree, tvb, 24, encap_data_length, "Encap Data: " );
+               add_byte_array_text_to_proto_tree( header_tree, tvb, 24, encap_data_length, "Encap Data: " );
                break;
 
          } /* end of switch() */
@@ -2358,13 +714,15 @@
       } /* end of if( encapsulated data ) */
 
    }
-} /* end of dissect_cipencap() */
+} /* end of dissect_enip_pdu() */
 
 static int
-dissect_cipencap_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+dissect_enip_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
    guint16  encap_cmd;
 
+   g_tree = tree;
+
    /* An ENIP packet is at least 4 bytes long - we need the command type. */
    if (!tvb_bytes_exist(tvb, 0, 4))
       return 0;
@@ -2374,15 +732,17 @@
    if (match_strval(encap_cmd, encap_cmd_vals) == NULL)
       return 0;	/* not a known command */
 
-   dissect_cipencap_pdu(tvb, pinfo, tree);
+   dissect_enip_pdu(tvb, pinfo, tree);
    return tvb_length(tvb);
 }
 
 static int
-dissect_cipencap_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+dissect_enip_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
    guint16  encap_cmd;
 
+   g_tree = tree;
+
    /* An ENIP packet is at least 4 bytes long - we need the command type. */
    if (!tvb_bytes_exist(tvb, 0, 4))
       return 0;
@@ -2392,8 +752,8 @@
    if (match_strval(encap_cmd, encap_cmd_vals) == NULL)
       return 0;	/* not a known command */
 
-   tcp_dissect_pdus(tvb, pinfo, tree, cipencap_desegment, 4,
-	get_cipencap_pdu_len, dissect_cipencap_pdu);
+   tcp_dissect_pdus(tvb, pinfo, tree, enip_desegment, 4,
+	get_enip_pdu_len, dissect_enip_pdu);
    return tvb_length(tvb);
 }
 
@@ -2403,7 +763,9 @@
 {
    /* Set up structures needed to add the protocol subtree and manage it */
 	proto_item *ti;
-	proto_tree *cipencap_tree;
+	proto_tree *enip_tree;
+
+	g_tree = tree;
 
    /* Make entries in Protocol column and Info column on summary display */
 	if (check_col(pinfo->cinfo, COL_PROTOCOL))
@@ -2414,11 +776,11 @@
 	if (tree)
 	{
       /* create display subtree for the protocol */
-		ti = proto_tree_add_item(tree, proto_cipencap, tvb, 0, -1, FALSE);
+		ti = proto_tree_add_item(tree, proto_enip, tvb, 0, -1, FALSE);
 
-		cipencap_tree = proto_item_add_subtree(ti, ett_cipencap);
+		enip_tree = proto_item_add_subtree(ti, ett_enip);
 
-      show_cdf( 0xFFFF, tvb, pinfo, cipencap_tree, 0 );
+      dissect_cpf( 0xFFFF, tvb, pinfo, enip_tree, 0, 0 );
 	}
 
 } /* end of dissect_enipio() */
@@ -2431,228 +793,165 @@
 */
 
 void
-proto_register_cipencap(void)
+proto_register_enip(void)
 {
-
-/* Setup list of header fields  lengthSee Section 1.6.1 for details*/
+   /* Setup list of header fields */
 	static hf_register_info hf[] = {
 		{ &hf_enip_command,
-			{ "Command",           "enip.command",
+			{ "Command", "enip.command",
 			FT_UINT16, BASE_HEX, VALS(encap_cmd_vals), 0,
 			"Encapsulation command", HFILL }
 		},
-
-		/* Encapsulated data headers */
-		/* Common Packet Format */
-		{ &hf_enip_cpf_typeid,
-			{ "Type ID",          "enip.cpf.typeid",
-			FT_UINT16, BASE_HEX, VALS(cdf_type_vals), 0,
-			"Type of encapsulated item", HFILL }
-		},
-
-		/* Send RR Data */
-		{ &hf_enip_ifacehnd,
-			{ "Interface Handle",           "enip.cpf.rr.ifacehnd",
+		{ &hf_enip_session,
+			{ "Session Handle", "enip.session",
 			FT_UINT32, BASE_HEX, NULL, 0,
-			"Interface handle", HFILL }
+			"Session identification", HFILL }
 		},
-
-		/* Unconnected message */
-      { &hf_enip_ucm_rr,
-			{ "Request/Response", "enip.cip.rr",
-			FT_UINT8, BASE_HEX, VALS(encap_sc_rr), 0x80,
-			"Request or Response message", HFILL }
-		},
-		{ &hf_enip_ucm_sc,
-			{ "Service",           "enip.cip.sc",
-			FT_UINT8, BASE_HEX, VALS(encap_sc_vals), 0x7F,
-			"CIP Service code", HFILL }
+		{ &hf_enip_status,
+			{ "Status", "enip.status",
+			FT_UINT32, BASE_HEX, VALS(encap_status_vals), 0,
+			"Status code", HFILL }
 		},
-		{ &hf_enip_ucm_path,
-			{ "Request Path",           "enip.cip.path",
+		{ &hf_enip_sendercontex,
+			{ "Sender Context", "enip.context",
 			FT_BYTES, BASE_HEX, NULL, 0,
-			"Request path", HFILL }
+			"Information pertient to the sender", HFILL }
 		},
-		{ &hf_enip_ucm_genstat,
-			{ "General Status",           "enip.cip.genstat",
-			FT_UINT8, BASE_HEX, VALS(encap_cip_gs_vals), 0,
-			"General Status", HFILL }
+		{ &hf_enip_options,
+			{ "Options", "enip.options",
+			FT_UINT32, BASE_HEX, NULL, 0,
+			"Options flags", HFILL }
 		},
-
-		/* List identity response */
-      { &hf_enip_cpf_lir_sinfamily,
-			{ "sin_family", "enip.lir.sinfamily",
+		{ &hf_enip_lsr_tcp,
+			{ "Supports CIP Encapsulation via TCP", "enip.lsr.capaflags.tcp",
+			FT_UINT16, BASE_DEC, VALS(enip_true_false_vals), 0x0020,
+			"ListServices Reply: Supports CIP Encapsulation via TCP", HFILL }
+		},
+		{ &hf_enip_lsr_udp,
+			{ "Supports CIP Class 0 or 1 via UDP", "enip.lsr.capaflags.udp",
+			FT_UINT16, BASE_DEC, VALS(enip_true_false_vals), 0x0100,
+			"ListServices Reply: Supports CIP Class 0 or 1 via UDP", HFILL }
+		},
+		/* Send Request/Reply Data */
+		{ &hf_enip_srrd_ifacehnd,
+			{ "Interface Handle",           "enip.srrd.iface",
+			FT_UINT32, BASE_HEX, VALS(enip_interface_handle_vals), 0,
+			"SendRRData: Interface handle", HFILL }
+		},
+		/* Send Unit Data */
+		{ &hf_enip_sud_ifacehnd,
+			{ "Interface Handle",           "enip.sud.iface",
+			FT_UINT32, BASE_HEX, VALS(enip_interface_handle_vals), 0,
+			"SendUnitData: Interface handle", HFILL }
+		},
+		/* List identity reply */
+      { &hf_enip_lir_sinfamily,
+			{ "sin_family", "enip.lir.sa.sinfamily",
 			FT_UINT16, BASE_DEC, NULL, 0,
-			"Socket Address Sin Family", HFILL }
+			"ListIdentity Reply: Socket Address.Sin Family", HFILL }
 		},
-      { &hf_enip_cpf_lir_sinport,
-			{ "sin_port", "enip.lir.sinport",
+      { &hf_enip_lir_sinport,
+			{ "sin_port", "enip.lir.sa.sinport",
 			FT_UINT16, BASE_DEC, NULL, 0,
-			"Socket Address Sin Port", HFILL }
+			"ListIdentity Reply: Socket Address.Sin Port", HFILL }
 		},
-      { &hf_enip_cpf_lir_sinaddr,
-			{ "sin_addr", "enip.lir.sinaddr",
+      { &hf_enip_lir_sinaddr,
+			{ "sin_addr", "enip.lir.sa.sinaddr",
 			FT_IPv4, BASE_HEX, NULL, 0,
-			"Socket Address Sin Addr", HFILL }
+			"ListIdentity Reply: Socket Address.Sin Addr", HFILL }
 		},
-      { &hf_enip_cpf_lir_sinzero,
-			{ "sin_zero", "enip.lir.sinzero",
+      { &hf_enip_lir_sinzero,
+			{ "sin_zero", "enip.lir.sa.sinzero",
 			FT_BYTES, BASE_HEX, NULL, 0,
-			"Socket Address Sin Zero", HFILL }
+			"ListIdentity Reply: Socket Address.Sin Zero", HFILL }
 		},
-      { &hf_enip_cpf_lir_devtype,
+		{ &hf_enip_lir_vendor,
+			{ "Vendor ID", "enip.lir.vendor",
+			FT_UINT16, BASE_HEX, VALS(cip_vendor_vals), 0,
+			"ListIdentity Reply: Vendor ID", HFILL }
+		},
+      { &hf_enip_lir_devtype,
 			{ "Device Type", "enip.lir.devtype",
-			FT_UINT16, BASE_DEC, VALS(encap_cip_devtype_vals), 0,
-			"Device Type", HFILL }
+			FT_UINT16, BASE_DEC, VALS(cip_devtype_vals), 0,
+			"ListIdentity Reply: Device Type", HFILL }
 		},
-      { &hf_enip_cpf_lir_prodcode,
+      { &hf_enip_lir_prodcode,
 			{ "Product Code", "enip.lir.prodcode",
 			FT_UINT16, BASE_DEC, NULL, 0,
-			"Product Code", HFILL }
+			"ListIdentity Reply: Product Code", HFILL }
 		},
-      { &hf_enip_cpf_lir_status,
+      { &hf_enip_lir_status,
 			{ "Status", "enip.lir.status",
 			FT_UINT16, BASE_HEX, NULL, 0,
-			"Status", HFILL }
+			"ListIdentity Reply: Status", HFILL }
 		},
-      { &hf_enip_cpf_lir_sernbr,
-			{ "Serial Number", "enip.lir.ser",
+      { &hf_enip_lir_serial,
+			{ "Serial Number", "enip.lir.serial",
 			FT_UINT32, BASE_HEX, NULL, 0,
-			"Serial Number", HFILL }
-		},
-      { &hf_enip_cpf_lir_namelength,
-			{ "Product Name Length", "enip.lir.namelength",
-			FT_UINT8, BASE_DEC, NULL, 0,
-			"Product Name Length", HFILL }
+			"ListIdentity Reply: Serial Number", HFILL }
 		},
-      { &hf_enip_cpf_lir_name,
+      { &hf_enip_lir_name,
 			{ "Product Name", "enip.lir.name",
 			FT_STRING, BASE_NONE, NULL, 0,
-			"Product Name", HFILL }
+			"ListIdentity Reply: Product Name", HFILL }
 		},
-      { &hf_enip_cpf_lir_state,
+      { &hf_enip_lir_state,
 			{ "State", "enip.lir.state",
 			FT_UINT8, BASE_HEX, NULL, 0,
-			"State", HFILL }
+			"ListIdentity Reply: State", HFILL }
 		},
-      /* Vendor ID number */
-		{ &hf_enip_vendors,
-			{ "Vendor ID",           "enip.vnd",
-			FT_UINT16, BASE_HEX, VALS(encap_cip_vendor_vals), 0,
-			"Vendor ID number", HFILL }
-		},
-      { &hf_enip_ucm_fwo_comp,
-			{ "Compatibility", "enip.cip.fwo.cmp",
-			FT_UINT8, BASE_HEX, VALS(enip_com_bit_vals), 0x80,
-			"Compatibility bit", HFILL }
-		},
-      { &hf_enip_ucm_fwo_mrev,
-			{ "Major Revision", "enip.cip.fwo.mrev",
-			FT_UINT8, BASE_DEC, NULL, 0x7F,
-			"Major Revision", HFILL }
-		},
-      { &hf_enip_ucm_fwo_con_size,
-			{ "Connection Size", "enip.cip.fwo.consize",
-			FT_UINT16, BASE_DEC, NULL, 0x01FF,
-			"Connection size", HFILL }
-		},
-      { &hf_enip_ucm_fwo_fixed_var,
-			{ "Connection Size Type", "enip.cip.fwo.f_v",
-			FT_UINT16, BASE_DEC, VALS(enip_con_fw_vals), 0x0200,
-			"Fixed or variable connection size", HFILL }
-		},
-      { &hf_enip_ucm_fwo_prio,
-			{ "Priority", "enip.cip.fwo.prio",
-			FT_UINT16, BASE_DEC, VALS(enip_con_prio_vals), 0x0C00,
-			"Connection priority", HFILL }
-		},
-      { &hf_enip_ucm_fwo_typ,
-			{ "Connection Type", "enip.cip.fwo.typ",
-			FT_UINT16, BASE_DEC, VALS(enip_con_type_vals), 0x6000,
-			"Connection type", HFILL }
-		},
-      { &hf_enip_ucm_fwo_own,
-			{ "Owner", "enip.cip.fwo.own",
-			FT_UINT16, BASE_DEC, VALS(enip_con_owner_vals), 0x8000,
-			"Redundant owner bit", HFILL }
-		},
-		{ &hf_enip_ucm_fwo_dir,
-			{ "Direction", "enip.cip.fwo.dir",
-			FT_UINT8, BASE_DEC, VALS(enip_con_dir_vals), 0x80,
-			"Direction", HFILL }
-		},
-      { &hf_enip_ucm_fwo_trigg,
-			{ "Trigger", "enip.cip.fwo.trigg",
-			FT_UINT8, BASE_DEC, VALS(enip_con_trigg_vals), 0x70,
-			"Production trigger", HFILL }
-		},
-      { &hf_enip_ucm_fwo_class,
-			{ "Class", "enip.cip.fwo.class",
-			FT_UINT8, BASE_DEC, VALS(enip_con_class_vals), 0x0F,
-			"Transport Class", HFILL }
+		/* Common Packet Format */
+		{ &hf_enip_cpf_typeid,
+			{ "Type ID",          "enip.cpf.typeid",
+			FT_UINT16, BASE_HEX, VALS(cdf_type_vals), 0,
+			"Common Packet Format: Type of encapsulated item", HFILL }
 		},
 		/* Sequenced Address Type */
-      { &hf_enip_cpf_sat_connid,
-			{ "Connection ID", "enip.sat.connid",
+      { &hf_enip_cpf_sai_connid,
+			{ "Connection ID", "enip.cpf.sai.connid",
 			FT_UINT32, BASE_HEX, NULL, 0,
-			"Connection ID from forward open reply", HFILL }
+			"Common Packet Format: Sequenced Address Item, Connection Identifier", HFILL }
 		},
-      { &hf_enip_cpf_sat_seqnum,
-			{ "Sequence Number", "enip.sat.seq",
+      { &hf_enip_cpf_sai_seqnum,
+			{ "Sequence Number", "enip.cpf.sai.seq",
 			FT_UINT32, BASE_DEC, NULL, 0,
-			"Sequence Number", HFILL }
-		},
-		{ &hf_enip_cpf_lsr_tcp,
-			{ "Supports CIP Encapsultion via TCP", "enip.ls.tcp",
-			FT_UINT16, BASE_DEC, VALS(enip_true_false_vals), 0x0020,
-			"Supports CIP Encapsultion via TCP", HFILL }
-		},
-		{ &hf_enip_cpf_lsr_udp,
-			{ "Supports CIP Class 0 or 1 via UDP", "enip.ls.udp",
-			FT_UINT16, BASE_DEC, VALS(enip_true_false_vals), 0x0100,
-			"Supports CIP Class 0 or 1 via UDP", HFILL }
+			"Common Packet Format: Sequenced Address Item, Sequence Number", HFILL }
 		}
-
    };
 
 
 /* Setup protocol subtree array */
 	static gint *ett[] = {
-		&ett_cipencap,
-		&ett_cip,
-		&ett_cpf,
-		&ett_path,
-		&ett_ekey_path,
-		&ett_cipencaph,
-		&ett_csf,
-		&ett_rrsc,
+		&ett_enip,
+		&ett_count_tree,
+		&ett_type_tree,
+	&ett_command_tree,
 		&ett_sockadd,
-		&ett_mcsc,
-		&ett_ncp,
-		&ett_cia_path,
-		&ett_data_seg,
 		&ett_lsrcf,
-		&ett_mes_req,
-		&ett_cmd_data,
-		&ett_port_path,
-		&ett_mult_ser
 	};
-	module_t *cipencap_module;
+	module_t *enip_module;
 
 /* Register the protocol name and description */
-	proto_cipencap = proto_register_protocol("EtherNet/IP (Industrial Protocol)",
+	proto_enip = proto_register_protocol("EtherNet/IP (Industrial Protocol)",
 	    "ENIP", "enip");
 
 /* Required function calls to register the header fields and subtrees used */
-	proto_register_field_array(proto_cipencap, hf, array_length(hf));
+	proto_register_field_array(proto_enip, hf, array_length(hf));
 	proto_register_subtree_array(ett, array_length(ett));
 
-	cipencap_module = prefs_register_protocol(proto_cipencap, NULL);
-	prefs_register_bool_preference(cipencap_module, "desegment",
+	enip_module = prefs_register_protocol(proto_enip, NULL);
+	prefs_register_bool_preference(enip_module, "desegment",
 	    "Desegment all EtherNet/IP messages spanning multiple TCP segments",
 	    "Whether the EtherNet/IP dissector should desegment all messages spanning multiple TCP segments",
-	    &cipencap_desegment);
-} /* end of proto_register_cipencap() */
+	    &enip_desegment);
+
+   subdissector_sud_table = register_dissector_table("enip.sud.iface",
+		"SendUnitData.Interface Handle", FT_UINT32, BASE_HEX);
+
+   subdissector_srrd_table = register_dissector_table("enip.srrd.iface",
+		"SendRequestReplyData.Interface Handle", FT_UINT32, BASE_HEX);
+
+} /* end of proto_register_enip() */
 
 
 /* If this dissector uses sub-dissector registration add a registration routine.
@@ -2660,19 +959,24 @@
    create the code that calls these routines.
 */
 void
-proto_reg_handoff_cipencap(void)
+proto_reg_handoff_enip(void)
 {
-	dissector_handle_t cipencap_udp_handle, cipencap_tcp_handle;
+	dissector_handle_t enip_udp_handle, enip_tcp_handle;
 	dissector_handle_t enipio_handle;
 
-	/* Register for encapsulated CIP data, using both TCP/UDP */
-	cipencap_tcp_handle = new_create_dissector_handle(dissect_cipencap_tcp, proto_cipencap);
-	dissector_add("tcp.port", ENIP_ENCAP_PORT, cipencap_tcp_handle);
-	cipencap_udp_handle = new_create_dissector_handle(dissect_cipencap_udp, proto_cipencap);
-	dissector_add("udp.port", ENIP_ENCAP_PORT, cipencap_udp_handle);
+	/* Register for EtherNet/IP, using TCP */
+	enip_tcp_handle = new_create_dissector_handle(dissect_enip_tcp, proto_enip);
+	dissector_add("tcp.port", ENIP_ENCAP_PORT, enip_tcp_handle);
+
+	/* Register for EtherNet/IP, using UDP */
+	enip_udp_handle = new_create_dissector_handle(dissect_enip_udp, proto_enip);
+	dissector_add("udp.port", ENIP_ENCAP_PORT, enip_udp_handle);
 
-	/* Register for IO data over UDP */
-	enipio_handle = create_dissector_handle(dissect_enipio, proto_cipencap);
+	/* Register for EtherNet/IP IO data (UDP) */
+	enipio_handle = create_dissector_handle(dissect_enipio, proto_enip);
 	dissector_add("udp.port", ENIP_IO_PORT, enipio_handle);
 
-} /* end of proto_reg_handoff_cipencap() */
+	/* Find dissector for data packet */
+	data_handle = find_dissector("data");
+
+} /* end of proto_reg_handoff_enip() */
diff -urN ethereal-0.10.6/epan/dissectors/packet-eth.c ethereal-0.10.7/epan/dissectors/packet-eth.c
--- ethereal-0.10.6/epan/dissectors/packet-eth.c	2004-08-12 17:42:27.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-eth.c	2004-10-20 17:34:59.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-eth.c
  * Routines for ethernet packet disassembly
  *
- * $Id: packet-eth.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-eth.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -28,7 +28,7 @@
 
 #include <glib.h>
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "etypes.h"
 #include <epan/addr_resolv.h>
 #include "packet-eth.h"
@@ -36,8 +36,8 @@
 #include "packet-ipx.h"
 #include "packet-isl.h"
 #include "packet-llc.h"
-#include "crc32.h"
-#include "tap.h"
+#include <epan/crc32.h>
+#include <epan/tap.h>
 
 /* Interpret capture file as FW1 monitor file */
 static gboolean eth_interpret_as_fw1_monitor = FALSE;
diff -urN ethereal-0.10.6/epan/dissectors/packet-etheric.c ethereal-0.10.7/epan/dissectors/packet-etheric.c
--- ethereal-0.10.6/epan/dissectors/packet-etheric.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-etheric.c	2004-10-20 17:34:37.000000000 -0500
@@ -0,0 +1,1464 @@
+/* packet-etheric.c
+ * Routines for Etheric dissection a Ericsson propriatary protocol.
+ * 
+ * Copyright 2004, Anders Broman <anders.broman@ericsson.com>
+ *
+ * $Id: packet-etheric.c 12148 2004-09-30 08:16:41Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+
+#include <epan/packet.h>
+#include <prefs.h>
+#include "packet-e164.h"
+#include "packet-q931.h"
+#include "packet-isup.h"
+
+/* Initialize the protocol and registered fields */
+static int proto_etheric				= -1;
+static int hf_etheric_protocol_version	= -1;
+static int hf_etheric_message_length	= -1;
+static int hf_etheric_cic				= -1;
+static int hf_etheric_message_type		= -1;
+static int hf_etheric_parameter_type	= -1;
+
+static int hf_etheric_calling_partys_category					= -1;
+static int hf_etheric_forw_call_isdn_access_indicator			= -1;
+	
+static int hf_etheric_transmission_medium_requirement			= -1;
+static int hf_etheric_odd_even_indicator						= -1;
+static int hf_etheric_called_party_nature_of_address_indicator	= -1;
+
+static int hf_etheric_ni_indicator								= -1;
+static int hf_etheric_calling_party_nature_of_address_indicator	= -1;
+
+static int hf_etheric_inn_indicator								= -1;
+
+static int hf_etheric_numbering_plan_indicator					= -1;
+
+static int hf_etheric_address_presentation_restricted_indicator	= -1;
+static int hf_etheric_screening_indicator						= -1;
+static int hf_etheric_called_party_odd_address_signal_digit		= -1;
+static int hf_etheric_calling_party_odd_address_signal_digit	= -1;
+static int hf_etheric_called_party_even_address_signal_digit	= -1;
+static int hf_etheric_calling_party_even_address_signal_digit	= -1;
+static int hf_etheric_mandatory_variable_parameter_pointer		= -1;
+static int hf_etheric_parameter_length							= -1;
+static int hf_etheric_pointer_to_start_of_optional_part			= -1;
+static int hf_etheric_inband_information_ind					= -1;
+static int hf_etheric_cause_indicator							= -1;
+static int hf_etheric_event_ind									= -1;	
+static int hf_etheric_event_presentation_restricted_ind			= -1;
+
+/* Initialize the subtree pointers */
+static gint ett_etheric						= -1;
+static gint ett_etheric_parameter			= -1;
+static gint ett_etheric_address_digits		= -1;
+static gint ett_etheric_circuit_state_ind	= -1;
+
+/* set the tcp port */
+static guint ethericTCPport1 =1806;
+static guint ethericTCPport2 =10002;
+
+static dissector_handle_t	q931_ie_handle = NULL;
+/* Value strings */
+static const value_string protocol_version_vals[] = {
+	{ 0x00,	"Etheric 1.0" },
+	{ 0x10,	"Etheric 2.0" },
+	{ 0x11,	"Etheric 2.1" },
+	{ 0,	NULL }
+};
+
+/* Copied from packet-isup */
+/* since length field is 8 Bit long - used in number dissectors;
+ * max. number of address digits is 15 digits, but MAXLENGTH used
+ * to avoid runtime errors 
+ */
+#define MAXLENGTH                            0xFF 
+/* Definition of Message Types */
+#define ETHERIC_MESSAGE_TYPE_INITIAL_ADDR       1
+#define ETHERIC_MESSAGE_TYPE_SUBSEQ_ADDR        2
+#define ETHERIC_MESSAGE_TYPE_INFO_REQ           3
+#define ETHERIC_MESSAGE_TYPE_INFO               4
+#define ETHERIC_MESSAGE_TYPE_CONTINUITY         5
+#define ETHERIC_MESSAGE_TYPE_ADDR_CMPL          6
+#define ETHERIC_MESSAGE_TYPE_CONNECT            7
+#define ETHERIC_MESSAGE_TYPE_FORW_TRANS         8
+#define ETHERIC_MESSAGE_TYPE_ANSWER             9
+#define ETHERIC_MESSAGE_TYPE_RELEASE           12
+#define ETHERIC_MESSAGE_TYPE_SUSPEND           13
+#define ETHERIC_MESSAGE_TYPE_RESUME            14
+#define ETHERIC_MESSAGE_TYPE_REL_CMPL          16
+#define ETHERIC_MESSAGE_TYPE_CONT_CHECK_REQ    17
+#define ETHERIC_MESSAGE_TYPE_RESET_CIRCUIT     18
+#define ETHERIC_MESSAGE_TYPE_BLOCKING          19
+#define ETHERIC_MESSAGE_TYPE_UNBLOCKING        20
+#define ETHERIC_MESSAGE_TYPE_BLOCK_ACK         21
+#define ETHERIC_MESSAGE_TYPE_UNBLOCK_ACK       22
+#define ETHERIC_MESSAGE_TYPE_CIRC_GRP_RST      23
+#define ETHERIC_MESSAGE_TYPE_CIRC_GRP_BLCK     24
+#define ETHERIC_MESSAGE_TYPE_CIRC_GRP_UNBL     25
+#define ETHERIC_MESSAGE_TYPE_CIRC_GRP_BL_ACK   26
+#define ETHERIC_MESSAGE_TYPE_CIRC_GRP_UNBL_ACK 27
+#define ETHERIC_MESSAGE_TYPE_FACILITY_REQ      31
+#define ETHERIC_MESSAGE_TYPE_FACILITY_ACC      32
+#define ETHERIC_MESSAGE_TYPE_FACILITY_REJ      33
+#define ETHERIC_MESSAGE_TYPE_LOOP_BACK_ACK     36
+#define ETHERIC_MESSAGE_TYPE_PASS_ALONG        40
+#define ETHERIC_MESSAGE_TYPE_CIRC_GRP_RST_ACK  41
+#define ETHERIC_MESSAGE_TYPE_CIRC_GRP_QRY      42
+#define ETHERIC_MESSAGE_TYPE_CIRC_GRP_QRY_RSP  43
+#define ETHERIC_MESSAGE_TYPE_CALL_PROGRSS      44
+#define ETHERIC_MESSAGE_TYPE_USER2USER_INFO    45
+#define ETHERIC_MESSAGE_TYPE_UNEQUIPPED_CIC    46
+#define ETHERIC_MESSAGE_TYPE_CONFUSION         47
+#define ETHERIC_MESSAGE_TYPE_OVERLOAD          48
+#define ETHERIC_MESSAGE_TYPE_CHARGE_INFO       49
+#define ETHERIC_MESSAGE_TYPE_NETW_RESRC_MGMT   50
+#define ETHERIC_MESSAGE_TYPE_FACILITY          51
+#define ETHERIC_MESSAGE_TYPE_USER_PART_TEST    52
+#define ETHERIC_MESSAGE_TYPE_USER_PART_AVAIL   53
+#define ETHERIC_MESSAGE_TYPE_IDENT_REQ         54
+#define ETHERIC_MESSAGE_TYPE_IDENT_RSP         55
+#define ETHERIC_MESSAGE_TYPE_SEGMENTATION      56
+#define ETHERIC_MESSAGE_TYPE_LOOP_PREVENTION   64
+#define ETHERIC_MESSAGE_TYPE_APPLICATION_TRANS 65
+#define ETHERIC_MESSAGE_TYPE_PRE_RELEASE_INFO  66
+#define ETHERIC_MESSAGE_TYPE_SUBSEQUENT_DIR_NUM 67
+
+
+/* Definition of Parameter Types */
+#define ETHERIC_PARAM_TYPE_END_OF_OPT_PARAMS      0
+#define ETHERIC_PARAM_TYPE_CALL_REF               1
+#define ETHERIC_PARAM_TYPE_TRANSM_MEDIUM_REQU     2
+#define ETHERIC_PARAM_TYPE_ACC_TRANSP             3
+#define ETHERIC_PARAM_TYPE_CALLED_PARTY_NR        4
+#define ETHERIC_PARAM_TYPE_SUBSQT_NR              5
+#define ETHERIC_PARAM_TYPE_NATURE_OF_CONN_IND     6
+#define ETHERIC_PARAM_TYPE_FORW_CALL_IND          7
+#define ETHERIC_PARAM_TYPE_OPT_FORW_CALL_IND      8
+#define ETHERIC_PARAM_TYPE_CALLING_PRTY_CATEG     9
+#define ETHERIC_PARAM_TYPE_CALLING_PARTY_NR      10
+#define ETHERIC_PARAM_TYPE_REDIRECTING_NR        11
+#define ETHERIC_PARAM_TYPE_REDIRECTION_NR        12
+#define ETHERIC_PARAM_TYPE_CONNECTION_REQ        13
+#define ETHERIC_PARAM_TYPE_INFO_REQ_IND          14
+#define ETHERIC_PARAM_TYPE_INFO_IND              15
+#define ETHERIC_PARAM_TYPE_CONTINUITY_IND        16
+#define ETHERIC_PARAM_TYPE_BACKW_CALL_IND        17
+#define ETHERIC_PARAM_TYPE_CAUSE_INDICATORS      18
+#define ETHERIC_PARAM_TYPE_REDIRECTION_INFO      19
+#define ETHERIC_PARAM_TYPE_CIRC_GRP_SV_MSG_TYPE  21
+#define ETHERIC_PARAM_TYPE_RANGE_AND_STATUS      22
+#define ETHERIC_PARAM_TYPE_FACILITY_IND          24
+#define ETHERIC_PARAM_TYPE_CLSD_USR_GRP_ILOCK_CD 26
+#define ETHERIC_PARAM_TYPE_USER_SERVICE_INFO     29
+#define ETHERIC_PARAM_TYPE_SIGNALLING_POINT_CODE 30
+#define ETHERIC_PARAM_TYPE_USER_TO_USER_INFO     32
+#define ETHERIC_PARAM_TYPE_CONNECTED_NR          33
+#define ETHERIC_PARAM_TYPE_SUSP_RESUME_IND       34
+#define ETHERIC_PARAM_TYPE_TRANSIT_NETW_SELECT   35
+#define ETHERIC_PARAM_TYPE_EVENT_INFO            36
+#define ETHERIC_PARAM_TYPE_CIRC_ASSIGN_MAP       37
+#define ETHERIC_PARAM_TYPE_CIRC_STATE_IND        38
+#define ETHERIC_PARAM_TYPE_AUTO_CONG_LEVEL       39
+#define ETHERIC_PARAM_TYPE_ORIG_CALLED_NR        40
+#define ETHERIC_PARAM_TYPE_OPT_BACKW_CALL_IND    41
+#define ETHERIC_PARAM_TYPE_USER_TO_USER_IND      42
+#define ETHERIC_PARAM_TYPE_ORIG_ISC_POINT_CODE   43
+#define ETHERIC_PARAM_TYPE_GENERIC_NOTIF_IND     44
+#define ETHERIC_PARAM_TYPE_CALL_HIST_INFO        45
+#define ETHERIC_PARAM_TYPE_ACC_DELIV_INFO        46
+#define ETHERIC_PARAM_TYPE_NETW_SPECIFIC_FACLTY  47
+#define ETHERIC_PARAM_TYPE_USER_SERVICE_INFO_PR  48
+#define ETHERIC_PARAM_TYPE_PROPAG_DELAY_COUNTER  49
+#define ETHERIC_PARAM_TYPE_REMOTE_OPERATIONS     50
+#define ETHERIC_PARAM_TYPE_SERVICE_ACTIVATION    51
+#define ETHERIC_PARAM_TYPE_USER_TELESERV_INFO    52
+#define ETHERIC_PARAM_TYPE_TRANSM_MEDIUM_USED    53
+#define ETHERIC_PARAM_TYPE_CALL_DIV_INFO         54
+#define ETHERIC_PARAM_TYPE_ECHO_CTRL_INFO        55
+#define ETHERIC_PARAM_TYPE_MSG_COMPAT_INFO       56
+#define ETHERIC_PARAM_TYPE_PARAM_COMPAT_INFO     57
+#define ETHERIC_PARAM_TYPE_MLPP_PRECEDENCE       58
+#define ETHERIC_PARAM_TYPE_MCID_REQ_IND          59
+#define ETHERIC_PARAM_TYPE_MCID_RSP_IND          60
+#define ETHERIC_PARAM_TYPE_HOP_COUNTER           61
+#define ETHERIC_PARAM_TYPE_TRANSM_MEDIUM_RQUR_PR 62
+#define ETHERIC_PARAM_TYPE_LOCATION_NR           63
+#define ETHERIC_PARAM_TYPE_REDIR_NR_RSTRCT       64
+#define ETHERIC_PARAM_TYPE_CALL_TRANS_REF        67
+#define ETHERIC_PARAM_TYPE_LOOP_PREV_IND         68
+#define ETHERIC_PARAM_TYPE_CALL_TRANS_NR         69
+#define ETHERIC_PARAM_TYPE_CCSS                  75
+#define ETHERIC_PARAM_TYPE_FORW_GVNS             76
+#define ETHERIC_PARAM_TYPE_BACKW_GVNS            77
+#define ETHERIC_PARAM_TYPE_REDIRECT_CAPAB        78
+#define ETHERIC_PARAM_TYPE_NETW_MGMT_CTRL        91
+#define ETHERIC_PARAM_TYPE_CORRELATION_ID       101
+#define ETHERIC_PARAM_TYPE_SCF_ID               102
+#define ETHERIC_PARAM_TYPE_CALL_DIV_TREAT_IND   110
+#define ETHERIC_PARAM_TYPE_CALLED_IN_NR         111
+#define ETHERIC_PARAM_TYPE_CALL_OFF_TREAT_IND   112
+#define ETHERIC_PARAM_TYPE_CHARGED_PARTY_IDENT  113
+#define ETHERIC_PARAM_TYPE_CONF_TREAT_IND       114
+#define ETHERIC_PARAM_TYPE_DISPLAY_INFO         115
+#define ETHERIC_PARAM_TYPE_UID_ACTION_IND       116
+#define ETHERIC_PARAM_TYPE_UID_CAPAB_IND        117
+#define ETHERIC_PARAM_TYPE_REDIRECT_COUNTER     119
+#define ETHERIC_PARAM_TYPE_APPLICATON_TRANS	120
+#define ETHERIC_PARAM_TYPE_COLLECT_CALL_REQ     121
+#define ETHERIC_PARAM_TYPE_GENERIC_NR           192
+#define ETHERIC_PARAM_TYPE_GENERIC_DIGITS       193
+
+static const value_string isup_parameter_type_value[] = {
+{ ETHERIC_PARAM_TYPE_END_OF_OPT_PARAMS,        "End of optional parameters"},
+  { ETHERIC_PARAM_TYPE_CALL_REF,               "Call Reference (national use)"},
+  { ETHERIC_PARAM_TYPE_TRANSM_MEDIUM_REQU,     "Transmission medium requirement"},
+  { ETHERIC_PARAM_TYPE_ACC_TRANSP,             "Access transport"},
+  { ETHERIC_PARAM_TYPE_CALLED_PARTY_NR,        "Called party number"},
+  { ETHERIC_PARAM_TYPE_SUBSQT_NR,              "Subsequent number"},
+  { ETHERIC_PARAM_TYPE_NATURE_OF_CONN_IND,     "Nature of connection indicators"},
+  { ETHERIC_PARAM_TYPE_FORW_CALL_IND,          "Forward call indicators"},
+  { ETHERIC_PARAM_TYPE_OPT_FORW_CALL_IND,      "Optional forward call indicators"},
+  { ETHERIC_PARAM_TYPE_CALLING_PRTY_CATEG,     "Calling party's category"},
+  { ETHERIC_PARAM_TYPE_CALLING_PARTY_NR,       "Calling party number"},
+  { ETHERIC_PARAM_TYPE_REDIRECTING_NR,         "Redirecting number"},
+  { ETHERIC_PARAM_TYPE_REDIRECTION_NR,         "Redirection number"},
+  { ETHERIC_PARAM_TYPE_CONNECTION_REQ,         "Connection request"},
+  { ETHERIC_PARAM_TYPE_INFO_REQ_IND,           "Information request indicators (national use)"},
+  { ETHERIC_PARAM_TYPE_INFO_IND,               "Information indicators (national use)"},
+  { ETHERIC_PARAM_TYPE_CONTINUITY_IND,         "Continuity request"},
+  { ETHERIC_PARAM_TYPE_BACKW_CALL_IND,         "Backward call indicators"},
+  { ETHERIC_PARAM_TYPE_CAUSE_INDICATORS,       "Cause indicators"},
+  { ETHERIC_PARAM_TYPE_REDIRECTION_INFO,       "Redirection information"},
+  { ETHERIC_PARAM_TYPE_CIRC_GRP_SV_MSG_TYPE,   "Circuit group supervision message type"},
+  { ETHERIC_PARAM_TYPE_RANGE_AND_STATUS,       "Range and Status"},
+  { ETHERIC_PARAM_TYPE_FACILITY_IND,           "Facility indicator"},
+  { ETHERIC_PARAM_TYPE_CLSD_USR_GRP_ILOCK_CD,  "Closed user group interlock code"},
+  { ETHERIC_PARAM_TYPE_USER_SERVICE_INFO,      "User service information"},
+  { ETHERIC_PARAM_TYPE_SIGNALLING_POINT_CODE,  "Signalling point code (national use)"},
+  { ETHERIC_PARAM_TYPE_USER_TO_USER_INFO,      "User-to-user information"},
+  { ETHERIC_PARAM_TYPE_CONNECTED_NR,           "Connected number"},
+  { ETHERIC_PARAM_TYPE_SUSP_RESUME_IND,        "Suspend/Resume indicators"},
+  { ETHERIC_PARAM_TYPE_TRANSIT_NETW_SELECT,    "Transit network selection (national use)"},
+  { ETHERIC_PARAM_TYPE_EVENT_INFO,             "Event information"},
+  { ETHERIC_PARAM_TYPE_CIRC_ASSIGN_MAP,        "Circuit assignment map"},
+  { ETHERIC_PARAM_TYPE_CIRC_STATE_IND,         "Circuit state indicator (national use)"},
+  { ETHERIC_PARAM_TYPE_AUTO_CONG_LEVEL,        "Automatic congestion level"},
+  { ETHERIC_PARAM_TYPE_ORIG_CALLED_NR,         "Original called number"},
+  { ETHERIC_PARAM_TYPE_OPT_BACKW_CALL_IND,     "Backward call indicators"},
+  { ETHERIC_PARAM_TYPE_USER_TO_USER_IND,       "User-to-user indicators"},
+  { ETHERIC_PARAM_TYPE_ORIG_ISC_POINT_CODE,    "Origination ISC point code"},
+  { ETHERIC_PARAM_TYPE_GENERIC_NOTIF_IND,      "Generic notification indicator"},
+  { ETHERIC_PARAM_TYPE_CALL_HIST_INFO,         "Call history information"},
+  { ETHERIC_PARAM_TYPE_ACC_DELIV_INFO,         "Access delivery information"},
+  { ETHERIC_PARAM_TYPE_NETW_SPECIFIC_FACLTY,   "Network specific facility (national use)"},
+  { ETHERIC_PARAM_TYPE_USER_SERVICE_INFO_PR,   "User service information prime"},
+  { ETHERIC_PARAM_TYPE_PROPAG_DELAY_COUNTER,   "Propagation delay counter"},
+  { ETHERIC_PARAM_TYPE_REMOTE_OPERATIONS,      "Remote operations (national use)"},
+  { ETHERIC_PARAM_TYPE_SERVICE_ACTIVATION,     "Service activation"},
+  { ETHERIC_PARAM_TYPE_USER_TELESERV_INFO,     "User teleservice information"},
+  { ETHERIC_PARAM_TYPE_TRANSM_MEDIUM_USED,     "Transmission medium used"},
+  { ETHERIC_PARAM_TYPE_CALL_DIV_INFO,          "Call diversion information"},
+  { ETHERIC_PARAM_TYPE_ECHO_CTRL_INFO,         "Echo control information"},
+  { ETHERIC_PARAM_TYPE_MSG_COMPAT_INFO,        "Message compatibility information"},
+  { ETHERIC_PARAM_TYPE_PARAM_COMPAT_INFO,      "Parameter compatibility information"},
+  { ETHERIC_PARAM_TYPE_MLPP_PRECEDENCE,        "MLPP precedence"},
+  { ETHERIC_PARAM_TYPE_MCID_REQ_IND,           "MCID request indicators"},
+  { ETHERIC_PARAM_TYPE_MCID_RSP_IND,           "MCID response indicators"},
+  { ETHERIC_PARAM_TYPE_HOP_COUNTER,            "Hop counter"},
+  { ETHERIC_PARAM_TYPE_TRANSM_MEDIUM_RQUR_PR,  "Transmission medium requirement prime"},
+  { ETHERIC_PARAM_TYPE_LOCATION_NR,            "Location number"},
+  { ETHERIC_PARAM_TYPE_REDIR_NR_RSTRCT,        "Redirection number restriction"},
+  { ETHERIC_PARAM_TYPE_CALL_TRANS_REF,         "Call transfer reference"},
+  { ETHERIC_PARAM_TYPE_LOOP_PREV_IND,          "Loop prevention indicators"},
+  { ETHERIC_PARAM_TYPE_CALL_TRANS_NR,          "Call transfer number"},
+  { ETHERIC_PARAM_TYPE_CCSS,                   "CCSS"},
+  { ETHERIC_PARAM_TYPE_FORW_GVNS,              "Forward GVNS"},
+  { ETHERIC_PARAM_TYPE_BACKW_GVNS,             "Backward GVNS"},
+  { ETHERIC_PARAM_TYPE_REDIRECT_CAPAB,         "Redirect capability (reserved for national use)"},
+  { ETHERIC_PARAM_TYPE_NETW_MGMT_CTRL,         "Network management controls"},
+  { ETHERIC_PARAM_TYPE_CORRELATION_ID,         "Correlation id"},
+  { ETHERIC_PARAM_TYPE_SCF_ID,                 "SCF id"},
+  { ETHERIC_PARAM_TYPE_CALL_DIV_TREAT_IND,     "Call diversion treatment indicators"},
+  { ETHERIC_PARAM_TYPE_CALLED_IN_NR,           "Called IN number"},
+  { ETHERIC_PARAM_TYPE_CALL_OFF_TREAT_IND,     "Call offering treatment indicators"},
+  { ETHERIC_PARAM_TYPE_CHARGED_PARTY_IDENT,    "Charged party identification (national use)"},
+  { ETHERIC_PARAM_TYPE_CONF_TREAT_IND,         "Conference treatment indicators"},
+  { ETHERIC_PARAM_TYPE_DISPLAY_INFO,           "Display information"},
+  { ETHERIC_PARAM_TYPE_UID_ACTION_IND,         "UID action indicators"},
+  { ETHERIC_PARAM_TYPE_UID_CAPAB_IND,          "UID capability indicators"},
+  { ETHERIC_PARAM_TYPE_REDIRECT_COUNTER,       "Redirect counter (reserved for national use)"},
+  { ETHERIC_PARAM_TYPE_COLLECT_CALL_REQ,       "Collect call request"},
+  { ETHERIC_PARAM_TYPE_GENERIC_NR,             "Generic number"},
+  { ETHERIC_PARAM_TYPE_GENERIC_DIGITS,         "Generic digits (national use)"},
+  { ETHERIC_PARAM_TYPE_APPLICATON_TRANS,       "Application transport"},
+  { 0,                                 NULL}};
+
+static const true_false_string isup_ISDN_originating_access_ind_value = {
+  "originating access ISDN",
+  "originating access non-ISDN"
+};
+static const value_string isup_calling_partys_category_value[] = {
+  { 0,	"Reserved"},
+  { 1,	"Reserved"},
+  { 2,	"Reserved"},
+  { 3,	"Reserved"},
+  { 4,	"Reserved"},
+  { 5,	"Reserved"},
+  { 10,	"Ordinary calling subscriber"},
+  { 11,	"Reserved"},
+  { 12,	"Reserved"},
+  { 13,	"Test call"},
+  /* q.763-200212Amd2 */
+  { 14,	"Reserved"},
+  { 15,	"Reserved"},
+  { 0,	NULL}};
+static const value_string isup_transmission_medium_requirement_value[] = {
+  { 0,	"speech"},
+  { 1,	"64 kbit/s restricted"},
+  { 2,	"64 kbit/s unrestricted"},
+  { 3,	"3.1 khz audio"},
+  { 0,	NULL}};
+
+static const true_false_string isup_odd_even_ind_value = {
+  "odd number of address signals",
+  "even number of address signals"
+};
+
+static const value_string isup_called_party_nature_of_address_ind_value[] = {
+  { 0,	"Spare"},
+  { 1,	"Reserved"},
+  { 2,	"Reserved"},
+  { 3,	"national (significant) number"},
+  { 4,	"international number"},
+  { 5,	"Reserved"},
+  { 0,	NULL}};
+
+static const true_false_string isup_NI_ind_value = {
+  "incomplete",
+  "complete"
+};
+
+  static const value_string etheric_location_number_nature_of_address_ind_value[] = {
+  { 0,	"Spare"},
+  { 1,	"subscriber number (national use)"},
+  { 2,	"unknown (national use)"},
+  { 3,	"national (significant) number"},
+  { 4,	"international number"},
+  { 0,NULL}};
+
+static const value_string isup_address_presentation_restricted_ind_value[] = {
+  { 0,	"Presentation allowed"},
+  { 1,	"Presentation restricted"},
+  { 2,	"Reserved"},
+  { 3,	"Spare"},
+  { 0,	NULL}};
+
+static const value_string isup_screening_ind_value[] = {
+  { 0,     "Not available"},
+  { 1,     "User provided, verified and passed"},
+  { 2,     "reserved"},
+  { 3,     "Network provided"},
+  { 0,     NULL}};
+
+static const value_string isup_called_party_address_digit_value[] = {
+  { 0,  "0"},
+  { 1,  "1"},
+  { 2,  "2"},
+  { 3,  "3"},
+  { 4,  "4"},
+  { 5,  "5"},
+  { 6,  "6"},
+  { 7,  "7"},
+  { 8,  "8"},
+  { 9,  "9"},
+  { 10, "spare"},
+  { 11, "code 11 "},
+  { 12, "code 12"},
+  { 15, "Stop sending"},
+  { 0,  NULL}};
+
+static const value_string isup_calling_party_address_digit_value[] = {
+  { 0,  "0"},
+  { 1,  "1"},
+  { 2,  "2"},
+  { 3,  "3"},
+  { 4,  "4"},
+  { 5,  "5"},
+  { 6,  "6"},
+  { 7,  "7"},
+  { 8,  "8"},
+  { 9,  "9"},
+  { 10, "spare"},
+  { 11, "code 11 "},
+  { 12, "code 12"},
+  { 15, "spare"},
+  { 0,  NULL}};
+static const true_false_string isup_INN_ind_value = {
+  "routing to internal network number not allowed",
+  "routing to internal network number allowed "
+};
+static const value_string isup_numbering_plan_ind_value[] = {
+  { 1,	"ISDN (Telephony) numbering plan"},
+  { 3,	"Data numbering plan (national use)"},
+  { 4,	"Telex numbering plan (national use)"},
+  { 5,	"Reserved for national use"},
+  { 6,	"Reserved for national use"},
+  { 0,	NULL}};
+
+  static const true_false_string isup_inband_information_ind_value = {
+  /* according 3.37/Q.763 */
+  "in-band information or an appropirate pattern is now available",
+  "no indication"
+};
+static const true_false_string isup_event_presentation_restricted_ind_value = {
+  /* according 3.21/Q.763 */
+  "presentation restricted",
+  "no indication"
+};
+static const value_string isup_event_ind_value[] = {
+  /* according 3.21/Q.763 */
+  {  1,	"ALERTING"},
+  {  2,	"PROGRESS"},
+  {  3,	"in-band information or an appropriate pattern is now available"},
+  {  4,	"call forwarded on busy (national use)"},
+  {  5,	"call forwarded on no reply (national use)"},
+  {  6,	"call forwarded unconditional (national use)"},
+  {  0,	NULL}};
+
+static void dissect_etheric_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *etheric_tree, guint8 etheric_version, guint8 message_length);
+
+/* ------------------------------------------------------------------
+  Mapping number to ASCII-character
+ ------------------------------------------------------------------ */
+char number_to_char_2(int number)
+{
+  if (number < 10)
+    return ((char) number + 0x30);
+  else
+    return ((char) number + 0x37);
+}
+
+/* Code to actually dissect the packets */
+static int
+dissect_etheric(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+
+/* Set up structures needed to add the protocol subtree and manage it */
+	proto_item *ti;
+	proto_tree *etheric_tree;
+	gint		offset = 0;
+	guint8		message_length; 
+	guint16		cic;
+	guint8		message_type,etheric_version;
+	
+	tvbuff_t	*message_tvb;
+	
+	
+	/* Do we have the version number? */
+	if (!tvb_bytes_exist(tvb, 0, 1)) {
+		/* No - reject this packet. */
+		return 0;
+	}
+	etheric_version = tvb_get_guint8(tvb, 0);
+	/* Do we know the version? */
+	if (match_strval(etheric_version, protocol_version_vals) == NULL) {
+		/* No - reject this packet. */
+		return 0;
+	}
+
+	/* Make entries in Protocol column and Info column on summary display */
+	if (check_col(pinfo->cinfo, COL_PROTOCOL)) 
+		col_set_str(pinfo->cinfo, COL_PROTOCOL, "Etheric");
+
+	if (check_col(pinfo->cinfo, COL_INFO)) 
+		col_clear(pinfo->cinfo, COL_INFO);
+
+	message_type = tvb_get_guint8(tvb, 4);
+	if (check_col(pinfo->cinfo, COL_INFO))
+		col_add_fstr(pinfo->cinfo, COL_INFO, "%s ", val_to_str(message_type, isup_message_type_value_acro, "reserved"));
+
+	if(tree){
+
+
+/* create display subtree for the protocol */
+		ti = proto_tree_add_item(tree, proto_etheric, tvb, 0, -1, FALSE);
+
+		etheric_tree = proto_item_add_subtree(ti, ett_etheric);
+		proto_tree_add_item(etheric_tree, hf_etheric_protocol_version, tvb, offset, 1, FALSE);
+		offset++;
+		message_length = tvb_get_guint8(tvb, offset);
+		proto_tree_add_item(etheric_tree, hf_etheric_message_length, tvb, offset, 1, FALSE);
+		offset++;
+
+		cic = tvb_get_letohs(tvb, offset) & 0x0FFF; /*since upper 4 bits spare */
+		proto_tree_add_uint_format(etheric_tree, hf_etheric_cic, tvb, offset, 2, cic, "CIC: %u", cic);
+		offset = offset + 2;
+	
+		message_tvb = tvb_new_subset(tvb, offset, -1, -1);
+		dissect_etheric_message(message_tvb, pinfo, etheric_tree,etheric_version, message_length);
+
+
+	}/* end end if tree */
+	return tvb_length(tvb);
+}
+
+/* ------------------------------------------------------------------
+ Dissector Parameter Forward Call Indicators
+ */
+static void
+dissect_etheric_forward_call_indicators_parameter(tvbuff_t *parameter_tvb,proto_tree *parameter_tree, proto_item *parameter_item)
+{
+  guint8 forward_call_ind;
+
+  forward_call_ind = tvb_get_guint8(parameter_tvb, 0);
+  proto_tree_add_boolean(parameter_tree, hf_etheric_forw_call_isdn_access_indicator, 
+	  parameter_tvb, 0, 1, forward_call_ind);
+
+  proto_item_set_text(parameter_item, "Forward Call Indicators: 0x%x", forward_call_ind );
+}
+
+/* ------------------------------------------------------------------
+ Dissector Parameter Calling Party's Category
+ */
+static void
+dissect_etheric_calling_partys_category_parameter(tvbuff_t *parameter_tvb,proto_tree *parameter_tree, proto_item *parameter_item)
+{
+  guint8 calling_partys_category;
+
+  calling_partys_category = tvb_get_guint8(parameter_tvb, 0);
+  proto_tree_add_uint(parameter_tree, hf_etheric_calling_partys_category, parameter_tvb, 
+	  0, 1, calling_partys_category);
+
+  proto_item_set_text(parameter_item, "Calling Party's category: 0x%x (%s)", calling_partys_category,
+	  val_to_str(calling_partys_category, isup_calling_partys_category_value, "reserved/spare"));
+}
+/* ------------------------------------------------------------------
+  Dissector Parameter Transmission medium requirement
+ */
+static void
+dissect_etheric_transmission_medium_requirement_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item)
+{
+  guint8 transmission_medium_requirement;
+
+  transmission_medium_requirement = tvb_get_guint8(parameter_tvb, 0);
+  proto_tree_add_uint(parameter_tree, hf_etheric_transmission_medium_requirement, parameter_tvb, 0, 1,transmission_medium_requirement);
+
+  proto_item_set_text(parameter_item, "Transmission medium requirement: %u (%s)",  transmission_medium_requirement, val_to_str(transmission_medium_requirement, isup_transmission_medium_requirement_value, "spare"));
+}
+/* ------------------------------------------------------------------
+  Dissector Parameter Called party number
+ */
+static void
+dissect_etheric_called_party_number_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item)
+{
+  proto_item *address_digits_item;
+  proto_tree *address_digits_tree;
+  guint8 indicators1;
+  guint8 address_digit_pair=0;
+  gint offset=0;
+  gint i=0;
+  gint length;
+  char called_number[MAXLENGTH]="";
+  e164_info_t e164_info;
+ 
+  indicators1 = tvb_get_guint8(parameter_tvb, 0);
+  proto_tree_add_boolean(parameter_tree, hf_etheric_odd_even_indicator, parameter_tvb, 0, 1, indicators1);
+  proto_tree_add_uint(parameter_tree, hf_etheric_called_party_nature_of_address_indicator, parameter_tvb, 0, 1, indicators1);
+  offset = 1;
+
+  address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb,
+					    offset, -1,
+					    "Called Party Number");
+  address_digits_tree = proto_item_add_subtree(address_digits_item, ett_etheric_address_digits);
+
+  while((length = tvb_reported_length_remaining(parameter_tvb, offset)) > 0){
+    address_digit_pair = tvb_get_guint8(parameter_tvb, offset);
+    proto_tree_add_uint(address_digits_tree, hf_etheric_called_party_odd_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair);
+    called_number[i++] = number_to_char_2(address_digit_pair & 0x0F);
+    if ((length - 1) > 0 ){
+      proto_tree_add_uint(address_digits_tree, hf_etheric_called_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair);
+      called_number[i++] = number_to_char_2((address_digit_pair & 0xf0) / 0x10);
+    }
+    offset++;
+  }
+
+  if  (((indicators1 & 0x80) == 0) && (tvb_length(parameter_tvb) > 0)){ /* Even Indicator set -> last even digit is valid & has be displayed */
+      proto_tree_add_uint(address_digits_tree, hf_etheric_called_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair);
+      called_number[i++] = number_to_char_2((address_digit_pair & 0xf0) / 0x10);
+  }
+  called_number[i++] = '\0';
+  e164_info.e164_number_type = CALLED_PARTY_NUMBER;
+  e164_info.nature_of_address = indicators1 & 0x7f;
+  e164_info.E164_number_str = called_number;
+  e164_info.E164_number_length = i - 1;
+  dissect_e164_number(parameter_tvb, address_digits_tree, 2,
+								  (offset - 2), e164_info);
+  proto_item_set_text(address_digits_item, "Called Party Number: %s", called_number);
+  proto_item_set_text(parameter_item, "Called Party Number: %s", called_number);
+
+}
+/* ------------------------------------------------------------------
+  Dissector Parameter calling party number
+ */
+static void
+dissect_etheric_calling_party_number_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item)
+{
+  proto_item *address_digits_item;
+  proto_tree *address_digits_tree;
+  guint8 indicators1, indicators2;
+  guint8 address_digit_pair=0;
+  gint offset=0;
+  gint i=0;
+  gint length;
+  char calling_number[MAXLENGTH]="";
+  e164_info_t e164_info;
+
+  indicators1 = tvb_get_guint8(parameter_tvb, 0);
+  proto_tree_add_boolean(parameter_tree, hf_etheric_odd_even_indicator, parameter_tvb, 0, 1, indicators1);
+  proto_tree_add_uint(parameter_tree, hf_etheric_called_party_nature_of_address_indicator, parameter_tvb, 0, 1, indicators1);
+  indicators2 = tvb_get_guint8(parameter_tvb, 1);
+  proto_tree_add_uint(parameter_tree, hf_etheric_address_presentation_restricted_indicator, parameter_tvb, 1, 1, indicators2);
+  proto_tree_add_uint(parameter_tree, hf_etheric_screening_indicator, parameter_tvb, 1, 1, indicators2);
+  offset = 2;
+
+  address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb,
+					    offset, -1,
+					    "Calling Party Number");
+  address_digits_tree = proto_item_add_subtree(address_digits_item, ett_etheric_address_digits);
+
+  length = tvb_length_remaining(parameter_tvb, offset);
+  while(length > 0){
+    address_digit_pair = tvb_get_guint8(parameter_tvb, offset);
+    proto_tree_add_uint(address_digits_tree, hf_etheric_calling_party_odd_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair);
+    calling_number[i++] = number_to_char_2(address_digit_pair & 0x0F);
+    if ((length - 1) > 0 ){
+      proto_tree_add_uint(address_digits_tree, hf_etheric_calling_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair);
+      calling_number[i++] = number_to_char_2((address_digit_pair & 0xF0) / 0x10);
+    }
+    offset++;
+    length = tvb_length_remaining(parameter_tvb, offset);
+  }
+
+  if  (((indicators1 & 0x80) == 0) && (tvb_length(parameter_tvb) > 0)){ /* Even Indicator set -> last even digit is valid & has be displayed */
+      proto_tree_add_uint(address_digits_tree, hf_etheric_calling_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair);
+      calling_number[i++] = number_to_char_2((address_digit_pair & 0xF0) / 0x10);
+  }
+  calling_number[i++] = '\0';
+
+  proto_item_set_text(address_digits_item, "Calling Party Number: %s", calling_number);
+  proto_item_set_text(parameter_item, "Calling Party Number: %s", calling_number);
+  
+    e164_info.e164_number_type = CALLING_PARTY_NUMBER;
+    e164_info.nature_of_address = indicators1 & 0x7f;
+    e164_info.E164_number_str = calling_number;
+    e164_info.E164_number_length = i - 1;
+    dissect_e164_number(parameter_tvb, address_digits_tree, 2, (offset - 2), e164_info);
+ 
+}
+/* ------------------------------------------------------------------
+  Dissector Parameter location number
+ */
+static void
+dissect_etheric_location_number_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item)
+{
+  proto_item *address_digits_item;
+  proto_tree *address_digits_tree;
+  guint8 indicators1, indicators2;
+  guint8 address_digit_pair=0;
+  gint offset=0;
+  gint i=0;
+  gint length;
+  char calling_number[MAXLENGTH]="";
+
+  indicators1 = tvb_get_guint8(parameter_tvb, 0);
+  proto_tree_add_boolean(parameter_tree, hf_etheric_odd_even_indicator, parameter_tvb, 0, 1, indicators1);
+  proto_tree_add_uint(parameter_tree, hf_etheric_calling_party_nature_of_address_indicator, parameter_tvb, 0, 1, indicators1);
+  indicators2 = tvb_get_guint8(parameter_tvb, 1);
+  proto_tree_add_boolean(parameter_tree, hf_etheric_inn_indicator, parameter_tvb, 1, 1, indicators2);
+  proto_tree_add_uint(parameter_tree, hf_etheric_numbering_plan_indicator, parameter_tvb, 1, 1, indicators2);
+  if ((indicators2 & 0x70) == 0x50)
+    proto_tree_add_text(parameter_tree, parameter_tvb, 1, 1, "Different meaning for Location Number: Numbering plan indicator = private numbering plan");
+  proto_tree_add_uint(parameter_tree, hf_etheric_address_presentation_restricted_indicator, parameter_tvb, 1, 1, indicators2);
+  proto_tree_add_uint(parameter_tree, hf_etheric_screening_indicator, parameter_tvb, 1, 1, indicators2);
+
+   /* NOTE  When the address presentation restricted indicator indicates address not available, the
+    * subfields in items a), b), c) and d) are coded with 0's, and the screening indicator is set to 11
+    * (network provided).
+    */
+  if ( indicators2 == 0x0b ){
+    proto_tree_add_text(parameter_tree, parameter_tvb, 1, -1, "Location number: address not available");
+    proto_item_set_text(parameter_item, "Location number: address not available");
+    return;
+  }
+
+  offset = 2;
+
+  address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb,
+					    offset, -1,
+					    "Location number");
+  address_digits_tree = proto_item_add_subtree(address_digits_item, ett_etheric_address_digits);
+
+  length = tvb_length_remaining(parameter_tvb, offset);
+  while(length > 0){
+    address_digit_pair = tvb_get_guint8(parameter_tvb, offset);
+    proto_tree_add_uint(address_digits_tree, hf_etheric_calling_party_odd_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair);
+    calling_number[i++] = number_to_char_2(address_digit_pair & 0x0f);
+    if ((length - 1) > 0 ){
+      proto_tree_add_uint(address_digits_tree, hf_etheric_calling_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair);
+      calling_number[i++] = number_to_char_2((address_digit_pair & 0xf0) / 0x10);
+    }
+    offset++;
+    length = tvb_length_remaining(parameter_tvb, offset);
+  }
+
+  if  (((indicators1 & 0x80) == 0) && (tvb_length(parameter_tvb) > 0)){ /* Even Indicator set -> last even digit is valid & has be displayed */
+      proto_tree_add_uint(address_digits_tree, hf_etheric_calling_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair);
+      calling_number[i++] = number_to_char_2((address_digit_pair & 0xf0) / 0x10);
+  }
+  calling_number[i++] = '\0';
+
+  proto_item_set_text(address_digits_item, "Location number: %s", calling_number);
+  proto_item_set_text(parameter_item, "Location number: %s", calling_number);
+
+}
+
+/* ------------------------------------------------------------------
+  Dissector Parameter User service information- no detailed dissection since defined in Rec. Q.931
+ */
+static void
+dissect_etheric_user_service_information_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item)
+{ guint length = tvb_length(parameter_tvb);
+  proto_tree_add_text(parameter_tree, parameter_tvb, 0, length,
+	  "User service information (-> Q.931 Bearer_capability)");
+  proto_item_set_text(parameter_item, "User service information, (%u byte%s length)",
+	  length , plurality(length, "", "s"));
+  dissect_q931_bearer_capability_ie(parameter_tvb,
+					    0, length,
+					    parameter_tree);
+}
+/* ------------------------------------------------------------------
+  Dissector Parameter Access Transport - no detailed dissection since defined in Rec. Q.931
+ */
+static void
+dissect_etheric_access_transport_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree,
+			 proto_item *parameter_item, packet_info *pinfo)
+{ guint length = tvb_reported_length(parameter_tvb);
+
+  proto_tree_add_text(parameter_tree, parameter_tvb, 0, -1, 
+	  "Access transport parameter field (-> Q.931)");
+  
+  if (q931_ie_handle)
+    call_dissector(q931_ie_handle, parameter_tvb, pinfo, parameter_tree);
+
+  proto_item_set_text(parameter_item, "Access transport (%u byte%s length)",
+	  length , plurality(length, "", "s"));
+}
+/* ------------------------------------------------------------------
+ Dissector Parameter Backward Call Indicators
+ */
+static void
+dissect_etheric_backward_call_indicators_parameter(tvbuff_t *parameter_tvb,proto_tree *parameter_tree, proto_item *parameter_item)
+{
+  guint8 backward_call_ind;
+
+  backward_call_ind = tvb_get_guint8(parameter_tvb, 0);
+
+
+  proto_tree_add_boolean(parameter_tree, hf_etheric_inband_information_ind, parameter_tvb, 0, 1, backward_call_ind);
+
+  proto_item_set_text(parameter_item, "Backward Call Indicators: 0x%x", backward_call_ind);
+}
+/* ------------------------------------------------------------------
+  Dissector Parameter Cause Indicators - no detailed dissection since defined in Rec. Q.850
+ */
+
+/*
+ * Cause codes for Cause.
+ * The decoding of cause indicators parameter field are defined in ITU-T
+ * Recommendation Q.850; those are different from the ones in the Q.931
+ * dissector, as that has some values not specified by the standard but
+ * that appear to be used for purposes other than the ones in Q.850.
+ */
+static const value_string q850_cause_code_vals[] = {
+	{ 0x00,	"Valid cause code not yet received" },
+	{ 0x01,	"Unallocated (unassigned) number" },
+	{ 0x02,	"No route to specified transit network" },
+	{ 0x03,	"No route to destination" },
+	{ 0x04,	"Send special information tone" },
+	{ 0x05,	"Misdialled trunk prefix" },
+	{ 0x06,	"Channel unacceptable" },
+	{ 0x07,	"Call awarded and being delivered in an established channel" },
+	{ 0x08,	"Preemption" },
+	{ 0x09,	"Preemption - circuit reserved for reuse" },
+	{ 0x0E,	"QoR: ported number" },
+	{ 0x10,	"Normal call clearing" },
+	{ 0x11,	"User busy" },
+	{ 0x12,	"No user responding" },
+	{ 0x13,	"No answer from user (user alerted)" },
+	{ 0x14,	"Subscriber absent" },
+	{ 0x15,	"Call rejected" },
+	{ 0x16,	"Number changed" },
+	{ 0x17,	"Redirection to new destination" },
+	{ 0x18,	"Call rejected due to feature at the destination" },
+	{ 0x19,	"Exchange routing error" },
+	{ 0x1A,	"Non-selected user clearing" },
+	{ 0x1B,	"Destination out of order" },
+	{ 0x1C,	"Invalid number format (address incomplete)" },
+	{ 0x1D,	"Facility rejected" },
+	{ 0x1E,	"Response to STATUS ENQUIRY" },
+	{ 0x1F,	"Normal unspecified" },
+	{ 0x21,	"Circuit out of order" },
+	{ 0x22,	"No circuit/channel available" },
+	{ 0x26,	"Network out of order" },
+	{ 0x27,	"Permanent frame mode connection out of service" },
+	{ 0x28,	"Permanent frame mode connection operational" },
+	{ 0x29,	"Temporary failure" },
+	{ 0x2A,	"Switching equipment congestion" },
+	{ 0x2B,	"Access information discarded" },
+	{ 0x2C,	"Requested circuit/channel not available" },
+	{ 0x2E,	"Precedence call blocked" },
+	{ 0x2F,	"Resources unavailable, unspecified" },
+	{ 0x31,	"Quality of service unavailable" },
+	{ 0x32,	"Requested facility not subscribed" },
+	{ 0x35,	"Outgoing calls barred within CUG" },
+	{ 0x37,	"Incoming calls barred within CUG" },
+	{ 0x38,	"Call waiting not subscribed" },
+	{ 0x39,	"Bearer capability not authorized" },
+	{ 0x3A,	"Bearer capability not presently available" },
+	{ 0x3E,	"Inconsistency in designated outgoing access information and subscriber class" },
+	{ 0x3F,	"Service or option not available, unspecified" },
+	{ 0x41,	"Bearer capability not implemented" },
+	{ 0x42,	"Channel type not implemented" },
+	{ 0x45,	"Requested facility not implemented" },
+	{ 0x46,	"Only restricted digital information bearer capability is available" },
+	{ 0x4F,	"Service or option not implemented, unspecified" },
+	{ 0x51,	"Invalid call reference value" },
+	{ 0x52,	"Identified channel does not exist" },
+	{ 0x53,	"Call identity does not exist for suspended call" },
+	{ 0x54,	"Call identity in use" },
+	{ 0x55,	"No call suspended" },
+	{ 0x56,	"Call having the requested call identity has been cleared" },
+	{ 0x57,	"Called user not member of CUG" },
+	{ 0x58,	"Incompatible destination" },
+	{ 0x5A,	"Non-existing CUG" },
+	{ 0x5B,	"Invalid transit network selection (national use)" },
+	{ 0x5F,	"Invalid message, unspecified" },
+	{ 0x60,	"Mandatory information element is missing" },
+	{ 0x61,	"Message type non-existent or not implemented" },
+	{ 0x62,	"Message not compatible with call state or message type non-existent or not implemented" },
+	{ 0x63,	"Information element nonexistant or not implemented" },
+	{ 0x64,	"Invalid information element contents" },
+	{ 0x65,	"Message not compatible with call state" },
+	{ 0x66,	"Recovery on timer expiry" },
+	{ 0x67,	"Parameter non-existent or not implemented - passed on" },
+	{ 0x6E,	"Message with unrecognized parameter discarded" },
+	{ 0x6F,	"Protocol error, unspecified" },
+	{ 0x7F,	"Internetworking, unspecified" },
+	{ 0,	NULL }
+};
+
+/* ------------------------------------------------------------------
+  Dissector Message Type release message
+ */
+gint
+dissect_etheric_release_message(tvbuff_t *message_tvb, proto_tree *etheric_tree)
+{ proto_item* parameter_item;
+  proto_tree* parameter_tree;
+  gint offset = 0;
+  gint parameter_type, parameter_pointer, parameter_length;
+
+  /* Do stuff for mandatory variable parameter Cause indicators */
+  parameter_type =  ETHERIC_PARAM_TYPE_CAUSE_INDICATORS;
+
+  parameter_pointer = 0;
+  parameter_length = 1;
+
+  parameter_item = proto_tree_add_text(etheric_tree, message_tvb,
+				       offset +  parameter_pointer, 1,"Cause indicators, see Q.850");
+
+  parameter_tree = proto_item_add_subtree(parameter_item, ett_etheric_parameter);
+  proto_tree_add_uint_format(parameter_tree, hf_etheric_parameter_type, message_tvb, 0, 1, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown"));
+  proto_tree_add_item(parameter_tree, hf_etheric_cause_indicator, message_tvb, 0, 1,FALSE);
+  offset += 1;
+
+  return offset;
+}
+/* ------------------------------------------------------------------
+  Dissector Parameter Event information
+ */
+static void
+dissect_etheric_event_information_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item)
+{
+  guint8 indicators;
+
+  indicators = tvb_get_guint8(parameter_tvb, 0);
+  proto_tree_add_uint_format(parameter_tree, hf_etheric_event_ind, parameter_tvb, 0, 1, indicators, "Event indicator: %s (%u)", val_to_str(indicators & 0x7f, isup_event_ind_value, "spare"), indicators & 0x7f);
+  proto_tree_add_boolean(parameter_tree, hf_etheric_event_presentation_restricted_ind, parameter_tvb, 0, 1, indicators);
+
+  proto_item_set_text(parameter_item,"Event information: %s (%u)", val_to_str(indicators & 0x7f, isup_event_ind_value, "spare"),indicators );
+}
+
+/* ------------------------------------------------------------------ */
+static void
+dissect_etheric_unknown_parameter(tvbuff_t *parameter_tvb, proto_item *parameter_item)
+{ guint length = tvb_length(parameter_tvb);
+  proto_item_set_text(parameter_item, "Parameter Type unknown/reserved (%u Byte%s)", length , plurality(length, "", "s"));
+}
+
+/* ------------------------------------------------------------------ */
+/* Dissectors for all used message types                              */
+/* Called by dissect_etheric_message(),                               */
+/* call parameter dissectors in order of mandatory parameters         */
+/* (since not labeled)                                                */
+/* ------------------------------------------------------------------
+  Dissector Message Type Initial address message
+ */
+gint
+dissect_etheric_initial_address_message(tvbuff_t *message_tvb, proto_tree *etheric_tree)
+{ proto_item* parameter_item;
+  proto_tree* parameter_tree;
+  tvbuff_t *parameter_tvb;
+  gint offset = 0;
+  gint parameter_type, parameter_pointer, parameter_length, actual_length;
+
+  /* Do stuff for 1nd mandatory fixed parameter: Forward Call Indicators */
+  parameter_type =  ETHERIC_PARAM_TYPE_FORW_CALL_IND;
+  parameter_item = proto_tree_add_text(etheric_tree, message_tvb, offset,
+				       1,
+				       "Forward Call Indicators");
+  parameter_tree = proto_item_add_subtree(parameter_item, ett_etheric_parameter);
+  proto_tree_add_uint_format(parameter_tree, hf_etheric_parameter_type, message_tvb, 0, 0,
+	  parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown"));
+  actual_length = tvb_ensure_length_remaining(message_tvb, offset);
+  parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(2, actual_length), 2 );
+  dissect_etheric_forward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item);
+  offset +=  1;
+
+  /* Do stuff for 2nd mandatory fixed parameter: Calling party's category */
+  parameter_type = ETHERIC_PARAM_TYPE_CALLING_PRTY_CATEG;
+  parameter_item = proto_tree_add_text(etheric_tree, message_tvb, offset,
+				       1, "Calling Party's category");
+  parameter_tree = proto_item_add_subtree(parameter_item, ett_etheric_parameter);
+  proto_tree_add_uint_format(parameter_tree, hf_etheric_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown"));
+  actual_length = tvb_ensure_length_remaining(message_tvb, offset);
+  parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(1, actual_length),1 );
+  dissect_etheric_calling_partys_category_parameter(parameter_tvb, parameter_tree, parameter_item);
+  offset += 1;
+  /* Do stuff for 3d mandatory fixed parameter: Transmission medium requirement */
+  parameter_type = ETHERIC_PARAM_TYPE_TRANSM_MEDIUM_REQU;
+  parameter_item = proto_tree_add_text(etheric_tree, message_tvb, offset,
+				       1, "Transmission medium requirement");
+  parameter_tree = proto_item_add_subtree(parameter_item, ett_etheric_parameter);
+  proto_tree_add_uint_format(parameter_tree, hf_etheric_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown"));
+  actual_length = tvb_ensure_length_remaining(message_tvb, offset);
+  parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(1, actual_length), 1);
+  dissect_etheric_transmission_medium_requirement_parameter(parameter_tvb, parameter_tree, parameter_item);
+  offset += 1;
+
+
+  /* Do stuff for mandatory variable parameter Called party number */
+  parameter_type = ETHERIC_PARAM_TYPE_CALLED_PARTY_NR;
+  parameter_pointer = tvb_get_guint8(message_tvb, offset);
+  parameter_length = tvb_get_guint8(message_tvb, offset + parameter_pointer);
+
+  parameter_item = proto_tree_add_text(etheric_tree, message_tvb,
+				       offset +  parameter_pointer,
+				       parameter_length + 1,
+				       "Called Party Number");
+  parameter_tree = proto_item_add_subtree(parameter_item, ett_etheric_parameter);
+  proto_tree_add_uint_format(parameter_tree, hf_etheric_parameter_type, message_tvb, 0, 0,
+	  parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown"));
+  proto_tree_add_uint_format(parameter_tree, hf_etheric_mandatory_variable_parameter_pointer,
+	  message_tvb, offset, 1, parameter_pointer, "Pointer to Parameter: %u", parameter_pointer);
+  proto_tree_add_uint_format(parameter_tree, hf_etheric_parameter_length, message_tvb,
+	  offset + parameter_pointer, 1, parameter_length, "Parameter length: %u", parameter_length);
+  actual_length = tvb_ensure_length_remaining(message_tvb, offset);
+  parameter_tvb = tvb_new_subset(message_tvb, offset + parameter_pointer + 1, MIN(parameter_length, actual_length), parameter_length );
+  dissect_etheric_called_party_number_parameter(parameter_tvb, parameter_tree, parameter_item);
+  offset += 1;
+  /* Do stuff for mandatory variable parameter Calling party number */
+  parameter_type = ETHERIC_PARAM_TYPE_CALLING_PARTY_NR;
+  parameter_pointer = tvb_get_guint8(message_tvb, offset);
+  parameter_length = tvb_get_guint8(message_tvb, offset + parameter_pointer);
+
+  parameter_item = proto_tree_add_text(etheric_tree, message_tvb,
+				       offset +  parameter_pointer,
+				       parameter_length + 1,
+				       "Calling Party Number");
+  parameter_tree = proto_item_add_subtree(parameter_item, ett_etheric_parameter);
+  proto_tree_add_uint_format(parameter_tree, hf_etheric_parameter_type, message_tvb, 0, 0,
+	  parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown"));
+  proto_tree_add_uint_format(parameter_tree, hf_etheric_mandatory_variable_parameter_pointer,
+	  message_tvb, offset, 1, parameter_pointer, "Pointer to Parameter: %u", parameter_pointer);
+  proto_tree_add_uint_format(parameter_tree, hf_etheric_parameter_length, message_tvb,
+	  offset + parameter_pointer, 1, parameter_length, "Parameter length: %u", parameter_length);
+  actual_length = tvb_ensure_length_remaining(message_tvb, offset);
+  parameter_tvb = tvb_new_subset(message_tvb, offset + parameter_pointer + 1, MIN(parameter_length, actual_length), parameter_length );
+  dissect_etheric_calling_party_number_parameter(parameter_tvb, parameter_tree, parameter_item);
+  offset += 1;
+  return offset;
+}
+/* ------------------------------------------------------------------
+  Dissector Message Type Address complete
+ */
+gint
+dissect_etheric_address_complete_message(tvbuff_t *message_tvb, proto_tree *etheric_tree)
+{ proto_item* parameter_item;
+  proto_tree* parameter_tree;
+  tvbuff_t *parameter_tvb;
+  gint offset = 0;
+  gint parameter_type, actual_length;
+
+  /* Do stuff for first mandatory fixed parameter: backward call indicators*/
+  parameter_type = ETHERIC_PARAM_TYPE_BACKW_CALL_IND;
+  parameter_item = proto_tree_add_text(etheric_tree, message_tvb, offset,
+				       1,
+				       "Backward Call Indicators");
+  parameter_tree = proto_item_add_subtree(parameter_item, ett_etheric_parameter);
+  
+  proto_tree_add_uint_format(parameter_tree, hf_etheric_parameter_type, message_tvb, 0, 0,
+	  parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown"));
+  
+  actual_length = tvb_ensure_length_remaining(message_tvb, offset);
+  parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(1, actual_length), 1);
+  dissect_etheric_backward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item);
+  offset += 1;
+  return offset;
+}
+/* ------------------------------------------------------------------
+  Dissector Message Type Call Progress
+*/
+gint
+dissect_etheric_call_progress_message(tvbuff_t *message_tvb, proto_tree *isup_tree)
+{ proto_item* parameter_item;
+  proto_tree* parameter_tree;
+  tvbuff_t *parameter_tvb;
+  gint offset = 0;
+  gint parameter_type, actual_length;
+
+  /* Do stuff for first mandatory fixed parameter: Event information*/
+  parameter_type = ETHERIC_PARAM_TYPE_EVENT_INFO;
+  parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset,
+				       1,
+				       "Event information");
+  parameter_tree = proto_item_add_subtree(parameter_item, ett_etheric_parameter);
+  proto_tree_add_uint_format(parameter_tree, hf_etheric_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown"));
+  actual_length = tvb_ensure_length_remaining(message_tvb, offset);
+  parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(1, actual_length), 1);
+  dissect_etheric_event_information_parameter(parameter_tvb, parameter_tree, parameter_item);
+  offset += 1;
+  return offset;
+}
+
+/* ------------------------------------------------------------------
+  Dissector all optional parameters
+*/
+static void
+dissect_etheric_optional_parameter(tvbuff_t *optional_parameters_tvb,packet_info *pinfo, proto_tree *etheric_tree)
+{ proto_item* parameter_item;
+  proto_tree* parameter_tree;
+  gint offset = 0;
+  guint parameter_type, parameter_length, actual_length;
+  tvbuff_t *parameter_tvb;
+
+  /* Dissect all optional parameters while end of message isn't reached */
+  parameter_type = 0xFF; /* Start-initializiation since parameter_type is used for while-condition */
+
+  while ((tvb_length_remaining(optional_parameters_tvb, offset)  >= 1) && (parameter_type != ETHERIC_PARAM_TYPE_END_OF_OPT_PARAMS)){
+    parameter_type = tvb_get_guint8(optional_parameters_tvb, offset);
+
+    if (parameter_type != ETHERIC_PARAM_TYPE_END_OF_OPT_PARAMS){
+      parameter_length = tvb_get_guint8(optional_parameters_tvb, offset + 1);
+
+      parameter_item = proto_tree_add_text(etheric_tree, optional_parameters_tvb,
+					   offset,
+					   parameter_length  + 1 + 1,
+					   "Parameter: type %u",
+					   parameter_type);
+      parameter_tree = proto_item_add_subtree(parameter_item, ett_etheric_parameter);
+      proto_tree_add_uint_format(parameter_tree, hf_etheric_parameter_type, optional_parameters_tvb, offset, 1, parameter_type, "Optional Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown"));
+      offset += 1;
+
+      proto_tree_add_uint_format(parameter_tree, hf_etheric_parameter_length, optional_parameters_tvb, offset, 1, parameter_length, "Parameter length: %u", parameter_length);
+      offset += 1;
+
+      actual_length = tvb_length_remaining(optional_parameters_tvb, offset);
+      if (actual_length > 0){
+	parameter_tvb = tvb_new_subset(optional_parameters_tvb, offset, MIN(parameter_length, actual_length), parameter_length);
+	switch (parameter_type) {
+	case ETHERIC_PARAM_TYPE_USER_SERVICE_INFO:
+	  dissect_etheric_user_service_information_parameter(parameter_tvb, parameter_tree, parameter_item);
+	  break;
+	case ETHERIC_PARAM_TYPE_ACC_TRANSP:
+	  dissect_etheric_access_transport_parameter(parameter_tvb, parameter_tree, parameter_item, pinfo);
+	  break;
+	 
+	case ETHERIC_PARAM_TYPE_LOCATION_NR:
+	  dissect_etheric_location_number_parameter(parameter_tvb, parameter_tree, parameter_item);
+	  break;
+
+	default:
+	  dissect_etheric_unknown_parameter(parameter_tvb, parameter_item);
+	  break;
+	}
+	offset += MIN(parameter_length, actual_length);
+      }
+
+    }
+    else {
+	/* End of optional parameters is reached */
+	proto_tree_add_uint_format(etheric_tree, hf_etheric_message_type, optional_parameters_tvb , offset, 1, parameter_type, "End of optional parameters (%u)", parameter_type);
+    }
+  }
+}
+		
+
+static void
+dissect_etheric_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *etheric_tree, guint8 etheric_version, guint8 message_length)
+{
+  tvbuff_t *parameter_tvb;
+  tvbuff_t *optional_parameter_tvb;
+  gint offset, bufferlength;
+  guint8 message_type; 
+  guint8 opt_parameter_pointer = 0;
+  gint opt_part_possible = FALSE; /* default setting - for message types allowing optional
+				     params explicitely set to TRUE in case statement */
+  offset = 0;
+    /* Extract message type field */
+  message_type = tvb_get_guint8(message_tvb,0);
+  proto_tree_add_item(etheric_tree, hf_etheric_message_type, message_tvb, 0, 1,FALSE);
+  offset ++;
+  parameter_tvb = tvb_new_subset(message_tvb, offset, -1, -1);
+
+  switch (message_type) {
+    case ETHERIC_MESSAGE_TYPE_ADDR_CMPL:
+       offset += dissect_etheric_address_complete_message(parameter_tvb, etheric_tree);
+       opt_part_possible = FALSE;
+      break;
+
+    case ETHERIC_MESSAGE_TYPE_ANSWER:
+      /* no dissector necessary since no mandatory parameters included */
+		if (etheric_version > 0x10 ) /* 0x10,	"Etheric 2.0" */
+	       opt_part_possible = TRUE;
+      break;
+
+    case ETHERIC_MESSAGE_TYPE_BLOCK_ACK:
+      /* no dissector necessary since no mandatory parameters included */
+      break;
+
+    case ETHERIC_MESSAGE_TYPE_BLOCKING:
+      /* no dissector necessary since no mandatory parameters included */
+      break;
+
+    case ETHERIC_MESSAGE_TYPE_CONNECT:
+		if (etheric_version > 0x10 ) /* 0x10,	"Etheric 2.0" */
+			opt_part_possible = TRUE;
+      break;
+
+    case ETHERIC_MESSAGE_TYPE_CALL_PROGRSS:
+       offset += dissect_etheric_call_progress_message(parameter_tvb, etheric_tree);
+       opt_part_possible = TRUE;
+      break;
+
+    case ETHERIC_MESSAGE_TYPE_CIRC_GRP_RST:
+      /* no dissector necessary since no mandatory parameters included */
+      break;
+
+    case ETHERIC_MESSAGE_TYPE_CIRC_GRP_RST_ACK:
+      /* no dissector necessary since no mandatory parameters included */
+      break;
+
+    case ETHERIC_MESSAGE_TYPE_INITIAL_ADDR:
+		offset += dissect_etheric_initial_address_message(parameter_tvb, etheric_tree);
+		if (etheric_version > 0 ) /* 0x00,	"Etheric 1.0" */
+			opt_part_possible = TRUE;
+     break;
+
+    case ETHERIC_MESSAGE_TYPE_RELEASE:
+       offset += dissect_etheric_release_message(parameter_tvb, etheric_tree);
+       opt_part_possible = FALSE;
+      break;
+
+	case ETHERIC_MESSAGE_TYPE_REL_CMPL:
+      /* no dissector necessary since no mandatory parameters included */
+      break;
+    case ETHERIC_MESSAGE_TYPE_RESET_CIRCUIT:
+      /* no dissector necessary since no mandatory parameters included */
+      break;
+ 
+	case ETHERIC_MESSAGE_TYPE_UNBLOCKING:
+      /* no dissector necessary since no mandatory parameters included */
+      break;
+    case ETHERIC_MESSAGE_TYPE_UNBLOCK_ACK:
+      /* no dissector necessary since no mandatory parameters included */
+      break;
+ default:
+     bufferlength = tvb_length_remaining(message_tvb, offset);
+     if (bufferlength != 0)
+       proto_tree_add_text(etheric_tree, parameter_tvb, 0, bufferlength, 
+			"Unknown Message type (possibly reserved/used in former ISUP version)");
+     break;
+  }
+
+   /* extract pointer to start of optional part (if any) */
+   if (opt_part_possible == TRUE){
+	   if (message_length > 5 ) {
+		   opt_parameter_pointer = tvb_get_guint8(message_tvb, offset);
+
+		   proto_tree_add_uint_format(etheric_tree, hf_etheric_pointer_to_start_of_optional_part,
+				message_tvb, offset, 1, opt_parameter_pointer, "Pointer to start of optional part: %u", opt_parameter_pointer);
+		   offset += opt_parameter_pointer;
+		   if (opt_parameter_pointer > 0){
+		     optional_parameter_tvb = tvb_new_subset(message_tvb, offset, -1, -1 );
+		     dissect_etheric_optional_parameter(optional_parameter_tvb, pinfo, etheric_tree);
+		   }
+	   }
+   }
+   else if (message_type !=ETHERIC_MESSAGE_TYPE_CHARGE_INFO)
+     proto_tree_add_text(etheric_tree, message_tvb, 0, 0, 
+		"No optional parameters are possible with this message type");
+
+}
+/* If this dissector uses sub-dissector registration add a registration routine.
+   This format is required because a script is used to find these routines and
+   create the code that calls these routines.
+*/
+void
+proto_reg_handoff_etheric(void)
+{
+	static dissector_handle_t etheric_handle;
+
+	static int tcp_port1 = 1806;
+	static int tcp_port2 = 10002;
+	static int Initialized=FALSE;
+
+
+	if (!Initialized) {
+		etheric_handle = find_dissector("etheric");
+		Initialized=TRUE;
+	}else{
+		dissector_delete("udp.port", tcp_port1, etheric_handle);
+		dissector_delete("udp.port", tcp_port2, etheric_handle);
+	}
+
+	tcp_port1 = ethericTCPport1;
+	tcp_port2 = ethericTCPport2;
+
+	dissector_add("tcp.port", ethericTCPport1, etheric_handle);
+	dissector_add("tcp.port", ethericTCPport2, etheric_handle);
+	q931_ie_handle = find_dissector("q931.ie");
+
+}
+
+void
+proto_register_etheric(void)
+{                 
+
+/* Setup list of header fields  See Section 1.6.1 for details*/
+	static hf_register_info hf[] = {
+		{ &hf_etheric_protocol_version,
+			{ "Protocol version",           "etheric.protocol_version",
+			FT_UINT8, BASE_HEX, VALS(&protocol_version_vals), 0x0,          
+			"Etheric protocol version", HFILL }
+		},
+		{ &hf_etheric_message_length,
+			{ "Message length",           "etheric.message.length",
+			FT_UINT8, BASE_DEC, NULL, 0x0,          
+			"Etheric Message length", HFILL }
+		},
+		{ &hf_etheric_cic,
+			{ "CIC",           "etheric.cic",
+			FT_UINT16, BASE_DEC, NULL, 0x0,          
+			"Etheric CIC", HFILL }
+		},
+		{ &hf_etheric_message_type,
+			{ "Message type",           "etheric.message.type",
+			FT_UINT8, BASE_HEX, VALS(&isup_message_type_value), 0x0,          
+			"Etheric message types", HFILL }
+		},
+		{ &hf_etheric_parameter_type,
+			{ "Parameter Type",  "etheric.parameter_type",
+			FT_UINT8, BASE_DEC, NULL, 0x0,
+			"", HFILL }},
+
+		{ &hf_etheric_forw_call_isdn_access_indicator,
+			{ "ISDN access indicator",  "etheric.forw_call_isdn_access_indicator",
+			FT_BOOLEAN, 16, TFS(&isup_ISDN_originating_access_ind_value), 0x01,
+			"", HFILL }},
+
+		{ &hf_etheric_calling_partys_category,
+			{ "Calling Party's category",  "etheric.calling_partys_category",
+			FT_UINT8, BASE_HEX, VALS(isup_calling_partys_category_value), 0x0,
+			"", HFILL }},
+
+		{ &hf_etheric_mandatory_variable_parameter_pointer,
+			{ "Pointer to Parameter",  "etheric.mandatory_variable_parameter_pointer",
+			FT_UINT8, BASE_DEC, NULL, 0x0,
+			"", HFILL }},
+
+		{ &hf_etheric_pointer_to_start_of_optional_part,
+			{ "Pointer to optional parameter part",  "etheric.optional_parameter_part_pointer",
+			FT_UINT8, BASE_DEC, NULL, 0x0,
+			"", HFILL }},
+
+		{ &hf_etheric_parameter_length,
+			{ "Parameter Length",  "etheric.parameter_length",
+			FT_UINT8, BASE_DEC, NULL, 0x0,
+			"", HFILL }},
+
+		{ &hf_etheric_transmission_medium_requirement,
+			{ "Transmission medium requirement",  "etheric.transmission_medium_requirement",
+			FT_UINT8, BASE_DEC, VALS(isup_transmission_medium_requirement_value), 0x0,
+			"", HFILL }},
+
+		{ &hf_etheric_odd_even_indicator,
+			{ "Odd/even indicator",  "etheric.isdn_odd_even_indicator",
+			FT_BOOLEAN, 8, TFS(&isup_odd_even_ind_value), 0x80,
+			"", HFILL }},
+
+		{ &hf_etheric_called_party_nature_of_address_indicator,
+			{ "Nature of address indicator",  "etheric.called_party_nature_of_address_indicator",
+			FT_UINT8, BASE_DEC, VALS(isup_called_party_nature_of_address_ind_value), 0x3f,
+			"", HFILL }},
+
+		{ &hf_etheric_calling_party_nature_of_address_indicator,
+			{ "Nature of address indicator",  "etheric.calling_party_nature_of_address_indicator",
+			FT_UINT8, BASE_DEC, VALS(etheric_location_number_nature_of_address_ind_value), 0x7f,
+			"", HFILL }},
+
+
+		{ &hf_etheric_ni_indicator,
+			{ "NI indicator",  "etheric.ni_indicator",
+			FT_BOOLEAN, 8, TFS(&isup_NI_ind_value), 0x80,
+			"", HFILL }},
+
+		{ &hf_etheric_inn_indicator,
+			{ "INN indicator",  "etheric.inn_indicator",
+			FT_BOOLEAN, 8, TFS(&isup_INN_ind_value), 0x80,
+			"", HFILL }},
+
+		{ &hf_etheric_numbering_plan_indicator,
+			{ "Numbering plan indicator",  "etheric.numbering_plan_indicator",
+			FT_UINT8, BASE_DEC, VALS(isup_numbering_plan_ind_value), 0x70,
+			"", HFILL }},
+
+		{ &hf_etheric_address_presentation_restricted_indicator,
+			{ "Address presentation restricted indicator",  "etheric.address_presentation_restricted_indicator",
+			FT_UINT8, BASE_DEC, VALS(isup_address_presentation_restricted_ind_value), 0x0c,
+			"", HFILL }},
+
+		{ &hf_etheric_screening_indicator,
+			{ "Screening indicator",  "etheric.screening_indicator",
+			FT_UINT8, BASE_DEC, VALS(isup_screening_ind_value), 0x03,
+			"", HFILL }},
+
+		{ &hf_etheric_called_party_odd_address_signal_digit,
+			{ "Address signal digit",  "etheric.called_party_odd_address_signal_digit",
+			FT_UINT8, BASE_DEC, VALS(isup_called_party_address_digit_value), 0x0F,
+			"", HFILL }},
+
+		{ &hf_etheric_calling_party_odd_address_signal_digit,
+			{ "Address signal digit",  "etheric.calling_party_odd_address_signal_digit",
+			FT_UINT8, BASE_DEC, VALS(isup_calling_party_address_digit_value), 0x0F,
+			"", HFILL }},
+
+		{ &hf_etheric_called_party_even_address_signal_digit,
+			{ "Address signal digit",  "etheric.called_party_even_address_signal_digit",
+			FT_UINT8, BASE_DEC, VALS(isup_called_party_address_digit_value), 0xF0,
+			"", HFILL }},
+
+		{ &hf_etheric_calling_party_even_address_signal_digit,
+			{ "Address signal digit",  "etheric.calling_party_even_address_signal_digit",
+			FT_UINT8, BASE_DEC, VALS(isup_calling_party_address_digit_value), 0xF0,
+			"", HFILL }},
+
+		{ &hf_etheric_inband_information_ind,
+			{ "In-band information indicator",  "etheric.inband_information_ind",
+			FT_BOOLEAN, 8, TFS(&isup_inband_information_ind_value), 0x01,
+			"", HFILL }},
+
+		{ &hf_etheric_cause_indicator,
+			{ "Cause indicator",  "etheric.cause_indicator",
+			FT_UINT8, BASE_DEC, VALS(q850_cause_code_vals), 0x7f,
+			"", HFILL }},
+
+		{ &hf_etheric_event_ind,
+			{ "Event indicator",  "etheric.event_ind",
+			  FT_UINT8, 8, VALS(isup_event_ind_value), 0x7f,
+			"", HFILL }},
+
+		{ &hf_etheric_event_presentation_restricted_ind,
+			{ "Event presentation restricted indicator",  "etheric.event_presentatiation_restr_ind",
+			FT_BOOLEAN, 8, TFS(&isup_event_presentation_restricted_ind_value), 0x80,
+			"", HFILL }},
+
+
+	};
+
+/* Setup protocol subtree array */
+	static gint *ett[] = {
+		&ett_etheric,
+		&ett_etheric_parameter,
+		&ett_etheric_address_digits,
+		&ett_etheric_circuit_state_ind,
+	};
+
+	module_t *etheric_module;
+
+/* Register the protocol name and description */
+	proto_etheric = proto_register_protocol("Etheric",
+	    "ETHERIC", "etheric");
+
+	new_register_dissector("etheric", dissect_etheric, proto_etheric);
+
+
+/* Required function calls to register the header fields and subtrees used */
+	proto_register_field_array(proto_etheric, hf, array_length(hf));
+	proto_register_subtree_array(ett, array_length(ett));
+
+
+	/* Register a configuration option for port */
+	etheric_module = prefs_register_protocol(proto_etheric,
+											  proto_reg_handoff_etheric);
+
+	prefs_register_uint_preference(etheric_module, "tcp.port1",
+								   "etheric TCP Port 1",
+								   "Set TCP port 1 for etheric messages",
+								   10,
+								   &ethericTCPport1);
+
+	prefs_register_uint_preference(etheric_module, "tcp.port2",
+								   "etheric TCP Port 2",
+								   "Set TCP port 2 for etheric messages",
+								   10,
+								   &ethericTCPport2);
+}
diff -urN ethereal-0.10.6/epan/dissectors/packet-etherip.c ethereal-0.10.7/epan/dissectors/packet-etherip.c
--- ethereal-0.10.6/epan/dissectors/packet-etherip.c	2004-08-12 17:42:30.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-etherip.c	2004-10-20 17:35:00.000000000 -0500
@@ -21,7 +21,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $Id: packet-etherip.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-etherip.c 12130 2004-09-29 00:52:45Z guy $
  */
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -30,7 +30,7 @@
 #include <string.h>
 #include <glib.h>
 #include <epan/packet.h>
-#include "ipproto.h"
+#include <epan/ipproto.h>
 
 static int proto_etherip = -1;
 static int hf_etherip_ver = -1;
diff -urN ethereal-0.10.6/epan/dissectors/packet-ethertype.c ethereal-0.10.7/epan/dissectors/packet-ethertype.c
--- ethereal-0.10.6/epan/dissectors/packet-ethertype.c	2004-08-12 17:41:59.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ethertype.c	2004-10-20 17:34:39.000000000 -0500
@@ -1,7 +1,7 @@
 /* ethertype.c
  * Routines for calling the right protocol for the ethertype.
  *
- * $Id: packet-ethertype.c 11536 2004-07-27 06:05:20Z guy $
+ * $Id: packet-ethertype.c 12074 2004-09-23 18:48:11Z guy $
  *
  * Gilbert Ramirez <gram@alumni.rice.edu>
  *
@@ -217,20 +217,9 @@
 		call_dissector(data_handle,next_tvb, pinfo, tree);
 
 		/* Label protocol */
-		switch (etype) {
-
-		case ETHERTYPE_LOOP:
-			if (check_col(pinfo->cinfo, COL_PROTOCOL)) {
-				col_add_fstr(pinfo->cinfo, COL_PROTOCOL, "LOOP");
-			}
-			break;
-
-		default:
-			if (check_col(pinfo->cinfo, COL_PROTOCOL)) {
-				col_add_fstr(pinfo->cinfo, COL_PROTOCOL, "0x%04x",
-				    etype);
-			}
-			break;
+		if (check_col(pinfo->cinfo, COL_PROTOCOL)) {
+			col_add_fstr(pinfo->cinfo, COL_PROTOCOL, "0x%04x",
+			    etype);
 		}
 		if (check_col(pinfo->cinfo, COL_INFO)) {
 			description = match_strval(etype, etype_vals);
diff -urN ethereal-0.10.6/epan/dissectors/packet-fc.c ethereal-0.10.7/epan/dissectors/packet-fc.c
--- ethereal-0.10.6/epan/dissectors/packet-fc.c	2004-08-12 17:42:02.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-fc.c	2004-10-20 17:34:42.000000000 -0500
@@ -4,7 +4,7 @@
  *   Copyright 2003  Ronnie Sahlberg, exchange first/last matching and 
  *                                    tap listener and misc updates
  *
- * $Id: packet-fc.c 11474 2004-07-23 01:32:42Z guy $
+ * $Id: packet-fc.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -49,14 +49,14 @@
 #endif
 
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "reassemble.h"
 #include <epan/conversation.h>
 #include "etypes.h"
 #include "packet-fc.h"
 #include "packet-fclctl.h"
 #include "packet-fcbls.h"
-#include "tap.h"
+#include <epan/tap.h>
 
 #define FC_HEADER_SIZE         24
 #define FC_RCTL_EISL           0x50
diff -urN ethereal-0.10.6/epan/dissectors/packet-fcip.c ethereal-0.10.7/epan/dissectors/packet-fcip.c
--- ethereal-0.10.6/epan/dissectors/packet-fcip.c	2004-08-12 17:42:01.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-fcip.c	2004-10-20 17:34:41.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for FCIP dissection
  * Copyright 2001, Dinesh G Dutt (ddutt@cisco.com)
  *
- * $Id: packet-fcip.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-fcip.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <glib.h>
 
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 
 /*
  * See:
@@ -644,8 +644,9 @@
     fcip_module = prefs_register_protocol(proto_fcip, NULL);
     prefs_register_bool_preference(fcip_module,
                                    "desegment",
-                                   "Desegment FCIP messages",
-                                   "When enabled, FCIP messages that span multiple TCP segments are desegmented",
+                                   "Reassemble FCIP messages spanning multiple TCP segments",
+                                   "Whether the FCIP dissector should reassemble messages spanning multiple TCP segments."
+                                   " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
                                    &fcip_desegment);
     prefs_register_uint_preference(fcip_module,
                                    "target_port",
diff -urN ethereal-0.10.6/epan/dissectors/packet-fcp.c ethereal-0.10.7/epan/dissectors/packet-fcp.c
--- ethereal-0.10.6/epan/dissectors/packet-fcp.c	2004-08-12 17:42:28.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-fcp.c	2004-10-20 17:34:59.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for Fibre Channel Protocol for SCSI (FCP)
  * Copyright 2001, Dinesh G Dutt <ddutt@cisco.com>
  *
- * $Id: packet-fcp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-fcp.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -51,7 +51,7 @@
 # include "snprintf.h"
 #endif
 
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/packet.h>
 #include <epan/conversation.h>
 #include "etypes.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-fcsb3.c ethereal-0.10.7/epan/dissectors/packet-fcsb3.c
--- ethereal-0.10.6/epan/dissectors/packet-fcsb3.c	2004-08-12 17:42:21.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-fcsb3.c	2004-10-20 17:34:52.000000000 -0500
@@ -3,7 +3,7 @@
  * This decoder is for FC-SB3 version 1.4
  * Copyright 2003, Dinesh G Dutt <ddutt@cisco.com>
  *
- * $Id: packet-fcsb3.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-fcsb3.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -52,7 +52,7 @@
 # include "snprintf.h"
 #endif
 
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/packet.h>
 #include <epan/conversation.h>
 #include "etypes.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-fcsp.c ethereal-0.10.7/epan/dissectors/packet-fcsp.c
--- ethereal-0.10.6/epan/dissectors/packet-fcsp.c	2004-08-12 17:41:59.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-fcsp.c	2004-10-20 17:34:39.000000000 -0500
@@ -3,7 +3,7 @@
  * This decoder is for FC-SP version 1.1
  * Copyright 2003, Dinesh G Dutt <ddutt@cisco.com>
  *
- * $Id: packet-fcsp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-fcsp.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -52,7 +52,7 @@
 # include "snprintf.h"
 #endif
 
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/packet.h>
 #include <epan/conversation.h>
 #include "etypes.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-fddi.c ethereal-0.10.7/epan/dissectors/packet-fddi.c
--- ethereal-0.10.6/epan/dissectors/packet-fddi.c	2004-08-12 17:42:06.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-fddi.c	2004-10-20 17:34:45.000000000 -0500
@@ -3,7 +3,7 @@
  *
  * Laurent Deniel <laurent.deniel@free.fr>
  *
- * $Id: packet-fddi.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-fddi.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -33,10 +33,10 @@
 #include <glib.h>
 #include <epan/bitswap.h>
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-fddi.h"
 #include "packet-llc.h"
-#include "tap.h"
+#include <epan/tap.h>
 
 #include <epan/addr_resolv.h>
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-fr.c ethereal-0.10.7/epan/dissectors/packet-fr.c
--- ethereal-0.10.6/epan/dissectors/packet-fr.c	2004-08-12 17:42:01.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-fr.c	2004-10-20 17:34:41.000000000 -0500
@@ -3,7 +3,7 @@
  *
  * Copyright 2001, Paul Ionescu	<paul@acorp.ro>
  *
- * $Id: packet-fr.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-fr.c 12127 2004-09-28 23:48:02Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -45,10 +45,10 @@
 #include <string.h>
 #include <glib.h>
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-llc.h"
 #include "packet-chdlc.h"
-#include "xdlc.h"
+#include <epan/xdlc.h>
 #include "etypes.h"
 #include "oui.h"
 #include "nlpid.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-frame.c ethereal-0.10.7/epan/dissectors/packet-frame.c
--- ethereal-0.10.6/epan/dissectors/packet-frame.c	2004-08-12 17:42:30.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-frame.c	2004-10-20 17:35:01.000000000 -0500
@@ -2,7 +2,7 @@
  *
  * Top-most dissector. Decides dissector based on Wiretap Encapsulation Type.
  *
- * $Id: packet-frame.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-frame.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -32,8 +32,8 @@
 #include <epan/timestamp.h>
 #include <epan/tvbuff.h>
 #include "packet-frame.h"
-#include "prefs.h"
-#include "tap.h"
+#include <epan/prefs.h>
+#include <epan/tap.h>
 
 int proto_frame = -1;
 int hf_frame_arrival_time = -1;
diff -urN ethereal-0.10.6/epan/dissectors/packet-ftam.c ethereal-0.10.7/epan/dissectors/packet-ftam.c
--- ethereal-0.10.6/epan/dissectors/packet-ftam.c	2004-08-12 17:42:06.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ftam.c	2004-10-20 17:34:44.000000000 -0500
@@ -2,7 +2,7 @@
 *
 * Routine to dissect OSI ISO 8571 FTAM Protocol packets
 *
-* $Id: packet-ftam.c 11410 2004-07-18 18:06:47Z gram $
+* $Id: packet-ftam.c 12115 2004-09-27 22:55:15Z guy $
 *
 * Yuriy Sidelnikov <YSidelnikov@hotmail.com>
 *
@@ -38,7 +38,7 @@
 
 #include "packet-frame.h"
 #include "packet-ftam.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #include <epan/strutil.h>
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-fw1.c ethereal-0.10.7/epan/dissectors/packet-fw1.c
--- ethereal-0.10.6/epan/dissectors/packet-fw1.c	2004-08-12 17:42:26.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-fw1.c	2004-10-20 17:34:55.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for Ethernet header disassembly of FW1 "monitor" files
  * Copyright 2002,2003, Alfred Koebler <ako@icon.de>
  *
- * $Id: packet-fw1.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-fw1.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Alfred Koebler <ako@icon.de>
@@ -90,7 +90,7 @@
 
 #include <glib.h>
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "etypes.h"
 
 /* Place FW1 summary in proto tree */
diff -urN ethereal-0.10.6/epan/dissectors/packet-gprs-llc.c ethereal-0.10.7/epan/dissectors/packet-gprs-llc.c
--- ethereal-0.10.6/epan/dissectors/packet-gprs-llc.c	2004-08-12 17:42:05.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-gprs-llc.c	2004-10-20 17:34:43.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for Logical Link Control GPRS dissection ETSI 4.64
  * Copyright 2000, Josef Korelus <jkor@quick.cz>
  *
- * $Id: packet-gprs-llc.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-gprs-llc.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -38,6 +38,7 @@
 #endif
 
 #include <epan/packet.h>
+#include "prefs.h"
 /*
 #include "packet-llcgprs.h"
 */
@@ -81,6 +82,9 @@
 static gint ett_llcgprs_sframe = -1;
 
 static dissector_handle_t data_handle;
+
+static gboolean ignore_cipher_bit = FALSE;
+
 static dissector_table_t llcgprs_subdissector_table;
 static const value_string sapi_t[] = {
 	{  0, "Reserved"},
@@ -264,7 +268,15 @@
 		     	  }
 
  		   	  next_tvb = tvb_new_subset(tvb, offset,crc_start-3, -1 );
-		   	  if (epm < 2){
+		   	  if (ignore_cipher_bit || !(epm & 0x2)){
+			  	/*
+			  	 * Either we're ignoring the cipher bit
+			  	 * (because the bit is set but the
+			  	 * data is unciphered), or the cipher
+			  	 * bit isn't set (indicating that the
+			  	 * data is unciphered).  Try dissecting
+			  	 * it with a subdissector.
+			  	 */
 		   	    if  (!dissector_try_port(llcgprs_subdissector_table,sapi, next_tvb, pinfo, tree))
 		   		call_dissector(data_handle, next_tvb, pinfo, tree);
 			  }
@@ -359,6 +371,8 @@
 		&ett_llcgprs_sframe,
 	};
 
+	module_t *llcgprs_module;
+	
 /* Register the protocol name and description */
 	proto_llcgprs = proto_register_protocol("Logical Link Control GPRS",
 	    "GPRS-LLC", "llcgprs");
@@ -367,6 +381,12 @@
 	proto_register_field_array(proto_llcgprs, hf, array_length(hf));
 	proto_register_subtree_array(ett, array_length(ett));
 	register_dissector( "llcgprs", dissect_llcgprs, proto_llcgprs);
+	
+	llcgprs_module = prefs_register_protocol ( proto_llcgprs, NULL );
+	prefs_register_bool_preference ( llcgprs_module, "ignore_cipher_bit",
+	    "Ignore cipher bit", 
+	    "Whether to ignore the cipher bit (because it might be set on unciphered data)",
+	    &ignore_cipher_bit );
 }
 
 
@@ -385,4 +405,3 @@
 */
 	data_handle = find_dissector("data");
 }
-
diff -urN ethereal-0.10.6/epan/dissectors/packet-gre.c ethereal-0.10.7/epan/dissectors/packet-gre.c
--- ethereal-0.10.6/epan/dissectors/packet-gre.c	2004-08-12 17:42:25.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-gre.c	2004-10-20 17:34:54.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for the Generic Routing Encapsulation (GRE) protocol
  * Brad Robel-Forrest <brad.robel-forrest@watchguard.com>
  *
- * $Id: packet-gre.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-gre.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -30,10 +30,10 @@
 #include <glib.h>
 #include <epan/packet.h>
 #include "packet-wccp.h"
-#include "in_cksum.h"
+#include <epan/in_cksum.h>
 #include "etypes.h"
 #include "greproto.h"
-#include "ipproto.h"
+#include <epan/ipproto.h>
 #include "llcsaps.h"
 
 /*
@@ -47,6 +47,7 @@
 
 static int proto_gre = -1;
 static int hf_gre_proto = -1;
+static int hf_gre_key = -1;
 
 static gint ett_gre = -1;
 static gint ett_gre_flags = -1;
@@ -203,10 +204,8 @@
       offset += 2;
     }
     else {
-      if (tree) {
-	proto_tree_add_text(gre_tree, tvb, offset, 4,
-			    "Key: %u", tvb_get_ntohl(tvb, offset));
-      }
+      if (tree)
+	proto_tree_add_item(gre_tree, hf_gre_key, tvb, offset, 4, FALSE);
       offset += 4;
     }
   }
@@ -360,6 +359,10 @@
 			{ "Protocol Type", "gre.proto", FT_UINT16, BASE_HEX, VALS(typevals), 0x0,
 				"The protocol that is GRE encapsulated", HFILL }
 		},
+		{ &hf_gre_key,
+			{ "GRE Key", "gre.key", FT_UINT32, BASE_HEX, NULL, 0x0,
+				"", HFILL }
+		},
 	};
 	static gint *ett[] = {
 		&ett_gre,
diff -urN ethereal-0.10.6/epan/dissectors/packet-gsm_a.c ethereal-0.10.7/epan/dissectors/packet-gsm_a.c
--- ethereal-0.10.6/epan/dissectors/packet-gsm_a.c	2004-08-12 17:42:00.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-gsm_a.c	2004-10-20 17:34:40.000000000 -0500
@@ -38,7 +38,7 @@
  *   Formats and coding
  *   (3GPP TS 24.080 version 4.3.0 Release 4)
  *
- * $Id: packet-gsm_a.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-gsm_a.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -69,8 +69,8 @@
 #include <string.h>
 
 #include "epan/packet.h"
-#include "prefs.h"
-#include "tap.h"
+#include <epan/prefs.h>
+#include <epan/tap.h>
 #include "asn1.h"
 
 #include "packet-tcap.h"
@@ -10601,15 +10601,6 @@
 	col_append_str(pinfo->cinfo, COL_INFO, "(RP) ");
     }
 
-    /*
-     * In the interest of speed, if "tree" is NULL, don't do any work
-     * not necessary to generate protocol tree items.
-     */
-    if (!tree)
-    {
-	return;
-    }
-
     offset = 0;
     saved_offset = offset;
 
@@ -11372,6 +11363,7 @@
     dissector_add("bssap.pdu_type",  BSSAP_PDU_TYPE_BSSMAP, bssmap_handle);
     dissector_add("bssap.pdu_type",  BSSAP_PDU_TYPE_DTAP, dtap_handle);
     dissector_add("ranap.nas_pdu",  BSSAP_PDU_TYPE_DTAP, dtap_handle);
+    dissector_add("llcgprs.sapi", 1, dtap_handle);
 
     data_handle = find_dissector("data");
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-gsm_map.c ethereal-0.10.7/epan/dissectors/packet-gsm_map.c
--- ethereal-0.10.6/epan/dissectors/packet-gsm_map.c	2004-08-12 17:42:26.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-gsm_map.c	2004-10-20 17:34:56.000000000 -0500
@@ -7,7 +7,7 @@
  * Changed to run on new version of TCAP, many changes for
  * EOC matching, and parameter separation.  (2003)
  *
- * $Id: packet-gsm_map.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-gsm_map.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -43,7 +43,7 @@
 #include <string.h>
 
 #include "epan/packet.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "asn1.h"
 
 #include "packet-tcap.h"
@@ -2990,25 +2990,20 @@
     }
 
 
-    /* In the interest of speed, if "tree" is NULL, don't do any work not
-     * necessary to generate protocol tree items.
-     */
-    if (tree)
-    {
-	g_pinfo = pinfo;
-	g_tree = tree;
+    /* Dissect the packet (even if !tree so can update the INFO column) */
+    g_pinfo = pinfo;
+    g_tree = tree;
 
-	/* create display subtree for the protocol */
-	ti = proto_tree_add_item(tree, proto_map, tvb, 0, -1, FALSE);
+    /* create display subtree for the protocol */
+    ti = proto_tree_add_item(tree, proto_map, tvb, 0, -1, FALSE);
 
-	map_tree = proto_item_add_subtree(ti, ett_map);
+    map_tree = proto_item_add_subtree(ti, ett_map);
 
-	asn1_open(&asn1, tvb, offset);
+    asn1_open(&asn1, tvb, offset);
 
-	dissect_map_message(pinfo, map_tree, &asn1);
+    dissect_map_message(pinfo, map_tree, &asn1);
 
-	asn1_close(&asn1, &offset);
-    }
+    asn1_close(&asn1, &offset);
 }
 
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-gsm_sms.c ethereal-0.10.7/epan/dissectors/packet-gsm_sms.c
--- ethereal-0.10.6/epan/dissectors/packet-gsm_sms.c	2004-08-12 17:42:28.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-gsm_sms.c	2004-10-20 17:34:59.000000000 -0500
@@ -11,7 +11,7 @@
  *   Technical realization of Short Message Service (SMS)
  *   (3GPP TS 23.040 version 5.4.0 Release 5)
  *
- * $Id: packet-gsm_sms.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-gsm_sms.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -51,7 +51,7 @@
 #include <string.h>
 
 #include "epan/packet.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #include "packet-gsm_sms.h"
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-gsm_sms_ud.c ethereal-0.10.7/epan/dissectors/packet-gsm_sms_ud.c
--- ethereal-0.10.6/epan/dissectors/packet-gsm_sms_ud.c	2004-08-12 17:41:58.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-gsm_sms_ud.c	2004-10-20 17:34:37.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-gsm_sms_ud.c
  * Routines for GSM SMS TP-UD (GSM 03.40) dissection
  *
- * $Id: packet-gsm_sms_ud.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-gsm_sms_ud.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Refer to the AUTHORS file or the AUTHORS section in the man page
  * for contacting the author(s) of this file.
@@ -69,7 +69,7 @@
 
 #include <epan/packet.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "reassemble.h"
 
 static void dissect_gsm_sms_ud(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
diff -urN ethereal-0.10.6/epan/dissectors/packet-gsm_ss.c ethereal-0.10.7/epan/dissectors/packet-gsm_ss.c
--- ethereal-0.10.6/epan/dissectors/packet-gsm_ss.c	2004-08-12 17:42:15.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-gsm_ss.c	2004-10-20 17:34:50.000000000 -0500
@@ -19,7 +19,7 @@
  * Michael Lum <mlum [AT] telostech.com>,
  * Created (2004).
  *
- * $Id: packet-gsm_ss.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-gsm_ss.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -55,7 +55,7 @@
 #include <string.h>
 
 #include "epan/packet.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "asn1.h"
 
 #include "packet-tcap.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-gtp.c ethereal-0.10.7/epan/dissectors/packet-gtp.c
--- ethereal-0.10.6/epan/dissectors/packet-gtp.c	2004-08-12 17:42:15.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-gtp.c	2004-10-20 17:34:50.000000000 -0500
@@ -4,7 +4,7 @@
  * Copyright 2001, Michal Melerowicz <michal.melerowicz@nokia.com>
  *                 Nicolas Balkota <balkota@mac.com>
  *
- * $Id: packet-gtp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-gtp.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,7 +36,7 @@
 #include <glib.h>
 
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-gtp.h"
 #include "packet-ipv6.h"
 #include "packet-ppp.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-h225.c ethereal-0.10.7/epan/dissectors/packet-h225.c
--- ethereal-0.10.6/epan/dissectors/packet-h225.c	2004-08-12 17:42:06.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-h225.c	2004-10-20 17:34:44.000000000 -0500
@@ -4,7 +4,7 @@
  *
  * Maintained by Andreas Sikkema (h323@ramdyne.nl)
  *
- * $Id: packet-h225.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-h225.c 12263 2004-10-11 12:04:35Z sahlberg $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,14 +36,14 @@
 #include <stdio.h>
 #include <string.h>
 
-#include "prefs.h"
-#include "tap.h"
+#include <epan/prefs.h>
+#include <epan/tap.h>
 #include "packet-tpkt.h"
 #include "packet-per.h"
 #include "packet-h225.h"
 #include "packet-h235.h"
 #include "packet-h245.h"
-#include "t35.h"
+#include <epan/t35.h>
 #include "h225-persistentdata.h"
 
 #define UDP_PORT_RAS1 1718
@@ -53,7 +53,7 @@
 static void reset_h225_packet_info(h225_packet_info *pi);
 static void ras_call_matching(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, h225_packet_info *pi);
 
-static h225_packet_info h225_pi;
+static h225_packet_info h225_pi; 
 
 static dissector_handle_t h225ras_handle;
 static dissector_handle_t H323UserInformation_handle;
@@ -1154,7 +1154,7 @@
 	{ 2, "addressNotAvailable" },
 	{ 0, NULL}
 };
-static per_choice_t PresentationIndicator_choice[] = {
+static const per_choice_t PresentationIndicator_choice[] = {
 	{ 0, "presentationAllowed", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL},
 	{ 1, "presentationRestricted", ASN1_EXTENSION_ROOT,
@@ -1179,7 +1179,7 @@
 	{ 4, "callIndependentSupplementaryService" },
 	{ 0, NULL}
 };
-static per_choice_t conferenceGoal_choice[] = {
+static const per_choice_t conferenceGoal_choice[] = {
 	{ 0, "create", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "join", ASN1_EXTENSION_ROOT,
@@ -1210,7 +1210,7 @@
 	{ 6, "multirate" },
 	{ 0, NULL}
 };
-static per_choice_t ScnConnectionType_choice[] = {
+static const per_choice_t ScnConnectionType_choice[] = {
 	{ 0, "unknown", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "bChannel", ASN1_EXTENSION_ROOT,
@@ -1244,7 +1244,7 @@
 	{ 5, "bonded-mode3" },
 	{ 0, NULL}
 };
-static per_choice_t ScnConnectionAggregation_choice[] = {
+static const per_choice_t ScnConnectionAggregation_choice[] = {
 	{ 0, "auto", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "none", ASN1_EXTENSION_ROOT,
@@ -1281,7 +1281,7 @@
 	{ 10, "transportedInformation" },
 	{ 0, NULL}
 };
-static per_choice_t FacilityReason_choice[] = {
+static const per_choice_t FacilityReason_choice[] = {
 	{ 0, "routeCallToGatekeeper", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "callForwarded", ASN1_EXTENSION_ROOT,
@@ -1327,7 +1327,7 @@
 	{ 5, "abbreviatedNumber" },
 	{ 0, NULL}
 };
-static per_choice_t PublicTypeOfNumber_choice[] = {
+static const per_choice_t PublicTypeOfNumber_choice[] = {
 	{ 0, "unknown", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "internationalNumber", ASN1_EXTENSION_ROOT,
@@ -1360,7 +1360,7 @@
 	{ 5, "abbreviatedNumber" },
 	{ 0, NULL}
 };
-static per_choice_t PrivateTypeOfNumber_choice[] = {
+static const per_choice_t PrivateTypeOfNumber_choice[] = {
 	{ 0, "unknown", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "level2RegionalNumber", ASN1_EXTENSION_ROOT,
@@ -1389,7 +1389,7 @@
 	{ 2, "sctp" },
 	{ 0, NULL}
 };
-static per_choice_t UseSpecifiedTransport_choice[] = {
+static const per_choice_t UseSpecifiedTransport_choice[] = {
 	{ 0, "tcp", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "annexE", ASN1_EXTENSION_ROOT,
@@ -1426,7 +1426,7 @@
 	{ 15, "securityUnknownCA" },
 	{ 0, NULL}
 };
-static per_choice_t SecurityErrors_choice[] = {
+static const per_choice_t SecurityErrors_choice[] = {
 	{ 0, "securityWrongSyncTime", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "securityReplay", ASN1_EXTENSION_ROOT,
@@ -1479,7 +1479,7 @@
 	{ 5, "securityWrongOID" },
 	{ 0, NULL}
 };
-static per_choice_t SecurityErrors2_choice[] = {
+static const per_choice_t SecurityErrors2_choice[] = {
 	{ 0, "securityWrongSyncTime", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "securityReplay", ASN1_EXTENSION_ROOT,
@@ -1508,7 +1508,7 @@
 	{ 2, "close" },
 	{ 0, NULL}
 };
-static per_choice_t ServiceControlSession_reason_choice[] = {
+static const per_choice_t ServiceControlSession_reason_choice[] = {
 	{ 0, "open", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "refresh", ASN1_EXTENSION_ROOT,
@@ -1531,7 +1531,7 @@
 	{ 1, "debit" },
 	{ 0, NULL}
 };
-static per_choice_t billingMode_choice[] = {
+static const per_choice_t billingMode_choice[] = {
 	{ 0, "credit", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "debit", ASN1_EXTENSION_ROOT,
@@ -1552,7 +1552,7 @@
 	{ 1, "connect" },
 	{ 0, NULL}
 };
-static per_choice_t CCSCcallStartingPoint_choice[] = {
+static const per_choice_t CCSCcallStartingPoint_choice[] = {
 	{ 0, "alerting", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "connect", ASN1_EXTENSION_ROOT,
@@ -1579,7 +1579,7 @@
 	{ 7, "securityError" },
 	{ 0, NULL}
 };
-static per_choice_t GatekeeperRejectReason_choice[] = {
+static const per_choice_t GatekeeperRejectReason_choice[] = {
 	{ 0, "resourceUnavailable", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "terminalExcluded", ASN1_EXTENSION_ROOT,
@@ -1619,7 +1619,7 @@
 	{ 5, "securityError" },
 	{ 0, NULL}
 };
-static per_choice_t UnregRequestReason_choice[] = {
+static const per_choice_t UnregRequestReason_choice[] = {
 	{ 0, "reregistrationRequired", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "ttlExpired", ASN1_EXTENSION_ROOT,
@@ -1655,7 +1655,7 @@
 	{ 5, "securityError" },
 	{ 0, NULL}
 };
-static per_choice_t UnregRejectReason_choice[] = {
+static const per_choice_t UnregRejectReason_choice[] = {
 	{ 0, "notCurrentlyRegistered", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "callInProgress", ASN1_EXTENSION_ROOT,
@@ -1689,7 +1689,7 @@
 	{ 3, "nToN" },
 	{ 0, NULL}
 };
-static per_choice_t CallType_choice[] = {
+static const per_choice_t CallType_choice[] = {
 	{ 0, "pointToPoint", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "oneToN", ASN1_EXTENSION_ROOT,
@@ -1713,7 +1713,7 @@
 	{ 1, "gatekeeperRouted" },
 	{ 0, NULL}
 };
-static per_choice_t CallModel_choice[] = {
+static const per_choice_t CallModel_choice[] = {
 	{ 0, "direct", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "gatekeeperRouted", ASN1_EXTENSION_ROOT,
@@ -1735,7 +1735,7 @@
 	{ 2, "noControl" },
 	{ 0, NULL}
 };
-static per_choice_t TransportQOS_choice[] = {
+static const per_choice_t TransportQOS_choice[] = {
 	{ 0, "endpointControlled", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "gatekeeperControlled", ASN1_EXTENSION_ROOT,
@@ -1763,7 +1763,7 @@
 	{ 7, "securityError" },
 	{ 0, NULL}
 };
-static per_choice_t BandRejectReason_choice[] = {
+static const per_choice_t BandRejectReason_choice[] = {
 	{ 0, "notBound", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "invalidConferenceID", ASN1_EXTENSION_ROOT,
@@ -1800,7 +1800,7 @@
 	{ 2, "undefinedReason" },
 	{ 0, NULL}
 };
-static per_choice_t DisengageReason_choice[] = {
+static const per_choice_t DisengageReason_choice[] = {
 	{ 0, "forcedDrop", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "normalDrop", ASN1_EXTENSION_ROOT,
@@ -1828,7 +1828,7 @@
 	{ 3, "securityError" },
 	{ 0, NULL}
 };
-static per_choice_t DisengageRejectReason_choice[] = {
+static const per_choice_t DisengageRejectReason_choice[] = {
 	{ 0, "notRegistered", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "requestToDropOther", ASN1_EXTENSION_ROOT,
@@ -1859,7 +1859,7 @@
 	{ 3, "securityError" },
 	{ 0, NULL}
 };
-static per_choice_t InfoRequestNakReason_choice[] = {
+static const per_choice_t InfoRequestNakReason_choice[] = {
 	{ 0, "notRegistered", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "securityDenial", ASN1_EXTENSION_ROOT,
@@ -1890,7 +1890,7 @@
 	{ 4, "neededFeatureNotSupported" },
 	{ 0, NULL}
 };
-static per_choice_t SCRresult_choice[] = {
+static const per_choice_t SCRresult_choice[] = {
 	{ 0, "started", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "failed", ASN1_EXTENSION_ROOT,
@@ -1947,7 +1947,7 @@
 	return offset;
 }
 
-static per_sequence_t H221NonStandard_sequence[] = {
+static const per_sequence_t H221NonStandard_sequence[] = {
 	{ "t35CountryCode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_t35CountryCode },
 	{ "t35Extension", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -1979,7 +1979,7 @@
 	{ 1,	"h221NonStandard" },
 	{ 0, NULL }
 };
-static per_choice_t NonStandardIdentifier_choice[] = {
+static const per_choice_t NonStandardIdentifier_choice[] = {
 	{ 0,	"object", ASN1_EXTENSION_ROOT,
 		dissect_h225_object },
 	{ 1,	"h221NonStandard", ASN1_EXTENSION_ROOT,
@@ -2031,7 +2031,7 @@
 	return offset;
 }
 
-static per_sequence_t NonStandardParameter_sequence[] = {
+static const per_sequence_t NonStandardParameter_sequence[] = {
 	{ "nonStandardIdentifier", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h225_nonStandardIdentifier },
 	{ "data", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -2060,7 +2060,7 @@
 	return offset;
 }
 
-static per_sequence_t GatekeeperInfo_sequence[] = {
+static const per_sequence_t GatekeeperInfo_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ NULL, 0, 0, NULL }
@@ -2086,7 +2086,7 @@
 	{ 2, "default" },
 	{ 0, NULL}
 };
-static per_choice_t SecurityServiceMode_choice[] = {
+static const per_choice_t SecurityServiceMode_choice[] = {
 	{ 0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h225_nonStandard },
 	{ 1, "none", ASN1_EXTENSION_ROOT,
@@ -2116,7 +2116,7 @@
 
 
 
-static per_sequence_t SecurityCapabilities_sequence[] = {
+static const per_sequence_t SecurityCapabilities_sequence[] = {
 	{ "nonStandard", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandard },
 	{ "encryption", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -2150,7 +2150,7 @@
 	{ 3, "ipsec" },
 	{ 0, NULL}
 };
-static per_choice_t H245Security_choice[] = {
+static const per_choice_t H245Security_choice[] = {
 	{ 0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h225_nonStandard },
 	{ 1, "noSecurity", ASN1_EXTENSION_ROOT,
@@ -2186,7 +2186,7 @@
 }
 
 
-static per_sequence_t RasUsageInfoTypes_sequence[] = {
+static const per_sequence_t RasUsageInfoTypes_sequence[] = {
 	{ "nonStandardUsageTypes", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_nonStandardUsageTypes },
 	{ "startTime", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -2265,7 +2265,7 @@
 }
 
 
-static per_sequence_t DataRate_sequence[] = {
+static const per_sequence_t DataRate_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "channelRate", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -2296,7 +2296,7 @@
 }
 
 
-static per_sequence_t TerminalInfo_sequence[] = {
+static const per_sequence_t TerminalInfo_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ NULL, 0, 0, NULL }
@@ -2317,7 +2317,7 @@
 }
 
 
-static per_sequence_t StimulusControl_sequence[] = {
+static const per_sequence_t StimulusControl_sequence[] = {
 	{ "nonStandard", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandard },
 	{ "isText", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -2390,7 +2390,7 @@
 	{ 25, "hopCountExceeded" },
 	{ 0, NULL}
 };
-static per_choice_t ReleaseCompleteReason_choice[] = {
+static const per_choice_t ReleaseCompleteReason_choice[] = {
 	{ 0, "noBandwidth", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "gatekeeperResources", ASN1_EXTENSION_ROOT,
@@ -2466,7 +2466,7 @@
 	return offset;
 }
 
-static per_sequence_t connectionParameters_sequence[] = {
+static const per_sequence_t connectionParameters_sequence[] = {
 	{ "connectionType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_ScnConnectionType },
 	{ "numberOfScnConnections", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -2494,7 +2494,7 @@
 	return offset;
 }
 
-static per_sequence_t RasUsageSpecification_when_sequence[] = {
+static const per_sequence_t RasUsageSpecification_when_sequence[] = {
 	{ "start", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_NULL },
 	{ "end", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -2512,7 +2512,7 @@
 
 
 
-static per_sequence_t RasUsageSpecification_callStartingPoint_sequence[] = {
+static const per_sequence_t RasUsageSpecification_callStartingPoint_sequence[] = {
 	{ "alerting", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_NULL },
 	{ "connect", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -2529,7 +2529,7 @@
 
 
 
-static per_sequence_t RasUsageSpecification_sequence[] = {
+static const per_sequence_t RasUsageSpecification_sequence[] = {
 	{ "when", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RasUsageSpecification_when },
 	{ "callStartingPoint", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -2574,7 +2574,7 @@
 
 
 
-static per_sequence_t ipAddress_sequence[] = {
+static const per_sequence_t ipAddress_sequence[] = {
 	{ "ip", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h225_ipAddress_ip },
 	{ "port", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -2595,7 +2595,7 @@
 	{ 1, "loose" },
 	{ 0, NULL}
 };
-static per_choice_t routing_choice[] = {
+static const per_choice_t routing_choice[] = {
 	{ 0, "strict", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "loose", ASN1_EXTENSION_ROOT,
@@ -2619,7 +2619,7 @@
 	return offset;
 }
 
-static per_sequence_t ipSourceRoute_sequence[] = {
+static const per_sequence_t ipSourceRoute_sequence[] = {
 	{ "ip", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_ipAddress_ip },
 	{ "port", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -2664,7 +2664,7 @@
 	return offset;
 }
 
-static per_sequence_t ipxAddress_sequence[] = {
+static const per_sequence_t ipxAddress_sequence[] = {
 	{ "node", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h225_ipxNode },
 	{ "netnum", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -2699,7 +2699,7 @@
 
 
 
-static per_sequence_t ip6Address_sequence[] = {
+static const per_sequence_t ip6Address_sequence[] = {
 	{ "ip", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_ipv6Address_ip },
 	{ "port", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -2751,7 +2751,7 @@
 	{ 6, "nonStandardAddress" },
 	{ 0, NULL}
 };
-static per_choice_t TransportAddress_choice[] = {
+static const per_choice_t TransportAddress_choice[] = {
 	{ 0, "ipAddress", ASN1_EXTENSION_ROOT,
 		dissect_h225_ipAddress },
 	{ 1, "ipSourceRoute", ASN1_EXTENSION_ROOT,
@@ -2809,6 +2809,11 @@
 
 	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_h245Address, ett_h225_TransportAddress, TransportAddress_choice, "h245Address", NULL);
 
+	/* we need this info for TAPing */
+	h225_pi.is_h245 = TRUE;
+	h225_pi.h245_address = ipv4_address;	
+	h225_pi.h245_port = ipv4_port;	
+
 	if((!pinfo->fd->flags.visited) && ipv4_address!=0 && ipv4_port!=0 && h245_handle){
 		address src_addr;
 		conversation_t *conv=NULL;
@@ -2857,7 +2862,7 @@
 }
 
 
-static per_sequence_t TransportChannelInfo_sequence[] = {
+static const per_sequence_t TransportChannelInfo_sequence[] = {
 	{ "sendAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_sendAddress },
 	{ "recvAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -2905,7 +2910,7 @@
 	return offset;
 }
 
-static per_sequence_t CarrierInfo_sequence[] = {
+static const per_sequence_t CarrierInfo_sequence[] = {
 	{ "carrierIdentificationCode", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_carrierIdentificationCode },
 	{ "carrierName", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -2936,7 +2941,7 @@
 	{ 3, "invalidCall" },
 	{ 0, NULL}
 };
-static per_choice_t InfoRequestResponseStatus_choice[] = {
+static const per_choice_t InfoRequestResponseStatus_choice[] = {
 	{ 0, "complete", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "incomplete", ASN1_EXTENSION_ROOT,
@@ -2971,7 +2976,7 @@
 	return offset;
 }
 
-static per_sequence_t CallIdentifier_sequence[] = {
+static const per_sequence_t CallIdentifier_sequence[] = {
 	{ "guid", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_guid },
 	{ NULL, 0, 0, NULL }
@@ -3008,7 +3013,7 @@
 }
 
 
-static per_sequence_t CallLinkage_sequence[] = {
+static const per_sequence_t CallLinkage_sequence[] = {
 	{ "globalCallId", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_globalCallId },
 	{ "threadId", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -3069,7 +3074,7 @@
 	return dissect_h235_HASHEDxxx(tvb, offset, pinfo, tree, hf_h225_token);
 }
 
-static per_sequence_t cryptoEPPwdHash_sequence[] = {
+static const per_sequence_t cryptoEPPwdHash_sequence[] = {
 	{ "alias", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h225_AliasAddress },
 	{ "timeStamp", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -3086,7 +3091,7 @@
 	return offset;
 }
 
-static per_sequence_t cryptoGKPwdHash_sequence[] = {
+static const per_sequence_t cryptoGKPwdHash_sequence[] = {
 	{ "gatekeeperId", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h225_GatekeeperIdentifier },
 	{ "timeStamp", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -3150,7 +3155,7 @@
 	{ 7, "nestedcryptoToken" },
 	{ 0, NULL}
 };
-static per_choice_t CryptoH323Token_choice[] = {
+static const per_choice_t CryptoH323Token_choice[] = {
 	{ 0, "cryptoEPPwdHash", ASN1_EXTENSION_ROOT,
 		dissect_h225_cryptoEPPwdHash },
 	{ 1, "cryptoGKPwdHash", ASN1_EXTENSION_ROOT,
@@ -3200,7 +3205,7 @@
 	return offset;
 }
 
-static per_sequence_t AlternateGK_sequence[] = {
+static const per_sequence_t AlternateGK_sequence[] = {
 	{ "rasAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_rasAddress },
 	{ "gatekeeperIdentifier", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -3232,7 +3237,7 @@
 	return offset;
 }
 
-static per_sequence_t AltGKInfo_sequence[] = {
+static const per_sequence_t AltGKInfo_sequence[] = {
 	{ "alternateGatekeeper", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_alternateGatekeeper },
 	{ "altGKisPermanent", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3259,7 +3264,7 @@
 	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_sctp, ett_h225_sctp, dissect_h225_TransportAddress);
 	return offset;
 }
-static per_sequence_t AlternateTransportAddress_sequence[] = {
+static const per_sequence_t AlternateTransportAddress_sequence[] = {
 	{ "annexE", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_annexE },
 	{ "sctp", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -3353,7 +3358,7 @@
 }
 
 
-static per_sequence_t UUIEsRequested_sequence[] = {
+static const per_sequence_t UUIEsRequested_sequence[] = {
 	{ "setup", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_setup_bool },
 	{ "callProceeding", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3406,7 +3411,7 @@
 }
 
 
-static per_sequence_t Q954Details_sequence[] = {
+static const per_sequence_t Q954Details_sequence[] = {
 	{ "conferenceCalling", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_conferenceCalling },
 	{ "threePartyService", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3471,7 +3476,7 @@
 	return offset;
 }
 
-static per_sequence_t QseriesOptions_sequence[] = {
+static const per_sequence_t QseriesOptions_sequence[] = {
 	{ "q932Full", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_q932Full },
 	{ "q951Full", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3530,7 +3535,7 @@
 	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_associatedSessionIds, ett_h225_associatedSessionIds, dissect_h225_RTPsessionId);
 	return offset;
 }
-static per_sequence_t RTPSession_sequence[] = {
+static const per_sequence_t RTPSession_sequence[] = {
 	{ "rtpAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_rtpAddress },
 	{ "rtcpAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3564,7 +3569,7 @@
 	return offset;
 }
 
-static per_sequence_t StatusUUIE_sequence[] = {
+static const per_sequence_t StatusUUIE_sequence[] = {
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_ProtocolIdentifier },
 	{ "callIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3581,7 +3586,7 @@
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_StatusUUIE, ett_h225_StatusUUIE, StatusUUIE_sequence);
 	return offset;
 }
-static per_sequence_t StatusInquiryUUIE_sequence[] = {
+static const per_sequence_t StatusInquiryUUIE_sequence[] = {
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_ProtocolIdentifier },
 	{ "callIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3598,7 +3603,7 @@
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_StatusInquiryUUIE, ett_h225_StatusInquiryUUIE, StatusInquiryUUIE_sequence);
 	return offset;
 }
-static per_sequence_t SetupAcknowledgeUUIE_sequence[] = {
+static const per_sequence_t SetupAcknowledgeUUIE_sequence[] = {
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_ProtocolIdentifier },
 	{ "callIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3615,7 +3620,7 @@
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_SetupAcknowledgeUUIE, ett_h225_SetupAcknowledgeUUIE, SetupAcknowledgeUUIE_sequence);
 	return offset;
 }
-static per_sequence_t NotifyUUIE_sequence[] = {
+static const per_sequence_t NotifyUUIE_sequence[] = {
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_ProtocolIdentifier },
 	{ "callIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3683,7 +3688,7 @@
 }
 
 
-static per_sequence_t GSMUIM_sequence[] = {
+static const per_sequence_t GSMUIM_sequence[] = {
 	{ "imsi", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_imsi },
 	{ "tmsi", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -3725,7 +3730,7 @@
 	{ 1, "mid" },
 	{ 0, NULL}
 };
-static per_choice_t systemid_choice[] = {
+static const per_choice_t systemid_choice[] = {
 	{ 0, "sid", ASN1_EXTENSION_ROOT,
 		dissect_h225_sid },
 	{ 1, "mid", ASN1_EXTENSION_ROOT,
@@ -3810,7 +3815,7 @@
 	return offset;
 }
 
-static per_sequence_t ANSI41UIM_sequence[] = {
+static const per_sequence_t ANSI41UIM_sequence[] = {
 	{ "imsi", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_imsi },
 	{ "min", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -3850,7 +3855,7 @@
 	{ 1, "gsmuim" },
 	{ 0, NULL}
 };
-static per_choice_t MobileUIM_choice[] = {
+static const per_choice_t MobileUIM_choice[] = {
 	{ 0, "ansi41uim", ASN1_EXTENSION_ROOT,
 		dissect_h225_ANSI41UIM },
 	{ 1, "gsmuim", ASN1_EXTENSION_ROOT,
@@ -3905,7 +3910,7 @@
 }
 
 
-static per_sequence_t e164Number_sequence[] = {
+static const per_sequence_t e164Number_sequence[] = {
 	{ "publicTypeOfNumber", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h225_PublicTypeOfNumber },
 	{ "publicNumberDigits", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -3918,7 +3923,7 @@
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_e164Number, ett_h225_e164Number, e164Number_sequence);
 	return offset;
 }
-static per_sequence_t privateNumber_sequence[] = {
+static const per_sequence_t privateNumber_sequence[] = {
 	{ "privateTypeOfNumber", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h225_PrivateTypeOfNumber },
 	{ "privateNumberDigits", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -3940,7 +3945,7 @@
 	{ 4, "nationalStandardPartyNumber" },
 	{ 0, NULL}
 };
-static per_choice_t PartyNumber_choice[] = {
+static const per_choice_t PartyNumber_choice[] = {
 	{ 0, "e164Number", ASN1_EXTENSION_ROOT,
 		dissect_h225_e164Number },
 	{ 1, "dataPartyNumber", ASN1_EXTENSION_ROOT,
@@ -3985,7 +3990,7 @@
 	offset=dissect_per_IA5String(tvb, offset, pinfo, tree, hf_h225_protocolVariant, 1, 64);
 	return offset;
 }
-static per_sequence_t TunnelledProtocolAlternateIdentifier_sequence[] = {
+static const per_sequence_t TunnelledProtocolAlternateIdentifier_sequence[] = {
 	{ "protocolType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_protocolType },
 	{ "protocolVariant", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4040,7 +4045,7 @@
 	{ 6, "mobileUIM" },
 	{ 0, NULL}
 };
-static per_choice_t AliasAddress_choice[] = {
+static const per_choice_t AliasAddress_choice[] = {
 	{ 0, "dialedDigits", ASN1_EXTENSION_ROOT,
 		dissect_h225_dialedDigits },
 	{ 1, "h323ID", ASN1_EXTENSION_ROOT,
@@ -4094,7 +4099,7 @@
 	return offset;
 }
 
-static per_sequence_t SupportedPrefix_sequence[] = {
+static const per_sequence_t SupportedPrefix_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "prefix", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -4116,7 +4121,7 @@
 }
 
 
-static per_sequence_t H310Caps_sequence[] = {
+static const per_sequence_t H310Caps_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "dataRatesSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4133,7 +4138,7 @@
 }
 
 
-static per_sequence_t H320Caps_sequence[] = {
+static const per_sequence_t H320Caps_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "dataRatesSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4150,7 +4155,7 @@
 }
 
 
-static per_sequence_t H321Caps_sequence[] = {
+static const per_sequence_t H321Caps_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "dataRatesSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4167,7 +4172,7 @@
 }
 
 
-static per_sequence_t H322Caps_sequence[] = {
+static const per_sequence_t H322Caps_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "dataRatesSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4184,7 +4189,7 @@
 }
 
 
-static per_sequence_t H323Caps_sequence[] = {
+static const per_sequence_t H323Caps_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "dataRatesSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4201,7 +4206,7 @@
 }
 
 
-static per_sequence_t H324Caps_sequence[] = {
+static const per_sequence_t H324Caps_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "dataRatesSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4218,7 +4223,7 @@
 }
 
 
-static per_sequence_t VoiceCaps_sequence[] = {
+static const per_sequence_t VoiceCaps_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "dataRatesSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4235,7 +4240,7 @@
 }
 
 
-static per_sequence_t T120OnlyCaps_sequence[] = {
+static const per_sequence_t T120OnlyCaps_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "dataRatesSupported", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4251,7 +4256,7 @@
 	return offset;
 }
 
-static per_sequence_t NonStandardProtocol_sequence[] = {
+static const per_sequence_t NonStandardProtocol_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "dataRatesSupported", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4268,7 +4273,7 @@
 }
 
 
-static per_sequence_t SIPCaps_sequence[] = {
+static const per_sequence_t SIPCaps_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "dataRatesSupported", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4284,7 +4289,7 @@
 	return offset;
 }
 
-static per_sequence_t AddressPattern_range_sequence[] = {
+static const per_sequence_t AddressPattern_range_sequence[] = {
 	{ "startOfRange", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h225_startOfRange },
 	{ "endOfRange", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -4304,7 +4309,7 @@
 	{ 1, "range" },
 	{ 0, NULL}
 };
-static per_choice_t AddressPattern_choice[] = {
+static const per_choice_t AddressPattern_choice[] = {
 	{ 0, "wildcard", ASN1_EXTENSION_ROOT,
 		dissect_h225_wildcard },
 	{ 0, "range", ASN1_EXTENSION_ROOT,
@@ -4317,7 +4322,7 @@
 	offset=dissect_per_choice(tvb, offset, pinfo, tree, hf_h225_AddressPattern, ett_h225_AddressPattern, AddressPattern_choice, "AddressPattern", NULL);
 	return offset;
 }
-static per_sequence_t ConferenceList_sequence[] = {
+static const per_sequence_t ConferenceList_sequence[] = {
 	{ "conferenceID", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_conferenceID },
 	{ "conferenceAlias", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4339,7 +4344,7 @@
 	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_conferences, ett_h225_conferences, dissect_h225_ConferenceList);
 	return offset;
 }
-static per_sequence_t T38FaxAnnexbOnlyCaps_sequence[] = {
+static const per_sequence_t T38FaxAnnexbOnlyCaps_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "dataRatesSupported", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4375,7 +4380,7 @@
 	{ 11, "sip" },
 	{ 0, NULL}
 };
-static per_choice_t SupportedProtocols_choice[] = {
+static const per_choice_t SupportedProtocols_choice[] = {
 	{ 0, "nonStandardData", ASN1_EXTENSION_ROOT,
 		dissect_h225_nonStandardData },
 	{ 1, "h310", ASN1_EXTENSION_ROOT,
@@ -4418,7 +4423,7 @@
 
 
 
-static per_sequence_t GatewayInfo_sequence[] = {
+static const per_sequence_t GatewayInfo_sequence[] = {
 	{ "protocol", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_protocol },
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4431,7 +4436,7 @@
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_GatewayInfo, ett_h225_GatewayInfo, GatewayInfo_sequence);
 	return offset;
 }
-static per_sequence_t McuInfo_sequence[] = {
+static const per_sequence_t McuInfo_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "protocol", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4459,7 +4464,7 @@
 	{ 1, "tunnelledProtocolAlternateID" },
 	{ 0, NULL }
 };
-static per_choice_t TunnelledProtocol_id_choice[] = {
+static const per_choice_t TunnelledProtocol_id_choice[] = {
 	{ 0, "tunnelledProtocolObjectID", ASN1_EXTENSION_ROOT,
 		dissect_h225_tunnelledProtocolObjectID },
 	{ 1, "tunnelledProtocolAlternateID", ASN1_EXTENSION_ROOT,
@@ -4479,7 +4484,7 @@
 	offset=dissect_per_IA5String(tvb, offset, pinfo, tree, hf_h225_TunnelledProtocol_subIdentifier, 1, 64);
 	return offset;
 }
-static per_sequence_t TunnelledProtocol_sequence[] = {
+static const per_sequence_t TunnelledProtocol_sequence[] = {
 	{ "id", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_TunnelledProtocol_id },
 	{ "subIdentifier", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4533,7 +4538,7 @@
 	return offset;
 }
 
-static per_sequence_t CicInfo_sequence[] = {
+static const per_sequence_t CicInfo_sequence[] = {
 	{ "cic", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_CicInfo_cic },
 	{ "pointCode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -4570,7 +4575,7 @@
 	return offset;
 }
 
-static per_sequence_t GroupID_sequence[] = {
+static const per_sequence_t GroupID_sequence[] = {
 	{ "member", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_GroupID_member },
 	{ "group", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -4584,7 +4589,7 @@
 	return offset;
 }
 
-static per_sequence_t CircuitIdentifier_sequence[] = {
+static const per_sequence_t CircuitIdentifier_sequence[] = {
 	{ "cic", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_CicInfo },
 	{ "group", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4638,7 +4643,7 @@
 	{ 2, "nonStandard" },
 	{ 0, NULL}
 };
-static per_choice_t GenericIdentifier_choice[] = {
+static const per_choice_t GenericIdentifier_choice[] = {
 	{ 0, "standard", ASN1_EXTENSION_ROOT,
 		dissect_h225_Generic_standard },
 	{ 1, "oid", ASN1_EXTENSION_ROOT,
@@ -4656,7 +4661,7 @@
 
 static int dissect_h225_Content(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree);
 
-static per_sequence_t EnumeratedParameter_sequence[] = {
+static const per_sequence_t EnumeratedParameter_sequence[] = {
 	{ "id", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_GenericIdentifier },
 	{ "content", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4678,7 +4683,7 @@
 	return offset;
 }
 
-static per_sequence_t GenericData_sequence[] = {
+static const per_sequence_t GenericData_sequence[] = {
 	{ "id", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_GenericIdentifier },
 	{ "parameters", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4800,7 +4805,7 @@
 	{ 11, "nested" },
 	{ 0, NULL}
 };
-static per_choice_t Content_choice[] = {
+static const per_choice_t Content_choice[] = {
 	{ 0, "raw", ASN1_EXTENSION_ROOT,
 		dissect_h225_Content_raw },
 	{ 1, "text", ASN1_EXTENSION_ROOT,
@@ -4863,7 +4868,7 @@
 	return offset;
 }
 
-static per_sequence_t FeatureSet_sequence[] = {
+static const per_sequence_t FeatureSet_sequence[] = {
 	{ "replacementFeatureSet", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_replacementFeatureSet },
 	{ "neededFeatures", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4898,7 +4903,7 @@
 	return offset;
 }
 
-static per_sequence_t CallsAvailable_sequence[] = {
+static const per_sequence_t CallsAvailable_sequence[] = {
 	{ "calls", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_CallsAvailable_calls },
 	{ "group", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -4997,7 +5002,7 @@
 	offset=dissect_per_sequence_of(tvb, offset, pinfo, tree, hf_h225_sipGwCallsAvailable, ett_h225_sipGwCallsAvailable, dissect_h225_CallsAvailable);
 	return offset;
 }
-static per_sequence_t CallCapacityInfo_sequence[] = {
+static const per_sequence_t CallCapacityInfo_sequence[] = {
 	{ "voiceGwCallsAvailable", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_voiceGwCallsAvailable },
 	{ "h310GwCallsAvailable", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -5037,7 +5042,7 @@
 	return offset;
 }
 
-static per_sequence_t CallCapacity_sequence[] = {
+static const per_sequence_t CallCapacity_sequence[] = {
 	{ "maximumCallCapacity", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_maximumCallCapacity },
 	{ "currentCallCapacity", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -5072,7 +5077,7 @@
 	return offset;
 }
 
-static per_sequence_t VendorIdentifier_sequence[] = {
+static const per_sequence_t VendorIdentifier_sequence[] = {
 	{ "vendor", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_h221NonStandard },
 	{ "productId", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -5098,7 +5103,7 @@
 	return offset;
 }
 
-static per_sequence_t CapacityReportingCapability_sequence[] = {
+static const per_sequence_t CapacityReportingCapability_sequence[] = {
 	{ "canReportCallCapacity", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_canReportCallCapacity },
 	{ NULL, 0, 0, NULL }
@@ -5124,7 +5129,7 @@
 	return offset;
 }
 
-static per_sequence_t CallCreditCapability_sequence[] = {
+static const per_sequence_t CallCreditCapability_sequence[] = {
 	{ "canDisplayAmountString", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_canDisplayAmountString },
 	{ "canEnforceDurationLimit", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -5152,7 +5157,7 @@
 	return offset;
 }
 
-static per_sequence_t BandwidthDetails_sequence[] = {
+static const per_sequence_t BandwidthDetails_sequence[] = {
 	{ "sender", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_BandwidthDetails_sender },
 	{ "multicast", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -5182,7 +5187,7 @@
 	{ 1, "releaseCompleteCauseIE" },
 	{ 0, NULL}
 };
-static per_choice_t CallTerminationCause_choice[] = {
+static const per_choice_t CallTerminationCause_choice[] = {
 	{ 0, "releaseCompleteReason", ASN1_EXTENSION_ROOT,
 		dissect_h225_ReleaseCompleteReason },
 	{ 1, "releaseCompleteCauseIE", ASN1_EXTENSION_ROOT,
@@ -5196,7 +5201,7 @@
 	return offset;
 }
 
-static per_sequence_t CircuitInfo_sequence[] = {
+static const per_sequence_t CircuitInfo_sequence[] = {
 	{ "sourceCircuitID", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_sourceCircuitID },
 	{ "destinationCircuitID", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -5223,8 +5228,8 @@
 					   PER dissectors, but the item length
 					   is in octets */
 	offset=dissect_h245_OpenLogicalChannel(tvb, offset, pinfo, tree);
-
 	contains_faststart = TRUE;
+	h225_pi.is_faststart = TRUE;
 
 	return newoffset;
 }
@@ -5243,7 +5248,7 @@
 	return offset;
 }
 
-static per_sequence_t InformationUUIE_sequence[] = {
+static const per_sequence_t InformationUUIE_sequence[] = {
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_ProtocolIdentifier },
 	{ "callIdentifier", ASN1_NOT_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -5299,7 +5304,7 @@
 	{ 21, "unallocatedNumber" },
 	{ 0, NULL}
 };
-static per_choice_t AdmissionRejectReason_choice[] = {
+static const per_choice_t AdmissionRejectReason_choice[] = {
 	{ 0, "calledPartyNotRegistered", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "invalidPermission", ASN1_EXTENSION_ROOT,
@@ -5368,7 +5373,7 @@
 	{ 1, "isoAlgorithm" },
 	{ 0, NULL}
 };
-static per_choice_t EncryptIntAlg_choice[] = {
+static const per_choice_t EncryptIntAlg_choice[] = {
 	{ 0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h225_nonStandard },
 	{ 1, "isoAlgorithm", ASN1_EXTENSION_ROOT,
@@ -5403,7 +5408,7 @@
 	{ 3, "hMAC_iso10118_3" },
 	{ 0, NULL}
 };
-static per_choice_t NonIsoIntegrityMechanism_choice[] = {
+static const per_choice_t NonIsoIntegrityMechanism_choice[] = {
 	{ 0, "hMAC-MD5", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "hMAC_iso10118_2_s", ASN1_EXTENSION_ROOT,
@@ -5435,7 +5440,7 @@
 	{ 3, "nonIsoIM" },
 	{ 0, NULL}
 };
-static per_choice_t IntegrityMechanism_choice[] = {
+static const per_choice_t IntegrityMechanism_choice[] = {
 	{ 0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h225_nonStandard },
 	{ 1, "digSig", ASN1_EXTENSION_ROOT,
@@ -5472,7 +5477,7 @@
 	{15, "unallocatedNumber" },
 	{ 0, NULL}
 };
-static per_choice_t LocationRejectReason_choice[] = {
+static const per_choice_t LocationRejectReason_choice[] = {
 	{ 0, "notRegistered", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "invalidPermission", ASN1_EXTENSION_ROOT,
@@ -5540,7 +5545,7 @@
 }
 
 
-static per_sequence_t EndPointType_sequence[] = {
+static const per_sequence_t EndPointType_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "vendor", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -5607,7 +5612,7 @@
 	offset=dissect_per_boolean(tvb, offset, pinfo, tree, hf_h225_maintainConnection, NULL, NULL);
 	return offset;
 }
-static per_sequence_t CallProceedingUUIE_sequence[] = {
+static const per_sequence_t CallProceedingUUIE_sequence[] = {
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_ProtocolIdentifier },
 	{ "destinationInfo", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -5638,10 +5643,13 @@
 dissect_h225_CallProceedingUUIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_CallProceedingUUIE, ett_h225_CallProceedingUUIE, CallProceedingUUIE_sequence);
+
+	h225_pi.cs_type = H225_CALL_PROCEDING;
+
 	return offset;
 }
 
-static per_sequence_t CapacityReportingSpecification_when_sequence[] = {
+static const per_sequence_t CapacityReportingSpecification_when_sequence[] = {
 	{ "callStart", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_NULL },
 	{ "callEnd", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -5655,7 +5663,7 @@
 	return offset;
 }
 
-static per_sequence_t CapacityReportingSpecification_sequence[] = {
+static const per_sequence_t CapacityReportingSpecification_sequence[] = {
 	{ "when", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_CapacityReportingSpecification_when },
 	{ NULL, 0, 0, NULL }
@@ -5666,7 +5674,7 @@
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_CapacityReportingSpecification, ett_h225_CapacityReportingSpecification, CapacityReportingSpecification_sequence);
 	return offset;
 }
-static per_sequence_t ProgressUUIE_sequence[] = {
+static const per_sequence_t ProgressUUIE_sequence[] = {
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_ProtocolIdentifier },
 	{ "destinationInfo", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -5736,7 +5744,7 @@
 }
 
 
-static per_sequence_t EndPoint_sequence[] = {
+static const per_sequence_t EndPoint_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "aliasAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -5780,7 +5788,7 @@
 	return offset;
 }
 
-static per_sequence_t ICV_sequence[] = {
+static const per_sequence_t ICV_sequence[] = {
 	{ "algorithmOID", ASN1_NO_EXTENSIONS, ASN1_OPTIONAL,
 		dissect_h225_algorithmOID },
 	{ "icv", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -5794,7 +5802,7 @@
 	return offset;
 }
 
-static per_sequence_t BandwidthConfirm_sequence[] = {
+static const per_sequence_t BandwidthConfirm_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "bandWidth", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -5821,7 +5829,7 @@
 }
 
 
-static per_sequence_t UnregistrationConfirm_sequence[] = {
+static const per_sequence_t UnregistrationConfirm_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -5842,7 +5850,7 @@
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_UnregistrationConfirm, ett_h225_UnregistrationConfirm, UnregistrationConfirm_sequence);
 	return offset;
 }
-static per_sequence_t NonStandardMessage_sequence[] = {
+static const per_sequence_t NonStandardMessage_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -5867,7 +5875,7 @@
 }
 
 
-static per_sequence_t InfoRequestAck_sequence[] = {
+static const per_sequence_t InfoRequestAck_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -5886,7 +5894,7 @@
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_InfoRequestAck, ett_h225_InfoRequestAck, InfoRequestAck_sequence);
 	return offset;
 }
-static per_sequence_t InfoRequestNak_sequence[] = {
+static const per_sequence_t InfoRequestNak_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -5910,7 +5918,7 @@
 	return offset;
 }
 
-static per_sequence_t ResourcesAvailableConfirm_sequence[] = {
+static const per_sequence_t ResourcesAvailableConfirm_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -5969,7 +5977,7 @@
 }
 
 
-static per_sequence_t GatekeeperRequest_sequence[] = {
+static const per_sequence_t GatekeeperRequest_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -6015,7 +6023,7 @@
 	return offset;
 }
 
-static per_sequence_t ServiceControlResponse_sequence[] = {
+static const per_sequence_t ServiceControlResponse_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "result", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -6043,7 +6051,7 @@
 
 
 
-static per_sequence_t DisengageReject_sequence[] = {
+static const per_sequence_t DisengageReject_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "rejectReason", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -6071,7 +6079,7 @@
 
 
 
-static per_sequence_t BandwidthReject_sequence[] = {
+static const per_sequence_t BandwidthReject_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "rejectReason", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -6101,7 +6109,7 @@
 
 
 
-static per_sequence_t UnregistrationReject_sequence[] = {
+static const per_sequence_t UnregistrationReject_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "rejectReason", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -6142,7 +6150,7 @@
 	return offset;
 }
 
-static per_sequence_t UnregistrationRequest_sequence[] = {
+static const per_sequence_t UnregistrationRequest_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "callSignalAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -6200,7 +6208,7 @@
 }
 
 
-static per_sequence_t invalidTerminalAliases_sequence[] = {
+static const per_sequence_t invalidTerminalAliases_sequence[] = {
 	{ "terminalAlias", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_terminalAlias },
 	{ "terminalAliasPattern", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -6253,7 +6261,7 @@
 	{ 17, "securityError" },
 	{ 0, NULL}
 };
-static per_choice_t RegistrationRejectReason_choice[] = {
+static const per_choice_t RegistrationRejectReason_choice[] = {
 	{ 0, "discoveryRequired", ASN1_EXTENSION_ROOT,
 		dissect_h225_NULL },
 	{ 1, "invalidRevision", ASN1_EXTENSION_ROOT,
@@ -6307,7 +6315,7 @@
 
 
 
-static per_sequence_t RegistrationReject_sequence[] = {
+static const per_sequence_t RegistrationReject_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -6340,7 +6348,7 @@
 }
 
 
-static per_sequence_t GatekeeperReject_sequence[] = {
+static const per_sequence_t GatekeeperReject_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -6389,7 +6397,7 @@
 	return offset;
 }
 
-static per_sequence_t ResourcesAvailableIndicate_sequence[] = {
+static const per_sequence_t ResourcesAvailableIndicate_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -6449,7 +6457,7 @@
 }
 
 
-static per_sequence_t CallCreditServiceControl_sequence[] = {
+static const per_sequence_t CallCreditServiceControl_sequence[] = {
 	{ "amountString", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_amountString },
 	{ "billingMode", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -6488,7 +6496,7 @@
 	return offset;
 }
 
-static per_sequence_t ExtendedAliasAddress_sequence[] = {
+static const per_sequence_t ExtendedAliasAddress_sequence[] = {
 	{ "address", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_AliasAddress },
 	{ "presentationIndicator", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -6514,7 +6522,7 @@
 	return offset;
 }
 
-static per_sequence_t UnknownMessageResponse_sequence[] = {
+static const per_sequence_t UnknownMessageResponse_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "tokens", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -6625,7 +6633,7 @@
 
 
 
-static per_sequence_t AdmissionRequest_sequence[] = {
+static const per_sequence_t AdmissionRequest_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "callType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -6716,7 +6724,7 @@
 	return offset;
 }
 
-static per_sequence_t InfoRequest_sequence[] = {
+static const per_sequence_t InfoRequest_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "callReferenceValue", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -6766,7 +6774,7 @@
 	return offset;
 }
 
-static per_sequence_t RequestInProgress_sequence[] = {
+static const per_sequence_t RequestInProgress_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -6811,7 +6819,7 @@
 	{ 3, "callCreditServiceControl" },
 	{ 0, NULL}
 };
-static per_choice_t ServiceControlDescriptor_choice[] = {
+static const per_choice_t ServiceControlDescriptor_choice[] = {
 	{ 0, "url", ASN1_EXTENSION_ROOT,
 		dissect_h225_url },
 	{ 1, "signal", ASN1_EXTENSION_ROOT,
@@ -6840,7 +6848,7 @@
 	return offset;
 }
 
-static per_sequence_t ServiceControlSession_sequence[] = {
+static const per_sequence_t ServiceControlSession_sequence[] = {
 	{ "sessionId", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_sessionId },
 	{ "contents", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -6874,7 +6882,7 @@
 }
 
 
-static per_sequence_t AlertingUUIE_sequence[] = {
+static const per_sequence_t AlertingUUIE_sequence[] = {
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_ProtocolIdentifier },
 	{ "destinationInfo", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -6915,6 +6923,9 @@
 dissect_h225_AlertingUUIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_AlertingUUIE, ett_h225_AlertingUUIE, AlertingUUIE_sequence);
+
+	h225_pi.cs_type = H225_ALERTING;
+
 	return offset;
 }
 
@@ -6926,7 +6937,7 @@
 }
 
 
-static per_sequence_t ReleaseCompleteUUIE_sequence[] = {
+static const per_sequence_t ReleaseCompleteUUIE_sequence[] = {
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_ProtocolIdentifier },
 	{ "reason", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -6955,6 +6966,9 @@
 dissect_h225_ReleaseCompleteUUIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ReleaseCompleteUUIE, ett_h225_ReleaseCompleteUUIE, ReleaseCompleteUUIE_sequence);
+
+	h225_pi.cs_type = H225_RELEASE_COMPLET;
+
 	return offset;
 }
 
@@ -6965,7 +6979,7 @@
 	return offset;
 }
 
-static per_sequence_t FacilityUUIE_sequence[] = {
+static const per_sequence_t FacilityUUIE_sequence[] = {
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_ProtocolIdentifier },
 	{ "alternativeAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -7017,7 +7031,7 @@
 	return offset;
 }
 
-static per_sequence_t AdmissionReject_sequence[] = {
+static const per_sequence_t AdmissionReject_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "rejectReason", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7155,7 +7169,7 @@
 
 
 
-static per_sequence_t SetupUUIE_sequence[] = {
+static const per_sequence_t SetupUUIE_sequence[] = {
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_ProtocolIdentifier },
 	{ "h245Address", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -7243,6 +7257,9 @@
 {
 	contains_faststart = FALSE;
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_SetupUUIE, ett_h225_SetupUUIE, SetupUUIE_sequence);
+	
+	h225_pi.cs_type = H225_SETUP;
+
 	return offset;
 }
 
@@ -7254,7 +7271,7 @@
 	return offset;
 }
 
-static per_sequence_t ConnectUUIE_sequence[] = {
+static const per_sequence_t ConnectUUIE_sequence[] = {
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_ProtocolIdentifier },
 	{ "h245Address", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -7299,6 +7316,9 @@
 dissect_h225_ConnectUUIE(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h225_ConnectUUIE, ett_h225_ConnectUUIE, ConnectUUIE_sequence);
+
+	h225_pi.cs_type = H225_CONNECT;
+
 	return offset;
 }
 
@@ -7319,7 +7339,7 @@
 	{ 12, "notify" },
 	{ 0, NULL}
 };
-static per_choice_t h323_message_body_choice[] = {
+static const per_choice_t h323_message_body_choice[] = {
 	{ 0, "setup", ASN1_EXTENSION_ROOT,
 		dissect_h225_SetupUUIE },
 	{ 1, "callProceeding", ASN1_EXTENSION_ROOT,
@@ -7395,7 +7415,7 @@
 }
 
 
-static per_sequence_t LocationConfirm_sequence[] = {
+static const per_sequence_t LocationConfirm_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "callSignalAddress2", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7447,7 +7467,7 @@
 	return offset;
 }
 
-static per_sequence_t LocationReject_sequence[] = {
+static const per_sequence_t LocationReject_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "rejectReason", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7485,7 +7505,7 @@
 	return offset;
 }
 
-static per_sequence_t callSpecific_sequence[] = {
+static const per_sequence_t callSpecific_sequence[] = {
 	{ "callIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_CallIdentifier },
 	{ "conferenceID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7501,7 +7521,7 @@
 	return offset;
 }
 
-static per_sequence_t ServiceControlIndication_sequence[] = {
+static const per_sequence_t ServiceControlIndication_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		 dissect_h225_RequestSeqNum },
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -7568,7 +7588,7 @@
 }
 
 
-static per_sequence_t RasUsageInformation_sequence[] = {
+static const per_sequence_t RasUsageInformation_sequence[] = {
 	{ "nonStandardUsageFields", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_nonStandardUsageFields },
 	{ "alertingTime", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -7603,7 +7623,7 @@
   return dissect_h235_AuthenticationMechanism(tvb, offset, pinfo, tree, hf_h225_authenticationMode);
 }
 
-static per_sequence_t GatekeeperConfirm_sequence[] = {
+static const per_sequence_t GatekeeperConfirm_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7674,7 +7694,7 @@
 }
 
 
-static per_sequence_t RegistrationRequest_sequence[] = {
+static const per_sequence_t RegistrationRequest_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7751,7 +7771,7 @@
 }
 
 
-static per_sequence_t DisengageConfirm_sequence[] = {
+static const per_sequence_t DisengageConfirm_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -7804,7 +7824,7 @@
 	return offset;
 }
 
-static per_sequence_t AdmissionConfirm_sequence[] = {
+static const per_sequence_t AdmissionConfirm_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "bandWidth", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7871,7 +7891,7 @@
 }
 
 
-static per_sequence_t DisengageRequest_sequence[] = {
+static const per_sequence_t DisengageRequest_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "endpointIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7943,7 +7963,7 @@
 	return offset;
 }
 
-static per_sequence_t LocationRequest_sequence[] = {
+static const per_sequence_t LocationRequest_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "endpointIdentifier", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -8002,7 +8022,7 @@
 	return offset;
 }
 
-static per_sequence_t BandwidthRequest_sequence[] = {
+static const per_sequence_t BandwidthRequest_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "endpointIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -8107,7 +8127,7 @@
 }
 
 
-static per_sequence_t tunnelledSignallingMessage_sequence[] = {
+static const per_sequence_t tunnelledSignallingMessage_sequence[] = {
 	{ "tunnelledProtocolID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_TunnelledProtocol },
 	{ "messageContent", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -8179,7 +8199,7 @@
 }
 
 
-static per_sequence_t H323_UU_PDU_sequence[] = {
+static const per_sequence_t H323_UU_PDU_sequence[] = {
 	{ "h323_message_body", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_h323_message_body },
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -8234,7 +8254,7 @@
 	return offset;
 }
 
-static per_sequence_t preGrantedARQ_sequence[] = {
+static const per_sequence_t preGrantedARQ_sequence[] = {
 	{ "makeCall", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_makeCall },
 	{ "useGKCallSignalAddressToMakeCall", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -8262,7 +8282,7 @@
 
 
 
-static per_sequence_t RegistrationConfirm_sequence[] = {
+static const per_sequence_t RegistrationConfirm_sequence[] = {
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_RequestSeqNum },
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -8328,7 +8348,7 @@
 	return offset;
 }
 
-static per_sequence_t pdu_item_sequence[] = {
+static const per_sequence_t pdu_item_sequence[] = {
 	{ "h323pdu", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h225_H323_UU_PDU },
 	{ "sent", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -8395,7 +8415,7 @@
 }
 
 
-static per_sequence_t perCallInfo_item_sequence[] = {
+static const per_sequence_t perCallInfo_item_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "callReferenceValue", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -8472,7 +8492,7 @@
 	return offset;
 }
 
-static per_sequence_t InfoRequestResponse_sequence[] = {
+static const per_sequence_t InfoRequestResponse_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h225_nonStandardData },
 	{ "requestSeqNum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -8532,7 +8552,7 @@
 	return offset;
 }
 
-static per_sequence_t user_data_sequence[] = {
+static const per_sequence_t user_data_sequence[] = {
 	{ "protocol-discriminator", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_protocol_discriminator },
 	{ "user-information", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -8585,7 +8605,7 @@
 	{32, "admissionConfirmSequence" },
 	{ 0, NULL}
 };
-static per_choice_t RasMessage_choice[] = {
+static const per_choice_t RasMessage_choice[] = {
 	{ 0, "gatekeeperRequest", ASN1_EXTENSION_ROOT,
 		dissect_h225_GatekeeperRequest },
 	{ 1, "gatekeeperConfirm", ASN1_EXTENSION_ROOT,
@@ -8691,7 +8711,7 @@
 
 
 
-static per_sequence_t H323_UserInformation_sequence[] = {
+static const per_sequence_t H323_UserInformation_sequence[] = {
 	{ "h323_uu_pdu", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h225_H323_UU_PDU },
 	{ "user_data", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -9007,7 +9027,7 @@
 		{ "callSignaling", "h225.callSignaling", FT_NONE, BASE_NONE,
 		NULL, 0, "callSignaling sequence", HFILL }},
 	{ &hf_h225_carrierName,
-		{ "carrierName", "h225.carrierName", FT_BYTES, BASE_HEX,
+		{ "carrierName", "h225.carrierName", FT_STRING, BASE_HEX,
 		NULL, 0, "carrierName IA5String", HFILL }},
 	{ &hf_h225_carrierIdentificationCode,
 		{ "carrierIdentificationCode", "h225.carrierIdentificationCode", FT_BYTES, BASE_HEX,
@@ -9295,7 +9315,7 @@
 		{ "dialedDigits", "h225.dialedDigits", FT_BYTES, BASE_HEX,
 		NULL, 0, "dialedDigits IA5String", HFILL }},
 	{ &hf_h225_urlId,
-		{ "urlId", "h225.urlId", FT_BYTES, BASE_HEX,
+		{ "urlId", "h225.urlId", FT_STRING, BASE_HEX,
 		NULL, 0, "urlId IA5String", HFILL }},
 	{ &hf_h225_h323ID,
 		{ "h323ID", "h225.h323ID", FT_STRING, BASE_HEX,
@@ -9457,7 +9477,7 @@
 		{ "Content_raw", "h225.Content_raw", FT_BYTES, BASE_HEX,
 		NULL, 0, "Content_raw octet string", HFILL }},
 	{ &hf_h225_Content_text,
-		{ "Content_text", "h225.Content_text", FT_BYTES, BASE_HEX,
+		{ "Content_text", "h225.Content_text", FT_STRING, BASE_HEX,
 		NULL, 0, "Content_text IA5String", HFILL }},
 	{ &hf_h225_Content,
 		{ "Content", "h225.Content", FT_UINT32, BASE_DEC,
@@ -9838,7 +9858,7 @@
 		{ "H248SignalsDescriptor", "h225.H248SignalsDescriptor", FT_BYTES, BASE_HEX,
 		NULL, 0, "H248SignalsDescriptor octet string", HFILL }},
 	{ &hf_h225_url,
-		{ "url", "h225.url", FT_BYTES, BASE_HEX,
+		{ "url", "h225.url", FT_STRING, BASE_HEX,
 		NULL, 0, "url IA5String", HFILL }},
 	{ &hf_h225_ServiceControlDescriptor,
 		{ "ServiceControlDescriptor", "h225.ServiceControlDescriptor", FT_UINT32, BASE_DEC,
@@ -9880,7 +9900,7 @@
 		{ "parallelH245Control", "h225.parallelH245Control", FT_NONE, BASE_NONE,
 		NULL, 0, "parallelH245Control sequence of", HFILL }},
 	{ &hf_h225_language,
-		{ "language", "h225.language", FT_BYTES, BASE_HEX,
+		{ "language", "h225.language", FT_STRING, BASE_HEX,
 		NULL, 0, "language IA5String", HFILL }},
 	{ &hf_h225_languages,
 		{ "languages", "h225.languages", FT_NONE, BASE_NONE,
@@ -10512,8 +10532,9 @@
 	proto_register_subtree_array(ett, array_length(ett));
 	h225_module = prefs_register_protocol(proto_h225, NULL);
 	prefs_register_bool_preference(h225_module, "reassembly",
-		"Reassemble H.225 over TCP",
-		"Whether the dissector should reassemble H.225 PDUs spanning multiple TCP segments",
+		"Reassemble H.225 messages spanning multiple TCP segments",
+		"Whether the H.225 dissector should reassemble messages spanning multiple TCP segments."
+		" To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 		&h225_reassembly);
 	register_dissector("h225", dissect_h225_H323UserInformation, proto_h225);
 
@@ -10548,12 +10569,17 @@
 	}
 
 	pi->msg_type = H225_OTHERS;
+	pi->cs_type = H225_OTHER;
 	pi->msg_tag = -1;
 	pi->reason = -1;
 	pi->requestSeqNum = 0;
 	memset(pi->guid,0,16);
 	pi->is_duplicate = FALSE;
 	pi->request_available = FALSE;
+	pi->is_faststart = FALSE;
+	pi->is_h245 = FALSE;
+	pi->h245_address = 0;
+	pi->h245_port = 0;
 }
 
 /*
diff -urN ethereal-0.10.6/epan/dissectors/packet-h225.h ethereal-0.10.7/epan/dissectors/packet-h225.h
--- ethereal-0.10.6/epan/dissectors/packet-h225.h	2004-08-12 17:42:06.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-h225.h	2004-10-20 17:34:44.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for H.225 packet dissection
  * 2003  Tomas Kukosa
  *
- * $Id: packet-h225.h 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-h225.h 12142 2004-09-29 22:23:37Z etxrab $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,8 +36,18 @@
 	H225_OTHERS
 } h225_msg_type;
 
+typedef enum _h225_cs_type {
+	H225_SETUP,
+	H225_CALL_PROCEDING,
+	H225_ALERTING,
+	H225_CONNECT,
+	H225_RELEASE_COMPLET,
+	H225_OTHER
+} h225_cs_type;
+
 typedef struct _h225_packet_info {
 	h225_msg_type msg_type;		/* ras or cs message */
+	h225_cs_type cs_type;		/* cs message type */
 	gint msg_tag;			/* message tag*/
 	gint reason;			/* reason tag, if available */
 	guint requestSeqNum;		/* request sequence number of ras-message, if available */
@@ -45,6 +55,11 @@
 	gboolean is_duplicate;		/* true, if this is a repeated message */
 	gboolean request_available;	/* true, if response matches to a request */
 	nstime_t delta_time; 		/* this is the RAS response time delay */
+	/* added for h225 conversations analysis */
+	gboolean is_faststart;		/* true, if faststart field is included */
+	gboolean is_h245;
+	guint32 h245_address;
+	guint16 h245_port;
 } h225_packet_info;
 
 /*
diff -urN ethereal-0.10.6/epan/dissectors/packet-h235.c ethereal-0.10.7/epan/dissectors/packet-h235.c
--- ethereal-0.10.6/epan/dissectors/packet-h235.c	2004-08-12 17:42:10.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-h235.c	2004-10-20 17:34:48.000000000 -0500
@@ -1,16 +1,15 @@
 /* Do not modify this file.                                                   */
 /* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-h235.c                                                              */
+/* ./packet-h235.c                                                            */
 /* ../../tools/asn2eth.py -X -p h235 -c h235.cnf -s packet-h235-template H235-SECURITY-MESSAGES.asn */
 
 /* Input file: packet-h235-template.c */
-/* Include files: packet-h235-hf.c, packet-h235-ett.c, packet-h235-fn.c, packet-h235-hfarr.c, packet-h235-ettarr.c, packet-h235-val.h */
 
 /* packet-h235.c
  * Routines for H.235 packet dissection
  * 2004  Tomas Kukosa
  *
- * $Id: packet-h235.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-h235.c 12267 2004-10-11 18:36:51Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -54,11 +53,6 @@
 
 /*--- Included file: packet-h235-hf.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-h235-hf.c                                                           */
-/* ../../tools/asn2eth.py -X -p h235 -c h235.cnf -s packet-h235-template H235-SECURITY-MESSAGES.asn */
-
 static int hf_h235_nonStandardIdentifier = -1;    /* OBJECT_IDENTIFIER */
 static int hf_h235_data = -1;                     /* OCTET_STRING */
 static int hf_h235_halfkey = -1;                  /* BIT_STRING_SIZE_0_2048 */
@@ -133,11 +127,6 @@
 
 /*--- Included file: packet-h235-ett.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-h235-ett.c                                                          */
-/* ../../tools/asn2eth.py -X -p h235 -c h235.cnf -s packet-h235-template H235-SECURITY-MESSAGES.asn */
-
 static gint ett_h235_NonStandardParameter = -1;
 static gint ett_h235_DHset = -1;
 static gint ett_h235_ECpoint = -1;
@@ -171,15 +160,13 @@
 
 /*--- Included file: packet-h235-fn.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-h235-fn.c                                                           */
-/* ../../tools/asn2eth.py -X -p h235 -c h235.cnf -s packet-h235-template H235-SECURITY-MESSAGES.asn */
+/*--- Fields for imported types ---*/
 
 static int dissect_toBeSigned(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
   return dissect_xxx_ToBeSigned(tvb, offset, pinfo, tree, hf_h235_toBeSigned);
 }
 
+
 static int
 dissect_h235_ChallengeString(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
   offset = dissect_per_octet_string(tvb, offset, pinfo, tree, hf_index,
@@ -315,7 +302,7 @@
   return dissect_h235_OCTET_STRING(tvb, offset, pinfo, tree, hf_h235_clearSaltingKey);
 }
 
-static per_sequence_t NonStandardParameter_sequence[] = {
+static const per_sequence_t NonStandardParameter_sequence[] = {
   { "nonStandardIdentifier"       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_nonStandardIdentifier },
   { "data"                        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_data },
   { NULL, 0, 0, NULL }
@@ -350,7 +337,7 @@
   return dissect_h235_BIT_STRING_SIZE_0_2048(tvb, offset, pinfo, tree, hf_h235_generator);
 }
 
-static per_sequence_t DHset_sequence[] = {
+static const per_sequence_t DHset_sequence[] = {
   { "halfkey"                     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_halfkey },
   { "modSize"                     , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_modSize },
   { "generator"                   , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_generator },
@@ -395,7 +382,7 @@
   return dissect_h235_BIT_STRING_SIZE_0_511(tvb, offset, pinfo, tree, hf_h235_fieldSize);
 }
 
-static per_sequence_t ECpoint_sequence[] = {
+static const per_sequence_t ECpoint_sequence[] = {
   { "x"                           , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_x },
   { "y"                           , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_y },
   { NULL, 0, 0, NULL }
@@ -415,7 +402,7 @@
   return dissect_h235_ECpoint(tvb, offset, pinfo, tree, hf_h235_base);
 }
 
-static per_sequence_t T_eckasdhp_sequence[] = {
+static const per_sequence_t T_eckasdhp_sequence[] = {
   { "public-key"                  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_public_key },
   { "modulus"                     , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_modulus },
   { "base"                        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_base },
@@ -435,7 +422,7 @@
   return dissect_h235_T_eckasdhp(tvb, offset, pinfo, tree, hf_h235_eckasdhp);
 }
 
-static per_sequence_t T_eckasdh2_sequence[] = {
+static const per_sequence_t T_eckasdh2_sequence[] = {
   { "public-key"                  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_public_key },
   { "fieldSize"                   , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_fieldSize },
   { "base"                        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_base },
@@ -462,7 +449,7 @@
   { 0, NULL }
 };
 
-static per_choice_t ECKASDH_choice[] = {
+static const per_choice_t ECKASDH_choice[] = {
   {   0, "eckasdhp"                    , ASN1_EXTENSION_ROOT    , dissect_eckasdhp },
   {   1, "eckasdh2"                    , ASN1_EXTENSION_ROOT    , dissect_eckasdh2 },
   { 0, NULL, 0, NULL }
@@ -480,7 +467,7 @@
   return dissect_h235_ECKASDH(tvb, offset, pinfo, tree, hf_h235_eckasdhkey);
 }
 
-static per_sequence_t TypedCertificate_sequence[] = {
+static const per_sequence_t TypedCertificate_sequence[] = {
   { "type"                        , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_type },
   { "certificate"                 , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_certificatedata },
   { NULL, 0, 0, NULL }
@@ -539,7 +526,7 @@
   { 0, NULL }
 };
 
-static per_choice_t AuthenticationBES_choice[] = {
+static const per_choice_t AuthenticationBES_choice[] = {
   {   0, "default"                     , ASN1_EXTENSION_ROOT    , dissect_default },
   {   1, "radius"                      , ASN1_EXTENSION_ROOT    , dissect_radius },
   { 0, NULL, 0, NULL }
@@ -570,7 +557,7 @@
   { 0, NULL }
 };
 
-static per_choice_t AuthenticationMechanism_choice[] = {
+static const per_choice_t AuthenticationMechanism_choice[] = {
   {   0, "dhExch"                      , ASN1_EXTENSION_ROOT    , dissect_dhExch },
   {   1, "pwdSymEnc"                   , ASN1_EXTENSION_ROOT    , dissect_pwdSymEnc },
   {   2, "pwdHash"                     , ASN1_EXTENSION_ROOT    , dissect_pwdHash },
@@ -630,7 +617,7 @@
   return dissect_h235_IV16(tvb, offset, pinfo, tree, hf_h235_iv16);
 }
 
-static per_sequence_t Params_sequence[] = {
+static const per_sequence_t Params_sequence[] = {
   { "ranInt"                      , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_ranInt },
   { "iv8"                         , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_iv8 },
   { "iv16"                        , ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL    , dissect_iv16 },
@@ -653,7 +640,7 @@
   return dissect_h235_Params(tvb, offset, pinfo, tree, hf_h235_paramSsalt);
 }
 
-static per_sequence_t ENCRYPTEDxxx_sequence[] = {
+static const per_sequence_t ENCRYPTEDxxx_sequence[] = {
   { "algorithmOID"                , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_algorithmOID },
   { "paramS"                      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_paramS },
   { "encryptedData"               , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_encryptedData },
@@ -693,7 +680,7 @@
   return dissect_h235_BIT_STRING(tvb, offset, pinfo, tree, hf_h235_hash);
 }
 
-static per_sequence_t SIGNEDxxx_sequence[] = {
+static const per_sequence_t SIGNEDxxx_sequence[] = {
   { "toBeSigned"                  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_toBeSigned },
   { "algorithmOID"                , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_algorithmOID },
   { "paramS"                      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_paramS },
@@ -716,7 +703,7 @@
   return dissect_h235_SIGNEDxxx(tvb, offset, pinfo, tree, hf_h235_certProtectedKey);
 }
 
-static per_sequence_t V3KeySyncMaterial_sequence[] = {
+static const per_sequence_t V3KeySyncMaterial_sequence[] = {
   { "generalID"                   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_generalID },
   { "algorithmOID"                , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_algorithmOID },
   { "paramS"                      , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_paramS },
@@ -748,7 +735,7 @@
   { 0, NULL }
 };
 
-static per_choice_t H235Key_choice[] = {
+static const per_choice_t H235Key_choice[] = {
   {   0, "secureChannel"               , ASN1_EXTENSION_ROOT    , dissect_secureChannel },
   {   1, "sharedSecret"                , ASN1_EXTENSION_ROOT    , dissect_sharedSecret },
   {   2, "certProtectedKey"            , ASN1_EXTENSION_ROOT    , dissect_certProtectedKey },
@@ -768,7 +755,7 @@
   return dissect_h235_H235Key(tvb, offset, pinfo, tree, hf_h235_h235Key);
 }
 
-static per_sequence_t ClearToken_sequence[] = {
+static const per_sequence_t ClearToken_sequence[] = {
   { "tokenOID"                    , ASN1_EXTENSION_ROOT    , ASN1_NOT_OPTIONAL, dissect_tokenOID },
   { "timeStamp"                   , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_timeStamp },
   { "password"                    , ASN1_EXTENSION_ROOT    , ASN1_OPTIONAL    , dissect_password },
@@ -796,7 +783,7 @@
   return dissect_h235_ClearToken(tvb, offset, pinfo, tree, hf_h235_hashedVals);
 }
 
-static per_sequence_t HASHEDxxx_sequence[] = {
+static const per_sequence_t HASHEDxxx_sequence[] = {
   { "algorithmOID"                , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_algorithmOID },
   { "paramS"                      , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_paramS },
   { "hash"                        , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_hash },
@@ -815,7 +802,7 @@
   return dissect_h235_HASHEDxxx(tvb, offset, pinfo, tree, hf_h235_hashedToken);
 }
 
-static per_sequence_t T_cryptoEncryptedToken_sequence[] = {
+static const per_sequence_t T_cryptoEncryptedToken_sequence[] = {
   { "tokenOID"                    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tokenOID },
   { "token"                       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_encryptedToken },
   { NULL, 0, 0, NULL }
@@ -832,7 +819,7 @@
   return dissect_h235_T_cryptoEncryptedToken(tvb, offset, pinfo, tree, hf_h235_cryptoEncryptedToken);
 }
 
-static per_sequence_t T_cryptoSignedToken_sequence[] = {
+static const per_sequence_t T_cryptoSignedToken_sequence[] = {
   { "tokenOID"                    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tokenOID },
   { "token"                       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_signedToken },
   { NULL, 0, 0, NULL }
@@ -849,7 +836,7 @@
   return dissect_h235_T_cryptoSignedToken(tvb, offset, pinfo, tree, hf_h235_cryptoSignedToken);
 }
 
-static per_sequence_t T_cryptoHashedToken_sequence[] = {
+static const per_sequence_t T_cryptoHashedToken_sequence[] = {
   { "tokenOID"                    , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_tokenOID },
   { "hashedVals"                  , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_hashedVals },
   { "token"                       , ASN1_NO_EXTENSIONS     , ASN1_NOT_OPTIONAL, dissect_hashedToken },
@@ -876,7 +863,7 @@
   { 0, NULL }
 };
 
-static per_choice_t CryptoToken_choice[] = {
+static const per_choice_t CryptoToken_choice[] = {
   {   0, "cryptoEncryptedToken"        , ASN1_EXTENSION_ROOT    , dissect_cryptoEncryptedToken },
   {   1, "cryptoSignedToken"           , ASN1_EXTENSION_ROOT    , dissect_cryptoSignedToken },
   {   2, "cryptoHashedToken"           , ASN1_EXTENSION_ROOT    , dissect_cryptoHashedToken },
@@ -907,11 +894,6 @@
 
 /*--- Included file: packet-h235-hfarr.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-h235-hfarr.c                                                        */
-/* ../../tools/asn2eth.py -X -p h235 -c h235.cnf -s packet-h235-template H235-SECURITY-MESSAGES.asn */
-
     { &hf_h235_nonStandardIdentifier,
       { "nonStandardIdentifier", "h235.nonStandardIdentifier",
         FT_STRING, BASE_NONE, NULL, 0,
@@ -1186,11 +1168,6 @@
 
 /*--- Included file: packet-h235-ettarr.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-h235-ettarr.c                                                       */
-/* ../../tools/asn2eth.py -X -p h235 -c h235.cnf -s packet-h235-template H235-SECURITY-MESSAGES.asn */
-
     &ett_h235_NonStandardParameter,
     &ett_h235_DHset,
     &ett_h235_ECpoint,
diff -urN ethereal-0.10.6/epan/dissectors/packet-h235.h ethereal-0.10.7/epan/dissectors/packet-h235.h
--- ethereal-0.10.6/epan/dissectors/packet-h235.h	2004-08-12 17:42:10.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-h235.h	2004-10-20 17:34:48.000000000 -0500
@@ -1,16 +1,15 @@
 /* Do not modify this file.                                                   */
 /* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-h235.h                                                              */
+/* ./packet-h235.h                                                            */
 /* ../../tools/asn2eth.py -X -p h235 -c h235.cnf -s packet-h235-template H235-SECURITY-MESSAGES.asn */
 
 /* Input file: packet-h235-template.h */
-/* Include files: packet-h235-exp.h, packet-h235-valexp.h */
 
 /* packet-h235.h
  * Routines for H.235 packet dissection
  * 2004  Tomas Kukosa
  *
- * $Id: packet-h235.h 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-h235.h 12267 2004-10-11 18:36:51Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -37,11 +36,6 @@
 
 /*--- Included file: packet-h235-exp.h ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-h235-exp.h                                                          */
-/* ../../tools/asn2eth.py -X -p h235 -c h235.cnf -s packet-h235-template H235-SECURITY-MESSAGES.asn */
-
 extern const value_string AuthenticationMechanism_vals[];
 extern const value_string CryptoToken_vals[];
 int dissect_h235_TimeStamp(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
diff -urN ethereal-0.10.6/epan/dissectors/packet-h245.c ethereal-0.10.7/epan/dissectors/packet-h245.c
--- ethereal-0.10.6/epan/dissectors/packet-h245.c	2004-08-12 17:42:20.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-h245.c	2004-10-20 17:34:51.000000000 -0500
@@ -6,7 +6,7 @@
  *
  * Maintained by Andreas Sikkema (h323@ramdyne.nl)
  *
- * $Id: packet-h245.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-h245.c 12255 2004-10-11 06:51:19Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -38,10 +38,12 @@
 #include <stdio.h>
 #include <string.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
+#include "tap.h"
+#include "packet-h245.h"
 #include "packet-tpkt.h"
 #include "packet-per.h"
-#include "t35.h"
+#include <epan/t35.h>
 #include "packet-rtp.h"
 #include "packet-rtcp.h"
 
@@ -51,6 +53,10 @@
 static dissector_handle_t h245_handle;
 static dissector_handle_t MultimediaSystemControlMessage_handle;
 
+static void reset_h245_packet_info(h245_packet_info *pi);
+static int h245_tap = -1;
+static h245_packet_info h245_pi;
+
 static int proto_h245 = -1;		/* h245 over tpkt */
 static int hf_h245_rfc_number = -1;
 static int hf_h245_pdu_type = -1;
@@ -1502,7 +1508,7 @@
 	{  1, "slave" },
 	{  0, NULL }
 };
-static per_choice_t MasterSlaveDeterminationAck_decision_choice[] = {
+static const per_choice_t MasterSlaveDeterminationAck_decision_choice[] = {
 	{  0, "master", ASN1_NO_EXTENSIONS,
 		dissect_h245_NULL },
 	{  1, "slave", ASN1_NO_EXTENSIONS,
@@ -1519,7 +1525,7 @@
 
 
 
-static per_sequence_t MasterSlaveDeterminationAck_sequence[] = {
+static const per_sequence_t MasterSlaveDeterminationAck_sequence[] = {
 	{ "decision", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_MasterSlaveDeterminationAck_decision },
 	{ NULL, 0, 0, NULL }
@@ -1529,6 +1535,8 @@
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h245_MasterSlaveDeterminationAck, ett_h245_MasterSlaveDeterminationAck, MasterSlaveDeterminationAck_sequence);
 
+	h245_pi.msg_type = H245_MastSlvDetAck;
+
 	return offset;
 }
 
@@ -1537,7 +1545,7 @@
 	{  0, "identicalNumbers" },
 	{  0, NULL }
 };
-static per_choice_t MasterSlaveDeterminationReject_cause_choice[] = {
+static const per_choice_t MasterSlaveDeterminationReject_cause_choice[] = {
 	{  0, "identicalNumbers", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  0, NULL, 0, NULL }
@@ -1552,7 +1560,7 @@
 
 
 
-static per_sequence_t MasterSlaveDeterminationReject_sequence[] = {
+static const per_sequence_t MasterSlaveDeterminationReject_sequence[] = {
 	{ "cause", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_MasterSlaveDeterminationReject_cause },
 	{ NULL, 0, 0, NULL }
@@ -1562,6 +1570,8 @@
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h245_MasterSlaveDeterminationReject, ett_h245_MasterSlaveDeterminationReject, MasterSlaveDeterminationReject_sequence);
 
+	h245_pi.msg_type = H245_MastSlvDetRjc;
+
 	return offset;
 }
 
@@ -1572,7 +1582,7 @@
 	{  1, "controlledLoad" },
 	{  0, NULL }
 };
-static per_choice_t QOSMode_choice[] = {
+static const per_choice_t QOSMode_choice[] = {
 	{  0, "guaranteedQOS", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "controlledLoad", ASN1_EXTENSION_ROOT,
@@ -1597,7 +1607,7 @@
 	{  4, "ackAndNackMessage" },
 	{  0, NULL }
 };
-static per_choice_t RefPictureSelection_videoBackChannelSend_choice[] = {
+static const per_choice_t RefPictureSelection_videoBackChannelSend_choice[] = {
 	{  0, "none", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "ackMessageOnly", ASN1_EXTENSION_ROOT,
@@ -1625,7 +1635,7 @@
 	{  1, "transferredTCF" },
 	{  0, NULL }
 };
-static per_choice_t T38FaxRateManagement_choice[] = {
+static const per_choice_t T38FaxRateManagement_choice[] = {
 	{  0, "localTCF", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "transferredTCF", ASN1_EXTENSION_ROOT,
@@ -1647,7 +1657,7 @@
 	{  1, "t38UDPRedundancy" },
 	{  0, NULL }
 };
-static per_choice_t T38FaxUdpOptions_t38FaxUdpEC_choice[] = {
+static const per_choice_t T38FaxUdpOptions_t38FaxUdpEC_choice[] = {
 	{  0, "t38UDPFEC", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "t38UDPRedundancy", ASN1_EXTENSION_ROOT,
@@ -1669,7 +1679,7 @@
 	{  1, "multicast" },
 	{  0, NULL }
 };
-static per_choice_t NetworkAccessParameters_distribution_choice[] = {
+static const per_choice_t NetworkAccessParameters_distribution_choice[] = {
 	{  0, "unicast", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "multicast", ASN1_EXTENSION_ROOT,
@@ -1692,7 +1702,7 @@
 	{  2, "issueQuery" },
 	{  0, NULL }
 };
-static per_choice_t NetworkAccessParameters_t120SetupProcedure_choice[] = {
+static const per_choice_t NetworkAccessParameters_t120SetupProcedure_choice[] = {
 	{  0, "originateCall", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "waitForCall", ASN1_EXTENSION_ROOT,
@@ -1716,7 +1726,7 @@
 	{  1, "unframed" },
 	{  0, NULL }
 };
-static per_choice_t H223AL1MParameters_transferMode_choice[] = {
+static const per_choice_t H223AL1MParameters_transferMode_choice[] = {
 	{  0, "framed", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "unframed", ASN1_EXTENSION_ROOT,
@@ -1738,7 +1748,7 @@
 	{  1, "golay24-12" },
 	{  0, NULL }
 };
-static per_choice_t H223AL1MParameters_headerFEC_choice[] = {
+static const per_choice_t H223AL1MParameters_headerFEC_choice[] = {
 	{  0, "sebch16-7", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "golay24-12", ASN1_EXTENSION_ROOT,
@@ -1766,7 +1776,7 @@
 	{  7, "crcNotUsed" },
 	{  0, NULL }
 };
-static per_choice_t H223AL1MParameters_crcLength_choice[] = {
+static const per_choice_t H223AL1MParameters_crcLength_choice[] = {
 	{  0, "crc4bit", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "crc12bit", ASN1_EXTENSION_ROOT,
@@ -1800,7 +1810,7 @@
 	{  1, "golay24-12" },
 	{  0, NULL }
 };
-static per_choice_t H223AL2MParameters_headerFEC_choice[] = {
+static const per_choice_t H223AL2MParameters_headerFEC_choice[] = {
 	{  0, "sebch16-5", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "golay24-12", ASN1_EXTENSION_ROOT,
@@ -1823,7 +1833,7 @@
 	{  1, "golay24-12" },
 	{  0, NULL }
 };
-static per_choice_t H223AL3MParameters_headerFormat_choice[] = {
+static const per_choice_t H223AL3MParameters_headerFormat_choice[] = {
 	{  0, "sebch16-7", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "golay24-12", ASN1_EXTENSION_ROOT,
@@ -1852,7 +1862,7 @@
 	{  7, "crcNotUsed" },
 	{  0, NULL }
 };
-static per_choice_t H223AL3MParameters_crcLength_choice[] = {
+static const per_choice_t H223AL3MParameters_crcLength_choice[] = {
 	{  0, "crc4bit", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "crc12bit", ASN1_EXTENSION_ROOT,
@@ -1888,7 +1898,7 @@
 	{  2, "suspendResumewoAddress" },
 	{  0, NULL }
 };
-static per_choice_t V76LogicalChannelParameters_suspendResume_choice[] = {
+static const per_choice_t V76LogicalChannelParameters_suspendResume_choice[] = {
 	{  0, "noSuspendResume", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "suspendResumewAddress", ASN1_EXTENSION_ROOT,
@@ -1914,7 +1924,7 @@
 	{  2, "mSREJ" },
 	{  0, NULL }
 };
-static per_choice_t V76LogicalChannelParameters_mode_eRM_recovery_choice[] = {
+static const per_choice_t V76LogicalChannelParameters_mode_eRM_recovery_choice[] = {
 	{  0, "rej", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "sREJ", ASN1_EXTENSION_ROOT,
@@ -1940,7 +1950,7 @@
 	{  2, "crc32bit" },
 	{  0, NULL }
 };
-static per_choice_t CRCLength_choice[] = {
+static const per_choice_t CRCLength_choice[] = {
 	{  0, "crc8bit", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "crc16bit", ASN1_EXTENSION_ROOT,
@@ -1965,7 +1975,7 @@
 	{  1, "loose" },
 	{  0, NULL }
 };
-static per_choice_t UnicastAddress_iPSourceRouteAddress_routing_choice[] = {
+static const per_choice_t UnicastAddress_iPSourceRouteAddress_routing_choice[] = {
 	{  0, "strict", ASN1_NO_EXTENSIONS,
 			dissect_h245_NULL },
 	{  1, "loose", ASN1_NO_EXTENSIONS,
@@ -2000,7 +2010,7 @@
 	{ 13, "replacementForRejected" },
 	{  0, NULL }
 };
-static per_choice_t OpenLogicalChannelReject_cause_choice[] = {
+static const per_choice_t OpenLogicalChannelReject_cause_choice[] = {
 	{  0, "unspecified", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "unsuitableReverseParameters", ASN1_EXTENSION_ROOT,
@@ -2046,7 +2056,7 @@
 	{  1, "lcse" },
 	{  0, NULL }
 };
-static per_choice_t CloseLogicalChannel_source_choice[] = {
+static const per_choice_t CloseLogicalChannel_source_choice[] = {
 	{  0, "user", ASN1_NO_EXTENSIONS,
 			dissect_h245_NULL },
 	{  1, "lcse", ASN1_NO_EXTENSIONS,
@@ -2068,7 +2078,7 @@
 	{  2, "reservationFailure" },
 	{  0, NULL }
 };
-static per_choice_t CloseLogicalChannel_reason_choice[] = {
+static const per_choice_t CloseLogicalChannel_reason_choice[] = {
 	{  0, "unknown", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "reopen", ASN1_EXTENSION_ROOT,
@@ -2094,7 +2104,7 @@
 	{  3, "reservationFailure" },
 	{  0, NULL }
 };
-static per_choice_t RequestChannelClose_reason_choice[] = {
+static const per_choice_t RequestChannelClose_reason_choice[] = {
 	{  0, "unknown", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "normal", ASN1_EXTENSION_ROOT,
@@ -2119,7 +2129,7 @@
 	{  0, "unspecified" },
 	{  0, NULL }
 };
-static per_choice_t RequestChannelCloseReject_cause_choice[] = {
+static const per_choice_t RequestChannelCloseReject_cause_choice[] = {
 	{  0, "unspecified", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  0, NULL, 0, NULL }
@@ -2140,7 +2150,7 @@
 	{  1, "descriptorTooComplex" },
 	{  0, NULL }
 };
-static per_choice_t MultiplexEntryRejectionDescriptions_cause_choice[] = {
+static const per_choice_t MultiplexEntryRejectionDescriptions_cause_choice[] = {
 	{  0, "unspecifiedCause", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "descriptorTooComplex", ASN1_EXTENSION_ROOT,
@@ -2161,7 +2171,7 @@
 	{  0, "unspecifiedCause" },
 	{  0, NULL }
 };
-static per_choice_t RequestMultiplexEntryRejectionDescriptions_cause_choice[] = {
+static const per_choice_t RequestMultiplexEntryRejectionDescriptions_cause_choice[] = {
 	{  0, "unspecifiedCause", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  0, NULL, 0, NULL }
@@ -2182,7 +2192,7 @@
 	{  2, "requestDenied" },
 	{  0, NULL }
 };
-static per_choice_t RequestModeReject_cause_choice[] = {
+static const per_choice_t RequestModeReject_cause_choice[] = {
 	{  0, "modeUnavailable", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "multipointConstraint", ASN1_EXTENSION_ROOT,
@@ -2207,7 +2217,7 @@
 	{  1, "suspendResumewoAddress" },
 	{  0, NULL }
 };
-static per_choice_t V76ModeParameters_choice[] = {
+static const per_choice_t V76ModeParameters_choice[] = {
 	{  0, "suspendResumewAddress", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "suspendResumewoAddress", ASN1_EXTENSION_ROOT,
@@ -2238,7 +2248,7 @@
 	{ 10, "profileAndLevel-HPatHL" },
 	{  0, NULL }
 };
-static per_choice_t H262VideoMode_profileAndLevel_choice[] = {
+static const per_choice_t H262VideoMode_profileAndLevel_choice[] = {
 	{  0, "profileAndLevel-SPatML", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "profileAndLevel-MPatLL", ASN1_EXTENSION_ROOT,
@@ -2283,7 +2293,7 @@
 	{  5, "custom" },
 	{  0, NULL }
 };
-static per_choice_t H263VideoMode_resolution_choice[] = {
+static const per_choice_t H263VideoMode_resolution_choice[] = {
 	{  0, "sqcif", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "qcif", ASN1_EXTENSION_ROOT,
@@ -2314,7 +2324,7 @@
 	{  3, "silenceSuppressionHighRate" },
 	{  0, NULL }
 };
-static per_choice_t AudioMode_g7231_choice[] = {
+static const per_choice_t AudioMode_g7231_choice[] = {
 	{  0, "noSilenceSuppressionLowRate", ASN1_NO_EXTENSIONS,
 			dissect_h245_NULL },
 	{  1, "noSilenceSuppressionHighRate", ASN1_NO_EXTENSIONS,
@@ -2341,7 +2351,7 @@
 	{  2, "audioLayer3" },
 	{  0, NULL }
 };
-static per_choice_t IS11172AudioMode_audioLayer_choice[] = {
+static const per_choice_t IS11172AudioMode_audioLayer_choice[] = {
 	{  0, "audioLayer1", ASN1_NO_EXTENSIONS,
 			dissect_h245_NULL },
 	{  1, "audioLayer2", ASN1_NO_EXTENSIONS,
@@ -2366,7 +2376,7 @@
 	{  2, "audioSampling48k" },
 	{  0, NULL }
 };
-static per_choice_t IS11172AudioMode_audioSampling_choice[] = {
+static const per_choice_t IS11172AudioMode_audioSampling_choice[] = {
 	{  0, "audioSampling32k", ASN1_NO_EXTENSIONS,
 			dissect_h245_NULL },
 	{  1, "audioSampling44k1", ASN1_NO_EXTENSIONS,
@@ -2391,7 +2401,7 @@
 	{  2, "twoChannelDual" },
 	{  0, NULL }
 };
-static per_choice_t IS11172AudioMode_multichannelType_choice[] = {
+static const per_choice_t IS11172AudioMode_multichannelType_choice[] = {
 	{  0, "singleChannel", ASN1_NO_EXTENSIONS,
 			dissect_h245_NULL },
 	{  1, "twoChannelStereo", ASN1_NO_EXTENSIONS,
@@ -2417,7 +2427,7 @@
 	{  2, "audioLayer3" },
 	{  0, NULL }
 };
-static per_choice_t IS13818AudioMode_audioLayer_choice[] = {
+static const per_choice_t IS13818AudioMode_audioLayer_choice[] = {
 	{  0, "audioLayer1", ASN1_NO_EXTENSIONS,
 			dissect_h245_NULL },
 	{  1, "audioLayer2", ASN1_NO_EXTENSIONS,
@@ -2446,7 +2456,7 @@
 	{  5, "audioSampling48k" },
 	{  0, NULL }
 };
-static per_choice_t IS13818AudioMode_audioSampling_choice[] = {
+static const per_choice_t IS13818AudioMode_audioSampling_choice[] = {
 	{  0, "audioSampling16k", ASN1_NO_EXTENSIONS,
 			dissect_h245_NULL },
 	{  1, "audioSampling22k05", ASN1_NO_EXTENSIONS,
@@ -2485,7 +2495,7 @@
 	{  9, "fiveChannels3-2" },
 	{  0, NULL }
 };
-static per_choice_t IS13818AudioMode_multiChannelType_choice[] = {
+static const per_choice_t IS13818AudioMode_multiChannelType_choice[] = {
 	{  0, "singleChannel", ASN1_NO_EXTENSIONS,
 			dissect_h245_NULL },
 	{  1, "twoChannelStereo", ASN1_NO_EXTENSIONS,
@@ -2523,7 +2533,7 @@
 	{  0, "canNotPerformLoop" },
 	{  0, NULL }
 };
-static per_choice_t MaintenanceLoopReject_cause_choice[] = {
+static const per_choice_t MaintenanceLoopReject_cause_choice[] = {
 	{  0, "canNotPerformLoop", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  0, NULL, 0, NULL }
@@ -2544,7 +2554,7 @@
 	{  1, "deniedChairToken" },
 	{  0, NULL }
 };
-static per_choice_t ConferenceResponse_makeMeChairResponse_choice[] = {
+static const per_choice_t ConferenceResponse_makeMeChairResponse_choice[] = {
 	{  0, "grantedChairToken", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "deniedChairToken", ASN1_EXTENSION_ROOT,
@@ -2567,7 +2577,7 @@
 	{  1, "deniedBroadcastMyLogicalChannel" },
 	{  0, NULL }
 };
-static per_choice_t ConferenceResponse_broadcastMyLogicalChannelResponse_choice[] = {
+static const per_choice_t ConferenceResponse_broadcastMyLogicalChannelResponse_choice[] = {
 	{  0, "grantedBroadcastMyLogicalChannel", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "deniedBroadcastMyLogicalChannel", ASN1_EXTENSION_ROOT,
@@ -2589,7 +2599,7 @@
 	{  1, "deniedMakeTerminalBroadcaster" },
 	{  0, NULL }
 };
-static per_choice_t ConferenceResponse_makeTerminalBroadcasterResponse_choice[] = {
+static const per_choice_t ConferenceResponse_makeTerminalBroadcasterResponse_choice[] = {
 	{  0, "grantedMakeTerminalBroadcaster", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "deniedMakeTerminalBroadcaster", ASN1_EXTENSION_ROOT,
@@ -2612,7 +2622,7 @@
 	{  1, "deniedSendThisSource" },
 	{  0, NULL }
 };
-static per_choice_t ConferenceResponse_sendThisSourceResponse_choice[] = {
+static const per_choice_t ConferenceResponse_sendThisSourceResponse_choice[] = {
 	{  0, "grantedSendThisSource", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "deniedSendThisSource", ASN1_EXTENSION_ROOT,
@@ -2635,7 +2645,7 @@
 	{  2, "deActivate" },
 	{  0, NULL }
 };
-static per_choice_t RemoteMCRequest_choice[] = {
+static const per_choice_t RemoteMCRequest_choice[] = {
 	{  0, "masterActivate", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "slaveActivate", ASN1_EXTENSION_ROOT,
@@ -2660,7 +2670,7 @@
 	{  1, "functionNotSupported" },
 	{  0, NULL }
 };
-static per_choice_t RemoteMCResponse_reject_choice[] = {
+static const per_choice_t RemoteMCResponse_reject_choice[] = {
 	{  0, "unspecified", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "functionNotSupported", ASN1_EXTENSION_ROOT,
@@ -2683,7 +2693,7 @@
 	{  1, "reject" },
 	{  0, NULL }
 };
-static per_choice_t RemoteMCResponse_choice[] = {
+static const per_choice_t RemoteMCResponse_choice[] = {
 	{  0, "accept", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "reject", ASN1_EXTENSION_ROOT,
@@ -2706,7 +2716,7 @@
 	{  1, "userRejected" },
 	{  0, NULL }
 };
-static per_choice_t MultilinkResponse_addConnection_responseCode_rejected_choice[] = {
+static const per_choice_t MultilinkResponse_addConnection_responseCode_rejected_choice[] = {
 	{  0, "connectionNotAvailable", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "userRejected", ASN1_EXTENSION_ROOT,
@@ -2728,7 +2738,7 @@
 	{  1, "rejected" },
 	{  0, NULL }
 };
-static per_choice_t MultilinkResponse_addConnection_responseCode_choice[] = {
+static const per_choice_t MultilinkResponse_addConnection_responseCode_choice[] = {
 	{  0, "accepted", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "rejected", ASN1_EXTENSION_ROOT,
@@ -2750,7 +2760,7 @@
 	{  1, "insufficientResources" },
 	{  0, NULL }
 };
-static per_choice_t LogicalChannelRateRejectReason_choice[] = {
+static const per_choice_t LogicalChannelRateRejectReason_choice[] = {
 	{  0, "undefinedReason", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "insufficientResources", ASN1_EXTENSION_ROOT,
@@ -2776,7 +2786,7 @@
 	{  4, "v34H324" },
 	{  0, NULL }
 };
-static per_choice_t EndSessionCommand_gstnOptions_choice[] = {
+static const per_choice_t EndSessionCommand_gstnOptions_choice[] = {
 	{  0, "telephonyMode", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "v8bis", ASN1_EXTENSION_ROOT,
@@ -2806,7 +2816,7 @@
 	{  2, "terminalOnHold" },
 	{  0, NULL }
 };
-static per_choice_t EndSessionCommand_isdnOptions_choice[] = {
+static const per_choice_t EndSessionCommand_isdnOptions_choice[] = {
 	{  0, "telephonyMode", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "v140", ASN1_EXTENSION_ROOT,
@@ -2833,7 +2843,7 @@
 	{  3, "doContinousIndependentProgressions" },
 	{  0, NULL }
 };
-static per_choice_t MiscellaneousCommand_type_progressiveRefinementStart_repeatCount_choice[] = {
+static const per_choice_t MiscellaneousCommand_type_progressiveRefinementStart_repeatCount_choice[] = {
 	{  0, "doOneProgression", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "doContinousProgressions", ASN1_EXTENSION_ROOT,
@@ -2854,7 +2864,7 @@
 
 
 
-static per_sequence_t MiscellaneousCommand_type_progressiveRefinementStart_sequence[] = {
+static const per_sequence_t MiscellaneousCommand_type_progressiveRefinementStart_sequence[] = {
 	{ "repeatCount", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_MiscellaneousCommand_type_progressiveRefinementStart_repeatCount },
 	{ NULL, 0, 0, NULL }
@@ -2877,7 +2887,7 @@
 	{  3, "toLevel2WithOptionalHeader" },
 	{  0, NULL }
 };
-static per_choice_t H223MultiplexReconfiguration_h223ModeChange_choice[] = {
+static const per_choice_t H223MultiplexReconfiguration_h223ModeChange_choice[] = {
 	{  0, "toLevel0", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "toLevel1", ASN1_EXTENSION_ROOT,
@@ -2904,7 +2914,7 @@
 	{  1, "stop" },
 	{  0, NULL }
 };
-static per_choice_t H223MultiplexReconfiguration_h223AnnexADoubleFlag_choice[] = {
+static const per_choice_t H223MultiplexReconfiguration_h223AnnexADoubleFlag_choice[] = {
 	{  0, "start", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "stop", ASN1_EXTENSION_ROOT,
@@ -2927,7 +2937,7 @@
 	{  1, "h223AnnexADoubleFlag" },
 	{  0, NULL }
 };
-static per_choice_t H223MultiplexReconfiguration_choice[] = {
+static const per_choice_t H223MultiplexReconfiguration_choice[] = {
 	{  0, "h233ModeChange", ASN1_EXTENSION_ROOT,
 			dissect_h245_H223MultiplexReconfiguration_h223ModeChange },
 	{  1, "h223AnnexADoubleFlag", ASN1_EXTENSION_ROOT,
@@ -2951,7 +2961,7 @@
 	{  2, "adaptiveClockRecovery" },
 	{  0, NULL }
 };
-static per_choice_t NewATMVCCommand_aal_aal1_clockRecovery_choice[] = {
+static const per_choice_t NewATMVCCommand_aal_aal1_clockRecovery_choice[] = {
 	{  0, "nullClockRecovery", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "srtsClockRecovery", ASN1_EXTENSION_ROOT,
@@ -2979,7 +2989,7 @@
 	{  3, "errorCorrectionOnly" },
 	{  0, NULL }
 };
-static per_choice_t NewATMVCCommand_aal_aal1_errorCorrection_choice[] = {
+static const per_choice_t NewATMVCCommand_aal_aal1_errorCorrection_choice[] = {
 	{  0, "nullErrorCorrection", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "longInterleaver", ASN1_EXTENSION_ROOT,
@@ -3007,7 +3017,7 @@
 	{  2, "programStream" },
 	{  0, NULL }
 };
-static per_choice_t NewATMVCCommand_multiplex_choice[] = {
+static const per_choice_t NewATMVCCommand_multiplex_choice[] = {
 	{  0, "noMultiplex", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "transportStream", ASN1_EXTENSION_ROOT,
@@ -3033,7 +3043,7 @@
 	{  2, "programStream" },
 	{  0, NULL }
 };
-static per_choice_t NewATMVCCommand_reverseParameters_multiplex_choice[] = {
+static const per_choice_t NewATMVCCommand_reverseParameters_multiplex_choice[] = {
 	{  0, "noMultiplex", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "transportStream", ASN1_EXTENSION_ROOT,
@@ -3057,7 +3067,7 @@
 	{  1, "reconfiguration" },
 	{  0, NULL }
 };
-static per_choice_t MobileMultilinkReconfigurationCommand_status_choice[] = {
+static const per_choice_t MobileMultilinkReconfigurationCommand_status_choice[] = {
 	{  0, "synchronized", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "reconfiguration", ASN1_EXTENSION_ROOT,
@@ -3081,7 +3091,7 @@
 	{  2, "unknownFunction" },
 	{  0, NULL }
 };
-static per_choice_t FunctionNotSupported_cause_choice[] = {
+static const per_choice_t FunctionNotSupported_cause_choice[] = {
 	{  0, "syntaxError", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "semanticError", ASN1_EXTENSION_ROOT,
@@ -3107,7 +3117,7 @@
 	{  2, "adaptiveClockRecovery" },
 	{  0, NULL }
 };
-static per_choice_t NewATMVCIndication_aal_aal1_clockRecovery_choice[] = {
+static const per_choice_t NewATMVCIndication_aal_aal1_clockRecovery_choice[] = {
 	{  0, "nullClockRecovery", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "srtsClockRecovery", ASN1_EXTENSION_ROOT,
@@ -3133,7 +3143,7 @@
 	{  3, "errorCorrectionOnly" },
 	{  0, NULL }
 };
-static per_choice_t NewATMVCIndication_aal_aal1_errorCorrection_choice[] = {
+static const per_choice_t NewATMVCIndication_aal_aal1_errorCorrection_choice[] = {
 	{  0, "nullErrorCorrection", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "longInterleaver", ASN1_EXTENSION_ROOT,
@@ -3161,7 +3171,7 @@
 	{  2, "programStream" },
 	{  0, NULL }
 };
-static per_choice_t NewATMVCIndication_multiplex_choice[] = {
+static const per_choice_t NewATMVCIndication_multiplex_choice[] = {
 	{  0, "noMultiplex", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "transportStream", ASN1_EXTENSION_ROOT,
@@ -3187,7 +3197,7 @@
 	{  2, "programStream" },
 	{  0, NULL }
 };
-static per_choice_t NewATMVCIndication_reverseParameters_multiplex_choice[] = {
+static const per_choice_t NewATMVCIndication_reverseParameters_multiplex_choice[] = {
 	{  0, "noMultiplex", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "transportStream", ASN1_EXTENSION_ROOT,
@@ -3243,7 +3253,7 @@
 	{  2, "logicalChannelLoop" },
 	{  0, NULL }
 };
-static per_choice_t MaintenanceLoopRequest_type_choice[] = {
+static const per_choice_t MaintenanceLoopRequest_type_choice[] = {
 	{  0, "systemLoop", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "mediaLoop", ASN1_EXTENSION_ROOT,
@@ -3269,7 +3279,7 @@
 	{  2, "logicalChannelLoop" },
 	{  0, NULL }
 };
-static per_choice_t MaintenanceLoopAck_type_choice[] = {
+static const per_choice_t MaintenanceLoopAck_type_choice[] = {
 	{  0, "systemLoop", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "mediaLoop", ASN1_EXTENSION_ROOT,
@@ -3295,7 +3305,7 @@
 	{  2, "logicalChannelLoop" },
 	{  0, NULL }
 };
-static per_choice_t MaintenanceLoopReject_type_choice[] = {
+static const per_choice_t MaintenanceLoopReject_type_choice[] = {
 	{  0, "systemLoop", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "mediaLoop", ASN1_EXTENSION_ROOT,
@@ -3315,7 +3325,7 @@
 
 
 
-static per_sequence_t OpenLogicalChannelReject_sequence[] = {
+static const per_sequence_t OpenLogicalChannelReject_sequence[] = {
 	{ "forwardLogicalChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_LogicalChannelNumber },
 	{ "cause", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3327,13 +3337,15 @@
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h245_OpenLogicalChannelReject, ett_h245_OpenLogicalChannelReject, OpenLogicalChannelReject_sequence);
 
+	h245_pi.msg_type = H245_OpenLogChnRjc;
+
 	return offset;
 }
 
 
 
 
-static per_sequence_t CloseLogicalChannel_sequence[] = {
+static const per_sequence_t CloseLogicalChannel_sequence[] = {
 	{ "forwardLogicalChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_LogicalChannelNumber },
 	{ "source", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3347,13 +3359,15 @@
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h245_CloseLogicalChannel, ett_h245_CloseLogicalChannel, CloseLogicalChannel_sequence);
 
+	h245_pi.msg_type = H245_CloseLogChn;
+
 	return offset;
 }
 
 
 
 
-static per_sequence_t CloseLogicalChannelAck_sequence[] = {
+static const per_sequence_t CloseLogicalChannelAck_sequence[] = {
 	{ "forwardLogicalChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_LogicalChannelNumber },
 	{ NULL, 0, 0, NULL }
@@ -3363,13 +3377,15 @@
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h245_CloseLogicalChannelAck, ett_h245_CloseLogicalChannelAck, CloseLogicalChannelAck_sequence);
 
+	h245_pi.msg_type = H245_CloseLogChnAck;
+
 	return offset;
 }
 
 
 
 
-static per_sequence_t RequestChannelCloseAck_sequence[] = {
+static const per_sequence_t RequestChannelCloseAck_sequence[] = {
 	{ "forwardLogiclChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_LogicalChannelNumber },
 	{ NULL, 0, 0, NULL }
@@ -3385,7 +3401,7 @@
 
 
 
-static per_sequence_t RequestChannelCloseReject_sequence[] = {
+static const per_sequence_t RequestChannelCloseReject_sequence[] = {
 	{ "forwardLogicalChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_LogicalChannelNumber },
 	{ "cause", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3403,7 +3419,7 @@
 
 
 
-static per_sequence_t RequestChannelCloseRelease_sequence[] = {
+static const per_sequence_t RequestChannelCloseRelease_sequence[] = {
 	{ "forwardLogicalChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_LogicalChannelNumber },
 	{ NULL, 0, 0, NULL }
@@ -3420,7 +3436,7 @@
 
 
 
-static per_sequence_t MultiplexedStreamModeParameters_sequence[] = {
+static const per_sequence_t MultiplexedStreamModeParameters_sequence[] = {
 	{ "logicalChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_LogicalChannelNumber },
 	{ NULL, 0, 0, NULL }
@@ -3436,7 +3452,7 @@
 
 
 
-static per_sequence_t MaintenanceLoopRequest_sequence[] = {
+static const per_sequence_t MaintenanceLoopRequest_sequence[] = {
 	{ "type", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_MaintenanceLoopRequest_type },
 	{ NULL, 0, 0, NULL }
@@ -3452,7 +3468,7 @@
 
 
 
-static per_sequence_t MaintenanceLoopAck_sequence[] = {
+static const per_sequence_t MaintenanceLoopAck_sequence[] = {
 	{ "type", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_MaintenanceLoopAck_type },
 	{ NULL, 0, 0, NULL }
@@ -3467,7 +3483,7 @@
 
 
 
-static per_sequence_t MaintenanceLoopReject_sequence[] = {
+static const per_sequence_t MaintenanceLoopReject_sequence[] = {
 	{ "type", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 			dissect_h245_MaintenanceLoopReject_type },
 	{ "cause", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3484,7 +3500,7 @@
 
 
 
-static per_sequence_t UserInputIndication_signalUpdate_rtp_sequence[] = {
+static const per_sequence_t UserInputIndication_signalUpdate_rtp_sequence[] = {
 	{ "logicalChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 			dissect_h245_LogicalChannelNumber },
 	{ NULL, 0, 0, NULL }
@@ -3499,7 +3515,7 @@
 
 
 
-static per_sequence_t OpenLogicalChannelConfirm_sequence[] = {
+static const per_sequence_t OpenLogicalChannelConfirm_sequence[] = {
 	{ "forwardLogicalChannelNumber",	ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 			dissect_h245_LogicalChannelNumber },
 	{ NULL, 0, 0, NULL }
@@ -3509,12 +3525,14 @@
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h245_OpenLogicalChannelConfirm, ett_h245_OpenLogicalChannelConfirm, OpenLogicalChannelConfirm_sequence);
 
+	h245_pi.msg_type = H245_OpenLogChnCnf;
+
 	return offset;
 }
 
 
 
-static per_sequence_t TerminalCapabilitySetAck_sequence[] = {
+static const per_sequence_t TerminalCapabilitySetAck_sequence[] = {
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_SequenceNumber },
 	{ NULL, 0, 0, NULL }
@@ -3524,12 +3542,14 @@
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h245_TerminalCapabilitySetAck, ett_h245_TerminalCapabilitySetAck, TerminalCapabilitySetAck_sequence);
 
+	h245_pi.msg_type = H245_TermCapSetAck;
+
 	return offset;
 }
 
 
 
-static per_sequence_t RequestModeReject_sequence[] = {
+static const per_sequence_t RequestModeReject_sequence[] = {
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_SequenceNumber },
 	{ "cause", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3547,7 +3567,7 @@
 
 
 
-static per_sequence_t RoundTripDelayRequest_sequence[] = {
+static const per_sequence_t RoundTripDelayRequest_sequence[] = {
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_SequenceNumber },
 	{ NULL, 0, 0, NULL }
@@ -3563,7 +3583,7 @@
 
 
 
-static per_sequence_t RoundTripDelayResponse_sequence[] = {
+static const per_sequence_t RoundTripDelayResponse_sequence[] = {
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_SequenceNumber },
 	{ NULL, 0, 0, NULL }
@@ -3578,7 +3598,7 @@
 
 
 
-static per_sequence_t MultilinkResponse_addConnection_sequence[] = {
+static const per_sequence_t MultilinkResponse_addConnection_sequence[] = {
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_SequenceNumber },
 	{ "responseCode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3740,7 +3760,7 @@
 
 
 
-static per_sequence_t VCCapability_aal1_sequence[] = {
+static const per_sequence_t VCCapability_aal1_sequence[] = {
 	{ "nullClockRecovery", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_nullClockRecovery },
 	{ "srtsClockRecovery", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3773,7 +3793,7 @@
 
 
 
-static per_sequence_t NewATMVCCommand_aal_aal1_sequence[] = {
+static const per_sequence_t NewATMVCCommand_aal_aal1_sequence[] = {
 	{ "clockRecovery", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_NewATMVCCommand_aal_aal1_clockRecovery },
 	{ "errorCorrection", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -3794,7 +3814,7 @@
 
 
 
-static per_sequence_t NewATMVCIndication_aal_aal1_sequence[] = {
+static const per_sequence_t NewATMVCIndication_aal_aal1_sequence[] = {
 	{ "clockRecovery", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_NewATMVCIndication_aal_aal1_clockRecovery },
 	{ "errorCorrection", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -4103,7 +4123,7 @@
 
 
 
-static per_sequence_t H223Capability_mobileOperationTransmitCapability_sequence[] = {
+static const per_sequence_t H223Capability_mobileOperationTransmitCapability_sequence[] = {
 	{ "modeChangeCapability", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_modeChangeCapability },
 	{ "h223AnnexA", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -4285,7 +4305,7 @@
 
 
 
-static per_sequence_t H223AL2MParameters_sequence[] = {
+static const per_sequence_t H223AL2MParameters_sequence[] = {
 	{ "headerFEC", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_H223AL2MParameters_headerFEC },
 	{ "alpduInterleaving", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -4514,7 +4534,7 @@
 
 
 
-static per_sequence_t V75Capability_sequence[] = {
+static const per_sequence_t V75Capability_sequence[] = {
 	{ "audioHeader", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_audioHeader },
 	{ NULL, 0, 0, NULL }
@@ -4562,7 +4582,7 @@
 
 
 
-static per_sequence_t H2250Capability_mcCapability_sequence[] = {
+static const per_sequence_t H2250Capability_mcCapability_sequence[] = {
 	{ "centralizedConferenceMC", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_centralizedConferenceMC },
 	{ "decentralizedConferenceMC", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -4740,7 +4760,7 @@
 
 
 
-static per_sequence_t MediaTransportType_AtmAAL5Compressed_sequence[] = {
+static const per_sequence_t MediaTransportType_AtmAAL5Compressed_sequence[] = {
 	{ "variable-delta", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_variableDelta },
 	{ NULL, 0, 0, NULL }
@@ -4764,7 +4784,7 @@
 	{  4, "atm-AAL5-compressed" },
 	{  0, NULL }
 };
-static per_choice_t MediaTransportType_choice[] = {
+static const per_choice_t MediaTransportType_choice[] = {
 	{  0, "ip-UDP", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "ip-TCP", ASN1_EXTENSION_ROOT,
@@ -4787,7 +4807,7 @@
 
 
 
-static per_sequence_t MediaChannelCapability_sequence[] = {
+static const per_sequence_t MediaChannelCapability_sequence[] = {
 	{ "mediaTransport", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_MediaTransportType },
 	{ NULL, 0, 0, NULL }
@@ -5821,7 +5841,7 @@
 
 
 
-static per_sequence_t H263Version3Options_sequence[] = {
+static const per_sequence_t H263Version3Options_sequence[] = {
 	{ "dataPartitionedSlices", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_dataPartitionedSlices },
 	{ "fixedPointIDCTO", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -5852,7 +5872,7 @@
 
 
 
-static per_sequence_t H263ModeComboFlags_sequence[] = {
+static const per_sequence_t H263ModeComboFlags_sequence[] = {
 	{ "unrestrictedVector", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_unrestrictedVector },
 	{ "arithmeticCoding", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -6714,7 +6734,7 @@
 
 
 
-static per_sequence_t T84Profile_t84Restricted_sequence[] = {
+static const per_sequence_t T84Profile_t84Restricted_sequence[] = {
 	{ "qcif", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_qcif_bool },
 	{ "cif", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -6771,7 +6791,7 @@
 	{  1, "t84Restricted" },
 	{  0, NULL }
 };
-static per_choice_t T84Profile_choice[] = {
+static const per_choice_t T84Profile_choice[] = {
 	{  0, "t84Unrestricted", ASN1_NO_EXTENSIONS,
 			dissect_h245_NULL },
 	{  1, "t84Restricted", ASN1_NO_EXTENSIONS,
@@ -6852,7 +6872,7 @@
 
 
 
-static per_sequence_t T38FaxTcpOptions_sequence[] = {
+static const per_sequence_t T38FaxTcpOptions_sequence[] = {
 	{ "t38TCPBidirectionalMode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_t38TCPBidirectionalMode },
 	{ NULL, 0, 0, NULL }
@@ -6981,7 +7001,7 @@
 
 
 
-static per_sequence_t FECCapability_rfc2733_separateStream_sequence[] = {
+static const per_sequence_t FECCapability_rfc2733_separateStream_sequence[] = {
 	{ "separatePort", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_separatePort },
 	{ "samePort", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -6998,7 +7018,7 @@
 
 
 
-static per_sequence_t FECCapability_rfc2733_sequence[] = {
+static const per_sequence_t FECCapability_rfc2733_sequence[] = {
 	{ "redundancyEncoding", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_redundancyEncoding_bool },
 	{ "separateStream", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7020,7 +7040,7 @@
 	{  0, "rfc2733" },
 	{  0, NULL }
 };
-static per_choice_t FECCapability_choice[] = {
+static const per_choice_t FECCapability_choice[] = {
 	{  0, "rfc2733", ASN1_EXTENSION_ROOT,
 		dissect_h245_FECCapability_rfc2733 },
 	{  0, NULL, 0, NULL }
@@ -7067,7 +7087,7 @@
 
 
 
-static per_sequence_t V75Parameters_sequence[] = {
+static const per_sequence_t V75Parameters_sequence[] = {
 	{ "audioHeaderPresent", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_audioHeaderPresent },
 	{ NULL, 0, 0, NULL }
@@ -7264,7 +7284,7 @@
 
 
 
-static per_sequence_t KeyProtectionMethod_sequence[] = {
+static const per_sequence_t KeyProtectionMethod_sequence[] = {
 	{ "secureChannel", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_secureChannel },
 	{ "sharedSecret", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7283,7 +7303,7 @@
 
 
 
-static per_sequence_t EncryptionUpdateRequest_sequence[] = {
+static const per_sequence_t EncryptionUpdateRequest_sequence[] = {
 	{ "keyProtectionMethod", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_KeyProtectionMethod },
 	{ NULL, 0, 0, NULL }
@@ -7356,7 +7376,7 @@
 
 
 
-static per_sequence_t IS11172AudioCapability_sequence[] = {
+static const per_sequence_t IS11172AudioCapability_sequence[] = {
 	{ "audioLayer1", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_audioLayer1 },
 	{ "audioLayer2", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7387,7 +7407,7 @@
 
 
 
-static per_sequence_t IS11172AudioMode_sequence[] = {
+static const per_sequence_t IS11172AudioMode_sequence[] = {
 	{ "audioLayer", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_IS11172AudioMode_audioLayer },
 	{ "audioSampling", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7408,7 +7428,7 @@
 
 
 
-static per_sequence_t IS13818AudioMode_sequence[] = {
+static const per_sequence_t IS13818AudioMode_sequence[] = {
 	{ "audioLayer", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 			dissect_h245_IS13818AudioMode_audioLayer },
 	{ "audioSampling", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7434,7 +7454,7 @@
 
 
 
-static per_sequence_t IS13818AudioCapability_sequence[] = {
+static const per_sequence_t IS13818AudioCapability_sequence[] = {
 	{ "audioLayer1", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_audioLayer1 },
 	{ "audioLayer2", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7503,7 +7523,7 @@
 
 
 
-static per_sequence_t NewATMVCIndication_reverseParameters_sequence[] = {
+static const per_sequence_t NewATMVCIndication_reverseParameters_sequence[] = {
 	{ "bitRate", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_ATM_BitRate },
 	{ "bitRateLockedToPCRClock", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7524,7 +7544,7 @@
 
 
 
-static per_sequence_t NewATMVCCommand_reverseParameters_sequence[] = {
+static const per_sequence_t NewATMVCCommand_reverseParameters_sequence[] = {
 	{ "bitRate", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_ATM_BitRate },
 	{ "bitRateLockedToPCRClock", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7579,7 +7599,7 @@
 
 /* dissect_h245_h221NonStandard is used for H.245 */
 
-static per_sequence_t h221NonStandard_sequence[] = {
+static const per_sequence_t h221NonStandard_sequence[] = {
 	{ "t35CountryCode", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h245_t35CountryCode },
 	{ "t35Extension", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -7626,7 +7646,7 @@
 
 
 
-static per_sequence_t MasterSlaveDetermination_sequence[] = {
+static const per_sequence_t MasterSlaveDetermination_sequence[] = {
 	{ "terminalType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_terminalType },
 	{ "statusDeterminationNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7638,6 +7658,8 @@
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h245_MasterSlaveDetermination, ett_h245_MasterSlaveDetermination, MasterSlaveDetermination_sequence);
 
+	h245_pi.msg_type = H245_MastSlvDet;
+
 	return offset;
 }
 
@@ -7661,7 +7683,7 @@
 	{  1, "noneProcessed" },
 	{  0, NULL }
 };
-static per_choice_t TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded_choice[] = {
+static const per_choice_t TerminalCapabilitySetReject_cause_tableEntryCapacityExceeded_choice[] = {
 	{  0, "highestEntryNumberProcessed", ASN1_NO_EXTENSIONS,
 			dissect_h245_CapabilityTableEntryNumber },
 	{  1, "noneProcessed", ASN1_NO_EXTENSIONS,
@@ -7687,7 +7709,7 @@
 	{  3, "tableEntryCapacityExceeded" },
 	{  0, NULL }
 };
-static per_choice_t TerminalCapabilitySetReject_cause_choice[] = {
+static const per_choice_t TerminalCapabilitySetReject_cause_choice[] = {
 	{  0, "unspecified", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "undefinedTableEntryUsed", ASN1_EXTENSION_ROOT,
@@ -7708,7 +7730,7 @@
 
 
 
-static per_sequence_t TerminalCapabilitySetReject_sequence[] = {
+static const per_sequence_t TerminalCapabilitySetReject_sequence[] = {
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 			dissect_h245_SequenceNumber },
 	{ "cause", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7720,6 +7742,8 @@
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h245_TerminalCapabilitySetReject, ett_h245_TerminalCapabilitySetReject, TerminalCapabilitySetReject_sequence);
 
+	h245_pi.msg_type = H245_TermCapSetRjc;
+
 	return offset;
 }
 
@@ -7753,7 +7777,7 @@
 
 
 
-static per_sequence_t Capability_h233EncryptionReceiveCapability_sequence[] = {
+static const per_sequence_t Capability_h233EncryptionReceiveCapability_sequence[] = {
 	{ "h233IVResponseTime", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 			dissect_h245_h233IVResponseTime },
 	{ NULL, 0, 0, NULL }
@@ -7824,7 +7848,7 @@
 
 
 
-static per_sequence_t VCCapability_aal5_sequence[] = {
+static const per_sequence_t VCCapability_aal5_sequence[] = {
 	{ "forwardMaximumSDUSize", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_forwardMaximumSDUSize },
 	{ "backwardMaximumSDUSize", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7841,7 +7865,7 @@
 
 
 
-static per_sequence_t NewATMVCCommand_aal_aal5_sequence[] = {
+static const per_sequence_t NewATMVCCommand_aal_aal5_sequence[] = {
 	{ "forwardMaximumSDUSize", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_forwardMaximumSDUSize},
 	{ "backwardMaximumSDUSize", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7865,7 +7889,7 @@
 	{  1, "aal5" },
 	{  0, NULL }
 };
-static per_choice_t NewATMVCCommand_aal_choice[] = {
+static const per_choice_t NewATMVCCommand_aal_choice[] = {
 	{  0, "aal1", ASN1_EXTENSION_ROOT,
 		dissect_h245_NewATMVCCommand_aal_aal1 },
 	{  1, "aal5", ASN1_EXTENSION_ROOT,
@@ -7883,7 +7907,7 @@
 
 
 
-static per_sequence_t NewATMVCIndication_aal_aal5_sequence[] = {
+static const per_sequence_t NewATMVCIndication_aal_aal5_sequence[] = {
 	{ "forwardMaximumSDUSize", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_forwardMaximumSDUSize },
 	{ "backwardMaximumSDUSize", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -7906,7 +7930,7 @@
 	{  1, "aal5" },
 	{  0, NULL }
 };
-static per_choice_t NewATMVCIndication_aal_choice[] = {
+static const per_choice_t NewATMVCIndication_aal_choice[] = {
 	{  0, "aal1", ASN1_EXTENSION_ROOT,
 		dissect_h245_NewATMVCIndication_aal_aal1 },
 	{  1, "aal5", ASN1_EXTENSION_ROOT,
@@ -7963,7 +7987,7 @@
 
 
 
-static per_sequence_t VCCapability_availableBitRates_rangeOfBitRates_sequence[] = {
+static const per_sequence_t VCCapability_availableBitRates_rangeOfBitRates_sequence[] = {
 	{ "lowerBitRate", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 			dissect_h245_lowerBitRate },
 	{ "higherBitRate", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -7986,7 +8010,7 @@
 	{  1, "rangeOfBitRates" },
 	{  0, NULL }
 };
-static per_choice_t VCCapability_availableBitRates_type_choice[] = {
+static const per_choice_t VCCapability_availableBitRates_type_choice[] = {
 	{  0, "singleBitRate", ASN1_NO_EXTENSIONS,
 			dissect_h245_singleBitRate },
 	{  1, "rangeOfBitRates", ASN1_NO_EXTENSIONS,
@@ -8077,7 +8101,7 @@
 
 
 
-static per_sequence_t H223Capability_h223MultiplexTableCapability_enhanced_sequence[] = {
+static const per_sequence_t H223Capability_h223MultiplexTableCapability_enhanced_sequence[] = {
 	{ "maximumNestingDepth", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 			dissect_h245_maximumNestingDepth },
 	{ "maximumElementListSize", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -8102,7 +8126,7 @@
 	{  1, "enhanced" },
 	{  0, NULL }
 };
-static per_choice_t H223Capability_h223MultiplexTableCapability_choice[] = {
+static const per_choice_t H223Capability_h223MultiplexTableCapability_choice[] = {
 	{  0, "basic", ASN1_NO_EXTENSIONS,
 			dissect_h245_NULL },
 	{  1, "enhanced", ASN1_NO_EXTENSIONS,
@@ -8159,7 +8183,7 @@
 
 
 
-static per_sequence_t H223Capability_mobileMultilinkFrameCapability_sequence[] = {
+static const per_sequence_t H223Capability_mobileMultilinkFrameCapability_sequence[] = {
 	{ "maximumSampleSize", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 			dissect_h245_maximumSampleSize },
 	{ "maximumPayloadLength", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -8217,7 +8241,7 @@
 
 
 
-static per_sequence_t H223AnnexCCapability_sequence[] = {
+static const per_sequence_t H223AnnexCCapability_sequence[] = {
 	{ "videoWithAL1M", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_videoWithAL1M },
 	{ "videoWithAL2M", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -8271,7 +8295,7 @@
 }
 
 
-static per_sequence_t H223Capability_sequence[] = {
+static const per_sequence_t H223Capability_sequence[] = {
 	{ "transportWithIframes", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_transportWithIframes },
 	{ "videoWithAL1", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -8364,7 +8388,7 @@
 
 
 
-static per_sequence_t V76Capability_sequence[] = {
+static const per_sequence_t V76Capability_sequence[] = {
 	{ "suspendResumeCapabilitywAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_suspendResumeCapabilitywAddress },
 	{ "suspendResumeCapabilitywoAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -8484,7 +8508,7 @@
 
 
 
-static per_sequence_t RSVPParameters_sequence[] = {
+static const per_sequence_t RSVPParameters_sequence[] = {
 	{ "qosMode", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 			dissect_h245_QOSMode },
 	{ "tokenRate", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -8522,7 +8546,7 @@
 
 
 
-static per_sequence_t ATMParameters_sequence[] = {
+static const per_sequence_t ATMParameters_sequence[] = {
 	{ "maxNTUSize", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_maxNTUSize },
 	{ "atmUBR", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -8664,7 +8688,7 @@
 
 
 
-static per_sequence_t H261VideoCapability_sequence[] = {
+static const per_sequence_t H261VideoCapability_sequence[] = {
 	{ "qcifMPI", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_qcifMPI_1_4 },
 	{ "cifMPI", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -8771,7 +8795,7 @@
 
 
 
-static per_sequence_t H262VideoCapability_sequence[] = {
+static const per_sequence_t H262VideoCapability_sequence[] = {
 	{ "profileAndLevel-SPatML", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_profileAndLevelSPatML },
 	{ "profileAndLevel-MPatLL", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -8822,7 +8846,7 @@
 
 
 
-static per_sequence_t H262VideoMode_sequence[] = {
+static const per_sequence_t H262VideoMode_sequence[] = {
 	{ "profileAndLevel", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_H262VideoMode_profileAndLevel },
 	{ "videoBitRate", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -9110,7 +9134,7 @@
 
 
 
-static per_sequence_t TransperencyParameters_sequence[] = {
+static const per_sequence_t TransperencyParameters_sequence[] = {
 	{ "presentationOrder", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_presentationOrder },
 	{ "offset-x", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -9210,7 +9234,7 @@
 
 
 
-static per_sequence_t RefPictureSelection_additionalPictureMemory_sequence[] = {
+static const per_sequence_t RefPictureSelection_additionalPictureMemory_sequence[] = {
 	{ "sqcifAdditionalPictureMemory", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_sqcifAdditionalPictureMemory },
 	{ "qcifAdditionalPictureMemory", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -9274,7 +9298,7 @@
 
 
 
-static per_sequence_t RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters_sequence[] = {
+static const per_sequence_t RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters_sequence[] = {
 	{ "mpuHorizMBs", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_mpuHorizMBs },
 	{ "mpuVertMBs", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -9296,7 +9320,7 @@
 
 
 
-static per_sequence_t RefPictureSelection_enhancedReferencePicSelect_sequence[] = {
+static const per_sequence_t RefPictureSelection_enhancedReferencePicSelect_sequence[] = {
 	{ "subPictureRemovalParameters", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_RefPictureSelection_enhancedReferencePicSelect_subPictureRemovalParameters },
 	{ NULL, 0, 0, NULL }
@@ -9313,7 +9337,7 @@
 
 
 
-static per_sequence_t RefPictureSelection_sequence[] = {
+static const per_sequence_t RefPictureSelection_sequence[] = {
 	{ "additionalPictureMemory", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_RefPictureSelection_additionalPictureMemory },
 	{ "videoMux", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -9360,7 +9384,7 @@
 
 
 
-static per_sequence_t CustomPictureClockFrequency_sequence[] = {
+static const per_sequence_t CustomPictureClockFrequency_sequence[] = {
 	{ "clockConversionCode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_clockConversionCode },
 	{ "clockDivisor", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -9463,7 +9487,7 @@
 
 
 
-static per_sequence_t CustomPictureFormat_mPI_customPCF_sequence[] = {
+static const per_sequence_t CustomPictureFormat_mPI_customPCF_sequence[] = {
 	{ "clockConversionCode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_clockConversionCode },
 	{ "clockDivisor", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -9484,7 +9508,7 @@
 
 static int dissect_h245_customPCF(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree);
 
-static per_sequence_t CustomPictureFormat_mPI_sequence[] = {
+static const per_sequence_t CustomPictureFormat_mPI_sequence[] = {
 	{ "standardMPI", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_standardMPI},
 	{ "customPCF", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -9527,7 +9551,7 @@
 
 
 
-static per_sequence_t CustomPictureFormat_pixelAspectInformation_extendedPAR_sequence[] = {
+static const per_sequence_t CustomPictureFormat_pixelAspectInformation_extendedPAR_sequence[] = {
 	{ "width", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_width },
 	{ "height", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -9558,7 +9582,7 @@
 
 
 
-static per_sequence_t IS11172VideoMode_sequence[] = {
+static const per_sequence_t IS11172VideoMode_sequence[] = {
 	{ "constrainedBitstream", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_constrainedBitstream },
 	{ "videoBitRate", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -9585,7 +9609,7 @@
 
 
 
-static per_sequence_t IS11172VideoCapability_sequence[] = {
+static const per_sequence_t IS11172VideoCapability_sequence[] = {
 	{ "constrainedBitstream", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_constrainedBitstream },
 	{ "videoBitRate", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -9715,7 +9739,7 @@
 
 
 
-static per_sequence_t AudioCapability_g7231_sequence[] = {
+static const per_sequence_t AudioCapability_g7231_sequence[] = {
 	{ "maxAl-sduAudioFrames", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h245_maxAl_sduAudioFrames },
 	{ "silenceSuppression", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -9809,7 +9833,7 @@
 
 
 
-static per_sequence_t G729Extensions_sequence[] = {
+static const per_sequence_t G729Extensions_sequence[] = {
 	{ "audioUnit", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_audioUnit },
 	{ "annexA", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -9912,7 +9936,7 @@
 
 
 
-static per_sequence_t G7231AnnexCCapability_g723AnnexCAudioMode_sequence[] = {
+static const per_sequence_t G7231AnnexCCapability_g723AnnexCAudioMode_sequence[] = {
 	{ "highRateMode0", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_highRateMode0 },
 	{ "highRateMode1", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -9938,7 +9962,7 @@
 
 
 
-static per_sequence_t G7231AnnexCCapability_sequence[] = {
+static const per_sequence_t G7231AnnexCCapability_sequence[] = {
 	{ "maxAl-sduAudioFrames", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_maxAl_sduAudioFrames },
 	{ "silenceSuppression", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -9957,7 +9981,7 @@
 
 
 
-static per_sequence_t G7231AnnexCMode_g723AnnexCAudioMode_sequence[] = {
+static const per_sequence_t G7231AnnexCMode_g723AnnexCAudioMode_sequence[] = {
 	{ "highRateMode0", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 			dissect_h245_highRateMode0 },
 	{ "highRateMode1", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -9983,7 +10007,7 @@
 
 
 
-static per_sequence_t G7231AnnexCMode_sequence[] = {
+static const per_sequence_t G7231AnnexCMode_sequence[] = {
 	{ "maxAl-sduAudioFrames", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_maxAl_sduAudioFrames },
 	{ "silenceSupression", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -10017,7 +10041,7 @@
 
 
 
-static per_sequence_t GSMAudioCapability_sequence[] = {
+static const per_sequence_t GSMAudioCapability_sequence[] = {
 	{ "audioUnitSize", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_audioUnitSize },
 	{ "comfortNoice", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -10080,7 +10104,7 @@
 
 
 
-static per_sequence_t V42bis_sequence[] = {
+static const per_sequence_t V42bis_sequence[] = {
 	{ "numberOfCodewords", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_numberOfCodewords },
 	{ "maximumStringLength", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -10101,7 +10125,7 @@
 	{  0, "v42bis" },
 	{  0, NULL }
 };
-static per_choice_t CompressionType_choice[] = {
+static const per_choice_t CompressionType_choice[] = {
 	{  0, "v42bis", ASN1_EXTENSION_ROOT,
 		dissect_h245_V42bis },
 	{  0, NULL, 0, NULL }
@@ -10124,7 +10148,7 @@
 	{  2, "transmitAndReceiveCompression" },
 	{  0, NULL }
 };
-static per_choice_t DataProtocolCapability_v76wCompression_choice[] = {
+static const per_choice_t DataProtocolCapability_v76wCompression_choice[] = {
 	{  0, "transmitCompression", ASN1_EXTENSION_ROOT,
 		dissect_h245_CompressionType },
 	{  1, "receiveCompression", ASN1_EXTENSION_ROOT,
@@ -10158,7 +10182,7 @@
 
 
 static int dissect_h245_T38FaxUdpOptions(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree);
-static per_sequence_t T38FaxProfile_sequence[] = {
+static const per_sequence_t T38FaxProfile_sequence[] = {
 	{ "fillBitRemoval", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_fillBitRemoval },
 	{ "transcodingJBIG", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -10273,7 +10297,7 @@
 
 
 
-static per_sequence_t AudioToneCapability_sequence[] = {
+static const per_sequence_t AudioToneCapability_sequence[] = {
 	{ "dynamicRTPPayloadType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_dynamicRTPPayloadType },
 	{ NULL, 0, 0, NULL }
@@ -10289,7 +10313,7 @@
 
 
 
-static per_sequence_t NoPTAudioToneCapability_sequence[] = {
+static const per_sequence_t NoPTAudioToneCapability_sequence[] = {
 	{ NULL, ASN1_EXTENSION_ROOT, 0, NULL }
 };
 static int
@@ -10336,7 +10360,7 @@
 	{  2, "wholeMultiplex" },
 	{  0, NULL }
 };
-static per_choice_t FlowControlCommand_scope_choice[] = {
+static const per_choice_t FlowControlCommand_scope_choice[] = {
 	{  0, "logicalChannelNumber", ASN1_NO_EXTENSIONS,
 			dissect_h245_LogicalChannelNumber },
 	{  1, "resourceID", ASN1_NO_EXTENSIONS,
@@ -10364,7 +10388,7 @@
 	{  2, "wholeMultiplex" },
 	{  0, NULL }
 };
-static per_choice_t JitterIndication_scope_choice[] = {
+static const per_choice_t JitterIndication_scope_choice[] = {
 	{  0, "logicalChannelNumber", ASN1_NO_EXTENSIONS,
 			dissect_h245_LogicalChannelNumber },
 	{  1, "resourceID", ASN1_NO_EXTENSIONS,
@@ -10391,7 +10415,7 @@
 	{  2, "wholeMultiplex" },
 	{  0, NULL }
 };
-static per_choice_t FlowControlIndication_scope_choice[] = {
+static const per_choice_t FlowControlIndication_scope_choice[] = {
 	{  0, "logicalChannelNumber", ASN1_NO_EXTENSIONS,
 			dissect_h245_LogicalChannelNumber },
 	{  1, "resourceID", ASN1_NO_EXTENSIONS,
@@ -10411,7 +10435,7 @@
 
 
 
-static per_sequence_t NewATMVCIndication_sequence[] = {
+static const per_sequence_t NewATMVCIndication_sequence[] = {
 	{ "resourceID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_resourceID },
 	{ "bitRate", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -10491,7 +10515,7 @@
 
 
 
-static per_sequence_t H223LogicalChannelParameters_adaptionLayerType_al3_sequence[] = {
+static const per_sequence_t H223LogicalChannelParameters_adaptionLayerType_al3_sequence[] = {
 	{ "controlFieldOctets", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h245_controlFieldOctets },
 	{ "sendBufferSize", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -10508,7 +10532,7 @@
 
 
 
-static per_sequence_t H223ModeParameters_adaptationLayerType_al3_sequence[] = {
+static const per_sequence_t H223ModeParameters_adaptationLayerType_al3_sequence[] = {
 	{ "controlFieldOctets", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h245_controlFieldOctets },
 	{ "sendBufferSize", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -10571,7 +10595,7 @@
 	{  1, "infinite" },
 	{  0, NULL }
 };
-static per_choice_t H223AnnexCArqParameters_numberOfRetransmissions_choice[] = {
+static const per_choice_t H223AnnexCArqParameters_numberOfRetransmissions_choice[] = {
 	{  0, "finite", ASN1_EXTENSION_ROOT,
 			dissect_h245_finite_0_16 },
 	{  1, "infinite", ASN1_EXTENSION_ROOT,
@@ -10589,7 +10613,7 @@
 
 
 
-static per_sequence_t H223AnnexCArqParameters_sequence[] = {
+static const per_sequence_t H223AnnexCArqParameters_sequence[] = {
 	{ "numberOfRetransmissions", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_H223AnnexCArqParameters_numberOfRetransmissions },
 	{ "sendBufferSize", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -10614,7 +10638,7 @@
 	{  2, "typeIIArq" },
 	{  0, NULL }
 };
-static per_choice_t H223AL1MParameters_arqType_choice[] = {
+static const per_choice_t H223AL1MParameters_arqType_choice[] = {
 	{  0, "noArq", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "typeIArq", ASN1_EXTENSION_ROOT,
@@ -10640,7 +10664,7 @@
 	{  2, "typeIIArq" },
 	{  0, NULL }
 };
-static per_choice_t H223AL3MParameters_arqType_choice[] = {
+static const per_choice_t H223AL3MParameters_arqType_choice[] = {
 	{  0, "noArq", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "typeIArq", ASN1_EXTENSION_ROOT,
@@ -10661,7 +10685,7 @@
 
 
 
-static per_sequence_t H223AL1MParameters_sequence[] = {
+static const per_sequence_t H223AL1MParameters_sequence[] = {
 	{ "transferMode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_H223AL1MParameters_transferMode },
 	{ "headerFEC", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -10691,7 +10715,7 @@
 
 
 
-static per_sequence_t H223AL3MParameters_sequence[] = {
+static const per_sequence_t H223AL3MParameters_sequence[] = {
 	{ "headerFormat", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_H223AL3MParameters_headerFormat },
 	{ "crcLength", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -10731,7 +10755,7 @@
 
 
 
-static per_sequence_t V76LogicalChannelParameters_mode_eRM_sequence[] = {
+static const per_sequence_t V76LogicalChannelParameters_mode_eRM_sequence[] = {
 	{ "windowSize", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_windowSize },
 	{ "recovery", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -10753,7 +10777,7 @@
 	{  1, "uNERM" },
 	{  0, NULL }
 };
-static per_choice_t V76LogicalChannelParameters_mode_choice[] = {
+static const per_choice_t V76LogicalChannelParameters_mode_choice[] = {
 	{  0, "eRM", ASN1_EXTENSION_ROOT,
 			dissect_h245_V76LogicalChannelParameters_mode_eRM },
 	{  1, "uNERM", ASN1_EXTENSION_ROOT,
@@ -10785,7 +10809,7 @@
 
 
 
-static per_sequence_t V76HDLCParameters_sequence[] = {
+static const per_sequence_t V76HDLCParameters_sequence[] = {
 	{ "crcLength", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_CRCLength },
 	{ "n401", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -10805,7 +10829,7 @@
 
 
 
-static per_sequence_t V76LogicalChannelParameters_sequence[] = {
+static const per_sequence_t V76LogicalChannelParameters_sequence[] = {
 	{ "hdlcParameters", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_V76HDLCParameters },
 	{ "suspendResume", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -10904,7 +10928,7 @@
 
 
 
-static per_sequence_t FECData_rfc2733_mode_separateStream_differentPort_sequence[] = {
+static const per_sequence_t FECData_rfc2733_mode_separateStream_differentPort_sequence[] = {
 	{ "protectedSessionID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_protectedSessionID },
 	{ "protectedPayloadType", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -10922,7 +10946,7 @@
 
 
 
-static per_sequence_t FECData_rfc2733_mode_separateStream_samePort_sequence[] = {
+static const per_sequence_t FECData_rfc2733_mode_separateStream_samePort_sequence[] = {
 	{ "protectedPayloadType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_protectedPayloadType },
 	{ NULL, 0, 0, NULL }
@@ -10942,7 +10966,7 @@
 	{  1, "samePort" },
 	{  0, NULL }
 };
-static per_choice_t FECData_rfc2733_mode_separateStream_choice[] = {
+static const per_choice_t FECData_rfc2733_mode_separateStream_choice[] = {
 	{  0, "differentPort", ASN1_EXTENSION_ROOT,
 		dissect_h245_FECData_rfc2733_mode_separateStream_differentPort },
 	{  1, "samePort", ASN1_EXTENSION_ROOT,
@@ -10965,7 +10989,7 @@
 	{  1, "separateStream" },
 	{  0, NULL }
 };
-static per_choice_t FECData_rfc2733_mode_choice[] = {
+static const per_choice_t FECData_rfc2733_mode_choice[] = {
 	{  0, "redundancyEncoding", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "separateStream", ASN1_EXTENSION_ROOT,
@@ -10983,7 +11007,7 @@
 
 
 
-static per_sequence_t FECData_rfc2733_sequence[] = {
+static const per_sequence_t FECData_rfc2733_sequence[] = {
 	{ "mode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_FECData_rfc2733_mode },
 	{ NULL, 0, 0, NULL }
@@ -11003,7 +11027,7 @@
 	{  0, "rfc2733" },
 	{  0, NULL }
 };
-static per_choice_t FECData_choice[] = {
+static const per_choice_t FECData_choice[] = {
 	{  0, "rfc2733", ASN1_NO_EXTENSIONS,
 		dissect_h245_FECData_rfc2733 },
 	{  0, NULL, 0, NULL }
@@ -11019,7 +11043,7 @@
 
 
 
-static per_sequence_t FECMode_rfc2733Mode_mode_separateStream_differentPort_sequence[] = {
+static const per_sequence_t FECMode_rfc2733Mode_mode_separateStream_differentPort_sequence[] = {
 	{ "protectedSessionID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_protectedSessionID },
 	{ "protectedPayloadType", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -11080,7 +11104,7 @@
 	{  1, "untilClosingFlag" },
 	{  0, NULL }
 };
-static per_choice_t MultiplexElement_repeatCount_choice[] = {
+static const per_choice_t MultiplexElement_repeatCount_choice[] = {
 	{  0, "finite", ASN1_NO_EXTENSIONS,
 			dissect_h245_finite_1_65535 },
 	{  1, "untilClosingFlag", ASN1_NO_EXTENSIONS,
@@ -11111,7 +11135,7 @@
 
 
 
-static per_sequence_t MultiplexEntryRejectionDescriptions_sequence[] = {
+static const per_sequence_t MultiplexEntryRejectionDescriptions_sequence[] = {
 	{ "multiplexTableEntryNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_MultiplexTableEntryNumber },
 	{ "cause", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -11129,7 +11153,7 @@
 
 
 
-static per_sequence_t RequestMultiplexEntryRejectionDescriptions_sequence[] = {
+static const per_sequence_t RequestMultiplexEntryRejectionDescriptions_sequence[] = {
 	{ "multiplexTableEntryNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_MultiplexTableEntryNumber },
 	{ "cause", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -11209,7 +11233,7 @@
 
 
 
-static per_sequence_t TerminalLabel_sequence[] = {
+static const per_sequence_t TerminalLabel_sequence[] = {
 	{ "mcuNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_McuNumber },
 	{ "terminalNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -11241,7 +11265,7 @@
 
 
 
-static per_sequence_t MultilinkRequest_callInformation_sequence[] = {
+static const per_sequence_t MultilinkRequest_callInformation_sequence[] = {
 	{ "maxNumberOfAdditionalConnections", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_maxNumberOfAdditionalConnections },
 	{ NULL, 0, 0, NULL }
@@ -11276,7 +11300,7 @@
 	{  1, "requestedInterval" },
 	{  0, NULL }
 };
-static per_choice_t MultilinkRequest_maximumHeaderInterval_requestType_choice[] = {
+static const per_choice_t MultilinkRequest_maximumHeaderInterval_requestType_choice[] = {
 	{  0, "currentIntervalInformation", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "requestedInterval", ASN1_EXTENSION_ROOT,
@@ -11294,7 +11318,7 @@
 
 
 
-static per_sequence_t MultilinkRequest_maximumHeaderInterval_sequence[] = {
+static const per_sequence_t MultilinkRequest_maximumHeaderInterval_sequence[] = {
 	{ "requestType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_MultilinkRequest_maximumHeaderInterval_requestType },
 	{ NULL, 0, 0, NULL }
@@ -11335,7 +11359,7 @@
 
 
 
-static per_sequence_t MultilinkResponse_maximumHeaderInterval_sequence[] = {
+static const per_sequence_t MultilinkResponse_maximumHeaderInterval_sequence[] = {
 	{ "currentInterval", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_currentInterval },
 	{ NULL, 0, 0, NULL }
@@ -11391,7 +11415,7 @@
 
 
 
-static per_sequence_t ConnectionIdentifier_sequence[] = {
+static const per_sequence_t ConnectionIdentifier_sequence[] = {
 	{ "channelTag", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_channelTag },
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -11409,7 +11433,7 @@
 
 
 
-static per_sequence_t MultilinkRequest_removeConnection_sequence[] = {
+static const per_sequence_t MultilinkRequest_removeConnection_sequence[] = {
 	{ "connectionIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_ConnectionIdentifier },
 	{ NULL, 0, 0, NULL }
@@ -11425,7 +11449,7 @@
 
 
 
-static per_sequence_t MultilinkResponse_removeConnection_sequence[] = {
+static const per_sequence_t MultilinkResponse_removeConnection_sequence[] = {
 	{ "connectionIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_ConnectionIdentifier },
 	{ NULL, 0, 0, NULL }
@@ -11441,7 +11465,7 @@
 
 
 
-static per_sequence_t MultilinkIndication_excessiveError_sequence[] = {
+static const per_sequence_t MultilinkIndication_excessiveError_sequence[] = {
 	{ "connectionIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_ConnectionIdentifier },
 	{ NULL, 0, 0, NULL }
@@ -11469,7 +11493,7 @@
 
 
 
-static per_sequence_t LogicalChannelRateRequest_sequence[] = {
+static const per_sequence_t LogicalChannelRateRequest_sequence[] = {
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_SequenceNumber },
 	{ "logicalChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -11488,7 +11512,7 @@
 
 
 
-static per_sequence_t LogicalChannelRateAck_sequence[] = {
+static const per_sequence_t LogicalChannelRateAck_sequence[] = {
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_SequenceNumber },
 	{ "logicalChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -11508,7 +11532,7 @@
 
 
 
-static per_sequence_t LogicalChannelRateReject_sequence[] = {
+static const per_sequence_t LogicalChannelRateReject_sequence[] = {
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 			dissect_h245_SequenceNumber },
 	{ "logicalChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -11531,7 +11555,7 @@
 
 
 
-static per_sequence_t LogicalChannelRateRelease_sequence[] = {
+static const per_sequence_t LogicalChannelRateRelease_sequence[] = {
 	{ NULL, 0, 0, NULL }
 };
 static int
@@ -11562,7 +11586,7 @@
 	{  1, "noRestriction" },
 	{  0, NULL }
 };
-static per_choice_t FlowControlCommand_restriction_choice[] = {
+static const per_choice_t FlowControlCommand_restriction_choice[] = {
 	{  0, "maximumBitRate", ASN1_NO_EXTENSIONS,
 			dissect_h245_maximumBitRate_0_16777215 },
 	{  1, "noRestriction", ASN1_NO_EXTENSIONS,
@@ -11585,7 +11609,7 @@
 	{  1, "noRestriction" },
 	{  0, NULL }
 };
-static per_choice_t FlowControlIndication_restriction_choice[] = {
+static const per_choice_t FlowControlIndication_restriction_choice[] = {
 	{  0, "maximumBitRate", ASN1_NO_EXTENSIONS,
 			dissect_h245_maximumBitRate_0_16777215 },
 	{  1, "noRestrictions", ASN1_NO_EXTENSIONS,
@@ -11603,7 +11627,7 @@
 
 
 
-static per_sequence_t FlowControlCommand_sequence[] = {
+static const per_sequence_t FlowControlCommand_sequence[] = {
 	{ "scope", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_FlowControlCommand_scope },
 	{ "restriction", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -11620,7 +11644,7 @@
 
 
 
-static per_sequence_t FlowControlIndication_sequence[] = {
+static const per_sequence_t FlowControlIndication_sequence[] = {
 	{ "scope", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_FlowControlIndication_scope },
 	{ "restriction", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -11663,7 +11687,7 @@
 
 
 
-static per_sequence_t MiscellaneousCommand_type_videoFastUpdateGOB_sequence[] = {
+static const per_sequence_t MiscellaneousCommand_type_videoFastUpdateGOB_sequence[] = {
 	{ "firstGOB", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h245_firstGOB_0_17 },
 	{ "numberOfGOBs", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -11756,7 +11780,7 @@
 
 
 
-static per_sequence_t MiscellaneousCommand_type_videoFastUpdateMB_sequence[] = {
+static const per_sequence_t MiscellaneousCommand_type_videoFastUpdateMB_sequence[] = {
 	{ "firstGOB", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_firstGOB_0_255 },
 	{ "firstMB", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -11817,7 +11841,7 @@
 
 
 
-static per_sequence_t MiscellaneousIndication_type_videoNotDecodedMBs_sequence[] = {
+static const per_sequence_t MiscellaneousIndication_type_videoNotDecodedMBs_sequence[] = {
 	{ "firstMB", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_firstMB_1_8192 },
 	{ "numberOfMBs", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -11838,7 +11862,7 @@
 
 
 
-static per_sequence_t MiscellaneousCommand_type_videoBadMBs_sequence[] = {
+static const per_sequence_t MiscellaneousCommand_type_videoBadMBs_sequence[] = {
 	{ "firstMB", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_firstMB_1_9216 },
 	{ "numberOfMBs", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -11889,7 +11913,7 @@
 	{  1, "longTermPictureIndex" },
 	{  0, NULL }
 };
-static per_choice_t PictureReference_choice[] = {
+static const per_choice_t PictureReference_choice[] = {
 	{  0, "pictureNumber", ASN1_EXTENSION_ROOT,
 		dissect_h245_pictureNumber },
 	{  1, "longTermPictureIndex", ASN1_EXTENSION_ROOT,
@@ -11907,7 +11931,7 @@
 
 
 
-static per_sequence_t MiscellaneousCommand_type_lostPartialPicture_sequence[] = {
+static const per_sequence_t MiscellaneousCommand_type_lostPartialPicture_sequence[] = {
 	{ "pictureReference", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_PictureReference },
 	{ "firstMB", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -11951,7 +11975,7 @@
 
 
 
-static per_sequence_t MobileMultilinkReconfigurationIndication_sequence[] = {
+static const per_sequence_t MobileMultilinkReconfigurationIndication_sequence[] = {
 	{ "sampleSize", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_sampleSize },
 	{ "samplesPerFrame", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -11969,7 +11993,7 @@
 
 
 
-static per_sequence_t MobileMultilinkReconfigurationCommand_sequence[] = {
+static const per_sequence_t MobileMultilinkReconfigurationCommand_sequence[] = {
 	{ "sampleSize", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_sampleSize },
 	{ "samplesPerFrame", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -12018,7 +12042,7 @@
 
 
 
-static per_sequence_t TerminalYouAreSeeingInSubPictureNumber_sequence[] = {
+static const per_sequence_t TerminalYouAreSeeingInSubPictureNumber_sequence[] = {
 	{ "terminalNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_TerminalNumber },
 	{ "subPictureNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -12048,7 +12072,7 @@
 
 
 
-static per_sequence_t VideoIndicateCompose_sequence[] = {
+static const per_sequence_t VideoIndicateCompose_sequence[] = {
 	{ "compositionNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_compositionNumber },
 	{ NULL, 0, 0, NULL }
@@ -12081,7 +12105,7 @@
 	{ 13, "videoIndicateCompose" },
 	{  0, NULL }
 };
-static per_choice_t ConferenceIndication_choice[] = {
+static const per_choice_t ConferenceIndication_choice[] = {
 	{  0, "sbeNumber", ASN1_EXTENSION_ROOT,
 			dissect_h245_sbeNumber },
 	{  1, "terminalNumberAssign", ASN1_EXTENSION_ROOT,
@@ -12174,7 +12198,7 @@
 
 
 
-static per_sequence_t JitterIndication_sequence[] = {
+static const per_sequence_t JitterIndication_sequence[] = {
 	{ "scope", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_JitterIndication_scope },
 	{ "estimatedReceivedJitterMantissa", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -12210,7 +12234,7 @@
 
 
 
-static per_sequence_t H223SkewIndication_sequence[] = {
+static const per_sequence_t H223SkewIndication_sequence[] = {
 	{ "logicalChannelNumber1", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 			dissect_h245_LogicalChannelNumber },
 	{ "logicalChannelNumber2", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -12243,7 +12267,7 @@
 
 
 
-static per_sequence_t H2250MaximumSkewIndication_sequence[] = {
+static const per_sequence_t H2250MaximumSkewIndication_sequence[] = {
 	{ "logicalChannelNumber1", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 			dissect_h245_LogicalChannelNumber },
 	{ "logicalChannelNumber2", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -12275,7 +12299,7 @@
 
 
 
-static per_sequence_t UserInputIndication_signalUpdate_sequence[] = {
+static const per_sequence_t UserInputIndication_signalUpdate_sequence[] = {
 	{ "duration", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_duration },
 	{ "rtp", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -12318,7 +12342,7 @@
 
 
 
-static per_sequence_t UserInputIndication_signal_rtp_sequence[] = {
+static const per_sequence_t UserInputIndication_signal_rtp_sequence[] = {
 	{ "timestamp", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_timestamp },
 	{ "expirationTime", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -12340,7 +12364,7 @@
 
 
 
-static per_sequence_t MasterSlaveDeterminationRelease_sequence[] = {
+static const per_sequence_t MasterSlaveDeterminationRelease_sequence[] = {
 	{ NULL, ASN1_EXTENSION_ROOT, 0, NULL }
 };
 static int
@@ -12348,6 +12372,8 @@
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h245_MasterSlaveDeterminationRelease, ett_h245_MasterSlaveDeterminationRelease, MasterSlaveDeterminationRelease_sequence);
 
+	h245_pi.msg_type = H245_MastSlvDetRls;
+
 	return offset;
 }
 
@@ -12355,7 +12381,7 @@
 
 
 
-static per_sequence_t MultilinkIndication_crcDesired_sequence[] = {
+static const per_sequence_t MultilinkIndication_crcDesired_sequence[] = {
 	{ NULL, ASN1_EXTENSION_ROOT, 0, NULL }
 };
 static int
@@ -12455,7 +12481,7 @@
 	{ 1,	"h221NonStandard" },
 	{ 0, NULL }
 };
-static per_choice_t NonStandardIdentifier_choice[] = {
+static const per_choice_t NonStandardIdentifier_choice[] = {
 	{ 0,	"object", ASN1_NO_EXTENSIONS,
 		dissect_h245_object },
 	{ 1,	"h221NonStandard", ASN1_NO_EXTENSIONS,
@@ -12764,7 +12790,7 @@
 
 
 
-static per_sequence_t H222LogicalChannelParameters_sequence[] = {
+static const per_sequence_t H222LogicalChannelParameters_sequence[] = {
 	{ "resourceID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_resourceID },
 	{ "subChannelID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -12789,7 +12815,7 @@
 
 
 
-static per_sequence_t UnicastAddress_iPAddress_sequence[] = {
+static const per_sequence_t UnicastAddress_iPAddress_sequence[] = {
 	{ "network", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_ipv4network },
 	{ "tsapIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -12806,7 +12832,7 @@
 
 
 
-static per_sequence_t UnicastAddress_iPXAddress_sequence[] = {
+static const per_sequence_t UnicastAddress_iPXAddress_sequence[] = {
 	{ "node", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_ipxNode },
 	{ "netnum", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -12826,7 +12852,7 @@
 
 
 
-static per_sequence_t UnicastAddress_iP6Address_sequence[] = {
+static const per_sequence_t UnicastAddress_iP6Address_sequence[] = {
 	{ "network", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_ipv6network },
 	{ "tsapIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -12845,7 +12871,7 @@
 
 
 
-static per_sequence_t VendorIdentification_sequence[] = {
+static const per_sequence_t VendorIdentification_sequence[] = {
 	{ "vendor", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_NonStandardIdentifier },
 	{ "productNumber", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -12865,7 +12891,7 @@
 
 
 
-static per_sequence_t MulticastAddress_iPAddress_sequence[] = {
+static const per_sequence_t MulticastAddress_iPAddress_sequence[] = {
 	{ "network", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_ipv4network },
 	{ "tsapIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -12883,7 +12909,7 @@
 
 
 
-static per_sequence_t MulticastAddress_iP6Address_sequence[] = {
+static const per_sequence_t MulticastAddress_iP6Address_sequence[] = {
 	{ "network", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_ipv6network },
 	{ "tsapIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -12902,7 +12928,7 @@
 
 
 
-static per_sequence_t Criteria_sequence[] = {
+static const per_sequence_t Criteria_sequence[] = {
 	{ "field", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_field },
 	{ "value", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -12920,7 +12946,7 @@
 
 
 
-static per_sequence_t ConferenceResponse_mCterminalIDResponse_sequence[] = {
+static const per_sequence_t ConferenceResponse_mCterminalIDResponse_sequence[] = {
 	{ "terminalLabel", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_TerminalLabel },
 	{ "terminalID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -12938,7 +12964,7 @@
 
 
 
-static per_sequence_t ConferenceResponse_conferenceIDResponse_sequence[] = {
+static const per_sequence_t ConferenceResponse_conferenceIDResponse_sequence[] = {
 	{ "terminalLabel", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_TerminalLabel },
 	{ "conferenceID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -12956,7 +12982,7 @@
 
 
 
-static per_sequence_t ConferenceResponse_passwordResponse_sequence[] = {
+static const per_sequence_t ConferenceResponse_passwordResponse_sequence[] = {
 	{ "terminalLabel", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_TerminalLabel },
 	{ "password", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -12975,7 +13001,7 @@
 
 
 
-static per_sequence_t ConferenceResponse_extensionAddressResponse_sequence[] = {
+static const per_sequence_t ConferenceResponse_extensionAddressResponse_sequence[] = {
 	{ "extensionAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_TerminalID },
 	{ NULL, 0, 0, NULL }
@@ -12991,7 +13017,7 @@
 
 
 
-static per_sequence_t ConferenceResponse_chairTokenOwnerResponse_sequence[] = {
+static const per_sequence_t ConferenceResponse_chairTokenOwnerResponse_sequence[] = {
 	{ "terminalLabel", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_TerminalLabel },
 	{ "terminalID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -13009,7 +13035,7 @@
 
 
 
-static per_sequence_t ConferenceResponse_terminalCertificateResponse_sequence[] = {
+static const per_sequence_t ConferenceResponse_terminalCertificateResponse_sequence[] = {
 	{ "terminalLabel", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_TerminalLabel },
 	{ "certificateResponse", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -13027,7 +13053,7 @@
 
 
 
-static per_sequence_t TerminalInformation_sequence[] = {
+static const per_sequence_t TerminalInformation_sequence[] = {
 	{ "terminalLabel", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_TerminalLabel },
 	{ "terminalID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -13044,7 +13070,7 @@
 
 
 
-static per_sequence_t SubstituteConferenceIDCommand_sequence[] = {
+static const per_sequence_t SubstituteConferenceIDCommand_sequence[] = {
 	{ "conferenceIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_conferenceIdentifier },
 	{ NULL, 0, 0, NULL }
@@ -13071,7 +13097,7 @@
 	{  7, "substituteConferenceIDCommand" },
 	{  0, NULL }
 };
-static per_choice_t ConferenceCommand_choice[] = {
+static const per_choice_t ConferenceCommand_choice[] = {
 	{  0, "broadcastMyLogicalChannel", ASN1_EXTENSION_ROOT,
 		dissect_h245_LogicalChannelNumber },
 	{  1, "cancelBroadcastMyLogicalChannel", ASN1_EXTENSION_ROOT,
@@ -13101,7 +13127,7 @@
 
 
 
-static per_sequence_t FunctionNotSupported_sequence[] = {
+static const per_sequence_t FunctionNotSupported_sequence[] = {
 	{ "cause", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_FunctionNotSupported_cause },
 	{ "returnedFunction", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -13121,7 +13147,7 @@
 
 /* dissect_h245_NonStandardParameter is used for H.245 */
 
-static per_sequence_t NonStandardParameter_sequence[] = {
+static const per_sequence_t NonStandardParameter_sequence[] = {
 	{ "nonStandardIdentifier", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h245_NonStandardIdentifier },
 	{ "data", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -13155,7 +13181,7 @@
 	{ 13, "udp" },
 	{  0, NULL }
 };
-static per_choice_t DataProtocolCapability_choice[] = {
+static const per_choice_t DataProtocolCapability_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 			dissect_h245_NonStandardParameter },
 	{  1, "v14buffered", ASN1_EXTENSION_ROOT,
@@ -13202,7 +13228,7 @@
 	{  1, "algorithm" },
 	{  0, NULL }
 };
-static per_choice_t MediaEncryptionAlgorithm_choice[] = {
+static const per_choice_t MediaEncryptionAlgorithm_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "algorithm", ASN1_EXTENSION_ROOT,
@@ -13230,7 +13256,7 @@
 	{  6, "extendedAlphanumeric" },
 	{  0, NULL }
 };
-static per_choice_t UserInputCapability_choice[] = {
+static const per_choice_t UserInputCapability_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 			dissect_h245_NonStandardParameter },
 	{  1, "basicString", ASN1_EXTENSION_ROOT,
@@ -13275,7 +13301,7 @@
 	{  3, "domainBased" },
 	{  0, NULL }
 };
-static per_choice_t CapabilityIdentifier_choice[] = {
+static const per_choice_t CapabilityIdentifier_choice[] = {
 	{  0, "standard", ASN1_EXTENSION_ROOT,
 		dissect_h245_standard_object },
 	{  1, "h221NonStandard", ASN1_EXTENSION_ROOT,
@@ -13304,7 +13330,7 @@
 	{  3, "domainBased" },
 	{  0, NULL }
 };
-static per_choice_t ParameterIdentifier_choice[] = {
+static const per_choice_t ParameterIdentifier_choice[] = {
 	{  0, "standard", ASN1_EXTENSION_ROOT,
 		dissect_h245_standard_0_127 },
 	{  1, "h221NonStandard", ASN1_EXTENSION_ROOT,
@@ -13336,7 +13362,7 @@
 	{  8, "al3M" },
 	{  0, NULL }
 };
-static per_choice_t H223LogicalChannelParameters_adaptationLayerType_choice[] = {
+static const per_choice_t H223LogicalChannelParameters_adaptationLayerType_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 			dissect_h245_NonStandardParameter },
 	{  1, "al1Framed", ASN1_EXTENSION_ROOT,
@@ -13376,7 +13402,7 @@
 	{  3, "nonStandardAddress" },
 	{  0, NULL }
 };
-static per_choice_t MulticastAddress_choice[] = {
+static const per_choice_t MulticastAddress_choice[] = {
 	{  0, "iPAddress", ASN1_EXTENSION_ROOT,
 		dissect_h245_MulticastAddress_iPAddress },
 	{  1, "iP6Address", ASN1_EXTENSION_ROOT,
@@ -13410,7 +13436,7 @@
 	{  8, "al3M" },
 	{  0, NULL }
 };
-static per_choice_t H223ModeParameters_adaptationLayerType_choice[] = {
+static const per_choice_t H223ModeParameters_adaptationLayerType_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 			dissect_h245_NonStandardParameter },
 	{  1, "al1Framed", ASN1_EXTENSION_ROOT,
@@ -13447,7 +13473,7 @@
 	{  1, "h233Encryption" },
 	{  0, NULL }
 };
-static per_choice_t EncryptionMode_choice[] = {
+static const per_choice_t EncryptionMode_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "h233Encryption", ASN1_EXTENSION_ROOT,
@@ -13465,7 +13491,7 @@
 
 
 
-static per_sequence_t NonStandardMessage_sequence[] = {
+static const per_sequence_t NonStandardMessage_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_NonStandardParameter },
 	{ NULL, 0, 0, NULL }
@@ -13488,7 +13514,7 @@
 	{  2, "excessiveError" },
 	{  0, NULL }
 };
-static per_choice_t MultilinkIndication_choice[] = {
+static const per_choice_t MultilinkIndication_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardMessage },
 	{  1, "crcDesired", ASN1_EXTENSION_ROOT,
@@ -13515,7 +13541,7 @@
 	{  3, "mobile" },
 	{  0, NULL }
 };
-static per_choice_t DialingInformationNetworkType_choice[] = {
+static const per_choice_t DialingInformationNetworkType_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardMessage },
 	{  1, "n-isdn", ASN1_EXTENSION_ROOT,
@@ -13537,7 +13563,7 @@
 
 
 
-static per_sequence_t QOSCapability_sequence[] = {
+static const per_sequence_t QOSCapability_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_NonStandardParameter },
 	{ "rsvpParameters", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -13557,7 +13583,7 @@
 
 
 
-static per_sequence_t DataApplicationCapability_application_t84_sequence[] = {
+static const per_sequence_t DataApplicationCapability_application_t84_sequence[] = {
 	{ "t84Protocol", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h245_DataProtocolCapability },
 	{ "t84Profile", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -13576,7 +13602,7 @@
 
 
 
-static per_sequence_t DataApplicationCapability_application_nlpid_sequence[] = {
+static const per_sequence_t DataApplicationCapability_application_nlpid_sequence[] = {
 	{ "nlpidProtocol", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h245_DataProtocolCapability },
 	{ "nlpidData", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -13594,7 +13620,7 @@
 
 
 
-static per_sequence_t DataApplicationCapability_application_t38fax_sequence[] = {
+static const per_sequence_t DataApplicationCapability_application_t38fax_sequence[] = {
 	{ "t38FaxProtocol", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h245_DataProtocolCapability },
 	{ "t38FaxProfile", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -13612,7 +13638,7 @@
 
 
 
-static per_sequence_t AuthenticationCapability_sequence[] = {
+static const per_sequence_t AuthenticationCapability_sequence[] = {
 	{ "nonStandard", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_NonStandardParameter },
 	{ "antiSpamAlgorithm", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -13629,7 +13655,7 @@
 
 
 
-static per_sequence_t IntegrityCapability_sequence[] = {
+static const per_sequence_t IntegrityCapability_sequence[] = {
 	{ "nonStandard", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_NonStandardParameter },
 	{ NULL, 0, 0, NULL }
@@ -13645,7 +13671,7 @@
 
 
 
-static per_sequence_t H223LogicalChannelParameters_sequence[] = {
+static const per_sequence_t H223LogicalChannelParameters_sequence[] = {
 	{ "adaptationLayerType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_H223LogicalChannelParameters_adaptationLayerType },
 	{ "segmentableFlag", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -13663,7 +13689,7 @@
 
 
 
-static per_sequence_t RequestChannelClose_sequence[] = {
+static const per_sequence_t RequestChannelClose_sequence[] = {
 	{ "forwardLogicalChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_LogicalChannelNumber },
 	{ "qosCapability", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -13683,7 +13709,7 @@
 
 
 
-static per_sequence_t DataMode_application_nlpid_sequence[] = {
+static const per_sequence_t DataMode_application_nlpid_sequence[] = {
 	{ "nlpidProtocol", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h245_DataProtocolCapability },
 	{ "nlpidData", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -13702,7 +13728,7 @@
 
 
 
-static per_sequence_t DataMode_application_t38fax_sequence[] = {
+static const per_sequence_t DataMode_application_t38fax_sequence[] = {
 	{ "t38FaxProtocol", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h245_DataProtocolCapability },
 	{ "t38FaxProfile", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -13720,7 +13746,7 @@
 
 
 
-static per_sequence_t EncryptionCommand_encryptionAlgorithmID_sequence[] = {
+static const per_sequence_t EncryptionCommand_encryptionAlgorithmID_sequence[] = {
 	{ "h233AlgorithmIdentifier", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h245_SequenceNumber },
 	{ "associatedAlgorithm", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -13745,7 +13771,7 @@
 	{  2, "encryptionAlgorithmID" },
 	{  0, NULL }
 };
-static per_choice_t EncryptionCommand_choice[] = {
+static const per_choice_t EncryptionCommand_choice[] = {
 	{  0, "encryptionSE", ASN1_EXTENSION_ROOT,
 		dissect_h245_encryptionSE },
 	{  1, "encryptionIVRequest", ASN1_EXTENSION_ROOT,
@@ -13772,7 +13798,7 @@
 	{  3,	"isdnOptions" },
 	{  0, NULL }
 };
-static per_choice_t EndSessionCommand_choice[] = {
+static const per_choice_t EndSessionCommand_choice[] = {
 	{  0,	"nonStandard",			ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1,	"disconnect",			ASN1_EXTENSION_ROOT,
@@ -13798,7 +13824,7 @@
 
 static int
 dissect_h245_AudioCapability(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree);
-static per_sequence_t VBDCapability_sequence[] = {
+static const per_sequence_t VBDCapability_sequence[] = {
 	{ "type", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_AudioCapability },
 	{ NULL, 0, 0, NULL }
@@ -13851,7 +13877,7 @@
 	{  0, NULL }
 };
 static int dissect_h245_genericParameter_sequence_of(tvbuff_t *, int, packet_info *, proto_tree *);
-static per_choice_t ParameterValue_choice[] = {
+static const per_choice_t ParameterValue_choice[] = {
 	{  0, "logical", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "booleanArray", ASN1_EXTENSION_ROOT,
@@ -13880,7 +13906,7 @@
 
 
 
-static per_sequence_t GenericParameter_sequence[] = {
+static const per_sequence_t GenericParameter_sequence[] = {
 	{ "parameterIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_ParameterIdentifier },
 	{ "parameterValue", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -14011,7 +14037,7 @@
 
 
 
-static per_sequence_t ConferenceCapability_sequence[] = {
+static const per_sequence_t ConferenceCapability_sequence[] = {
 	{ "nonStandardData", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_nonStandardData_sequence_of },
 	{ "chairControlCapability", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -14033,7 +14059,7 @@
 
 
 
-static per_sequence_t GenericCapability_sequence[] = {
+static const per_sequence_t GenericCapability_sequence[] = {
 	{ "capabilityIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_CapabilityIdentifier },
 	{ "maxBitRate", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -14077,7 +14103,7 @@
 	{ 13, "genericDataCapability" },
 	{  0, NULL }
 };
-static per_choice_t DataApplicationCapability_application_choice[] = {
+static const per_choice_t DataApplicationCapability_application_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "t120", ASN1_EXTENSION_ROOT,
@@ -14140,7 +14166,7 @@
 	{ 13, "genericDataMode" },
 	{  0, NULL }
 };
-static per_choice_t DataMode_application_choice[] = {
+static const per_choice_t DataMode_application_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "t120", ASN1_EXTENSION_ROOT,
@@ -14183,7 +14209,7 @@
 
 
 
-static per_sequence_t MultiplePayloadStream_sequence[] = {
+static const per_sequence_t MultiplePayloadStream_sequence[] = {
 	{ "elements", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_elements_MPSE_sequence_of },
 	{ NULL, 0, 0, NULL }
@@ -14200,7 +14226,7 @@
 
 
 
-static per_sequence_t MultiplePayloadStreamMode_sequence[] = {
+static const per_sequence_t MultiplePayloadStreamMode_sequence[] = {
 	{ "elements", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_elements_MPSEM_sequence_of },
 	{ NULL, 0, 0, NULL }
@@ -14217,7 +14243,7 @@
 
 
 
-static per_sequence_t DataMode_sequence[] = {
+static const per_sequence_t DataMode_sequence[] = {
 	{ "application", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_DataMode_application },
 	{ "bitRate", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -14236,7 +14262,7 @@
 
 
 
-static per_sequence_t RequestAllTerminalIDsResponse_sequence[] = {
+static const per_sequence_t RequestAllTerminalIDsResponse_sequence[] = {
 	{ "terminalInformation", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_TerminalInformationSO_sequence_of },
 	{ NULL, 0, 0, NULL }
@@ -14253,7 +14279,7 @@
 
 
 
-static per_sequence_t DataApplicationCapability_sequence[] = {
+static const per_sequence_t DataApplicationCapability_sequence[] = {
 	{ "application", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_DataApplicationCapability_application },
 	{ "maxBitRate", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -14281,7 +14307,7 @@
 
 
 
-static per_sequence_t UnicastAddress_iPSourceRouteAddress_sequence[] = {
+static const per_sequence_t UnicastAddress_iPSourceRouteAddress_sequence[] = {
 	{ "routing", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_UnicastAddress_iPSourceRouteAddress_routing },
 	{ "network", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -14312,7 +14338,7 @@
 	{  6, "nonStandardAddress" },
 	{  0, NULL }
 };
-static per_choice_t UnicastAddress_choice[] = {
+static const per_choice_t UnicastAddress_choice[] = {
 	{  0, "iPAddress", ASN1_EXTENSION_ROOT,
 		dissect_h245_UnicastAddress_iPAddress },
 	{  1, "iPXAddress", ASN1_EXTENSION_ROOT,
@@ -14345,7 +14371,7 @@
 	{  1, "multicastAddress" },
 	{  0, NULL }
 };
-static per_choice_t TransportAddress_choice[] = {
+static const per_choice_t TransportAddress_choice[] = {
 	{  0, "unicastAddress", ASN1_EXTENSION_ROOT,
 		dissect_h245_UnicastAddress },
 	{  1, "multicastAddress", ASN1_EXTENSION_ROOT,
@@ -14374,7 +14400,7 @@
 		src_addr.len=4;
 		src_addr.data=(char *)&ipv4_address;
 
-		rtp_add_address(pinfo, (char *)&ipv4_address, ipv4_port, 0, "H245", pinfo->fd->num);
+		rtp_add_address(pinfo, &src_addr, ipv4_port, 0, "H245", pinfo->fd->num);
 	}
 	return offset;
 }
@@ -14393,7 +14419,7 @@
 		src_addr.len=4;
 		src_addr.data=(char *)&ipv4_address;
 
-		rtcp_add_address(pinfo, (char *)&ipv4_address, ipv4_port, 0, "H245", pinfo->fd->num);
+		rtcp_add_address(pinfo, &src_addr, ipv4_port, 0, "H245", pinfo->fd->num);
 	}
 	return offset;
 }
@@ -14407,7 +14433,7 @@
 
 
 
-static per_sequence_t MCLocationIndication_sequence[] = {
+static const per_sequence_t MCLocationIndication_sequence[] = {
 	{ "signalAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_signalAddress },
 	{ NULL, 0, 0, NULL }
@@ -14422,7 +14448,7 @@
 
 
 
-static per_sequence_t H2250LogicalChannelAckParameters_sequence[] = {
+static const per_sequence_t H2250LogicalChannelAckParameters_sequence[] = {
 	{ "nonStandard", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_nonStandardData_sequence_of },
 	{ "sessionID", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -14454,7 +14480,7 @@
 	{  0, "h2250LogicalChannelAckParameters" },
 	{  0, NULL }
 };
-static per_choice_t forwardMultiplexAckParameters_choice[] = {
+static const per_choice_t forwardMultiplexAckParameters_choice[] = {
 	{  0, "h2250LogicalChannelAckParameters", ASN1_EXTENSION_ROOT,
 		dissect_h245_H2250LogicalChannelAckParameters },
 	{  0, NULL, 0, NULL }
@@ -14483,7 +14509,7 @@
 
 static int dissect_h245_rtpPayloadType_sequence_of(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree);
 
-static per_sequence_t MediaPacketizationCapability_sequence[] = {
+static const per_sequence_t MediaPacketizationCapability_sequence[] = {
 	{ "h261aVideoPacketization", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_h261aVideoPacketization },
 	{ "rtpPayloadType", ASN1_NOT_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -14518,7 +14544,7 @@
 }
 
 
-static per_sequence_t TransportCapability_sequence[] = {
+static const per_sequence_t TransportCapability_sequence[] = {
 	{ "nonStandard", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_NonStandardParameter },
 	{ "qOSCapabilities", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -14554,7 +14580,7 @@
 	{ 11, "transportCapability" },
 	{  0, NULL }
 };
-static per_choice_t MiscellaneousIndication_type_choice[] = {
+static const per_choice_t MiscellaneousIndication_type_choice[] = {
 	{  0, "logicalChannelActive", ASN1_EXTENSION_ROOT,
 			dissect_h245_NULL },
 	{  1, "logicalChannelInactive", ASN1_EXTENSION_ROOT,
@@ -14593,7 +14619,7 @@
 
 
 
-static per_sequence_t MiscellaneousIndication_sequence[] = {
+static const per_sequence_t MiscellaneousIndication_sequence[] = {
 	{ "logicalChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_LogicalChannelNumber },
 	{ "type", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -14639,7 +14665,7 @@
 	{  1, "custom" },
 	{  0, NULL }
 };
-static per_choice_t RTPH263VideoRedundancyEncoding_frameToThreadMapping_choice[] = {
+static const per_choice_t RTPH263VideoRedundancyEncoding_frameToThreadMapping_choice[] = {
 	{  0, "roundrobin", ASN1_EXTENSION_ROOT,
 		dissect_h245_NULL },
 	{  1, "custom", ASN1_EXTENSION_ROOT,
@@ -14681,7 +14707,7 @@
 
 
 
-static per_sequence_t RTPH263VideoRedundancyEncoding_sequence[] = {
+static const per_sequence_t RTPH263VideoRedundancyEncoding_sequence[] = {
 	{ "numberOfThreads", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_numberOfThreads },
 	{ "framesBetweenSyncPoints", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -14709,7 +14735,7 @@
 	{  2, "rtpH263VideoRedundancyEncoding" },
 	{  0, NULL }
 };
-static per_choice_t RedundancyEncodingMethod_choice[] = {
+static const per_choice_t RedundancyEncodingMethod_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "rtpAudioRedundancyEncoding", ASN1_EXTENSION_ROOT,
@@ -14729,7 +14755,7 @@
 
 
 
-static per_sequence_t RedundancyEncodingCapability_sequence[] = {
+static const per_sequence_t RedundancyEncodingCapability_sequence[] = {
 	{ "redundancyEncodingMethod", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_RedundancyEncodingMethod },
 	{ "primaryEncoding", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -14780,7 +14806,7 @@
 
 
 
-static per_sequence_t RTPH263VideoRedundancyFrameMapping_sequence[] = {
+static const per_sequence_t RTPH263VideoRedundancyFrameMapping_sequence[] = {
 	{ "threadNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_threadNumber },
 	{ "frameSequence", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -14809,7 +14835,7 @@
 
 
 
-static per_sequence_t EncryptionAuthenticationAndIntegrity_sequence[] = {
+static const per_sequence_t EncryptionAuthenticationAndIntegrity_sequence[] = {
 	{ "encryptionCapability", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_EncryptionCapability },
 	{ "authenticationCapability", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -14828,7 +14854,7 @@
 
 
 
-static per_sequence_t H235SecurityCapability_sequence[] = {
+static const per_sequence_t H235SecurityCapability_sequence[] = {
 	{ "encryptionAuthenticationAndIntegrity", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_EncryptionAuthenticationAndIntegrity },
 	{ "mediaCapability", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -14856,7 +14882,7 @@
 
 
 
-static per_sequence_t EncryptionSync_sequence[] = {
+static const per_sequence_t EncryptionSync_sequence[] = {
 	{ "nonStandard", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_NonStandardParameter },
 	{ "synchFlag", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -14903,7 +14929,7 @@
 	{ 22, "recoveryReferencePicture" },
 	{  0, NULL }
 };
-static per_choice_t MiscellaneousCommand_type_choice[] = {
+static const per_choice_t MiscellaneousCommand_type_choice[] = {
 	{  0, "equalizeDelay", ASN1_EXTENSION_ROOT,
 		dissect_h245_NULL },
 	{  1, "zeroDelay", ASN1_EXTENSION_ROOT,
@@ -14963,7 +14989,7 @@
 
 
 
-static per_sequence_t MiscellaneousCommand_sequence[] = {
+static const per_sequence_t MiscellaneousCommand_sequence[] = {
 	{ "logicalChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_LogicalChannelNumber },
 	{ "type", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -14991,7 +15017,7 @@
 
 
 
-static per_sequence_t MultiplexEntryDescriptor_sequence[] = {
+static const per_sequence_t MultiplexEntryDescriptor_sequence[] = {
 	{ "multiplexTableEntryNumber", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h245_MultiplexTableEntryNumber },
 	{ "elementList", ASN1_NO_EXTENSIONS, ASN1_OPTIONAL,
@@ -15022,7 +15048,7 @@
 	{  1, "subElementList" },
 	{  0, NULL }
 };
-static per_choice_t MultiplexElement_type_choice[] = {
+static const per_choice_t MultiplexElement_type_choice[] = {
 	{  0, "logicalChannelNumber", ASN1_NO_EXTENSIONS,
 		dissect_h245_logicalChannelNumber },
 	{  1, "subElementList", ASN1_NO_EXTENSIONS,
@@ -15040,7 +15066,7 @@
 
 
 
-static per_sequence_t MultiplexElement_sequence[] = {
+static const per_sequence_t MultiplexElement_sequence[] = {
 	{ "type", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h245_MultiplexElement_type },
 	{ "repeatCount", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -15070,7 +15096,7 @@
 
 
 
-static per_sequence_t RequestMode_sequence[] = {
+static const per_sequence_t RequestMode_sequence[] = {
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_SequenceNumber },
 	{ "requestedModes", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -15096,7 +15122,7 @@
 
 
 
-static per_sequence_t ConferenceRequest_requestTerminalCertificate_sequence[] = {
+static const per_sequence_t ConferenceRequest_requestTerminalCertificate_sequence[] = {
 	{ "terminalLabel", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_TerminalLabel },
 	{ "certSelectionCriteria", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -15135,7 +15161,7 @@
 	{ 15, "remoteMCRequest" },
 	{  0, NULL }
 };
-static per_choice_t ConferenceRequest_choice[] = {
+static const per_choice_t ConferenceRequest_choice[] = {
 	{  0, "terminalListRequest", ASN1_EXTENSION_ROOT,
 		dissect_h245_NULL },
 	{  1, "makeMeChair", ASN1_EXTENSION_ROOT,
@@ -15201,7 +15227,7 @@
 
 
 
-static per_sequence_t CapabilityDescriptor_sequence[] = {
+static const per_sequence_t CapabilityDescriptor_sequence[] = {
 	{ "capabilityDescriptorNumber", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h245_CapabilityDescriptorNumber },
 	{ "simultaneousCapabilities", ASN1_NO_EXTENSIONS, ASN1_OPTIONAL,
@@ -15239,7 +15265,7 @@
 
 
 
-static per_sequence_t VCCapability_aal1ViaGateway_sequence[] = {
+static const per_sequence_t VCCapability_aal1ViaGateway_sequence[] = {
 	{ "gatewayAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_gatewayAddress },
 	{ "nullClockRecovery", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -15272,7 +15298,7 @@
 
 
 
-static per_sequence_t VCCapability_availableBitRates_sequence[] = {
+static const per_sequence_t VCCapability_availableBitRates_sequence[] = {
 	{ "type", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_VCCapability_availableBitRates_type },
 	{ NULL, 0, 0, NULL }
@@ -15289,7 +15315,7 @@
 
 
 
-static per_sequence_t VCCapability_sequence[] = {
+static const per_sequence_t VCCapability_sequence[] = {
 	{ "aal1", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_VCCapability_aal1 },
 	{ "aal5", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -15350,7 +15376,7 @@
 
 
 
-static per_sequence_t EnhancementLayerInfo_sequence[] = {
+static const per_sequence_t EnhancementLayerInfo_sequence[] = {
 	{ "baseBitRateConstrained", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_baseBitRateConstrained },
 	{ "snrEnhancement", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -15407,7 +15433,7 @@
 
 
 
-static per_sequence_t H263Options_sequence[] = {
+static const per_sequence_t H263Options_sequence[] = {
 	{ "advancedIntraCodingMode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_advancedIntraCodingMode },
 	{ "deblockingFilterMode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -15483,7 +15509,7 @@
 
 
 
-static per_sequence_t H263VideoMode_sequence[] = {
+static const per_sequence_t H263VideoMode_sequence[] = {
 	{ "resolution", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_H263VideoMode_resolution },
 	{ "bitRate", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -15516,7 +15542,7 @@
 
 
 
-static per_sequence_t H263VideoCapability_sequence[] = {
+static const per_sequence_t H263VideoCapability_sequence[] = {
 	{ "sqcifMPI", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_sqcifMPI_1_32 },
 	{ "qcifMPI", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -15582,7 +15608,7 @@
 	{  5, "genericVideoCapability" },
 	{  0, NULL }
 };
-static per_choice_t VideoCapability_choice[] = {
+static const per_choice_t VideoCapability_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "h261VideoCapability", ASN1_EXTENSION_ROOT,
@@ -15613,7 +15639,7 @@
 
 
 
-static per_sequence_t EnhancementOptions_sequence[] = {
+static const per_sequence_t EnhancementOptions_sequence[] = {
 	{ "sqcifMPI", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_sqcifMPI_1_32 },
 	{ "qcifMPI", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -15659,7 +15685,7 @@
 
 
 
-static per_sequence_t BEnhancementParameters_sequence[] = {
+static const per_sequence_t BEnhancementParameters_sequence[] = {
 	{ "enhancementOptions", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_EnhancementOptions },
 	{ "numberOfBPictures", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -15713,7 +15739,7 @@
 	{  2, "extendedPAR" },
 	{  0, NULL }
 };
-static per_choice_t CustomPictureFormat_pixelAspectInformation_choice[] = {
+static const per_choice_t CustomPictureFormat_pixelAspectInformation_choice[] = {
 	{  0, "anyPixelAspectRatio", ASN1_EXTENSION_ROOT,
 		dissect_h245_anyPixelAspectRatio },
 	{  1, "pixelAspectCode", ASN1_EXTENSION_ROOT,
@@ -15734,7 +15760,7 @@
 
 
 
-static per_sequence_t CustomPictureFormat_sequence[] = {
+static const per_sequence_t CustomPictureFormat_sequence[] = {
 	{ "maxCustomPictureWidth", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_maxCustomPictureWidth },
 	{ "maxCustomPictureHeight", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -15781,7 +15807,7 @@
 
 
 
-static per_sequence_t H263VideoModeCombos_sequence[] = {
+static const per_sequence_t H263VideoModeCombos_sequence[] = {
 	{ "h263VideoUncoupledModes", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_H263ModeComboFlags },
 	{ "h263VideoCoupledModes", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -15817,7 +15843,7 @@
 
 
 
-static per_sequence_t MultiplePayloadStreamCapability_sequence[] = {
+static const per_sequence_t MultiplePayloadStreamCapability_sequence[] = {
 	{ "capabilities", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_capabilities },
 	{ NULL, 0, 0, NULL }
@@ -15843,7 +15869,7 @@
 
 
 
-static per_sequence_t MultiplexEntrySend_sequence[] = {
+static const per_sequence_t MultiplexEntrySend_sequence[] = {
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_SequenceNumber },
 	{ "multiplexEntryDescriptors", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -15870,7 +15896,7 @@
 
 
 
-static per_sequence_t MultiplexEntrySendRelease_sequence[] = {
+static const per_sequence_t MultiplexEntrySendRelease_sequence[] = {
 	{ "multiplexTableEntryNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_multiplexTableEntryNumber_set_of },
 	{ NULL, 0, 0, NULL }
@@ -15886,7 +15912,7 @@
 
 
 
-static per_sequence_t MultiplexEntrySendAck_sequence[] = {
+static const per_sequence_t MultiplexEntrySendAck_sequence[] = {
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_SequenceNumber },
 	{ "multiplexTableEntryNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -15925,7 +15951,7 @@
 
 
 
-static per_sequence_t MultiplexEntrySendReject_sequence[] = {
+static const per_sequence_t MultiplexEntrySendReject_sequence[] = {
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_SequenceNumber },
 	{ "rejectionDescriptions", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -15953,7 +15979,7 @@
 
 
 
-static per_sequence_t RequestMultiplexEntry_sequence[] = {
+static const per_sequence_t RequestMultiplexEntry_sequence[] = {
 	{ "entryNumbers", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_entryNumbers },
 	{ NULL, 0, 0, NULL }
@@ -15968,7 +15994,7 @@
 
 
 
-static per_sequence_t RequestMultiplexEntryAck_sequence[] = {
+static const per_sequence_t RequestMultiplexEntryAck_sequence[] = {
 	{ "entryNumbers", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_entryNumbers },
 	{ NULL, 0, 0, NULL }
@@ -15984,7 +16010,7 @@
 
 
 
-static per_sequence_t RequestMultiplexEntryReject_sequence[] = {
+static const per_sequence_t RequestMultiplexEntryReject_sequence[] = {
 	{ "entryNumbers", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_entryNumbers },
 	{ "rejectionDescriptions", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -16003,7 +16029,7 @@
 
 
 
-static per_sequence_t RequestMultiplexEntryRelease_sequence[] = {
+static const per_sequence_t RequestMultiplexEntryRelease_sequence[] = {
 	{ "entryNumbers", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_entryNumbers },
 	{ NULL, 0, 0, NULL }
@@ -16043,7 +16069,7 @@
 
 
 
-static per_sequence_t CommunicationModeCommand_sequence[] = {
+static const per_sequence_t CommunicationModeCommand_sequence[] = {
 	{ "communicationModeTable", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_communicationModeTable },
 	{ NULL, 0, 0, NULL }
@@ -16064,7 +16090,7 @@
 	{  0, "communicationModeTable" },
 	{  0, NULL }
 };
-static per_choice_t CommunicationModeResponse_choice[] = {
+static const per_choice_t CommunicationModeResponse_choice[] = {
 	{  0, "communicationModeTable", ASN1_EXTENSION_ROOT,
 		dissect_h245_communicationModeTable },
 	{  0, NULL, 0, NULL }
@@ -16110,7 +16136,7 @@
 	{  2, "infoNotAvailable" },
 	{  0, NULL }
 };
-static per_choice_t DialingInformation_choice[] = {
+static const per_choice_t DialingInformation_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardMessage },
 	{  1, "differential", ASN1_EXTENSION_ROOT,
@@ -16131,7 +16157,7 @@
 
 
 
-static per_sequence_t MultilinkResponse_callInformation_sequence[] = {
+static const per_sequence_t MultilinkResponse_callInformation_sequence[] = {
 	{ "dialingInformation", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_DialingInformation },
 	{ "callAssociationNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -16159,7 +16185,7 @@
 	{  4, "maximumHeaderInterval" },
 	{  0, NULL }
 };
-static per_choice_t MultilinkResponse_choice[] = {
+static const per_choice_t MultilinkResponse_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardMessage },
 	{  1, "callInformation", ASN1_EXTENSION_ROOT,
@@ -16183,7 +16209,7 @@
 
 
 
-static per_sequence_t MultilinkRequest_addConnection_sequence[] = {
+static const per_sequence_t MultilinkRequest_addConnection_sequence[] = {
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_SequenceNumber },
 	{ "dialingInformation", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -16210,7 +16236,7 @@
 	{  4, "maximumHeaderInterval" },
 	{  0, NULL }
 };
-static per_choice_t MultilinkRequest_choice[] = {
+static const per_choice_t MultilinkRequest_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardMessage },
 	{  1, "callInformation", ASN1_EXTENSION_ROOT,
@@ -16266,7 +16292,7 @@
 
 
 
-static per_sequence_t SendTerminalCapabilitySet_specificRequest_sequence[] = {
+static const per_sequence_t SendTerminalCapabilitySet_specificRequest_sequence[] = {
 	{ "multiplexCapability", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_multiplexCapability_bool },
 	{ "capabilityTableEntryNumbers", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -16292,7 +16318,7 @@
 	{  1, "genericRequest" },
 	{  0, NULL }
 };
-static per_choice_t SendTerminalCapabilitySet_choice[] = {
+static const per_choice_t SendTerminalCapabilitySet_choice[] = {
 	{  0, "specificRequest", ASN1_EXTENSION_ROOT,
 		dissect_h245_SendTerminalCapabilitySet_specificRequest },
 	{  1, "genericRequest", ASN1_EXTENSION_ROOT,
@@ -16323,7 +16349,7 @@
 
 
 
-static per_sequence_t AudioTelephonyEventCapability_sequence[] = {
+static const per_sequence_t AudioTelephonyEventCapability_sequence[] = {
 	{ "dynamicRTPPayloadType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_dynamicRTPPayloadType },
 	{ "audioTelephoneEvent", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -16343,7 +16369,7 @@
 
 
 
-static per_sequence_t NoPTAudioTelephonyEventCapability_sequence[] = {
+static const per_sequence_t NoPTAudioTelephonyEventCapability_sequence[] = {
 	{ "audioTelephoneEvent", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_audioTelephoneEvent },
 	{ NULL, 0, 0, NULL }
@@ -16387,7 +16413,7 @@
 	{ 24, "audioTone" },
 	{  0, NULL }
 };
-static per_choice_t AudioCapability_choice[] = {
+static const per_choice_t AudioCapability_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "g711Alaw64k", ASN1_EXTENSION_ROOT,
@@ -16463,7 +16489,7 @@
 	{  3, "data" },
 	{  0, NULL }
 };
-static per_choice_t H235Media_mediaType_choice[] = {
+static const per_choice_t H235Media_mediaType_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "videoData", ASN1_EXTENSION_ROOT,
@@ -16493,7 +16519,7 @@
 	{  2, "data" },
 	{  0, NULL }
 };
-static per_choice_t CommunicationModeTableEntry_dataType_choice[] = {
+static const per_choice_t CommunicationModeTableEntry_dataType_choice[] = {
 	{  0, "videoData", ASN1_EXTENSION_ROOT,
 		dissect_h245_VideoCapability },
 	{  1, "audioData", ASN1_EXTENSION_ROOT,
@@ -16514,7 +16540,7 @@
 
 
 
-static per_sequence_t H235Media_sequence[] = {
+static const per_sequence_t H235Media_sequence[] = {
 	{ "encryptionAuthenticationAndIntegrity", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_EncryptionAuthenticationAndIntegrity },
 	{ "mediaType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -16552,7 +16578,7 @@
 	{  3, "generalString" },
 	{  0, NULL }
 };
-static per_choice_t UserInputIndication_userInputSupportIndication_choice[] = {
+static const per_choice_t UserInputIndication_userInputSupportIndication_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "basicString", ASN1_EXTENSION_ROOT,
@@ -16574,7 +16600,7 @@
 
 
 
-static per_sequence_t UserInputIndication_extendedAlphanumeric_sequence[] = {
+static const per_sequence_t UserInputIndication_extendedAlphanumeric_sequence[] = {
 	{ "alphanumeric", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_alphanumeric },
 	{ "rtpPayloadIndication", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -16608,7 +16634,7 @@
 	{  2, "oid" },
 	{  0, NULL }
 };
-static per_choice_t RTPPayloadType_payloadDescriptor_choice[] = {
+static const per_choice_t RTPPayloadType_payloadDescriptor_choice[] = {
 	{  0, "nonStandardIdentifier", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "rfc-number", ASN1_EXTENSION_ROOT,
@@ -16629,7 +16655,7 @@
 
 
 
-static per_sequence_t RTPPayloadType_sequence[] = {
+static const per_sequence_t RTPPayloadType_sequence[] = {
 	{ "payloadDescriptor", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_RTPPayloadType_payloadDescriptor },
 	{ "payloadType", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -16654,7 +16680,7 @@
 	{  1, "rtpPayloadType" },
 	{  0, NULL }
 };
-static per_choice_t H2250LogicalChannelParameters_mediaPacketization_choice[] = {
+static const per_choice_t H2250LogicalChannelParameters_mediaPacketization_choice[] = {
 	{  0, "h261aVideoPacketization", ASN1_EXTENSION_ROOT,
 		dissect_h245_NULL },
 	{  1, "rtpPayloadType", ASN1_NOT_EXTENSION_ROOT,
@@ -16674,7 +16700,7 @@
 
 
 static int dissect_h245_mediaDistributionCapability_sequence_of(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree);
-static per_sequence_t MultipointCapability_sequence[] = {
+static const per_sequence_t MultipointCapability_sequence[] = {
 	{ "multicastCapability", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_multicastCapability },
 	{ "multiUniCastConference", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -16708,7 +16734,7 @@
 
 
 
-static per_sequence_t H2250Capability_sequence[] = {
+static const per_sequence_t H2250Capability_sequence[] = {
 	{ "maximumAudioDelayJitter", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_maximumAudioDelayJitter },
 	{ "receiveMultipointCapability", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -16747,7 +16773,7 @@
 
 
 static int dissect_h245_DataType(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree);
-static per_sequence_t RedundancyEncodingElement_sequence[] = {
+static const per_sequence_t RedundancyEncodingElement_sequence[] = {
 	{ "dataType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_DataType },
 	{ "payloadType", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -16766,7 +16792,7 @@
 
 
 
-static per_sequence_t RedundancyEncoding_rtpRedundancyEncoding_sequence[] = {
+static const per_sequence_t RedundancyEncoding_rtpRedundancyEncoding_sequence[] = {
 	{ "primary", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_RedundancyEncodingElement },
 	{ "secondary", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -16785,7 +16811,7 @@
 
 
 
-static per_sequence_t RedundancyEncoding_sequence[] = {
+static const per_sequence_t RedundancyEncoding_sequence[] = {
 	{ "redundancyEncodingMethod", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_RedundancyEncodingMethod },
 	{ "secondaryEncoding", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -16805,7 +16831,7 @@
 
 
 
-static per_sequence_t H2250LogicalChannelParameters_sequence[] = {
+static const per_sequence_t H2250LogicalChannelParameters_sequence[] = {
 	{ "nonStandard", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_nonStandardData_sequence_of },
 	{ "sessionID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -16855,7 +16881,7 @@
 	{  4, "none" },
 	{  0, NULL }
 };
-static per_choice_t forwardLogicalChannelParameters_multiplexParameters_choice[] = {
+static const per_choice_t forwardLogicalChannelParameters_multiplexParameters_choice[] = {
 	{  0, "h222LogicalChannelParameters", ASN1_EXTENSION_ROOT,
 		dissect_h245_H222LogicalChannelParameters },
 	{  1, "h223LogicalChannelParameters", ASN1_EXTENSION_ROOT,
@@ -16880,7 +16906,7 @@
 
 
 
-static per_sequence_t MultiplePayloadStreamElement_sequence[] = {
+static const per_sequence_t MultiplePayloadStreamElement_sequence[] = {
 	{ "dataType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_DataType },
 	{ "payloadType", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -16903,7 +16929,7 @@
 	{  2, "h2250LogicalChannelParameters" },
 	{  0, NULL }
 };
-static per_choice_t reverseLogicalChannelParameters_multiplexParameters_choice[] = {
+static const per_choice_t reverseLogicalChannelParameters_multiplexParameters_choice[] = {
 	{  0, "h223LogicalChannelParameters", ASN1_EXTENSION_ROOT,
 		dissect_h245_H223LogicalChannelParameters },
 	{  1, "v76LogicalChannelParameters", ASN1_EXTENSION_ROOT,
@@ -16928,7 +16954,7 @@
 	{  1, "h2250LogicalChannelParameters" },
 	{  0, NULL }
 };
-static per_choice_t OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters_choice[] = {
+static const per_choice_t OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters_choice[] = {
 	{  0, "h222LogicalChannelParameters", ASN1_EXTENSION_ROOT,
 		dissect_h245_H222LogicalChannelParameters },
 	{  1, "h2250LogicalChannelParameters", ASN1_NOT_EXTENSION_ROOT,
@@ -16947,7 +16973,7 @@
 
 
 
-static per_sequence_t forwardLogicalChannelParameters_sequence[] = {
+static const per_sequence_t forwardLogicalChannelParameters_sequence[] = {
 	{ "portNumber", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_portNumber },
 	{ "dataType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -16971,7 +16997,7 @@
 
 
 
-static per_sequence_t reverseLogicalChannelParameters_sequence[] = {
+static const per_sequence_t reverseLogicalChannelParameters_sequence[] = {
 	{ "dataType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_DataType },
 	{ "multiplexParameters", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -16994,7 +17020,7 @@
 
 
 
-static per_sequence_t OpenLogicalChannelAck_reverseLogicalChannelParameters_sequence[] = {
+static const per_sequence_t OpenLogicalChannelAck_reverseLogicalChannelParameters_sequence[] = {
 	{ "reverseLogicalChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_LogicalChannelNumber },
 	{ "portNumber", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -17026,7 +17052,7 @@
 
 
 
-static per_sequence_t H222Capability_sequence[] = {
+static const per_sequence_t H222Capability_sequence[] = {
 	{ "numberOfVCs", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_numberOfVCs },
 	{ "vcCapability", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -17050,7 +17076,7 @@
 	{  2, "h223Capability" },
 	{  0, NULL }
 };
-static per_choice_t MultiplexFormat_choice[] = {
+static const per_choice_t MultiplexFormat_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "h222Capability", ASN1_EXTENSION_ROOT,
@@ -17070,7 +17096,7 @@
 
 
 
-static per_sequence_t MultiplexedStreamCapability_sequence[] = {
+static const per_sequence_t MultiplexedStreamCapability_sequence[] = {
 	{ "multiplexFormat", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_MultiplexFormat },
 	{ "controlOnMuxStream", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -17120,7 +17146,7 @@
 	{ 25, "multiplePayloadStreamCapability" },
 	{  0, NULL }
 };
-static per_choice_t Capability_choice[] = {
+static const per_choice_t Capability_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "receiveVideoCapability", ASN1_EXTENSION_ROOT,
@@ -17185,7 +17211,7 @@
 
 
 
-static per_sequence_t CapabilityTableEntry_sequence[] = {
+static const per_sequence_t CapabilityTableEntry_sequence[] = {
 	{ "capabilityTableEntryNumber", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h245_CapabilityTableEntryNumber },
 	{ "capability", ASN1_NO_EXTENSIONS, ASN1_OPTIONAL,
@@ -17203,7 +17229,7 @@
 
 
 
-static per_sequence_t MultiplexedStreamParameter_sequence[] = {
+static const per_sequence_t MultiplexedStreamParameter_sequence[] = {
 	{ "multiplexFormat", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_MultiplexFormat },
 	{ "controlOnMuxStream", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -17237,7 +17263,7 @@
 	{ 11, "fec" },
 	{  0, NULL }
 };
-static per_choice_t DataType_choice[] = {
+static const per_choice_t DataType_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "nullData", ASN1_EXTENSION_ROOT,
@@ -17302,7 +17328,7 @@
 	{ 22, "vbd" },
 	{  0, NULL }
 };
-static per_choice_t AudioMode_choice[] = {
+static const per_choice_t AudioMode_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "g711Alaw64k", ASN1_EXTENSION_ROOT,
@@ -17367,7 +17393,7 @@
 	{  1, "audioData" },
 	{  0, NULL }
 };
-static per_choice_t RedundancyEncodingMode_secondaryEncoding_choice[] = {
+static const per_choice_t RedundancyEncodingMode_secondaryEncoding_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "audioData", ASN1_EXTENSION_ROOT,
@@ -17384,7 +17410,7 @@
 
 
 
-static per_sequence_t RedundancyEncodingMode_sequence[] = {
+static const per_sequence_t RedundancyEncodingMode_sequence[] = {
 	{ "redundancyEncodingMethod", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_RedundancyEncodingMethod },
 	{ "secondaryEncoding", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -17401,7 +17427,7 @@
 
 
 
-static per_sequence_t H2250ModeParameters_sequence[] = {
+static const per_sequence_t H2250ModeParameters_sequence[] = {
 	{ "redundancyEncodingMode", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_RedundancyEncodingMode },
 	{ NULL, 0, 0, NULL }
@@ -17418,7 +17444,7 @@
 
 
 
-static per_sequence_t VBDMode_sequence[] = {
+static const per_sequence_t VBDMode_sequence[] = {
 	{ "type", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_AudioMode },
 	{ NULL, 0, 0, NULL }
@@ -17442,7 +17468,7 @@
 	{  5, "genericMultiplexCapability" },
 	{  0, NULL }
 };
-static per_choice_t MultiplexCapability_choice[] = {
+static const per_choice_t MultiplexCapability_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "h222Capability", ASN1_EXTENSION_ROOT,
@@ -17469,7 +17495,7 @@
 
 
 
-static per_sequence_t TerminalCapabilitySet_sequence[] = {
+static const per_sequence_t TerminalCapabilitySet_sequence[] = {
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_SequenceNumber },
 	{ "protocolIdentifier", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -17487,6 +17513,8 @@
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h245_TerminalCapabilitySet, ett_h245_TerminalCapabilitySet, TerminalCapabilitySet_sequence);
 
+	h245_pi.msg_type = H245_TermCapSet;
+
 	return offset;
 }
 
@@ -17495,7 +17523,7 @@
 
 
 
-static per_sequence_t ConferenceResponse_terminalIDResponse_sequence[] = {
+static const per_sequence_t ConferenceResponse_terminalIDResponse_sequence[] = {
 	{ "terminalLabel", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_TerminalLabel },
 	{ "terminalID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -17533,7 +17561,7 @@
 	{ 15, "remoteMCResponse" },
 	{  0, NULL }
 };
-static per_choice_t ConferenceResponse_choice[] = {
+static const per_choice_t ConferenceResponse_choice[] = {
 	{  0, "mCTerminalIDResponse", ASN1_EXTENSION_ROOT,
 		dissect_h245_ConferenceResponse_mCterminalIDResponse },
 	{  1, "terminalIDResponse", ASN1_EXTENSION_ROOT,
@@ -17585,7 +17613,7 @@
 	{  1, "cif" },
 	{  0, NULL }
 };
-static per_choice_t H261VideoMode_resolution_choice[] = {
+static const per_choice_t H261VideoMode_resolution_choice[] = {
 	{  0, "qcif", ASN1_NO_EXTENSIONS,
 		dissect_h245_NULL },
 	{  1, "cif", ASN1_NO_EXTENSIONS,
@@ -17603,7 +17631,7 @@
 
 
 
-static per_sequence_t H261VideoMode_sequence[] = {
+static const per_sequence_t H261VideoMode_sequence[] = {
 	{ "resolution", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_H261VideoMode_resolution },
 	{ "bitRate", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -17632,7 +17660,7 @@
 	{  5, "genericVideoMode" },
 	{  0, NULL }
 };
-static per_choice_t VideoMode_choice[] = {
+static const per_choice_t VideoMode_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "h261VideoMode", ASN1_EXTENSION_ROOT,
@@ -17665,7 +17693,7 @@
 	{  3, "dataMode" },
 	{  0, NULL }
 };
-static per_choice_t H235Mode_mediaMode_choice[] = {
+static const per_choice_t H235Mode_mediaMode_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "videoMode", ASN1_EXTENSION_ROOT,
@@ -17687,7 +17715,7 @@
 
 
 
-static per_sequence_t H235Mode_sequence[] = {
+static const per_sequence_t H235Mode_sequence[] = {
 	{ "encryptionAuthenticationAndIntegrity", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_EncryptionAuthenticationAndIntegrity },
 	{ "mediaMode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -17715,7 +17743,7 @@
 	{  5, "h235Mode" },
 	{  0, NULL }
 };
-static per_choice_t RedundancyEncodingDTModeElement_type_choice[] = {
+static const per_choice_t RedundancyEncodingDTModeElement_type_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "videoMode", ASN1_EXTENSION_ROOT,
@@ -17741,7 +17769,7 @@
 
 
 
-static per_sequence_t RedundancyEncodingDTModeElement_sequence[] = {
+static const per_sequence_t RedundancyEncodingDTModeElement_sequence[] = {
 	{ "type", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_RedundancyEncodingDTModeElement_type },
 	{ NULL, 0, 0, NULL }
@@ -17758,7 +17786,7 @@
 
 
 
-static per_sequence_t RedundancyEncodingDTMode_sequence[] = {
+static const per_sequence_t RedundancyEncodingDTMode_sequence[] = {
 	{ "redundancyEncodingMethod", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_RedundancyEncodingMethod },
 	{ "primary", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -17792,7 +17820,7 @@
 	{  9, "fecMode" },
 	{  0, NULL }
 };
-static per_choice_t ModeElementType_choice[] = {
+static const per_choice_t ModeElementType_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "videoMode", ASN1_EXTENSION_ROOT,
@@ -17826,7 +17854,7 @@
 
 
 
-static per_sequence_t MultiplePayloadStreamElementMode_sequence[] = {
+static const per_sequence_t MultiplePayloadStreamElementMode_sequence[] = {
 	{ "type", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_ModeElementType },
 	{ NULL, 0, 0, NULL }
@@ -17843,7 +17871,7 @@
 
 
 
-static per_sequence_t FECMode_rfc2733Mode_mode_separateStream_samePort_sequence[] = {
+static const per_sequence_t FECMode_rfc2733Mode_mode_separateStream_samePort_sequence[] = {
 	{ "protectedType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_ModeElementType },
 	{ NULL, 0, 0, NULL }
@@ -17863,7 +17891,7 @@
 	{  1, "samePort" },
 	{  0, NULL }
 };
-static per_choice_t FECMode_rfc2733Mode_mode_separateStream_choice[] = {
+static const per_choice_t FECMode_rfc2733Mode_mode_separateStream_choice[] = {
 	{  0, "differentPort", ASN1_EXTENSION_ROOT,
 		dissect_h245_FECMode_rfc2733Mode_mode_separateStream_differentPort },
 	{  1, "samePort", ASN1_EXTENSION_ROOT,
@@ -17887,7 +17915,7 @@
 	{  1, "separateStream" },
 	{  0, NULL }
 };
-static per_choice_t FECMode_rfc2733Mode_mode_choice[] = {
+static const per_choice_t FECMode_rfc2733Mode_mode_choice[] = {
 	{  0, "redundancyEncoding", ASN1_EXTENSION_ROOT,
 		dissect_h245_NULL },
 	{  1, "separateStream", ASN1_EXTENSION_ROOT,
@@ -17904,7 +17932,7 @@
 
 
 
-static per_sequence_t FECMode_rfc2733Mode_sequence[] = {
+static const per_sequence_t FECMode_rfc2733Mode_sequence[] = {
 	{ "mode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_FECMode_rfc2733Mode_mode },
 	{ NULL, 0, 0, NULL }
@@ -17924,7 +17952,7 @@
 	{  0, "rfc2733Mode" },
 	{  0, NULL }
 };
-static per_choice_t FECMode_choice[] = {
+static const per_choice_t FECMode_choice[] = {
 	{  0, "rfc2733Mode", ASN1_EXTENSION_ROOT,
 		dissect_h245_FECMode_rfc2733Mode },
 	{  0, NULL, 0, NULL }
@@ -17949,7 +17977,7 @@
 	{  2, "command" },
 	{  0, NULL }
 };
-static per_choice_t FunctionNotUnderstood_choice[] = {
+static const per_choice_t FunctionNotUnderstood_choice[] = {
 	{  0, "request", ASN1_NO_EXTENSIONS,
 		dissect_h245_RequestMessage },
 	{  1, "response", ASN1_NO_EXTENSIONS,
@@ -17999,7 +18027,7 @@
 
 
 
-static per_sequence_t UserInputIndication_signal_sequence[] = {
+static const per_sequence_t UserInputIndication_signal_sequence[] = {
 	{ "signalType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_signalType },
 	{ "duration", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -18030,7 +18058,7 @@
 	{  5, "extendedAlphanumeric" },
 	{  0, NULL }
 };
-static per_choice_t UserInputIndication_choice[] = {
+static const per_choice_t UserInputIndication_choice[] = {
 	{  0, "nonStandard", ASN1_EXTENSION_ROOT,
 		dissect_h245_NonStandardParameter },
 	{  1, "alphanumeric", ASN1_EXTENSION_ROOT,
@@ -18057,7 +18085,7 @@
 
 
 
-static per_sequence_t TerminalCapabilitySetRelease_sequence[] = {
+static const per_sequence_t TerminalCapabilitySetRelease_sequence[] = {
 	{ NULL, ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL, NULL }
 };
 static int
@@ -18065,6 +18093,8 @@
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h245_TerminalCapabilitySetRelease, ett_h245_TerminalCapabilitySetRelease, TerminalCapabilitySetRelease_sequence);
 
+	h245_pi.msg_type = H245_TermCapSetRls;
+
 	return offset;
 }
 
@@ -18086,7 +18116,7 @@
 	{  1, "nsapAddress" },
 	{  0, NULL }
 };
-static per_choice_t Q2931Address_address_choice[] = {
+static const per_choice_t Q2931Address_address_choice[] = {
 	{  0, "internationalNumber", ASN1_EXTENSION_ROOT,
 		dissect_h245_internationalNumber },
 	{  1, "nsapAddress", ASN1_EXTENSION_ROOT,
@@ -18105,7 +18135,7 @@
 
 
 
-static per_sequence_t Q2931Address_sequence[] = {
+static const per_sequence_t Q2931Address_sequence[] = {
 	{ "address", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_Q2931Address_address },
 	{ "subaddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -18140,7 +18170,7 @@
 	{  2, "localAreaAddress" },
 	{  0, NULL }
 };
-static per_choice_t NetworkAccessParameters_networkAddress_choice[] = {
+static const per_choice_t NetworkAccessParameters_networkAddress_choice[] = {
 	{  0, "q2931Address", ASN1_EXTENSION_ROOT,
 		dissect_h245_Q2931Address },
 	{  1, "e164Address", ASN1_EXTENSION_ROOT,
@@ -18161,7 +18191,7 @@
 
 
 
-static per_sequence_t NetworkAccessParameters_sequence[] = {
+static const per_sequence_t NetworkAccessParameters_sequence[] = {
 	{ "distribution", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_NetworkAccessParameters_distribution },
 	{ "networkAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -18186,7 +18216,7 @@
 
 
 
-static per_sequence_t OpenLogicalChannel_sequence[] = {
+static const per_sequence_t OpenLogicalChannel_sequence[] = {
 	{ "forwardLogicalChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_LogicalChannelNumber },
 	{ "forwardLogicalChannelParameters", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -18204,13 +18234,15 @@
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h245_OpenLogicalChannel, ett_h245_OpenLogicalChannel, OpenLogicalChannel_sequence);
 
+	h245_pi.msg_type = H245_OpenLogChn;
+
 	return offset;
 }
 
 
 
 
-static per_sequence_t OpenLogicalChannelAck_sequence[] = {
+static const per_sequence_t OpenLogicalChannelAck_sequence[] = {
 	{ "forwardLogicalChannelNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_LogicalChannelNumber },
 	{ "reverseLogicalChannelParameters", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -18228,6 +18260,8 @@
 {
 	offset=dissect_per_sequence(tvb, offset, pinfo, tree, hf_h245_OpenLogicalChannelAck, ett_h245_OpenLogicalChannelAck, OpenLogicalChannelAck_sequence);
 
+	h245_pi.msg_type = H245_OpenLogChnAck;
+
 	return offset;
 }
 
@@ -18245,7 +18279,7 @@
 
 
 
-static per_sequence_t EscrowData_sequence[] = {
+static const per_sequence_t EscrowData_sequence[] = {
 	{ "escrowID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_escrowID },
 	{ "escrowValue", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -18273,7 +18307,7 @@
 	{  1, "willTransmitLessPreferredMode" },
 	{  0, NULL }
 };
-static per_choice_t RequestModeAck_response_decision_choice[] = {
+static const per_choice_t RequestModeAck_response_decision_choice[] = {
 	{  0, "willTransmitMostPreferredMode", ASN1_EXTENSION_ROOT,
 		dissect_h245_NULL },
 	{  1, "willTransmitLessPreferredMode", ASN1_EXTENSION_ROOT,
@@ -18292,7 +18326,7 @@
 
 
 
-static per_sequence_t RequestModeAck_sequence[] = {
+static const per_sequence_t RequestModeAck_sequence[] = {
 	{ "sequenceNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_SequenceNumber },
 	{ "response", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -18310,7 +18344,7 @@
 
 
 
-static per_sequence_t RequestModeRelease_sequence[] = {
+static const per_sequence_t RequestModeRelease_sequence[] = {
 	{ NULL, ASN1_EXTENSION_ROOT, 0, NULL }
 };
 static int
@@ -18323,7 +18357,7 @@
 
 
 
-static per_sequence_t MaintenanceLoopOffCommand_sequence[] = {
+static const per_sequence_t MaintenanceLoopOffCommand_sequence[] = {
 	{ NULL, ASN1_EXTENSION_ROOT, 0, NULL }
 };
 static int
@@ -18337,7 +18371,7 @@
 
 
 
-static per_sequence_t CommunicationModeRequest_sequence[] = {
+static const per_sequence_t CommunicationModeRequest_sequence[] = {
 	{ NULL, ASN1_EXTENSION_ROOT, 0, NULL }
 };
 static int
@@ -18405,7 +18439,7 @@
 	{ 22,	"MobileMultilinkReconfigurationIndication" },
 	{  0, NULL }
 };
-static per_choice_t IndicationMessage_choice[] = {
+static const per_choice_t IndicationMessage_choice[] = {
 	{  0,	"NonStandardMessage",			ASN1_EXTENSION_ROOT,
 			dissect_h245_NonStandardMessage },
 	{  1,	"FunctionNotUnderstood",		ASN1_EXTENSION_ROOT,
@@ -18519,7 +18553,7 @@
 	{ 14,	"LogicalChannelRateRequest" },
 	{  0, NULL }
 };
-static per_choice_t RequestMessage_choice[] = {
+static const per_choice_t RequestMessage_choice[] = {
 	{  0,	"NonStandardMessage",		ASN1_EXTENSION_ROOT,
 			dissect_h245_NonStandardMessage },
 	{  1,	"MasterSlaveDetermination",	ASN1_EXTENSION_ROOT,
@@ -18604,7 +18638,7 @@
 
 
 
-static per_sequence_t MediaDistributionCapability_sequence[] = {
+static const per_sequence_t MediaDistributionCapability_sequence[] = {
 	{ "centralizedControl", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_centralizedControl },
 	{ "distributedControl", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -18654,7 +18688,7 @@
 
 
 
-static per_sequence_t H223ModeParameters_sequence[] = {
+static const per_sequence_t H223ModeParameters_sequence[] = {
 	{ "adaptationLayerType", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_H223ModeParameters_adaptationLayerType },
 	{ "segmentableFlag", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -18673,7 +18707,7 @@
 
 
 
-static per_sequence_t ModeElement_sequence[] = {
+static const per_sequence_t ModeElement_sequence[] = {
 	{ "type", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_ModeElementType },
 	{ "h223ModeParameters", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -18726,7 +18760,7 @@
 
 
 
-static per_sequence_t T38FaxUdpOptions_sequence[] = {
+static const per_sequence_t T38FaxUdpOptions_sequence[] = {
 	{ "t38FaxMaxBuffer", ASN1_NO_EXTENSIONS, ASN1_OPTIONAL,
 		dissect_h245_t38FaxMaxBuffer },
 	{ "t38FaxMaxDatagram", ASN1_NO_EXTENSIONS, ASN1_OPTIONAL,
@@ -18757,7 +18791,7 @@
 
 
 
-static per_sequence_t CommunicationModeTableEntry_sequence[] = {
+static const per_sequence_t CommunicationModeTableEntry_sequence[] = {
 	{ "nonStandard", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h245_nonStandardData_sequence_of },
 	{ "sessionID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -18797,7 +18831,7 @@
 
 
 
-static per_sequence_t NewATMVCCommand_sequence[] = {
+static const per_sequence_t NewATMVCCommand_sequence[] = {
 	{ "resouceID", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_resourceID },
 	{ "bitRate", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -18855,7 +18889,7 @@
 	{ 11,	"MobileMultilinkReconfigurationCommand" },
 	{  0, NULL }
 };
-static per_choice_t CommandMessage_choice[] = {
+static const per_choice_t CommandMessage_choice[] = {
 	{  0,	"NonStandardMessage",		ASN1_EXTENSION_ROOT,
 			dissect_h245_NonStandardMessage },
 	{  1,	"MaintenanceLoopOffCommand",	ASN1_EXTENSION_ROOT,
@@ -18966,7 +19000,7 @@
 	{ 23,	"LogicalChannelRateReject" },
 	{  0, NULL }
 };
-static per_choice_t ResponseMessage_choice[] = {
+static const per_choice_t ResponseMessage_choice[] = {
 	{  0,	"NonStandardMessage",		ASN1_EXTENSION_ROOT,
 			dissect_h245_NonStandardMessage },
 	{  1,	"MasterSlaveDeterminationAck",	ASN1_EXTENSION_ROOT,
@@ -19068,7 +19102,7 @@
 
 
 
-static per_sequence_t DialingInformationNumber_sequence[] = {
+static const per_sequence_t DialingInformationNumber_sequence[] = {
 	{ "networkAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h245_DialingInformationNumber_networkAddress },
 	{ "subAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -19093,7 +19127,7 @@
 	{ 3,	"Indication" },
 	{ 0, NULL }
 };
-static per_choice_t MultimediaSystemControlMessage_choice[] = {
+static const per_choice_t MultimediaSystemControlMessage_choice[] = {
 	{ 0,	"Request",	ASN1_EXTENSION_ROOT,
 			dissect_h245_RequestMessage },
 	{ 1,	"Response",	ASN1_EXTENSION_ROOT,
@@ -19141,7 +19175,12 @@
 void
 dissect_h245(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
+	reset_h245_packet_info(&(h245_pi));
+        h245_pi.msg_type = H245_OTHER;
+
 	dissect_tpkt_encap(tvb, pinfo, tree, h245_reassembly, MultimediaSystemControlMessage_handle);
+
+	tap_queue_packet(h245_tap, pinfo, &h245_pi);
 }
 
 void
@@ -22431,8 +22470,9 @@
 	proto_register_subtree_array(ett, array_length(ett));
 	h245_module = prefs_register_protocol(proto_h245, NULL);
 	prefs_register_bool_preference(h245_module, "reassembly",
-		"Reassemble H.245 over TCP",
-		"Whether the dissector should reassemble H.245 PDUs spanning multiple TCP segments",
+		"Reassemble H.245 messages spanning multiple TCP segments",
+		"Whether the H.245 dissector should reassemble messages spanning multiple TCP segments."
+		" To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 		&h245_reassembly);
 	prefs_register_bool_preference(h245_module, "shorttypes",
 		"Show short message types",
@@ -22443,6 +22483,8 @@
 
 	nsp_object_dissector_table = register_dissector_table("h245.nsp.object", "H.245 NonStandardParameter (object)", FT_STRING, BASE_NONE);
 	nsp_h221_dissector_table = register_dissector_table("h245.nsp.h221", "H.245 NonStandardParameter (h221)", FT_UINT32, BASE_HEX);
+
+	h245_tap = register_tap("h245");
 }
 
 void
@@ -22456,3 +22498,13 @@
 	MultimediaSystemControlMessage_handle=create_dissector_handle(dissect_h245_MultimediaSystemControlMessage, proto_h245);
 	dissector_add_handle("udp.port", MultimediaSystemControlMessage_handle);
 }
+
+static void reset_h245_packet_info(h245_packet_info *pi)
+{
+        if(pi == NULL) {
+                return;
+        }
+
+        pi->msg_type = H245_OTHER;
+}
+
diff -urN ethereal-0.10.6/epan/dissectors/packet-h245.h ethereal-0.10.7/epan/dissectors/packet-h245.h
--- ethereal-0.10.6/epan/dissectors/packet-h245.h	2004-08-12 17:42:21.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-h245.h	2004-10-20 17:34:51.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for H.245 packet dissection
  * 2003  Ronnie Sahlberg
  *
- * $Id: packet-h245.h 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-h245.h 12142 2004-09-29 22:23:37Z etxrab $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -23,6 +23,29 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
+typedef enum _h245_msg_type {
+	H245_TermCapSet,
+	H245_TermCapSetAck,
+	H245_TermCapSetRjc,
+	H245_TermCapSetRls,
+	H245_OpenLogChn,
+	H245_OpenLogChnCnf,
+	H245_OpenLogChnAck,
+	H245_OpenLogChnRjc,	
+	H245_CloseLogChn,
+	H245_CloseLogChnAck,
+	H245_MastSlvDet,
+	H245_MastSlvDetAck,
+	H245_MastSlvDetRjc,
+	H245_MastSlvDetRls,
+        H245_OTHER
+} h245_msg_type;
+
+typedef struct _h245_packet_info {
+        h245_msg_type msg_type;         /* type of message */
+} h245_packet_info;
+
+
 extern void dissect_h245_MultimediaSystemControlMessage(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
 
 extern int dissect_h245_OpenLogicalChannel(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree);
diff -urN ethereal-0.10.6/epan/dissectors/packet-h248.c ethereal-0.10.7/epan/dissectors/packet-h248.c
--- ethereal-0.10.6/epan/dissectors/packet-h248.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-h248.c	2004-10-20 17:34:57.000000000 -0500
@@ -0,0 +1,5319 @@
+/* Do not modify this file.                                                   */
+/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
+/* ./packet-h248.c                                                            */
+/* ../../tools/asn2eth.py -X -b -e -p h248 -c h248.cnf -s packet-h248-template MEGACO.asn */
+
+/* Input file: packet-h248-template.c */
+
+/* packet-h248.c
+ * Routines for H.248/MEGACO packet dissection
+ * Ronnie Sahlberg 2004
+ *
+ * $Id: packet-h248.c 12288 2004-10-13 00:08:44Z sahlberg $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <epan/packet.h>
+#include <epan/conversation.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "packet-ber.h"
+#include "packet-h248.h"
+#include "packet-isup.h"
+#include "packet-q931.h"
+
+#define PNAME  "H.248 MEGACO"
+#define PSNAME "H248"
+#define PFNAME "h248"
+
+/*XXX this define should be moved to packet-m3ua.h ? */
+#define GATEWAY_CONTROL_PROTOCOL_USER_ID 14
+
+/* Initialize the protocol and registered fields */
+static int proto_h248				= -1;
+static int hf_h248_mtpaddress_ni	= -1;
+static int hf_h248_mtpaddress_pc	= -1;
+static int hf_h248_package_name		= -1;
+static int hf_h248_event_name		= -1;
+static int hf_h248_signal_name		= -1;
+static int hf_h248_package_bcp_BNCChar_PDU = -1;
+static int hf_h248_package_annex_C_TMR = -1;
+static int hf_h248_package_annex_C_USI = -1;
+static int hf_h248_package_annex_C_NSAP = -1;
+static int hf_h248_package_annex_C_BIR = -1;
+
+/*--- Included file: packet-h248-hf.c ---*/
+
+static int hf_h248_authHeader = -1;               /* AuthenticationHeader */
+static int hf_h248_mess = -1;                     /* Message */
+static int hf_h248_secParmIndex = -1;             /* SecurityParmIndex */
+static int hf_h248_seqNum = -1;                   /* SequenceNum */
+static int hf_h248_ad = -1;                       /* AuthData */
+static int hf_h248_version = -1;                  /* INTEGER_0_99 */
+static int hf_h248_mId = -1;                      /* MId */
+static int hf_h248_messageBody = -1;              /* T_messageBody */
+static int hf_h248_messageError = -1;             /* ErrorDescriptor */
+static int hf_h248_transactions = -1;             /* SEQUNCE_OF_Transaction */
+static int hf_h248_transactions_item = -1;        /* Transaction */
+static int hf_h248_ip4Address = -1;               /* IP4Address */
+static int hf_h248_ip6Address = -1;               /* IP6Address */
+static int hf_h248_domainName = -1;               /* DomainName */
+static int hf_h248_deviceName = -1;               /* PathName */
+static int hf_h248_mtpAddress = -1;               /* MtpAddress */
+static int hf_h248_domName = -1;                  /* IA5String */
+static int hf_h248_portNumber = -1;               /* INTEGER_0_65535 */
+static int hf_h248_iP4Address = -1;               /* OCTET_STRING_SIZE_4 */
+static int hf_h248_iP6Address = -1;               /* OCTET_STRING_SIZE_16 */
+static int hf_h248_transactionRequest = -1;       /* TransactionRequest */
+static int hf_h248_transactionPending = -1;       /* TransactionPending */
+static int hf_h248_transactionReply = -1;         /* TransactionReply */
+static int hf_h248_transactionResponseAck = -1;   /* TransactionResponseAck */
+static int hf_h248_transactionId = -1;            /* TransactionId */
+static int hf_h248_actions = -1;                  /* SEQUNCE_OF_ActionRequest */
+static int hf_h248_actions_item = -1;             /* ActionRequest */
+static int hf_h248_immAckRequired = -1;           /* NULL */
+static int hf_h248_transactionResult = -1;        /* T_transactionResult */
+static int hf_h248_transactionError = -1;         /* ErrorDescriptor */
+static int hf_h248_actionReplies = -1;            /* SEQUNCE_OF_ActionReply */
+static int hf_h248_actionReplies_item = -1;       /* ActionReply */
+static int hf_h248_TransactionResponseAck_item = -1;  /* TransactionAck */
+static int hf_h248_firstAck = -1;                 /* TransactionId */
+static int hf_h248_lastAck = -1;                  /* TransactionId */
+static int hf_h248_errorCode = -1;                /* ErrorCode */
+static int hf_h248_errorText = -1;                /* ErrorText */
+static int hf_h248_contextId = -1;                /* ContextID */
+static int hf_h248_contextRequest = -1;           /* ContextRequest */
+static int hf_h248_contextAttrAuditReq = -1;      /* ContextAttrAuditRequest */
+static int hf_h248_commandRequests = -1;          /* SEQUNCE_OF_CommandRequest */
+static int hf_h248_commandRequests_item = -1;     /* CommandRequest */
+static int hf_h248_errorDescriptor = -1;          /* ErrorDescriptor */
+static int hf_h248_contextReply = -1;             /* ContextRequest */
+static int hf_h248_commandReply = -1;             /* SEQUNCE_OF_CommandReply */
+static int hf_h248_commandReply_item = -1;        /* CommandReply */
+static int hf_h248_priority = -1;                 /* INTEGER_0_15 */
+static int hf_h248_emergency = -1;                /* BOOLEAN */
+static int hf_h248_topologyReq = -1;              /* SEQUNCE_OF_TopologyRequest */
+static int hf_h248_topologyReq_item = -1;         /* TopologyRequest */
+static int hf_h248_topology = -1;                 /* NULL */
+static int hf_h248_cAAREmergency = -1;            /* NULL */
+static int hf_h248_cAARPriority = -1;             /* NULL */
+static int hf_h248_command = -1;                  /* Command */
+static int hf_h248_optional = -1;                 /* NULL */
+static int hf_h248_wildcardReturn = -1;           /* NULL */
+static int hf_h248_addReq = -1;                   /* AmmRequest */
+static int hf_h248_moveReq = -1;                  /* AmmRequest */
+static int hf_h248_modReq = -1;                   /* AmmRequest */
+static int hf_h248_subtractReq = -1;              /* SubtractRequest */
+static int hf_h248_auditCapRequest = -1;          /* AuditRequest */
+static int hf_h248_auditValueRequest = -1;        /* AuditRequest */
+static int hf_h248_notifyReq = -1;                /* NotifyRequest */
+static int hf_h248_serviceChangeReq = -1;         /* ServiceChangeRequest */
+static int hf_h248_addReply = -1;                 /* AmmsReply */
+static int hf_h248_moveReply = -1;                /* AmmsReply */
+static int hf_h248_modReply = -1;                 /* AmmsReply */
+static int hf_h248_subtractReply = -1;            /* AmmsReply */
+static int hf_h248_auditCapReply = -1;            /* AuditReply */
+static int hf_h248_auditValueReply = -1;          /* AuditReply */
+static int hf_h248_notifyReply = -1;              /* NotifyReply */
+static int hf_h248_serviceChangeReply = -1;       /* ServiceChangeReply */
+static int hf_h248_terminationFrom = -1;          /* TerminationID */
+static int hf_h248_terminationTo = -1;            /* TerminationID */
+static int hf_h248_topologyDirection = -1;        /* T_topologyDirection */
+static int hf_h248_streamID = -1;                 /* StreamID */
+static int hf_h248_terminationIDList = -1;        /* TerminationIDList */
+static int hf_h248_descriptors = -1;              /* SEQUNCE_OF_AmmDescriptor */
+static int hf_h248_descriptors_item = -1;         /* AmmDescriptor */
+static int hf_h248_mediaDescriptor = -1;          /* MediaDescriptor */
+static int hf_h248_modemDescriptor = -1;          /* ModemDescriptor */
+static int hf_h248_muxDescriptor = -1;            /* MuxDescriptor */
+static int hf_h248_eventsDescriptor = -1;         /* EventsDescriptor */
+static int hf_h248_eventBufferDescriptor = -1;    /* EventBufferDescriptor */
+static int hf_h248_signalsDescriptor = -1;        /* SignalsDescriptor */
+static int hf_h248_digitMapDescriptor = -1;       /* DigitMapDescriptor */
+static int hf_h248_auditDescriptor = -1;          /* AuditDescriptor */
+static int hf_h248_terminationAudit = -1;         /* TerminationAudit */
+static int hf_h248_terminationID = -1;            /* TerminationID */
+static int hf_h248_contextAuditResult = -1;       /* TerminationIDList */
+static int hf_h248_error = -1;                    /* ErrorDescriptor */
+static int hf_h248_auditResult = -1;              /* AuditResult */
+static int hf_h248_terminationAuditResult = -1;   /* TerminationAudit */
+static int hf_h248_TerminationAudit_item = -1;    /* AuditReturnParameter */
+static int hf_h248_observedEventsDescriptor = -1;  /* ObservedEventsDescriptor */
+static int hf_h248_statisticsDescriptor = -1;     /* StatisticsDescriptor */
+static int hf_h248_packagesDescriptor = -1;       /* PackagesDescriptor */
+static int hf_h248_emptyDescriptors = -1;         /* AuditDescriptor */
+static int hf_h248_auditToken = -1;               /* T_auditToken */
+static int hf_h248_auditPropertyToken = -1;       /* SEQUNCE_OF_IndAuditParameter */
+static int hf_h248_auditPropertyToken_item = -1;  /* IndAuditParameter */
+static int hf_h248_indaudmediaDescriptor = -1;    /* IndAudMediaDescriptor */
+static int hf_h248_indaudeventsDescriptor = -1;   /* IndAudEventsDescriptor */
+static int hf_h248_indaudeventBufferDescriptor = -1;  /* IndAudEventBufferDescriptor */
+static int hf_h248_indaudsignalsDescriptor = -1;  /* IndAudSignalsDescriptor */
+static int hf_h248_indauddigitMapDescriptor = -1;  /* IndAudDigitMapDescriptor */
+static int hf_h248_indaudstatisticsDescriptor = -1;  /* IndAudStatisticsDescriptor */
+static int hf_h248_indaudpackagesDescriptor = -1;  /* IndAudPackagesDescriptor */
+static int hf_h248_indAudTerminationStateDescriptor = -1;  /* IndAudTerminationStateDescriptor */
+static int hf_h248_indAudMediaDescriptorStreams = -1;  /* indAudMediaDescriptorStreams */
+static int hf_h248_oneStream = -1;                /* IndAudStreamParms */
+static int hf_h248_multiStream = -1;              /* SEQUNCE_OF_IndAudStreamDescriptor */
+static int hf_h248_multiStream_item = -1;         /* IndAudStreamDescriptor */
+static int hf_h248_indAudStreamParms = -1;        /* IndAudStreamParms */
+static int hf_h248_iASPLocalControlDescriptor = -1;  /* IndAudLocalControlDescriptor */
+static int hf_h248_iASPLocalDescriptor = -1;      /* IndAudLocalRemoteDescriptor */
+static int hf_h248_iASPRemoteDescriptor = -1;     /* IndAudLocalRemoteDescriptor */
+static int hf_h248_iALCDStreamMode = -1;          /* NULL */
+static int hf_h248_iALCDReserveValue = -1;        /* NULL */
+static int hf_h248_iALCDReserveGroup = -1;        /* NULL */
+static int hf_h248_indAudPropertyParms = -1;      /* IndAudPropertyParms */
+static int hf_h248_name = -1;                     /* PkgdName */
+static int hf_h248_IndAudPropertyParms_item = -1;  /* IndAudPropertyParm */
+static int hf_h248_propGroupID = -1;              /* INTEGER_0_65535 */
+static int hf_h248_iAPropertyGroup = -1;          /* IndAudPropertyGroup */
+static int hf_h248_IndAudPropertyGroup_item = -1;  /* IndAudPropertyParm */
+static int hf_h248_eventBufferControl = -1;       /* NULL */
+static int hf_h248_iATSDServiceState = -1;        /* NULL */
+static int hf_h248_requestID = -1;                /* RequestID */
+static int hf_h248_iAEDPkgdName = -1;             /* PkgdName */
+static int hf_h248_iAEBDEventName = -1;           /* PkgdName */
+static int hf_h248_indAudSignal = -1;             /* IndAudSignal */
+static int hf_h248_indAudSeqSigList = -1;         /* IndAudSeqSigList */
+static int hf_h248_id = -1;                       /* INTEGER_0_65535 */
+static int hf_h248_iASignalList = -1;             /* IndAudSignal */
+static int hf_h248_iASignalName = -1;             /* PkgdName */
+static int hf_h248_digitMapName = -1;             /* DigitMapName */
+static int hf_h248_statName = -1;                 /* PkgdName */
+static int hf_h248_packageName = -1;              /* Name */
+static int hf_h248_packageVersion = -1;           /* INTEGER_0_99 */
+static int hf_h248_requestId = -1;                /* RequestID */
+static int hf_h248_observedEventLst = -1;         /* SEQUNCE_OF_ObservedEvent */
+static int hf_h248_observedEventLst_item = -1;    /* ObservedEvent */
+static int hf_h248_eventName = -1;                /* EventName */
+static int hf_h248_eventParList = -1;             /* EventParameters */
+static int hf_h248_timeNotation = -1;             /* TimeNotation */
+static int hf_h248_relation = -1;                 /* Relation */
+static int hf_h248_range = -1;                    /* BOOLEAN */
+static int hf_h248_sublist = -1;                  /* BOOLEAN */
+static int hf_h248_eventParameterName = -1;       /* Name */
+static int hf_h248_value = -1;                    /* Value */
+static int hf_h248_extraInfo = -1;                /* ExtraInfo */
+static int hf_h248_EventParameters_item = -1;     /* EventParameter */
+static int hf_h248_serviceChangeParms = -1;       /* ServiceChangeParm */
+static int hf_h248_serviceChangeResult = -1;      /* ServiceChangeResult */
+static int hf_h248_serviceChangeResParms = -1;    /* ServiceChangeResParm */
+static int hf_h248_wildcard = -1;                 /* SEQUNCE_OF_WildcardField */
+static int hf_h248_wildcard_item = -1;            /* WildcardField */
+static int hf_h248_terminationId = -1;            /* OCTET_STRING_SIZE_1_8 */
+static int hf_h248_TerminationIDList_item = -1;   /* TerminationID */
+static int hf_h248_termStateDescr = -1;           /* TerminationStateDescriptor */
+static int hf_h248_streams = -1;                  /* T_streams */
+static int hf_h248_mediaDescriptorOneStream = -1;  /* StreamParms */
+static int hf_h248_mediaDescriptorMultiStream = -1;  /* SEQUNCE_OF_StreamDescriptor */
+static int hf_h248_mediaDescriptorMultiStream_item = -1;  /* StreamDescriptor */
+static int hf_h248_streamParms = -1;              /* StreamParms */
+static int hf_h248_localControlDescriptor = -1;   /* LocalControlDescriptor */
+static int hf_h248_localDescriptor = -1;          /* LocalRemoteDescriptor */
+static int hf_h248_remoteDescriptor = -1;         /* LocalRemoteDescriptor */
+static int hf_h248_streamMode = -1;               /* StreamMode */
+static int hf_h248_reserveValue = -1;             /* BOOLEAN */
+static int hf_h248_reserveGroup = -1;             /* BOOLEAN */
+static int hf_h248_propertyParms = -1;            /* PropertyParms */
+static int hf_h248_propertyName = -1;             /* PkgdName */
+static int hf_h248_propertyParamValue = -1;       /* SEQUNCE_OF_PropertyID */
+static int hf_h248_value_item = -1;               /* PropertyID */
+static int hf_h248_PropertyParms_item = -1;       /* PropertyParm */
+static int hf_h248_propGrps = -1;                 /* SEQUNCE_OF_PropertyGroup */
+static int hf_h248_propGrps_item = -1;            /* PropertyGroup */
+static int hf_h248_PropertyGroup_item = -1;       /* PropertyParm */
+static int hf_h248_tSEventBufferControl = -1;     /* EventBufferControl */
+static int hf_h248_serviceState = -1;             /* ServiceState */
+static int hf_h248_muxType = -1;                  /* MuxType */
+static int hf_h248_termList = -1;                 /* SEQUNCE_OF_TerminationID */
+static int hf_h248_termList_item = -1;            /* TerminationID */
+static int hf_h248_nonStandardData = -1;          /* NonStandardData */
+static int hf_h248_eventList = -1;                /* RequestedEvents */
+static int hf_h248_pkgdName = -1;                 /* EventName */
+static int hf_h248_eventAction = -1;              /* RequestedActions */
+static int hf_h248_evParList = -1;                /* EventParameters */
+static int hf_h248_RequestedEvents_item = -1;     /* RequestedEvent */
+static int hf_h248_keepActive = -1;               /* BOOLEAN */
+static int hf_h248_eventDM = -1;                  /* EventDM */
+static int hf_h248_secondEvent = -1;              /* SecondEventsDescriptor */
+static int hf_h248_digitMapValue = -1;            /* DigitMapValue */
+static int hf_h248_secondaryEventList = -1;       /* SEQUNCE_OF_SecondRequestedEvent */
+static int hf_h248_eventList_item = -1;           /* SecondRequestedEvent */
+static int hf_h248_secondaryEventAction = -1;     /* SecondRequestedActions */
+static int hf_h248_EventBufferDescriptor_item = -1;  /* EventSpec */
+static int hf_h248_SignalsDescriptor_item = -1;   /* SignalRequest */
+static int hf_h248_signal = -1;                   /* Signal */
+static int hf_h248_seqSigList = -1;               /* SeqSigList */
+static int hf_h248_signalList = -1;               /* SEQUNCE_OF_Signal */
+static int hf_h248_signalList_item = -1;          /* Signal */
+static int hf_h248_signalName = -1;               /* SignalName */
+static int hf_h248_sigType = -1;                  /* SignalType */
+static int hf_h248_duration = -1;                 /* INTEGER_0_65535 */
+static int hf_h248_notifyCompletion = -1;         /* NotifyCompletion */
+static int hf_h248_sigParList = -1;               /* SEQUNCE_OF_SigParameter */
+static int hf_h248_sigParList_item = -1;          /* SigParameter */
+static int hf_h248_sigParameterName = -1;         /* Name */
+static int hf_h248_mtl = -1;                      /* SEQUNCE_OF_ModemType */
+static int hf_h248_mtl_item = -1;                 /* ModemType */
+static int hf_h248_mpl = -1;                      /* PropertyParms */
+static int hf_h248_startTimer = -1;               /* INTEGER_0_99 */
+static int hf_h248_shortTimer = -1;               /* INTEGER_0_99 */
+static int hf_h248_longTimer = -1;                /* INTEGER_0_99 */
+static int hf_h248_digitMapBody = -1;             /* IA5String */
+static int hf_h248_durationTimer = -1;            /* INTEGER_0_99 */
+static int hf_h248_serviceChangeMethod = -1;      /* ServiceChangeMethod */
+static int hf_h248_serviceChangeAddress = -1;     /* ServiceChangeAddress */
+static int hf_h248_serviceChangeVersion = -1;     /* INTEGER_0_99 */
+static int hf_h248_serviceChangeProfile = -1;     /* ServiceChangeProfile */
+static int hf_h248_serviceChangeReason = -1;      /* Value */
+static int hf_h248_serviceChangeDelay = -1;       /* INTEGER_0_4294967295 */
+static int hf_h248_serviceChangeMgcId = -1;       /* MId */
+static int hf_h248_timeStamp = -1;                /* TimeNotation */
+static int hf_h248_serviceChangeInfo = -1;        /* AuditDescriptor */
+static int hf_h248_timestamp = -1;                /* TimeNotation */
+static int hf_h248_profileName = -1;              /* IA5String_SIZE_1_67 */
+static int hf_h248_PackagesDescriptor_item = -1;  /* PackagesItem */
+static int hf_h248_StatisticsDescriptor_item = -1;  /* StatisticsParameter */
+static int hf_h248_statValue = -1;                /* Value */
+static int hf_h248_nonStandardIdentifier = -1;    /* NonStandardIdentifier */
+static int hf_h248_data = -1;                     /* OCTET_STRING */
+static int hf_h248_object = -1;                   /* OBJECT_IDENTIFIER */
+static int hf_h248_h221NonStandard = -1;          /* H221NonStandard */
+static int hf_h248_experimental = -1;             /* IA5String_SIZE_8 */
+static int hf_h248_t35CountryCode1 = -1;          /* INTEGER_0_255 */
+static int hf_h248_t35CountryCode2 = -1;          /* INTEGER_0_255 */
+static int hf_h248_t35Extension = -1;             /* INTEGER_0_255 */
+static int hf_h248_manufacturerCode = -1;         /* INTEGER_0_65535 */
+static int hf_h248_date = -1;                     /* IA5String_SIZE_8 */
+static int hf_h248_time = -1;                     /* IA5String_SIZE_8 */
+static int hf_h248_Value_item = -1;               /* OCTET_STRING */
+/* named bits */
+static int hf_h248_T_auditToken_muxToken = -1;
+static int hf_h248_T_auditToken_modemToken = -1;
+static int hf_h248_T_auditToken_mediaToken = -1;
+static int hf_h248_T_auditToken_eventsToken = -1;
+static int hf_h248_T_auditToken_signalsToken = -1;
+static int hf_h248_T_auditToken_digitMapToken = -1;
+static int hf_h248_T_auditToken_statsToken = -1;
+static int hf_h248_T_auditToken_observedEventsToken = -1;
+static int hf_h248_T_auditToken_packagesToken = -1;
+static int hf_h248_T_auditToken_eventBufferToken = -1;
+static int hf_h248_NotifyCompletion_onTimeOut = -1;
+static int hf_h248_NotifyCompletion_onInterruptByEvent = -1;
+static int hf_h248_NotifyCompletion_onInterruptByNewSignalDescr = -1;
+static int hf_h248_NotifyCompletion_otherReason = -1;
+
+/*--- End of included file: packet-h248-hf.c ---*/
+
+
+/* Initialize the subtree pointers */
+static gint ett_h248 = -1;
+static gint ett_mtpaddress = -1;
+static gint ett_packagename = -1;
+
+/*--- Included file: packet-h248-ett.c ---*/
+
+static gint ett_h248_MegacoMessage = -1;
+static gint ett_h248_AuthenticationHeader = -1;
+static gint ett_h248_Message = -1;
+static gint ett_h248_T_messageBody = -1;
+static gint ett_h248_SEQUNCE_OF_Transaction = -1;
+static gint ett_h248_MId = -1;
+static gint ett_h248_DomainName = -1;
+static gint ett_h248_IP4Address = -1;
+static gint ett_h248_IP6Address = -1;
+static gint ett_h248_Transaction = -1;
+static gint ett_h248_TransactionRequest = -1;
+static gint ett_h248_SEQUNCE_OF_ActionRequest = -1;
+static gint ett_h248_TransactionPending = -1;
+static gint ett_h248_TransactionReply = -1;
+static gint ett_h248_T_transactionResult = -1;
+static gint ett_h248_SEQUNCE_OF_ActionReply = -1;
+static gint ett_h248_TransactionResponseAck = -1;
+static gint ett_h248_TransactionAck = -1;
+static gint ett_h248_ErrorDescriptor = -1;
+static gint ett_h248_ActionRequest = -1;
+static gint ett_h248_SEQUNCE_OF_CommandRequest = -1;
+static gint ett_h248_ActionReply = -1;
+static gint ett_h248_SEQUNCE_OF_CommandReply = -1;
+static gint ett_h248_ContextRequest = -1;
+static gint ett_h248_SEQUNCE_OF_TopologyRequest = -1;
+static gint ett_h248_ContextAttrAuditRequest = -1;
+static gint ett_h248_CommandRequest = -1;
+static gint ett_h248_Command = -1;
+static gint ett_h248_CommandReply = -1;
+static gint ett_h248_TopologyRequest = -1;
+static gint ett_h248_AmmRequest = -1;
+static gint ett_h248_SEQUNCE_OF_AmmDescriptor = -1;
+static gint ett_h248_AmmDescriptor = -1;
+static gint ett_h248_AmmsReply = -1;
+static gint ett_h248_SubtractRequest = -1;
+static gint ett_h248_AuditRequest = -1;
+static gint ett_h248_AuditReply = -1;
+static gint ett_h248_AuditResult = -1;
+static gint ett_h248_TerminationAudit = -1;
+static gint ett_h248_AuditReturnParameter = -1;
+static gint ett_h248_AuditDescriptor = -1;
+static gint ett_h248_T_auditToken = -1;
+static gint ett_h248_SEQUNCE_OF_IndAuditParameter = -1;
+static gint ett_h248_IndAuditParameter = -1;
+static gint ett_h248_IndAudMediaDescriptor = -1;
+static gint ett_h248_indAudMediaDescriptorStreams = -1;
+static gint ett_h248_SEQUNCE_OF_IndAudStreamDescriptor = -1;
+static gint ett_h248_IndAudStreamDescriptor = -1;
+static gint ett_h248_IndAudStreamParms = -1;
+static gint ett_h248_IndAudLocalControlDescriptor = -1;
+static gint ett_h248_IndAudPropertyParm = -1;
+static gint ett_h248_IndAudPropertyParms = -1;
+static gint ett_h248_IndAudLocalRemoteDescriptor = -1;
+static gint ett_h248_IndAudPropertyGroup = -1;
+static gint ett_h248_IndAudTerminationStateDescriptor = -1;
+static gint ett_h248_IndAudEventsDescriptor = -1;
+static gint ett_h248_IndAudEventBufferDescriptor = -1;
+static gint ett_h248_IndAudSignalsDescriptor = -1;
+static gint ett_h248_IndAudSeqSigList = -1;
+static gint ett_h248_IndAudSignal = -1;
+static gint ett_h248_IndAudDigitMapDescriptor = -1;
+static gint ett_h248_IndAudStatisticsDescriptor = -1;
+static gint ett_h248_IndAudPackagesDescriptor = -1;
+static gint ett_h248_NotifyRequest = -1;
+static gint ett_h248_NotifyReply = -1;
+static gint ett_h248_ObservedEventsDescriptor = -1;
+static gint ett_h248_SEQUNCE_OF_ObservedEvent = -1;
+static gint ett_h248_ObservedEvent = -1;
+static gint ett_h248_ExtraInfo = -1;
+static gint ett_h248_EventParameter = -1;
+static gint ett_h248_EventParameters = -1;
+static gint ett_h248_ServiceChangeRequest = -1;
+static gint ett_h248_ServiceChangeReply = -1;
+static gint ett_h248_ServiceChangeResult = -1;
+static gint ett_h248_TerminationID = -1;
+static gint ett_h248_SEQUNCE_OF_WildcardField = -1;
+static gint ett_h248_TerminationIDList = -1;
+static gint ett_h248_MediaDescriptor = -1;
+static gint ett_h248_T_streams = -1;
+static gint ett_h248_SEQUNCE_OF_StreamDescriptor = -1;
+static gint ett_h248_StreamDescriptor = -1;
+static gint ett_h248_StreamParms = -1;
+static gint ett_h248_LocalControlDescriptor = -1;
+static gint ett_h248_PropertyParm = -1;
+static gint ett_h248_SEQUNCE_OF_PropertyID = -1;
+static gint ett_h248_PropertyParms = -1;
+static gint ett_h248_LocalRemoteDescriptor = -1;
+static gint ett_h248_SEQUNCE_OF_PropertyGroup = -1;
+static gint ett_h248_PropertyGroup = -1;
+static gint ett_h248_TerminationStateDescriptor = -1;
+static gint ett_h248_MuxDescriptor = -1;
+static gint ett_h248_SEQUNCE_OF_TerminationID = -1;
+static gint ett_h248_EventsDescriptor = -1;
+static gint ett_h248_RequestedEvent = -1;
+static gint ett_h248_RequestedEvents = -1;
+static gint ett_h248_RequestedActions = -1;
+static gint ett_h248_EventDM = -1;
+static gint ett_h248_SecondEventsDescriptor = -1;
+static gint ett_h248_SEQUNCE_OF_SecondRequestedEvent = -1;
+static gint ett_h248_SecondRequestedEvent = -1;
+static gint ett_h248_SecondRequestedActions = -1;
+static gint ett_h248_EventBufferDescriptor = -1;
+static gint ett_h248_EventSpec = -1;
+static gint ett_h248_SignalsDescriptor = -1;
+static gint ett_h248_SignalRequest = -1;
+static gint ett_h248_SeqSigList = -1;
+static gint ett_h248_SEQUNCE_OF_Signal = -1;
+static gint ett_h248_Signal = -1;
+static gint ett_h248_SEQUNCE_OF_SigParameter = -1;
+static gint ett_h248_NotifyCompletion = -1;
+static gint ett_h248_SigParameter = -1;
+static gint ett_h248_ModemDescriptor = -1;
+static gint ett_h248_SEQUNCE_OF_ModemType = -1;
+static gint ett_h248_DigitMapDescriptor = -1;
+static gint ett_h248_DigitMapValue = -1;
+static gint ett_h248_ServiceChangeParm = -1;
+static gint ett_h248_ServiceChangeAddress = -1;
+static gint ett_h248_ServiceChangeResParm = -1;
+static gint ett_h248_ServiceChangeProfile = -1;
+static gint ett_h248_PackagesDescriptor = -1;
+static gint ett_h248_PackagesItem = -1;
+static gint ett_h248_StatisticsDescriptor = -1;
+static gint ett_h248_StatisticsParameter = -1;
+static gint ett_h248_NonStandardData = -1;
+static gint ett_h248_NonStandardIdentifier = -1;
+static gint ett_h248_H221NonStandard = -1;
+static gint ett_h248_TimeNotation = -1;
+static gint ett_h248_Value = -1;
+
+/*--- End of included file: packet-h248-ett.c ---*/
+
+
+
+static dissector_table_t h248_package_bin_dissector_table=NULL;
+
+
+static const value_string package_name_vals[] = {
+  {   0x0000, "Media stream properties H.248.1 Annex C" },
+  {   0x0001, "g H.248.1 Annex E" },
+  {   0x0002, "root H.248.1 Annex E" },
+  {   0x0003, "tonegen H.248.1 Annex E" },
+  {   0x0004, "tonedet H.248.1 Annex E" },
+  {   0x0005, "dg H.248.1 Annex E" },
+  {   0x0006, "dd H.248.1 Annex E" },
+  {   0x0007, "cg H.248.1 Annex E" }, 
+  {   0x0008, "cd H.248.1 Annex E" },
+  {   0x0009, "al H.248.1 Annex E" },
+  {   0x000a, "ct H.248.1 Annex E" }, 
+  {   0x000b, "nt H.248.1 Annex E" },
+  {   0x000c, "rtp H.248.1 Annex E" },
+  {   0x000d, "tdmc H.248.1 Annex E" },
+  {   0x000e, "ftmd H.248.1 Annex E" },
+  {   0x000f, "txc H.248.2" },											/* H.248.2 */
+  {   0x0010, "txp H.248.2" },
+  {   0x0011, "ctyp H.248.2" },
+  {   0x0012, "fax H.248.2" },
+  {   0x0013, "ipfax H.248.2" },
+  {   0x0014, "dis H.248.3" },											/* H.248.3 */
+  {   0x0015, "key H.248.3" },
+  {   0x0016, "kp H.248.3" },
+  {   0x0017, "labelkey H.248.3" },   
+  {   0x0018, "kf H.248.3" },
+  {   0x0019, "ind H.248.3" },
+  {   0x001a, "ks H.248.3" },
+  {   0x001b, "anci H.248.3" },
+  {   0x001c, "dtd H.248.6" },											/* H.248.6 */
+  {   0x001d, "an H.248.7" },											/* H.248.7 */
+  {   0x001e, "Bearer Characteristics Q.1950 Annex A" }, 				/* Q.1950 Annex A */ 
+  {   0x001f, "Bearer Network Connection Cut Q.1950 Annex A" },
+  {   0x0020, "Reuse Idle Q.1950 Annex A" },
+  {   0x0021, "Generic Bearer Connection Q.1950 Annex A" }, 
+  {   0x0022, "Bearer Control Tunnelling Q.1950 Annex A" },
+  {   0x0023, "Basic Call Progress Tones Q.1950 Annex A" },
+  {   0x0024, "Expanded Call Progress Tones Q.1950 Annex A" },
+  {   0x0025, "Basic Services Tones Q.1950 Annex A" },
+  {   0x0026, "Expanded Services Tones Q.1950 Annex A" },
+  {   0x0027, "Intrusion Tones Q.1950 Annex A" },
+  {   0x0028, "Business Tones Q.1950 Annex A" },
+  {   0x0029, "Media Gateway Resource Congestion Handling H.248.10" },	/* H.248.10 */
+  {   0x002a, "H245 package H248.12" },									/* H.248.12 */
+  {   0x002b, "H323 bearer control package H.248.12" },					/* H.248.12 */
+  {   0x002c, "H324 package H.248.12" },								/* H.248.12 */
+  {   0x002d, "H245 command package H.248.12" },						/* H.248.12 */
+  {   0x002e, "H245 indication package H.248.12" },						/* H.248.12 */
+  {   0x002f, "3G User Plane" },										/* 3GPP TS 29.232 v4.1.0 */
+  {   0x0030, "3G Circuit Switched Data" },
+  {   0x0031, "3G TFO Control" },
+  {   0x0032, "3G Expanded Call Progress Tones" },
+  {   0x0033, "Advanced Audio Server (AAS) Base)" },					/* H.248.9 */
+  {   0x0034, "AAS Digit Collection" }, 								/* H.248.9 */
+  {   0x0035, "AAS Recording" }, 										/* H.248.9 */
+  {   0x0036, "AAS Segment Management" },								/* H.248.9 */ 
+  {   0x0037, "Quality Alert Ceasing" },								/* H.248.13 */
+  {   0x0038, "Conferencing Tones Generation" },						/* H.248.27 */
+  {   0x0039, "Diagnostic Tones Generation" },							/* H.248.27 */
+  {   0x003a, "Carrier Tones Generation Package H.248.23" },			/* H.248.27 */
+  {   0x003b, "Enhanced Alerting Package H.248.23" },					/* H.248.23 */
+  {   0x003c, "Analog Display Signalling Package H.248.23" },			/* H.248.23 */
+  {   0x003d, "Multi-Frequency Tone Generation Package H.248.24" },		/* H.248.24 */												   
+  {   0x003e, "H.248.23Multi-Frequency Tone Detection Package H.248.24" }, /* H.248.24 */
+  {   0x003f, "Basic CAS Package H.248.25" },							/* H.248.25 */												   
+  {   0x0040, "Robbed Bit Signalling Package H.248.25" },		        /* H.248.25 */
+  {   0x0041, "Operator Services and Emgergency Services Package H.248.25" },												   
+  {   0x0042, "Operator Services Extension Package H.248.25" },
+  {   0x0043, "Extended Analog Line Supervision Package H.248.26" },
+  {   0x0044, "Automatic Metering Package H.248.26" },  
+  {   0x0045, "Inactivity Timer Package H.248.14" },      
+  {   0x0046, "3G Modification of Link Characteristics Bearer Capability" }, /* 3GPP TS 29.232 v4.4.0 */ 
+  {   0x0047, "Base Announcement Syntax H.248.9" },
+  {   0x0048, "Voice Variable Syntax H.248.9" },
+  {   0x0049, "Announcement Set Syntax H.248.9" },
+  {   0x004a, "Phrase Variable Syntax H.248.9" },
+  {   0x004b, "Basic NAS package" },
+  {   0x004c, "NAS incoming package" },
+  {   0x004d, "NAS outgoing package" },
+  {   0x004e, "NAS control package" },
+  {   0x004f, "NAS root package" },
+  {   0x0050, "Profile Handling Package H.248.18" }, 
+  {   0x0051, "Media Gateway Overload Control Package H.248.11" }, 
+  {   0x0052, "Extended DTMF Detection Package H.248.16" },
+  {   0x0053, "Quiet Termination Line Test" },
+  {   0x0054, "Loopback Line Test Response" }, 							/* H.248.17 */
+  {   0x0055, "ITU 404Hz Line Test" },									/* H.248.17 */
+  {   0x0056, "ITU 816Hz Line Test" },									/* H.248.17 */
+  {   0x0057, "ITU 1020Hz Line Test" },									/* H.248.17 */
+  {   0x0058, "ITU 2100Hz Disable Tone Line Test" },					/* H.248.17 */
+  {   0x0059, "ITU 2100Hz Disable Echo Canceller Tone Line Test" },		/* H.248.17 */
+  {   0x005a, "ITU 2804Hz Tone Line Test" },							/* H.248.17 */
+  {   0x005b, "ITU Noise Test Tone Line Test" },						/* H.248.17 */
+  {   0x005c, "ITU Digital Pseudo Random Test Line Test" },				/* H.248.17 */
+  {   0x005d, "ITU ATME No.2 Test Line Response" },						/* H.248.17 */
+  {   0x005e, "ANSI 1004Hz Test Tone Line Test" },						/* H.248.17 */
+  {   0x005f, "ANSI Test Responder Line Test" },						/* H.248.17 */
+  {   0x0060, "ANSI 2225Hz Test Progress Tone Line Test" },				/* H.248.17 */
+  {   0x0061, "ANSI Digital Test Signal Line Test" },					/* H.248.17 */
+  {   0x0062, "ANSI Inverting Loopback Line Test Repsonse" },			/* H.248.17 */
+  {   0x0063, "Extended H.324 Packages H.248.12 Annex A" },
+  {   0x0064, "Extended H.245 Command Package H.248.12 Annex A" },
+  {   0x0065, "Extended H.245 Indication Package H.248.12 Annex A" },
+  {   0x0066, "Enhanced DTMF Detection Package H.248.16" }, 
+  {   0x0067, "Connection Group Identity Package Q.1950 Annex E" }, 
+  {   0x0068, "CTM Text Transport 3GPP TS 29.232 v5.2.0" }, 
+  {   0x0069, "SPNE Control Package Q.115.0" },
+  {   0x006a, "Semi-permanent Connection Package H.248.21" },
+  {   0x006b, "Shared Risk Group Package H.248.22" },
+  {   0x006c, "isuptn Annex B of ITU-T Rec. J.171" },
+  {   0x006d, "Basic CAS Addressing Package H.248.25" },
+  {   0x006e, "Floor Control Package H.248.19" },
+  {   0x006f, "Indication of Being Viewed Package H.248.19" },
+  {   0x0070, "Volume Control Package H.248.19" },
+  {   0x0071, "UNASSIGNED" },
+  {   0x0072, "Volume Detection Package H.248.19" },
+  {   0x0073, "Volume Level Mixing Package H.248.19" },
+  {   0x0074, "Mixing Volume Level Control Package H.248.19" },
+  {   0x0075, "Voice Activated Video Switch Package H.248.19" },
+  {   0x0076, "Lecture Video Mode Package H.248.19" },
+  {   0x0077, "Contributing Video Source Package H.248.19" },
+  {   0x0078, "Video Window Package H.248.19" },
+  {   0x0079, "Tiled Window Package H.248.19" },
+  {   0x007a, "Adaptive Jitter Buffer Package H.248.31" },
+  {   0x007b, "International CAS Package H.248.28" },
+  {   0x007c, "CAS Blocking Package H.248.28" },
+  {   0x007d, "International CAS Compelled Package H.248.29" },
+  {   0x007e, "International CAS Compelled with Overlap Package H.248.29" },
+  {   0x007f, "International CAS Compelled with End-to-end Package H.248.29" },
+  {   0x0080, "RTCP XR Package H.248.30" },
+  {   0x0081, "RTCP XR Burst Metrics Package H.248.30" },
+  {   0x0082, "threegcsden 3G Circuit Switched Data" },				/* 3GPP TS 29.232 v5.6.0 */
+  {   0x0083, "threegiptra 3G Circuit Switched Data" },				/* 3GPP TS 29.232 v5.6.0 */
+  {   0x0084, "threegflex 3G Circuit Switched Data" },				/* 3GPP TS 29.232 v5.6.0 */												   
+  {   0x0085, "H.248 PCMSB" },
+  {   0x008a, "TIPHON Extended H.248/MEGACO Package" },				/* ETSI specification TS 101 3 */
+  {   0x008b, "Differentiated Services Package" },					/* Annex A of ETSI TS 102 333 */
+  {   0x008c, "Gate Management Package" },							/* Annex B of ETSI TS 102 333 */
+  {   0x008d, "Traffic Management Package" },						/* Annex C of ETSI TS 102 333 */
+  {   0x008e, "Gate Recovery Information Package" },				/* Annex D of ETSI TS 102 333 */
+  {   0x008f, "NAT Traversal Package" },							/* Annex E of ETSI TS 102 333 */
+  {   0x0090, "MPLS Package" },										/* Annex F of ETSI TS 102 333 */
+  {   0x0091, "VLAN Package" },										/* Annex G of ETSI TS 102 333 */
+  {   0x8000, "Ericsson IU" }, 
+  {   0x8001, "Ericsson UMTS and GSM Circuit" },
+  {   0x8002, "Ericsson Tone Generator Package" },
+  {   0x8003, "Ericsson Line Test Package" },
+  {   0x8004, "Nokia Advanced TFO Package" },
+  {   0x8005, "Nokia IWF Package" },
+  {   0x8006, "Nokia Root Package" },
+  {   0x8007, "Nokia Trace Package" },
+  {   0x8008, "Ericsson  V5.2 Layer" },
+  {   0x8009, "Ericsson Detailed Termination Information Package" },
+  {   0x800a, "Nokia Bearer Characteristics Package" },
+	{0,     NULL}
+};
+/* 
+ * This table consist of PackageName + EventName and its's corresponding string 
+ * 
+ */
+static const value_string event_name_vals[] = {
+  {   0x00000000, "Media stream properties H.248.1 Annex C" },
+  {   0x00010000, "g H.248.1 Annex E" },
+  {   0x00010001, "g, Cause" },
+  {   0x00010002, "g, Signal Completion" },
+  {   0x00210000, "Generic Bearer Connection Q.1950 Annex A" }, 
+  {   0x00210001, "GB BNC change" }, 
+  {   0x800a0000, "Nokia Bearer Characteristics Package" },
+	{0,     NULL}
+};
+
+/* 
+ * This table consist of PackageName + SignalName and its's corresponding string 
+ */
+static const value_string signal_name_vals[] = {
+  {   0x00000000, "Media stream properties H.248.1 Annex C" },
+  {   0x00010000, "g H.248.1 Annex E" },
+  {   0x00210000, "GB Generic Bearer Connection Q.1950 Annex A" }, 
+  {   0x00210001, "GB Establish BNC" }, 
+  {   0x00210002, "GB Modify BNC" }, 
+  {   0x00210003, "GB Release BNC" }, 
+  {   0x800a0000, "Nokia Bearer Characteristics Package" },
+	{0,     NULL}
+};
+
+static void 
+dissect_h248_annex_C_PDU(gboolean implicit_tag, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint16 name_minor) {
+	int offset = 0;
+	tvbuff_t *new_tvb;
+
+	switch ( name_minor ){
+		case 0x1001: /* Media */
+			proto_tree_add_text(tree, tvb, offset, -1,"Media");
+			break;
+		case 0x3002: /* BIR */
+			offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_h248_package_annex_C_BIR, &new_tvb);
+			break;
+		case 0x3003: /* NSAP */
+			offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_h248_package_annex_C_NSAP, &new_tvb);
+			dissect_nsap(new_tvb, 0,tvb_length_remaining(new_tvb, 0), tree);
+			break;
+		case 0x9001: /* TMR */
+			offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_h248_package_annex_C_TMR, NULL);
+			break;
+		case 0x9023: /* User Service Information */
+			offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_h248_package_annex_C_USI, &new_tvb);
+			dissect_q931_bearer_capability_ie(new_tvb, 0, 3, tree);
+			break;
+		default:
+			proto_tree_add_text(tree, tvb, offset, -1,"PropertyID not decoded(yet) 0x%x",name_minor);
+			break;
+	}
+}
+static const value_string BNCChar_vals[] = {
+  {   1, "aal1" },
+  {   2, "aal2" },
+  {   3, "aal1struct" },
+  {   4, "ipRtp" },
+  {   5, "tdm" },
+  { 0, NULL }
+};
+static void
+dissect_h248_package_data(gboolean implicit_tag, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,guint16 name_major, guint16 name_minor){
+
+guint offset=0;
+
+	switch ( name_major ){
+		case 0x0000: /* Media stream properties H.248.1 Annex C */
+			dissect_h248_annex_C_PDU(implicit_tag, tvb, pinfo, tree, name_minor);
+			break;
+		case 0x0001: /* g H.248.1 Annex E */
+			proto_tree_add_text(tree, tvb, 0, tvb_length_remaining(tvb, offset), "H.248: Dissector for Package/ID:0x%04x not implemented (yet).", name_major);
+			break;
+		case 0x001e: /* Bearer Characteristics Q.1950 Annex A */
+			offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_h248_package_bcp_BNCChar_PDU, NULL);
+			break;
+		case 0x0021: /* Generic Bearer Connection Q.1950 Annex A */
+			proto_tree_add_text(tree, tvb, 0, tvb_length_remaining(tvb, offset), "H.248: Dissector for Package/ID:0x%04x not implemented (yet).", name_major);
+			break;
+		default:
+			proto_tree_add_text(tree, tvb, 0, tvb_length_remaining(tvb, offset), "H.248: Dissector for Package/ID:0x%04x not implemented (yet).", name_major);
+			break;
+	}
+
+}
+static guint32 packageandid;
+
+static int 
+dissect_h248_PkgdName(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index) {
+  tvbuff_t *new_tvb;
+  proto_tree *package_tree=NULL;
+  guint16 name_major, name_minor;
+  int old_offset;
+
+  old_offset=offset;
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, &new_tvb);
+
+
+  /* this field is always 4 bytes  so just read it into two integers */
+  name_major=tvb_get_ntohs(new_tvb, 0);
+  name_minor=tvb_get_ntohs(new_tvb, 2);
+  packageandid=(name_major<<16)|name_minor;
+
+  /* do the prettification */
+  proto_item_append_text(ber_last_created_item, "  %s (%04x)", val_to_str(name_major, package_name_vals, "Unknown Package"), name_major);
+  if(tree){
+    package_tree = proto_item_add_subtree(ber_last_created_item, ett_packagename);
+  }
+  proto_tree_add_uint(package_tree, hf_h248_package_name, tvb, offset-4, 2, name_major);
+  return offset;
+}
+
+
+static int 
+dissect_h248_EventName(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index) {
+  tvbuff_t *new_tvb;
+  proto_tree *package_tree=NULL;
+  guint16 name_major, name_minor;
+  int old_offset;
+
+  old_offset=offset;
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, &new_tvb);
+
+
+  /* this field is always 4 bytes  so just read it into two integers */
+  name_major=tvb_get_ntohs(new_tvb, 0);
+  name_minor=tvb_get_ntohs(new_tvb, 2);
+  packageandid=(name_major<<16)|name_minor;
+
+  /* do the prettification */
+  proto_item_append_text(ber_last_created_item, "  %s (%04x)", val_to_str(name_major, package_name_vals, "Unknown Package"), name_major);
+  if(tree){
+    package_tree = proto_item_add_subtree(ber_last_created_item, ett_packagename);
+  }
+  proto_tree_add_uint(package_tree, hf_h248_event_name, tvb, offset-4, 4, packageandid);
+  return offset;
+}
+
+
+
+static int
+dissect_h248_SignalName(gboolean implicit_tag , tvbuff_t *tvb, int offset, packet_info *pinfo , proto_tree *tree, int hf_index) {
+  tvbuff_t *new_tvb;
+  proto_tree *package_tree=NULL;
+  guint16 name_major, name_minor;
+  int old_offset;
+
+  old_offset=offset;
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, &new_tvb);
+
+
+  /* this field is always 4 bytes  so just read it into two integers */
+  name_major=tvb_get_ntohs(new_tvb, 0);
+  name_minor=tvb_get_ntohs(new_tvb, 2);
+  packageandid=(name_major<<16)|name_minor;
+
+  /* do the prettification */
+  proto_item_append_text(ber_last_created_item, "  %s (%04x)", val_to_str(name_major, package_name_vals, "Unknown Package"), name_major);
+  if(tree){
+    package_tree = proto_item_add_subtree(ber_last_created_item, ett_packagename);
+  }
+  proto_tree_add_uint(package_tree, hf_h248_signal_name, tvb, offset-4, 4, packageandid);
+  return offset;
+}
+static int
+dissect_h248_PropertyID(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index _U_) {
+
+	guint8 class;
+	gboolean pc, ind;
+	guint32 tag;
+	guint32 len;
+	guint16 name_major;
+	guint16 name_minor;
+	int old_offset, end_offset;
+	tvbuff_t *next_tvb;
+
+	old_offset=offset;
+	offset=dissect_ber_identifier(pinfo, tree, tvb, offset, &class, &pc, &tag);
+	offset=dissect_ber_length(pinfo, tree, tvb, offset, &len, &ind);
+	end_offset=offset+len;
+
+	if( (class!=BER_CLASS_UNI)
+	  ||(tag!=BER_UNI_TAG_OCTETSTRING) ){
+		proto_tree_add_text(tree, tvb, offset-2, 2, "H.248 BER Error: OctetString expected but Class:%d PC:%d Tag:%d was unexpected", class, pc, tag);
+		return end_offset;
+	}
+
+
+	next_tvb = tvb_new_subset(tvb, offset , len , len );
+	name_major = packageandid >> 16;
+	name_minor = packageandid & 0xffff;
+/*
+	if(!dissector_try_port(h248_package_bin_dissector_table, name_major, next_tvb, pinfo, tree)){
+		proto_tree_add_text(tree, next_tvb, 0, tvb_length_remaining(tvb, offset), "H.248: Dissector for Package/ID:0x%08x not implemented (yet).", packageandid);
+
+		offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, old_offset, hf_index, NULL);
+	}
+*/
+	dissect_h248_package_data(implicit_tag, next_tvb, pinfo, tree, name_major, name_minor);
+	return end_offset;
+}
+
+
+
+static int 
+dissect_h248_MtpAddress(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index) {
+  tvbuff_t *new_tvb;
+  proto_tree *mtp_tree=NULL;
+  guint32 val;
+  int i, len, old_offset;
+
+  old_offset=offset;
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index, &new_tvb);
+
+
+  /* this field is either 2 or 4 bytes  so just read it into an integer */
+  val=0;
+  len=tvb_length(new_tvb);
+  for(i=0;i<len;i++){
+    val= (val<<8)|tvb_get_guint8(new_tvb, i);
+  }
+
+  /* do the prettification */
+  proto_item_append_text(ber_last_created_item, "  NI = %d, PC = %d ( %d-%d )", val&0x03,val>>2,val&0x03,val>>2);
+  if(tree){
+    mtp_tree = proto_item_add_subtree(ber_last_created_item, ett_mtpaddress);
+  }
+  proto_tree_add_uint(mtp_tree, hf_h248_mtpaddress_ni, tvb, old_offset, offset-old_offset, val&0x03);
+  proto_tree_add_uint(mtp_tree, hf_h248_mtpaddress_pc, tvb, old_offset, offset-old_offset, val>>2);
+
+
+  return offset;
+}
+
+
+
+/*--- Included file: packet-h248-fn.c ---*/
+
+/*--- Fields for imported types ---*/
+
+
+
+static int
+dissect_h248_SecurityParmIndex(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                    NULL);
+
+  return offset;
+}
+static int dissect_secParmIndex_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SecurityParmIndex(TRUE, tvb, offset, pinfo, tree, hf_h248_secParmIndex);
+}
+
+
+static int
+dissect_h248_SequenceNum(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                    NULL);
+
+  return offset;
+}
+static int dissect_seqNum_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SequenceNum(TRUE, tvb, offset, pinfo, tree, hf_h248_seqNum);
+}
+
+
+static int
+dissect_h248_AuthData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                    NULL);
+
+  return offset;
+}
+static int dissect_ad_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AuthData(TRUE, tvb, offset, pinfo, tree, hf_h248_ad);
+}
+
+static const ber_sequence AuthenticationHeader_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_secParmIndex_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_seqNum_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_ad_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_AuthenticationHeader(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                AuthenticationHeader_sequence, hf_index, ett_h248_AuthenticationHeader);
+
+  return offset;
+}
+static int dissect_authHeader_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AuthenticationHeader(TRUE, tvb, offset, pinfo, tree, hf_h248_authHeader);
+}
+
+
+
+static int
+dissect_h248_INTEGER_0_99(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_version_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_99(TRUE, tvb, offset, pinfo, tree, hf_h248_version);
+}
+static int dissect_packageVersion_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_99(TRUE, tvb, offset, pinfo, tree, hf_h248_packageVersion);
+}
+static int dissect_startTimer_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_99(TRUE, tvb, offset, pinfo, tree, hf_h248_startTimer);
+}
+static int dissect_shortTimer_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_99(TRUE, tvb, offset, pinfo, tree, hf_h248_shortTimer);
+}
+static int dissect_longTimer_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_99(TRUE, tvb, offset, pinfo, tree, hf_h248_longTimer);
+}
+static int dissect_durationTimer_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_99(TRUE, tvb, offset, pinfo, tree, hf_h248_durationTimer);
+}
+static int dissect_serviceChangeVersion_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_99(TRUE, tvb, offset, pinfo, tree, hf_h248_serviceChangeVersion);
+}
+
+
+static int
+dissect_h248_OCTET_STRING_SIZE_4(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                    NULL);
+
+  return offset;
+}
+static int dissect_iP4Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_OCTET_STRING_SIZE_4(TRUE, tvb, offset, pinfo, tree, hf_h248_iP4Address);
+}
+
+
+
+static int
+dissect_h248_INTEGER_0_65535(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_portNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_65535(TRUE, tvb, offset, pinfo, tree, hf_h248_portNumber);
+}
+static int dissect_propGroupID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_65535(TRUE, tvb, offset, pinfo, tree, hf_h248_propGroupID);
+}
+static int dissect_id_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_65535(TRUE, tvb, offset, pinfo, tree, hf_h248_id);
+}
+static int dissect_duration_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_65535(TRUE, tvb, offset, pinfo, tree, hf_h248_duration);
+}
+static int dissect_manufacturerCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_65535(TRUE, tvb, offset, pinfo, tree, hf_h248_manufacturerCode);
+}
+
+static const ber_sequence IP4Address_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_iP4Address_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_portNumber_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IP4Address(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                IP4Address_sequence, hf_index, ett_h248_IP4Address);
+
+  return offset;
+}
+static int dissect_ip4Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IP4Address(TRUE, tvb, offset, pinfo, tree, hf_h248_ip4Address);
+}
+
+
+static int
+dissect_h248_OCTET_STRING_SIZE_16(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                    NULL);
+
+  return offset;
+}
+static int dissect_iP6Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_OCTET_STRING_SIZE_16(TRUE, tvb, offset, pinfo, tree, hf_h248_iP6Address);
+}
+
+static const ber_sequence IP6Address_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_iP6Address_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_portNumber_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IP6Address(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                IP6Address_sequence, hf_index, ett_h248_IP6Address);
+
+  return offset;
+}
+static int dissect_ip6Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IP6Address(TRUE, tvb, offset, pinfo, tree, hf_h248_ip6Address);
+}
+
+
+static int
+dissect_h248_IA5String(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_restricted_string(implicit_tag, 0,
+                                         pinfo, tree, tvb, offset, hf_index,
+                                         NULL);
+
+  return offset;
+}
+static int dissect_domName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IA5String(TRUE, tvb, offset, pinfo, tree, hf_h248_domName);
+}
+static int dissect_digitMapBody_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IA5String(TRUE, tvb, offset, pinfo, tree, hf_h248_digitMapBody);
+}
+
+static const ber_sequence DomainName_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_domName_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_portNumber_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_DomainName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                DomainName_sequence, hf_index, ett_h248_DomainName);
+
+  return offset;
+}
+static int dissect_domainName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_DomainName(TRUE, tvb, offset, pinfo, tree, hf_h248_domainName);
+}
+
+
+static int
+dissect_h248_PathName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
+                                         pinfo, tree, tvb, offset, hf_index,
+                                         NULL);
+
+  return offset;
+}
+static int dissect_deviceName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_PathName(TRUE, tvb, offset, pinfo, tree, hf_h248_deviceName);
+}
+
+static int dissect_mtpAddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_MtpAddress(TRUE, tvb, offset, pinfo, tree, hf_h248_mtpAddress);
+}
+
+
+static const value_string MId_vals[] = {
+  {   0, "ip4Address" },
+  {   1, "ip6Address" },
+  {   2, "domainName" },
+  {   3, "deviceName" },
+  {   4, "mtpAddress" },
+  { 0, NULL }
+};
+
+static const ber_choice MId_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ip4Address_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_ip6Address_impl },
+  {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_domainName_impl },
+  {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_deviceName_impl },
+  {   4, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_mtpAddress_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_MId(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              MId_choice, hf_index, ett_h248_MId);
+
+  return offset;
+}
+static int dissect_mId(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_MId(FALSE, tvb, offset, pinfo, tree, hf_h248_mId);
+}
+static int dissect_serviceChangeMgcId(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_MId(FALSE, tvb, offset, pinfo, tree, hf_h248_serviceChangeMgcId);
+}
+
+
+
+static int
+dissect_h248_ErrorCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_errorCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ErrorCode(TRUE, tvb, offset, pinfo, tree, hf_h248_errorCode);
+}
+
+
+static int
+dissect_h248_ErrorText(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
+                                         pinfo, tree, tvb, offset, hf_index,
+                                         NULL);
+
+  return offset;
+}
+static int dissect_errorText_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ErrorText(TRUE, tvb, offset, pinfo, tree, hf_h248_errorText);
+}
+
+static const ber_sequence ErrorDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_errorCode_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_errorText_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_ErrorDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                ErrorDescriptor_sequence, hf_index, ett_h248_ErrorDescriptor);
+
+  return offset;
+}
+static int dissect_messageError_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ErrorDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_messageError);
+}
+static int dissect_transactionError_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ErrorDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_transactionError);
+}
+static int dissect_errorDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ErrorDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_errorDescriptor);
+}
+static int dissect_error_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ErrorDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_error);
+}
+
+
+
+static int
+dissect_h248_TransactionId(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_transactionId_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TransactionId(TRUE, tvb, offset, pinfo, tree, hf_h248_transactionId);
+}
+static int dissect_firstAck_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TransactionId(TRUE, tvb, offset, pinfo, tree, hf_h248_firstAck);
+}
+static int dissect_lastAck_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TransactionId(TRUE, tvb, offset, pinfo, tree, hf_h248_lastAck);
+}
+
+
+
+static int
+dissect_h248_ContextID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_contextId_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ContextID(TRUE, tvb, offset, pinfo, tree, hf_h248_contextId);
+}
+
+
+
+static int
+dissect_h248_INTEGER_0_15(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_priority_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_15(TRUE, tvb, offset, pinfo, tree, hf_h248_priority);
+}
+
+
+static int
+dissect_h248_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_boolean(pinfo, tree, tvb, offset, hf_index);
+
+  return offset;
+}
+static int dissect_emergency_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_BOOLEAN(TRUE, tvb, offset, pinfo, tree, hf_h248_emergency);
+}
+static int dissect_range_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_BOOLEAN(TRUE, tvb, offset, pinfo, tree, hf_h248_range);
+}
+static int dissect_sublist_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_BOOLEAN(TRUE, tvb, offset, pinfo, tree, hf_h248_sublist);
+}
+static int dissect_reserveValue_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_BOOLEAN(TRUE, tvb, offset, pinfo, tree, hf_h248_reserveValue);
+}
+static int dissect_reserveGroup_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_BOOLEAN(TRUE, tvb, offset, pinfo, tree, hf_h248_reserveGroup);
+}
+static int dissect_keepActive_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_BOOLEAN(TRUE, tvb, offset, pinfo, tree, hf_h248_keepActive);
+}
+
+
+static int
+dissect_h248_WildcardField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                    NULL);
+
+  return offset;
+}
+static int dissect_wildcard_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_WildcardField(FALSE, tvb, offset, pinfo, tree, hf_h248_wildcard_item);
+}
+
+static const ber_sequence SEQUNCE_OF_WildcardField_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_wildcard_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_WildcardField(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_WildcardField_sequence_of, hf_index, ett_h248_SEQUNCE_OF_WildcardField);
+
+  return offset;
+}
+static int dissect_wildcard_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_WildcardField(TRUE, tvb, offset, pinfo, tree, hf_h248_wildcard);
+}
+
+
+static int
+dissect_h248_OCTET_STRING_SIZE_1_8(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                    NULL);
+
+  return offset;
+}
+static int dissect_terminationId_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_OCTET_STRING_SIZE_1_8(TRUE, tvb, offset, pinfo, tree, hf_h248_terminationId);
+}
+
+static const ber_sequence TerminationID_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_wildcard_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_terminationId_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_TerminationID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                TerminationID_sequence, hf_index, ett_h248_TerminationID);
+
+  return offset;
+}
+static int dissect_terminationFrom_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TerminationID(TRUE, tvb, offset, pinfo, tree, hf_h248_terminationFrom);
+}
+static int dissect_terminationTo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TerminationID(TRUE, tvb, offset, pinfo, tree, hf_h248_terminationTo);
+}
+static int dissect_terminationID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TerminationID(TRUE, tvb, offset, pinfo, tree, hf_h248_terminationID);
+}
+static int dissect_TerminationIDList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TerminationID(FALSE, tvb, offset, pinfo, tree, hf_h248_TerminationIDList_item);
+}
+static int dissect_termList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TerminationID(FALSE, tvb, offset, pinfo, tree, hf_h248_termList_item);
+}
+
+
+static const value_string T_topologyDirection_vals[] = {
+  {   0, "bothway" },
+  {   1, "isolate" },
+  {   2, "oneway" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_h248_T_topologyDirection(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_topologyDirection_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_T_topologyDirection(TRUE, tvb, offset, pinfo, tree, hf_h248_topologyDirection);
+}
+
+
+
+static int
+dissect_h248_StreamID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_streamID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_StreamID(TRUE, tvb, offset, pinfo, tree, hf_h248_streamID);
+}
+
+static const ber_sequence TopologyRequest_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_terminationFrom_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_terminationTo_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_topologyDirection_impl },
+  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_streamID_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_TopologyRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                TopologyRequest_sequence, hf_index, ett_h248_TopologyRequest);
+
+  return offset;
+}
+static int dissect_topologyReq_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TopologyRequest(FALSE, tvb, offset, pinfo, tree, hf_h248_topologyReq_item);
+}
+
+static const ber_sequence SEQUNCE_OF_TopologyRequest_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_topologyReq_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_TopologyRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_TopologyRequest_sequence_of, hf_index, ett_h248_SEQUNCE_OF_TopologyRequest);
+
+  return offset;
+}
+static int dissect_topologyReq_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_TopologyRequest(TRUE, tvb, offset, pinfo, tree, hf_h248_topologyReq);
+}
+
+static const ber_sequence ContextRequest_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_priority_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_emergency_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_topologyReq_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_ContextRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                ContextRequest_sequence, hf_index, ett_h248_ContextRequest);
+
+  return offset;
+}
+static int dissect_contextRequest_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ContextRequest(TRUE, tvb, offset, pinfo, tree, hf_h248_contextRequest);
+}
+static int dissect_contextReply_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ContextRequest(TRUE, tvb, offset, pinfo, tree, hf_h248_contextReply);
+}
+
+
+static int
+dissect_h248_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  { proto_item *ti_tmp;
+  ti_tmp = proto_tree_add_item(tree, hf_index, tvb, offset>>8, 0, FALSE);
+  proto_item_append_text(ti_tmp, ": NULL");
+  }
+
+  return offset;
+}
+static int dissect_immAckRequired_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_NULL(TRUE, tvb, offset, pinfo, tree, hf_h248_immAckRequired);
+}
+static int dissect_topology_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_NULL(TRUE, tvb, offset, pinfo, tree, hf_h248_topology);
+}
+static int dissect_cAAREmergency_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_NULL(TRUE, tvb, offset, pinfo, tree, hf_h248_cAAREmergency);
+}
+static int dissect_cAARPriority_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_NULL(TRUE, tvb, offset, pinfo, tree, hf_h248_cAARPriority);
+}
+static int dissect_optional_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_NULL(TRUE, tvb, offset, pinfo, tree, hf_h248_optional);
+}
+static int dissect_wildcardReturn_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_NULL(TRUE, tvb, offset, pinfo, tree, hf_h248_wildcardReturn);
+}
+static int dissect_iALCDStreamMode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_NULL(TRUE, tvb, offset, pinfo, tree, hf_h248_iALCDStreamMode);
+}
+static int dissect_iALCDReserveValue_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_NULL(TRUE, tvb, offset, pinfo, tree, hf_h248_iALCDReserveValue);
+}
+static int dissect_iALCDReserveGroup_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_NULL(TRUE, tvb, offset, pinfo, tree, hf_h248_iALCDReserveGroup);
+}
+static int dissect_eventBufferControl_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_NULL(TRUE, tvb, offset, pinfo, tree, hf_h248_eventBufferControl);
+}
+static int dissect_iATSDServiceState_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_NULL(TRUE, tvb, offset, pinfo, tree, hf_h248_iATSDServiceState);
+}
+
+static const ber_sequence ContextAttrAuditRequest_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_topology_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cAAREmergency_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cAARPriority_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_ContextAttrAuditRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                ContextAttrAuditRequest_sequence, hf_index, ett_h248_ContextAttrAuditRequest);
+
+  return offset;
+}
+static int dissect_contextAttrAuditReq_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ContextAttrAuditRequest(TRUE, tvb, offset, pinfo, tree, hf_h248_contextAttrAuditReq);
+}
+
+static const ber_sequence TerminationIDList_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_TerminationIDList_item },
+};
+
+static int
+dissect_h248_TerminationIDList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   TerminationIDList_sequence_of, hf_index, ett_h248_TerminationIDList);
+
+  return offset;
+}
+static int dissect_terminationIDList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TerminationIDList(TRUE, tvb, offset, pinfo, tree, hf_h248_terminationIDList);
+}
+static int dissect_contextAuditResult_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TerminationIDList(TRUE, tvb, offset, pinfo, tree, hf_h248_contextAuditResult);
+}
+
+static int dissect_name_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_PkgdName(TRUE, tvb, offset, pinfo, tree, hf_h248_name);
+}
+static int dissect_iAEDPkgdName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_PkgdName(TRUE, tvb, offset, pinfo, tree, hf_h248_iAEDPkgdName);
+}
+static int dissect_iAEBDEventName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_PkgdName(TRUE, tvb, offset, pinfo, tree, hf_h248_iAEBDEventName);
+}
+static int dissect_iASignalName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_PkgdName(TRUE, tvb, offset, pinfo, tree, hf_h248_iASignalName);
+}
+static int dissect_statName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_PkgdName(TRUE, tvb, offset, pinfo, tree, hf_h248_statName);
+}
+static int dissect_propertyName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_PkgdName(TRUE, tvb, offset, pinfo, tree, hf_h248_propertyName);
+}
+
+static int dissect_value_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_PropertyID(FALSE, tvb, offset, pinfo, tree, hf_h248_value_item);
+}
+
+static const ber_sequence SEQUNCE_OF_PropertyID_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_value_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_PropertyID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_PropertyID_sequence_of, hf_index, ett_h248_SEQUNCE_OF_PropertyID);
+
+  return offset;
+}
+static int dissect_propertyParamValue_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_PropertyID(TRUE, tvb, offset, pinfo, tree, hf_h248_propertyParamValue);
+}
+
+
+static const value_string Relation_vals[] = {
+  {   0, "greaterThan" },
+  {   1, "smallerThan" },
+  {   2, "unequalTo" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_h248_Relation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_relation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_Relation(TRUE, tvb, offset, pinfo, tree, hf_h248_relation);
+}
+
+
+static const value_string ExtraInfo_vals[] = {
+  {   0, "relation" },
+  {   1, "range" },
+  {   2, "sublist" },
+  { 0, NULL }
+};
+
+static const ber_choice ExtraInfo_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_relation_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_range_impl },
+  {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_sublist_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_ExtraInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              ExtraInfo_choice, hf_index, ett_h248_ExtraInfo);
+
+  return offset;
+}
+static int dissect_extraInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ExtraInfo(FALSE, tvb, offset, pinfo, tree, hf_h248_extraInfo);
+}
+
+static const ber_sequence PropertyParm_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_propertyName_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_propertyParamValue_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_extraInfo },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_PropertyParm(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                PropertyParm_sequence, hf_index, ett_h248_PropertyParm);
+
+  return offset;
+}
+static int dissect_PropertyParms_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_PropertyParm(FALSE, tvb, offset, pinfo, tree, hf_h248_PropertyParms_item);
+}
+static int dissect_PropertyGroup_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_PropertyParm(FALSE, tvb, offset, pinfo, tree, hf_h248_PropertyGroup_item);
+}
+
+static const ber_sequence PropertyParms_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_PropertyParms_item },
+};
+
+static int
+dissect_h248_PropertyParms(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   PropertyParms_sequence_of, hf_index, ett_h248_PropertyParms);
+
+  return offset;
+}
+static int dissect_propertyParms_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_PropertyParms(TRUE, tvb, offset, pinfo, tree, hf_h248_propertyParms);
+}
+static int dissect_mpl_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_PropertyParms(TRUE, tvb, offset, pinfo, tree, hf_h248_mpl);
+}
+
+
+static const value_string EventBufferControl_vals[] = {
+  {   0, "off" },
+  {   1, "lockStep" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_h248_EventBufferControl(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_tSEventBufferControl_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_EventBufferControl(TRUE, tvb, offset, pinfo, tree, hf_h248_tSEventBufferControl);
+}
+
+
+static const value_string ServiceState_vals[] = {
+  {   0, "test" },
+  {   1, "outOfSvc" },
+  {   2, "inSvc" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_h248_ServiceState(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_serviceState_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ServiceState(TRUE, tvb, offset, pinfo, tree, hf_h248_serviceState);
+}
+
+static const ber_sequence TerminationStateDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_propertyParms_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tSEventBufferControl_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceState_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_TerminationStateDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                TerminationStateDescriptor_sequence, hf_index, ett_h248_TerminationStateDescriptor);
+
+  return offset;
+}
+static int dissect_termStateDescr_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TerminationStateDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_termStateDescr);
+}
+
+
+static const value_string StreamMode_vals[] = {
+  {   0, "sendOnly" },
+  {   1, "recvOnly" },
+  {   2, "sendRecv" },
+  {   3, "inactive" },
+  {   4, "loopBack" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_h248_StreamMode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_streamMode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_StreamMode(TRUE, tvb, offset, pinfo, tree, hf_h248_streamMode);
+}
+
+static const ber_sequence LocalControlDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_streamMode_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reserveValue_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reserveGroup_impl },
+  { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_propertyParms_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_LocalControlDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                LocalControlDescriptor_sequence, hf_index, ett_h248_LocalControlDescriptor);
+
+  return offset;
+}
+static int dissect_localControlDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_LocalControlDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_localControlDescriptor);
+}
+
+static const ber_sequence PropertyGroup_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_PropertyGroup_item },
+};
+
+static int
+dissect_h248_PropertyGroup(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   PropertyGroup_sequence_of, hf_index, ett_h248_PropertyGroup);
+
+  return offset;
+}
+static int dissect_propGrps_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_PropertyGroup(FALSE, tvb, offset, pinfo, tree, hf_h248_propGrps_item);
+}
+
+static const ber_sequence SEQUNCE_OF_PropertyGroup_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_propGrps_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_PropertyGroup(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_PropertyGroup_sequence_of, hf_index, ett_h248_SEQUNCE_OF_PropertyGroup);
+
+  return offset;
+}
+static int dissect_propGrps_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_PropertyGroup(TRUE, tvb, offset, pinfo, tree, hf_h248_propGrps);
+}
+
+static const ber_sequence LocalRemoteDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_propGrps_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_LocalRemoteDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                LocalRemoteDescriptor_sequence, hf_index, ett_h248_LocalRemoteDescriptor);
+
+  return offset;
+}
+static int dissect_localDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_LocalRemoteDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_localDescriptor);
+}
+static int dissect_remoteDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_LocalRemoteDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_remoteDescriptor);
+}
+
+static const ber_sequence StreamParms_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_localControlDescriptor_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_localDescriptor_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_remoteDescriptor_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_StreamParms(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                StreamParms_sequence, hf_index, ett_h248_StreamParms);
+
+  return offset;
+}
+static int dissect_mediaDescriptorOneStream_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_StreamParms(TRUE, tvb, offset, pinfo, tree, hf_h248_mediaDescriptorOneStream);
+}
+static int dissect_streamParms_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_StreamParms(TRUE, tvb, offset, pinfo, tree, hf_h248_streamParms);
+}
+
+static const ber_sequence StreamDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_streamID_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_streamParms_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_StreamDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                StreamDescriptor_sequence, hf_index, ett_h248_StreamDescriptor);
+
+  return offset;
+}
+static int dissect_mediaDescriptorMultiStream_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_StreamDescriptor(FALSE, tvb, offset, pinfo, tree, hf_h248_mediaDescriptorMultiStream_item);
+}
+
+static const ber_sequence SEQUNCE_OF_StreamDescriptor_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_mediaDescriptorMultiStream_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_StreamDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_StreamDescriptor_sequence_of, hf_index, ett_h248_SEQUNCE_OF_StreamDescriptor);
+
+  return offset;
+}
+static int dissect_mediaDescriptorMultiStream_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_StreamDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_mediaDescriptorMultiStream);
+}
+
+
+static const value_string T_streams_vals[] = {
+  {   0, "oneStream" },
+  {   1, "multiStream" },
+  { 0, NULL }
+};
+
+static const ber_choice T_streams_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mediaDescriptorOneStream_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_mediaDescriptorMultiStream_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_T_streams(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              T_streams_choice, hf_index, ett_h248_T_streams);
+
+  return offset;
+}
+static int dissect_streams(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_T_streams(FALSE, tvb, offset, pinfo, tree, hf_h248_streams);
+}
+
+static const ber_sequence MediaDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_termStateDescr_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_streams },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_MediaDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                MediaDescriptor_sequence, hf_index, ett_h248_MediaDescriptor);
+
+  return offset;
+}
+static int dissect_mediaDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_MediaDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_mediaDescriptor);
+}
+
+
+static const value_string ModemType_vals[] = {
+  {   0, "v18" },
+  {   1, "v22" },
+  {   2, "v22bis" },
+  {   3, "v32" },
+  {   4, "v32bis" },
+  {   5, "v34" },
+  {   6, "v90" },
+  {   7, "v91" },
+  {   8, "synchISDN" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_h248_ModemType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_mtl_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ModemType(FALSE, tvb, offset, pinfo, tree, hf_h248_mtl_item);
+}
+
+static const ber_sequence SEQUNCE_OF_ModemType_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_mtl_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_ModemType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_ModemType_sequence_of, hf_index, ett_h248_SEQUNCE_OF_ModemType);
+
+  return offset;
+}
+static int dissect_mtl_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_ModemType(TRUE, tvb, offset, pinfo, tree, hf_h248_mtl);
+}
+
+
+static int
+dissect_h248_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset,
+                                         hf_index, NULL);
+
+  return offset;
+}
+static int dissect_object_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_OBJECT_IDENTIFIER(TRUE, tvb, offset, pinfo, tree, hf_h248_object);
+}
+
+
+
+static int
+dissect_h248_INTEGER_0_255(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_t35CountryCode1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_255(TRUE, tvb, offset, pinfo, tree, hf_h248_t35CountryCode1);
+}
+static int dissect_t35CountryCode2_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_255(TRUE, tvb, offset, pinfo, tree, hf_h248_t35CountryCode2);
+}
+static int dissect_t35Extension_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_255(TRUE, tvb, offset, pinfo, tree, hf_h248_t35Extension);
+}
+
+static const ber_sequence H221NonStandard_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_t35CountryCode1_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_t35CountryCode2_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_t35Extension_impl },
+  { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_manufacturerCode_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_H221NonStandard(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                H221NonStandard_sequence, hf_index, ett_h248_H221NonStandard);
+
+  return offset;
+}
+static int dissect_h221NonStandard_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_H221NonStandard(TRUE, tvb, offset, pinfo, tree, hf_h248_h221NonStandard);
+}
+
+
+static int
+dissect_h248_IA5String_SIZE_8(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_restricted_string(implicit_tag, 2,
+                                         pinfo, tree, tvb, offset, hf_index,
+                                         NULL);
+
+  return offset;
+}
+static int dissect_experimental_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IA5String_SIZE_8(TRUE, tvb, offset, pinfo, tree, hf_h248_experimental);
+}
+static int dissect_date_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IA5String_SIZE_8(TRUE, tvb, offset, pinfo, tree, hf_h248_date);
+}
+static int dissect_time_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IA5String_SIZE_8(TRUE, tvb, offset, pinfo, tree, hf_h248_time);
+}
+
+
+static const value_string NonStandardIdentifier_vals[] = {
+  {   0, "object" },
+  {   1, "h221NonStandard" },
+  {   2, "experimental" },
+  { 0, NULL }
+};
+
+static const ber_choice NonStandardIdentifier_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_object_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_h221NonStandard_impl },
+  {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_experimental_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_NonStandardIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              NonStandardIdentifier_choice, hf_index, ett_h248_NonStandardIdentifier);
+
+  return offset;
+}
+static int dissect_nonStandardIdentifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_NonStandardIdentifier(FALSE, tvb, offset, pinfo, tree, hf_h248_nonStandardIdentifier);
+}
+
+
+static int
+dissect_h248_OCTET_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                    NULL);
+
+  return offset;
+}
+static int dissect_data_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_OCTET_STRING(TRUE, tvb, offset, pinfo, tree, hf_h248_data);
+}
+static int dissect_Value_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_OCTET_STRING(FALSE, tvb, offset, pinfo, tree, hf_h248_Value_item);
+}
+
+static const ber_sequence NonStandardData_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_NOTCHKTAG, dissect_nonStandardIdentifier },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_data_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_NonStandardData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                NonStandardData_sequence, hf_index, ett_h248_NonStandardData);
+
+  return offset;
+}
+static int dissect_nonStandardData_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_NonStandardData(TRUE, tvb, offset, pinfo, tree, hf_h248_nonStandardData);
+}
+
+static const ber_sequence ModemDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mtl_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_mpl_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nonStandardData_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_ModemDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                ModemDescriptor_sequence, hf_index, ett_h248_ModemDescriptor);
+
+  return offset;
+}
+static int dissect_modemDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ModemDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_modemDescriptor);
+}
+
+
+static const value_string MuxType_vals[] = {
+  {   0, "h221" },
+  {   1, "h223" },
+  {   2, "h226" },
+  {   3, "v76" },
+  {   4, "nx64k" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_h248_MuxType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_muxType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_MuxType(TRUE, tvb, offset, pinfo, tree, hf_h248_muxType);
+}
+
+static const ber_sequence SEQUNCE_OF_TerminationID_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_termList_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_TerminationID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_TerminationID_sequence_of, hf_index, ett_h248_SEQUNCE_OF_TerminationID);
+
+  return offset;
+}
+static int dissect_termList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_TerminationID(TRUE, tvb, offset, pinfo, tree, hf_h248_termList);
+}
+
+static const ber_sequence MuxDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_muxType_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_termList_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nonStandardData_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_MuxDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                MuxDescriptor_sequence, hf_index, ett_h248_MuxDescriptor);
+
+  return offset;
+}
+static int dissect_muxDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_MuxDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_muxDescriptor);
+}
+
+
+
+static int
+dissect_h248_RequestID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_requestID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_RequestID(TRUE, tvb, offset, pinfo, tree, hf_h248_requestID);
+}
+static int dissect_requestId_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_RequestID(TRUE, tvb, offset, pinfo, tree, hf_h248_requestId);
+}
+
+static int dissect_eventName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_EventName(TRUE, tvb, offset, pinfo, tree, hf_h248_eventName);
+}
+static int dissect_pkgdName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_EventName(TRUE, tvb, offset, pinfo, tree, hf_h248_pkgdName);
+}
+
+
+static int
+dissect_h248_Name(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                    NULL);
+
+  return offset;
+}
+static int dissect_packageName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_Name(TRUE, tvb, offset, pinfo, tree, hf_h248_packageName);
+}
+static int dissect_eventParameterName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_Name(TRUE, tvb, offset, pinfo, tree, hf_h248_eventParameterName);
+}
+static int dissect_sigParameterName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_Name(TRUE, tvb, offset, pinfo, tree, hf_h248_sigParameterName);
+}
+
+
+static int
+dissect_h248_DigitMapName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_h248_Name(implicit_tag, tvb, offset, pinfo, tree, hf_index);
+
+  return offset;
+}
+static int dissect_digitMapName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_DigitMapName(TRUE, tvb, offset, pinfo, tree, hf_h248_digitMapName);
+}
+
+static const ber_sequence DigitMapValue_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_startTimer_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_shortTimer_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_longTimer_impl },
+  { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_digitMapBody_impl },
+  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_durationTimer_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_DigitMapValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                DigitMapValue_sequence, hf_index, ett_h248_DigitMapValue);
+
+  return offset;
+}
+static int dissect_digitMapValue_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_DigitMapValue(TRUE, tvb, offset, pinfo, tree, hf_h248_digitMapValue);
+}
+
+
+static const value_string EventDM_vals[] = {
+  {   0, "digitMapName" },
+  {   1, "digitMapValue" },
+  { 0, NULL }
+};
+
+static const ber_choice EventDM_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_digitMapName_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_digitMapValue_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_EventDM(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              EventDM_choice, hf_index, ett_h248_EventDM);
+
+  return offset;
+}
+static int dissect_eventDM(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_EventDM(FALSE, tvb, offset, pinfo, tree, hf_h248_eventDM);
+}
+
+static int dissect_signalName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SignalName(TRUE, tvb, offset, pinfo, tree, hf_h248_signalName);
+}
+
+
+static const value_string SignalType_vals[] = {
+  {   0, "brief" },
+  {   1, "onOff" },
+  {   2, "timeOut" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_h248_SignalType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_sigType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SignalType(TRUE, tvb, offset, pinfo, tree, hf_h248_sigType);
+}
+
+static const asn_namedbit NotifyCompletion_bits[] = {
+  {  0, &hf_h248_NotifyCompletion_onTimeOut, -1, -1, NULL, NULL },
+  {  1, &hf_h248_NotifyCompletion_onInterruptByEvent, -1, -1, NULL, NULL },
+  {  2, &hf_h248_NotifyCompletion_onInterruptByNewSignalDescr, -1, -1, NULL, NULL },
+  {  3, &hf_h248_NotifyCompletion_otherReason, -1, -1, NULL, NULL },
+  { 0, NULL, 0, 0, NULL, NULL }
+};
+
+static int
+dissect_h248_NotifyCompletion(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
+                                 NotifyCompletion_bits, hf_index, ett_h248_NotifyCompletion,
+                                 NULL);
+
+  return offset;
+}
+static int dissect_notifyCompletion_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_NotifyCompletion(TRUE, tvb, offset, pinfo, tree, hf_h248_notifyCompletion);
+}
+
+static const ber_sequence Value_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_Value_item },
+};
+
+static int
+dissect_h248_Value(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   Value_sequence_of, hf_index, ett_h248_Value);
+
+  return offset;
+}
+static int dissect_value_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_Value(TRUE, tvb, offset, pinfo, tree, hf_h248_value);
+}
+static int dissect_serviceChangeReason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_Value(TRUE, tvb, offset, pinfo, tree, hf_h248_serviceChangeReason);
+}
+static int dissect_statValue_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_Value(TRUE, tvb, offset, pinfo, tree, hf_h248_statValue);
+}
+
+static const ber_sequence SigParameter_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_sigParameterName_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_value_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_extraInfo },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_SigParameter(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                SigParameter_sequence, hf_index, ett_h248_SigParameter);
+
+  return offset;
+}
+static int dissect_sigParList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SigParameter(FALSE, tvb, offset, pinfo, tree, hf_h248_sigParList_item);
+}
+
+static const ber_sequence SEQUNCE_OF_SigParameter_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_sigParList_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_SigParameter(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_SigParameter_sequence_of, hf_index, ett_h248_SEQUNCE_OF_SigParameter);
+
+  return offset;
+}
+static int dissect_sigParList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_SigParameter(TRUE, tvb, offset, pinfo, tree, hf_h248_sigParList);
+}
+
+static const ber_sequence Signal_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_signalName_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_streamID_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sigType_impl },
+  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_duration_impl },
+  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_notifyCompletion_impl },
+  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_keepActive_impl },
+  { BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_sigParList_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_Signal(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                Signal_sequence, hf_index, ett_h248_Signal);
+
+  return offset;
+}
+static int dissect_signal_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_Signal(TRUE, tvb, offset, pinfo, tree, hf_h248_signal);
+}
+static int dissect_signalList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_Signal(FALSE, tvb, offset, pinfo, tree, hf_h248_signalList_item);
+}
+
+static const ber_sequence SEQUNCE_OF_Signal_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signalList_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_Signal(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_Signal_sequence_of, hf_index, ett_h248_SEQUNCE_OF_Signal);
+
+  return offset;
+}
+static int dissect_signalList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_Signal(TRUE, tvb, offset, pinfo, tree, hf_h248_signalList);
+}
+
+static const ber_sequence SeqSigList_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_id_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_signalList_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_SeqSigList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                SeqSigList_sequence, hf_index, ett_h248_SeqSigList);
+
+  return offset;
+}
+static int dissect_seqSigList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SeqSigList(TRUE, tvb, offset, pinfo, tree, hf_h248_seqSigList);
+}
+
+
+static const value_string SignalRequest_vals[] = {
+  {   0, "signal" },
+  {   1, "seqSigList" },
+  { 0, NULL }
+};
+
+static const ber_choice SignalRequest_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_signal_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_seqSigList_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_SignalRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              SignalRequest_choice, hf_index, ett_h248_SignalRequest);
+
+  return offset;
+}
+static int dissect_SignalsDescriptor_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SignalRequest(FALSE, tvb, offset, pinfo, tree, hf_h248_SignalsDescriptor_item);
+}
+
+static const ber_sequence SignalsDescriptor_sequence_of[1] = {
+  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_SignalsDescriptor_item },
+};
+
+static int
+dissect_h248_SignalsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SignalsDescriptor_sequence_of, hf_index, ett_h248_SignalsDescriptor);
+
+  return offset;
+}
+static int dissect_signalsDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SignalsDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_signalsDescriptor);
+}
+
+static const ber_sequence SecondRequestedActions_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_keepActive_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_eventDM },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_signalsDescriptor_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_SecondRequestedActions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                SecondRequestedActions_sequence, hf_index, ett_h248_SecondRequestedActions);
+
+  return offset;
+}
+static int dissect_secondaryEventAction_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SecondRequestedActions(TRUE, tvb, offset, pinfo, tree, hf_h248_secondaryEventAction);
+}
+
+static const ber_sequence EventParameter_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_eventParameterName_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_value_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_extraInfo },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_EventParameter(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                EventParameter_sequence, hf_index, ett_h248_EventParameter);
+
+  return offset;
+}
+static int dissect_EventParameters_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_EventParameter(FALSE, tvb, offset, pinfo, tree, hf_h248_EventParameters_item);
+}
+
+static const ber_sequence EventParameters_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_EventParameters_item },
+};
+
+static int
+dissect_h248_EventParameters(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   EventParameters_sequence_of, hf_index, ett_h248_EventParameters);
+
+  return offset;
+}
+static int dissect_eventParList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_EventParameters(TRUE, tvb, offset, pinfo, tree, hf_h248_eventParList);
+}
+static int dissect_evParList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_EventParameters(TRUE, tvb, offset, pinfo, tree, hf_h248_evParList);
+}
+
+static const ber_sequence SecondRequestedEvent_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_pkgdName_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_streamID_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_secondaryEventAction_impl },
+  { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_evParList_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_SecondRequestedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                SecondRequestedEvent_sequence, hf_index, ett_h248_SecondRequestedEvent);
+
+  return offset;
+}
+static int dissect_eventList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SecondRequestedEvent(FALSE, tvb, offset, pinfo, tree, hf_h248_eventList_item);
+}
+
+static const ber_sequence SEQUNCE_OF_SecondRequestedEvent_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_eventList_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_SecondRequestedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_SecondRequestedEvent_sequence_of, hf_index, ett_h248_SEQUNCE_OF_SecondRequestedEvent);
+
+  return offset;
+}
+static int dissect_secondaryEventList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_SecondRequestedEvent(TRUE, tvb, offset, pinfo, tree, hf_h248_secondaryEventList);
+}
+
+static const ber_sequence SecondEventsDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_requestID_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_secondaryEventList_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_SecondEventsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                SecondEventsDescriptor_sequence, hf_index, ett_h248_SecondEventsDescriptor);
+
+  return offset;
+}
+static int dissect_secondEvent_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SecondEventsDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_secondEvent);
+}
+
+static const ber_sequence RequestedActions_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_keepActive_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_eventDM },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_secondEvent_impl },
+  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_signalsDescriptor_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_RequestedActions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                RequestedActions_sequence, hf_index, ett_h248_RequestedActions);
+
+  return offset;
+}
+static int dissect_eventAction_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_RequestedActions(TRUE, tvb, offset, pinfo, tree, hf_h248_eventAction);
+}
+
+static const ber_sequence RequestedEvent_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_pkgdName_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_streamID_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_eventAction_impl },
+  { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_evParList_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_RequestedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                RequestedEvent_sequence, hf_index, ett_h248_RequestedEvent);
+
+  return offset;
+}
+static int dissect_RequestedEvents_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_RequestedEvent(FALSE, tvb, offset, pinfo, tree, hf_h248_RequestedEvents_item);
+}
+
+static const ber_sequence RequestedEvents_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_RequestedEvents_item },
+};
+
+static int
+dissect_h248_RequestedEvents(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   RequestedEvents_sequence_of, hf_index, ett_h248_RequestedEvents);
+
+  return offset;
+}
+static int dissect_eventList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_RequestedEvents(TRUE, tvb, offset, pinfo, tree, hf_h248_eventList);
+}
+
+static const ber_sequence EventsDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_requestID_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_eventList_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_EventsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                EventsDescriptor_sequence, hf_index, ett_h248_EventsDescriptor);
+
+  return offset;
+}
+static int dissect_eventsDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_EventsDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_eventsDescriptor);
+}
+
+static const ber_sequence EventSpec_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_eventName_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_streamID_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_eventParList_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_EventSpec(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                EventSpec_sequence, hf_index, ett_h248_EventSpec);
+
+  return offset;
+}
+static int dissect_EventBufferDescriptor_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_EventSpec(FALSE, tvb, offset, pinfo, tree, hf_h248_EventBufferDescriptor_item);
+}
+
+static const ber_sequence EventBufferDescriptor_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_EventBufferDescriptor_item },
+};
+
+static int
+dissect_h248_EventBufferDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   EventBufferDescriptor_sequence_of, hf_index, ett_h248_EventBufferDescriptor);
+
+  return offset;
+}
+static int dissect_eventBufferDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_EventBufferDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_eventBufferDescriptor);
+}
+
+static const ber_sequence DigitMapDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digitMapName_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digitMapValue_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_DigitMapDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                DigitMapDescriptor_sequence, hf_index, ett_h248_DigitMapDescriptor);
+
+  return offset;
+}
+static int dissect_digitMapDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_DigitMapDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_digitMapDescriptor);
+}
+
+static const asn_namedbit T_auditToken_bits[] = {
+  {  0, &hf_h248_T_auditToken_muxToken, -1, -1, NULL, NULL },
+  {  1, &hf_h248_T_auditToken_modemToken, -1, -1, NULL, NULL },
+  {  2, &hf_h248_T_auditToken_mediaToken, -1, -1, NULL, NULL },
+  {  3, &hf_h248_T_auditToken_eventsToken, -1, -1, NULL, NULL },
+  {  4, &hf_h248_T_auditToken_signalsToken, -1, -1, NULL, NULL },
+  {  5, &hf_h248_T_auditToken_digitMapToken, -1, -1, NULL, NULL },
+  {  6, &hf_h248_T_auditToken_statsToken, -1, -1, NULL, NULL },
+  {  7, &hf_h248_T_auditToken_observedEventsToken, -1, -1, NULL, NULL },
+  {  8, &hf_h248_T_auditToken_packagesToken, -1, -1, NULL, NULL },
+  {  9, &hf_h248_T_auditToken_eventBufferToken, -1, -1, NULL, NULL },
+  { 0, NULL, 0, 0, NULL, NULL }
+};
+
+static int
+dissect_h248_T_auditToken(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
+                                 T_auditToken_bits, hf_index, ett_h248_T_auditToken,
+                                 NULL);
+
+  return offset;
+}
+static int dissect_auditToken_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_T_auditToken(TRUE, tvb, offset, pinfo, tree, hf_h248_auditToken);
+}
+
+static const ber_sequence IndAudPropertyParm_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_name_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IndAudPropertyParm(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                IndAudPropertyParm_sequence, hf_index, ett_h248_IndAudPropertyParm);
+
+  return offset;
+}
+static int dissect_IndAudPropertyParms_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudPropertyParm(FALSE, tvb, offset, pinfo, tree, hf_h248_IndAudPropertyParms_item);
+}
+static int dissect_IndAudPropertyGroup_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudPropertyParm(FALSE, tvb, offset, pinfo, tree, hf_h248_IndAudPropertyGroup_item);
+}
+
+static const ber_sequence IndAudPropertyParms_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_IndAudPropertyParms_item },
+};
+
+static int
+dissect_h248_IndAudPropertyParms(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   IndAudPropertyParms_sequence_of, hf_index, ett_h248_IndAudPropertyParms);
+
+  return offset;
+}
+static int dissect_indAudPropertyParms_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudPropertyParms(TRUE, tvb, offset, pinfo, tree, hf_h248_indAudPropertyParms);
+}
+
+static const ber_sequence IndAudTerminationStateDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_indAudPropertyParms_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_eventBufferControl_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_iATSDServiceState_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IndAudTerminationStateDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                IndAudTerminationStateDescriptor_sequence, hf_index, ett_h248_IndAudTerminationStateDescriptor);
+
+  return offset;
+}
+static int dissect_indAudTerminationStateDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudTerminationStateDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_indAudTerminationStateDescriptor);
+}
+
+static const ber_sequence IndAudLocalControlDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_iALCDStreamMode_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_iALCDReserveValue_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_iALCDReserveGroup_impl },
+  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_indAudPropertyParms_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IndAudLocalControlDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                IndAudLocalControlDescriptor_sequence, hf_index, ett_h248_IndAudLocalControlDescriptor);
+
+  return offset;
+}
+static int dissect_iASPLocalControlDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudLocalControlDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_iASPLocalControlDescriptor);
+}
+
+static const ber_sequence IndAudPropertyGroup_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_IndAudPropertyGroup_item },
+};
+
+static int
+dissect_h248_IndAudPropertyGroup(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   IndAudPropertyGroup_sequence_of, hf_index, ett_h248_IndAudPropertyGroup);
+
+  return offset;
+}
+static int dissect_iAPropertyGroup_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudPropertyGroup(TRUE, tvb, offset, pinfo, tree, hf_h248_iAPropertyGroup);
+}
+
+static const ber_sequence IndAudLocalRemoteDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_propGroupID_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_iAPropertyGroup_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IndAudLocalRemoteDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                IndAudLocalRemoteDescriptor_sequence, hf_index, ett_h248_IndAudLocalRemoteDescriptor);
+
+  return offset;
+}
+static int dissect_iASPLocalDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudLocalRemoteDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_iASPLocalDescriptor);
+}
+static int dissect_iASPRemoteDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudLocalRemoteDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_iASPRemoteDescriptor);
+}
+
+static const ber_sequence IndAudStreamParms_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_iASPLocalControlDescriptor_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_iASPLocalDescriptor_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_iASPRemoteDescriptor_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IndAudStreamParms(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                IndAudStreamParms_sequence, hf_index, ett_h248_IndAudStreamParms);
+
+  return offset;
+}
+static int dissect_oneStream_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudStreamParms(TRUE, tvb, offset, pinfo, tree, hf_h248_oneStream);
+}
+static int dissect_indAudStreamParms_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudStreamParms(TRUE, tvb, offset, pinfo, tree, hf_h248_indAudStreamParms);
+}
+
+static const ber_sequence IndAudStreamDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_streamID_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_indAudStreamParms_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IndAudStreamDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                IndAudStreamDescriptor_sequence, hf_index, ett_h248_IndAudStreamDescriptor);
+
+  return offset;
+}
+static int dissect_multiStream_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudStreamDescriptor(FALSE, tvb, offset, pinfo, tree, hf_h248_multiStream_item);
+}
+
+static const ber_sequence SEQUNCE_OF_IndAudStreamDescriptor_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_multiStream_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_IndAudStreamDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_IndAudStreamDescriptor_sequence_of, hf_index, ett_h248_SEQUNCE_OF_IndAudStreamDescriptor);
+
+  return offset;
+}
+static int dissect_multiStream_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_IndAudStreamDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_multiStream);
+}
+
+
+static const value_string indAudMediaDescriptorStreams_vals[] = {
+  {   0, "oneStream" },
+  {   1, "multiStream" },
+  { 0, NULL }
+};
+
+static const ber_choice indAudMediaDescriptorStreams_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_oneStream_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_multiStream_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_indAudMediaDescriptorStreams(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              indAudMediaDescriptorStreams_choice, hf_index, ett_h248_indAudMediaDescriptorStreams);
+
+  return offset;
+}
+static int dissect_indAudMediaDescriptorStreams(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_indAudMediaDescriptorStreams(FALSE, tvb, offset, pinfo, tree, hf_h248_indAudMediaDescriptorStreams);
+}
+
+static const ber_sequence IndAudMediaDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_indAudTerminationStateDescriptor_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_indAudMediaDescriptorStreams },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IndAudMediaDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                IndAudMediaDescriptor_sequence, hf_index, ett_h248_IndAudMediaDescriptor);
+
+  return offset;
+}
+static int dissect_indaudmediaDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudMediaDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_indaudmediaDescriptor);
+}
+
+static const ber_sequence IndAudEventsDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_requestID_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_iAEDPkgdName_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_streamID_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IndAudEventsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                IndAudEventsDescriptor_sequence, hf_index, ett_h248_IndAudEventsDescriptor);
+
+  return offset;
+}
+static int dissect_indaudeventsDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudEventsDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_indaudeventsDescriptor);
+}
+
+static const ber_sequence IndAudEventBufferDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_iAEBDEventName_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_streamID_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IndAudEventBufferDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                IndAudEventBufferDescriptor_sequence, hf_index, ett_h248_IndAudEventBufferDescriptor);
+
+  return offset;
+}
+static int dissect_indaudeventBufferDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudEventBufferDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_indaudeventBufferDescriptor);
+}
+
+static const ber_sequence IndAudSignal_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_iASignalName_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_streamID_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IndAudSignal(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                IndAudSignal_sequence, hf_index, ett_h248_IndAudSignal);
+
+  return offset;
+}
+static int dissect_indAudSignal_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudSignal(TRUE, tvb, offset, pinfo, tree, hf_h248_indAudSignal);
+}
+static int dissect_iASignalList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudSignal(TRUE, tvb, offset, pinfo, tree, hf_h248_iASignalList);
+}
+
+static const ber_sequence IndAudSeqSigList_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_id_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_iASignalList_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IndAudSeqSigList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                IndAudSeqSigList_sequence, hf_index, ett_h248_IndAudSeqSigList);
+
+  return offset;
+}
+static int dissect_indAudSeqSigList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudSeqSigList(TRUE, tvb, offset, pinfo, tree, hf_h248_indAudSeqSigList);
+}
+
+
+static const value_string IndAudSignalsDescriptor_vals[] = {
+  {   0, "signal" },
+  {   1, "seqSigList" },
+  { 0, NULL }
+};
+
+static const ber_choice IndAudSignalsDescriptor_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_indAudSignal_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_indAudSeqSigList_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IndAudSignalsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              IndAudSignalsDescriptor_choice, hf_index, ett_h248_IndAudSignalsDescriptor);
+
+  return offset;
+}
+static int dissect_indaudsignalsDescriptor(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudSignalsDescriptor(FALSE, tvb, offset, pinfo, tree, hf_h248_indaudsignalsDescriptor);
+}
+
+static const ber_sequence IndAudDigitMapDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_digitMapName_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IndAudDigitMapDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                IndAudDigitMapDescriptor_sequence, hf_index, ett_h248_IndAudDigitMapDescriptor);
+
+  return offset;
+}
+static int dissect_indauddigitMapDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudDigitMapDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_indauddigitMapDescriptor);
+}
+
+static const ber_sequence IndAudStatisticsDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_statName_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IndAudStatisticsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                IndAudStatisticsDescriptor_sequence, hf_index, ett_h248_IndAudStatisticsDescriptor);
+
+  return offset;
+}
+static int dissect_indaudstatisticsDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudStatisticsDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_indaudstatisticsDescriptor);
+}
+
+static const ber_sequence IndAudPackagesDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_packageName_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_packageVersion_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IndAudPackagesDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                IndAudPackagesDescriptor_sequence, hf_index, ett_h248_IndAudPackagesDescriptor);
+
+  return offset;
+}
+static int dissect_indaudpackagesDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAudPackagesDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_indaudpackagesDescriptor);
+}
+
+
+static const value_string IndAuditParameter_vals[] = {
+  {   0, "indaudmediaDescriptor" },
+  {   1, "indaudeventsDescriptor" },
+  {   2, "indaudeventBufferDescriptor" },
+  {   3, "indaudsignalsDescriptor" },
+  {   4, "indauddigitMapDescriptor" },
+  {   5, "indaudstatisticsDescriptor" },
+  {   6, "indaudpackagesDescriptor" },
+  { 0, NULL }
+};
+
+static const ber_choice IndAuditParameter_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_indaudmediaDescriptor_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_indaudeventsDescriptor_impl },
+  {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_indaudeventBufferDescriptor_impl },
+  {   3, BER_CLASS_CON, 3, 0, dissect_indaudsignalsDescriptor },
+  {   4, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_indauddigitMapDescriptor_impl },
+  {   5, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_indaudstatisticsDescriptor_impl },
+  {   6, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_indaudpackagesDescriptor_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_IndAuditParameter(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              IndAuditParameter_choice, hf_index, ett_h248_IndAuditParameter);
+
+  return offset;
+}
+static int dissect_auditPropertyToken_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IndAuditParameter(FALSE, tvb, offset, pinfo, tree, hf_h248_auditPropertyToken_item);
+}
+
+static const ber_sequence SEQUNCE_OF_IndAuditParameter_sequence_of[1] = {
+  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_auditPropertyToken_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_IndAuditParameter(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_IndAuditParameter_sequence_of, hf_index, ett_h248_SEQUNCE_OF_IndAuditParameter);
+
+  return offset;
+}
+static int dissect_auditPropertyToken_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_IndAuditParameter(TRUE, tvb, offset, pinfo, tree, hf_h248_auditPropertyToken);
+}
+
+static const ber_sequence AuditDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_auditToken_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_auditPropertyToken_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_AuditDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                AuditDescriptor_sequence, hf_index, ett_h248_AuditDescriptor);
+
+  return offset;
+}
+static int dissect_auditDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AuditDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_auditDescriptor);
+}
+static int dissect_emptyDescriptors_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AuditDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_emptyDescriptors);
+}
+static int dissect_serviceChangeInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AuditDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_serviceChangeInfo);
+}
+
+
+static const value_string AmmDescriptor_vals[] = {
+  {   0, "mediaDescriptor" },
+  {   1, "modemDescriptor" },
+  {   2, "muxDescriptor" },
+  {   3, "eventsDescriptor" },
+  {   4, "eventBufferDescriptor" },
+  {   5, "signalsDescriptor" },
+  {   6, "digitMapDescriptor" },
+  {   7, "auditDescriptor" },
+  { 0, NULL }
+};
+
+static const ber_choice AmmDescriptor_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mediaDescriptor_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_modemDescriptor_impl },
+  {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_muxDescriptor_impl },
+  {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_eventsDescriptor_impl },
+  {   4, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_eventBufferDescriptor_impl },
+  {   5, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_signalsDescriptor_impl },
+  {   6, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_digitMapDescriptor_impl },
+  {   7, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_auditDescriptor_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_AmmDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              AmmDescriptor_choice, hf_index, ett_h248_AmmDescriptor);
+
+  return offset;
+}
+static int dissect_descriptors_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AmmDescriptor(FALSE, tvb, offset, pinfo, tree, hf_h248_descriptors_item);
+}
+
+static const ber_sequence SEQUNCE_OF_AmmDescriptor_sequence_of[1] = {
+  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_descriptors_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_AmmDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_AmmDescriptor_sequence_of, hf_index, ett_h248_SEQUNCE_OF_AmmDescriptor);
+
+  return offset;
+}
+static int dissect_descriptors_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_AmmDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_descriptors);
+}
+
+static const ber_sequence AmmRequest_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_terminationIDList_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_descriptors_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_AmmRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                AmmRequest_sequence, hf_index, ett_h248_AmmRequest);
+
+  return offset;
+}
+static int dissect_addReq_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AmmRequest(TRUE, tvb, offset, pinfo, tree, hf_h248_addReq);
+}
+static int dissect_moveReq_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AmmRequest(TRUE, tvb, offset, pinfo, tree, hf_h248_moveReq);
+}
+static int dissect_modReq_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AmmRequest(TRUE, tvb, offset, pinfo, tree, hf_h248_modReq);
+}
+
+static const ber_sequence SubtractRequest_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_terminationIDList_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_auditDescriptor_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_SubtractRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                SubtractRequest_sequence, hf_index, ett_h248_SubtractRequest);
+
+  return offset;
+}
+static int dissect_subtractReq_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SubtractRequest(TRUE, tvb, offset, pinfo, tree, hf_h248_subtractReq);
+}
+
+static const ber_sequence AuditRequest_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_terminationID_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_auditDescriptor_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_AuditRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                AuditRequest_sequence, hf_index, ett_h248_AuditRequest);
+
+  return offset;
+}
+static int dissect_auditCapRequest_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AuditRequest(TRUE, tvb, offset, pinfo, tree, hf_h248_auditCapRequest);
+}
+static int dissect_auditValueRequest_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AuditRequest(TRUE, tvb, offset, pinfo, tree, hf_h248_auditValueRequest);
+}
+
+static const ber_sequence TimeNotation_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_date_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_time_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_TimeNotation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                TimeNotation_sequence, hf_index, ett_h248_TimeNotation);
+
+  return offset;
+}
+static int dissect_timeNotation_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TimeNotation(TRUE, tvb, offset, pinfo, tree, hf_h248_timeNotation);
+}
+static int dissect_timeStamp_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TimeNotation(TRUE, tvb, offset, pinfo, tree, hf_h248_timeStamp);
+}
+static int dissect_timestamp_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TimeNotation(TRUE, tvb, offset, pinfo, tree, hf_h248_timestamp);
+}
+
+static const ber_sequence ObservedEvent_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_eventName_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_streamID_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_eventParList_impl },
+  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_timeNotation_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_ObservedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                ObservedEvent_sequence, hf_index, ett_h248_ObservedEvent);
+
+  return offset;
+}
+static int dissect_observedEventLst_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ObservedEvent(FALSE, tvb, offset, pinfo, tree, hf_h248_observedEventLst_item);
+}
+
+static const ber_sequence SEQUNCE_OF_ObservedEvent_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_observedEventLst_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_ObservedEvent(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_ObservedEvent_sequence_of, hf_index, ett_h248_SEQUNCE_OF_ObservedEvent);
+
+  return offset;
+}
+static int dissect_observedEventLst_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_ObservedEvent(TRUE, tvb, offset, pinfo, tree, hf_h248_observedEventLst);
+}
+
+static const ber_sequence ObservedEventsDescriptor_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_requestId_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_observedEventLst_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_ObservedEventsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                ObservedEventsDescriptor_sequence, hf_index, ett_h248_ObservedEventsDescriptor);
+
+  return offset;
+}
+static int dissect_observedEventsDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ObservedEventsDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_observedEventsDescriptor);
+}
+
+static const ber_sequence NotifyRequest_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_terminationIDList_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_observedEventsDescriptor_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_errorDescriptor_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_NotifyRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                NotifyRequest_sequence, hf_index, ett_h248_NotifyRequest);
+
+  return offset;
+}
+static int dissect_notifyReq_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_NotifyRequest(TRUE, tvb, offset, pinfo, tree, hf_h248_notifyReq);
+}
+
+
+static const value_string ServiceChangeMethod_vals[] = {
+  {   0, "failover" },
+  {   1, "forced" },
+  {   2, "graceful" },
+  {   3, "restart" },
+  {   4, "disconnected" },
+  {   5, "handOff" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_h248_ServiceChangeMethod(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_serviceChangeMethod_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ServiceChangeMethod(TRUE, tvb, offset, pinfo, tree, hf_h248_serviceChangeMethod);
+}
+
+
+static const value_string ServiceChangeAddress_vals[] = {
+  {   0, "portNumber" },
+  {   1, "ip4Address" },
+  {   2, "ip6Address" },
+  {   3, "domainName" },
+  {   4, "deviceName" },
+  {   5, "mtpAddress" },
+  { 0, NULL }
+};
+
+static const ber_choice ServiceChangeAddress_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_portNumber_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_ip4Address_impl },
+  {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_ip6Address_impl },
+  {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_domainName_impl },
+  {   4, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_deviceName_impl },
+  {   5, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_mtpAddress_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_ServiceChangeAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              ServiceChangeAddress_choice, hf_index, ett_h248_ServiceChangeAddress);
+
+  return offset;
+}
+static int dissect_serviceChangeAddress(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ServiceChangeAddress(FALSE, tvb, offset, pinfo, tree, hf_h248_serviceChangeAddress);
+}
+
+
+static int
+dissect_h248_IA5String_SIZE_1_67(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_restricted_string(implicit_tag, 0,
+                                         pinfo, tree, tvb, offset, hf_index,
+                                         NULL);
+
+  return offset;
+}
+static int dissect_profileName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_IA5String_SIZE_1_67(TRUE, tvb, offset, pinfo, tree, hf_h248_profileName);
+}
+
+static const ber_sequence ServiceChangeProfile_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_profileName_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_ServiceChangeProfile(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                ServiceChangeProfile_sequence, hf_index, ett_h248_ServiceChangeProfile);
+
+  return offset;
+}
+static int dissect_serviceChangeProfile_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ServiceChangeProfile(TRUE, tvb, offset, pinfo, tree, hf_h248_serviceChangeProfile);
+}
+
+
+
+static int
+dissect_h248_INTEGER_0_4294967295(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_serviceChangeDelay_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_INTEGER_0_4294967295(TRUE, tvb, offset, pinfo, tree, hf_h248_serviceChangeDelay);
+}
+
+static const ber_sequence ServiceChangeParm_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_serviceChangeMethod_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_serviceChangeAddress },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceChangeVersion_impl },
+  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceChangeProfile_impl },
+  { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_serviceChangeReason_impl },
+  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceChangeDelay_impl },
+  { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_serviceChangeMgcId },
+  { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_timeStamp_impl },
+  { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nonStandardData_impl },
+  { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceChangeInfo_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_ServiceChangeParm(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                ServiceChangeParm_sequence, hf_index, ett_h248_ServiceChangeParm);
+
+  return offset;
+}
+static int dissect_serviceChangeParms_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ServiceChangeParm(TRUE, tvb, offset, pinfo, tree, hf_h248_serviceChangeParms);
+}
+
+static const ber_sequence ServiceChangeRequest_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_terminationIDList_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_serviceChangeParms_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_ServiceChangeRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                ServiceChangeRequest_sequence, hf_index, ett_h248_ServiceChangeRequest);
+
+  return offset;
+}
+static int dissect_serviceChangeReq_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ServiceChangeRequest(TRUE, tvb, offset, pinfo, tree, hf_h248_serviceChangeReq);
+}
+
+
+static const value_string Command_vals[] = {
+  {   0, "addReq" },
+  {   1, "moveReq" },
+  {   2, "modReq" },
+  {   3, "subtractReq" },
+  {   4, "auditCapRequest" },
+  {   5, "auditValueRequest" },
+  {   6, "notifyReq" },
+  {   7, "serviceChangeReq" },
+  { 0, NULL }
+};
+
+static const ber_choice Command_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_addReq_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_moveReq_impl },
+  {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_modReq_impl },
+  {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_subtractReq_impl },
+  {   4, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_auditCapRequest_impl },
+  {   5, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_auditValueRequest_impl },
+  {   6, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_notifyReq_impl },
+  {   7, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_serviceChangeReq_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_Command(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              Command_choice, hf_index, ett_h248_Command);
+
+  return offset;
+}
+static int dissect_command(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_Command(FALSE, tvb, offset, pinfo, tree, hf_h248_command);
+}
+
+static const ber_sequence CommandRequest_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_NOTCHKTAG, dissect_command },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_optional_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_wildcardReturn_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_CommandRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                CommandRequest_sequence, hf_index, ett_h248_CommandRequest);
+
+  return offset;
+}
+static int dissect_commandRequests_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_CommandRequest(FALSE, tvb, offset, pinfo, tree, hf_h248_commandRequests_item);
+}
+
+static const ber_sequence SEQUNCE_OF_CommandRequest_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_commandRequests_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_CommandRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_CommandRequest_sequence_of, hf_index, ett_h248_SEQUNCE_OF_CommandRequest);
+
+  return offset;
+}
+static int dissect_commandRequests_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_CommandRequest(TRUE, tvb, offset, pinfo, tree, hf_h248_commandRequests);
+}
+
+static const ber_sequence ActionRequest_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_contextId_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_contextRequest_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_contextAttrAuditReq_impl },
+  { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_commandRequests_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_ActionRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                ActionRequest_sequence, hf_index, ett_h248_ActionRequest);
+
+  return offset;
+}
+static int dissect_actions_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ActionRequest(FALSE, tvb, offset, pinfo, tree, hf_h248_actions_item);
+}
+
+static const ber_sequence SEQUNCE_OF_ActionRequest_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_actions_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_ActionRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_ActionRequest_sequence_of, hf_index, ett_h248_SEQUNCE_OF_ActionRequest);
+
+  return offset;
+}
+static int dissect_actions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_ActionRequest(TRUE, tvb, offset, pinfo, tree, hf_h248_actions);
+}
+
+static const ber_sequence TransactionRequest_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_transactionId_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_actions_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_TransactionRequest(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                TransactionRequest_sequence, hf_index, ett_h248_TransactionRequest);
+
+  return offset;
+}
+static int dissect_transactionRequest_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TransactionRequest(TRUE, tvb, offset, pinfo, tree, hf_h248_transactionRequest);
+}
+
+static const ber_sequence TransactionPending_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_transactionId_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_TransactionPending(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                TransactionPending_sequence, hf_index, ett_h248_TransactionPending);
+
+  return offset;
+}
+static int dissect_transactionPending_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TransactionPending(TRUE, tvb, offset, pinfo, tree, hf_h248_transactionPending);
+}
+
+static const ber_sequence StatisticsParameter_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_statName_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_statValue_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_StatisticsParameter(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                StatisticsParameter_sequence, hf_index, ett_h248_StatisticsParameter);
+
+  return offset;
+}
+static int dissect_StatisticsDescriptor_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_StatisticsParameter(FALSE, tvb, offset, pinfo, tree, hf_h248_StatisticsDescriptor_item);
+}
+
+static const ber_sequence StatisticsDescriptor_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_StatisticsDescriptor_item },
+};
+
+static int
+dissect_h248_StatisticsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   StatisticsDescriptor_sequence_of, hf_index, ett_h248_StatisticsDescriptor);
+
+  return offset;
+}
+static int dissect_statisticsDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_StatisticsDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_statisticsDescriptor);
+}
+
+static const ber_sequence PackagesItem_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_packageName_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_packageVersion_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_PackagesItem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                PackagesItem_sequence, hf_index, ett_h248_PackagesItem);
+
+  return offset;
+}
+static int dissect_PackagesDescriptor_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_PackagesItem(FALSE, tvb, offset, pinfo, tree, hf_h248_PackagesDescriptor_item);
+}
+
+static const ber_sequence PackagesDescriptor_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_PackagesDescriptor_item },
+};
+
+static int
+dissect_h248_PackagesDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   PackagesDescriptor_sequence_of, hf_index, ett_h248_PackagesDescriptor);
+
+  return offset;
+}
+static int dissect_packagesDescriptor_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_PackagesDescriptor(TRUE, tvb, offset, pinfo, tree, hf_h248_packagesDescriptor);
+}
+
+
+static const value_string AuditReturnParameter_vals[] = {
+  {   0, "errorDescriptor" },
+  {   1, "mediaDescriptor" },
+  {   2, "modemDescriptor" },
+  {   3, "muxDescriptor" },
+  {   4, "eventsDescriptor" },
+  {   5, "eventBufferDescriptor" },
+  {   6, "signalsDescriptor" },
+  {   7, "digitMapDescriptor" },
+  {   8, "observedEventsDescriptor" },
+  {   9, "statisticsDescriptor" },
+  {  10, "packagesDescriptor" },
+  {  11, "emptyDescriptors" },
+  { 0, NULL }
+};
+
+static const ber_choice AuditReturnParameter_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_errorDescriptor_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_mediaDescriptor_impl },
+  {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_modemDescriptor_impl },
+  {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_muxDescriptor_impl },
+  {   4, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_eventsDescriptor_impl },
+  {   5, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_eventBufferDescriptor_impl },
+  {   6, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_signalsDescriptor_impl },
+  {   7, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_digitMapDescriptor_impl },
+  {   8, BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_observedEventsDescriptor_impl },
+  {   9, BER_CLASS_CON, 9, BER_FLAGS_IMPLTAG, dissect_statisticsDescriptor_impl },
+  {  10, BER_CLASS_CON, 10, BER_FLAGS_IMPLTAG, dissect_packagesDescriptor_impl },
+  {  11, BER_CLASS_CON, 11, BER_FLAGS_IMPLTAG, dissect_emptyDescriptors_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_AuditReturnParameter(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              AuditReturnParameter_choice, hf_index, ett_h248_AuditReturnParameter);
+
+  return offset;
+}
+static int dissect_TerminationAudit_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AuditReturnParameter(FALSE, tvb, offset, pinfo, tree, hf_h248_TerminationAudit_item);
+}
+
+static const ber_sequence TerminationAudit_sequence_of[1] = {
+  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_TerminationAudit_item },
+};
+
+static int
+dissect_h248_TerminationAudit(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   TerminationAudit_sequence_of, hf_index, ett_h248_TerminationAudit);
+
+  return offset;
+}
+static int dissect_terminationAudit_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TerminationAudit(TRUE, tvb, offset, pinfo, tree, hf_h248_terminationAudit);
+}
+static int dissect_terminationAuditResult_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TerminationAudit(TRUE, tvb, offset, pinfo, tree, hf_h248_terminationAuditResult);
+}
+
+static const ber_sequence AmmsReply_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_terminationIDList_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationAudit_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_AmmsReply(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                AmmsReply_sequence, hf_index, ett_h248_AmmsReply);
+
+  return offset;
+}
+static int dissect_addReply_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AmmsReply(TRUE, tvb, offset, pinfo, tree, hf_h248_addReply);
+}
+static int dissect_moveReply_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AmmsReply(TRUE, tvb, offset, pinfo, tree, hf_h248_moveReply);
+}
+static int dissect_modReply_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AmmsReply(TRUE, tvb, offset, pinfo, tree, hf_h248_modReply);
+}
+static int dissect_subtractReply_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AmmsReply(TRUE, tvb, offset, pinfo, tree, hf_h248_subtractReply);
+}
+
+static const ber_sequence AuditResult_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_terminationID_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_terminationAuditResult_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_AuditResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                AuditResult_sequence, hf_index, ett_h248_AuditResult);
+
+  return offset;
+}
+static int dissect_auditResult_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AuditResult(TRUE, tvb, offset, pinfo, tree, hf_h248_auditResult);
+}
+
+
+static const value_string AuditReply_vals[] = {
+  {   0, "contextAuditResult" },
+  {   1, "error" },
+  {   2, "auditResult" },
+  { 0, NULL }
+};
+
+static const ber_choice AuditReply_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_contextAuditResult_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_error_impl },
+  {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_auditResult_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_AuditReply(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              AuditReply_choice, hf_index, ett_h248_AuditReply);
+
+  return offset;
+}
+static int dissect_auditCapReply(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AuditReply(FALSE, tvb, offset, pinfo, tree, hf_h248_auditCapReply);
+}
+static int dissect_auditValueReply(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_AuditReply(FALSE, tvb, offset, pinfo, tree, hf_h248_auditValueReply);
+}
+
+static const ber_sequence NotifyReply_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_terminationIDList_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_errorDescriptor_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_NotifyReply(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                NotifyReply_sequence, hf_index, ett_h248_NotifyReply);
+
+  return offset;
+}
+static int dissect_notifyReply_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_NotifyReply(TRUE, tvb, offset, pinfo, tree, hf_h248_notifyReply);
+}
+
+static const ber_sequence ServiceChangeResParm_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_serviceChangeMgcId },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_serviceChangeAddress },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceChangeVersion_impl },
+  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_serviceChangeProfile_impl },
+  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_timestamp_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_ServiceChangeResParm(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                ServiceChangeResParm_sequence, hf_index, ett_h248_ServiceChangeResParm);
+
+  return offset;
+}
+static int dissect_serviceChangeResParms_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ServiceChangeResParm(TRUE, tvb, offset, pinfo, tree, hf_h248_serviceChangeResParms);
+}
+
+
+static const value_string ServiceChangeResult_vals[] = {
+  {   0, "errorDescriptor" },
+  {   1, "serviceChangeResParms" },
+  { 0, NULL }
+};
+
+static const ber_choice ServiceChangeResult_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_errorDescriptor_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_serviceChangeResParms_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_ServiceChangeResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              ServiceChangeResult_choice, hf_index, ett_h248_ServiceChangeResult);
+
+  return offset;
+}
+static int dissect_serviceChangeResult(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ServiceChangeResult(FALSE, tvb, offset, pinfo, tree, hf_h248_serviceChangeResult);
+}
+
+static const ber_sequence ServiceChangeReply_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_terminationIDList_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_NOTCHKTAG, dissect_serviceChangeResult },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_ServiceChangeReply(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                ServiceChangeReply_sequence, hf_index, ett_h248_ServiceChangeReply);
+
+  return offset;
+}
+static int dissect_serviceChangeReply_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ServiceChangeReply(TRUE, tvb, offset, pinfo, tree, hf_h248_serviceChangeReply);
+}
+
+
+static const value_string CommandReply_vals[] = {
+  {   0, "addReply" },
+  {   1, "moveReply" },
+  {   2, "modReply" },
+  {   3, "subtractReply" },
+  {   4, "auditCapReply" },
+  {   5, "auditValueReply" },
+  {   6, "notifyReply" },
+  {   7, "serviceChangeReply" },
+  { 0, NULL }
+};
+
+static const ber_choice CommandReply_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_addReply_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_moveReply_impl },
+  {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_modReply_impl },
+  {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_subtractReply_impl },
+  {   4, BER_CLASS_CON, 4, 0, dissect_auditCapReply },
+  {   5, BER_CLASS_CON, 5, 0, dissect_auditValueReply },
+  {   6, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_notifyReply_impl },
+  {   7, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_serviceChangeReply_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_CommandReply(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              CommandReply_choice, hf_index, ett_h248_CommandReply);
+
+  return offset;
+}
+static int dissect_commandReply_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_CommandReply(FALSE, tvb, offset, pinfo, tree, hf_h248_commandReply_item);
+}
+
+static const ber_sequence SEQUNCE_OF_CommandReply_sequence_of[1] = {
+  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_commandReply_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_CommandReply(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_CommandReply_sequence_of, hf_index, ett_h248_SEQUNCE_OF_CommandReply);
+
+  return offset;
+}
+static int dissect_commandReply_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_CommandReply(TRUE, tvb, offset, pinfo, tree, hf_h248_commandReply);
+}
+
+static const ber_sequence ActionReply_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_contextId_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_errorDescriptor_impl },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_contextReply_impl },
+  { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_commandReply_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_ActionReply(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                ActionReply_sequence, hf_index, ett_h248_ActionReply);
+
+  return offset;
+}
+static int dissect_actionReplies_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_ActionReply(FALSE, tvb, offset, pinfo, tree, hf_h248_actionReplies_item);
+}
+
+static const ber_sequence SEQUNCE_OF_ActionReply_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_actionReplies_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_ActionReply(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_ActionReply_sequence_of, hf_index, ett_h248_SEQUNCE_OF_ActionReply);
+
+  return offset;
+}
+static int dissect_actionReplies_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_ActionReply(TRUE, tvb, offset, pinfo, tree, hf_h248_actionReplies);
+}
+
+
+static const value_string T_transactionResult_vals[] = {
+  {   0, "transactionError" },
+  {   1, "actionReplies" },
+  { 0, NULL }
+};
+
+static const ber_choice T_transactionResult_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_transactionError_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_actionReplies_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_T_transactionResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              T_transactionResult_choice, hf_index, ett_h248_T_transactionResult);
+
+  return offset;
+}
+static int dissect_transactionResult(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_T_transactionResult(FALSE, tvb, offset, pinfo, tree, hf_h248_transactionResult);
+}
+
+static const ber_sequence TransactionReply_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_transactionId_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_immAckRequired_impl },
+  { BER_CLASS_CON, 2, 0, dissect_transactionResult },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_TransactionReply(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                TransactionReply_sequence, hf_index, ett_h248_TransactionReply);
+
+  return offset;
+}
+static int dissect_transactionReply_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TransactionReply(TRUE, tvb, offset, pinfo, tree, hf_h248_transactionReply);
+}
+
+static const ber_sequence TransactionAck_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_firstAck_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lastAck_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_TransactionAck(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                TransactionAck_sequence, hf_index, ett_h248_TransactionAck);
+
+  return offset;
+}
+static int dissect_TransactionResponseAck_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TransactionAck(FALSE, tvb, offset, pinfo, tree, hf_h248_TransactionResponseAck_item);
+}
+
+static const ber_sequence TransactionResponseAck_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_TransactionResponseAck_item },
+};
+
+static int
+dissect_h248_TransactionResponseAck(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   TransactionResponseAck_sequence_of, hf_index, ett_h248_TransactionResponseAck);
+
+  return offset;
+}
+static int dissect_transactionResponseAck_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_TransactionResponseAck(TRUE, tvb, offset, pinfo, tree, hf_h248_transactionResponseAck);
+}
+
+
+static const value_string Transaction_vals[] = {
+  {   0, "transactionRequest" },
+  {   1, "transactionPending" },
+  {   2, "transactionReply" },
+  {   3, "transactionResponseAck" },
+  { 0, NULL }
+};
+
+static const ber_choice Transaction_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_transactionRequest_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_transactionPending_impl },
+  {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_transactionReply_impl },
+  {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_transactionResponseAck_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_Transaction(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              Transaction_choice, hf_index, ett_h248_Transaction);
+
+  return offset;
+}
+static int dissect_transactions_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_Transaction(FALSE, tvb, offset, pinfo, tree, hf_h248_transactions_item);
+}
+
+static const ber_sequence SEQUNCE_OF_Transaction_sequence_of[1] = {
+  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_transactions_item },
+};
+
+static int
+dissect_h248_SEQUNCE_OF_Transaction(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_Transaction_sequence_of, hf_index, ett_h248_SEQUNCE_OF_Transaction);
+
+  return offset;
+}
+static int dissect_transactions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_SEQUNCE_OF_Transaction(TRUE, tvb, offset, pinfo, tree, hf_h248_transactions);
+}
+
+
+static const value_string T_messageBody_vals[] = {
+  {   0, "messageError" },
+  {   1, "transactions" },
+  { 0, NULL }
+};
+
+static const ber_choice T_messageBody_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_messageError_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_transactions_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_T_messageBody(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              T_messageBody_choice, hf_index, ett_h248_T_messageBody);
+
+  return offset;
+}
+static int dissect_messageBody(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_T_messageBody(FALSE, tvb, offset, pinfo, tree, hf_h248_messageBody);
+}
+
+static const ber_sequence Message_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_version_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_NOTCHKTAG, dissect_mId },
+  { BER_CLASS_CON, 2, 0, dissect_messageBody },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_Message(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                Message_sequence, hf_index, ett_h248_Message);
+
+  return offset;
+}
+static int dissect_mess_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_h248_Message(TRUE, tvb, offset, pinfo, tree, hf_h248_mess);
+}
+
+static const ber_sequence MegacoMessage_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authHeader_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_mess_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_h248_MegacoMessage(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                MegacoMessage_sequence, hf_index, ett_h248_MegacoMessage);
+
+  return offset;
+}
+
+
+/*--- End of included file: packet-h248-fn.c ---*/
+
+
+
+static void
+dissect_h248(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+  proto_item *h248_item;
+  proto_tree *h248_tree = NULL;
+
+  /* Make entry in the Protocol column on summary display */
+  if (check_col(pinfo->cinfo, COL_PROTOCOL))
+    col_set_str(pinfo->cinfo, COL_PROTOCOL, "H.248");
+
+  if (tree) {
+    h248_item = proto_tree_add_item(tree, proto_h248, tvb, 0, -1, FALSE);
+    h248_tree = proto_item_add_subtree(h248_item, ett_h248);
+  }
+
+  dissect_h248_MegacoMessage(FALSE, tvb, 0, pinfo, h248_tree, -1);
+  
+}
+
+
+
+/*--- proto_register_h248 ----------------------------------------------*/
+void proto_register_h248(void) {
+
+  /* List of fields */
+  static hf_register_info hf[] = {
+    { &hf_h248_mtpaddress_ni, {
+      "NI", "h248.mtpaddress.ni", FT_UINT32, BASE_DEC,
+      NULL, 0, "NI", HFILL }},
+    { &hf_h248_mtpaddress_pc, {
+      "PC", "h248.mtpaddress.pc", FT_UINT32, BASE_DEC,
+      NULL, 0, "PC", HFILL }},
+    { &hf_h248_package_name, {
+      "Package", "h248.package_name", FT_UINT16, BASE_HEX,
+      VALS(package_name_vals), 0, "Package", HFILL }},
+    { &hf_h248_event_name, {
+      "Package and Event name", "h248.event_name", FT_UINT32, BASE_HEX,
+      VALS(event_name_vals), 0, "Package", HFILL }},
+    { &hf_h248_signal_name, {
+      "Package and Signal name", "h248.signal_name", FT_UINT32, BASE_HEX,
+      VALS(signal_name_vals), 0, "Package", HFILL }},
+	{ &hf_h248_package_bcp_BNCChar_PDU,
+      { "BNCChar", "h248.package_bcp.BNCChar",
+        FT_UINT32, BASE_DEC, VALS(BNCChar_vals), 0,
+        "BNCChar", HFILL }},
+	{ &hf_h248_package_annex_C_TMR,
+      { "TMR", "h248.package_annex_C.TMR",
+        FT_UINT32, BASE_DEC, VALS(isup_transmission_medium_requirement_value), 0,
+        "BNCChar", HFILL }},
+	{ &hf_h248_package_annex_C_USI,
+      { "USI", "h248.package_annex_C.USI",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "User Service Information", HFILL }},
+	{ &hf_h248_package_annex_C_BIR,
+      { "BIR", "h248.package_annex_C.BIR",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "BIR", HFILL }},
+	{ &hf_h248_package_annex_C_NSAP,
+      { "NSAP", "h248.package_annex_C.NSAP",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "NSAP", HFILL }},
+
+
+/*--- Included file: packet-h248-hfarr.c ---*/
+
+    { &hf_h248_authHeader,
+      { "authHeader", "h248.authHeader",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "MegacoMessage/authHeader", HFILL }},
+    { &hf_h248_mess,
+      { "mess", "h248.mess",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "MegacoMessage/mess", HFILL }},
+    { &hf_h248_secParmIndex,
+      { "secParmIndex", "h248.secParmIndex",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "AuthenticationHeader/secParmIndex", HFILL }},
+    { &hf_h248_seqNum,
+      { "seqNum", "h248.seqNum",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "AuthenticationHeader/seqNum", HFILL }},
+    { &hf_h248_ad,
+      { "ad", "h248.ad",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "AuthenticationHeader/ad", HFILL }},
+    { &hf_h248_version,
+      { "version", "h248.version",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "Message/version", HFILL }},
+    { &hf_h248_mId,
+      { "mId", "h248.mId",
+        FT_UINT32, BASE_DEC, VALS(MId_vals), 0,
+        "Message/mId", HFILL }},
+    { &hf_h248_messageBody,
+      { "messageBody", "h248.messageBody",
+        FT_UINT32, BASE_DEC, VALS(T_messageBody_vals), 0,
+        "Message/messageBody", HFILL }},
+    { &hf_h248_messageError,
+      { "messageError", "h248.messageError",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Message/messageBody/messageError", HFILL }},
+    { &hf_h248_transactions,
+      { "transactions", "h248.transactions",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "Message/messageBody/transactions", HFILL }},
+    { &hf_h248_transactions_item,
+      { "Item", "h248.transactions_item",
+        FT_UINT32, BASE_DEC, VALS(Transaction_vals), 0,
+        "Message/messageBody/transactions/_item", HFILL }},
+    { &hf_h248_ip4Address,
+      { "ip4Address", "h248.ip4Address",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_ip6Address,
+      { "ip6Address", "h248.ip6Address",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_domainName,
+      { "domainName", "h248.domainName",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_deviceName,
+      { "deviceName", "h248.deviceName",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_mtpAddress,
+      { "mtpAddress", "h248.mtpAddress",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_domName,
+      { "name", "h248.name",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "DomainName/name", HFILL }},
+    { &hf_h248_portNumber,
+      { "portNumber", "h248.portNumber",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_iP4Address,
+      { "address", "h248.address",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "IP4Address/address", HFILL }},
+    { &hf_h248_iP6Address,
+      { "address", "h248.address",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "IP6Address/address", HFILL }},
+    { &hf_h248_transactionRequest,
+      { "transactionRequest", "h248.transactionRequest",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Transaction/transactionRequest", HFILL }},
+    { &hf_h248_transactionPending,
+      { "transactionPending", "h248.transactionPending",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Transaction/transactionPending", HFILL }},
+    { &hf_h248_transactionReply,
+      { "transactionReply", "h248.transactionReply",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Transaction/transactionReply", HFILL }},
+    { &hf_h248_transactionResponseAck,
+      { "transactionResponseAck", "h248.transactionResponseAck",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "Transaction/transactionResponseAck", HFILL }},
+    { &hf_h248_transactionId,
+      { "transactionId", "h248.transactionId",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_actions,
+      { "actions", "h248.actions",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "TransactionRequest/actions", HFILL }},
+    { &hf_h248_actions_item,
+      { "Item", "h248.actions_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "TransactionRequest/actions/_item", HFILL }},
+    { &hf_h248_immAckRequired,
+      { "immAckRequired", "h248.immAckRequired",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "TransactionReply/immAckRequired", HFILL }},
+    { &hf_h248_transactionResult,
+      { "transactionResult", "h248.transactionResult",
+        FT_UINT32, BASE_DEC, VALS(T_transactionResult_vals), 0,
+        "TransactionReply/transactionResult", HFILL }},
+    { &hf_h248_transactionError,
+      { "transactionError", "h248.transactionError",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "TransactionReply/transactionResult/transactionError", HFILL }},
+    { &hf_h248_actionReplies,
+      { "actionReplies", "h248.actionReplies",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "TransactionReply/transactionResult/actionReplies", HFILL }},
+    { &hf_h248_actionReplies_item,
+      { "Item", "h248.actionReplies_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "TransactionReply/transactionResult/actionReplies/_item", HFILL }},
+    { &hf_h248_TransactionResponseAck_item,
+      { "Item", "h248.TransactionResponseAck_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "TransactionResponseAck/_item", HFILL }},
+    { &hf_h248_firstAck,
+      { "firstAck", "h248.firstAck",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "TransactionAck/firstAck", HFILL }},
+    { &hf_h248_lastAck,
+      { "lastAck", "h248.lastAck",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "TransactionAck/lastAck", HFILL }},
+    { &hf_h248_errorCode,
+      { "errorCode", "h248.errorCode",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "ErrorDescriptor/errorCode", HFILL }},
+    { &hf_h248_errorText,
+      { "errorText", "h248.errorText",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "ErrorDescriptor/errorText", HFILL }},
+    { &hf_h248_contextId,
+      { "contextId", "h248.contextId",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_contextRequest,
+      { "contextRequest", "h248.contextRequest",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ActionRequest/contextRequest", HFILL }},
+    { &hf_h248_contextAttrAuditReq,
+      { "contextAttrAuditReq", "h248.contextAttrAuditReq",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ActionRequest/contextAttrAuditReq", HFILL }},
+    { &hf_h248_commandRequests,
+      { "commandRequests", "h248.commandRequests",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "ActionRequest/commandRequests", HFILL }},
+    { &hf_h248_commandRequests_item,
+      { "Item", "h248.commandRequests_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ActionRequest/commandRequests/_item", HFILL }},
+    { &hf_h248_errorDescriptor,
+      { "errorDescriptor", "h248.errorDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_contextReply,
+      { "contextReply", "h248.contextReply",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ActionReply/contextReply", HFILL }},
+    { &hf_h248_commandReply,
+      { "commandReply", "h248.commandReply",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "ActionReply/commandReply", HFILL }},
+    { &hf_h248_commandReply_item,
+      { "Item", "h248.commandReply_item",
+        FT_UINT32, BASE_DEC, VALS(CommandReply_vals), 0,
+        "ActionReply/commandReply/_item", HFILL }},
+    { &hf_h248_priority,
+      { "priority", "h248.priority",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "ContextRequest/priority", HFILL }},
+    { &hf_h248_emergency,
+      { "emergency", "h248.emergency",
+        FT_BOOLEAN, 8, NULL, 0,
+        "ContextRequest/emergency", HFILL }},
+    { &hf_h248_topologyReq,
+      { "topologyReq", "h248.topologyReq",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "ContextRequest/topologyReq", HFILL }},
+    { &hf_h248_topologyReq_item,
+      { "Item", "h248.topologyReq_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ContextRequest/topologyReq/_item", HFILL }},
+    { &hf_h248_topology,
+      { "topology", "h248.topology",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ContextAttrAuditRequest/topology", HFILL }},
+    { &hf_h248_cAAREmergency,
+      { "emergency", "h248.emergency",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ContextAttrAuditRequest/emergency", HFILL }},
+    { &hf_h248_cAARPriority,
+      { "priority", "h248.priority",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ContextAttrAuditRequest/priority", HFILL }},
+    { &hf_h248_command,
+      { "command", "h248.command",
+        FT_UINT32, BASE_DEC, VALS(Command_vals), 0,
+        "CommandRequest/command", HFILL }},
+    { &hf_h248_optional,
+      { "optional", "h248.optional",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "CommandRequest/optional", HFILL }},
+    { &hf_h248_wildcardReturn,
+      { "wildcardReturn", "h248.wildcardReturn",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "CommandRequest/wildcardReturn", HFILL }},
+    { &hf_h248_addReq,
+      { "addReq", "h248.addReq",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Command/addReq", HFILL }},
+    { &hf_h248_moveReq,
+      { "moveReq", "h248.moveReq",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Command/moveReq", HFILL }},
+    { &hf_h248_modReq,
+      { "modReq", "h248.modReq",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Command/modReq", HFILL }},
+    { &hf_h248_subtractReq,
+      { "subtractReq", "h248.subtractReq",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Command/subtractReq", HFILL }},
+    { &hf_h248_auditCapRequest,
+      { "auditCapRequest", "h248.auditCapRequest",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Command/auditCapRequest", HFILL }},
+    { &hf_h248_auditValueRequest,
+      { "auditValueRequest", "h248.auditValueRequest",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Command/auditValueRequest", HFILL }},
+    { &hf_h248_notifyReq,
+      { "notifyReq", "h248.notifyReq",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Command/notifyReq", HFILL }},
+    { &hf_h248_serviceChangeReq,
+      { "serviceChangeReq", "h248.serviceChangeReq",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Command/serviceChangeReq", HFILL }},
+    { &hf_h248_addReply,
+      { "addReply", "h248.addReply",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "CommandReply/addReply", HFILL }},
+    { &hf_h248_moveReply,
+      { "moveReply", "h248.moveReply",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "CommandReply/moveReply", HFILL }},
+    { &hf_h248_modReply,
+      { "modReply", "h248.modReply",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "CommandReply/modReply", HFILL }},
+    { &hf_h248_subtractReply,
+      { "subtractReply", "h248.subtractReply",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "CommandReply/subtractReply", HFILL }},
+    { &hf_h248_auditCapReply,
+      { "auditCapReply", "h248.auditCapReply",
+        FT_UINT32, BASE_DEC, VALS(AuditReply_vals), 0,
+        "CommandReply/auditCapReply", HFILL }},
+    { &hf_h248_auditValueReply,
+      { "auditValueReply", "h248.auditValueReply",
+        FT_UINT32, BASE_DEC, VALS(AuditReply_vals), 0,
+        "CommandReply/auditValueReply", HFILL }},
+    { &hf_h248_notifyReply,
+      { "notifyReply", "h248.notifyReply",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "CommandReply/notifyReply", HFILL }},
+    { &hf_h248_serviceChangeReply,
+      { "serviceChangeReply", "h248.serviceChangeReply",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "CommandReply/serviceChangeReply", HFILL }},
+    { &hf_h248_terminationFrom,
+      { "terminationFrom", "h248.terminationFrom",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "TopologyRequest/terminationFrom", HFILL }},
+    { &hf_h248_terminationTo,
+      { "terminationTo", "h248.terminationTo",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "TopologyRequest/terminationTo", HFILL }},
+    { &hf_h248_topologyDirection,
+      { "topologyDirection", "h248.topologyDirection",
+        FT_UINT32, BASE_DEC, VALS(T_topologyDirection_vals), 0,
+        "TopologyRequest/topologyDirection", HFILL }},
+    { &hf_h248_streamID,
+      { "streamID", "h248.streamID",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_terminationIDList,
+      { "terminationID", "h248.terminationID",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_descriptors,
+      { "descriptors", "h248.descriptors",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "AmmRequest/descriptors", HFILL }},
+    { &hf_h248_descriptors_item,
+      { "Item", "h248.descriptors_item",
+        FT_UINT32, BASE_DEC, VALS(AmmDescriptor_vals), 0,
+        "AmmRequest/descriptors/_item", HFILL }},
+    { &hf_h248_mediaDescriptor,
+      { "mediaDescriptor", "h248.mediaDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_modemDescriptor,
+      { "modemDescriptor", "h248.modemDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_muxDescriptor,
+      { "muxDescriptor", "h248.muxDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_eventsDescriptor,
+      { "eventsDescriptor", "h248.eventsDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_eventBufferDescriptor,
+      { "eventBufferDescriptor", "h248.eventBufferDescriptor",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_signalsDescriptor,
+      { "signalsDescriptor", "h248.signalsDescriptor",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_digitMapDescriptor,
+      { "digitMapDescriptor", "h248.digitMapDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_auditDescriptor,
+      { "auditDescriptor", "h248.auditDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_terminationAudit,
+      { "terminationAudit", "h248.terminationAudit",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "AmmsReply/terminationAudit", HFILL }},
+    { &hf_h248_terminationID,
+      { "terminationID", "h248.terminationID",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_contextAuditResult,
+      { "contextAuditResult", "h248.contextAuditResult",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "AuditReply/contextAuditResult", HFILL }},
+    { &hf_h248_error,
+      { "error", "h248.error",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "AuditReply/error", HFILL }},
+    { &hf_h248_auditResult,
+      { "auditResult", "h248.auditResult",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "AuditReply/auditResult", HFILL }},
+    { &hf_h248_terminationAuditResult,
+      { "terminationAuditResult", "h248.terminationAuditResult",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "AuditResult/terminationAuditResult", HFILL }},
+    { &hf_h248_TerminationAudit_item,
+      { "Item", "h248.TerminationAudit_item",
+        FT_UINT32, BASE_DEC, VALS(AuditReturnParameter_vals), 0,
+        "TerminationAudit/_item", HFILL }},
+    { &hf_h248_observedEventsDescriptor,
+      { "observedEventsDescriptor", "h248.observedEventsDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_statisticsDescriptor,
+      { "statisticsDescriptor", "h248.statisticsDescriptor",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "AuditReturnParameter/statisticsDescriptor", HFILL }},
+    { &hf_h248_packagesDescriptor,
+      { "packagesDescriptor", "h248.packagesDescriptor",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "AuditReturnParameter/packagesDescriptor", HFILL }},
+    { &hf_h248_emptyDescriptors,
+      { "emptyDescriptors", "h248.emptyDescriptors",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "AuditReturnParameter/emptyDescriptors", HFILL }},
+    { &hf_h248_auditToken,
+      { "auditToken", "h248.auditToken",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "AuditDescriptor/auditToken", HFILL }},
+    { &hf_h248_auditPropertyToken,
+      { "auditPropertyToken", "h248.auditPropertyToken",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "AuditDescriptor/auditPropertyToken", HFILL }},
+    { &hf_h248_auditPropertyToken_item,
+      { "Item", "h248.auditPropertyToken_item",
+        FT_UINT32, BASE_DEC, VALS(IndAuditParameter_vals), 0,
+        "AuditDescriptor/auditPropertyToken/_item", HFILL }},
+    { &hf_h248_indaudmediaDescriptor,
+      { "indaudmediaDescriptor", "h248.indaudmediaDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAuditParameter/indaudmediaDescriptor", HFILL }},
+    { &hf_h248_indaudeventsDescriptor,
+      { "indaudeventsDescriptor", "h248.indaudeventsDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAuditParameter/indaudeventsDescriptor", HFILL }},
+    { &hf_h248_indaudeventBufferDescriptor,
+      { "indaudeventBufferDescriptor", "h248.indaudeventBufferDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAuditParameter/indaudeventBufferDescriptor", HFILL }},
+    { &hf_h248_indaudsignalsDescriptor,
+      { "indaudsignalsDescriptor", "h248.indaudsignalsDescriptor",
+        FT_UINT32, BASE_DEC, VALS(IndAudSignalsDescriptor_vals), 0,
+        "IndAuditParameter/indaudsignalsDescriptor", HFILL }},
+    { &hf_h248_indauddigitMapDescriptor,
+      { "indauddigitMapDescriptor", "h248.indauddigitMapDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAuditParameter/indauddigitMapDescriptor", HFILL }},
+    { &hf_h248_indaudstatisticsDescriptor,
+      { "indaudstatisticsDescriptor", "h248.indaudstatisticsDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAuditParameter/indaudstatisticsDescriptor", HFILL }},
+    { &hf_h248_indaudpackagesDescriptor,
+      { "indaudpackagesDescriptor", "h248.indaudpackagesDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAuditParameter/indaudpackagesDescriptor", HFILL }},
+    { &hf_h248_indAudTerminationStateDescriptor,
+      { "termStateDescr", "h248.termStateDescr",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudMediaDescriptor/termStateDescr", HFILL }},
+    { &hf_h248_indAudMediaDescriptorStreams,
+      { "streams", "h248.streams",
+        FT_UINT32, BASE_DEC, VALS(indAudMediaDescriptorStreams_vals), 0,
+        "IndAudMediaDescriptor/streams", HFILL }},
+    { &hf_h248_oneStream,
+      { "oneStream", "h248.oneStream",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudMediaDescriptor/streams/oneStream", HFILL }},
+    { &hf_h248_multiStream,
+      { "multiStream", "h248.multiStream",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "IndAudMediaDescriptor/streams/multiStream", HFILL }},
+    { &hf_h248_multiStream_item,
+      { "Item", "h248.multiStream_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudMediaDescriptor/streams/multiStream/_item", HFILL }},
+    { &hf_h248_indAudStreamParms,
+      { "streamParms", "h248.streamParms",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudStreamDescriptor/streamParms", HFILL }},
+    { &hf_h248_iASPLocalControlDescriptor,
+      { "localControlDescriptor", "h248.localControlDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudStreamParms/localControlDescriptor", HFILL }},
+    { &hf_h248_iASPLocalDescriptor,
+      { "localDescriptor", "h248.localDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudStreamParms/localDescriptor", HFILL }},
+    { &hf_h248_iASPRemoteDescriptor,
+      { "remoteDescriptor", "h248.remoteDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudStreamParms/remoteDescriptor", HFILL }},
+    { &hf_h248_iALCDStreamMode,
+      { "streamMode", "h248.streamMode",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudLocalControlDescriptor/streamMode", HFILL }},
+    { &hf_h248_iALCDReserveValue,
+      { "reserveValue", "h248.reserveValue",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudLocalControlDescriptor/reserveValue", HFILL }},
+    { &hf_h248_iALCDReserveGroup,
+      { "reserveGroup", "h248.reserveGroup",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudLocalControlDescriptor/reserveGroup", HFILL }},
+    { &hf_h248_indAudPropertyParms,
+      { "propertyParms", "h248.propertyParms",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_name,
+      { "name", "h248.name",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "IndAudPropertyParm/name", HFILL }},
+    { &hf_h248_IndAudPropertyParms_item,
+      { "Item", "h248.IndAudPropertyParms_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudPropertyParms/_item", HFILL }},
+    { &hf_h248_propGroupID,
+      { "propGroupID", "h248.propGroupID",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "IndAudLocalRemoteDescriptor/propGroupID", HFILL }},
+    { &hf_h248_iAPropertyGroup,
+      { "propGrps", "h248.propGrps",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "IndAudLocalRemoteDescriptor/propGrps", HFILL }},
+    { &hf_h248_IndAudPropertyGroup_item,
+      { "Item", "h248.IndAudPropertyGroup_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudPropertyGroup/_item", HFILL }},
+    { &hf_h248_eventBufferControl,
+      { "eventBufferControl", "h248.eventBufferControl",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudTerminationStateDescriptor/eventBufferControl", HFILL }},
+    { &hf_h248_iATSDServiceState,
+      { "serviceState", "h248.serviceState",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudTerminationStateDescriptor/serviceState", HFILL }},
+    { &hf_h248_requestID,
+      { "requestID", "h248.requestID",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_iAEDPkgdName,
+      { "pkgdName", "h248.pkgdName",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "IndAudEventsDescriptor/pkgdName", HFILL }},
+    { &hf_h248_iAEBDEventName,
+      { "eventName", "h248.eventName",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "IndAudEventBufferDescriptor/eventName", HFILL }},
+    { &hf_h248_indAudSignal,
+      { "signal", "h248.signal",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudSignalsDescriptor/signal", HFILL }},
+    { &hf_h248_indAudSeqSigList,
+      { "seqSigList", "h248.seqSigList",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudSignalsDescriptor/seqSigList", HFILL }},
+    { &hf_h248_id,
+      { "id", "h248.id",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_iASignalList,
+      { "signalList", "h248.signalList",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IndAudSeqSigList/signalList", HFILL }},
+    { &hf_h248_iASignalName,
+      { "signalName", "h248.signalName",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "IndAudSignal/signalName", HFILL }},
+    { &hf_h248_digitMapName,
+      { "digitMapName", "h248.digitMapName",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_statName,
+      { "statName", "h248.statName",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_packageName,
+      { "packageName", "h248.packageName",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_packageVersion,
+      { "packageVersion", "h248.packageVersion",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_requestId,
+      { "requestId", "h248.requestId",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "ObservedEventsDescriptor/requestId", HFILL }},
+    { &hf_h248_observedEventLst,
+      { "observedEventLst", "h248.observedEventLst",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "ObservedEventsDescriptor/observedEventLst", HFILL }},
+    { &hf_h248_observedEventLst_item,
+      { "Item", "h248.observedEventLst_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ObservedEventsDescriptor/observedEventLst/_item", HFILL }},
+    { &hf_h248_eventName,
+      { "eventName", "h248.eventName",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_eventParList,
+      { "eventParList", "h248.eventParList",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_timeNotation,
+      { "timeNotation", "h248.timeNotation",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ObservedEvent/timeNotation", HFILL }},
+    { &hf_h248_relation,
+      { "relation", "h248.relation",
+        FT_UINT32, BASE_DEC, VALS(Relation_vals), 0,
+        "ExtraInfo/relation", HFILL }},
+    { &hf_h248_range,
+      { "range", "h248.range",
+        FT_BOOLEAN, 8, NULL, 0,
+        "ExtraInfo/range", HFILL }},
+    { &hf_h248_sublist,
+      { "sublist", "h248.sublist",
+        FT_BOOLEAN, 8, NULL, 0,
+        "ExtraInfo/sublist", HFILL }},
+    { &hf_h248_eventParameterName,
+      { "eventParameterName", "h248.eventParameterName",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "EventParameter/eventParameterName", HFILL }},
+    { &hf_h248_value,
+      { "value", "h248.value",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_extraInfo,
+      { "extraInfo", "h248.extraInfo",
+        FT_UINT32, BASE_DEC, VALS(ExtraInfo_vals), 0,
+        "", HFILL }},
+    { &hf_h248_EventParameters_item,
+      { "Item", "h248.EventParameters_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "EventParameters/_item", HFILL }},
+    { &hf_h248_serviceChangeParms,
+      { "serviceChangeParms", "h248.serviceChangeParms",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ServiceChangeRequest/serviceChangeParms", HFILL }},
+    { &hf_h248_serviceChangeResult,
+      { "serviceChangeResult", "h248.serviceChangeResult",
+        FT_UINT32, BASE_DEC, VALS(ServiceChangeResult_vals), 0,
+        "ServiceChangeReply/serviceChangeResult", HFILL }},
+    { &hf_h248_serviceChangeResParms,
+      { "serviceChangeResParms", "h248.serviceChangeResParms",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ServiceChangeResult/serviceChangeResParms", HFILL }},
+    { &hf_h248_wildcard,
+      { "wildcard", "h248.wildcard",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "TerminationID/wildcard", HFILL }},
+    { &hf_h248_wildcard_item,
+      { "Item", "h248.wildcard_item",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "TerminationID/wildcard/_item", HFILL }},
+    { &hf_h248_terminationId,
+      { "id", "h248.id",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "TerminationID/id", HFILL }},
+    { &hf_h248_TerminationIDList_item,
+      { "Item", "h248.TerminationIDList_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "TerminationIDList/_item", HFILL }},
+    { &hf_h248_termStateDescr,
+      { "termStateDescr", "h248.termStateDescr",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "MediaDescriptor/termStateDescr", HFILL }},
+    { &hf_h248_streams,
+      { "streams", "h248.streams",
+        FT_UINT32, BASE_DEC, VALS(T_streams_vals), 0,
+        "MediaDescriptor/streams", HFILL }},
+    { &hf_h248_mediaDescriptorOneStream,
+      { "oneStream", "h248.oneStream",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "MediaDescriptor/streams/oneStream", HFILL }},
+    { &hf_h248_mediaDescriptorMultiStream,
+      { "multiStream", "h248.multiStream",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "MediaDescriptor/streams/multiStream", HFILL }},
+    { &hf_h248_mediaDescriptorMultiStream_item,
+      { "Item", "h248.multiStream_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "MediaDescriptor/streams/multiStream/_item", HFILL }},
+    { &hf_h248_streamParms,
+      { "streamParms", "h248.streamParms",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "StreamDescriptor/streamParms", HFILL }},
+    { &hf_h248_localControlDescriptor,
+      { "localControlDescriptor", "h248.localControlDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "StreamParms/localControlDescriptor", HFILL }},
+    { &hf_h248_localDescriptor,
+      { "localDescriptor", "h248.localDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "StreamParms/localDescriptor", HFILL }},
+    { &hf_h248_remoteDescriptor,
+      { "remoteDescriptor", "h248.remoteDescriptor",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "StreamParms/remoteDescriptor", HFILL }},
+    { &hf_h248_streamMode,
+      { "streamMode", "h248.streamMode",
+        FT_UINT32, BASE_DEC, VALS(StreamMode_vals), 0,
+        "LocalControlDescriptor/streamMode", HFILL }},
+    { &hf_h248_reserveValue,
+      { "reserveValue", "h248.reserveValue",
+        FT_BOOLEAN, 8, NULL, 0,
+        "LocalControlDescriptor/reserveValue", HFILL }},
+    { &hf_h248_reserveGroup,
+      { "reserveGroup", "h248.reserveGroup",
+        FT_BOOLEAN, 8, NULL, 0,
+        "LocalControlDescriptor/reserveGroup", HFILL }},
+    { &hf_h248_propertyParms,
+      { "propertyParms", "h248.propertyParms",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_propertyName,
+      { "propertyName", "h248.propertyName",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "PropertyParm/propertyName", HFILL }},
+    { &hf_h248_propertyParamValue,
+      { "value", "h248.value",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "PropertyParm/value", HFILL }},
+    { &hf_h248_value_item,
+      { "Item", "h248.value_item",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "PropertyParm/value/_item", HFILL }},
+    { &hf_h248_PropertyParms_item,
+      { "Item", "h248.PropertyParms_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "PropertyParms/_item", HFILL }},
+    { &hf_h248_propGrps,
+      { "propGrps", "h248.propGrps",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "LocalRemoteDescriptor/propGrps", HFILL }},
+    { &hf_h248_propGrps_item,
+      { "Item", "h248.propGrps_item",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "LocalRemoteDescriptor/propGrps/_item", HFILL }},
+    { &hf_h248_PropertyGroup_item,
+      { "Item", "h248.PropertyGroup_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "PropertyGroup/_item", HFILL }},
+    { &hf_h248_tSEventBufferControl,
+      { "eventBufferControl", "h248.eventBufferControl",
+        FT_UINT32, BASE_DEC, VALS(EventBufferControl_vals), 0,
+        "TerminationStateDescriptor/eventBufferControl", HFILL }},
+    { &hf_h248_serviceState,
+      { "serviceState", "h248.serviceState",
+        FT_UINT32, BASE_DEC, VALS(ServiceState_vals), 0,
+        "TerminationStateDescriptor/serviceState", HFILL }},
+    { &hf_h248_muxType,
+      { "muxType", "h248.muxType",
+        FT_UINT32, BASE_DEC, VALS(MuxType_vals), 0,
+        "MuxDescriptor/muxType", HFILL }},
+    { &hf_h248_termList,
+      { "termList", "h248.termList",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "MuxDescriptor/termList", HFILL }},
+    { &hf_h248_termList_item,
+      { "Item", "h248.termList_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "MuxDescriptor/termList/_item", HFILL }},
+    { &hf_h248_nonStandardData,
+      { "nonStandardData", "h248.nonStandardData",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_eventList,
+      { "eventList", "h248.eventList",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "EventsDescriptor/eventList", HFILL }},
+    { &hf_h248_pkgdName,
+      { "pkgdName", "h248.pkgdName",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_eventAction,
+      { "eventAction", "h248.eventAction",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "RequestedEvent/eventAction", HFILL }},
+    { &hf_h248_evParList,
+      { "evParList", "h248.evParList",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_RequestedEvents_item,
+      { "Item", "h248.RequestedEvents_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "RequestedEvents/_item", HFILL }},
+    { &hf_h248_keepActive,
+      { "keepActive", "h248.keepActive",
+        FT_BOOLEAN, 8, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_eventDM,
+      { "eventDM", "h248.eventDM",
+        FT_UINT32, BASE_DEC, VALS(EventDM_vals), 0,
+        "", HFILL }},
+    { &hf_h248_secondEvent,
+      { "secondEvent", "h248.secondEvent",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "RequestedActions/secondEvent", HFILL }},
+    { &hf_h248_digitMapValue,
+      { "digitMapValue", "h248.digitMapValue",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_secondaryEventList,
+      { "eventList", "h248.eventList",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "SecondEventsDescriptor/eventList", HFILL }},
+    { &hf_h248_eventList_item,
+      { "Item", "h248.eventList_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "SecondEventsDescriptor/eventList/_item", HFILL }},
+    { &hf_h248_secondaryEventAction,
+      { "eventAction", "h248.eventAction",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "SecondRequestedEvent/eventAction", HFILL }},
+    { &hf_h248_EventBufferDescriptor_item,
+      { "Item", "h248.EventBufferDescriptor_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "EventBufferDescriptor/_item", HFILL }},
+    { &hf_h248_SignalsDescriptor_item,
+      { "Item", "h248.SignalsDescriptor_item",
+        FT_UINT32, BASE_DEC, VALS(SignalRequest_vals), 0,
+        "SignalsDescriptor/_item", HFILL }},
+    { &hf_h248_signal,
+      { "signal", "h248.signal",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "SignalRequest/signal", HFILL }},
+    { &hf_h248_seqSigList,
+      { "seqSigList", "h248.seqSigList",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "SignalRequest/seqSigList", HFILL }},
+    { &hf_h248_signalList,
+      { "signalList", "h248.signalList",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "SeqSigList/signalList", HFILL }},
+    { &hf_h248_signalList_item,
+      { "Item", "h248.signalList_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "SeqSigList/signalList/_item", HFILL }},
+    { &hf_h248_signalName,
+      { "signalName", "h248.signalName",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "Signal/signalName", HFILL }},
+    { &hf_h248_sigType,
+      { "sigType", "h248.sigType",
+        FT_UINT32, BASE_DEC, VALS(SignalType_vals), 0,
+        "Signal/sigType", HFILL }},
+    { &hf_h248_duration,
+      { "duration", "h248.duration",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "Signal/duration", HFILL }},
+    { &hf_h248_notifyCompletion,
+      { "notifyCompletion", "h248.notifyCompletion",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "Signal/notifyCompletion", HFILL }},
+    { &hf_h248_sigParList,
+      { "sigParList", "h248.sigParList",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "Signal/sigParList", HFILL }},
+    { &hf_h248_sigParList_item,
+      { "Item", "h248.sigParList_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Signal/sigParList/_item", HFILL }},
+    { &hf_h248_sigParameterName,
+      { "sigParameterName", "h248.sigParameterName",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "SigParameter/sigParameterName", HFILL }},
+    { &hf_h248_mtl,
+      { "mtl", "h248.mtl",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "ModemDescriptor/mtl", HFILL }},
+    { &hf_h248_mtl_item,
+      { "Item", "h248.mtl_item",
+        FT_UINT32, BASE_DEC, VALS(ModemType_vals), 0,
+        "ModemDescriptor/mtl/_item", HFILL }},
+    { &hf_h248_mpl,
+      { "mpl", "h248.mpl",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "ModemDescriptor/mpl", HFILL }},
+    { &hf_h248_startTimer,
+      { "startTimer", "h248.startTimer",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "DigitMapValue/startTimer", HFILL }},
+    { &hf_h248_shortTimer,
+      { "shortTimer", "h248.shortTimer",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "DigitMapValue/shortTimer", HFILL }},
+    { &hf_h248_longTimer,
+      { "longTimer", "h248.longTimer",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "DigitMapValue/longTimer", HFILL }},
+    { &hf_h248_digitMapBody,
+      { "digitMapBody", "h248.digitMapBody",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "DigitMapValue/digitMapBody", HFILL }},
+    { &hf_h248_durationTimer,
+      { "durationTimer", "h248.durationTimer",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "DigitMapValue/durationTimer", HFILL }},
+    { &hf_h248_serviceChangeMethod,
+      { "serviceChangeMethod", "h248.serviceChangeMethod",
+        FT_UINT32, BASE_DEC, VALS(ServiceChangeMethod_vals), 0,
+        "ServiceChangeParm/serviceChangeMethod", HFILL }},
+    { &hf_h248_serviceChangeAddress,
+      { "serviceChangeAddress", "h248.serviceChangeAddress",
+        FT_UINT32, BASE_DEC, VALS(ServiceChangeAddress_vals), 0,
+        "", HFILL }},
+    { &hf_h248_serviceChangeVersion,
+      { "serviceChangeVersion", "h248.serviceChangeVersion",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_serviceChangeProfile,
+      { "serviceChangeProfile", "h248.serviceChangeProfile",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_h248_serviceChangeReason,
+      { "serviceChangeReason", "h248.serviceChangeReason",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "ServiceChangeParm/serviceChangeReason", HFILL }},
+    { &hf_h248_serviceChangeDelay,
+      { "serviceChangeDelay", "h248.serviceChangeDelay",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "ServiceChangeParm/serviceChangeDelay", HFILL }},
+    { &hf_h248_serviceChangeMgcId,
+      { "serviceChangeMgcId", "h248.serviceChangeMgcId",
+        FT_UINT32, BASE_DEC, VALS(MId_vals), 0,
+        "", HFILL }},
+    { &hf_h248_timeStamp,
+      { "timeStamp", "h248.timeStamp",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ServiceChangeParm/timeStamp", HFILL }},
+    { &hf_h248_serviceChangeInfo,
+      { "serviceChangeInfo", "h248.serviceChangeInfo",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ServiceChangeParm/serviceChangeInfo", HFILL }},
+    { &hf_h248_timestamp,
+      { "timestamp", "h248.timestamp",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ServiceChangeResParm/timestamp", HFILL }},
+    { &hf_h248_profileName,
+      { "profileName", "h248.profileName",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "ServiceChangeProfile/profileName", HFILL }},
+    { &hf_h248_PackagesDescriptor_item,
+      { "Item", "h248.PackagesDescriptor_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "PackagesDescriptor/_item", HFILL }},
+    { &hf_h248_StatisticsDescriptor_item,
+      { "Item", "h248.StatisticsDescriptor_item",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "StatisticsDescriptor/_item", HFILL }},
+    { &hf_h248_statValue,
+      { "statValue", "h248.statValue",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "StatisticsParameter/statValue", HFILL }},
+    { &hf_h248_nonStandardIdentifier,
+      { "nonStandardIdentifier", "h248.nonStandardIdentifier",
+        FT_UINT32, BASE_DEC, VALS(NonStandardIdentifier_vals), 0,
+        "NonStandardData/nonStandardIdentifier", HFILL }},
+    { &hf_h248_data,
+      { "data", "h248.data",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "NonStandardData/data", HFILL }},
+    { &hf_h248_object,
+      { "object", "h248.object",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "NonStandardIdentifier/object", HFILL }},
+    { &hf_h248_h221NonStandard,
+      { "h221NonStandard", "h248.h221NonStandard",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "NonStandardIdentifier/h221NonStandard", HFILL }},
+    { &hf_h248_experimental,
+      { "experimental", "h248.experimental",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "NonStandardIdentifier/experimental", HFILL }},
+    { &hf_h248_t35CountryCode1,
+      { "t35CountryCode1", "h248.t35CountryCode1",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "H221NonStandard/t35CountryCode1", HFILL }},
+    { &hf_h248_t35CountryCode2,
+      { "t35CountryCode2", "h248.t35CountryCode2",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "H221NonStandard/t35CountryCode2", HFILL }},
+    { &hf_h248_t35Extension,
+      { "t35Extension", "h248.t35Extension",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "H221NonStandard/t35Extension", HFILL }},
+    { &hf_h248_manufacturerCode,
+      { "manufacturerCode", "h248.manufacturerCode",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "H221NonStandard/manufacturerCode", HFILL }},
+    { &hf_h248_date,
+      { "date", "h248.date",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "TimeNotation/date", HFILL }},
+    { &hf_h248_time,
+      { "time", "h248.time",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "TimeNotation/time", HFILL }},
+    { &hf_h248_Value_item,
+      { "Item", "h248.Value_item",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "Value/_item", HFILL }},
+    { &hf_h248_T_auditToken_muxToken,
+      { "muxToken", "h248.muxToken",
+        FT_BOOLEAN, 8, NULL, 0x80,
+        "", HFILL }},
+    { &hf_h248_T_auditToken_modemToken,
+      { "modemToken", "h248.modemToken",
+        FT_BOOLEAN, 8, NULL, 0x40,
+        "", HFILL }},
+    { &hf_h248_T_auditToken_mediaToken,
+      { "mediaToken", "h248.mediaToken",
+        FT_BOOLEAN, 8, NULL, 0x20,
+        "", HFILL }},
+    { &hf_h248_T_auditToken_eventsToken,
+      { "eventsToken", "h248.eventsToken",
+        FT_BOOLEAN, 8, NULL, 0x10,
+        "", HFILL }},
+    { &hf_h248_T_auditToken_signalsToken,
+      { "signalsToken", "h248.signalsToken",
+        FT_BOOLEAN, 8, NULL, 0x08,
+        "", HFILL }},
+    { &hf_h248_T_auditToken_digitMapToken,
+      { "digitMapToken", "h248.digitMapToken",
+        FT_BOOLEAN, 8, NULL, 0x04,
+        "", HFILL }},
+    { &hf_h248_T_auditToken_statsToken,
+      { "statsToken", "h248.statsToken",
+        FT_BOOLEAN, 8, NULL, 0x02,
+        "", HFILL }},
+    { &hf_h248_T_auditToken_observedEventsToken,
+      { "observedEventsToken", "h248.observedEventsToken",
+        FT_BOOLEAN, 8, NULL, 0x01,
+        "", HFILL }},
+    { &hf_h248_T_auditToken_packagesToken,
+      { "packagesToken", "h248.packagesToken",
+        FT_BOOLEAN, 8, NULL, 0x80,
+        "", HFILL }},
+    { &hf_h248_T_auditToken_eventBufferToken,
+      { "eventBufferToken", "h248.eventBufferToken",
+        FT_BOOLEAN, 8, NULL, 0x40,
+        "", HFILL }},
+    { &hf_h248_NotifyCompletion_onTimeOut,
+      { "onTimeOut", "h248.onTimeOut",
+        FT_BOOLEAN, 8, NULL, 0x80,
+        "", HFILL }},
+    { &hf_h248_NotifyCompletion_onInterruptByEvent,
+      { "onInterruptByEvent", "h248.onInterruptByEvent",
+        FT_BOOLEAN, 8, NULL, 0x40,
+        "", HFILL }},
+    { &hf_h248_NotifyCompletion_onInterruptByNewSignalDescr,
+      { "onInterruptByNewSignalDescr", "h248.onInterruptByNewSignalDescr",
+        FT_BOOLEAN, 8, NULL, 0x20,
+        "", HFILL }},
+    { &hf_h248_NotifyCompletion_otherReason,
+      { "otherReason", "h248.otherReason",
+        FT_BOOLEAN, 8, NULL, 0x10,
+        "", HFILL }},
+
+/*--- End of included file: packet-h248-hfarr.c ---*/
+
+  };
+
+  /* List of subtrees */
+  static gint *ett[] = {
+    &ett_h248,
+    &ett_mtpaddress,
+    &ett_packagename,
+
+/*--- Included file: packet-h248-ettarr.c ---*/
+
+    &ett_h248_MegacoMessage,
+    &ett_h248_AuthenticationHeader,
+    &ett_h248_Message,
+    &ett_h248_T_messageBody,
+    &ett_h248_SEQUNCE_OF_Transaction,
+    &ett_h248_MId,
+    &ett_h248_DomainName,
+    &ett_h248_IP4Address,
+    &ett_h248_IP6Address,
+    &ett_h248_Transaction,
+    &ett_h248_TransactionRequest,
+    &ett_h248_SEQUNCE_OF_ActionRequest,
+    &ett_h248_TransactionPending,
+    &ett_h248_TransactionReply,
+    &ett_h248_T_transactionResult,
+    &ett_h248_SEQUNCE_OF_ActionReply,
+    &ett_h248_TransactionResponseAck,
+    &ett_h248_TransactionAck,
+    &ett_h248_ErrorDescriptor,
+    &ett_h248_ActionRequest,
+    &ett_h248_SEQUNCE_OF_CommandRequest,
+    &ett_h248_ActionReply,
+    &ett_h248_SEQUNCE_OF_CommandReply,
+    &ett_h248_ContextRequest,
+    &ett_h248_SEQUNCE_OF_TopologyRequest,
+    &ett_h248_ContextAttrAuditRequest,
+    &ett_h248_CommandRequest,
+    &ett_h248_Command,
+    &ett_h248_CommandReply,
+    &ett_h248_TopologyRequest,
+    &ett_h248_AmmRequest,
+    &ett_h248_SEQUNCE_OF_AmmDescriptor,
+    &ett_h248_AmmDescriptor,
+    &ett_h248_AmmsReply,
+    &ett_h248_SubtractRequest,
+    &ett_h248_AuditRequest,
+    &ett_h248_AuditReply,
+    &ett_h248_AuditResult,
+    &ett_h248_TerminationAudit,
+    &ett_h248_AuditReturnParameter,
+    &ett_h248_AuditDescriptor,
+    &ett_h248_T_auditToken,
+    &ett_h248_SEQUNCE_OF_IndAuditParameter,
+    &ett_h248_IndAuditParameter,
+    &ett_h248_IndAudMediaDescriptor,
+    &ett_h248_indAudMediaDescriptorStreams,
+    &ett_h248_SEQUNCE_OF_IndAudStreamDescriptor,
+    &ett_h248_IndAudStreamDescriptor,
+    &ett_h248_IndAudStreamParms,
+    &ett_h248_IndAudLocalControlDescriptor,
+    &ett_h248_IndAudPropertyParm,
+    &ett_h248_IndAudPropertyParms,
+    &ett_h248_IndAudLocalRemoteDescriptor,
+    &ett_h248_IndAudPropertyGroup,
+    &ett_h248_IndAudTerminationStateDescriptor,
+    &ett_h248_IndAudEventsDescriptor,
+    &ett_h248_IndAudEventBufferDescriptor,
+    &ett_h248_IndAudSignalsDescriptor,
+    &ett_h248_IndAudSeqSigList,
+    &ett_h248_IndAudSignal,
+    &ett_h248_IndAudDigitMapDescriptor,
+    &ett_h248_IndAudStatisticsDescriptor,
+    &ett_h248_IndAudPackagesDescriptor,
+    &ett_h248_NotifyRequest,
+    &ett_h248_NotifyReply,
+    &ett_h248_ObservedEventsDescriptor,
+    &ett_h248_SEQUNCE_OF_ObservedEvent,
+    &ett_h248_ObservedEvent,
+    &ett_h248_ExtraInfo,
+    &ett_h248_EventParameter,
+    &ett_h248_EventParameters,
+    &ett_h248_ServiceChangeRequest,
+    &ett_h248_ServiceChangeReply,
+    &ett_h248_ServiceChangeResult,
+    &ett_h248_TerminationID,
+    &ett_h248_SEQUNCE_OF_WildcardField,
+    &ett_h248_TerminationIDList,
+    &ett_h248_MediaDescriptor,
+    &ett_h248_T_streams,
+    &ett_h248_SEQUNCE_OF_StreamDescriptor,
+    &ett_h248_StreamDescriptor,
+    &ett_h248_StreamParms,
+    &ett_h248_LocalControlDescriptor,
+    &ett_h248_PropertyParm,
+    &ett_h248_SEQUNCE_OF_PropertyID,
+    &ett_h248_PropertyParms,
+    &ett_h248_LocalRemoteDescriptor,
+    &ett_h248_SEQUNCE_OF_PropertyGroup,
+    &ett_h248_PropertyGroup,
+    &ett_h248_TerminationStateDescriptor,
+    &ett_h248_MuxDescriptor,
+    &ett_h248_SEQUNCE_OF_TerminationID,
+    &ett_h248_EventsDescriptor,
+    &ett_h248_RequestedEvent,
+    &ett_h248_RequestedEvents,
+    &ett_h248_RequestedActions,
+    &ett_h248_EventDM,
+    &ett_h248_SecondEventsDescriptor,
+    &ett_h248_SEQUNCE_OF_SecondRequestedEvent,
+    &ett_h248_SecondRequestedEvent,
+    &ett_h248_SecondRequestedActions,
+    &ett_h248_EventBufferDescriptor,
+    &ett_h248_EventSpec,
+    &ett_h248_SignalsDescriptor,
+    &ett_h248_SignalRequest,
+    &ett_h248_SeqSigList,
+    &ett_h248_SEQUNCE_OF_Signal,
+    &ett_h248_Signal,
+    &ett_h248_SEQUNCE_OF_SigParameter,
+    &ett_h248_NotifyCompletion,
+    &ett_h248_SigParameter,
+    &ett_h248_ModemDescriptor,
+    &ett_h248_SEQUNCE_OF_ModemType,
+    &ett_h248_DigitMapDescriptor,
+    &ett_h248_DigitMapValue,
+    &ett_h248_ServiceChangeParm,
+    &ett_h248_ServiceChangeAddress,
+    &ett_h248_ServiceChangeResParm,
+    &ett_h248_ServiceChangeProfile,
+    &ett_h248_PackagesDescriptor,
+    &ett_h248_PackagesItem,
+    &ett_h248_StatisticsDescriptor,
+    &ett_h248_StatisticsParameter,
+    &ett_h248_NonStandardData,
+    &ett_h248_NonStandardIdentifier,
+    &ett_h248_H221NonStandard,
+    &ett_h248_TimeNotation,
+    &ett_h248_Value,
+
+/*--- End of included file: packet-h248-ettarr.c ---*/
+
+  };
+
+  /* Register protocol */
+  proto_h248 = proto_register_protocol(PNAME, PSNAME, PFNAME);
+  register_dissector("h248", dissect_h248, proto_h248);
+
+  /* Register fields and subtrees */
+  proto_register_field_array(proto_h248, hf, array_length(hf));
+  proto_register_subtree_array(ett, array_length(ett));
+
+  /* register a dissector table packages can attach to */
+  h248_package_bin_dissector_table = register_dissector_table("h248.package.bin", "Binary H.248 Package Dissectors", FT_UINT16,BASE_HEX);
+
+}
+
+
+/*--- proto_reg_handoff_h248 -------------------------------------------*/
+void proto_reg_handoff_h248(void) {
+  dissector_handle_t h248_handle;
+
+  h248_handle = find_dissector("h248");
+
+  dissector_add("m3ua.protocol_data_si", GATEWAY_CONTROL_PROTOCOL_USER_ID, h248_handle);
+}
+
diff -urN ethereal-0.10.6/epan/dissectors/packet-h248.h ethereal-0.10.7/epan/dissectors/packet-h248.h
--- ethereal-0.10.6/epan/dissectors/packet-h248.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-h248.h	2004-10-20 17:34:58.000000000 -0500
@@ -0,0 +1,39 @@
+/* Do not modify this file.                                                   */
+/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
+/* ./packet-h248.h                                                            */
+/* ../../tools/asn2eth.py -X -b -e -p h248 -c h248.cnf -s packet-h248-template MEGACO.asn */
+
+/* Input file: packet-h248-template.h */
+
+/* packet-h248.h
+ * Routines for H.248/MEGACO packet dissection
+ * Ronnie Sahlberg 2004
+ *
+ * $Id: packet-h248-template.h 12203 2004-10-05 09:18:55Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef PACKET_H248_H
+#define PACKET_H248_H
+
+/*#include "packet-h248-exp.h"*/
+
+#endif  /* PACKET_H248_H */
+
diff -urN ethereal-0.10.6/epan/dissectors/packet-h450.c ethereal-0.10.7/epan/dissectors/packet-h450.c
--- ethereal-0.10.6/epan/dissectors/packet-h450.c	2004-08-12 17:42:22.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-h450.c	2004-10-20 17:34:53.000000000 -0500
@@ -4,7 +4,7 @@
  *
  * Copied from packet-h225.c and packet-h245.c
  *
- * $Id: packet-h450.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-h450.c 12255 2004-10-11 06:51:19Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,7 +36,7 @@
 #include <stdio.h>
 #include <string.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-per.h"
 #include "packet-h225.h"
 #include "packet-h245.h"
@@ -224,7 +224,7 @@
 	{ 1, "anyEntity" },
 	{ 0, NULL}
 };
-static per_choice_t EntityType_choice[] = {
+static const per_choice_t EntityType_choice[] = {
 	{ 0, "endpoint", ASN1_EXTENSION_ROOT,
 		dissect_h4501_NULL },
 	{ 1, "anyEntity", ASN1_EXTENSION_ROOT,
@@ -239,7 +239,7 @@
 }
 
 
-static per_sequence_t NetworkFacilityExtension_sequence[] = {
+static const per_sequence_t NetworkFacilityExtension_sequence[] = {
 	{ "sourceEntity", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h4501_EntityType },
 	{ "sourceEntityAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -264,7 +264,7 @@
 	{ 2, "rejectAnyUnrecognizedInvokePdu" },
 	{ 0, NULL}
 };
-static per_choice_t InterpretationApdu_choice[] = {
+static const per_choice_t InterpretationApdu_choice[] = {
 	{ 0, "discardAnyUnrecognizedInvokePdu", ASN1_EXTENSION_ROOT,
 		dissect_h4501_NULL },
 	{ 1, "clearCallIfAnyInvokePduNotRecognized", ASN1_EXTENSION_ROOT,
@@ -399,7 +399,7 @@
 	{ 1, "global" },
 	{ 0, NULL}
 };
-static per_choice_t opcode_choice[] = {
+static const per_choice_t opcode_choice[] = {
 	{ 0, "local", ASN1_NO_EXTENSIONS,
 		dissect_h4501_localOpcode },
 	{ 1, "global", ASN1_NO_EXTENSIONS,
@@ -435,7 +435,7 @@
 	{ 1, "nonStandardData" },
 	{ 0, NULL}
 };
-static per_choice_t Extension_choice[] = {
+static const per_choice_t Extension_choice[] = {
 	{ 0, "extensionSeq", ASN1_NO_EXTENSIONS,
 		dissect_h4501_ExtensionSeq },
 	{ 1, "nonStandardData", ASN1_NO_EXTENSIONS,
@@ -466,7 +466,7 @@
 }
 
 
-static per_sequence_t EndpointAddress_sequence[] = {
+static const per_sequence_t EndpointAddress_sequence[] = {
 	{ "destinationAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h4501_destinationAddress },
 	{ "remoteExtensionAddress", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -489,7 +489,7 @@
 }
 
 
-static per_sequence_t CTInitiateArg_sequence[] = {
+static const per_sequence_t CTInitiateArg_sequence[] = {
 	{ "callIdentity", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h4502_CallIdentity },
 	{ "reroutingNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -506,7 +506,7 @@
 }
 
 
-static per_sequence_t CTSetupArg_sequence[] = {
+static const per_sequence_t CTSetupArg_sequence[] = {
 	{ "callIdentity", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h4502_CallIdentity },
 	{ "transferringNumber", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -539,7 +539,7 @@
 }
 
 
-static per_sequence_t CTUpdateArg_sequence[] = {
+static const per_sequence_t CTUpdateArg_sequence[] = {
 	{ "redirectionNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h4501_EndpointAddress },
 	{ "redirectionInfo", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -578,7 +578,7 @@
 }
 
 
-static per_sequence_t UserSpecifiedSubaddress_sequence[] = {
+static const per_sequence_t UserSpecifiedSubaddress_sequence[] = {
 	{ "subaddressInformation", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h4501_SubaddressInformation },
 	{ "oddCountIndicator", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -606,7 +606,7 @@
 	{ 1, "nsapSubaddress" },
 	{ 0, NULL}
 };
-static per_choice_t PartySubaddress_choice[] = {
+static const per_choice_t PartySubaddress_choice[] = {
 	{ 0, "userSpecifiedSubaddress", ASN1_EXTENSION_ROOT,
 		dissect_h4501_UserSpecifiedSubaddress },
 	{ 1, "nsapSubaddress", ASN1_EXTENSION_ROOT,
@@ -621,7 +621,7 @@
 }
 
 
-static per_sequence_t SubaddressTransferArg_sequence[] = {
+static const per_sequence_t SubaddressTransferArg_sequence[] = {
 	{ "redirectionSubaddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h4501_PartySubaddress },
 	{ "argumentExtension", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -662,7 +662,7 @@
 }
 
 
-static per_sequence_t CTCompleteArg_sequence[] = {
+static const per_sequence_t CTCompleteArg_sequence[] = {
 	{ "endDesignation", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h4502_EndDesignation },
 	{ "redirectionNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -693,7 +693,7 @@
 }
 
 
-static per_sequence_t CTActiveArg_sequence[] = {
+static const per_sequence_t CTActiveArg_sequence[] = {
 	{ "connectedAddress", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h4501_EndpointAddress },
 	{ "basicCallInfoElements", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
@@ -765,7 +765,7 @@
 }
 
 
-static per_sequence_t Invoke_sequence[] = {
+static const per_sequence_t Invoke_sequence[] = {
 	{ "invokeID", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h4501_constrained_invokeId },
 	{ "linkedId", ASN1_NO_EXTENSIONS, ASN1_OPTIONAL,
@@ -792,7 +792,7 @@
 }
 
 
-static per_sequence_t CTIdentifyRes_sequence[] = {
+static const per_sequence_t CTIdentifyRes_sequence[] = {
 	{ "callIdentity", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h4502_CallIdentity },
 	{ "reroutingNumber", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -849,7 +849,7 @@
 }
 
 
-static per_sequence_t result_sequence[] = {
+static const per_sequence_t result_sequence[] = {
 	{ "opcode", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
 		dissect_h4501_opcode },
 	{ "result", ASN1_EXTENSION_ROOT, ASN1_NOT_OPTIONAL,
@@ -864,7 +864,7 @@
 }
 
 
-static per_sequence_t ReturnResult_sequence[] = {
+static const per_sequence_t ReturnResult_sequence[] = {
 	{ "invokeID", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h4501_invokeId },
 	{ "result", ASN1_NO_EXTENSIONS, ASN1_OPTIONAL,
@@ -940,7 +940,7 @@
 	{ 1, "global" },
 	{ 0, NULL}
 };
-static per_choice_t errorCode_choice[] = {
+static const per_choice_t errorCode_choice[] = {
 	{ 0, "local", ASN1_NO_EXTENSIONS,
 		dissect_h4501_localErrorCode },
 	{ 1, "global", ASN1_NO_EXTENSIONS,
@@ -964,7 +964,7 @@
 }
 
 
-static per_sequence_t ReturnError_sequence[] = {
+static const per_sequence_t ReturnError_sequence[] = {
 	{ "invokeID", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h4501_invokeId },
 	{ "errorCode", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -1051,7 +1051,7 @@
 	{ 3, "returnError" },
 	{ 0, NULL}
 };
-static per_choice_t problem_choice[] = {
+static const per_choice_t problem_choice[] = {
 	{ 0, "general", ASN1_NO_EXTENSIONS,
 		dissect_h4501_GeneralProblem },
 	{ 1, "invoke", ASN1_NO_EXTENSIONS,
@@ -1070,7 +1070,7 @@
 }
 
 
-static per_sequence_t Reject_sequence[] = {
+static const per_sequence_t Reject_sequence[] = {
 	{ "invokeID", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_h4501_invokeId },
 	{ "problem", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -1092,7 +1092,7 @@
 	{ 4, "reject" },
 	{ 0, NULL}
 };
-static per_choice_t ROS_choice[] = {
+static const per_choice_t ROS_choice[] = {
 	{ 1, "invoke", ASN1_NO_EXTENSIONS,
 		dissect_h4501_Invoke },
 	{ 2, "returnResult", ASN1_NO_EXTENSIONS,
@@ -1123,7 +1123,7 @@
 	{ 0, "rosApdus" },
 	{ 0, NULL}
 };
-static per_choice_t ServiceApdus_choice[] = {
+static const per_choice_t ServiceApdus_choice[] = {
 	{ 0, "rosApdus", ASN1_EXTENSION_ROOT,
 		dissect_h4501_rosApdus },
 	{ 0, NULL, 0, NULL }
@@ -1136,7 +1136,7 @@
 }
 
 
-static per_sequence_t H4501_SupplementaryService_sequence[] = {
+static const per_sequence_t H4501_SupplementaryService_sequence[] = {
 	{ "networkFacilityExtension", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
 		dissect_h4501_NetworkFacilityExtension },
 	{ "interpretationApdu", ASN1_EXTENSION_ROOT, ASN1_OPTIONAL,
diff -urN ethereal-0.10.6/epan/dissectors/packet-hpext.c ethereal-0.10.7/epan/dissectors/packet-hpext.c
--- ethereal-0.10.6/epan/dissectors/packet-hpext.c	2004-08-12 17:42:09.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-hpext.c	2004-10-20 17:34:47.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for HP extended IEEE 802.2 LLC layer
  * Jochen Friedrich <jochen@scram.de>
  *
- * $Id: packet-hpext.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-hpext.c 12127 2004-09-28 23:48:02Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -29,7 +29,7 @@
 
 #include <glib.h>
 #include <epan/packet.h>
-#include "xdlc.h"
+#include <epan/xdlc.h>
 #include "etypes.h"
 #include "llcsaps.h"
 #include "packet-hpext.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-http.c ethereal-0.10.7/epan/dissectors/packet-http.c
--- ethereal-0.10.6/epan/dissectors/packet-http.c	2004-08-12 17:42:26.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-http.c	2004-10-20 17:34:55.000000000 -0500
@@ -9,7 +9,7 @@
  * Copyright 2002, Tim Potter <tpot@samba.org>
  * Copyright 1999, Andrew Tridgell <tridge@samba.org>
  *
- * $Id: packet-http.c 11453 2004-07-21 06:05:24Z guy $
+ * $Id: packet-http.c 12129 2004-09-29 00:25:05Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -40,11 +40,11 @@
 #include <glib.h>
 #include <epan/packet.h>
 #include <epan/strutil.h>
+#include <epan/base64.h>
 
-#include "util.h"
-#include "req_resp_hdrs.h"
+#include <epan/req_resp_hdrs.h>
 #include "packet-http.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 typedef enum _http_type {
 	HTTP_REQUEST,
@@ -53,7 +53,7 @@
 	HTTP_OTHERS
 } http_type_t;
 
-#include "tap.h"
+#include <epan/tap.h>
 
 static int http_tap = -1;
 
@@ -117,6 +117,7 @@
 #define TCP_PORT_PROXY_ADMIN_HTTP	3132
 #define TCP_ALT_PORT_HTTP		8080
 #define TCP_PORT_HKP			11371
+#define TCP_PORT_DAAP			3689
 /*
  * SSDP is implemented atop HTTP (yes, it really *does* run over UDP).
  */
@@ -128,7 +129,8 @@
  */
 typedef enum {
 	PROTO_HTTP,		/* just HTTP */
-	PROTO_SSDP		/* Simple Service Discovery Protocol */
+	PROTO_SSDP,		/* Simple Service Discovery Protocol */
+	PROTO_DAAP		/* Digital Audio Access Protocol */
 } http_proto_t;
 
 typedef void (*RequestDissector)(tvbuff_t*, proto_tree*, int);
@@ -295,6 +297,11 @@
 		proto_tag = "SSDP";
 		break;
 
+	case TCP_PORT_DAAP:	
+		proto = PROTO_DAAP;
+		proto_tag = "DAAP";
+		break;
+
 	default:
 		proto = PROTO_HTTP;
 		proto_tag = "HTTP";
@@ -1619,16 +1626,20 @@
 	proto_register_subtree_array(ett, array_length(ett));
 	http_module = prefs_register_protocol(proto_http, NULL);
 	prefs_register_bool_preference(http_module, "desegment_headers",
-	    "Desegment all HTTP headers spanning multiple TCP segments",
-	    "Whether the HTTP dissector should desegment all headers "
-	    "of a request spanning multiple TCP segments",
+	    "Reassemble HTTP headers spanning multiple TCP segments",
+	    "Whether the HTTP dissector should reassemble headers "
+	    "of a request spanning multiple TCP segments. "
+		"To use this option, you must also enable "
+        "\"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 	    &http_desegment_headers);
 	prefs_register_bool_preference(http_module, "desegment_body",
-	    "Desegment HTTP bodies spanning multiple TCP segments",
+	    "Reassemble HTTP bodies spanning multiple TCP segments",
 	    "Whether the HTTP dissector should use the "
-	    "\"Content-length:\" value, if present, to desegment "
+	    "\"Content-length:\" value, if present, to reassemble "
 	    "the body of a request spanning multiple TCP segments, "
-	    "and desegment chunked data spanning multiple TCP segments",
+	    "and reassemble chunked data spanning multiple TCP segments. "
+		"To use this option, you must also enable "
+        "\"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 	    &http_desegment_body);
 	prefs_register_bool_preference(http_module, "dechunk_body",
 	    "Reassemble chunked transfer-coded bodies",
diff -urN ethereal-0.10.6/epan/dissectors/packet-icep.c ethereal-0.10.7/epan/dissectors/packet-icep.c
--- ethereal-0.10.6/epan/dissectors/packet-icep.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-icep.c	2004-10-20 17:34:42.000000000 -0500
@@ -0,0 +1,1447 @@
+/* packet-icep.c
+ * Routines for "The ICE Protocol" dissection
+ * Copyright 2004 _FF_ 
+ * Francesco Fondelli <fondelli dot francesco, tiscali dot it>
+ *
+ * $Id: packet-icep.c 12223 2004-10-06 17:37:47Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public Licepnse
+ * as published by the Free Software Foundation; either version 2
+ * of the Licepnse, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public Licepnse for more details.
+ * 
+ * You should have received a copy of the GNU General Public Licepnse
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/*
+  TODO:
+  1) Dissect encoded data (do sth like idl2eth for CORBA).
+  2) Add conversations.
+  3) Register a dissector as one that can be selected by a UDP/TCP port number.
+  4) Put in Preferences/Protocols/ICEP Option menu:
+      - ICEP_MAX_ICE_STRING_LEN
+      - ICEP_MAX_BATCH_REQUESTS
+      - ICEP_MAX_ICE_CONTEXT_PAIRS
+*/
+
+/*
+  NOTES:
+  1) p. 586 Chapter 23.2 of "The ICE Protocol"
+     "Data is always encoded using little-endian byte order for numeric types."
+  2) Informations about Ice can be found here: http://www.zeroc.com
+*/
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+
+#include <epan/packet.h>
+#include <epan/dissectors/packet-tcp.h>
+
+#if 0
+#define DBG(str, args...)       do {\
+                                        fprintf(stdout, \
+                                        "[%s][%s][%d]: ",\
+                                        __FILE__, \
+                                        __FUNCTION__, \
+                                        __LINE__); \
+                                        fflush(stdout); \
+                                        fprintf(stdout, str, ## args); \
+                                } while (0)
+#else
+#define DBG0(format)
+#define DBG1(format, arg1)
+#define DBG2(format, arg1, arg2)
+#endif /* 0/1 */
+
+/* fixed values taken from the standard */
+#define ICEP_MAGIC				"IceP"
+#define ICEP_HEADER_SIZE			14
+#define ICEP_MIN_REPLY_SIZE			5
+#define ICEP_MIN_PARAMS_SIZE			6
+#define ICEP_MIN_COMMON_REQ_HEADER_SIZE		13
+
+/* values derived from common sense */
+#define ICEP_MAX_BATCH_REQUESTS			64
+#define ICEP_MAX_ICE_STRING_LEN			512
+#define ICEP_MAX_ICE_CONTEXT_PAIRS		64
+
+
+/* Initialize the protocol and registered fields */
+static int proto_icep = -1;
+
+/* Message Header */
+static int hf_icep_protocol_major = -1;
+static int hf_icep_protocol_minor = -1;
+static int hf_icep_encoding_major = -1;
+static int hf_icep_encoding_minor = -1;
+static int hf_icep_message_type = -1;
+static int hf_icep_compression_status = -1;
+static int hf_icep_message_size = -1;
+
+/* [Batch] Request Message Body */
+static int hf_icep_request_id = -1;
+static int hf_icep_id_name = -1;
+static int hf_icep_id_category = -1;
+static int hf_icep_facet = -1;
+static int hf_icep_operation = -1;
+static int hf_icep_mode = -1;
+static int hf_icep_context = -1;
+static int hf_icep_params_size = -1;
+static int hf_icep_params_major = -1;
+static int hf_icep_params_minor = -1;
+
+/* Reply Message Body */
+static int hf_icep_reply_status = -1;
+
+/* Initialize the subtree pointers */
+static gint ett_icep = -1;
+static gint ett_icep_msg = -1;
+
+static const value_string icep_msgtype_vals[] = {
+	{0x0, "Request"},
+	{0x1, "Batch request"},
+	{0x2, "Reply"},
+	{0x3, "Validate connection"},
+	{0x4, "Close connection"},
+	{0, NULL}
+};
+
+static const value_string icep_zipstatus_vals[] = {
+	{0x0, "Uncompressed, sender cannot accept a compressed reply"},
+	{0x1, "Uncompressed, sender can accept a compressed reply"},
+	{0x2, "Compressed, sender can accept a compressed reply"},
+	{0, NULL}
+};
+
+static const value_string icep_replystatus_vals[] = {
+	{0x0, "Success"},
+	{0x1, "User exception"},
+	{0x2, "Object does not exist"},
+	{0x3, "Facet does not exist"},
+	{0x4, "Operation does not exist"},
+	{0x5, "Unknown Ice local exception"},
+	{0x6, "Unknown Ice user exception"},
+	{0x7, "Unknown exception"},
+	{0, NULL}
+};
+
+static const value_string icep_mode_vals[] = {
+	{0x0, "normal"},
+	{0x1, "nonmutating"},
+	{0x2, "idempotent"},
+	{0, NULL}
+};
+
+static packet_info *mypinfo;
+
+
+
+/* 
+ * This function dissects an "Ice string", adds hf to "tree" and returns consumed 
+ * bytes in "*consumed", if errors "*consumed" is -1.
+ *
+ * Memory for the new string "*dest" is obtained with g_malloc, and caller 
+ * is responsible for it (i.e. don't forget to g_free() it if you pass *dest != NULL).
+ * "*dest" is a null terminated version of the dissected Ice string.
+ */
+static void dissect_ice_string(proto_tree *tree, int hf_icep, 
+			       tvbuff_t *tvb, guint32 offset, gint32 *consumed,
+			       char **dest, gboolean add_hf)
+{
+	/* p. 586 chapter 23.2.1 and p. 588 chapter 23.2.5 
+	 * string == Size + content 
+	 * string = 1byte (0..254) + string not null terminated 
+	 * or                                                  
+	 * string = 1byte (255) + 1int (255..2^32-1) + string not null terminated 
+	 */
+	
+	guint32 Size = 0;
+	const char *p;
+	char *s = NULL;
+	
+	(*consumed) = 0;
+	
+	/* check for first byte */
+	if ( !tvb_bytes_exist(tvb, offset, 1) ) {
+		
+		if (tree)
+			proto_tree_add_text(tree, tvb, offset, -1, 
+					    "1st byte of Size missing");
+		
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_str(mypinfo->cinfo, COL_INFO, 
+				       " (1st byte of Size missing)");
+		}
+		
+		(*consumed) = -1;
+		return;
+	}
+	
+	/* get the Size */
+	Size = tvb_get_guint8(tvb, offset);
+	offset++;
+	(*consumed)++;
+	
+	if ( Size == 255 ) {
+		
+		/* check for next 4 bytes */
+		if ( !tvb_bytes_exist(tvb, offset, 4) ) {
+			
+			if (tree)
+				proto_tree_add_text(tree, tvb, offset, -1,
+						    "second field of Size missing");
+			
+			if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+				col_append_str(mypinfo->cinfo, COL_INFO, 
+					       " (second field of Size missing)");
+			}
+			
+			(*consumed) = -1;
+			return;
+		}
+		
+		/* get second field of Size */
+		Size = tvb_get_letohl(tvb, offset);
+		offset += 4;
+		(*consumed) += 4;
+	}
+	
+	DBG1("string.Size --> %d\n", Size);
+	
+	/* check if the string exists */
+	if ( !tvb_bytes_exist(tvb, offset, Size) ) {
+		
+		if (tree)
+			proto_tree_add_text(tree, tvb, offset, -1, 
+					    "missing or truncated string");
+		
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_str(mypinfo->cinfo, COL_INFO, 
+				       " (missing or truncated string)");
+		}
+		
+		(*consumed) = -1;
+		return;
+	}
+
+	if ( Size > ICEP_MAX_ICE_STRING_LEN ) {
+		
+		if (tree)
+			proto_tree_add_text(tree, tvb, offset, -1, "string too long");
+		
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_str(mypinfo->cinfo, COL_INFO, 
+				       " (string too long)");
+		}
+		
+		(*consumed) = -1;
+		return;
+	}
+	
+	
+		
+	if ( Size != 0 ) {
+		p = tvb_get_ptr(tvb, offset, Size);
+		s = g_malloc(Size + 1);
+		strncpy(s, p, Size);
+		s[Size] = '\0';
+		if (tree && add_hf)
+			proto_tree_add_string(tree, hf_icep, tvb, offset, Size, s);
+	} else {
+		s = g_malloc( strlen("(empty)") + 1 );
+		sprintf(s, "(empty)");
+		s[strlen("(empty)")] = '\0';
+		/* display the 0x00 Size byte when click on a empty ice_string */
+		if (tree && add_hf)
+			proto_tree_add_string(tree, hf_icep, tvb, offset - 1, 1, s);
+	}
+	
+	if ( dest != NULL )
+		*dest = s;
+	else
+		g_free(s);
+	
+	offset += Size;
+	(*consumed) += Size;
+	return;
+}
+
+/* 
+ * This function dissects an "Ice facet", adds hf(s) to "tree" and returns consumed 
+ * bytes in "*consumed", if errors "*consumed" is -1.
+ */
+static void dissect_ice_facet(proto_tree *tree, int hf_icep, 
+			      tvbuff_t *tvb, guint32 offset, gint32 *consumed)
+{
+	/*  p. 588, chapter 23.2.6:
+	 *  "facet" is a StringSeq, a StringSeq is a:                
+	 *  sequence<string>
+	 *
+	 *
+	 * sequence == Size + SizeElements 
+	 * sequence = 1byte (0..254) + SizeElements 
+	 * or                                                      
+	 * sequence = 1byte (255) + 1int (255..2^32-1) + SizeElements 
+	 *
+	 *
+	 * p.613. chapter 23.3.2
+	 * "facet has either zero elements (empty) or one element"
+	 *
+	 *	 
+	 */
+	
+	guint32 Size = 0; /* number of elements in the sequence */
+	char *s = NULL;
+	
+	(*consumed) = 0;
+	
+	/* check first byte */
+	if ( !tvb_bytes_exist(tvb, offset, 1) ) {
+		
+		if (tree)
+			proto_tree_add_text(tree, tvb, offset, -1, "facet field missing");
+		
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_str(mypinfo->cinfo, COL_INFO, 
+				       " (facet field missing)");
+		}
+		
+		(*consumed) = -1;
+		return;
+	}
+	
+	/* get first byte of Size */
+	Size = tvb_get_guint8(tvb, offset);
+	offset++;
+	(*consumed)++;
+	
+	if ( Size == 0 ) {
+		
+		if (tree) {
+			s = g_malloc( strlen("(empty)") + 1 );
+			sprintf(s, "(empty)");
+			s[strlen("(empty)")] = '\0';
+			/* display the 0x00 Size byte when click on a empty ice_string */
+			proto_tree_add_string(tree, hf_icep, tvb, offset - 1, 1, s);
+			g_free(s);
+		}
+		return;
+	}
+	
+	if ( Size == 1 ) {
+		
+		gint32 consumed_facet = 0;
+		
+		dissect_ice_string(tree, hf_icep, tvb, offset, &consumed_facet, NULL, TRUE);
+		
+		if ( consumed_facet == -1 ) {
+			(*consumed) = -1;
+			return;
+		}
+		
+		offset += consumed_facet;
+		(*consumed) += consumed_facet;
+		return;
+	}
+	
+	/* if here => Size > 1 => not possible */
+	
+	if (tree)
+		/* display the XX Size byte when click here */
+		proto_tree_add_text(tree, tvb, offset - 1, 1, 
+				    "facet can be max one element");
+	
+	if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+		col_append_str(mypinfo->cinfo, COL_INFO, 
+			       " (facet can be max one element)");
+	}
+	
+	(*consumed) = -1;
+	return;
+}
+
+/* 
+ * This function dissects an "Ice context", adds hf(s) to "tree" and returns consumed 
+ * bytes in "*consumed", if errors "*consumed" is -1.
+ */
+static void dissect_ice_context(proto_tree *tree, tvbuff_t *tvb, guint32 offset, 
+				gint32 *consumed)
+{
+	/*  p. 588, chapter 23.2.7 and p. 613, 23.3.2:
+	 *  "context" is a dictionary<string, string>                
+	 *
+	 * dictionary<string, string> == Size + SizeKeyValuePairs 
+	 * dictionary<string, string> = 1byte (0..254) + SizeKeyValuePairs
+	 * or                                                      
+	 * dictionary<string, string>= 1byte (255) + 1int (255..2^32-1)+SizeKeyValuePairs 
+	 *	 
+	 */
+	
+	guint32 Size = 0; /* number of key-value in the dictionary */
+	guint32 i = 0;
+	char *s = NULL;
+	
+	(*consumed) = 0;
+	
+	/* check first byte */
+	if ( !tvb_bytes_exist(tvb, offset, 1) ) {
+		
+		if (tree)
+			proto_tree_add_text(tree, tvb, offset, -1, "context missing");
+		
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_str(mypinfo->cinfo, COL_INFO, 
+				       " (context missing)");
+		}
+		
+		(*consumed) = -1;
+		return;
+	}
+	
+	/* get first byte of Size */
+	Size = tvb_get_guint8(tvb, offset);
+	offset++;
+	(*consumed)++;
+	
+	if ( Size == 255 ) {
+		
+		/* check for next 4 bytes */
+		if ( !tvb_bytes_exist(tvb, offset, 4) ) {
+			
+			if (tree)
+				proto_tree_add_text(tree, tvb, offset, -1,
+						    "second field of Size missing");
+			
+			if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+				col_append_str(mypinfo->cinfo, COL_INFO, 
+					       " (second field of Size missing)");
+			}
+			
+			(*consumed) = -1;
+			return;
+		}
+		
+		/* get second field of Size */
+		Size = tvb_get_letohl(tvb, offset);
+		offset += 4;
+		(*consumed) += 4;
+	}
+	
+	DBG1("context.Size --> %d\n", Size);
+
+	if ( Size > ICEP_MAX_ICE_CONTEXT_PAIRS ) {
+		
+		if (tree)
+			/* display the XX Size byte when click here */
+			proto_tree_add_text(tree, tvb, offset - 1, 1, "too long context");
+		
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_str(mypinfo->cinfo, COL_INFO, 
+				       " (too long context)");
+		}
+		
+		(*consumed) = -1;
+		return;
+	}
+	
+	if (Size == 0) {
+		s = g_malloc( strlen("(empty)") + 1 );
+		sprintf(s, "(empty)");
+		s[strlen("(empty)")] = '\0';
+		/* display the 0x00 Size byte when click on a empty context */
+		if (tree)
+			proto_tree_add_string(tree, hf_icep_context, tvb, offset - 1, 1, s);
+		g_free(s);
+		return;
+	}
+	
+	/* looping through the dictionary */
+	for ( i = 0; i < Size; i++ ) {
+                /* key */
+		gint32 consumed_key = 0;
+		char *str_key = NULL;
+		/* value */
+		gint32 consumed_value = 0;
+		char *str_value = NULL;
+		
+
+		DBG1("looping through context dictionary, loop #%d\n", i);
+        
+		dissect_ice_string(tree, -1, tvb, offset, &consumed_key, 
+				   &str_key, FALSE);
+		
+		if ( consumed_key == -1 ) {
+			(*consumed) = -1;
+			g_free(str_key);
+			return;
+		}
+		
+		offset += consumed_key;
+		(*consumed) += consumed_key;
+		
+		dissect_ice_string(tree, -1, tvb, offset, &consumed_value, 
+				   &str_value, FALSE);
+		
+		if ( consumed_value == -1 ) {
+			(*consumed) = -1;
+			g_free(str_value);
+			g_free(str_key);
+			return;
+		}
+		
+		offset += consumed_value;
+		(*consumed) += consumed_value;
+		
+		if (tree && str_value && str_key) {
+			
+			proto_tree_add_text(tree, tvb,
+					    offset - (consumed_key + consumed_value) - 1, 
+					    (consumed_key + consumed_value) + 1,
+					    "Invocation Context: %s/%s",
+					    str_key, str_value);
+		}
+		
+		g_free(str_value);
+		g_free(str_key);
+	}
+}
+
+/* 
+ * This function dissects an "Ice params", adds hf(s) to "tree" and returns consumed 
+ * bytes in "*consumed", if errors "*consumed" is -1.
+ */
+static void dissect_ice_params(proto_tree *tree, tvbuff_t *tvb, 
+			       guint32 offset, gint32 *consumed)
+{
+	/*  p. 612, chapter 23.3.2 and p. 587, 23.2.2:
+	 *  "params" is an Encapsulation                
+	 *
+	 *  struct Encapsulation {
+	 *  	int size;
+	 *  	byte major;
+	 *      byte minor;
+	 *      //(size - 6) bytes of data
+	 *  }
+	 *   
+	 */
+	
+	gint32 size = 0;
+	gint tvb_data_remained = 0;
+	
+	(*consumed) = 0;
+	
+	/* check first 6 bytes */
+	if ( !tvb_bytes_exist(tvb, offset, ICEP_MIN_PARAMS_SIZE) ) {
+		
+		if (tree)
+			proto_tree_add_text(tree, tvb, offset, -1, "params missing");
+		
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_str(mypinfo->cinfo, COL_INFO, 
+				       " (params missing)");
+		}
+		
+		(*consumed) = -1;
+		return;
+	}
+	
+	/* get the size */
+	size = tvb_get_letohl(tvb, offset);
+	
+	DBG1("params.size --> %d\n", size);
+	
+	if ( size < ICEP_MIN_PARAMS_SIZE ) {
+		
+		if (tree)
+			proto_tree_add_text(tree, tvb, offset, 4, 
+					    "params size too small");
+		
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_str(mypinfo->cinfo, COL_INFO, 
+				       " (params size too small)");
+		}
+		
+		(*consumed) = -1;
+		return;
+	}
+	
+	if ( tree ) {
+	
+		proto_tree_add_item(tree, hf_icep_params_size, tvb, offset, 4, TRUE);
+		offset += 4;
+		(*consumed) += 4;
+		
+		proto_tree_add_item(tree, hf_icep_params_major, tvb, offset, 1, TRUE);
+		offset += 1;
+		(*consumed)++;
+		
+		proto_tree_add_item(tree, hf_icep_params_minor, tvb, offset, 1, TRUE);
+		offset += 1;
+		(*consumed)++;
+		
+	} else {
+		/* skipp size, major, minor */
+		offset += 6;
+		(*consumed) += 6;
+	}
+	
+	if( size == ICEP_MIN_PARAMS_SIZE ) /* no encapsulatd data present, it's normal */
+		return;
+	
+	/* check if I got all encapsulated data */
+	tvb_data_remained = tvb_reported_length_remaining(tvb, offset);
+	
+	if ( tvb_data_remained < ( size - ICEP_MIN_PARAMS_SIZE ) ) {
+		
+		if (tree)
+			proto_tree_add_text(tree, tvb, offset, -1,
+					    "missing encapsulated data (%d bytes)",
+					    size 
+					    - ICEP_MIN_PARAMS_SIZE 
+					    - tvb_data_remained);
+		
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_fstr(mypinfo->cinfo, COL_INFO,
+					" (missing encapsulated data (%d bytes))",
+					size
+					- ICEP_MIN_PARAMS_SIZE 
+					- tvb_data_remained);
+		}
+		
+		(*consumed) = -1;
+		return;
+	}
+	
+	/* encapsulated params */
+	
+	if (tree) {
+		proto_tree_add_text(tree, tvb, offset, (size - ICEP_MIN_PARAMS_SIZE),
+				    "Encapsulated parameters (%d bytes)", 
+				    (size - ICEP_MIN_PARAMS_SIZE));
+	}
+	
+	(*consumed) += (size - ICEP_MIN_PARAMS_SIZE);
+}
+
+static void dissect_icep_request_common(tvbuff_t *tvb, guint32 offset, 
+					proto_tree *icep_sub_tree, gint32 *total_consumed)
+{
+	/*  p. 613, chapter 23.3.3 and p. 612 chapter 23.3.2:
+	 *  Request and BatchRequest differ only in the first 4 bytes (requestID)
+	 *  so them share this part
+	 *
+	 *	 Ice::Identity id;
+	 *	 Ice::StringSeq facet;
+	 *	 string operation;
+	 *	 byte mode;
+	 *	 Ice::Context context;
+	 *	 Encapsulation params;
+	 *  }
+	 */
+	
+	gint32 consumed = 0;
+	char *namestr = NULL;
+	char *opstr = NULL;
+	
+	(*total_consumed) = 0;
+	
+	/* check common header (i.e. the batch request one)*/
+	if ( !tvb_bytes_exist(tvb, offset, ICEP_MIN_COMMON_REQ_HEADER_SIZE) ) {
+		
+		if (icep_sub_tree)
+			proto_tree_add_text(icep_sub_tree, tvb, offset, -1, 
+					    "too short header");
+		
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_str(mypinfo->cinfo, COL_INFO, 
+				       " (too short header)");
+		}
+		
+		goto error;
+	}
+	
+	/* got at least 15 bytes */
+	
+	/*  "id" is a:
+	 *  struct Identity {
+	 *      string name;
+	 *	string category;
+	 *  }
+	 */
+	
+	dissect_ice_string(icep_sub_tree, hf_icep_id_name, tvb, offset, 
+			   &consumed, &namestr, TRUE);
+	
+	if ( consumed == -1 )
+		goto error;
+	
+	offset += consumed; DBG1("consumed --> %d\n", consumed);
+	(*total_consumed) += consumed;
+	
+	
+	dissect_ice_string(icep_sub_tree, hf_icep_id_category, tvb, offset, 
+			   &consumed, NULL, TRUE);
+	
+	if ( consumed == -1 )
+		goto error;
+	
+	offset += consumed; DBG1("consumed --> %d\n", consumed);
+	(*total_consumed) += consumed;
+	
+	
+	/*  "facet" is a:
+	 *  sequence<string> StringSeq
+	 *
+	 */
+	
+	dissect_ice_facet(icep_sub_tree, hf_icep_facet, tvb, offset, &consumed);
+	
+	if ( consumed == -1 )
+		goto error;
+	
+	offset += consumed; DBG1("consumed --> %d\n", consumed);
+	(*total_consumed) += consumed;
+	
+	/*  "operation" is an ice_string
+	 *
+	 */
+	
+	dissect_ice_string(icep_sub_tree, hf_icep_operation, tvb, offset, 
+			   &consumed, &opstr, TRUE);
+	
+	if ( consumed == -1 )
+		goto error;
+	else {
+		offset += consumed; DBG1("consumed --> %d\n", consumed);
+		(*total_consumed) += consumed;
+
+		if ( opstr && namestr ) {
+			DBG2("operation --> %s.%s()\n", namestr, opstr);
+			if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+				col_append_fstr(mypinfo->cinfo, COL_INFO, " %s.%s()", 
+						namestr, opstr);
+			}
+			g_free(opstr);
+			g_free(namestr);
+		}
+	}
+	
+	/* check and get mode byte */
+	if ( !tvb_bytes_exist(tvb, offset, 1) ) {
+		
+		if (icep_sub_tree)
+			proto_tree_add_text(icep_sub_tree, tvb, offset, -1, 
+					    "mode field missing");
+		
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_str(mypinfo->cinfo, COL_INFO, 
+				       " (mode field missing)");
+		}
+		
+		goto error;
+	}
+	
+	if (icep_sub_tree) 
+		proto_tree_add_item(icep_sub_tree, hf_icep_mode, tvb, offset, 1, TRUE);
+	
+	offset++; DBG0("consumed --> 1\n");
+	(*total_consumed)++;
+	
+	
+	/*  "context" is a dictionary<string, string>
+	 *
+	 */
+	
+	dissect_ice_context(icep_sub_tree, tvb, offset, &consumed);
+	
+	if ( consumed == -1 )
+		goto error;
+	
+	offset += consumed; DBG1("consumed --> %d\n", consumed);
+	(*total_consumed) += consumed;
+	
+	/*  "params" is a Encapsulation
+	 *  
+	 */
+	
+	dissect_ice_params(icep_sub_tree, tvb, offset, &consumed);
+	
+	if ( consumed == -1 )
+		goto error;
+	
+	offset += consumed; DBG1("consumed --> %d\n", consumed);
+	(*total_consumed) += consumed;
+		
+	return;
+	
+error:
+	(*total_consumed) = -1;
+	g_free(namestr);
+	g_free(opstr);
+}
+
+
+static void dissect_icep_request(tvbuff_t *tvb, guint32 offset, proto_tree *icep_tree)
+{
+	/*  p. 612, chapter 23.3.2:
+	 *
+	 *  struct RequestData {
+	 * 	 int requestID;
+	 *	 Ice::Identity id;
+	 *	 Ice::StringSeq facet;
+	 *	 string operation;
+	 *	 byte mode;
+	 *	 Ice::Context context;
+	 *	 Encapsulation params;
+	 *  }
+	 */
+	
+	proto_item *ti = NULL;
+	proto_tree *icep_sub_tree = NULL;
+	gint32 consumed = 0;
+	guint32 reqid = 0;
+	
+	DBG0("dissect request\n");
+	
+	/* check for req id */
+	if ( !tvb_bytes_exist(tvb, offset, 4) ) {
+		
+		if (icep_tree)
+			proto_tree_add_text(icep_tree, tvb, offset, -1, 
+					    "too short header");
+		
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_str(mypinfo->cinfo, COL_INFO, 
+				       " (too short header)");
+		}
+		
+		return;
+	}
+	
+	/* got at least 4 bytes */
+	
+        /* create display subtree for this message type */
+	
+	reqid = tvb_get_letohl(tvb, offset);
+	
+	if (icep_tree) {
+		
+		ti = proto_tree_add_text(icep_tree, tvb, offset, -1, 
+					 "Request Message Body");
+		
+		icep_sub_tree = proto_item_add_subtree(ti, ett_icep_msg);
+		
+		proto_tree_add_item(icep_sub_tree, hf_icep_request_id, tvb, offset, 4, 
+				    TRUE);
+		
+	}
+	
+	if ( reqid != 0 ) {
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_fstr(mypinfo->cinfo, COL_INFO, "(%d):",
+					tvb_get_letohl(tvb, offset));
+		}
+	} else
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_str(mypinfo->cinfo, COL_INFO, "(oneway):");
+		}
+	
+	
+	offset += 4;
+	DBG0("consumed --> 4\n");
+	
+	dissect_icep_request_common(tvb, offset, icep_sub_tree, &consumed);
+	
+	if ( consumed == -1 )
+		return;
+	
+	offset += consumed;
+	DBG1("consumed --> %d\n", consumed);
+}
+
+
+
+static void dissect_icep_batch_request(tvbuff_t *tvb, guint32 offset, 
+				       proto_tree *icep_tree)
+{
+	/*  p. 613, chapter 23.3.3
+	 *  A batch request msg is a "sequence" of batch request
+	 *  Sequence is Size + elements
+	 *
+	 *  struct BatchRequestData {
+	 *	 Ice::Identity id;
+	 *	 Ice::StringSeq facet;
+	 *	 string operation;
+	 *	 byte mode;
+	 *	 Ice::Context context;
+	 *	 Encapsulation params;
+	 *  }
+	 *
+	 * NOTE!!!:
+	 * The only real implementation of the Ice protocol puts a 32bit count in front
+	 * of a Batch Request, *not* an Ice::Sequence (as the standard says). Basically the
+	 * same people wrote both code and standard so I'll follow the code.
+	 */
+	
+	proto_item *ti = NULL;
+	proto_tree *icep_sub_tree = NULL;
+	guint32 num_reqs = 0;
+	guint32 i = 0;
+	gint32 consumed = 0;
+		
+	DBG0("dissect batch request\n");
+	
+	/* check for first 4 byte */
+	if ( !tvb_bytes_exist(tvb, offset, 4) ) {
+		
+		if (icep_tree)
+			proto_tree_add_text(icep_tree, tvb, offset, -1, 
+					    "counter of batch requests missing");
+		
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_str(mypinfo->cinfo, COL_INFO, 
+				       " (counter of batch requests missing)");
+		}
+		
+		return;
+	}
+	
+	num_reqs = tvb_get_letohl(tvb, offset);
+	offset += 4;
+	
+	DBG1("batch_requests.count --> %d\n", num_reqs);
+	
+	if ( num_reqs > ICEP_MAX_BATCH_REQUESTS ) {
+		
+		if (icep_tree)
+			proto_tree_add_text(icep_tree, tvb, offset, -1,
+					    "too many batch requests (%d)", num_reqs);
+		
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_fstr(mypinfo->cinfo, COL_INFO, 
+					" (too many batch requests, %d)", 
+					num_reqs);
+		}
+		
+		return;
+	}
+
+	if ( num_reqs == 0 ) {
+		
+		if (icep_tree)
+			proto_tree_add_text(icep_tree, tvb, offset, -1,
+					    "empty batch requests sequence");
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_fstr(mypinfo->cinfo, COL_INFO, 
+					" (empty batch requests sequence)");
+		}
+		
+		return;
+	}
+	
+	
+	if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+		col_append_fstr(mypinfo->cinfo, COL_INFO, 
+				":");
+	}
+	
+	/*
+	 * process requests 
+	 */
+	
+	for ( i = 0; i < num_reqs; i++ ) {
+				
+		DBG1("looping through sequence of batch requests, loop #%d\n", i);
+		
+		/* create display subtree for this message type */
+		
+		if (icep_tree) {
+			
+			ti = proto_tree_add_text(icep_tree, tvb, offset, -1,
+						 "Batch Request Message Body: #%d", i);
+			
+			icep_sub_tree = proto_item_add_subtree(ti, ett_icep_msg);
+		
+		}
+			
+		if ( check_col(mypinfo->cinfo, COL_INFO) && (i != 0) ) {
+			col_append_fstr(mypinfo->cinfo, COL_INFO,
+					",");
+		}
+		
+		dissect_icep_request_common(tvb, offset, icep_sub_tree, &consumed);
+		
+		if ( consumed == -1 )
+			return;
+		
+		if ( icep_tree && ti )
+			proto_item_set_len(ti, consumed);
+		
+		offset += consumed;
+		DBG1("consumed --> %d\n", consumed);
+	}
+}
+
+static void dissect_icep_reply(tvbuff_t *tvb, guint32 offset, proto_tree *icep_tree)
+{
+	/*  p. 614, chapter 23.3.4:
+	 *
+	 *  struct ReplyData {
+	 * 	 int requestId;
+	 *	 byte replyStatus;
+	 *	 [... messageSize - 19 bytes ...  ]
+	 *  }
+	 */
+	
+	gint32 messageSize = 0;
+	guint32 tvb_data_remained = 0;
+	guint32 reported_reply_data = 0;
+	proto_item *ti = NULL;
+	proto_tree *icep_sub_tree = NULL;
+	
+	DBG0("dissect reply\n");
+	
+	/* get at least a full reply message header */
+	
+	if ( !tvb_bytes_exist(tvb, offset, ICEP_MIN_REPLY_SIZE) ) {
+		
+		if (icep_tree)
+			proto_tree_add_text(icep_tree, tvb, offset, -1, 
+					    "too short header");
+		
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_str(mypinfo->cinfo, COL_INFO, 
+				       " (too short header)");
+		}
+		
+		return;
+	}
+	
+	/* got 5 bytes, then data */
+	
+	/* create display subtree for this message type */
+	
+	if (icep_tree) {
+		
+		ti = proto_tree_add_text(icep_tree, tvb, offset, -1, 
+					 "Reply Message Body");
+		
+		icep_sub_tree = proto_item_add_subtree(ti, ett_icep_msg);
+		
+		proto_tree_add_item(icep_sub_tree, hf_icep_request_id, tvb, offset, 4, 
+				    TRUE);
+	}
+	
+	if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+		col_append_fstr(mypinfo->cinfo, COL_INFO, "(%d):",
+				tvb_get_letohl(tvb, offset));
+	}
+	
+	offset += 4;
+	
+	if (icep_tree)
+		proto_tree_add_item(icep_sub_tree, hf_icep_reply_status, tvb, offset, 1, 
+				    TRUE);
+	
+	if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+		col_append_fstr(mypinfo->cinfo, COL_INFO, " %s",
+				val_to_str(tvb_get_guint8(tvb, offset),
+					   icep_replystatus_vals,
+					   "unknown reply status"));
+	}
+	
+	offset++;
+		
+	DBG1("consumed --> %d\n", 5);
+	
+	/* check if I got all reply data */
+	tvb_data_remained = tvb_length_remaining(tvb, offset);
+	messageSize = tvb_get_letohl(tvb, 10);
+	reported_reply_data = messageSize - (ICEP_HEADER_SIZE + ICEP_MIN_REPLY_SIZE);
+	
+	/* no */
+	if ( tvb_data_remained < reported_reply_data ) {
+		
+		if (icep_sub_tree) 
+			proto_tree_add_text(icep_sub_tree, tvb, offset, -1,
+					    "Reply Data (missing %d bytes out of %d)",
+					    reported_reply_data - tvb_data_remained,
+					    reported_reply_data);
+		
+		if ( check_col(mypinfo->cinfo, COL_INFO) ) {
+			col_append_fstr(mypinfo->cinfo, COL_INFO,
+					" (missing reply data, %d bytes)",
+					reported_reply_data - tvb_data_remained);
+		}
+		
+		offset += tvb_data_remained;
+		DBG1("consumed --> %d\n", tvb_data_remained);
+		return;
+	}
+	
+	/* yes (reported_reply_data can be 0) */
+	
+	if (icep_sub_tree) {
+		
+		if ( reported_reply_data !=0 )
+			proto_tree_add_text(icep_sub_tree, tvb, offset, 
+					    reported_reply_data,
+					    "Reply data (%d bytes)",
+					    reported_reply_data);
+		else
+			proto_tree_add_text(icep_sub_tree, tvb, offset, 
+					    reported_reply_data,
+					    "Reply data (empty)");
+	}
+	
+	offset += reported_reply_data;
+	DBG1("consumed --> %d\n", reported_reply_data);
+}
+
+static guint get_icep_pdu_len(tvbuff_t *tvb, int offset)
+{
+	return tvb_get_letohl(tvb, offset + 10);
+}
+
+static void dissect_icep_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+	/*  p. 611, chapter 23.3.1:
+	 *
+	 *  struct HeaderData {
+	 * 	 int magic;
+	 *	 byte protocolMajor;
+	 *	 byte protocolMinor;
+	 *	 byte encodingMajor;
+	 *	 byte encodingMinor;
+	 *	 byte messageType;
+	 *	 byte compressionStatus;
+	 *	 int messageSize;
+	 *  }
+	 */
+	
+	proto_item *ti = NULL;
+	proto_tree *icep_tree = NULL;
+	guint32 offset = 0;
+
+        /* Make entries in Protocol column and Info column on summary display */
+	
+	if ( check_col(pinfo->cinfo, COL_PROTOCOL) ) 
+		col_set_str(pinfo->cinfo, COL_PROTOCOL, "ICEP");
+	
+	if ( check_col(pinfo->cinfo, COL_INFO) ) {
+		col_add_fstr(pinfo->cinfo, COL_INFO, "%s", 
+			     val_to_str(tvb_get_guint8(tvb, 8),
+					icep_msgtype_vals,
+					"Unknown Message Type: 0x%02x"));
+	}
+	
+	mypinfo = pinfo;
+	
+	if (tree) {
+		
+		DBG0("got an icep msg, start analisys\n");
+		
+                /* create display subtree for the protocol */
+		
+		ti = proto_tree_add_item(tree, proto_icep, tvb, 0, -1, FALSE);
+		
+		icep_tree = proto_item_add_subtree(ti, ett_icep);
+		
+                /* add items to the subtree */
+		
+		/* message header */
+		
+		proto_tree_add_text(icep_tree, tvb, offset, 4,
+				    "Magic Number: 'I','c','e','P'");
+		offset += 4;
+		
+		proto_tree_add_item(icep_tree, hf_icep_protocol_major, 
+				    tvb, offset, 1, TRUE);
+		offset++;
+		
+		proto_tree_add_item(icep_tree, hf_icep_protocol_minor, 
+				    tvb, offset, 1, TRUE);
+		offset++;
+		
+		proto_tree_add_item(icep_tree, hf_icep_encoding_major, 
+				    tvb, offset, 1, TRUE);
+		offset++;
+
+		proto_tree_add_item(icep_tree, hf_icep_encoding_minor, 
+				    tvb, offset, 1, TRUE);
+		offset++;
+
+		proto_tree_add_item(icep_tree, hf_icep_message_type, 
+				    tvb, offset, 1, TRUE);
+		offset++;
+
+		proto_tree_add_item(icep_tree, hf_icep_compression_status, 
+				    tvb, offset, 1, TRUE);
+		offset++;
+
+		proto_tree_add_item(icep_tree, hf_icep_message_size, 
+				    tvb, offset, 4, TRUE);
+		offset += 4;
+	} else {
+		offset += ICEP_HEADER_SIZE;
+	}
+	
+	switch(tvb_get_guint8(tvb, 8)) {
+	case 0x0:
+		DBG1("request message body: parsing %d bytes\n",
+		    tvb_length_remaining(tvb, offset));
+		dissect_icep_request(tvb, offset, icep_tree);
+		break;
+	case 0x1:
+		DBG1("batch request message body: parsing %d bytes\n",
+		    tvb_length_remaining(tvb, offset));
+		dissect_icep_batch_request(tvb, offset, icep_tree);
+		break;
+	case 0x2:
+		DBG1("reply message body: parsing %d bytes\n",
+		    tvb_length_remaining(tvb, offset));
+		dissect_icep_reply(tvb, offset, icep_tree);
+		break;
+	case 0x3:
+	case 0x4:
+	        /* messages already dissected */
+		break;
+	default:
+		if (tree)
+			proto_tree_add_text(tree, tvb, 8, 1, /* display msg type byte */
+					    "Unknown Message Type: 0x%02x", 
+					    tvb_get_guint8(tvb, 8));
+		break;
+	}
+}	
+
+/* entry point */
+static gboolean dissect_icep(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+	DBG0("triggered\n");
+	
+        /* get at least a full message header (taken from packet-yhoo.c) */
+	
+        /* check for magic string (taken from packet-giop.c) */
+	
+	if ( tvb_memeql(tvb, 0, ICEP_MAGIC, 4) == -1 ) {
+		/* Not a ICEP packet. */
+		return FALSE;
+	}
+		
+	/* start dissecting */
+	
+	tcp_dissect_pdus(tvb, pinfo, tree, TRUE, ICEP_HEADER_SIZE,
+	    get_icep_pdu_len, dissect_icep_pdu);
+
+	return TRUE;
+}
+
+
+/* Register the protocol with Ethereal */
+
+void proto_register_icep(void)
+{                 
+	
+        /* Setup list of header fields */
+	
+	static hf_register_info hf[] = {
+		
+		{ &hf_icep_protocol_major,
+		  { 
+			  "Protocol Major", "icep.protocol_major", 
+			  FT_INT8, BASE_DEC, NULL, 0x0, 
+			  "The protocol major version number", HFILL
+		  }
+		},
+		
+		{ &hf_icep_protocol_minor,
+		  { 
+			  "Protocol Minor", "icep.protocol_minor", 
+			  FT_INT8, BASE_DEC, NULL, 0x0, 
+			  "The protocol minor version number", HFILL
+		  }
+		},
+
+		{ &hf_icep_encoding_major,
+		  { 
+			  "Encoding Major", "icep.encoding_major", 
+			  FT_INT8, BASE_DEC, NULL, 0x0, 
+			  "The encoding major version number", HFILL
+		  }
+		},
+
+		{ &hf_icep_encoding_minor,
+		  { 
+			  "Encoding Minor", "icep.encoding_minor", 
+			  FT_INT8, BASE_DEC, NULL, 0x0, 
+			  "The encoding minor version number", HFILL
+		  }
+		},
+		
+		{ &hf_icep_message_type,
+		  { 
+			  "Message Type", "icep.message_type", 
+			  FT_INT8, BASE_DEC, VALS(icep_msgtype_vals), 0x0, 
+			  "The message type", HFILL
+		  }
+		},
+
+		{ &hf_icep_compression_status,
+		  { 
+			  "Compression Status", "icep.compression_status", 
+			  FT_INT8, BASE_DEC, VALS(icep_zipstatus_vals), 0x0, 
+			  "The compression status of the message", HFILL
+		  }
+		},
+		
+		{ &hf_icep_message_size,
+		  { 
+			  "Message Size", "icep.message_status", 
+			  FT_INT32, BASE_DEC, NULL, 0x0, 
+			  "The size of the message in bytes, including the header", 
+			  HFILL
+		  }
+		},
+		
+		{ &hf_icep_request_id,
+		  { 
+			  "Request Identifier", "icep.request_id", 
+			  FT_INT32, BASE_DEC, NULL, 0x0, 
+			  "The request identifier", 
+			  HFILL
+		  }
+		},
+		
+		{ &hf_icep_reply_status,
+		  { 
+			  "Reply Status", "icep.protocol_major", 
+			  FT_INT8, BASE_DEC, VALS(icep_replystatus_vals), 0x0, 
+			  "The reply status", HFILL
+		  }
+		},
+
+		{ &hf_icep_id_name,
+		  { 
+			  "Object Identity Name", "icep.id.name", 
+			  FT_STRINGZ, BASE_NONE, NULL, 0x0, 
+			  "The object identity name", HFILL
+		  }
+		},
+
+		{ &hf_icep_id_category,
+		  { 
+			  "Object Identity Content", "icep.id.content", 
+			  FT_STRINGZ, BASE_NONE, NULL, 0x0,
+			  "The object identity content", HFILL
+		  }
+		},
+
+		{ &hf_icep_facet,
+		  { 
+			  "Facet Name", "icep.facet", 
+			  FT_STRINGZ, BASE_NONE, NULL, 0x0, 
+			  "The facet name", HFILL
+		  }
+		},
+
+		{ &hf_icep_operation,
+		  { 
+			  "Operation Name", "icep.operation", 
+			  FT_STRINGZ, BASE_NONE, NULL, 0x0, 
+			  "The operation name", HFILL
+		  }
+		},
+
+		{ &hf_icep_mode,
+		  { 
+			  "Ice::OperationMode", "icep.operation_mode", 
+			  FT_INT8, BASE_DEC, VALS(icep_mode_vals), 0x0, 
+			  "A byte representing Ice::OperationMode", HFILL
+		  }
+		},
+
+		{ &hf_icep_context,
+		  { 
+			  "Invocation Context", "icep.context", 
+			  FT_STRINGZ, BASE_NONE, NULL, 0x0, 
+			  "The invocation context", HFILL
+		  }
+		},
+		
+		{ &hf_icep_params_size,
+		  { 
+			  "Input Parameters Size", "icep.params.size", 
+			  FT_INT32, BASE_DEC, NULL, 0x0, 
+			  "The encapsulated input parameters size", 
+			  HFILL
+		  }
+		},
+		
+		{ &hf_icep_params_major,
+		  { 
+			  "Input Parameters Encoding Major", 
+			  "icep.params.major", 
+			  FT_INT8, BASE_DEC, NULL, 0x0, 
+			  "The major encoding version of encapsulated parameters", 
+			  HFILL
+		  }
+		},
+		
+		{ &hf_icep_params_minor,
+		  { 
+			  "Input Parameters Encoding Minor", 
+			  "icep.params.minor", 
+			  FT_INT8, BASE_DEC, NULL, 0x0, 
+			  "The minor encoding version of encapsulated parameters", 
+			  HFILL
+		  }
+		},
+		
+	};
+	
+        /* Setup protocol subtree array */
+	
+	static gint *ett[] = {
+		&ett_icep,
+		&ett_icep_msg,
+	};
+	
+        /* Register the protocol name and description */
+	
+	proto_icep = 
+		proto_register_protocol("Internet Communications Engine Protocol",
+					"ICEP", "icep");
+	
+        /* Required function calls to register the header fields and subtrees used */
+	
+	proto_register_field_array(proto_icep, hf, array_length(hf));
+	proto_register_subtree_array(ett, array_length(ett));
+}
+
+
+void proto_reg_handoff_icep(void)
+{
+        /* Register as a heuristic TCP/UDP dissector */
+	
+	heur_dissector_add("tcp", dissect_icep, proto_icep);
+	heur_dissector_add("udp", dissect_icep, proto_icep);
+}
diff -urN ethereal-0.10.6/epan/dissectors/packet-icmpv6.c ethereal-0.10.7/epan/dissectors/packet-icmpv6.c
--- ethereal-0.10.6/epan/dissectors/packet-icmpv6.c	2004-08-12 17:42:12.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-icmpv6.c	2004-10-20 17:34:50.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-icmpv6.c
  * Routines for ICMPv6 packet disassembly
  *
- * $Id: packet-icmpv6.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-icmpv6.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -48,9 +48,9 @@
 #include <epan/packet.h>
 #include "packet-ipv6.h"
 #include "packet-dns.h"
-#include "in_cksum.h"
+#include <epan/in_cksum.h>
 #include <epan/addr_resolv.h>
-#include "ipproto.h"
+#include <epan/ipproto.h>
 
 #ifndef offsetof
 #define	offsetof(type, member)	((size_t)(&((type *)0)->member))
@@ -1652,6 +1652,7 @@
 
   icmpv6_handle = create_dissector_handle(dissect_icmpv6, proto_icmpv6);
   dissector_add("ip.proto", IP_PROTO_ICMPV6, icmpv6_handle);
+  dissector_add("wtap_encap", WTAP_ENCAP_RAW_ICMPV6, icmpv6_handle);
 
   /*
    * Get a handle for the IPv6 dissector.
diff -urN ethereal-0.10.6/epan/dissectors/packet-ieee80211.c ethereal-0.10.7/epan/dissectors/packet-ieee80211.c
--- ethereal-0.10.6/epan/dissectors/packet-ieee80211.c	2004-08-12 17:42:12.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ieee80211.c	2004-10-20 17:34:50.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 2000, Axis Communications AB
  * Inquiries/bugreports should be sent to Johan.Jorgensen@axis.com
  *
- * $Id: packet-ieee80211.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-ieee80211.c 12117 2004-09-28 00:06:32Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -61,13 +61,13 @@
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
 #include <epan/strutil.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "reassemble.h"
 #include "packet-ipx.h"
 #include "packet-llc.h"
 #include "packet-ieee80211.h"
 #include "etypes.h"
-#include "crc32.h"
+#include <epan/crc32.h>
 
 /* Defragment fragmented 802.11 datagrams */
 static gboolean wlan_defragment = TRUE;
diff -urN ethereal-0.10.6/epan/dissectors/packet-igmp.c ethereal-0.10.7/epan/dissectors/packet-igmp.c
--- ethereal-0.10.6/epan/dissectors/packet-igmp.c	2004-08-12 17:42:15.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-igmp.c	2004-10-20 17:34:50.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-igmp.c   2001 Ronnie Sahlberg <See AUTHORS for email>
  * Routines for IGMP packet disassembly
  *
- * $Id: packet-igmp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-igmp.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -108,8 +108,8 @@
 #endif
 
 #include <epan/packet.h>
-#include "ipproto.h"
-#include "in_cksum.h"
+#include <epan/ipproto.h>
+#include <epan/in_cksum.h>
 #include "packet-dvmrp.h"
 #include "packet-pim.h"
 #include "packet-mrdisc.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-igrp.c ethereal-0.10.7/epan/dissectors/packet-igrp.c
--- ethereal-0.10.6/epan/dissectors/packet-igrp.c	2004-08-12 17:41:58.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-igrp.c	2004-10-20 17:34:37.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for IGRP dissection
  * Copyright 2000, Paul Ionescu <paul@acorp.ro>
  *
- * $Id: packet-igrp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-igrp.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,7 +36,7 @@
 #include <string.h>
 #include <glib.h>
 #include <epan/packet.h>
-#include "ipproto.h"
+#include <epan/ipproto.h>
 
 #define IGRP_HEADER_LENGTH 12
 #define IGRP_ENTRY_LENGTH 14
diff -urN ethereal-0.10.6/epan/dissectors/packet-image-jfif.c ethereal-0.10.7/epan/dissectors/packet-image-jfif.c
--- ethereal-0.10.6/epan/dissectors/packet-image-jfif.c	2004-08-12 17:42:27.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-image-jfif.c	2004-10-20 17:34:58.000000000 -0500
@@ -3,7 +3,7 @@
  * Routines for JFIF image/jpeg media dissection
  * Copyright 2004, Olivier Biot.
  *
- * $Id: packet-image-jfif.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-image-jfif.c 12071 2004-09-23 17:39:13Z guy $
  *
  * Refer to the AUTHORS file or the AUTHORS section in the man page
  * for contacting the author(s) of this file.
@@ -592,7 +592,6 @@
 {
 	proto_item *ti = NULL;
 	proto_tree *subtree = NULL;
-	proto_tree *subtree_details = NULL;
 	char *str;
 	gint str_size;
 	guint32 offset, tiff_start;
@@ -707,6 +706,8 @@
 		offset += 4;
 		proto_tree_add_text(subtree, tvb, offset, -1, "Remainder of APP1 marker skipped");
 	} else {
+		proto_tree_add_text(subtree, tvb, offset, -1,
+				"Remaining segment data (%u bytes)", len - 2 - str_size);
 		proto_item_append_text(ti, " (Unknown identifier)");
 	}
 }
@@ -721,7 +722,6 @@
 {
 	proto_item *ti = NULL;
 	proto_tree *subtree = NULL;
-	proto_tree *subtree_details = NULL;
 	char *str;
 	gint str_size;
 
@@ -742,6 +742,8 @@
 	if (strcmp(str, "FPXR") == 0) {
 		proto_tree_add_text(tree, tvb, 0, -1, "Exif FlashPix APP2 application marker");
 	} else {
+		proto_tree_add_text(subtree, tvb, 4 + str_size, -1,
+				"Remaining segment data (%u bytes)", len - 2 - str_size);
 		proto_item_append_text(ti, " (Unknown identifier)");
 	}
 }
@@ -1191,7 +1193,7 @@
 
 	jfif_handle = create_dissector_handle(dissect_jfif, proto_jfif);
 
-	/* Register the GIF media type */
+	/* Register the JPEG media type */
 	dissector_add_string("media_type", "image/jfif", jfif_handle);
 	dissector_add_string("media_type", "image/jpg", jfif_handle);
 	dissector_add_string("media_type", "image/jpeg", jfif_handle);
diff -urN ethereal-0.10.6/epan/dissectors/packet-ip.c ethereal-0.10.7/epan/dissectors/packet-ip.c
--- ethereal-0.10.6/epan/dissectors/packet-ip.c	2004-08-12 17:42:05.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ip.c	2004-10-20 17:34:44.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-ip.c
  * Routines for IP and miscellaneous IP protocol packet disassembly
  *
- * $Id: packet-ip.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-ip.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,9 +36,9 @@
 
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
-#include "ipproto.h"
+#include <epan/ipproto.h>
 #include "ip_opts.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "reassemble.h"
 #include "etypes.h"
 #include "greproto.h"
@@ -48,9 +48,9 @@
 #include "arcnet_pids.h"
 #include "packet-ip.h"
 #include "packet-ipsec.h"
-#include "in_cksum.h"
+#include <epan/in_cksum.h>
 #include "nlpid.h"
-#include "tap.h"
+#include <epan/tap.h>
 
 static int ip_tap = -1;
 
@@ -1894,4 +1894,5 @@
 
   icmp_handle = create_dissector_handle(dissect_icmp, proto_icmp);
   dissector_add("ip.proto", IP_PROTO_ICMP, icmp_handle);
+  dissector_add("wtap_encap", WTAP_ENCAP_RAW_ICMP, icmp_handle);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-ipdc.c ethereal-0.10.7/epan/dissectors/packet-ipdc.c
--- ethereal-0.10.6/epan/dissectors/packet-ipdc.c	2004-08-12 17:41:57.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ipdc.c	2004-10-20 17:34:37.000000000 -0500
@@ -5,7 +5,7 @@
  *
  * Using IPDC spec 0.20.2
  *
- * $Id: packet-ipdc.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-ipdc.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -45,8 +45,8 @@
 #include "packet-ipdc.h"
 #include "packet-tcp.h"
 #include <epan/packet.h>
-#include "ipproto.h"
-#include "prefs.h"
+#include <epan/ipproto.h>
+#include <epan/prefs.h>
 
 static int proto_ipdc = -1;
 static int hf_ipdc_nr = -1;
@@ -413,8 +413,9 @@
 
 	ipdc_module = prefs_register_protocol(proto_ipdc, proto_reg_handoff_ipdc);
 	prefs_register_bool_preference(ipdc_module, "desegment_ipdc_messages",
-		"Desegment all IPDC messages spanning multiple TCP segments",
-		"Whether the IPDC dissector should desegment all messages spanning multiple TCP segments",
+		"Reassemble IPDC messages spanning multiple TCP segments",
+		"Whether the IPDC dissector should reassemble messages spanning multiple TCP segments."
+		" To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 		&ipdc_desegment);
 	prefs_register_uint_preference(ipdc_module, "tcp.port",
 		"IPDC monitoring port",
diff -urN ethereal-0.10.6/epan/dissectors/packet-ipsec.c ethereal-0.10.7/epan/dissectors/packet-ipsec.c
--- ethereal-0.10.6/epan/dissectors/packet-ipsec.c	2004-08-12 17:42:12.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ipsec.c	2004-10-20 17:34:49.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-ipsec.c
  * Routines for IPsec/IPComp packet disassembly
  *
- * $Id: packet-ipsec.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-ipsec.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -33,8 +33,8 @@
 #include <epan/packet.h>
 #include "packet-ipsec.h"
 #include <epan/addr_resolv.h>
-#include "ipproto.h"
-#include "prefs.h"
+#include <epan/ipproto.h>
+#include <epan/prefs.h>
 
 /* Place AH payload in sub tree */
 static gboolean g_ah_payload_in_subtree = FALSE;
diff -urN ethereal-0.10.6/epan/dissectors/packet-ipv6.c ethereal-0.10.7/epan/dissectors/packet-ipv6.c
--- ethereal-0.10.6/epan/dissectors/packet-ipv6.c	2004-08-12 17:42:30.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ipv6.c	2004-10-20 17:35:00.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-ipv6.c
  * Routines for IPv6 packet disassembly
  *
- * $Id: packet-ipv6.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-ipv6.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,9 +36,9 @@
 #include "packet-ipv6.h"
 #include "ip_opts.h"
 #include <epan/addr_resolv.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "reassemble.h"
-#include "ipproto.h"
+#include <epan/ipproto.h>
 #include "etypes.h"
 #include "ppptypes.h"
 #include "aftypes.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-ipvs-syncd.c ethereal-0.10.7/epan/dissectors/packet-ipvs-syncd.c
--- ethereal-0.10.6/epan/dissectors/packet-ipvs-syncd.c	2004-08-12 17:42:01.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ipvs-syncd.c	2004-10-20 17:34:41.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-ipvs-syncd.c   2001 Ronnie Sahlberg <See AUTHORS for email>
  * Routines for IGMP packet disassembly
  *
- * $Id: packet-ipvs-syncd.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-ipvs-syncd.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -35,8 +35,8 @@
 #endif
 
 #include <epan/packet.h>
-#include "ipproto.h"
-#include "in_cksum.h"
+#include <epan/ipproto.h>
+#include <epan/in_cksum.h>
 
 static int proto_ipvs_syncd = -1;
 static int hf_conn_count = -1;
diff -urN ethereal-0.10.6/epan/dissectors/packet-ipx.c ethereal-0.10.7/epan/dissectors/packet-ipx.c
--- ethereal-0.10.6/epan/dissectors/packet-ipx.c	2004-08-12 17:42:31.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ipx.c	2004-10-20 17:35:02.000000000 -0500
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 2000-2002 by Gilbert Ramirez.
  * Portions Copyright (c) Novell, Inc. 2002-2003
  *
- * $Id: packet-ipx.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-ipx.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -43,7 +43,7 @@
 #include "aftypes.h"
 #include "arcnet_pids.h"
 #include <epan/conversation.h>
-#include "tap.h"
+#include <epan/tap.h>
 
 static int ipx_tap = -1;
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-isakmp.c ethereal-0.10.7/epan/dissectors/packet-isakmp.c
--- ethereal-0.10.6/epan/dissectors/packet-isakmp.c	2004-08-12 17:42:30.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-isakmp.c	2004-10-20 17:35:00.000000000 -0500
@@ -4,7 +4,7 @@
  * for ISAKMP (RFC 2407)
  * Brad Robel-Forrest <brad.robel-forrest@watchguard.com>
  *
- * $Id: packet-isakmp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-isakmp.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -40,7 +40,8 @@
 
 #include <epan/packet.h>
 #include <epan/ipv6-utils.h>
-#include "ipproto.h"
+#include <epan/ipproto.h>
+#include <epan/dissectors/packet-x509if.h>
 
 #define isakmp_min(a, b)  ((a<b) ? a : b)
 
@@ -224,22 +225,38 @@
 static proto_tree *dissect_payload_header(tvbuff_t *, int, int, guint8,
     guint8 *, guint16 *, proto_tree *);
 
-static void dissect_sa(tvbuff_t *, int, int, proto_tree *, int);
-static void dissect_proposal(tvbuff_t *, int, int, proto_tree *, int);
-static void dissect_transform(tvbuff_t *, int, int, proto_tree *, int);
-static void dissect_key_exch(tvbuff_t *, int, int, proto_tree *, int);
-static void dissect_id(tvbuff_t *, int, int, proto_tree *, int);
-static void dissect_cert(tvbuff_t *, int, int, proto_tree *, int);
-static void dissect_certreq(tvbuff_t *, int, int, proto_tree *, int);
-static void dissect_hash(tvbuff_t *, int, int, proto_tree *, int);
-static void dissect_sig(tvbuff_t *, int, int, proto_tree *, int);
-static void dissect_nonce(tvbuff_t *, int, int, proto_tree *, int);
-static void dissect_notif(tvbuff_t *, int, int, proto_tree *, int);
-static void dissect_delete(tvbuff_t *, int, int, proto_tree *, int);
-static void dissect_vid(tvbuff_t *, int, int, proto_tree *, int);
-static void dissect_config(tvbuff_t *, int, int, proto_tree *, int);
-static void dissect_nat_discovery(tvbuff_t *, int, int, proto_tree *, int);
-static void dissect_nat_original_address(tvbuff_t *, int, int, proto_tree *, int);
+static void dissect_sa(tvbuff_t *, int, int, proto_tree *,
+    packet_info *, int);
+static void dissect_proposal(tvbuff_t *, int, int, proto_tree *,
+    packet_info *, int);
+static void dissect_transform(tvbuff_t *, int, int, proto_tree *,
+    packet_info *, int);
+static void dissect_key_exch(tvbuff_t *, int, int, proto_tree *,
+    packet_info *, int);
+static void dissect_id(tvbuff_t *, int, int, proto_tree *,
+    packet_info *, int);
+static void dissect_cert(tvbuff_t *, int, int, proto_tree *,
+    packet_info *, int);
+static void dissect_certreq(tvbuff_t *, int, int, proto_tree *,
+    packet_info *, int);
+static void dissect_hash(tvbuff_t *, int, int, proto_tree *,
+    packet_info *, int);
+static void dissect_sig(tvbuff_t *, int, int, proto_tree *,
+    packet_info *, int);
+static void dissect_nonce(tvbuff_t *, int, int, proto_tree *,
+    packet_info *, int);
+static void dissect_notif(tvbuff_t *, int, int, proto_tree *,
+    packet_info *, int);
+static void dissect_delete(tvbuff_t *, int, int, proto_tree *,
+    packet_info *, int);
+static void dissect_vid(tvbuff_t *, int, int, proto_tree *,
+    packet_info *, int);
+static void dissect_config(tvbuff_t *, int, int, proto_tree *,
+    packet_info *, int);
+static void dissect_nat_discovery(tvbuff_t *, int, int, proto_tree *,
+    packet_info *, int);
+static void dissect_nat_original_address(tvbuff_t *, int, int, proto_tree *,
+    packet_info *, int);
 
 static const char *payloadtype2str(guint8);
 static const char *exchtype2str(guint8);
@@ -257,12 +274,10 @@
 #define LOAD_TYPE_PROPOSAL	2	/* payload type for Proposal */
 #define	LOAD_TYPE_TRANSFORM	3	/* payload type for Transform */
 #define NUM_LOAD_TYPES		17
-#define loadtype2str(t)	\
-  ((t < NUM_LOAD_TYPES) ? strfuncs[t].str : "Unknown payload type")
 
 static struct strfunc {
   const char *	str;
-  void          (*func)(tvbuff_t *, int, int, proto_tree *, int);
+  void          (*func)(tvbuff_t *, int, int, proto_tree *, packet_info *, int);
 } strfuncs[NUM_LOAD_TYPES] = {
   {"NONE",			NULL              },
   {"Security Association",	dissect_sa        },
@@ -395,13 +410,15 @@
 /* 
 *  Seen in Netscreen. Suppose to be ASCII HeartBeat_Notify - but I don't know the rest yet. I suspect it then proceeds with
 *  8k10, which means every 8K (?), and version 1.0 of the protocol (?). I won't add it to the code, until I know what it really
-*  means. ykaul-at-netvision.net.il
+*  means. ykaul-at-bezeqint.net
 */
 static const guint8 VID_HeartBeat_Notify[VID_LEN] = {0x48, 0x65, 0x61, 0x72, 0x74, 0x42, 0x65, 0x61, 0x74, 0x5f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79}; 
 
+static int hf_ike_certificate_authority = -1;
+
 static void
 dissect_payloads(tvbuff_t *tvb, proto_tree *tree, guint8 initial_payload,
-		 int offset, int length)
+		 int offset, int length, packet_info *pinfo)
 {
   guint8 payload, next_payload;
   guint16		payload_length;
@@ -425,11 +442,18 @@
     if (payload_length >= 4) {	/* XXX = > 4? */
       if (payload < NUM_LOAD_TYPES && strfuncs[payload].func != NULL) {
         (*strfuncs[payload].func)(tvb, offset + 4, payload_length - 4, ntree,
-				  -1);
+				  pinfo, -1);
       }
       else {
-        proto_tree_add_text(ntree, tvb, offset + 4, payload_length - 4,
-            "Payload");
+	if (payload == 130)
+	  dissect_nat_discovery(tvb, offset + 4, payload_length - 4, ntree,
+				pinfo, -1);
+	else if (payload == 131)
+	  dissect_nat_original_address(tvb, offset + 4, payload_length - 4,
+				       ntree, pinfo, -1);
+	else
+	  proto_tree_add_text(ntree, tvb, offset + 4, payload_length - 4,
+			      "Payload");
       }
     }
     else {
@@ -540,7 +564,7 @@
 			len, plurality(len, "", "s"));
       }
     } else
-      dissect_payloads(tvb, isakmp_tree, hdr.next_payload, offset, len);
+      dissect_payloads(tvb, isakmp_tree, hdr.next_payload, offset, len, pinfo);
   }
 }
 
@@ -562,7 +586,7 @@
   payload_length = tvb_get_ntohs(tvb, offset + 2);
 
   ti = proto_tree_add_text(tree, tvb, offset, payload_length,
-            "%s payload", loadtype2str(payload));
+            "%s payload", payloadtype2str(payload));
   ntree = proto_item_add_subtree(ti, ett_isakmp_payload);
 
   proto_tree_add_text(ntree, tvb, offset, 1,
@@ -576,8 +600,8 @@
 }
 
 static void
-dissect_sa(tvbuff_t *tvb, int offset, int length, proto_tree *tree,
-    int unused _U_)
+dissect_sa(tvbuff_t *tvb, int offset, int length, proto_tree *tree, 
+    packet_info *pinfo, int unused _U_)
 {
   guint32		doi;
   guint32		situation;
@@ -610,7 +634,7 @@
     offset += 4;
     length -= 4;
 
-    dissect_payloads(tvb, tree, LOAD_TYPE_PROPOSAL, offset, length);
+    dissect_payloads(tvb, tree, LOAD_TYPE_PROPOSAL, offset, length, pinfo);
   } else {
     /* Unknown */
     proto_tree_add_text(tree, tvb, offset, length,
@@ -621,7 +645,7 @@
 
 static void
 dissect_proposal(tvbuff_t *tvb, int offset, int length, proto_tree *tree,
-    int unused _U_)
+    packet_info *pinfo _U_, int unused _U_)
 {
   guint8		protocol_id;
   guint8		spi_size;
@@ -676,7 +700,8 @@
       break;
     }
     if (payload_length >= 4)
-      dissect_transform(tvb, offset + 4, payload_length - 4, ntree, protocol_id);
+      dissect_transform(tvb, offset + 4, payload_length - 4, ntree,
+			pinfo, protocol_id);
     else
       proto_tree_add_text(ntree, tvb, offset + 4, payload_length - 4, "Payload");
     offset += payload_length;
@@ -687,7 +712,7 @@
 
 static void
 dissect_transform(tvbuff_t *tvb, int offset, int length, proto_tree *tree,
-    int protocol_id)
+    packet_info *pinfo _U_, int protocol_id)
 {
   guint8		transform_id;
   guint8		transform_num;
@@ -776,14 +801,14 @@
 
 static void
 dissect_key_exch(tvbuff_t *tvb, int offset, int length, proto_tree *tree,
-    int unused _U_)
+    packet_info *pinfo _U_, int unused _U_)
 {
   proto_tree_add_text(tree, tvb, offset, length, "Key Exchange Data");
 }
 
 static void
 dissect_id(tvbuff_t *tvb, int offset, int length, proto_tree *tree,
-    int unused _U_)
+    packet_info *pinfo, int unused _U_)
 {
   guint8		id_type;
   guint8		protocol_id;
@@ -833,6 +858,10 @@
 			  ip_to_str(tvb_get_ptr(tvb, offset, 4)),
 			  ip_to_str(tvb_get_ptr(tvb, offset+4, 4)));
       break;
+    case 9:
+      dissect_x509if_Name(FALSE, tvb, offset, pinfo, tree,
+			  hf_ike_certificate_authority);
+      break;
     default:
       proto_tree_add_text(tree, tvb, offset, length, "Identification Data");
       break;
@@ -841,7 +870,7 @@
 
 static void
 dissect_cert(tvbuff_t *tvb, int offset, int length, proto_tree *tree,
-    int unused _U_)
+    packet_info *pinfo _U_, int unused _U_)
 {
   guint8		cert_enc;
 
@@ -857,7 +886,7 @@
 
 static void
 dissect_certreq(tvbuff_t *tvb, int offset, int length, proto_tree *tree,
-    int unused _U_)
+    packet_info *pinfo, int unused _U_)
 {
   guint8		cert_type;
 
@@ -868,33 +897,40 @@
   offset += 1;
   length -= 1;
 
-  proto_tree_add_text(tree, tvb, offset, length, "Certificate Authority");
+  if (length) {
+    if (cert_type == 4)
+      dissect_x509if_Name(FALSE, tvb, offset, pinfo, tree, hf_ike_certificate_authority);
+    else
+      proto_tree_add_text(tree, tvb, offset, length, "Certificate Authority");
+  }
+  else
+    proto_tree_add_text(tree, tvb, offset, length, "Certificate Authority (empty)");
 }
 
 static void
 dissect_hash(tvbuff_t *tvb, int offset, int length, proto_tree *tree,
-    int unused _U_)
+    packet_info *pinfo _U_, int unused _U_)
 {
   proto_tree_add_text(tree, tvb, offset, length, "Hash Data");
 }
 
 static void
 dissect_sig(tvbuff_t *tvb, int offset, int length, proto_tree *tree,
-    int unused _U_)
+    packet_info *pinfo _U_, int unused _U_)
 {
   proto_tree_add_text(tree, tvb, offset, length, "Signature Data");
 }
 
 static void
 dissect_nonce(tvbuff_t *tvb, int offset, int length, proto_tree *tree,
-    int unused _U_)
+    packet_info *pinfo _U_, int unused _U_)
 {
   proto_tree_add_text(tree, tvb, offset, length, "Nonce Data");
 }
 
 static void
 dissect_notif(tvbuff_t *tvb, int offset, int length, proto_tree *tree,
-    int unused _U_)
+    packet_info *pinfo _U_, int unused _U_)
 {
   guint32		doi;
   guint8		protocol_id;
@@ -939,7 +975,7 @@
 
 static void
 dissect_delete(tvbuff_t *tvb, int offset, int length, proto_tree *tree,
-    int unused _U_)
+    packet_info *pinfo _U_, int unused _U_)
 {
   guint32		doi;
   guint8		protocol_id;
@@ -988,7 +1024,7 @@
 
 static void
 dissect_vid(tvbuff_t *tvb, int offset, int length, proto_tree *tree,
-    int unused _U_)
+    packet_info *pinfo _U_, int unused _U_)
 {
   guint32 CPproduct, CPversion;
   const guint8 * pVID;
@@ -1016,7 +1052,7 @@
 	}
 	offset += sizeof(CPproduct);
 	CPversion = tvb_get_ntohl(tvb, offset);
-	pt = proto_tree_add_text(ntree, tvb, offset, length, "Version: ");
+	pt = proto_tree_add_text(ntree, tvb, offset, sizeof(CPversion), "Version: ");
 	switch (CPversion) {
 		case 2: proto_item_append_text(pt, "4.1");
 			break;
@@ -1039,6 +1075,8 @@
 		default: proto_item_append_text(pt, " Unknown CP version!");
 			break;
 	}
+	offset += sizeof(CPversion);
+	proto_tree_add_text(ntree, tvb, offset, length - VID_CP_LEN - sizeof(CPproduct) - sizeof(CPversion),"Check Point Vendor ID parameters"); 
   }
   else
   if (memcmp(pVID, VID_CYBERGUARD, isakmp_min(VID_LEN, length)) == 0)
@@ -1196,7 +1234,7 @@
 
 static void
 dissect_config(tvbuff_t *tvb, int offset, int length, proto_tree *tree,
-    int unused _U_)
+    packet_info *pinfo _U_, int unused _U_)
 {
   guint8		type;
 
@@ -1246,7 +1284,7 @@
 
 static void
 dissect_nat_discovery(tvbuff_t *tvb, int offset, int length, proto_tree *tree,
-    int unused _U_)
+    packet_info *pinfo _U_, int unused _U_)
 {
   proto_tree_add_text(tree, tvb, offset, length,
 		      "Hash of address and port: %s",
@@ -1255,7 +1293,7 @@
 
 static void
 dissect_nat_original_address(tvbuff_t *tvb, int offset, int length, proto_tree *tree,
-    int unused _U_)
+    packet_info *pinfo _U_, int unused _U_)
 {
   guint8 id_type;
   guint32 addr_ipv4;
@@ -1312,6 +1350,10 @@
     return strfuncs[type].str;
   if (type < 128)
     return "RESERVED";
+  if (type == 130)
+    return "NAT-D (draft-ietf-ipsec-nat-t-ike-01 to 04)";
+  if (type == 131)
+    return "NAT-OA (draft-ietf-ipsec-nat-t-ike-01 to 04)";
   return "Private USE";
 }
 
@@ -1691,10 +1733,11 @@
 void
 proto_register_isakmp(void)
 {
-/*  static hf_register_info hf[] = {
-    { &variable,
-    { "Name",           "isakmp.abbreviation", TYPE, VALS_POINTER }},
-  };*/
+  static hf_register_info hf[] = {
+    { &hf_ike_certificate_authority,
+      { "Certificate Authority Distinguished Name", "ike.cert_authority_dn", FT_UINT32, BASE_DEC, NULL, 0x0, "Certificate Authority Distinguished Name", HFILL }
+    },
+  };
   static gint *ett[] = {
     &ett_isakmp,
     &ett_isakmp_flags,
@@ -1703,7 +1746,7 @@
 
   proto_isakmp = proto_register_protocol("Internet Security Association and Key Management Protocol",
 					       "ISAKMP", "isakmp");
-/*  proto_register_field_array(proto_isakmp, hf, array_length(hf));*/
+  proto_register_field_array(proto_isakmp, hf, array_length(hf));
   proto_register_subtree_array(ett, array_length(ett));
 
   register_dissector("isakmp", dissect_isakmp, proto_isakmp);
diff -urN ethereal-0.10.6/epan/dissectors/packet-iscsi.c ethereal-0.10.7/epan/dissectors/packet-iscsi.c
--- ethereal-0.10.6/epan/dissectors/packet-iscsi.c	2004-08-12 17:42:26.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-iscsi.c	2004-10-20 17:34:55.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 2001, Eurologic and Mark Burton <markb@ordern.com>
  *  2004 Request/Response matching and Service Response Time: ronnie sahlberg
  *
- * $Id: packet-iscsi.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-iscsi.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -35,7 +35,7 @@
 #include <glib.h>
 
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/conversation.h>
 #include "packet-scsi.h"
 #include "epan/nstime.h"
@@ -66,13 +66,10 @@
 static guint32 bogus_pdu_data_length_threshold = 256 * 1024;
 
 static int enableDataDigests = FALSE;
-static int enableHeaderDigests = FALSE;
 
 static int dataDigestIsCRC32 = TRUE;
-static int headerDigestIsCRC32 = TRUE;
 
 static int dataDigestSize = 4;
-static int headerDigestSize = 4;
 
 static guint iscsi_port = 3260;
 
@@ -94,7 +91,6 @@
 static int hf_iscsi_vendor_specific_data = -1;
 static int hf_iscsi_Opcode = -1;
 static int hf_iscsi_Flags = -1;
-static int hf_iscsi_HeaderDigest = -1;
 static int hf_iscsi_HeaderDigest32 = -1;
 static int hf_iscsi_DataDigest = -1;
 static int hf_iscsi_DataDigest32 = -1;
@@ -198,6 +194,34 @@
 static gint ett_iscsi_ISID = -1;
 /* #endif */
 
+#define ISCSI_HEADER_DIGEST_AUTO	0
+#define ISCSI_HEADER_DIGEST_NONE	1
+#define ISCSI_HEADER_DIGEST_CRC32	2
+/* this structure contains session wide state for all iscsi sessions */
+typedef struct _iscsi_session_t {
+	guint32	conv_idx;	/* unique ID for conversation */
+	guint32 header_digest;
+} iscsi_session_t;
+static GHashTable *iscsi_session_table = NULL;
+static GMemChunk *iscsi_sessions = NULL;
+static gint
+iscsi_session_equal(gconstpointer v, gconstpointer w)
+{
+  const iscsi_session_t *v1 = (const iscsi_session_t *)v;
+  const iscsi_session_t *v2 = (const iscsi_session_t *)w;
+
+  return (v1->conv_idx == v2->conv_idx);
+}
+
+static guint
+iscsi_session_hash (gconstpointer v)
+{
+	const iscsi_session_t *key = (const iscsi_session_t *)v;
+
+	return key->conv_idx;
+}
+
+
 
 /* #ifdef DRAFT08 */
 #define X_BIT 0x80
@@ -671,19 +695,38 @@
 static void
 iscsi_init_protocol(void)
 {
-    if (iscsi_req_vals)
+    if (iscsi_sessions) {
+        g_mem_chunk_destroy(iscsi_sessions);
+	iscsi_sessions=NULL;
+    }
+    if (iscsi_req_vals) {
         g_mem_chunk_destroy(iscsi_req_vals);
-    if (iscsi_req_unmatched)
+	iscsi_req_vals=NULL;
+    }
+    if (iscsi_req_unmatched) {
         g_hash_table_destroy(iscsi_req_unmatched);
-    if (iscsi_req_matched)
+	iscsi_req_unmatched=NULL;
+    }
+    if (iscsi_req_matched) {
         g_hash_table_destroy(iscsi_req_matched);
+	iscsi_req_matched=NULL;
+    }
+    if (iscsi_session_table) {
+        g_hash_table_destroy(iscsi_session_table);
+	iscsi_session_table=NULL;
+    }
 
     iscsi_req_unmatched = g_hash_table_new(iscsi_hash_unmatched, iscsi_equal_unmatched);
     iscsi_req_matched = g_hash_table_new(iscsi_hash_matched, iscsi_equal_matched);
+    iscsi_session_table = g_hash_table_new(iscsi_session_hash, iscsi_session_equal);
     iscsi_req_vals = g_mem_chunk_new("iscsi_req_vals",
                                    sizeof(iscsi_conv_data_t),
                                    iscsi_init_count * sizeof(iscsi_conv_data_t),
                                    G_ALLOC_AND_FREE);
+    iscsi_sessions = g_mem_chunk_new("iscsi_sessions",
+                                   sizeof(iscsi_session_t),
+                                   iscsi_init_count * sizeof(iscsi_session_t),
+                                   G_ALLOC_AND_FREE);
 }
 
 static int
@@ -707,26 +750,23 @@
 }
 
 static gint
-handleHeaderDigest(proto_item *ti, tvbuff_t *tvb, guint offset, int headerLen) {
+handleHeaderDigest(iscsi_session_t *iscsi_session, proto_item *ti, tvbuff_t *tvb, guint offset, int headerLen) {
     int available_bytes = tvb_length_remaining(tvb, offset);
-    if(enableHeaderDigests) {
-	if(headerDigestIsCRC32) {
-	    if(available_bytes >= (headerLen + 4)) {
-		guint32 crc = ~calculateCRC32(tvb_get_ptr(tvb, offset, headerLen), headerLen, CRC32C_PRELOAD);
-		guint32 sent = tvb_get_ntohl(tvb, offset + headerLen);
-		if(crc == sent) {
-		    proto_tree_add_uint_format(ti, hf_iscsi_HeaderDigest32, tvb, offset + headerLen, 4, sent, "HeaderDigest: 0x%08x (Good CRC32)", sent);
-		}
-		else {
-		    proto_tree_add_uint_format(ti, hf_iscsi_HeaderDigest32, tvb, offset + headerLen, 4, sent, "HeaderDigest: 0x%08x (Bad CRC32, should be 0x%08x)", sent, crc);
-		}
+
+    switch(iscsi_session->header_digest){
+    case ISCSI_HEADER_DIGEST_CRC32:
+	if(available_bytes >= (headerLen + 4)) {
+	    guint32 crc = ~calculateCRC32(tvb_get_ptr(tvb, offset, headerLen), headerLen, CRC32C_PRELOAD);
+	    guint32 sent = tvb_get_ntohl(tvb, offset + headerLen);
+	    if(crc == sent) {
+		proto_tree_add_uint_format(ti, hf_iscsi_HeaderDigest32, tvb, offset + headerLen, 4, sent, "HeaderDigest: 0x%08x (Good CRC32)", sent);
+	    } else {
+		proto_tree_add_uint_format(ti, hf_iscsi_HeaderDigest32, tvb, offset + headerLen, 4, sent, "HeaderDigest: 0x%08x (Bad CRC32, should be 0x%08x)", sent, crc);
+printf("bad digest\n");
 	    }
-	    return offset + headerLen + 4;
 	}
-	if(available_bytes >= (headerLen + headerDigestSize)) {
-	    proto_tree_add_item(ti, hf_iscsi_HeaderDigest, tvb, offset + headerLen, headerDigestSize, FALSE);
-	}
-	return offset + headerLen + headerDigestSize;
+	return offset + headerLen + 4;
+        break;
     }
     return offset + headerLen;
 }
@@ -800,7 +840,7 @@
 
 /* Code to actually dissect the packets */
 static void
-dissect_iscsi_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, guint8 opcode, const char *opcode_str, guint32 data_segment_len) {
+dissect_iscsi_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, guint8 opcode, const char *opcode_str, guint32 data_segment_len, iscsi_session_t *iscsi_session) {
 
     guint original_offset = offset;
     proto_tree *ti = NULL;
@@ -808,7 +848,6 @@
     gboolean S_bit=FALSE;
     guint cdb_offset = offset + 32; /* offset of CDB from start of PDU */
     guint end_offset = offset + tvb_length_remaining(tvb, offset);
-    conversation_t *conversation = NULL;
     iscsi_conv_data_t *cdata = NULL;
     scsi_task_id_t task_key;
     int paddedDataSegmentLength = data_segment_len;
@@ -827,90 +866,73 @@
     if ((opcode == ISCSI_OPCODE_SCSI_RESPONSE) ||
         (opcode == ISCSI_OPCODE_SCSI_DATA_IN) ||
         (opcode == ISCSI_OPCODE_SCSI_DATA_OUT)) {
-        conversation = find_conversation (&pinfo->src, &pinfo->dst,
-                                          pinfo->ptype, pinfo->srcport,
-                                          pinfo->destport, 0);
-        if (conversation) {
-            if (!pinfo->fd->flags.visited){
-                iscsi_conv_data_t ckey;
-                ckey.conv_idx = conversation->index;
-                ckey.itt = tvb_get_ntohl (tvb, offset+16);
+        if (!pinfo->fd->flags.visited){
+            iscsi_conv_data_t ckey;
+            ckey.conv_idx = iscsi_session->conv_idx;
+            ckey.itt = tvb_get_ntohl (tvb, offset+16);
 
-                /* first time we see this packet. check if we can find the request */
-                cdata = (iscsi_conv_data_t *)g_hash_table_lookup (iscsi_req_unmatched, &ckey);
-                if (cdata){
-                    if (cdata->data_in_frame+cdata->data_out_frame+cdata->response_frame==0){
-                        /* this is the first response to the request, add it to the matched table */
-                        g_hash_table_insert (iscsi_req_matched, cdata, cdata);
-                    }
-                    switch(opcode){
-                    case ISCSI_OPCODE_SCSI_RESPONSE:
-                        cdata->response_frame=pinfo->fd->num;
-                        break;
-                    case ISCSI_OPCODE_SCSI_DATA_IN:
-                        /* a bit ugly but we need to check the S bit here */
-                        if(tvb_get_guint8(tvb, offset+1)&ISCSI_SCSI_DATA_FLAG_S){
-                            cdata->response_frame=pinfo->fd->num;
-                        }
-                        cdata->data_in_frame=pinfo->fd->num;
-                        break;
-                    case ISCSI_OPCODE_SCSI_DATA_OUT:
-                        cdata->data_out_frame=pinfo->fd->num;
-                        break;
-                    }
+            /* first time we see this packet. check if we can find the request */
+            cdata = (iscsi_conv_data_t *)g_hash_table_lookup (iscsi_req_unmatched, &ckey);
+            if (cdata){
+                if (cdata->data_in_frame+cdata->data_out_frame+cdata->response_frame==0){
+                    /* this is the first response to the request, add it to the matched table */
+                    g_hash_table_insert (iscsi_req_matched, cdata, cdata);
                 }
-            } else {
-                iscsi_conv_data_t ckey;
-                ckey.conv_idx = conversation->index;
-                ckey.itt = tvb_get_ntohl (tvb, offset+16);
-                ckey.request_frame=0;
-                ckey.data_in_frame=0;
-                ckey.data_out_frame=0;
-                ckey.response_frame=0;
                 switch(opcode){
                 case ISCSI_OPCODE_SCSI_RESPONSE:
-                    ckey.response_frame=pinfo->fd->num;
+                    cdata->response_frame=pinfo->fd->num;
                     break;
                 case ISCSI_OPCODE_SCSI_DATA_IN:
-                    ckey.data_in_frame=pinfo->fd->num;
+                    /* a bit ugly but we need to check the S bit here */
+                    if(tvb_get_guint8(tvb, offset+1)&ISCSI_SCSI_DATA_FLAG_S){
+                        cdata->response_frame=pinfo->fd->num;
+                    }
+                    cdata->data_in_frame=pinfo->fd->num;
                     break;
                 case ISCSI_OPCODE_SCSI_DATA_OUT:
-                    ckey.data_out_frame=pinfo->fd->num;
+                    cdata->data_out_frame=pinfo->fd->num;
                     break;
                 }
-
-                /* we have seen this one before,   pick it up from the matched table */
-                cdata = (iscsi_conv_data_t *)g_hash_table_lookup (iscsi_req_matched, &ckey);
             }
-
-            if (cdata){
-                task_key.conv_id = cdata->conv_idx;
-                task_key.task_id = cdata->itt;
-                pinfo->private_data = &task_key;
-            } else {
-                pinfo->private_data = NULL;
+        } else {
+            iscsi_conv_data_t ckey;
+            ckey.conv_idx = iscsi_session->conv_idx;
+            ckey.itt = tvb_get_ntohl (tvb, offset+16);
+            ckey.request_frame=0;
+            ckey.data_in_frame=0;
+            ckey.data_out_frame=0;
+            ckey.response_frame=0;
+            switch(opcode){
+            case ISCSI_OPCODE_SCSI_RESPONSE:
+                ckey.response_frame=pinfo->fd->num;
+                break;
+            case ISCSI_OPCODE_SCSI_DATA_IN:
+                ckey.data_in_frame=pinfo->fd->num;
+                break;
+            case ISCSI_OPCODE_SCSI_DATA_OUT:
+                ckey.data_out_frame=pinfo->fd->num;
+                break;
             }
+
+            /* we have seen this one before,   pick it up from the matched table */
+            cdata = (iscsi_conv_data_t *)g_hash_table_lookup (iscsi_req_matched, &ckey);
+        }
+
+        if (cdata){
+            task_key.conv_id = cdata->conv_idx;
+            task_key.task_id = cdata->itt;
+            pinfo->private_data = &task_key;
         } else {
-            /* no conversation, meaning we didn't see the request */
             pinfo->private_data = NULL;
         }
 
     } else if (opcode == ISCSI_OPCODE_SCSI_COMMAND) {
-        conversation = find_conversation (&pinfo->src, &pinfo->dst,
-                                          pinfo->ptype, pinfo->srcport,
-                                          pinfo->destport, 0);
-        if (!conversation) {
-            conversation = conversation_new (&pinfo->src, &pinfo->dst,
-                                             pinfo->ptype, pinfo->srcport,
-                                             pinfo->destport, 0);
-        }
-
         if (!pinfo->fd->flags.visited){
             iscsi_conv_data_t ckey;
 
             /* first time we see this packet. */
             /*check if we have seen this request before and delete it in that case */
-            ckey.conv_idx = conversation->index;
+            ckey.conv_idx = iscsi_session->conv_idx;
             ckey.itt = tvb_get_ntohl (tvb, offset+16);
             cdata = (iscsi_conv_data_t *)g_hash_table_lookup (iscsi_req_unmatched, &ckey);
             if (cdata){
@@ -919,7 +941,7 @@
 
             /* add this new transaction to the unmatched table */
             cdata = g_mem_chunk_alloc (iscsi_req_vals);
-            cdata->conv_idx = conversation->index;
+            cdata->conv_idx = iscsi_session->conv_idx;
             cdata->itt = tvb_get_ntohl (tvb, offset+16);
             cdata->request_frame=pinfo->fd->num;
             cdata->data_in_frame=0;
@@ -931,7 +953,7 @@
             g_hash_table_insert (iscsi_req_unmatched, cdata, cdata);
         } else {
                 iscsi_conv_data_t ckey;
-                ckey.conv_idx = conversation->index;
+                ckey.conv_idx = iscsi_session->conv_idx;
                 ckey.itt = tvb_get_ntohl (tvb, offset+16);
                 ckey.request_frame=pinfo->fd->num;
                 ckey.data_in_frame=0;
@@ -1049,7 +1071,7 @@
 	    proto_tree_add_item(ti, hf_iscsi_TargetTransferTag, tvb, offset + 20, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_CmdSN, tvb, offset + 24, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_ExpStatSN, tvb, offset + 28, 4, FALSE);
-	    offset = handleHeaderDigest(ti, tvb, offset, 48);
+	    offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
 	    offset = handleDataSegment(ti, tvb, offset, data_segment_len, end_offset, hf_iscsi_ping_data);
     } else if(opcode == ISCSI_OPCODE_NOP_IN) {
 	    /* NOP In */
@@ -1063,7 +1085,7 @@
 	    proto_tree_add_item(ti, hf_iscsi_StatSN, tvb, offset + 24, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_ExpCmdSN, tvb, offset + 28, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_MaxCmdSN, tvb, offset + 32, 4, FALSE);
-	    offset = handleHeaderDigest(ti, tvb, offset, 48);
+	    offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
 	    offset = handleDataSegment(ti, tvb, offset, data_segment_len, end_offset, hf_iscsi_ping_data);
     } else if(opcode == ISCSI_OPCODE_SCSI_COMMAND) {
 	    /* SCSI Command */
@@ -1093,7 +1115,7 @@
 		    /* FIXME - disssect AHS? */
 		    proto_tree_add_item(ti, hf_iscsi_AHS, tvb, offset + 48, ahsLen, FALSE);
 		}
-		offset = handleHeaderDigest(ti, tvb, offset, 48 + ahsLen);
+		offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48 + ahsLen);
 	    }
 	    offset = handleDataSegment(ti, tvb, offset, data_segment_len, end_offset, hf_iscsi_immediate_data);
     } else if(opcode == ISCSI_OPCODE_SCSI_RESPONSE) {
@@ -1129,7 +1151,7 @@
 		proto_tree_add_item(ti, hf_iscsi_SCSIResponse_BidiReadResidualCount, tvb, offset + 40, 4, FALSE);
 		proto_tree_add_item(ti, hf_iscsi_SCSIResponse_ResidualCount, tvb, offset + 44, 4, FALSE);
 	    }
-	    offset = handleHeaderDigest(ti, tvb, offset, 48);
+	    offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
 	    /* do not update offset here because the data segment is
 	     * dissected below */
 	    handleDataDigest(ti, tvb, offset, paddedDataSegmentLength);
@@ -1146,7 +1168,7 @@
 	    proto_tree_add_item(ti, hf_iscsi_CmdSN, tvb, offset + 24, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_ExpStatSN, tvb, offset + 28, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_RefCmdSN, tvb, offset + 32, 4, FALSE);
-	    offset = handleHeaderDigest(ti, tvb, offset, 48);
+	    offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
     } else if(opcode == ISCSI_OPCODE_TASK_MANAGEMENT_FUNCTION_RESPONSE) {
 	    /* Task Management Function Response */
 	    proto_tree_add_item(ti, hf_iscsi_TaskManagementFunction_Response, tvb, offset + 2, 1, FALSE);
@@ -1161,7 +1183,7 @@
 	    proto_tree_add_item(ti, hf_iscsi_StatSN, tvb, offset + 24, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_ExpCmdSN, tvb, offset + 28, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_MaxCmdSN, tvb, offset + 32, 4, FALSE);
-	    offset = handleHeaderDigest(ti, tvb, offset, 48);
+	    offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
     } else if(opcode == ISCSI_OPCODE_LOGIN_COMMAND) {
 	    /* Login Command */
 	    int digestsActive = 0;
@@ -1228,10 +1250,11 @@
 	    }
 	    proto_tree_add_item(ti, hf_iscsi_CmdSN, tvb, offset + 24, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_ExpStatSN, tvb, offset + 28, 4, FALSE);
-	    if(digestsActive)
-		offset = handleHeaderDigest(ti, tvb, offset, 48);
-	    else
+	    if(digestsActive){
+		offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
+	    } else {
 		offset += 48;
+	    }
 	    offset = handleDataSegmentAsTextKeys(ti, tvb, offset, data_segment_len, end_offset, digestsActive);
     } else if(opcode == ISCSI_OPCODE_LOGIN_RESPONSE) {
 	    /* Login Response */
@@ -1294,10 +1317,11 @@
 	    proto_tree_add_item(ti, hf_iscsi_ExpCmdSN, tvb, offset + 28, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_MaxCmdSN, tvb, offset + 32, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_Login_Status, tvb, offset + 36, 2, FALSE);
-	    if(digestsActive)
-		offset = handleHeaderDigest(ti, tvb, offset, 48);
-	    else
+	    if(digestsActive){
+		offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
+	    } else {
 		offset += 48;
+	    }
 	    offset = handleDataSegmentAsTextKeys(ti, tvb, offset, data_segment_len, end_offset, digestsActive);
     } else if(opcode == ISCSI_OPCODE_TEXT_COMMAND) {
 	    /* Text Command */
@@ -1322,7 +1346,7 @@
 	    proto_tree_add_item(ti, hf_iscsi_TargetTransferTag, tvb, offset + 20, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_CmdSN, tvb, offset + 24, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_ExpStatSN, tvb, offset + 28, 4, FALSE);
-	    offset = handleHeaderDigest(ti, tvb, offset, 48);
+	    offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
 	    offset = handleDataSegmentAsTextKeys(ti, tvb, offset, data_segment_len, end_offset, TRUE);
     } else if(opcode == ISCSI_OPCODE_TEXT_RESPONSE) {
 	    /* Text Response */
@@ -1348,7 +1372,7 @@
 	    proto_tree_add_item(ti, hf_iscsi_StatSN, tvb, offset + 24, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_ExpCmdSN, tvb, offset + 28, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_MaxCmdSN, tvb, offset + 32, 4, FALSE);
-	    offset = handleHeaderDigest(ti, tvb, offset, 48);
+	    offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
 	    offset = handleDataSegmentAsTextKeys(ti, tvb, offset, data_segment_len, end_offset, TRUE);
     } else if(opcode == ISCSI_OPCODE_SCSI_DATA_OUT) {
 	    /* SCSI Data Out (write) */
@@ -1369,7 +1393,7 @@
 	    proto_tree_add_item(ti, hf_iscsi_ExpStatSN, tvb, offset + 28, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_DataSN, tvb, offset + 36, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_BufferOffset, tvb, offset + 40, 4, FALSE);
-	    offset = handleHeaderDigest(ti, tvb, offset, 48);
+	    offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
 	    /* do not update offset here because the data segment is
 	     * dissected below */
 	    handleDataDigest(ti, tvb, offset, paddedDataSegmentLength);
@@ -1414,7 +1438,7 @@
 	    if(iscsi_protocol_version > ISCSI_PROTOCOL_DRAFT09) {
 		proto_tree_add_item(ti, hf_iscsi_SCSIData_ResidualCount, tvb, offset + 44, 4, FALSE);
 	    }
-	    offset = handleHeaderDigest(ti, tvb, offset, 48);
+	    offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
 	    /* do not update offset here because the data segment is
 	     * dissected below */
 	    handleDataDigest(ti, tvb, offset, paddedDataSegmentLength);
@@ -1440,7 +1464,7 @@
 	    }
 	    proto_tree_add_item(ti, hf_iscsi_CmdSN, tvb, offset + 24, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_ExpStatSN, tvb, offset + 28, 4, FALSE);
-	    offset = handleHeaderDigest(ti, tvb, offset, 48);
+	    offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
     } else if(opcode == ISCSI_OPCODE_LOGOUT_RESPONSE) {
 	    /* Logout Response */
 	    proto_tree_add_item(ti, hf_iscsi_Logout_Response, tvb, offset + 2, 1, FALSE);
@@ -1454,7 +1478,7 @@
 	    proto_tree_add_item(ti, hf_iscsi_MaxCmdSN, tvb, offset + 32, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_Time2Wait, tvb, offset + 40, 2, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_Time2Retain, tvb, offset + 42, 2, FALSE);
-	    offset = handleHeaderDigest(ti, tvb, offset, 48);
+	    offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
     } else if(opcode == ISCSI_OPCODE_SNACK_REQUEST) {
 	    /* SNACK Request */
 	    {
@@ -1484,7 +1508,7 @@
 		proto_tree_add_item(ti, hf_iscsi_BegRun, tvb, offset + 40, 4, FALSE);
 		proto_tree_add_item(ti, hf_iscsi_RunLength, tvb, offset + 44, 4, FALSE);
 	    }
-	    offset = handleHeaderDigest(ti, tvb, offset, 48);
+	    offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
     } else if(opcode == ISCSI_OPCODE_R2T) {
 	    /* R2T */
 	    if(iscsi_protocol_version > ISCSI_PROTOCOL_DRAFT09) {
@@ -1500,7 +1524,7 @@
 	    proto_tree_add_item(ti, hf_iscsi_R2TSN, tvb, offset + 36, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_BufferOffset, tvb, offset + 40, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_DesiredDataLength, tvb, offset + 44, 4, FALSE);
-	    offset = handleHeaderDigest(ti, tvb, offset, 48);
+	    offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
     } else if(opcode == ISCSI_OPCODE_ASYNC_MESSAGE) {
 	    /* Asynchronous Message */
 	    if(iscsi_protocol_version > ISCSI_PROTOCOL_DRAFT09) {
@@ -1516,7 +1540,7 @@
 	    proto_tree_add_item(ti, hf_iscsi_Parameter1, tvb, offset + 38, 2, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_Parameter2, tvb, offset + 40, 2, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_Parameter3, tvb, offset + 42, 2, FALSE);
-	    offset = handleHeaderDigest(ti, tvb, offset, 48);
+	    offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
 	    offset = handleDataSegment(ti, tvb, offset, data_segment_len, end_offset, hf_iscsi_async_message_data);
     } else if(opcode == ISCSI_OPCODE_REJECT) {
 	    /* Reject */
@@ -1529,7 +1553,7 @@
 	    proto_tree_add_item(ti, hf_iscsi_ExpCmdSN, tvb, offset + 28, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_MaxCmdSN, tvb, offset + 32, 4, FALSE);
 	    proto_tree_add_item(ti, hf_iscsi_DataSN, tvb, offset + 36, 4, FALSE);
-	    offset = handleHeaderDigest(ti, tvb, offset, 48);
+	    offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
 	    offset = handleDataSegment(ti, tvb, offset, data_segment_len, end_offset, hf_iscsi_error_pdu_data);
     } else if(opcode == ISCSI_OPCODE_VENDOR_SPECIFIC_I0 ||
 		opcode == ISCSI_OPCODE_VENDOR_SPECIFIC_I1 ||
@@ -1542,7 +1566,7 @@
 		proto_tree_add_item(ti, hf_iscsi_TotalAHSLength, tvb, offset + 4, 1, FALSE);
 	    }
 	    proto_tree_add_uint(ti, hf_iscsi_DataSegmentLength, tvb, offset + 5, 3, data_segment_len);
-	    offset = handleHeaderDigest(ti, tvb, offset, 48);
+	    offset = handleHeaderDigest(iscsi_session, ti, tvb, offset, 48);
 	    offset = handleDataSegment(ti, tvb, offset, data_segment_len, end_offset, hf_iscsi_vendor_specific_data);
     }
 
@@ -1656,6 +1680,10 @@
     guint iSCSIPdusDissected = 0;
     guint offset = 0;
     guint32 available_bytes = tvb_length_remaining(tvb, offset);
+    guint32 pduLen = 48;
+    int digestsActive = 1;
+    conversation_t *conversation = NULL;
+    iscsi_session_t *iscsi_session=NULL;
 
     /* quick check to see if the packet is long enough to contain the
      * minimum amount of information we need */
@@ -1727,94 +1755,124 @@
 	if(badPdu) {
 	    return iSCSIPdusDissected > 0;
 	}
-	else {
-	    guint32 pduLen = 48;
-	    int digestsActive = 1;
 
-	    if(opcode == ISCSI_OPCODE_LOGIN_COMMAND ||
-	       opcode == ISCSI_OPCODE_LOGIN_RESPONSE) {
-		if(iscsi_protocol_version == ISCSI_PROTOCOL_DRAFT08) {
-		    if((secondPduByte & CSG_MASK) < ISCSI_CSG_OPERATIONAL_NEGOTIATION) {
-			/* digests are not yet turned on */
-			digestsActive = 0;
-		    }
-		}
-		else {
+	if(opcode == ISCSI_OPCODE_LOGIN_COMMAND ||
+	    opcode == ISCSI_OPCODE_LOGIN_RESPONSE) {
+	    if(iscsi_protocol_version == ISCSI_PROTOCOL_DRAFT08) {
+		if((secondPduByte & CSG_MASK) < ISCSI_CSG_OPERATIONAL_NEGOTIATION) {
+		    /* digests are not yet turned on */
 		    digestsActive = 0;
 		}
+	    } else {
+		digestsActive = 0;
+	    }
+	}
+
+	if(opcode == ISCSI_OPCODE_SCSI_COMMAND) {
+	    /* ahsLen */
+	    pduLen += tvb_get_guint8(tvb, offset + 4) * 4;
+	}
+
+	pduLen += data_segment_len;
+	if((pduLen & 3) != 0)
+	    pduLen += 4 - (pduLen & 3);
+
+	if(digestsActive) {
+		pduLen += 4;
+	}
+
+	if(digestsActive && data_segment_len > 0 && enableDataDigests) {
+	    if(dataDigestIsCRC32)
+		pduLen += 4;
+	    else
+		pduLen += dataDigestSize;
+	}
+
+	/* make sure we have a conversation for this session */
+        conversation = find_conversation (&pinfo->src, &pinfo->dst,
+                                          pinfo->ptype, pinfo->srcport,
+                                          pinfo->destport, 0);
+        if (!conversation) {
+            conversation = conversation_new (&pinfo->src, &pinfo->dst,
+                                             pinfo->ptype, pinfo->srcport,
+                                             pinfo->destport, 0);
+            iscsi_session=g_mem_chunk_alloc(iscsi_sessions);
+            iscsi_session->conv_idx=conversation->index;
+            iscsi_session->header_digest=ISCSI_HEADER_DIGEST_AUTO;
+            g_hash_table_insert(iscsi_session_table, iscsi_session, iscsi_session);
+        }
+        if(!iscsi_session){
+            iscsi_session_t key;
+            key.conv_idx=conversation->index;
+            /* this should never return NULL */
+            iscsi_session = (iscsi_session_t *)g_hash_table_lookup (iscsi_session_table, &key);
+            if(!iscsi_session){
+                iscsi_session=g_mem_chunk_alloc(iscsi_sessions);
+                iscsi_session->conv_idx=conversation->index;
+                iscsi_session->header_digest=ISCSI_HEADER_DIGEST_AUTO;
+                g_hash_table_insert(iscsi_session_table, iscsi_session, iscsi_session);
+            }
+        }
+        /* try to autodetect if header digest is used or not */
+	if(digestsActive && (available_bytes>=52) && (iscsi_session->header_digest==ISCSI_HEADER_DIGEST_AUTO) ){
+            guint32 crc;
+		/* we have enough data to test if HeaderDigest is enabled */
+            crc= ~calculateCRC32(tvb_get_ptr(tvb, offset, 48), 48, CRC32C_PRELOAD);
+            if(crc==tvb_get_ntohl(tvb,48)){
+                iscsi_session->header_digest=ISCSI_HEADER_DIGEST_CRC32;
+            } else {
+                iscsi_session->header_digest=ISCSI_HEADER_DIGEST_NONE;
+            }
+	}
+
+
+	/*
+	 * Desegmentation check.
+	 */
+	if(iscsi_desegment && pinfo->can_desegment) {
+	    if(pduLen > available_bytes) {
+		/*
+		 * This frame doesn't have all of the data for
+		 * this message, but we can do reassembly on it.
+		 *
+		 * Tell the TCP dissector where the data for this
+		 * message starts in the data it handed us, and
+		 * how many more bytes we need, and return.
+		 */
+		pinfo->desegment_offset = offset;
+		pinfo->desegment_len = pduLen - available_bytes;
+		return TRUE;
+	    }
+	}
+
+	/* This is to help TCP keep track of PDU boundaries
+	   and allows it to find PDUs that are not aligned to 
+	   the start of a TCP segments.
+	   Since it also allows TCP to know what is in the middle
+	   of a large PDU, it reduces the probability of a segment
+	   in the middle of a large PDU transfer being misdissected as
+	   a PDU.
+	*/
+	if(!pinfo->fd->flags.visited){
+	    if(pduLen>(guint32)tvb_reported_length_remaining(tvb, offset)){
+		pinfo->want_pdu_tracking=2;
+		pinfo->bytes_until_next_pdu=pduLen-tvb_reported_length_remaining(tvb, offset);
 	    }
+	}
 
-	    if(opcode == ISCSI_OPCODE_SCSI_COMMAND) {
-		/* ahsLen */
-		pduLen += tvb_get_guint8(tvb, offset + 4) * 4;
-	    }
-
-	    pduLen += data_segment_len;
-	    if((pduLen & 3) != 0)
-		pduLen += 4 - (pduLen & 3);
-
-	    if(digestsActive && enableHeaderDigests) {
-		if(headerDigestIsCRC32)
-		    pduLen += 4;
-		else
-		    pduLen += headerDigestSize;
-	    }
-
-	    if(digestsActive && data_segment_len > 0 && enableDataDigests) {
-		if(dataDigestIsCRC32)
-		    pduLen += 4;
-		else
-		    pduLen += dataDigestSize;
-	    }
-
-	    /*
-	     * Desegmentation check.
-	     */
-	    if(iscsi_desegment && pinfo->can_desegment) {
-		if(pduLen > available_bytes) {
-		    /*
-		     * This frame doesn't have all of the data for
-		     * this message, but we can do reassembly on it.
-		     *
-		     * Tell the TCP dissector where the data for this
-		     * message starts in the data it handed us, and
-		     * how many more bytes we need, and return.
-		     */
-		    pinfo->desegment_offset = offset;
-		    pinfo->desegment_len = pduLen - available_bytes;
-		    return TRUE;
-		}
-	    }
-
-	    /* This is to help TCP keep track of PDU boundaries
-	       and allows it to find PDUs that are not aligned to 
-	       the start of a TCP segments.
-	       Since it also allows TCP to know what is in the middle
-	       of a large PDU, it reduces the probability of a segment
-	       in the middle of a large PDU transfer being misdissected as
-	       a PDU.
-	    */
-	    if(!pinfo->fd->flags.visited){
-		if(pduLen>(guint32)tvb_reported_length_remaining(tvb, offset)){
-		    pinfo->want_pdu_tracking=2;
-		    pinfo->bytes_until_next_pdu=pduLen-tvb_reported_length_remaining(tvb, offset);
-		}
-	    }
-
-	    if(check_col(pinfo->cinfo, COL_INFO)) {
-		if(iSCSIPdusDissected == 0)
-		    col_set_str(pinfo->cinfo, COL_INFO, "");
-		else
-		    col_append_str(pinfo->cinfo, COL_INFO, ", ");
-	    }
-
-	    dissect_iscsi_pdu(tvb, pinfo, tree, offset, opcode, opcode_str, data_segment_len);
-	    if(pduLen > available_bytes)
-		pduLen = available_bytes;
-	    offset += pduLen;
-	    available_bytes -= pduLen;
-	    ++iSCSIPdusDissected;
+	if(check_col(pinfo->cinfo, COL_INFO)) {
+	    if(iSCSIPdusDissected == 0)
+		col_set_str(pinfo->cinfo, COL_INFO, "");
+	    else
+		col_append_str(pinfo->cinfo, COL_INFO, ", ");
 	}
+
+	dissect_iscsi_pdu(tvb, pinfo, tree, offset, opcode, opcode_str, data_segment_len, iscsi_session);
+	if(pduLen > available_bytes)
+	    pduLen = available_bytes;
+	offset += pduLen;
+	available_bytes -= pduLen;
+	++iSCSIPdusDissected;
     }
 
     return iSCSIPdusDissected > 0;
@@ -1924,11 +1982,6 @@
 	    FT_BYTES, BASE_HEX, NULL, 0,
 	    "Vendor Specific Data", HFILL }
 	},
-	{ &hf_iscsi_HeaderDigest,
-	  { "HeaderDigest", "iscsi.headerdigest",
-	    FT_BYTES, BASE_HEX, NULL, 0,
-	    "Header Digest", HFILL }
-	},
 	{ &hf_iscsi_HeaderDigest32,
 	  { "HeaderDigest", "iscsi.headerdigest32",
 	    FT_UINT32, BASE_HEX, NULL, 0,
@@ -2414,8 +2467,9 @@
 
 	prefs_register_bool_preference(iscsi_module,
 				       "desegment_iscsi_messages",
-				       "Desegment iSCSI messages",
-				       "When enabled, iSCSI messages that span multiple TCP segments are desegmented",
+				       "Reassemble iSCSI messages\nspanning multiple TCP segments",
+				       "Whether the iSCSI dissector should reassemble messages spanning multiple TCP segments."
+				       " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 				       &iscsi_desegment);
 
 	prefs_register_bool_preference(iscsi_module,
@@ -2446,34 +2500,18 @@
 				       &iscsi_port);
 
 	prefs_register_bool_preference(iscsi_module,
-				       "enable_header_digests",
-				       "Enable header digests",
-				       "When enabled, pdus are assumed to contain a header digest",
-				       &enableHeaderDigests);
-	prefs_register_bool_preference(iscsi_module,
 				       "enable_data_digests",
 				       "Enable data digests",
 				       "When enabled, pdus are assumed to contain a data digest",
 				       &enableDataDigests);
 
 	prefs_register_bool_preference(iscsi_module,
-				       "header_digest_is_crc32c",
-				       "Header digest is CRC32C",
-				       "When enabled, header digests are assumed to be CRC32C",
-				       &headerDigestIsCRC32);
-	prefs_register_bool_preference(iscsi_module,
 				       "data_digest_is_crc32c",
 				       "Data digest is CRC32C",
 				       "When enabled, data digests are assumed to be CRC32C",
 				       &dataDigestIsCRC32);
 
 	prefs_register_uint_preference(iscsi_module,
-				       "header_digest_size",
-				       "Header digest size",
-				       "The size of a header digest (bytes)",
-				       10,
-				       &headerDigestSize);
-	prefs_register_uint_preference(iscsi_module,
 				       "data_digest_size",
 				       "Data digest size",
 				       "The size of a data digest (bytes)",
@@ -2486,6 +2524,12 @@
 				       "version_03_compatible");
 	prefs_register_obsolete_preference(iscsi_module,
 				       "bogus_pdu_max_digest_padding");
+	prefs_register_obsolete_preference(iscsi_module,
+				       "header_digest_is_crc32c");
+	prefs_register_obsolete_preference(iscsi_module,
+				       "header_digest_size");
+	prefs_register_obsolete_preference(iscsi_module,
+				       "enable_header_digests");
     }
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-isns.c ethereal-0.10.7/epan/dissectors/packet-isns.c
--- ethereal-0.10.6/epan/dissectors/packet-isns.c	2004-08-12 17:42:05.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-isns.c	2004-10-20 17:34:43.000000000 -0500
@@ -8,7 +8,7 @@
  * (c) 2004 Ronnie Sahlberg   updates
  * (c) 2004 Ming Zhang   updates
  *
- * $Id: packet-isns.c 11549 2004-07-28 07:46:54Z guy $
+ * $Id: packet-isns.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -54,7 +54,7 @@
 #include <epan/packet.h>
 #include <epan/conversation.h>
 #include "packet-tcp.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 
 #define ISNS_PROTO_VER 0x1
@@ -611,32 +611,27 @@
     guint16 function_id;
     guint16 isns_protocol_version;
     guint32 packet_len = tvb_length_remaining(tvb, offset);
-    char * function_id_str;
     /* Set up structures needed to add the protocol subtree and manage it */
     proto_item *ti = NULL;
     proto_tree *isns_tree = NULL;
     
-    if( packet_len < ISNS_HEADER_SIZE )
-	return;
-
     /* Make entries in Protocol column and Info column on summary display */
     if (check_col(pinfo->cinfo, COL_PROTOCOL)) 
-	col_set_str(pinfo->cinfo, COL_PROTOCOL, "isns");
+	col_set_str(pinfo->cinfo, COL_PROTOCOL, "iSNS");
     if (check_col(pinfo->cinfo, COL_INFO)) 
 	col_clear(pinfo->cinfo, COL_INFO);
 
-    /* Get the function id from the packet */
-    function_id =  tvb_get_ntohs(tvb, offset + 2);
-    function_id_str = match_strval(function_id, isns_function_ids);
-    
     /* Get the protocol version - only version one at the moment*/ 
     isns_protocol_version = tvb_get_ntohs(tvb, offset + 0);
-    if( (function_id_str == NULL) || (isns_protocol_version != ISNS_PROTO_VER) )
-	return;
+    
+    /* Get the function id from the packet */
+    function_id =  tvb_get_ntohs(tvb, offset + 2);
     
     /* Add the function name in the info col */
     if (check_col(pinfo->cinfo, COL_INFO)) 
-	col_add_str(pinfo->cinfo, COL_INFO, function_id_str);
+	col_add_str(pinfo->cinfo, COL_INFO,
+	            val_to_str(function_id, isns_function_ids,
+	                       "Unknown function ID 0x%04x"));
     
     /* In the interest of speed, if "tree" is NULL, don't do any work not
      * necessary to generate protocol tree items. 
@@ -789,29 +784,65 @@
     return (isns_len+ISNS_HEADER_SIZE);
 }
 
-static void
+static int
 dissect_isns_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {	
-	/* Make entries in Protocol column and Info column on summary display*/
-	if (check_col(pinfo->cinfo, COL_PROTOCOL)) 
-		col_set_str(pinfo->cinfo, COL_PROTOCOL, "isns");
-	if (check_col(pinfo->cinfo, COL_INFO)) 
-		col_clear(pinfo->cinfo, COL_INFO);
+	gint length = tvb_length_remaining(tvb, 0);
+	guint16 isns_protocol_version;
+	guint16 function_id;
+
+	if (length < ISNS_HEADER_SIZE) {
+		/*
+		 * Not enough room to see if this is valid iSNS.
+		 */
+		return 0;
+	}
+
+	/* Get the protocol version - only version one at the moment*/ 
+	isns_protocol_version = tvb_get_ntohs(tvb, 0);
+	if (isns_protocol_version != ISNS_PROTO_VER)
+		return 0;
+
+	/* Get the function id from the packet */
+	function_id =  tvb_get_ntohs(tvb, 2);
+	if (match_strval(function_id, isns_function_ids) == NULL) {
+		/* Unknown function ID */
+		return 0;
+	}
 
 	tcp_dissect_pdus(tvb, pinfo, tree, isns_desegment, 12, get_isns_pdu_len,
 		dissect_isns_pdu);
+	return length;
 }
 
-static void
+static int
 dissect_isns_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {	
-	/* Make entries in Protocol column and Info column on summary display*/
-	if (check_col(pinfo->cinfo, COL_PROTOCOL)) 
-		col_set_str(pinfo->cinfo, COL_PROTOCOL, "isns");
-	if (check_col(pinfo->cinfo, COL_INFO)) 
-		col_clear(pinfo->cinfo, COL_INFO);
+	gint length = tvb_length_remaining(tvb, 0);
+	guint16 isns_protocol_version;
+	guint16 function_id;
+
+	if (length < ISNS_HEADER_SIZE) {
+		/*
+		 * Not enough room to see if this is valid iSNS.
+		 */
+		return 0;
+	}
+
+	/* Get the protocol version - only version one at the moment*/ 
+	isns_protocol_version = tvb_get_ntohs(tvb, 0);
+	if (isns_protocol_version != ISNS_PROTO_VER)
+		return 0;
+
+	/* Get the function id from the packet */
+	function_id =  tvb_get_ntohs(tvb, 2);
+	if (match_strval(function_id, isns_function_ids) == NULL) {
+		/* Unknown function ID */
+		return 0;
+	}
 
 	dissect_isns_pdu(tvb, pinfo, tree);
+	return length;
 }
 
 
@@ -1932,10 +1963,10 @@
     /* Register preferences */
     isns_module = prefs_register_protocol(proto_isns, NULL);
     prefs_register_bool_preference(isns_module, "desegment",
-	"Desegment iSNS over TCP messages",
-	"Whether the dissector should desegment "
-	"multi-segment iSNS messages", &isns_desegment);
-
+	"Reassemble iSNS messages spanning multiple TCP segments",
+	"Whether the iSNS dissector should reassemble messages spanning multiple TCP segments."
+	" To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
+    &isns_desegment);
 }
 
 /* If this dissector uses sub-dissector registration add a registration routine.
@@ -1946,8 +1977,8 @@
 void
 proto_reg_handoff_isns(void)
 {
-    isns_tcp_handle = create_dissector_handle(dissect_isns_tcp,proto_isns);
-    isns_udp_handle = create_dissector_handle(dissect_isns_udp,proto_isns);
+    isns_tcp_handle = new_create_dissector_handle(dissect_isns_tcp,proto_isns);
+    isns_udp_handle = new_create_dissector_handle(dissect_isns_udp,proto_isns);
 
     dissector_add("tcp.port",ISNS_TCP_PORT,isns_tcp_handle);
     dissector_add("udp.port",ISNS_UDP_PORT,isns_udp_handle);
diff -urN ethereal-0.10.6/epan/dissectors/packet-isup.c ethereal-0.10.7/epan/dissectors/packet-isup.c
--- ethereal-0.10.6/epan/dissectors/packet-isup.c	2004-08-12 17:42:29.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-isup.c	2004-10-20 17:34:59.000000000 -0500
@@ -9,7 +9,7 @@
  * Modified 2004-01-10 by Anders Broman to add abillity to dissect
  * Content type application/ISUP RFC 3204 used in SIP-T
  *
- * $Id: packet-isup.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-isup.c 12226 2004-10-07 09:04:51Z etxrab $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -304,7 +304,7 @@
 #define PARAM_TYPE_GENERIC_NR           192
 #define PARAM_TYPE_GENERIC_DIGITS       193
 
-static const value_string isup_parameter_type_value[] = {
+const value_string isup_parameter_type_value[] = {
 { PARAM_TYPE_END_OF_OPT_PARAMS,        "End of optional parameters"},
   { PARAM_TYPE_CALL_REF,               "Call Reference (national use)"},
   { PARAM_TYPE_TRANSM_MEDIUM_REQU,     "Transmission medium requirement"},
@@ -611,7 +611,8 @@
 #define MEDIUM_27_64KBS                     40
 #define MEDIUM_28_64KBS                     41
 #define MEDIUM_29_64KBS                     42
-static const value_string isup_transmission_medium_requirement_value[] = {
+
+const value_string isup_transmission_medium_requirement_value[] = {
   { MEDIUM_SPEECH,                       "speech"},
   { MEDIUM_64KBS,                        "64 kbit/s unrestricted"},
   { MEDIUM_3_1_KHZ_AUDIO,                "3.1 kHz audio"},
@@ -1194,6 +1195,10 @@
 
 static gboolean isup_show_cic_in_info = TRUE;
 
+static int hf_isup_called = -1;
+static int hf_isup_calling = -1;
+static int hf_isup_redirecting = -1;
+
 static int hf_isup_cic = -1;
 static int hf_bicc_cic = -1;
 
@@ -1341,7 +1346,8 @@
 static int hf_isup_apm_si_ind						= -1;
 static int hf_isup_app_Release_call_ind					= -1;
 static int hf_length_indicator						= -1;
-static int hf_afi							= -1;
+static int hf_afi									= -1;
+static int hf_bicc_nsap_dsp							= -1;
 static int hf_bat_ase_identifier					= -1;
 static int hf_Action_Indicator						= -1;
 
@@ -1524,17 +1530,20 @@
       called_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10);
   }
   called_number[i++] = '\0';
-    if ( number_plan == 1 ) {
-	  e164_info.e164_number_type = CALLED_PARTY_NUMBER;
-	  e164_info.nature_of_address = indicators1 & 0x7f;
-	  e164_info.E164_number_str = called_number;
-	  e164_info.E164_number_length = i - 1;
-	  dissect_e164_number(parameter_tvb, address_digits_tree, 2,
-								  (offset - 2), e164_info);
-  }
   proto_item_set_text(address_digits_item, "Called Party Number: %s", called_number);
   proto_item_set_text(parameter_item, "Called Party Number: %s", called_number);
-
+  if ( number_plan == 1 ) {
+    e164_info.e164_number_type = CALLED_PARTY_NUMBER;
+    e164_info.nature_of_address = indicators1 & 0x7f;
+    e164_info.E164_number_str = called_number;
+    e164_info.E164_number_length = i - 1;
+    dissect_e164_number(parameter_tvb, address_digits_tree, 2, (offset - 2), e164_info);
+    proto_tree_add_string_hidden(address_digits_tree, hf_isup_called, parameter_tvb,
+	  offset - length, length, called_number);
+  } else {
+    proto_tree_add_string(address_digits_tree, hf_isup_called, parameter_tvb, 
+	  offset - length, length, called_number);
+  }
 }
 /* ------------------------------------------------------------------
   Dissector Parameter  Subsequent number
@@ -1982,7 +1991,7 @@
 	{ 0,	NULL }
 };
 
-static void
+void
 dissect_nsap(tvbuff_t *parameter_tvb,gint offset,gint len, proto_tree *parameter_tree)
 {
 	guint8 afi, cc_length = 0;
@@ -2139,7 +2148,7 @@
 					length = 1;
 			break;
 			case 0x2 :	cc = cc >> 4;
-					length = 2;
+					length = 1;
 			break;
 			default:	length = 2;
 			break;
@@ -2156,8 +2165,9 @@
 				break;
 				default:;
 				}
-			proto_tree_add_text(parameter_tree, parameter_tvb, offset + 8, (len - 9),
-				    "DSP = %s", tvb_bytes_to_str(parameter_tvb, offset + 8, (len -9)));
+			proto_tree_add_text(parameter_tree,parameter_tvb, cc_offset, length,"DSP length %u(len %u -9 )",(len-9),len );
+
+			proto_tree_add_item(parameter_tree, hf_bicc_nsap_dsp, parameter_tvb, offset + 8, (len - 9),FALSE);
 	
 		break;
 		default:
@@ -2928,17 +2938,21 @@
   }
   calling_number[i++] = '\0';
 
-  if ( number_plan == 1 ) {
-	  e164_info.e164_number_type = CALLING_PARTY_NUMBER;
-	  e164_info.nature_of_address = indicators1 & 0x7f;
-	  e164_info.E164_number_str = calling_number;
-	  e164_info.E164_number_length = i - 1;
-	  dissect_e164_number(parameter_tvb, address_digits_tree, 2,
-								  (offset - 2), e164_info);
-  }
   proto_item_set_text(address_digits_item, "Calling Party Number: %s", calling_number);
   proto_item_set_text(parameter_item, "Calling Party Number: %s", calling_number);
+  if ( number_plan == 1 ) {
+    e164_info.e164_number_type = CALLING_PARTY_NUMBER;
+    e164_info.nature_of_address = indicators1 & 0x7f;
+    e164_info.E164_number_str = calling_number;
+    e164_info.E164_number_length = i - 1;
+    dissect_e164_number(parameter_tvb, address_digits_tree, 2, (offset - 2), e164_info);
+    proto_tree_add_string_hidden(address_digits_tree, hf_isup_calling, parameter_tvb,
+	  offset - length, length, calling_number);
+  } else {
+    proto_tree_add_string(address_digits_tree, hf_isup_calling, parameter_tvb,
+	  offset - length, length, calling_number);
 
+  }
 }
 /* ------------------------------------------------------------------
   Dissector Parameter Original called  number
@@ -3039,8 +3053,8 @@
   calling_number[i++] = '\0';
 
   proto_item_set_text(address_digits_item, "Redirecting Number: %s", calling_number);
+  proto_tree_add_string(address_digits_tree, hf_isup_redirecting, parameter_tvb, offset - length, length, calling_number);
   proto_item_set_text(parameter_item, "Redirecting Number: %s", calling_number);
-
 }
 /* ------------------------------------------------------------------
   Dissector Parameter Redirection number
@@ -5889,7 +5903,7 @@
 
 		{ &hf_isup_event_ind,
 			{ "Event indicator",  "isup.event_ind",
-			  FT_UINT8, 8, NULL, 0x0,
+			  FT_UINT8, 8, VALS(isup_event_ind_value), GFEDCBA_8BIT_MASK,
 			"", HFILL }},
 
 		{ &hf_isup_event_presentation_restricted_ind,
@@ -6185,7 +6199,11 @@
 			{ "X.213 Address Format Information ( AFI )",  "x213.afi",
 			FT_UINT8, BASE_HEX, VALS(x213_afi_value),0x0,	
 			"", HFILL }},
-
+		
+		{ &hf_bicc_nsap_dsp,
+			{ "X.213 Address Format Information ( DSP )",  "x213.dsp",
+			FT_BYTES, BASE_HEX, NULL,0x0,	
+			"", HFILL }},
 		{ &hf_characteristics,
 			{ "Backbone network connection characteristics", "bat_ase.char",
 			FT_UINT8, BASE_HEX, VALS(bearer_network_connection_characteristics_vals),0x0,	
@@ -6266,6 +6284,21 @@
 		{ &hf_iana_icp,
 			{ "IANA ICP",  "nsap.iana_icp",
 			FT_UINT16, BASE_HEX, VALS(iana_icp_values),0x0,
+                      "", HFILL }},
+
+              { &hf_isup_called,
+                      { "ISUP Called Number",  "isup.called",
+                      FT_STRING, BASE_NONE, NULL,0x0,
+                      "", HFILL }},
+
+              { &hf_isup_calling,
+                      { "ISUP Calling Number",  "isup.calling",
+                      FT_STRING, BASE_NONE, NULL,0x0,
+                      "", HFILL }},
+
+              { &hf_isup_redirecting,
+                      { "ISUP Redirecting Number",  "isup.redirecting",
+                      FT_STRING, BASE_NONE, NULL,0x0,
 			"", HFILL }},
 
 	};
@@ -6313,6 +6346,7 @@
   dissector_add("mtp3.service_indicator", MTP3_ISUP_SERVICE_INDICATOR, isup_handle);
   dissector_add("m3ua.protocol_data_si", MTP3_ISUP_SERVICE_INDICATOR, isup_handle);
   dissector_add_string("media_type","application/isup", application_isup_handle);
+  dissector_add_string("tali.opcode", "isot", isup_handle);
 
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-isup.h ethereal-0.10.7/epan/dissectors/packet-isup.h
--- ethereal-0.10.6/epan/dissectors/packet-isup.h	2004-08-12 17:42:29.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-isup.h	2004-10-20 17:35:00.000000000 -0500
@@ -1,6 +1,6 @@
 /* packet-isup.h
  *
- * $Id: packet-isup.h 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-isup.h 12226 2004-10-07 09:04:51Z etxrab $
  *
  * Copyright 2003, Michael Lum <mlum [AT] telostech.com>,
  * In association with Telos Technology Inc.
@@ -38,4 +38,13 @@
  */
 ETH_VAR_IMPORT const value_string isup_message_type_value[];
 ETH_VAR_IMPORT const value_string isup_message_type_value_acro[];
+/*
+ * Export some strings for other dissectors
+ */
+extern const value_string isup_parameter_type_value[]; 
+extern const value_string isup_transmission_medium_requirement_value[];
 
+/*
+ * Export dissection of some parameters
+ */
+void dissect_nsap(tvbuff_t *parameter_tvb,gint offset,gint len, proto_tree *parameter_tree);
diff -urN ethereal-0.10.6/epan/dissectors/packet-iua.c ethereal-0.10.7/epan/dissectors/packet-iua.c
--- ethereal-0.10.6/epan/dissectors/packet-iua.c	2004-08-12 17:42:31.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-iua.c	2004-10-20 17:35:02.000000000 -0500
@@ -8,7 +8,7 @@
  *
  * Copyright 2002, Michael Tuexen <tuexen [AT] fh-muenster.de>
  *
- * $Id: packet-iua.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-iua.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,7 +36,7 @@
 #endif
 
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "sctpppids.h"
 
 #define NETWORK_BYTE_ORDER          FALSE
diff -urN ethereal-0.10.6/epan/dissectors/packet-kerberos.c ethereal-0.10.7/epan/dissectors/packet-kerberos.c
--- ethereal-0.10.6/epan/dissectors/packet-kerberos.c	2004-08-12 17:42:06.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-kerberos.c	2004-10-20 17:34:44.000000000 -0500
@@ -1,9 +1,3 @@
-/* TODO:
-   PKINIT embryo inside should be pulled out into its own dissector, preferably
-   one that can handle generic PAtype additions via some registration API.
-   Keep an eye on ietf/krbwg on what they design for their framework for
-   adding PAtypes.
-*/
 /* packet-kerberos.c
  * Routines for Kerberos
  * Wes Hardaker (c) 2000
@@ -29,7 +23,7 @@
  *
  * Some structures from RFC2630
  *
- * $Id: packet-kerberos.c 11592 2004-08-03 02:28:49Z guy $
+ * $Id: packet-kerberos.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -50,6 +44,16 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
+/*
+ * Some of the development of the Kerberos protocol decoder was sponsored by
+ * Cable Television Laboratories, Inc. ("CableLabs") based upon proprietary
+ * CableLabs' specifications. Your license and use of this protocol decoder
+ * does not mean that you are licensed to use the CableLabs'
+ * specifications.  If you have questions about this protocol, contact
+ * jf.mule [AT] cablelabs.com or c.stuart [AT] cablelabs.com for additional
+ * information.
+ */
+
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
@@ -58,17 +62,32 @@
 #include <string.h>
 #include <ctype.h>
 
+#ifdef HAVE_LIBNETTLE
+#define HAVE_KERBEROS
+#ifdef _WIN32
+#include <des.h>
+#include <cbc.h>
+#else
+#include <nettle/des.h>
+#include <nettle/cbc.h>
+#endif
+#include "crypt-md5.h"
+#include <sys/stat.h>	/* For keyfile manipulation */
+#endif
+
 #include <glib.h>
 
 #include <epan/packet.h>
 
 #include <epan/strutil.h>
 
+#include <epan/conversation.h>
 #include <epan/dissectors/packet-kerberos.h>
 #include <epan/dissectors/packet-netbios.h>
 #include <epan/dissectors/packet-tcp.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/dissectors/packet-ber.h>
+#include <epan/dissectors/packet-pkinit.h>
 #include <epan/dissectors/packet-cms.h>
 #include <epan/dissectors/packet-windows-common.h>
 
@@ -81,6 +100,8 @@
 #define UDP_PORT_KERBEROS		88
 #define TCP_PORT_KERBEROS		88
 
+static dissector_handle_t kerberos_handle_udp;
+
 /* Desegment Kerberos over TCP messages */
 static gboolean krb_desegment = TRUE;
 
@@ -99,7 +120,6 @@
 static gint hf_krb_w2k_pac_size = -1;
 static gint hf_krb_w2k_pac_offset = -1;
 static gint hf_krb_padata = -1;
-static gint hf_krb_contentinfo_contenttype = -1;
 static gint hf_krb_error_code = -1;
 static gint hf_krb_ticket = -1;
 static gint hf_krb_AP_REP_enc = -1;
@@ -181,7 +201,6 @@
 static gint hf_krb_LastReq = -1;
 static gint hf_krb_Authenticator = -1;
 static gint hf_krb_Checksum = -1;
-static gint hf_krb_signedAuthPack = -1;
 static gint hf_krb_s_address = -1;
 static gint hf_krb_HostAddress = -1;
 static gint hf_krb_HostAddresses = -1;
@@ -222,11 +241,11 @@
 static gint hf_krb_ENC_PRIV = -1;
 static gint hf_krb_authenticator_enc = -1;
 static gint hf_krb_ticket_enc = -1;
+static gint hf_krb_e_checksum = -1;
 
 static gint ett_krb_kerberos = -1;
 static gint ett_krb_TransitedEncoding = -1;
 static gint ett_krb_PAC_LOGON_INFO = -1;
-static gint ett_krb_signedAuthPack = -1;
 static gint ett_krb_PAC_CREDENTIAL_TYPE = -1;
 static gint ett_krb_PAC_SERVER_CHECKSUM = -1;
 static gint ett_krb_PAC_PRIVSVR_CHECKSUM = -1;
@@ -263,7 +282,7 @@
 static gint ett_krb_ticket_enc = -1;
 static gint ett_krb_PRIV = -1;
 static gint ett_krb_PRIV_enc = -1;
-
+static gint ett_krb_e_checksum = -1;
 
 guint32 krb5_errorcode;
 
@@ -302,18 +321,20 @@
 
 #endif
 
-#ifdef HAVE_HEIMDAL_KERBEROS
+#ifdef HAVE_MIT_KERBEROS
 #include <krb5.h>
 
+#define MAX_ORIG_LEN	256
 typedef struct _enc_key_t {
 	struct _enc_key_t	*next;
 	krb5_keytab_entry	key;
+	char 			key_origin[MAX_ORIG_LEN+1];
 } enc_key_t;
 static enc_key_t *enc_key_list=NULL;
 
 
 static void
-add_encryption_key(packet_info *pinfo, int keytype, int keylength, const char *keyvalue)
+add_encryption_key(packet_info *pinfo, int keytype, int keylength, const char *keyvalue, char *origin)
 {
 	enc_key_t *new_key;
 
@@ -323,6 +344,153 @@
 printf("added key in %d\n",pinfo->fd->num);
 
 	new_key=g_malloc(sizeof(enc_key_t));
+	sprintf(new_key->key_origin, "%s learnt from frame %d",origin,pinfo->fd->num);
+	new_key->next=enc_key_list;
+	enc_key_list=new_key;
+	new_key->key.principal=NULL;
+	new_key->key.vno=0;
+	new_key->key.key.enctype=keytype;
+	new_key->key.key.length=keylength;
+	new_key->key.key.contents=g_malloc(keylength);
+	memcpy(new_key->key.key.contents, keyvalue, keylength);
+}
+
+static void
+read_keytab_file(char *filename, krb5_context *context)
+{
+	krb5_keytab keytab;
+	krb5_error_code ret;
+	krb5_kt_cursor cursor;
+	enc_key_t *new_key;
+
+	/* should use a file in the ethereal users dir */
+	ret = krb5_kt_resolve(*context, filename, &keytab);
+	if(ret){
+		fprintf(stderr, "KERBEROS ERROR: Could not open keytab file :%s\n",filename);
+
+		return;
+	}
+
+	ret = krb5_kt_start_seq_get(*context, keytab, &cursor);
+	if(ret){
+		fprintf(stderr, "KERBEROS ERROR: Could not read from keytab file :%s\n",filename);
+		return;
+	}
+
+	do{
+		new_key=g_malloc(sizeof(enc_key_t));
+		new_key->next=enc_key_list;
+		ret = krb5_kt_next_entry(*context, keytab, &(new_key->key), &cursor);
+		if(ret==0){
+			int i;
+			char *pos;
+
+			/* generate origin string, describing where this key came from */
+			pos=new_key->key_origin;
+			pos+=sprintf(pos, "keytab principal ");
+			for(i=0;i<new_key->key.principal->length;i++){
+				pos+=sprintf(pos,"%s%s",(i?"/":""),(new_key->key.principal->data[i]).data);
+			}
+			pos+=sprintf(pos,"@%s",new_key->key.principal->realm.data);
+			*pos=0;
+/*printf("added key for principal :%s\n", new_key->key_origin);*/
+			enc_key_list=new_key;
+		}
+	}while(ret==0);
+
+	ret = krb5_kt_end_seq_get(*context, keytab, &cursor);
+	if(ret){
+		krb5_kt_close(*context, keytab);
+	}
+
+}
+
+
+static guint8 *
+decrypt_krb5_data(proto_tree *tree, packet_info *pinfo,
+			krb5_keyusage usage,
+			int length,
+			const char *cryptotext,
+			int keytype)
+{
+	static int first_time=1;
+	static krb5_context context;
+	krb5_error_code ret;
+	enc_key_t *ek;
+	static krb5_data data = {0,0,NULL};
+
+	/* dont do anything if we are not attempting to decrypt data */
+	if(!krb_decrypt){
+		return NULL;
+	}
+
+	/* XXX we should only do this for first time, then store somewhere */
+	/* XXX We also need to re-read the keytab when the preference changes */
+
+	/* should this have a destroy context ?  MIT people would know */
+	if(first_time){
+		first_time=0;
+		ret = krb5_init_context(&context);
+		if(ret){
+			return NULL;
+		}
+		read_keytab_file(keytab_filename, &context);
+	}
+
+	for(ek=enc_key_list;ek;ek=ek->next){
+		krb5_enc_data input;
+
+		input.enctype = ek->key.key.enctype;
+		input.ciphertext.length = length;
+		input.ciphertext.data = (guint8 *)cryptotext;
+
+		data.length = length;
+		if(data.data){
+			g_free(data.data);
+		}
+		data.data = g_malloc(length);
+
+		/* shortcircuit and bail out if enctypes are not matching */
+		if(ek->key.key.enctype!=keytype){
+			continue;
+		}
+
+		ret = krb5_c_decrypt(context, &(ek->key.key), usage, 0, &input, &data);
+		if (ret == 0) {
+printf("woohoo decrypted keytype:%d in frame:%d\n", keytype, pinfo->fd->num);
+			proto_tree_add_text(tree, NULL, 0, 0, "[Decrypted using: %s]", ek->key_origin);
+			return data.data;
+		}
+	}
+
+	return NULL;
+}
+
+#elif defined(HAVE_HEIMDAL_KERBEROS)
+
+#include <krb5.h>
+
+#define MAX_ORIG_LEN	256
+typedef struct _enc_key_t {
+	struct _enc_key_t	*next;
+	krb5_keytab_entry	key;
+	char 			key_origin[MAX_ORIG_LEN+1];
+} enc_key_t;
+static enc_key_t *enc_key_list=NULL;
+
+
+static void
+add_encryption_key(packet_info *pinfo, int keytype, int keylength, const char *keyvalue, char *origin)
+{
+	enc_key_t *new_key;
+
+	if(pinfo->fd->flags.visited){
+		return;
+	}
+printf("added key in %d\n",pinfo->fd->num);
+
+	new_key=g_malloc(sizeof(enc_key_t));
+	sprintf(new_key->key_origin, "%s learnt from frame %d",origin,pinfo->fd->num);
 	new_key->next=enc_key_list;
 	enc_key_list=new_key;
 	new_key->key.principal=NULL;
@@ -346,7 +514,7 @@
 	ret = krb5_kt_resolve(*context, filename, &keytab);
 	if(ret){
 		fprintf(stderr, "KERBEROS ERROR: Could not open keytab file :%s\n",filename);
-		
+
 		return;
 	}
 
@@ -361,6 +529,18 @@
 		new_key->next=enc_key_list;
 		ret = krb5_kt_next_entry(*context, keytab, &(new_key->key), &cursor);
 		if(ret==0){
+			unsigned int i;
+			char *pos;
+
+			/* generate origin string, describing where this key came from */
+			pos=new_key->key_origin;
+			pos+=sprintf(pos, "keytab principal ");
+			for(i=0;i<new_key->key.principal->name.name_string.len;i++){
+				pos+=sprintf(pos,"%s%s",(i?"/":""),new_key->key.principal->name.name_string.val[i]);
+			}
+			pos+=sprintf(pos,"@%s",new_key->key.principal->realm);
+			*pos=0;
+
 			enc_key_list=new_key;
 		}
 	}while(ret==0);
@@ -374,7 +554,7 @@
 
 
 static guint8 *
-decrypt_krb5_data(packet_info *pinfo,
+decrypt_krb5_data(proto_tree *tree, packet_info *pinfo,
 			krb5_keyusage usage,
 			int length,
 			const char *cryptotext,
@@ -390,10 +570,11 @@
 	if(!krb_decrypt){
 		return NULL;
 	}
-    
+
 	/* XXX we should only do this for first time, then store somewhere */
+	/* XXX We also need to re-read the keytab when the preference changes */
 
-	/* should this have a destroy context ?  heidal people would know */
+	/* should this have a destroy context ?  Heimdal people would know */
 	if(first_time){
 		first_time=0;
 		ret = krb5_init_context(&context);
@@ -403,10 +584,10 @@
 		read_keytab_file(keytab_filename, &context);
 	}
 
-	for(ek=enc_key_list;ek;ek=ek->next){	
+	for(ek=enc_key_list;ek;ek=ek->next){
 		krb5_crypto crypto;
-		guint8 *cryptocopy; /* workaround for pre-6.1 heimdal bug */
-		
+		guint8 *cryptocopy; /* workaround for pre-0.6.1 heimdal bug */
+
 		/* shortcircuit and bail out if enctypes are not matching */
 		if(ek->key.keyblock.keytype!=keytype){
 			continue;
@@ -417,21 +598,22 @@
 			return NULL;
 		}
 
-		/* pre-6.1 versions of heimdal would sometimes change
+		/* pre-0.6.1 versions of Heimdal would sometimes change
 		  the cryptotext data even when the decryption failed.
 		  This would obviously not work since we iterate over the
 		  keys. So just give it a copy of the crypto data instead.
-		  This has been seen for RC4-HMAC blobs. 
+		  This has been seen for RC4-HMAC blobs.
 		*/
 		cryptocopy=g_malloc(length);
 		memcpy(cryptocopy, cryptotext, length);
-		ret = krb5_decrypt_ivec(context, crypto, usage, 
-				cryptocopy, length, 
-				&data, 
+		ret = krb5_decrypt_ivec(context, crypto, usage,
+				cryptocopy, length,
+				&data,
 				NULL);
 		g_free(cryptocopy);
 		if (ret == 0) {
 printf("woohoo decrypted keytype:%d in frame:%d\n", keytype, pinfo->fd->num);
+			proto_tree_add_text(tree, NULL, 0, 0, "[Decrypted using: %s]", ek->key_origin);
 			krb5_crypto_destroy(context, crypto);
 			return data.data;
 		}
@@ -439,7 +621,194 @@
 	}
 	return NULL;
 }
-#endif
+
+#elif defined (HAVE_LIBNETTLE)
+
+#define MAX_ORIG_LEN	256
+#define SERVICE_KEY_SIZE (DES3_KEY_SIZE + 2)
+#define KEYTYPE_DES3_CBC_MD5 5	/* Currently the only one supported */
+
+typedef struct _service_key_t {
+    guint16 kvno;
+    int     keytype;
+    int     length;
+    guint8 *contents;
+    char    origin[MAX_ORIG_LEN+1];
+} service_key_t;
+GSList *service_key_list = NULL;
+
+
+static void
+add_encryption_key(packet_info *pinfo, int keytype, int keylength, const char *keyvalue, char *origin)
+{
+	service_key_t *new_key;
+
+	if(pinfo->fd->flags.visited){
+		return;
+	}
+printf("added key in %d\n",pinfo->fd->num);
+
+	new_key = g_malloc(sizeof(service_key_t));
+	new_key->kvno = 0;
+	new_key->keytype = keytype;
+	new_key->length = keylength;
+	new_key->contents = g_malloc(keylength);
+	memcpy(new_key->contents, keyvalue, keylength);
+	sprintf(new_key->origin, "%s learnt from frame %d", origin, pinfo->fd->num);
+}
+
+static void
+read_keytab_file(char *service_key_file)
+{
+	FILE *skf;
+	struct stat st;
+	service_key_t *sk;
+	unsigned char buf[SERVICE_KEY_SIZE];
+	int newline_skip = 0, count = 0;
+
+	if (service_key_file != NULL && stat (service_key_file, &st) == 0) {
+
+		/* The service key file contains raw 192-bit (24 byte) 3DES keys.
+		 * There can be zero, one (\n), or two (\r\n) characters between
+		 * keys.  Trailing characters are ignored.
+		 */
+
+		/* XXX We should support the standard keytab format instead */
+		if (st.st_size > SERVICE_KEY_SIZE) {
+			if ( (st.st_size % (SERVICE_KEY_SIZE + 1) == 0) ||
+			     (st.st_size % (SERVICE_KEY_SIZE + 1) == SERVICE_KEY_SIZE) ) {
+			    newline_skip = 1;
+			} else if ( (st.st_size % (SERVICE_KEY_SIZE + 2) == 0) ||
+			     (st.st_size % (SERVICE_KEY_SIZE + 2) == SERVICE_KEY_SIZE) ) {
+			    newline_skip = 2;
+			}
+		}
+
+		skf = fopen(service_key_file, "rb");
+		if (! skf) return;
+
+		while (fread(buf, SERVICE_KEY_SIZE, 1, skf) == 1) {
+			sk = g_malloc(sizeof(service_key_t));
+			sk->kvno = buf[0] << 8 | buf[1];
+			sk->keytype = KEYTYPE_DES3_CBC_MD5;
+			sk->length = DES3_KEY_SIZE;
+			sk->contents = g_malloc(DES3_KEY_SIZE);
+			memcpy(sk->contents, buf + 2, DES3_KEY_SIZE);
+			sprintf(sk->origin, "3DES service key file, key #%d, offset %ld", count, ftell(skf));
+			service_key_list = g_slist_append(service_key_list, (gpointer) sk);
+			fseek(skf, newline_skip, SEEK_CUR);
+			count++;
+g_warning("added key: %s", sk->origin);
+		}
+		fclose(skf);
+	}
+}
+
+#define CONFOUNDER_PLUS_CHECKSUM 24
+
+static guint8 *
+decrypt_krb5_data(proto_tree _U_ *tree, packet_info *pinfo,
+			int _U_ usage,
+			int length,
+			const char *cryptotext,
+			int keytype)
+{
+	static gboolean first_time = TRUE;
+
+	tvbuff_t *encr_tvb;
+	guint8 *decrypted_data = NULL, *plaintext = NULL;
+	int res;
+	guint8 cls;
+	gboolean pc;
+	guint32 tag, item_len, data_len;
+	int id_offset, offset;
+	guint8 key[DES3_KEY_SIZE];
+	guint8 initial_vector[DES_BLOCK_SIZE];
+	md5_state_t md5s;
+	md5_byte_t digest[16];
+	md5_byte_t zero_fill[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+	md5_byte_t confounder[8];
+	gboolean ind;
+	GSList *ske;
+	service_key_t *sk;
+	struct des3_ctx ctx;
+
+
+	/* dont do anything if we are not attempting to decrypt data */
+	if(!krb_decrypt){
+		return NULL;
+	}
+
+	/* XXX we should only do this for first time, then store somewhere */
+	/* XXX We also need to re-read the keytab when the preference changes */
+
+	if(first_time){
+		first_time = FALSE;
+		read_keytab_file(keytab_filename);
+	}
+
+	if (keytype != KEYTYPE_DES3_CBC_MD5 || service_key_list == NULL) {
+		return NULL;
+	}
+
+	decrypted_data = g_malloc(length);
+	for(ske = service_key_list; ske != NULL; ske = g_slist_next(ske)){
+		sk = (service_key_t *) ske->data;
+
+		des_fix_parity(DES3_KEY_SIZE, key, sk->contents);
+
+		md5_init(&md5s);
+		memset(initial_vector, 0, DES_BLOCK_SIZE);
+		res = des3_set_key(&ctx, key);
+		cbc_decrypt(&ctx, des3_decrypt, DES_BLOCK_SIZE, initial_vector,
+		    length, decrypted_data, cryptotext);
+		encr_tvb = tvb_new_real_data(decrypted_data, length, length);
+
+		tvb_memcpy(encr_tvb, confounder, 0, 8);
+
+		/* We have to pull the decrypted data length from the decrypted
+		 * content.  If the key doesn't match or we otherwise get garbage,
+		 * an exception may get thrown while decoding the ASN.1 header.
+		 * Catch it, just in case.
+		 */
+		TRY {
+			id_offset = get_ber_identifier(encr_tvb, CONFOUNDER_PLUS_CHECKSUM, &cls, &pc, &tag);
+			offset = get_ber_length(encr_tvb, id_offset, &item_len, &ind);
+		}
+		CATCH (BoundsError) {
+			tvb_free(encr_tvb);
+			continue;
+		}
+		ENDTRY;
+
+		data_len = item_len + offset - CONFOUNDER_PLUS_CHECKSUM;
+		if ((int) item_len + offset > length) {
+			tvb_free(encr_tvb);
+			continue;
+		}
+
+		md5_append(&md5s, confounder, 8);
+		md5_append(&md5s, zero_fill, 16);
+		md5_append(&md5s, decrypted_data + CONFOUNDER_PLUS_CHECKSUM, data_len);
+		md5_finish(&md5s, digest);
+
+		if (tvb_memeql (encr_tvb, 8, digest, 16) == 0) {
+g_warning("woohoo decrypted keytype:%d in frame:%d\n", keytype, pinfo->fd->num);
+			plaintext = g_malloc(data_len);
+			tvb_memcpy(encr_tvb, plaintext, CONFOUNDER_PLUS_CHECKSUM, data_len);
+			tvb_free(encr_tvb);
+
+			g_free(decrypted_data);
+			return(plaintext);
+		}
+	}
+
+	g_free(decrypted_data);
+	return NULL;
+}
+
+
+#endif	/* HAVE_MIT_KERBEROS / HAVE_HEIMDAL_KERBEROS / HAVE_LIBNETTLE */
 
 
 
@@ -492,7 +861,7 @@
 #define KRB5_ENCTYPE_DES_EDE3_CBC_ENV    15
 #define KRB5_ENCTYPE_DES3_CBC_SHA1       16
 #define KRB5_ENCTYPE_DES_CBC_MD5_NT      20
-#define KERB_ENCTYPE_RC4_HMAC            23 
+#define KERB_ENCTYPE_RC4_HMAC            23
 #define KERB_ENCTYPE_RC4_HMAC_EXP        24
 #define KRB5_ENCTYPE_UNKNOWN                0x1ff
 #define KRB5_ENCTYPE_LOCAL_DES3_HMAC_SHA1   0x7007
@@ -516,6 +885,11 @@
 #define KRB5_CHKSUM_KRB_DES_MAC_K       5
 #define KRB5_CHKSUM_MD5                 7
 #define KRB5_CHKSUM_MD5_DES             8
+/* the following four comes from packetcable */
+#define KRB5_CHKSUM_MD5_DES3            9
+#define KRB5_CHKSUM_HMAC_SHA1_DES3_KD   12
+#define KRB5_CHKSUM_HMAC_SHA1_DES3      13
+#define KRB5_CHKSUM_SHA1_UNKEYED        14
 #define KRB5_CHKSUM_HMAC_MD5            0xffffff76
 #define KRB5_CHKSUM_MD5_HMAC            0xffffff77
 #define KRB5_CHKSUM_RC4_MD5             0xffffff78
@@ -577,7 +951,7 @@
 /* Principal name-type */
 #define KRB5_NT_UNKNOWN        0
 #define KRB5_NT_PRINCIPAL      1
-#define KRB5_NT_SRV_INST       2	
+#define KRB5_NT_SRV_INST       2
 #define KRB5_NT_SRV_HST        3
 #define KRB5_NT_SRV_XHST       4
 #define KRB5_NT_UID            5
@@ -590,7 +964,7 @@
  *
  *	http://msdn.microsoft.com/library/en-us/security/security/kerb_external_name.asp
  */
-#define KRB5_NT_MS_PRINCIPAL		-128	
+#define KRB5_NT_MS_PRINCIPAL		-128
 #define KRB5_NT_MS_PRINCIPAL_AND_SID	-129
 #define KRB5_NT_ENT_PRINCIPAL_AND_SID	-130
 #define KRB5_NT_PRINCIPAL_AND_SID 	-131
@@ -857,6 +1231,10 @@
     { KRB5_CHKSUM_KRB_DES_MAC_K   , "krb-des-mac-k" },
     { KRB5_CHKSUM_MD5             , "md5" },
     { KRB5_CHKSUM_MD5_DES         , "md5-des" },
+    { KRB5_CHKSUM_MD5_DES3        , "md5-des3" },
+    { KRB5_CHKSUM_HMAC_SHA1_DES3_KD, "hmac-sha1-des3-kd" },
+    { KRB5_CHKSUM_HMAC_SHA1_DES3  , "hmac-sha1-des3" },
+    { KRB5_CHKSUM_SHA1_UNKEYED    , "sha1 (unkeyed)" },
     { KRB5_CHKSUM_HMAC_MD5        , "hmac-md5" },
     { KRB5_CHKSUM_MD5_HMAC        , "md5-hmac" },
     { KRB5_CHKSUM_RC4_MD5         , "rc5-md5" },
@@ -968,7 +1346,7 @@
 };
 
 
-static int 
+static int
 dissect_krb5_application_choice(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_choice(pinfo, tree, tvb, offset, kerberos_applications_choice, -1, -1);
@@ -1054,19 +1432,19 @@
 
 static int* KDCOptions_bits[] = {
   &hf_krb_KDCOptions_forwardable,
-  &hf_krb_KDCOptions_forwarded,  
-  &hf_krb_KDCOptions_proxyable,  
-  &hf_krb_KDCOptions_proxy,      
+  &hf_krb_KDCOptions_forwarded,
+  &hf_krb_KDCOptions_proxyable,
+  &hf_krb_KDCOptions_proxy,
   &hf_krb_KDCOptions_allow_postdate,
-  &hf_krb_KDCOptions_postdated,   
+  &hf_krb_KDCOptions_postdated,
   &hf_krb_KDCOptions_renewable,
   &hf_krb_KDCOptions_opt_hardware_auth,
   &hf_krb_KDCOptions_canonicalize,
-  &hf_krb_KDCOptions_disable_transited_check,   
+  &hf_krb_KDCOptions_disable_transited_check,
   &hf_krb_KDCOptions_renewable_ok,
   &hf_krb_KDCOptions_enc_tkt_in_skey,
-  &hf_krb_KDCOptions_renew,       
-  &hf_krb_KDCOptions_validate,    
+  &hf_krb_KDCOptions_renew,
+  &hf_krb_KDCOptions_validate,
   NULL
 };
 
@@ -1077,14 +1455,14 @@
 	return offset;
 }
 
-static int 
+static int
 dissect_krb5_rtime(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_generalized_time(pinfo, tree, tvb, offset, hf_krb_rtime);
 	return offset;
 }
 
-static int 
+static int
 dissect_krb5_ctime(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_generalized_time(pinfo, tree, tvb, offset, hf_krb_ctime);
@@ -1097,7 +1475,7 @@
 	return offset;
 }
 
-static int 
+static int
 dissect_krb5_stime(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_generalized_time(pinfo, tree, tvb, offset, hf_krb_stime);
@@ -1116,7 +1494,7 @@
 {
 	offset=dissect_ber_integer(pinfo, tree, tvb, offset, hf_krb_error_code, &krb5_errorcode);
 	if(krb5_errorcode && check_col(pinfo->cinfo, COL_INFO)) {
-		col_add_fstr(pinfo->cinfo, COL_INFO, 
+		col_add_fstr(pinfo->cinfo, COL_INFO,
 			"KRB Error: %s",
 			val_to_str(krb5_errorcode, krb5_error_codes,
 			"Unknown error code %#x"));
@@ -1126,13 +1504,13 @@
 }
 
 
-static int 
+static int
 dissect_krb5_till(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_generalized_time(pinfo, tree, tvb, offset, hf_krb_till);
 	return offset;
 }
-static int 
+static int
 dissect_krb5_from(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_generalized_time(pinfo, tree, tvb, offset, hf_krb_from);
@@ -1141,7 +1519,7 @@
 
 
 
-static int 
+static int
 dissect_krb5_nonce(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_integer(pinfo, tree, tvb, offset, hf_krb_nonce, NULL);
@@ -1152,14 +1530,14 @@
 /*
  *          etype[8]             SEQUENCE OF INTEGER, -- EncryptionType,
  */
-static int 
+static int
 dissect_krb5_etype(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	guint32 etype;
 
 	offset=dissect_ber_integer(pinfo, tree, tvb, offset, hf_krb_etype, &etype);
 	if(tree){
-		proto_item_append_text(tree, " %s", 
+		proto_item_append_text(tree, " %s",
 			val_to_str(etype, krb5_encryption_types,
 			"%d"));
 	}
@@ -1176,48 +1554,48 @@
 	return offset;
 }
 static guint32 authenticator_etype;
-static int 
+static int
 dissect_krb5_authenticator_etype(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_integer(pinfo, tree, tvb, offset, hf_krb_etype, &authenticator_etype);
 	if(tree){
-		proto_item_append_text(tree, " %s", 
+		proto_item_append_text(tree, " %s",
 			val_to_str(authenticator_etype, krb5_encryption_types,
 			"%#x"));
 	}
 	return offset;
 }
 static guint32 Ticket_etype;
-static int 
+static int
 dissect_krb5_Ticket_etype(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_integer(pinfo, tree, tvb, offset, hf_krb_etype, &Ticket_etype);
 	if(tree){
-		proto_item_append_text(tree, " %s", 
+		proto_item_append_text(tree, " %s",
 			val_to_str(Ticket_etype, krb5_encryption_types,
 			"%#x"));
 	}
 	return offset;
 }
 static guint32 AP_REP_etype;
-static int 
+static int
 dissect_krb5_AP_REP_etype(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_integer(pinfo, tree, tvb, offset, hf_krb_etype, &AP_REP_etype);
 	if(tree){
-		proto_item_append_text(tree, " %s", 
+		proto_item_append_text(tree, " %s",
 			val_to_str(AP_REP_etype, krb5_encryption_types,
 			"%#x"));
 	}
 	return offset;
 }
 static guint32 PA_ENC_TIMESTAMP_etype;
-static int 
+static int
 dissect_krb5_PA_ENC_TIMESTAMP_etype(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_integer(pinfo, tree, tvb, offset, hf_krb_etype, &PA_ENC_TIMESTAMP_etype);
 	if(tree){
-		proto_item_append_text(tree, " %s", 
+		proto_item_append_text(tree, " %s",
 			val_to_str(PA_ENC_TIMESTAMP_etype, krb5_encryption_types,
 			"%#x"));
 	}
@@ -1264,7 +1642,7 @@
 		int netbios_name_type;
 
 		netbios_name_type = process_netbios_name(tvb_get_ptr(tvb, offset, 16), netbios_name);
-		snprintf(address_str, 255, "%s<%02x>", netbios_name, netbios_name_type); 
+		snprintf(address_str, 255, "%s<%02x>", netbios_name, netbios_name_type);
 		it=proto_tree_add_string_format(tree, hf_krb_address_netbios, tvb, offset, 16, netbios_name, "NetBIOS Name: %s (%s)", address_str, netbios_name_type_descr(netbios_name_type));
 		}
 		break;
@@ -1332,7 +1710,7 @@
 	offset=dissect_ber_integer(pinfo, tree, tvb, offset, hf_krb_msg_type, &msgtype);
 
 	if (do_col_info & check_col(pinfo->cinfo, COL_INFO)) {
-		col_add_str(pinfo->cinfo, COL_INFO, 
+		col_add_str(pinfo->cinfo, COL_INFO,
 			val_to_str(msgtype, krb5_msg_types,
 			"Unknown msg type %#x"));
 	}
@@ -1362,26 +1740,28 @@
  * }
  */
 guint32 name_type;
-static int 
+static int
 dissect_krb5_name_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 
 	offset=dissect_ber_integer(pinfo, tree, tvb, offset, hf_krb_name_type, &name_type);
 	if(tree){
-		proto_item_append_text(tree, " (%s):", 
+		proto_item_append_text(tree, " (%s):",
 			val_to_str(name_type, krb5_princ_types,
 			"Unknown:%d"));
 	}
 	return offset;
 }
-static int 
+static char name_string_separator;
+static int
 dissect_krb5_name_string(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	char name_string[256];
 
 	offset=dissect_ber_GeneralString(pinfo, tree, tvb, offset, hf_krb_name_string, name_string, 255);
 	if(tree){
-		proto_item_append_text(tree, " %s", name_string);
+		proto_item_append_text(tree, "%c%s", name_string_separator, name_string);
+		name_string_separator='/';
 	}
 
 	return offset;
@@ -1389,9 +1769,10 @@
 static ber_sequence name_stringe_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_GeneralString, BER_FLAGS_NOOWNTAG, dissect_krb5_name_string },
 };
-static int 
+static int
 dissect_krb5_name_strings(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
+	name_string_separator=' ';
 	offset=dissect_ber_sequence_of(FALSE, pinfo, tree, tvb, offset, name_stringe_sequence_of, -1, -1);
 
 	return offset;
@@ -1419,14 +1800,14 @@
 }
 
 
-static int 
+static int
 dissect_krb5_realm(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_GeneralString(pinfo, tree, tvb, offset, hf_krb_realm, NULL, 0);
 	return offset;
 }
 
-static int 
+static int
 dissect_krb5_crealm(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_GeneralString(pinfo, tree, tvb, offset, hf_krb_crealm, NULL, 0);
@@ -1459,80 +1840,6 @@
 
 
 
-static char ContentType[64]; /*64 chars should be long enough */
-static int
-dissect_krb5_ContentInfo_ContentType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
-{
-	ContentType[0]=0;
-	offset=dissect_ber_object_identifier(TRUE, pinfo, tree, tvb, offset, hf_krb_contentinfo_contenttype, ContentType);
-
-	return offset;
-}
-
-/* the content of this structure depends on the ContentType object identifier */
-static int
-dissect_krb5_ContentInfo_content(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
-{
-	offset=call_ber_oid_callback(ContentType, tvb, offset, pinfo, tree);
-
-	return offset;
-}
-
-static ber_sequence ContentInfo_sequence[] = {
-	{ BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_krb5_ContentInfo_ContentType },
-	{ BER_CLASS_CON, 0, 0, dissect_krb5_ContentInfo_content },
-	{ 0, 0, 0, NULL }
-};
-
-static int
-dissect_krb5_PA_PK_AS_REQ_signedAuthPack(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
-{
-	offset=dissect_ber_sequence(FALSE, pinfo, tree, tvb, offset, ContentInfo_sequence, hf_krb_signedAuthPack, ett_krb_signedAuthPack);
-
-	return offset;
-}
-
-static int
-dissect_krb5_PA_PK_AS_REQ_trustedCertifiers(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
-{
-	BER_NOT_DECODED_YET("trustedCertifiers");
-
-	return offset;
-}
-static int
-dissect_krb5_PA_PK_AS_REQ_kdcCert(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
-{
-	BER_NOT_DECODED_YET("kdcCert");
-
-	return offset;
-}
-static int
-dissect_krb5_PA_PK_AS_REQ_encryptionCert(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
-{
-	BER_NOT_DECODED_YET("encryptionCert");
-
-	return offset;
-}
-
-
-
-static ber_sequence PA_PK_AS_REQ_sequence[] = {
-	{ BER_CLASS_CON, 0, 0, dissect_krb5_PA_PK_AS_REQ_signedAuthPack },
-	{ BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_krb5_PA_PK_AS_REQ_trustedCertifiers },
-	{ BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_krb5_PA_PK_AS_REQ_kdcCert },
-	{ BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_krb5_PA_PK_AS_REQ_encryptionCert },
-	{ 0, 0, 0, NULL }
-};
-static int
-dissect_krb5_PA_PK_AS_REQ(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
-{
-
-	offset=dissect_ber_sequence(FALSE, pinfo, tree, tvb, offset, PA_PK_AS_REQ_sequence, -1, -1);
-
-	return offset;
-}
-
-
 static int
 dissect_krb5_PA_PROV_SRV_LOCATION(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
@@ -1564,13 +1871,13 @@
 
 
 #ifdef HAVE_KERBEROS
-static int 
+static int
 dissect_krb5_pausec(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_integer(pinfo, tree, tvb, offset, hf_krb_pausec, NULL);
 	return offset;
 }
-static int 
+static int
 dissect_krb5_patimestamp(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_generalized_time(pinfo, tree, tvb, offset, hf_krb_patimestamp);
@@ -1591,11 +1898,11 @@
 
 	/* draft-ietf-krb-wg-kerberos-clarifications-05.txt :
 	 * 7.5.1
-	 * AS-REQ PA_ENC_TIMESTAMP are encrypted with usage 
+	 * AS-REQ PA_ENC_TIMESTAMP are encrypted with usage
 	 * == 1
 	 */
 	if(!plaintext){
-		plaintext=decrypt_krb5_data(pinfo, 1, length, tvb_get_ptr(tvb, offset, length), PA_ENC_TIMESTAMP_etype);
+		plaintext=decrypt_krb5_data(tree, pinfo, 1, length, tvb_get_ptr(tvb, offset, length), PA_ENC_TIMESTAMP_etype);
 	}
 
 	if(plaintext){
@@ -1604,10 +1911,10 @@
                                           length,
                                           length);
 		tvb_set_child_real_data_tvbuff(tvb, next_tvb);
-            
+
 		/* Add the decrypted data to the data source list. */
 		add_new_data_source(pinfo, next_tvb, "Decrypted Krb5");
-            
+
 
 		offset=dissect_ber_sequence(FALSE, pinfo, tree, next_tvb, 0, PA_ENC_TS_ENC_sequence, -1, -1);
 
@@ -1628,7 +1935,7 @@
 	return offset;
 }
 static ber_sequence PA_ENC_TIMESTAMP_sequence[] = {
-	{ BER_CLASS_CON, 0, 0, 
+	{ BER_CLASS_CON, 0, 0,
 		dissect_krb5_PA_ENC_TIMESTAMP_etype },
 	{ BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL,
 		dissect_krb5_kvno },
@@ -1654,7 +1961,7 @@
 }
 
 static ber_sequence PA_ENCTYPE_INFO_ENTRY_sequence[] = {
-	{ BER_CLASS_CON, 0, 0, 
+	{ BER_CLASS_CON, 0, 0,
 		dissect_krb5_etype },
 	{ BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL,
 		dissect_krb5_etype_info_salt },
@@ -1694,7 +2001,7 @@
 	krb_PA_DATA_type&=0xff; /*this is really just one single byte */
 
 	if(tree){
-		proto_item_append_text(tree, " %s", 
+		proto_item_append_text(tree, " %s",
 			val_to_str(krb_PA_DATA_type, krb5_preauthentication_types,
 			"Unknown:%d"));
 	}
@@ -1715,7 +2022,10 @@
 		offset=dissect_ber_octet_string_wcb(FALSE, pinfo, tree, tvb, offset,hf_krb_PA_DATA_value, dissect_krb5_application_choice);
  		break;
 	case KRB5_PA_PK_AS_REQ:
-		offset=dissect_ber_octet_string_wcb(FALSE, pinfo, tree, tvb, offset,hf_krb_PA_DATA_value, dissect_krb5_PA_PK_AS_REQ);
+		offset=dissect_ber_octet_string_wcb(FALSE, pinfo, tree, tvb, offset,hf_krb_PA_DATA_value, dissect_pkinit_PA_PK_AS_REQ);
+ 		break;
+	case KRB5_PA_PK_AS_REP:
+		offset=dissect_ber_octet_string_wcb(FALSE, pinfo, tree, tvb, offset,hf_krb_PA_DATA_value, dissect_pkinit_PA_PK_AS_REP);
  		break;
 	case KRB5_PA_PAC_REQUEST:
 		offset=dissect_ber_octet_string_wcb(FALSE, pinfo, tree, tvb, offset,hf_krb_PA_DATA_value, dissect_krb5_PA_PAC_REQUEST);
@@ -1825,17 +2135,17 @@
 
 static int* TicketFlags_bits[] = {
   &hf_krb_TicketFlags_forwardable,
-  &hf_krb_TicketFlags_forwarded,  
-  &hf_krb_TicketFlags_proxyable,  
-  &hf_krb_TicketFlags_proxy,      
+  &hf_krb_TicketFlags_forwarded,
+  &hf_krb_TicketFlags_proxyable,
+  &hf_krb_TicketFlags_proxy,
   &hf_krb_TicketFlags_allow_postdate,
-  &hf_krb_TicketFlags_postdated,   
-  &hf_krb_TicketFlags_invalid,   
+  &hf_krb_TicketFlags_postdated,
+  &hf_krb_TicketFlags_invalid,
   &hf_krb_TicketFlags_renewable,
   &hf_krb_TicketFlags_initial,
   &hf_krb_TicketFlags_pre_auth,
   &hf_krb_TicketFlags_hw_auth,
-  &hf_krb_TicketFlags_transited_policy_checked,   
+  &hf_krb_TicketFlags_transited_policy_checked,
   &hf_krb_TicketFlags_ok_as_delegate,
   NULL
 };
@@ -1849,12 +2159,12 @@
 
 
 static guint32 keytype;
-static int 
+static int
 dissect_krb5_keytype(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_integer(pinfo, tree, tvb, offset, hf_krb_keytype, &keytype);
 	if(tree){
-		proto_item_append_text(tree, " %s", 
+		proto_item_append_text(tree, " %s",
 			val_to_str(keytype, krb5_encryption_types,
 			"%#x"));
 	}
@@ -1869,7 +2179,7 @@
 	keyvalue=tvb_get_ptr(tvb, offset, keylength);
 	return 0;
 }
-static int 
+static int
 dissect_krb5_keyvalue(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_octet_string_wcb(FALSE, pinfo, tree, tvb, offset, hf_krb_keyvalue, store_keyvalue);
@@ -1895,7 +2205,7 @@
 	offset=dissect_ber_sequence(FALSE, pinfo, tree, tvb, offset, EncryptionKey_sequence, hf_krb_key, ett_krb_key);
 
 #ifdef HAVE_KERBEROS
-	add_encryption_key(pinfo, keytype, keylength, keyvalue);
+	add_encryption_key(pinfo, keytype, keylength, keyvalue, "key");
 #endif
 	return offset;
 }
@@ -1904,14 +2214,14 @@
 {
 	offset=dissect_ber_sequence(FALSE, pinfo, tree, tvb, offset, EncryptionKey_sequence, hf_krb_subkey, ett_krb_subkey);
 #ifdef HAVE_KERBEROS
-	add_encryption_key(pinfo, keytype, keylength, keyvalue);
+	add_encryption_key(pinfo, keytype, keylength, keyvalue, "subkey");
 #endif
 	return offset;
 }
 
 
 
-static int 
+static int
 dissect_krb5_PAC_LOGON_INFO(packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset)
 {
 	proto_item *item=NULL;
@@ -1946,7 +2256,7 @@
 	return offset;
 }
 
-static int 
+static int
 dissect_krb5_PAC_CREDENTIAL_TYPE(packet_info *pinfo _U_, proto_tree *parent_tree, tvbuff_t *tvb, int offset)
 {
 	proto_item *item=NULL;
@@ -1961,7 +2271,7 @@
 	return offset;
 }
 
-static int 
+static int
 dissect_krb5_PAC_SERVER_CHECKSUM(packet_info *pinfo _U_, proto_tree *parent_tree, tvbuff_t *tvb, int offset)
 {
 	proto_item *item=NULL;
@@ -1982,7 +2292,7 @@
 	return offset;
 }
 
-static int 
+static int
 dissect_krb5_PAC_PRIVSVR_CHECKSUM(packet_info *pinfo _U_, proto_tree *parent_tree, tvbuff_t *tvb, int offset)
 {
 	proto_item *item=NULL;
@@ -2003,7 +2313,7 @@
 	return offset;
 }
 
-static int 
+static int
 dissect_krb5_PAC_CLIENT_INFO_TYPE(packet_info *pinfo _U_, proto_tree *parent_tree, tvbuff_t *tvb, int offset)
 {
 	proto_item *item=NULL;
@@ -2033,7 +2343,7 @@
 	return offset;
 }
 
-static int 
+static int
 dissect_krb5_AD_WIN2K_PAC_struct(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	guint32 pac_type;
@@ -2051,17 +2361,17 @@
 	}
 
 	offset += 4;
-	
+
 	/* size of pac data */
 	pac_size=tvb_get_letohl(tvb, offset);
 	proto_tree_add_uint(tr, hf_krb_w2k_pac_size, tvb, offset, 4, pac_size);
 	offset += 4;
-	
+
 	/* offset to pac data */
 	pac_offset=tvb_get_letohl(tvb, offset);
 	proto_tree_add_uint(tr, hf_krb_w2k_pac_offset, tvb, offset, 4, pac_offset);
 	offset += 8;
-	
+
 
 	next_tvb=tvb_new_subset(tvb, pac_offset, pac_size, pac_size);
 	switch(pac_type){
@@ -2086,7 +2396,7 @@
 	return offset;
 }
 
-static int 
+static int
 dissect_krb5_AD_WIN2K_PAC(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	guint32 entries;
@@ -2111,18 +2421,18 @@
 }
 
 static guint32 IF_RELEVANT_type;
-static int 
+static int
 dissect_krb5_IF_RELEVANT_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_integer(pinfo, tree, tvb, offset, hf_krb_IF_RELEVANT_type, &IF_RELEVANT_type);
 	if(tree){
-		proto_item_append_text(tree, " %s", 
+		proto_item_append_text(tree, " %s",
 			val_to_str(IF_RELEVANT_type, krb5_ad_types,
 			"%#x"));
 	}
 	return offset;
 }
-static int 
+static int
 dissect_krb5_IF_RELEVANT_value(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	switch(IF_RELEVANT_type){
@@ -2141,7 +2451,7 @@
 		dissect_krb5_IF_RELEVANT_value },
 	{ 0, 0, 0, NULL }
 };
-static int 
+static int
 dissect_krb5_IF_RELEVANT_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_sequence(FALSE, pinfo, tree, tvb, offset, IF_RELEVANT_item_sequence, hf_krb_IF_RELEVANT, ett_krb_IF_RELEVANT);
@@ -2153,7 +2463,7 @@
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_krb5_IF_RELEVANT_item },
 };
 
-static int 
+static int
 dissect_krb5_IF_RELEVANT(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_sequence_of(FALSE, pinfo, tree, tvb, offset, IF_RELEVANT_sequence_of, -1, -1);
@@ -2162,18 +2472,18 @@
 }
 
 static guint32 adtype;
-static int 
+static int
 dissect_krb5_adtype(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_integer(pinfo, tree, tvb, offset, hf_krb_adtype, &adtype);
 	if(tree){
-		proto_item_append_text(tree, " %s", 
+		proto_item_append_text(tree, " %s",
 			val_to_str(adtype, krb5_ad_types,
 			"%#x"));
 	}
 	return offset;
 }
-static int 
+static int
 dissect_krb5_advalue(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	switch(adtype){
@@ -2217,21 +2527,21 @@
 }
 
 
-static int 
+static int
 dissect_krb5_transited_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	guint32 trtype;
 
 	offset=dissect_ber_integer(pinfo, tree, tvb, offset, hf_krb_transitedtype, &trtype);
 	if(tree){
-		proto_item_append_text(tree, " %s", 
+		proto_item_append_text(tree, " %s",
 			val_to_str(trtype, krb5_transited_types,
 			"%#x"));
 	}
 	return offset;
 }
 
-static int 
+static int
 dissect_krb5_transited_contents(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_octet_string(FALSE, pinfo, tree, tvb, offset, hf_krb_transitedcontents, NULL);
@@ -2259,25 +2569,25 @@
 }
 
 
-static int 
+static int
 dissect_krb5_authtime(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_generalized_time(pinfo, tree, tvb, offset, hf_krb_authtime);
 	return offset;
 }
-static int 
+static int
 dissect_krb5_starttime(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_generalized_time(pinfo, tree, tvb, offset, hf_krb_starttime);
 	return offset;
 }
-static int 
+static int
 dissect_krb5_endtime(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_generalized_time(pinfo, tree, tvb, offset, hf_krb_endtime);
 	return offset;
 }
-static int 
+static int
 dissect_krb5_renew_till(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_generalized_time(pinfo, tree, tvb, offset, hf_krb_renew_till);
@@ -2304,7 +2614,7 @@
 		dissect_krb5_TicketFlags },
 	{ BER_CLASS_CON, 1, 0,
 		dissect_krb5_key },
-	{ BER_CLASS_CON, 2, 0, 
+	{ BER_CLASS_CON, 2, 0,
 		dissect_krb5_crealm },
 	{ BER_CLASS_CON, 3, 0,
 		dissect_krb5_cname },
@@ -2418,7 +2728,7 @@
 	return offset;
 }
 
-static int 
+static int
 dissect_krb5_key_expiration(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_generalized_time(pinfo, tree, tvb, offset, hf_krb_key_expire);
@@ -2444,7 +2754,7 @@
 		dissect_krb5_endtime },
 	{ BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL,
 		dissect_krb5_renew_till },
-	{ BER_CLASS_CON, 9, 0, 
+	{ BER_CLASS_CON, 9, 0,
 		dissect_krb5_realm },
 	{ BER_CLASS_CON, 10, 0,
 		dissect_krb5_sname },
@@ -2519,7 +2829,7 @@
 static ber_sequence Authenticator_sequence[] = {
 	{ BER_CLASS_CON, 0, 0,
 		dissect_krb5_authenticator_vno },
-	{ BER_CLASS_CON, 1, 0, 
+	{ BER_CLASS_CON, 1, 0,
 		dissect_krb5_crealm },
 	{ BER_CLASS_CON, 2, 0,
 		dissect_krb5_cname },
@@ -2561,7 +2871,7 @@
 	return offset;
 }
 static ber_sequence ENC_PRIV_sequence[] = {
-	{ BER_CLASS_CON, 0, 0, 
+	{ BER_CLASS_CON, 0, 0,
 		dissect_krb5_etype },
 	{ BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL,
 		dissect_krb5_kvno },
@@ -2576,9 +2886,9 @@
 	return offset;
 }
 static ber_sequence PRIV_BODY_sequence[] = {
-	{ BER_CLASS_CON, 0, 0, 
+	{ BER_CLASS_CON, 0, 0,
 		dissect_krb5_pvno },
-	{ BER_CLASS_CON, 1, 0, 
+	{ BER_CLASS_CON, 1, 0,
 		dissect_krb5_msg_type },
 	{ BER_CLASS_CON, 3, 0,
 		dissect_krb5_ENC_PRIV },
@@ -2602,7 +2912,7 @@
 	call_kerberos_callbacks(pinfo, tree, new_tvb, KRB_CBTAG_SAFE_USER_DATA);
 	return offset;
 }
-static int 
+static int
 dissect_krb5_SAFE_BODY_timestamp(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_generalized_time(pinfo, tree, tvb, offset, hf_krb_SAFE_BODY_timestamp);
@@ -2617,11 +2927,11 @@
 }
 
 static ber_sequence SAFE_BODY_sequence[] = {
-	{ BER_CLASS_CON, 0, 0, 
+	{ BER_CLASS_CON, 0, 0,
 		dissect_krb5_SAFE_BODY_user_data },
-	{ BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, 
+	{ BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL,
 		dissect_krb5_SAFE_BODY_timestamp },
-	{ BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, 
+	{ BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL,
 		dissect_krb5_SAFE_BODY_usec },
 	{ BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL,
 		dissect_krb5_seq_number },
@@ -2644,13 +2954,13 @@
 
 
 static ber_sequence SAFE_sequence[] = {
-	{ BER_CLASS_CON, 0, 0, 
+	{ BER_CLASS_CON, 0, 0,
 		dissect_krb5_pvno },
-	{ BER_CLASS_CON, 1, 0, 
+	{ BER_CLASS_CON, 1, 0,
 		dissect_krb5_msg_type },
-	{ BER_CLASS_CON, 2, 0, 
+	{ BER_CLASS_CON, 2, 0,
 		dissect_krb5_SAFE_BODY },
-	{ BER_CLASS_CON, 3, 0, 
+	{ BER_CLASS_CON, 3, 0,
 		dissect_krb5_Checksum },
 	{ 0, 0, 0, NULL }
 };
@@ -2696,7 +3006,7 @@
 		dissect_krb5_sname },
 	{ BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL,
 		dissect_krb5_from },
-		/* this field is not optional in the kerberos spec, 
+		/* this field is not optional in the kerberos spec,
 		 * however, in the packetcable spec it is optional.
 		 * make it optional here since normal kerberos will
 		 * still decode the pdu correctly.
@@ -2734,9 +3044,9 @@
  * }
  */
 static ber_sequence KDC_REQ_sequence[] = {
-	{ BER_CLASS_CON, 1, 0, 
+	{ BER_CLASS_CON, 1, 0,
 		dissect_krb5_pvno },
-	{ BER_CLASS_CON, 2, 0, 
+	{ BER_CLASS_CON, 2, 0,
 		dissect_krb5_msg_type },
 	{ BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL,
 		dissect_krb5_padata },
@@ -2764,15 +3074,15 @@
 
 	/* draft-ietf-krb-wg-kerberos-clarifications-05.txt :
 	 * 7.5.1
-	 * Authenticators are encrypted with usage 
+	 * Authenticators are encrypted with usage
 	 * == 7 or
 	 * == 11
 	 */
 	if(!plaintext){
-		plaintext=decrypt_krb5_data(pinfo, 7, length, tvb_get_ptr(tvb, offset, length), authenticator_etype);
+		plaintext=decrypt_krb5_data(tree, pinfo, 7, length, tvb_get_ptr(tvb, offset, length), authenticator_etype);
 	}
 	if(!plaintext){
-		plaintext=decrypt_krb5_data(pinfo, 11, length, tvb_get_ptr(tvb, offset, length), authenticator_etype);
+		plaintext=decrypt_krb5_data(tree, pinfo, 11, length, tvb_get_ptr(tvb, offset, length), authenticator_etype);
 	}
 
 	if(plaintext){
@@ -2781,10 +3091,10 @@
                                           length,
                                           length);
 		tvb_set_child_real_data_tvbuff(tvb, next_tvb);
-            
+
 		/* Add the decrypted data to the data source list. */
 		add_new_data_source(pinfo, next_tvb, "Decrypted Krb5");
-            
+
 
 		offset=dissect_ber_choice(pinfo, tree, next_tvb, 0, kerberos_applications_choice, -1, -1);
 
@@ -2812,7 +3122,7 @@
 	return offset;
 }
 static ber_sequence encrypted_authenticator_sequence[] = {
-	{ BER_CLASS_CON, 0, 0, 
+	{ BER_CLASS_CON, 0, 0,
 		dissect_krb5_authenticator_etype },
 	{ BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL,
 		dissect_krb5_kvno },
@@ -2831,7 +3141,7 @@
 
 
 
-static int 
+static int
 dissect_krb5_tkt_vno(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_integer(pinfo, tree, tvb, offset, hf_krb_tkt_vno, NULL);
@@ -2850,18 +3160,18 @@
 
 	/* draft-ietf-krb-wg-kerberos-clarifications-05.txt :
 	 * 7.5.1
-	 * All Ticket encrypted parts use usage == 2 
+	 * All Ticket encrypted parts use usage == 2
 	 */
-	if( (plaintext=decrypt_krb5_data(pinfo, 2, length, tvb_get_ptr(tvb, offset, length), Ticket_etype)) ){
+	if( (plaintext=decrypt_krb5_data(tree, pinfo, 2, length, tvb_get_ptr(tvb, offset, length), Ticket_etype)) ){
 		tvbuff_t *next_tvb;
 		next_tvb = tvb_new_real_data (plaintext,
                                           length,
                                           length);
 		tvb_set_child_real_data_tvbuff(tvb, next_tvb);
-            
+
 		/* Add the decrypted data to the data source list. */
 		add_new_data_source(pinfo, next_tvb, "Decrypted Krb5");
-            
+
 
 		offset=dissect_ber_choice(pinfo, tree, next_tvb, 0, kerberos_applications_choice, -1, -1);
 
@@ -2881,7 +3191,7 @@
 	return offset;
 }
 static ber_sequence encrypted_Ticket_sequence[] = {
-	{ BER_CLASS_CON, 0, 0, 
+	{ BER_CLASS_CON, 0, 0,
 		dissect_krb5_Ticket_etype },
 	{ BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL,
 		dissect_krb5_kvno },
@@ -2898,13 +3208,13 @@
 }
 
 static ber_sequence Application_1_sequence[] = {
-	{ BER_CLASS_CON, 0, 0, 
+	{ BER_CLASS_CON, 0, 0,
 		dissect_krb5_tkt_vno },
-	{ BER_CLASS_CON, 1, 0, 
+	{ BER_CLASS_CON, 1, 0,
 		dissect_krb5_realm },
-	{ BER_CLASS_CON, 2, 0, 
+	{ BER_CLASS_CON, 2, 0,
 		dissect_krb5_sname },
-	{ BER_CLASS_CON, 3, 0, 
+	{ BER_CLASS_CON, 3, 0,
 		dissect_krb5_Ticket_encrypted },
 	{ 0, 0, 0, NULL }
 };
@@ -2919,7 +3229,7 @@
 
 
 static const ber_choice Ticket_choice[] = {
-	{ 1, BER_CLASS_APP, 1,  0,	
+	{ 1, BER_CLASS_APP, 1,  0,
 		dissect_krb5_Application_1 },
 	{ 0, 0, 0, 0, NULL }
 };
@@ -2944,15 +3254,15 @@
  *  }
  */
 static ber_sequence AP_REQ_sequence[] = {
-	{ BER_CLASS_CON, 0, 0, 
+	{ BER_CLASS_CON, 0, 0,
 		dissect_krb5_pvno },
-	{ BER_CLASS_CON, 1, 0, 
+	{ BER_CLASS_CON, 1, 0,
 		dissect_krb5_msg_type },
-	{ BER_CLASS_CON, 2, 0, 
+	{ BER_CLASS_CON, 2, 0,
 		dissect_krb5_APOptions },
-	{ BER_CLASS_CON, 3, 0, 
+	{ BER_CLASS_CON, 3, 0,
 		dissect_krb5_Ticket },
-	{ BER_CLASS_CON, 4, 0, 
+	{ BER_CLASS_CON, 4, 0,
 		dissect_krb5_encrypted_authenticator },
 	{ 0, 0, 0, NULL }
 };
@@ -2978,12 +3288,12 @@
 
 	/* draft-ietf-krb-wg-kerberos-clarifications-05.txt :
 	 * 7.5.1
-	 * Authenticators are encrypted with usage 
+	 * Authenticators are encrypted with usage
 	 * == 7 or
 	 * == 11
 	 */
 	if(!plaintext){
-		plaintext=decrypt_krb5_data(pinfo, 12, length, tvb_get_ptr(tvb, offset, length), AP_REP_etype);
+		plaintext=decrypt_krb5_data(tree, pinfo, 12, length, tvb_get_ptr(tvb, offset, length), AP_REP_etype);
 	}
 
 	if(plaintext){
@@ -2992,10 +3302,10 @@
                                           length,
                                           length);
 		tvb_set_child_real_data_tvbuff(tvb, next_tvb);
-            
+
 		/* Add the decrypted data to the data source list. */
 		add_new_data_source(pinfo, next_tvb, "Decrypted Krb5");
-            
+
 
 		offset=dissect_ber_choice(pinfo, tree, next_tvb, 0, kerberos_applications_choice, -1, -1);
 
@@ -3016,7 +3326,7 @@
 	return offset;
 }
 static ber_sequence encrypted_AP_REP_sequence[] = {
-	{ BER_CLASS_CON, 0, 0, 
+	{ BER_CLASS_CON, 0, 0,
 		dissect_krb5_AP_REP_etype },
 	{ BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL,
 		dissect_krb5_kvno },
@@ -3040,11 +3350,11 @@
  *  }
  */
 static ber_sequence AP_REP_sequence[] = {
-	{ BER_CLASS_CON, 0, 0, 
+	{ BER_CLASS_CON, 0, 0,
 		dissect_krb5_pvno },
-	{ BER_CLASS_CON, 1, 0, 
+	{ BER_CLASS_CON, 1, 0,
 		dissect_krb5_msg_type },
-	{ BER_CLASS_CON, 2, 0, 
+	{ BER_CLASS_CON, 2, 0,
 		dissect_krb5_encrypted_AP_REP },
 	{ 0, 0, 0, NULL }
 };
@@ -3061,12 +3371,12 @@
 
 
 static guint32 KDC_REP_etype;
-static int 
+static int
 dissect_krb5_KDC_REP_etype(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_integer(pinfo, tree, tvb, offset, hf_krb_etype, &KDC_REP_etype);
 	if(tree){
-		proto_item_append_text(tree, " %s", 
+		proto_item_append_text(tree, " %s",
 			val_to_str(KDC_REP_etype, krb5_encryption_types,
 			"%#x"));
 	}
@@ -3084,19 +3394,19 @@
 
 	/* draft-ietf-krb-wg-kerberos-clarifications-05.txt :
 	 * 7.5.1
-	 * ASREP/TGSREP encryptedparts are encrypted with usage 
+	 * ASREP/TGSREP encryptedparts are encrypted with usage
 	 * == 3 or
 	 * == 8 or
          * == 9
 	 */
 	if(!plaintext){
-		plaintext=decrypt_krb5_data(pinfo, 3, length, tvb_get_ptr(tvb, offset, length), KDC_REP_etype);
+		plaintext=decrypt_krb5_data(tree, pinfo, 3, length, tvb_get_ptr(tvb, offset, length), KDC_REP_etype);
 	}
 	if(!plaintext){
-		plaintext=decrypt_krb5_data(pinfo, 8, length, tvb_get_ptr(tvb, offset, length), KDC_REP_etype);
+		plaintext=decrypt_krb5_data(tree, pinfo, 8, length, tvb_get_ptr(tvb, offset, length), KDC_REP_etype);
 	}
 	if(!plaintext){
-		plaintext=decrypt_krb5_data(pinfo, 9, length, tvb_get_ptr(tvb, offset, length), KDC_REP_etype);
+		plaintext=decrypt_krb5_data(tree, pinfo, 9, length, tvb_get_ptr(tvb, offset, length), KDC_REP_etype);
 	}
 
 	if(plaintext){
@@ -3105,10 +3415,10 @@
                                           length,
                                           length);
 		tvb_set_child_real_data_tvbuff(tvb, next_tvb);
-            
+
 		/* Add the decrypted data to the data source list. */
 		add_new_data_source(pinfo, next_tvb, "Decrypted Krb5");
-            
+
 
 		offset=dissect_ber_choice(pinfo, tree, next_tvb, 0, kerberos_applications_choice, -1, -1);
 
@@ -3129,7 +3439,7 @@
 	return offset;
 }
 static ber_sequence encrypted_KDC_REP_sequence[] = {
-	{ BER_CLASS_CON, 0, 0, 
+	{ BER_CLASS_CON, 0, 0,
 		dissect_krb5_KDC_REP_etype },
 	{ BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL,
 		dissect_krb5_kvno },
@@ -3157,19 +3467,19 @@
  *  }
  */
 static ber_sequence KDC_REP_sequence[] = {
-	{ BER_CLASS_CON, 0, 0, 
+	{ BER_CLASS_CON, 0, 0,
 		dissect_krb5_pvno },
-	{ BER_CLASS_CON, 1, 0, 
+	{ BER_CLASS_CON, 1, 0,
 		dissect_krb5_msg_type },
 	{ BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL,
 		dissect_krb5_padata },
-	{ BER_CLASS_CON, 3, 0, 
+	{ BER_CLASS_CON, 3, 0,
 		dissect_krb5_crealm },
 	{ BER_CLASS_CON, 4, 0,
 		dissect_krb5_cname },
-	{ BER_CLASS_CON, 5, 0, 
+	{ BER_CLASS_CON, 5, 0,
 		dissect_krb5_Ticket },
-	{ BER_CLASS_CON, 6, 0, 
+	{ BER_CLASS_CON, 6, 0,
 		dissect_krb5_encrypted_KDC_REP },
 	{ 0, 0, 0, NULL }
 };
@@ -3184,14 +3494,14 @@
 
 
 
-static int 
+static int
 dissect_krb5_e_text(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	offset=dissect_ber_GeneralString(pinfo, tree, tvb, offset, hf_krb_e_text, NULL, 0);
 	return offset;
 }
 
-static int 
+static int
 dissect_krb5_e_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
 {
 	switch(krb5_errorcode){
@@ -3206,6 +3516,18 @@
 }
 
 
+/* This optional field in KRB_ERR is used by the early drafts which
+ * PacketCable still use.
+ */
+static int
+dissect_krb5_e_checksum(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
+{
+	offset=dissect_ber_sequence(FALSE, pinfo, tree, tvb, offset, Checksum_sequence, hf_krb_e_checksum, ett_krb_e_checksum);
+
+	return offset;
+}
+
+
 /*
  *  KRB-ERROR ::=   [APPLICATION 30] SEQUENCE {
  *                  pvno[0]               INTEGER,
@@ -3232,7 +3554,7 @@
  *            the method:
  */
 static ber_sequence ERROR_sequence[] = {
-	{ BER_CLASS_CON, 0, 0, 
+	{ BER_CLASS_CON, 0, 0,
 		dissect_krb5_pvno },
 	{ BER_CLASS_CON, 1, 0,
 		dissect_krb5_msg_type },
@@ -3252,12 +3574,14 @@
 		dissect_krb5_cname },
 	{ BER_CLASS_CON, 9, 0,
 		dissect_krb5_realm },
-	{ BER_CLASS_CON, 10, 0, 
+	{ BER_CLASS_CON, 10, 0,
 		dissect_krb5_sname },
 	{ BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL,
 		dissect_krb5_e_text },
 	{ BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL,
 		dissect_krb5_e_data },
+	{ BER_CLASS_CON, 13, BER_FLAGS_OPTIONAL,
+		dissect_krb5_e_checksum }, /* used by PacketCable */
 	{ 0, 0, 0, NULL }
 };
 static int
@@ -3296,6 +3620,23 @@
 static void
 dissect_kerberos_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
+    conversation_t *conversation;
+
+    /*
+     * UDP replies from the server are sent back to the client's source
+     * port, similar to TFTP.
+     */
+    /* XXX This test may be too general */
+    if (pinfo->destport == UDP_PORT_KERBEROS && pinfo->ptype == PT_UDP) {
+	conversation = find_conversation(&pinfo->src, &pinfo->dst, PT_UDP,
+	       pinfo->srcport, 0, NO_PORT_B);
+	if (conversation == NULL) {
+	    conversation = conversation_new(&pinfo->src, &pinfo->dst, PT_UDP,
+		    pinfo->srcport, 0, NO_PORT2);
+	    conversation_set_dissector(conversation, kerberos_handle_udp);
+	}
+    }
+
     if (check_col(pinfo->cinfo, COL_PROTOCOL))
         col_set_str(pinfo->cinfo, COL_PROTOCOL, "KRB5");
 
@@ -3423,7 +3764,7 @@
 	{ &hf_krb_transitedtype, {
 	    "Type", "kerberos.transited.type", FT_UINT32, BASE_DEC,
 	    VALS(krb5_transited_types), 0, "Transited Type", HFILL }},
-	{ &hf_krb_transitedcontents, {	
+	{ &hf_krb_transitedcontents, {
 	    "Contents", "kerberos.transited.contents", FT_BYTES, BASE_HEX,
 	    NULL, 0, "Transitent Contents string", HFILL }},
 	{ &hf_krb_keytype, {
@@ -3465,9 +3806,6 @@
 	{ &hf_krb_address_netbios, {
 	    "NetBIOS Address", "kerberos.addr_nb", FT_STRING, BASE_NONE,
 	    NULL, 0, "NetBIOS Address and type", HFILL }},
-	{ &hf_krb_contentinfo_contenttype, {
-	    "ContentType", "kerberos.contenttype", FT_STRING, BASE_NONE,
-	    NULL, 0, "ContentInfo ContentType field", HFILL }},
 	{ &hf_krb_authtime, {
 	    "Authtime", "kerberos.authtime", FT_STRING, BASE_NONE,
 	    NULL, 0, "Time of initial authentication", HFILL }},
@@ -3723,9 +4061,6 @@
 	{ &hf_krb_s_address, {
 	    "S-Address", "kerberos.s_address", FT_NONE, BASE_DEC,
 	    NULL, 0, "This is the Senders address", HFILL }},
-	{ &hf_krb_signedAuthPack, {
-	    "signedAuthPack", "kerberos.signedAuthPack", FT_NONE, BASE_DEC,
-	    NULL, 0, "This is a Kerberos ContentInfo sequence", HFILL }},
 	{ &hf_krb_key, {
 	    "key", "kerberos.key", FT_NONE, BASE_DEC,
 	    NULL, 0, "This is a Kerberos EncryptionKey sequence", HFILL }},
@@ -3816,12 +4151,15 @@
 	{ &hf_krb_w2k_pac_offset, {
 	    "Offset", "kerberos.pac.offset", FT_UINT32, BASE_DEC,
 	    NULL, 0, "Offset to W2k PAC entry", HFILL }},
-	{ &hf_krb_pac_clientid, { 
+	{ &hf_krb_pac_clientid, {
 	    "ClientID", "kerberos.pac.clientid", FT_ABSOLUTE_TIME, BASE_NONE,
 	    NULL, 0, "ClientID Timestamp", HFILL }},
-	{ &hf_krb_pac_namelen, { 
+	{ &hf_krb_pac_namelen, {
 	    "Name Length", "kerberos.pac.namelen", FT_UINT16, BASE_DEC,
 	    NULL, 0, "Length of client name", HFILL }},
+	{ &hf_krb_e_checksum, {
+	    "e-checksum", "kerberos.e_checksum", FT_NONE, BASE_DEC,
+	    NULL, 0, "This is a Kerberos e-checksum", HFILL }},
     };
 
     static gint *ett[] = {
@@ -3864,7 +4202,7 @@
 	&ett_krb_PAC_SERVER_CHECKSUM,
 	&ett_krb_PAC_PRIVSVR_CHECKSUM,
 	&ett_krb_PAC_CLIENT_INFO_TYPE,
-	&ett_krb_signedAuthPack,
+	&ett_krb_e_checksum,
     };
     module_t *krb_module;
 
@@ -3875,9 +4213,10 @@
     /* Register preferences */
     krb_module = prefs_register_protocol(proto_kerberos, NULL);
     prefs_register_bool_preference(krb_module, "desegment",
-	"Desegment Kerberos over TCP messages",
-	"Whether the dissector should desegment "
-	"multi-segment Kerberos messages", &krb_desegment);
+	"Reassemble Kerberos over TCP messages spanning multiple TCP segments",
+	"Whether the Kerberos dissector should reassemble messages spanning multiple TCP segments."
+	" To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
+    &krb_desegment);
 #ifdef HAVE_KERBEROS
     prefs_register_bool_preference(krb_module, "decrypt",
 	"Try to decrypt Kerberos blobs",
@@ -3921,7 +4260,6 @@
 void
 proto_reg_handoff_kerberos(void)
 {
-    dissector_handle_t kerberos_handle_udp;
     dissector_handle_t kerberos_handle_tcp;
 
     kerberos_handle_udp = create_dissector_handle(dissect_kerberos_udp,
diff -urN ethereal-0.10.6/epan/dissectors/packet-kerberos4.c ethereal-0.10.7/epan/dissectors/packet-kerberos4.c
--- ethereal-0.10.6/epan/dissectors/packet-kerberos4.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-kerberos4.c	2004-10-20 17:34:56.000000000 -0500
@@ -0,0 +1,446 @@
+/* packet-kerberos4.c
+ * Routines for Kerberos v4 packet dissection
+ *
+ * Ronnie Sahlberg 2004
+ *
+ * $Id: packet-kerberos4.c 11410 2004-07-18 18:06:47Z gram $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+/*
+ * PDU structure based on the document :
+ *                                                              Section E.2.1
+ *
+ *                            Kerberos Authentication and Authorization System
+ *
+ *            by S. P. Miller, B. C. Neuman, J. I. Schiller, and J. H. Saltzer
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <epan/packet.h>
+#include <epan/conversation.h>
+
+static int proto_krb4 = -1;
+static int hf_krb4_version = -1;
+static int hf_krb4_auth_msg_type = -1;
+static int hf_krb4_m_type = -1;
+static int hf_krb4_byte_order = -1;
+static int hf_krb4_name = -1;
+static int hf_krb4_instance = -1;
+static int hf_krb4_realm = -1;
+static int hf_krb4_time_sec = -1;
+static int hf_krb4_exp_date = -1;
+static int hf_krb4_req_date = -1;
+static int hf_krb4_lifetime = -1;
+static int hf_krb4_s_name = -1;
+static int hf_krb4_s_instance = -1;
+static int hf_krb4_kvno = -1;
+static int hf_krb4_length = -1;
+static int hf_krb4_ticket_length = -1;
+static int hf_krb4_request_length = -1;
+static int hf_krb4_ticket_blob = -1;
+static int hf_krb4_request_blob = -1;
+static int hf_krb4_encrypted_blob = -1;
+static int hf_krb4_unknown_transarc_blob = -1;
+
+static gint ett_krb4 = -1;
+static gint ett_krb4_auth_msg_type = -1;
+
+#define UDP_PORT_KRB4    750
+#define TRANSARC_SPECIAL_VERSION 0x63
+
+static const value_string byte_order_vals[] = {
+	{ 0,	"Big Endian" },
+	{ 1,	"Little Endian" },
+	{ 0,	NULL }
+};
+
+#define AUTH_MSG_KDC_REQUEST		1
+#define AUTH_MSG_KDC_REPLY		2
+#define AUTH_MSG_APPL_REQUEST		3
+#define AUTH_MSG_APPL_REQUEST_MUTUAL	4
+#define AUTH_MSG_ERR_REPLY		5
+#define AUTH_MSG_PRIVATE		6
+#define AUTH_MSG_SAFE			7
+#define AUTH_MSG_APPL_ERR		8
+#define AUTH_MSG_DIE			63
+static const value_string m_type_vals[] = {
+	{ AUTH_MSG_KDC_REQUEST,		"KDC Request" },
+	{ AUTH_MSG_KDC_REPLY,		"KDC Reply" },
+	{ AUTH_MSG_APPL_REQUEST,	"Appl Request" },
+	{ AUTH_MSG_APPL_REQUEST_MUTUAL,	"Appl Request Mutual" },
+	{ AUTH_MSG_ERR_REPLY,		"Err Reply" },
+	{ AUTH_MSG_PRIVATE,		"Private" },
+	{ AUTH_MSG_SAFE,		"Safe" },
+	{ AUTH_MSG_APPL_ERR,		"Appl Err" },
+	{ AUTH_MSG_DIE,			"Die" },
+	{ 0,	NULL }
+};
+
+
+static int
+dissect_krb4_string(packet_info *pinfo _U_, int hf_index, proto_tree *tree, tvbuff_t *tvb, int offset)
+{
+	proto_tree_add_item(tree, hf_index, tvb, offset, -1, FALSE);
+	while(tvb_get_guint8(tvb, offset)!=0){
+		offset++;
+	}
+	offset++;
+
+	return offset;
+}
+
+static int
+dissect_krb4_kdc_request(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, gboolean little_endian, int version)
+{
+	nstime_t time_sec;
+	guint8 lifetime;
+
+	if(version==TRANSARC_SPECIAL_VERSION){
+		proto_tree_add_item(tree, hf_krb4_unknown_transarc_blob, tvb, offset, 8, FALSE);
+		offset+=8;
+	}
+
+	/* Name */
+	offset=dissect_krb4_string(pinfo, hf_krb4_name, tree, tvb, offset);
+
+	/* Instance */
+	offset=dissect_krb4_string(pinfo, hf_krb4_instance, tree, tvb, offset);
+
+	/* Realm */
+	offset=dissect_krb4_string(pinfo, hf_krb4_realm, tree, tvb, offset);
+
+	/* Time sec */
+	time_sec.secs=little_endian?tvb_get_letohl(tvb, offset):tvb_get_ntohl(tvb, offset);
+	time_sec.nsecs=0;
+	proto_tree_add_time(tree, hf_krb4_time_sec, tvb, offset, 4, &time_sec);
+	offset+=4;
+
+	/* lifetime */
+	lifetime=tvb_get_guint8(tvb, offset);
+	proto_tree_add_uint_format(tree, hf_krb4_lifetime, tvb, offset, 1, lifetime, "Lifetime: %d (%d minutes)", lifetime, lifetime*5);
+	offset++;
+
+	/* service Name */
+	offset=dissect_krb4_string(pinfo, hf_krb4_s_name, tree, tvb, offset);
+
+	/* service Instance */
+	offset=dissect_krb4_string(pinfo, hf_krb4_s_instance, tree, tvb, offset);
+
+	return offset;
+}
+
+
+static int
+dissect_krb4_kdc_reply(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, gboolean little_endian)
+{
+	nstime_t time_sec;
+	guint32 length;
+
+	/* Name */
+	offset=dissect_krb4_string(pinfo, hf_krb4_name, tree, tvb, offset);
+
+	/* Instance */
+	offset=dissect_krb4_string(pinfo, hf_krb4_instance, tree, tvb, offset);
+
+	/* Realm */
+	offset=dissect_krb4_string(pinfo, hf_krb4_realm, tree, tvb, offset);
+
+	/* Time sec */
+	time_sec.secs=little_endian?tvb_get_letohl(tvb, offset):tvb_get_ntohl(tvb, offset);
+	time_sec.nsecs=0;
+	proto_tree_add_time(tree, hf_krb4_time_sec, tvb, offset, 4, &time_sec);
+	offset+=4;
+
+	/*XXX unknown byte here */
+	offset++;
+
+	/* exp date */
+	time_sec.secs=little_endian?tvb_get_letohl(tvb, offset):tvb_get_ntohl(tvb, offset);
+	time_sec.nsecs=0;
+	proto_tree_add_time(tree, hf_krb4_exp_date, tvb, offset, 4, &time_sec);
+	offset+=4;
+
+	/* kvno */
+	proto_tree_add_item(tree, hf_krb4_kvno, tvb, offset, 1, FALSE);
+	offset++;
+
+	/* length2 */
+	length=little_endian?tvb_get_letohs(tvb, offset):tvb_get_ntohs(tvb, offset);
+	proto_tree_add_uint_format(tree, hf_krb4_length, tvb, offset, 2, length, "Length: %d", length);
+	offset+=2;
+
+	/* encrypted blob */
+	proto_tree_add_item(tree, hf_krb4_encrypted_blob, tvb, offset, length, FALSE);
+	offset+=length;
+
+	return offset;
+}
+
+
+static int
+dissect_krb4_appl_request(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, gboolean little_endian)
+{
+	guint8 tlen, rlen;
+	nstime_t time_sec;
+	guint8 lifetime;
+
+	/* kvno */
+	proto_tree_add_item(tree, hf_krb4_kvno, tvb, offset, 1, FALSE);
+	offset++;
+
+	/* Realm */
+	offset=dissect_krb4_string(pinfo, hf_krb4_realm, tree, tvb, offset);
+
+	/* ticket length */
+	tlen=tvb_get_guint8(tvb, offset);
+	proto_tree_add_item(tree, hf_krb4_ticket_length, tvb, offset, 1, FALSE);
+	offset++;
+
+	/* request length */
+	rlen=tvb_get_guint8(tvb, offset);
+	proto_tree_add_item(tree, hf_krb4_request_length, tvb, offset, 1, FALSE);
+	offset++;
+
+	/* ticket */
+	proto_tree_add_item(tree, hf_krb4_ticket_blob, tvb, offset, tlen, FALSE);
+	offset+=tlen;
+
+	/* request */
+	proto_tree_add_item(tree, hf_krb4_request_blob, tvb, offset, rlen, FALSE);
+	offset+=rlen;
+
+	/* request time */
+	time_sec.secs=little_endian?tvb_get_letohl(tvb, offset):tvb_get_ntohl(tvb, offset);
+	time_sec.nsecs=0;
+	proto_tree_add_time(tree, hf_krb4_req_date, tvb, offset, 4, &time_sec);
+	offset+=4;
+
+	/* lifetime */
+	lifetime=tvb_get_guint8(tvb, offset);
+	proto_tree_add_uint_format(tree, hf_krb4_lifetime, tvb, offset, 1, lifetime, "Lifetime: %d (%d minutes)", lifetime, lifetime*5);
+	offset++;
+
+	/* service Name */
+	offset=dissect_krb4_string(pinfo, hf_krb4_s_name, tree, tvb, offset);
+
+	/* service Instance */
+	offset=dissect_krb4_string(pinfo, hf_krb4_s_instance, tree, tvb, offset);
+
+	return offset;
+}
+
+
+
+static int
+dissect_krb4_auth_msg_type(packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, int version)
+{
+	proto_tree *tree;
+	proto_item *item;
+	guint8 auth_msg_type;
+
+	auth_msg_type=tvb_get_guint8(tvb, offset);
+	item = proto_tree_add_item(parent_tree, hf_krb4_auth_msg_type, tvb, offset, 1, FALSE);
+	tree = proto_item_add_subtree(item, ett_krb4_auth_msg_type);
+
+	/* m_type */
+	proto_tree_add_item(tree, hf_krb4_m_type, tvb, offset, 1, FALSE);
+	if (check_col(pinfo->cinfo, COL_INFO))
+	  col_append_fstr(pinfo->cinfo, COL_INFO, "%s%s",
+	   (version==TRANSARC_SPECIAL_VERSION)?"TRANSARC-":"", 
+	    val_to_str(auth_msg_type>>1, m_type_vals, "Unknown (0x%04x)"));
+	proto_item_append_text(item, " %s%s", 
+	   (version==TRANSARC_SPECIAL_VERSION)?"TRANSARC-":"", 
+	   val_to_str(auth_msg_type>>1, m_type_vals, "Unknown (0x%04x)"));
+
+	/* byte order */
+	proto_tree_add_item(tree, hf_krb4_byte_order, tvb, offset, 1, FALSE);
+	proto_item_append_text(item, " (%s)", val_to_str(auth_msg_type&0x01, byte_order_vals, "Unknown (0x%04x)"));
+
+	offset++;
+	return offset;
+}
+
+static int
+dissect_krb4(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
+{
+	proto_tree *tree;
+	proto_item *item;
+	guint8 version, opcode;
+	int offset=0;
+	
+	/* this should better have the value 4 or it might be a weirdo
+	 * Transarc AFS special unknown thing.
+	 */
+	version=tvb_get_guint8(tvb, offset);
+	if((version!=4)&&(version!=TRANSARC_SPECIAL_VERSION)){ 
+		return 0;
+	}
+
+	/* create a tree for krb4 */
+	item = proto_tree_add_item(parent_tree, proto_krb4, tvb, offset, -1, FALSE);
+	tree = proto_item_add_subtree(item, ett_krb4);
+	
+	if (check_col(pinfo->cinfo, COL_PROTOCOL))
+		col_set_str(pinfo->cinfo, COL_PROTOCOL, "KRB4");
+	if (check_col(pinfo->cinfo, COL_INFO))
+		col_clear(pinfo->cinfo, COL_INFO);
+
+	/* version */
+	proto_tree_add_item(tree, hf_krb4_version, tvb, offset, 1, FALSE);
+	offset++;
+
+	/* auth_msg_type */
+	opcode=tvb_get_guint8(tvb, offset);
+	offset = dissect_krb4_auth_msg_type(pinfo, tree, tvb, offset, version);
+
+	switch(opcode>>1){
+	case AUTH_MSG_KDC_REQUEST:
+		offset = dissect_krb4_kdc_request(pinfo, tree, tvb, offset, opcode&0x01, version);
+		break;
+	case AUTH_MSG_KDC_REPLY:
+		offset = dissect_krb4_kdc_reply(pinfo, tree, tvb, offset, opcode&0x01);
+		break;
+	case AUTH_MSG_APPL_REQUEST:
+		offset = dissect_krb4_appl_request(pinfo, tree, tvb, offset, opcode&0x01);
+		break;
+	case AUTH_MSG_APPL_REQUEST_MUTUAL:
+	case AUTH_MSG_ERR_REPLY:
+	case AUTH_MSG_PRIVATE:
+	case AUTH_MSG_SAFE:
+	case AUTH_MSG_APPL_ERR:
+	case AUTH_MSG_DIE:
+		break;
+	}
+	return tvb_length(tvb);
+}
+
+void
+proto_register_krb4(void)
+{
+  static hf_register_info hf[] = {
+    { &hf_krb4_version,
+      { "Version", "krb4.version",
+	FT_UINT8, BASE_DEC, NULL, 0x0,
+      	"Kerberos(v4) version number", HFILL }},
+    { &hf_krb4_auth_msg_type,
+      { "Msg Type", "krb4.auth_msg_type",
+        FT_UINT8, BASE_HEX, NULL, 0x0,
+        "Message Type/Byte Order", HFILL }},
+    { &hf_krb4_m_type,
+      { "M Type", "krb4.m_type",
+        FT_UINT8, BASE_HEX, VALS(m_type_vals), 0xfe,
+        "Message Type", HFILL }},
+    { &hf_krb4_byte_order,
+      { "Byte Order", "krb4.byte_order",
+        FT_UINT8, BASE_HEX, VALS(byte_order_vals), 0x01,
+        "Byte Order", HFILL }},
+    { &hf_krb4_name,
+      { "Name", "krb4.name",
+        FT_STRINGZ, BASE_NONE, NULL, 0x00,
+        "Name", HFILL }},
+    { &hf_krb4_instance,
+      { "Instance", "krb4.instance",
+        FT_STRINGZ, BASE_NONE, NULL, 0x00,
+        "Instance", HFILL }},
+    { &hf_krb4_realm,
+      { "Realm", "krb4.realm",
+        FT_STRINGZ, BASE_NONE, NULL, 0x00,
+        "Realm", HFILL }},
+    { &hf_krb4_time_sec,
+      { "Time Sec", "krb4.time_sec",
+        FT_ABSOLUTE_TIME, BASE_NONE, NULL, 0x00,
+        "Time Sec", HFILL }},
+    { &hf_krb4_exp_date,
+      { "Exp Date", "krb4.exp_date",
+        FT_ABSOLUTE_TIME, BASE_NONE, NULL, 0x00,
+        "Exp Date", HFILL }},
+    { &hf_krb4_req_date,
+      { "Req Date", "krb4.req_date",
+        FT_ABSOLUTE_TIME, BASE_NONE, NULL, 0x00,
+        "Req Date", HFILL }},
+    { &hf_krb4_lifetime,
+      { "Lifetime", "krb4.lifetime",
+        FT_UINT8, BASE_DEC, NULL, 0x00,
+        "Lifetime (in 5 min units)", HFILL }},
+    { &hf_krb4_s_name,
+      { "Service Name", "krb4.s_name",
+        FT_STRINGZ, BASE_NONE, NULL, 0x00,
+        "Service Name", HFILL }},
+    { &hf_krb4_s_instance,
+      { "Service Instance", "krb4.s_instance",
+        FT_STRINGZ, BASE_NONE, NULL, 0x00,
+        "Service Instance", HFILL }},
+    { &hf_krb4_kvno,
+      { "Kvno", "krb4.kvno",
+        FT_UINT8, BASE_DEC, NULL, 0x00,
+        "Key Version No", HFILL }},
+    { &hf_krb4_length,
+      { "Length", "krb4.length",
+        FT_UINT32, BASE_DEC, NULL, 0x00,
+        "Length of encrypted blob", HFILL }},
+    { &hf_krb4_ticket_length,
+      { "Ticket Length", "krb4.ticket.length",
+        FT_UINT8, BASE_DEC, NULL, 0x00,
+        "Length of ticket", HFILL }},
+    { &hf_krb4_request_length,
+      { "Request Length", "krb4.request.length",
+        FT_UINT8, BASE_DEC, NULL, 0x00,
+        "Length of request", HFILL }},
+    { &hf_krb4_ticket_blob,
+      { "Ticket Blob", "krb4.ticket.blob",
+        FT_BYTES, BASE_HEX, NULL, 0x00,
+        "Ticket blob", HFILL }},
+    { &hf_krb4_request_blob,
+      { "Request Blob", "krb4.request.blob",
+        FT_BYTES, BASE_HEX, NULL, 0x00,
+        "Request Blob", HFILL }},
+    { &hf_krb4_encrypted_blob,
+      { "Encrypted Blob", "krb4.encrypted_blob",
+        FT_BYTES, BASE_HEX, NULL, 0x00,
+        "Encrypted blob", HFILL }},
+    { &hf_krb4_unknown_transarc_blob,
+      { "Unknown Transarc Blob", "krb4.unknown_transarc_blob",
+        FT_BYTES, BASE_HEX, NULL, 0x00,
+        "Unknown blob only present in Transarc packets", HFILL }},
+  };
+  static gint *ett[] = {
+    &ett_krb4,
+    &ett_krb4_auth_msg_type,
+  };
+
+  proto_krb4 = proto_register_protocol("Kerberos v4",
+				       "KRB4", "krb4");
+  proto_register_field_array(proto_krb4, hf, array_length(hf));
+  proto_register_subtree_array(ett, array_length(ett));
+}
+
+void
+proto_reg_handoff_krb4(void)
+{
+  dissector_handle_t krb4_handle;
+
+  krb4_handle = new_create_dissector_handle(dissect_krb4, proto_krb4);
+  dissector_add("udp.port", UDP_PORT_KRB4, krb4_handle);
+}
diff -urN ethereal-0.10.6/epan/dissectors/packet-kpasswd.c ethereal-0.10.7/epan/dissectors/packet-kpasswd.c
--- ethereal-0.10.6/epan/dissectors/packet-kpasswd.c	2004-08-12 17:41:58.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-kpasswd.c	2004-10-20 17:34:38.000000000 -0500
@@ -4,7 +4,7 @@
  *
  * See RFC 3244 
  *
- * $Id: packet-kpasswd.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-kpasswd.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -31,7 +31,7 @@
 
 #include <epan/packet.h>
 #include "packet-kerberos.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 static int proto_kpasswd = -1;
 static int hf_kpasswd_message_len = -1;
diff -urN ethereal-0.10.6/epan/dissectors/packet-lapb.c ethereal-0.10.7/epan/dissectors/packet-lapb.c
--- ethereal-0.10.6/epan/dissectors/packet-lapb.c	2004-08-12 17:42:25.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-lapb.c	2004-10-20 17:34:54.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for lapb frame disassembly
  * Olivier Abad <oabad@noos.fr>
  *
- * $Id: packet-lapb.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-lapb.c 12127 2004-09-28 23:48:02Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -31,7 +31,7 @@
 #include <glib.h>
 #include <string.h>
 #include <epan/packet.h>
-#include "xdlc.h"
+#include <epan/xdlc.h>
 
 static int proto_lapb = -1;
 static int hf_lapb_address = -1;
diff -urN ethereal-0.10.6/epan/dissectors/packet-lapd.c ethereal-0.10.7/epan/dissectors/packet-lapd.c
--- ethereal-0.10.6/epan/dissectors/packet-lapd.c	2004-08-12 17:42:27.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-lapd.c	2004-10-20 17:34:59.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for LAPD frame disassembly
  * Gilbert Ramirez <gram@alumni.rice.edu>
  *
- * $Id: packet-lapd.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-lapd.c 12127 2004-09-28 23:48:02Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -31,7 +31,7 @@
 #include <glib.h>
 #include <string.h>
 #include <epan/packet.h>
-#include "xdlc.h"
+#include <epan/xdlc.h>
 
 #include "lapd_sapi.h"
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-laplink.c ethereal-0.10.7/epan/dissectors/packet-laplink.c
--- ethereal-0.10.6/epan/dissectors/packet-laplink.c	2004-08-12 17:41:58.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-laplink.c	2004-10-20 17:34:38.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for laplink dissection
  * Copyright 2003, Brad Hards <bradh@frogmouth.net>
  *
- * $Id: packet-laplink.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-laplink.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -42,7 +42,7 @@
 #include <epan/conversation.h>
 
 #include "packet-tcp.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #define TCP_PORT_LAPLINK 1547
 #define UDP_PORT_LAPLINK 1547
@@ -234,8 +234,9 @@
 
 	laplink_module = prefs_register_protocol(proto_laplink, NULL);
 	prefs_register_bool_preference(laplink_module, "desegment_laplink_over_tcp",
-				       "Desegment all Laplink-over-TCP messages",
-				       "Whether the Laplink dissector should desegment all Laplink-over-TCP messages",
+				       "Reassemble Laplink over TCP messages spanning multiple TCP segments",
+				       "Whether the Laplink dissector should reassemble messages spanning multiple TCP segments."
+				       " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 				       &laplink_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-ldap.c ethereal-0.10.7/epan/dissectors/packet-ldap.c
--- ethereal-0.10.6/epan/dissectors/packet-ldap.c	2004-08-12 17:42:10.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ldap.c	2004-10-20 17:34:49.000000000 -0500
@@ -3,7 +3,7 @@
  *
  * See RFC 1777 (LDAP v2), RFC 2251 (LDAP v3), and RFC 2222 (SASL).
  *
- * $Id: packet-ldap.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-ldap.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -73,10 +73,11 @@
 #include <epan/packet.h>
 
 #include "asn1.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/conversation.h>
 #include "packet-frame.h"
-#include "tap.h"
+#include <epan/tap.h>
+#include "packet-ber.h"
 #include "packet-ldap.h"
 
 static int proto_ldap = -1;
@@ -264,47 +265,47 @@
   {0, NULL},
 };
 
-static value_string result_codes[] = {
-    {0, "Success"},
-    {1, "Operations error"},
-    {2, "Protocol error"},
-    {3, "Time limit exceeded"},
-    {4, "Size limit exceeded"},
-    {5, "Compare false"},
-    {6, "Compare true"},
-    {7, "Authentication method not supported"},
-    {8, "Strong authentication required"},
-    {10, "Referral"},
-    {11, "Administrative limit exceeded"},
-    {12, "Unavailable critical extension"},
-    {13, "Confidentiality required"},
-    {14, "SASL bind in progress"},
-    {16, "No such attribute"},
-    {17, "Undefined attribute type"},
-    {18, "Inappropriate matching"},
-    {19, "Constraint violation"},
-    {20, "Attribute or value exists"},
-    {21, "Invalid attribute syntax"},
-    {32, "No such object"},
-    {33, "Alias problem"},
-    {34, "Invalid DN syntax"},
-    {36, "Alias derefetencing problem"},
-    {48, "Inappropriate authentication"},
-    {49, "Invalid credentials"},
-    {50, "Insufficient access rights"},
-    {51, "Busy"},
-    {52, "Unavailable"},
-    {53, "Unwilling to perform"},
-    {54, "Loop detected"},
-    {64, "Naming violation"},
-    {65, "Objectclass violation"},
-    {66, "Not allowed on non-leaf"},
-    {67, "Not allowed on RDN"},
-    {68, "Entry already exists"},
-    {69, "Objectclass modification prohibited"},
-    {71, "Affects multiple DSAs"},
-    {80, "Other"},
-    {0,  NULL},
+static const value_string LDAPResultCode_vals[] = {
+  {   0, "success" },
+  {   1, "operationsError" },
+  {   2, "protocolError" },
+  {   3, "timeLimitExceeded" },
+  {   4, "sizeLimitExceeded" },
+  {   5, "compareFalse" },
+  {   6, "compareTrue" },
+  {   7, "authMethodNotSupported" },
+  {   8, "strongAuthRequired" },
+  {  10, "referral" },
+  {  11, "adminLimitExceeded" },
+  {  12, "unavailableCriticalExtension" },
+  {  13, "confidentialityRequired" },
+  {  14, "saslBindInProgress" },
+  {  16, "noSuchAttribute" },
+  {  17, "undefinedAttributeType" },
+  {  18, "inappropriateMatching" },
+  {  19, "constraintViolation" },
+  {  20, "attributeOrValueExists" },
+  {  21, "invalidAttributeSyntax" },
+  {  32, "noSuchObject" },
+  {  33, "aliasProblem" },
+  {  34, "invalidDNSyntax" },
+  {  36, "aliasDereferencingProblem" },
+  {  48, "inappropriateAuthentication" },
+  {  49, "invalidCredentials" },
+  {  50, "insufficientAccessRights" },
+  {  51, "busy" },
+  {  52, "unavailable" },
+  {  53, "unwillingToPerform" },
+  {  54, "loopDetect" },
+  {  64, "namingViolation" },
+  {  65, "objectClassViolation" },
+  {  66, "notAllowedOnNonLeaf" },
+  {  67, "notAllowedOnRDN" },
+  {  68, "entryAlreadyExists" },
+  {  69, "objectClassModsProhibited" },
+  {  71, "affectsMultipleDSAs" },
+  {  80, "other" },
+  { 0, NULL }
 };
 
 static int read_length(ASN1_SCK *a, proto_tree *tree, int hf_id, guint *len)
@@ -934,7 +935,7 @@
   if (resultCode != 0) {
 	  if (check_col(pinfo->cinfo, COL_INFO))
 		  col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", 
-				  val_to_str(resultCode, result_codes,
+				  val_to_str(resultCode, LDAPResultCode_vals,
 					     "Unknown (%u)"));
   }
 
@@ -2712,7 +2713,7 @@
 
     { &hf_ldap_message_result,
       { "Result Code",		"ldap.result.code",
-	FT_UINT8, BASE_HEX, result_codes, 0x0,
+	FT_UINT8, BASE_HEX, VALS(LDAPResultCode_vals), 0x0,
 	"LDAP Result Code", HFILL }},
     { &hf_ldap_message_result_matcheddn,
       { "Matched DN",		"ldap.result.matcheddn",
@@ -2977,8 +2978,9 @@
 
   ldap_module = prefs_register_protocol(proto_ldap, NULL);
   prefs_register_bool_preference(ldap_module, "desegment_ldap_messages",
-    "Desegment all LDAP messages spanning multiple TCP segments",
-    "Whether the LDAP dissector should desegment all messages spanning multiple TCP segments",
+    "Reassemble LDAP messages spanning multiple TCP segments",
+    "Whether the LDAP dissector should reassemble messages spanning multiple TCP segments."
+    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
     &ldap_desegment);
 
   proto_cldap = proto_register_protocol(
diff -urN ethereal-0.10.6/epan/dissectors/packet-ldp.c ethereal-0.10.7/epan/dissectors/packet-ldp.c
--- ethereal-0.10.6/epan/dissectors/packet-ldp.c	2004-08-12 17:42:25.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ldp.c	2004-10-20 17:34:55.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-ldp.c
  * Routines for LDP (RFC 3036) packet disassembly
  *
- * $Id: packet-ldp.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-ldp.c 12241 2004-10-08 17:01:43Z guy $
  *
  * Copyright (c) November 2000 by Richard Sharpe <rsharpe@ns.aus.com>
  *
@@ -39,11 +39,12 @@
 #include <string.h>
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
-#include "prefs.h"
-#include "afn.h"
+#include <epan/prefs.h>
+#include <epan/afn.h>
 
 #include "packet-frame.h"
 #include "packet-diffserv-mpls-common.h"
+#include "packet-ldp.h"
 
 #define TCP_PORT_LDP 646
 #define UDP_PORT_LDP 646
@@ -165,6 +166,7 @@
 static int hf_ldp_tlv_fec_vc_intparam_cepopt_e3 = -1;
 static int hf_ldp_tlv_fec_vc_intparam_vlanid = -1;
 static int hf_ldp_tlv_fec_vc_intparam_dlcilen = -1;
+static int hf_ldp_tlv_fec_vc_intparam_fcslen = -1;
 static int hf_ldp_tlv_fec_vc_intparam_tdmopt_r = -1;
 static int hf_ldp_tlv_fec_vc_intparam_tdmopt_d = -1;
 static int hf_ldp_tlv_fec_vc_intparam_tdmopt_f = -1;
@@ -175,6 +177,7 @@
 static int hf_ldp_tlv_fec_vc_intparam_tdmopt_ssrc = -1;
 static int hf_ldp_tlv_fec_vc_intparam_vccv_cctype_cw = -1;
 static int hf_ldp_tlv_fec_vc_intparam_vccv_cctype_mplsra = -1;
+static int hf_ldp_tlv_fec_vc_intparam_vccv_cctype_ttl1 = -1;
 static int hf_ldp_tlv_fec_vc_intparam_vccv_cvtype_icmpping = -1;
 static int hf_ldp_tlv_fec_vc_intparam_vccv_cvtype_lspping = -1;
 static int hf_ldp_tlv_fec_vc_intparam_vccv_cvtype_bfd = -1;
@@ -980,8 +983,9 @@
                               proto_item_append_text(ti,": Fragmentation");      
                               break;
                             case FEC_VC_INTERFACEPARAM_FCSRETENT:
-                              /* draft-ietf-pwe3-fcs-retention-00.txt */
-                              proto_item_append_text(ti,": FCS retention");      
+                              /* draft-ietf-pwe3-fcs-retention-02.txt */
+                              proto_item_append_text(ti,": FCS retention, FCS Length %u Bytes", tvb_get_ntohs(tvb,offset+2));      
+                              proto_tree_add_item(vcintparam_tree,hf_ldp_tlv_fec_vc_intparam_fcslen, tvb, offset+2, 2, FALSE);
                               break;
                             case FEC_VC_INTERFACEPARAM_TDMOPTION:
                               /* draft-vainshtein-pwe3-tdm-control-protocol-extensions */
@@ -1000,19 +1004,20 @@
                               }
                               break;
                             case FEC_VC_INTERFACEPARAM_VCCV:
-                              /* draft-ietf-pwe3-vccv-02.txt */
+                              /* draft-ietf-pwe3-vccv-03.txt */
                               proto_item_append_text(ti,": VCCV");
                               ti = proto_tree_add_text(vcintparam_tree, tvb, offset + 2, 1, "CC Type");
                               vccvtype_tree = proto_item_add_subtree(ti, ett_ldp_fec_vc_interfaceparam_vccvtype);
                               if(vccvtype_tree == NULL) return;
                               proto_tree_add_item(vccvtype_tree, hf_ldp_tlv_fec_vc_intparam_vccv_cctype_cw, tvb, offset+2, 1, FALSE);
                               proto_tree_add_item(vccvtype_tree, hf_ldp_tlv_fec_vc_intparam_vccv_cctype_mplsra, tvb, offset+2, 1, FALSE);
-                              ti = proto_tree_add_text(vcintparam_tree, tvb, offset + 2, 2, "CV Type");
+                              proto_tree_add_item(vccvtype_tree, hf_ldp_tlv_fec_vc_intparam_vccv_cctype_ttl1, tvb, offset+2, 1, FALSE);
+                              ti = proto_tree_add_text(vcintparam_tree, tvb, offset + 3, 1, "CV Type");
                               vccvtype_tree = proto_item_add_subtree(ti, ett_ldp_fec_vc_interfaceparam_vccvtype);
                               if(vccvtype_tree == NULL) return;
-                              proto_tree_add_item(vccvtype_tree, hf_ldp_tlv_fec_vc_intparam_vccv_cvtype_icmpping, tvb, offset+2, 2, FALSE);
-                              proto_tree_add_item(vccvtype_tree, hf_ldp_tlv_fec_vc_intparam_vccv_cvtype_lspping, tvb, offset+2, 2, FALSE);
-                              proto_tree_add_item(vccvtype_tree, hf_ldp_tlv_fec_vc_intparam_vccv_cvtype_bfd, tvb, offset+2, 2, FALSE);
+                              proto_tree_add_item(vccvtype_tree, hf_ldp_tlv_fec_vc_intparam_vccv_cvtype_icmpping, tvb, offset+3, 1, FALSE);
+                              proto_tree_add_item(vccvtype_tree, hf_ldp_tlv_fec_vc_intparam_vccv_cvtype_lspping, tvb, offset+3, 1, FALSE);
+                              proto_tree_add_item(vccvtype_tree, hf_ldp_tlv_fec_vc_intparam_vccv_cvtype_bfd, tvb, offset+3, 1, FALSE);
                               break;
 			    default: /* unknown */
 			      proto_item_append_text(ti," unknown");
@@ -2899,6 +2904,9 @@
     {&hf_ldp_tlv_fec_vc_intparam_dlcilen,
      {"DLCI Length", "ldp.msg.tlv.fec.vc.intparam.dlcilen", FT_UINT16, BASE_DEC, NULL, 0x0, "VC FEC Interface Parameter Frame-Relay DLCI Length", HFILL }},
 
+    {&hf_ldp_tlv_fec_vc_intparam_fcslen,
+     {"FCS Length", "ldp.msg.tlv.fec.vc.intparam.fcslen", FT_UINT16, BASE_DEC, NULL, 0x0, "VC FEC Interface Paramater FCS Length", HFILL }},
+
     {&hf_ldp_tlv_fec_vc_intparam_tdmopt_r,
      {"R Bit", "ldp.msg.tlv.fec.vc.intparam.tdmopt_r", FT_BOOLEAN, 16, TFS(&fec_vc_tdmopt_r), 0x8000, "VC FEC Interface Param TDM Options RTP Header", HFILL }},
 
@@ -2924,19 +2932,22 @@
      {"SSRC", "ldp.msg.tlv.fec.vc.intparam.tdmopt_ssrc", FT_UINT32, BASE_HEX, NULL, 0x00, "VC FEC Interface Param TDM Options SSRC", HFILL }},
 
     {&hf_ldp_tlv_fec_vc_intparam_vccv_cctype_cw,
-     {"PWE3 Control Word", "ldp.msg.tlv.fec.vc.intparam.vccv.cctype_cw", FT_BOOLEAN, 8, NULL, 0x10, "VC FEC Interface Param VCCV CC Type PWE3 CW", HFILL }},
+     {"PWE3 Control Word", "ldp.msg.tlv.fec.vc.intparam.vccv.cctype_cw", FT_BOOLEAN, 8, NULL, 0x01, "VC FEC Interface Param VCCV CC Type PWE3 CW", HFILL }},
 
     {&hf_ldp_tlv_fec_vc_intparam_vccv_cctype_mplsra,
-     {"MPLS Router Alert", "ldp.msg.tlv.fec.vc.intparam.vccv.cctype_mplsra", FT_BOOLEAN, 8, NULL, 0x20, "VC FEC Interface Param VCCV CC Type MPLS Router Alert", HFILL }},
+     {"MPLS Router Alert", "ldp.msg.tlv.fec.vc.intparam.vccv.cctype_mplsra", FT_BOOLEAN, 8, NULL, 0x02, "VC FEC Interface Param VCCV CC Type MPLS Router Alert", HFILL }},
+
+    {&hf_ldp_tlv_fec_vc_intparam_vccv_cctype_ttl1,
+     {"MPLS Inner Label TTL = 1", "ldp.msg.tlv.fec.vc.intparam.vccv.cctype_ttl1", FT_BOOLEAN, 8, NULL, 0x04, "VC FEC Interface Param VCCV CC Type Inner Label TTL 1", HFILL }},
 
     {&hf_ldp_tlv_fec_vc_intparam_vccv_cvtype_icmpping,
-     {"ICMP Ping", "ldp.msg.tlv.fec.vc.intparam.vccv.cvtype_icmpping", FT_BOOLEAN, 16, NULL, 0x0001, "VC FEC Interface Param VCCV CV Type ICMP Ping", HFILL }},
+     {"ICMP Ping", "ldp.msg.tlv.fec.vc.intparam.vccv.cvtype_icmpping", FT_BOOLEAN, 8, NULL, 0x01, "VC FEC Interface Param VCCV CV Type ICMP Ping", HFILL }},
 
     {&hf_ldp_tlv_fec_vc_intparam_vccv_cvtype_lspping,
-     {"LSP Ping", "ldp.msg.tlv.fec.vc.intparam.vccv.cvtype_lspping", FT_BOOLEAN, 16, NULL, 0x0002, "VC FEC Interface Param VCCV CV Type LSP Ping", HFILL }},
+     {"LSP Ping", "ldp.msg.tlv.fec.vc.intparam.vccv.cvtype_lspping", FT_BOOLEAN, 8, NULL, 0x02, "VC FEC Interface Param VCCV CV Type LSP Ping", HFILL }},
 
     {&hf_ldp_tlv_fec_vc_intparam_vccv_cvtype_bfd,
-     {"BFD", "ldp.msg.tlv.fec.vc.intparam.vccv.cvtype_bfd", FT_BOOLEAN, 16, NULL, 0x0004, "VC FEC Interface Param VCCV CV Type BFD", HFILL }},
+     {"BFD", "ldp.msg.tlv.fec.vc.intparam.vccv.cvtype_bfd", FT_BOOLEAN, 8, NULL, 0x04, "VC FEC Interface Param VCCV CV Type BFD", HFILL }},
 
 
     { &hf_ldp_tlv_lspid_act_flg,
@@ -3102,8 +3113,9 @@
 				 10, &global_ldp_udp_port);
 
   prefs_register_bool_preference(ldp_module, "desegment_ldp_messages",
-    "Desegment all LDP messages\nspanning multiple TCP segments",
-    "Whether the LDP dissector should desegment all messages spanning multiple TCP segments",
+    "Reassemble LDP messages spanning multiple TCP segments",
+    "Whether the LDP dissector should reassemble messages spanning multiple TCP segments."
+    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
     &ldp_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-ldp.h ethereal-0.10.7/epan/dissectors/packet-ldp.h
--- ethereal-0.10.6/epan/dissectors/packet-ldp.h	2004-08-12 17:42:25.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ldp.h	2004-10-20 17:34:55.000000000 -0500
@@ -2,7 +2,7 @@
  * Declarations of exported routines from LDP dissector
  * Copyright 2004, Carlos Pignataro <cpignata@cisco.com>
  *
- * $Id: packet-ldp.h 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-ldp.h 12241 2004-10-08 17:01:43Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -29,6 +29,6 @@
 /*
  * Used by MPLS Echo dissector as well.
  */
-extern const enum_val_t fec_vc_types_vals[];
+extern const value_string fec_vc_types_vals[];
 
 #endif
diff -urN ethereal-0.10.6/epan/dissectors/packet-llc.c ethereal-0.10.7/epan/dissectors/packet-llc.c
--- ethereal-0.10.6/epan/dissectors/packet-llc.c	2004-08-12 17:42:21.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-llc.c	2004-10-20 17:34:52.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for IEEE 802.2 LLC layer
  * Gilbert Ramirez <gram@alumni.rice.edu>
  *
- * $Id: packet-llc.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-llc.c 12256 2004-10-11 07:15:08Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -30,7 +30,7 @@
 #include <glib.h>
 #include <epan/packet.h>
 #include "oui.h"
-#include "xdlc.h"
+#include <epan/xdlc.h>
 #include "etypes.h"
 #include "llcsaps.h"
 #include "bridged_pids.h"
@@ -178,6 +178,7 @@
 	{ OUI_CABLE_BPDU,  "DOCSIS Spanning Tree" }, /* DOCSIS spanning tree BPDU */
 	{ OUI_APPLE_ATALK, "Apple (AppleTalk)" },
 	{ OUI_NORTEL,      "Nortel Networks SONMP" },
+	{ OUI_HP,          "Hewlett-Packard" },
 	{ 0,               NULL }
 };
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-lmp.c ethereal-0.10.7/epan/dissectors/packet-lmp.c
--- ethereal-0.10.6/epan/dissectors/packet-lmp.c	2004-08-12 17:42:12.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-lmp.c	2004-10-20 17:34:49.000000000 -0500
@@ -3,7 +3,7 @@
  *
  * (c) Copyright Ashok Narayanan <ashokn@cisco.com>
  *
- * $Id: packet-lmp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-lmp.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -51,9 +51,9 @@
 #include <epan/tvbuff.h>
 #include <epan/packet.h>
 #include <prefs.h>
-#include "in_cksum.h"
+#include <epan/in_cksum.h>
 #include "etypes.h"
-#include "ipproto.h"
+#include <epan/ipproto.h>
 
 #include "packet-ip.h"
 #include "packet-rsvp.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-loop.c ethereal-0.10.7/epan/dissectors/packet-loop.c
--- ethereal-0.10.6/epan/dissectors/packet-loop.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-loop.c	2004-10-20 17:34:41.000000000 -0500
@@ -0,0 +1,161 @@
+/* packet-loop.c
+ * Routines for Ethernet loopback/Configuration Test Protocol dissection
+ *
+ * See
+ *
+ *	http://stuff.mit.edu/people/jhawk/ctp.html
+ *
+ * $Id: packet-loop.c 12101 2004-09-25 10:36:08Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <epan/packet.h>
+#include "etypes.h"
+
+static int proto_loop = -1;
+static int hf_loop_skipcount = -1;
+static int hf_loop_function = -1;
+static int hf_loop_receipt_number = -1;
+static int hf_loop_forwarding_address = -1;
+
+static gint ett_loop = -1;
+
+static dissector_handle_t data_handle;
+
+#define FUNC_REPLY		1
+#define FUNC_FORWARD_DATA	2
+
+static const value_string function_vals[] = {
+  { FUNC_REPLY, "Reply" },
+  { FUNC_FORWARD_DATA, "Forward Data" },
+  { 0, NULL }
+};
+
+static void
+dissect_loop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+  proto_tree  *loop_tree = NULL;
+  proto_item  *ti;
+  guint16     function;
+  int         offset = 0;
+  gboolean    set_info = FALSE;
+  tvbuff_t    *next_tvb;
+
+  if (check_col(pinfo->cinfo, COL_PROTOCOL))
+    col_set_str(pinfo->cinfo, COL_PROTOCOL, "LOOP");
+  if (check_col(pinfo->cinfo, COL_INFO))
+    col_clear(pinfo->cinfo, COL_INFO);
+
+  if (tree) {
+    ti = proto_tree_add_item(tree, proto_loop, tvb, 0, -1, FALSE);
+    loop_tree = proto_item_add_subtree(ti, ett_loop);
+  }
+
+  for (;;) {
+    if (tree)
+      proto_tree_add_item(loop_tree, hf_loop_skipcount, tvb, offset, 2, TRUE);
+    offset += 2;
+    function = tvb_get_letohs(tvb, offset);
+    if (!set_info) {
+      if (check_col(pinfo->cinfo, COL_INFO)) {
+        col_add_str(pinfo->cinfo, COL_INFO,
+                    val_to_str(function, function_vals, "Unknown function (%u)"));
+      }
+      set_info = TRUE;
+    }
+    if (tree)
+      proto_tree_add_uint(loop_tree, hf_loop_function, tvb, offset, 2, function);
+    offset += 2;
+    switch (function) {
+
+    case FUNC_REPLY:
+      if (tree)
+        proto_tree_add_item(loop_tree, hf_loop_receipt_number, tvb, offset, 2,
+                            TRUE);
+      offset += 2;
+      next_tvb = tvb_new_subset(tvb, offset, -1, -1);
+      call_dissector(data_handle, next_tvb, pinfo, tree);
+      return;
+
+    case FUNC_FORWARD_DATA:
+      if (tree)
+        proto_tree_add_item(loop_tree, hf_loop_forwarding_address, tvb, offset,
+                            6, FALSE);
+      offset += 6;
+      break;
+
+    default:
+      next_tvb = tvb_new_subset(tvb, offset, -1, -1);
+      call_dissector(data_handle, next_tvb, pinfo, tree);
+      return;
+    }
+  }
+}
+
+void
+proto_register_loop(void)
+{
+  static hf_register_info hf[] = {
+    { &hf_loop_skipcount,
+      { "skipCount",		"loop.skipcount",
+	FT_UINT16,	BASE_DEC,	NULL,	0x0,
+      	"", HFILL }},
+
+    { &hf_loop_function,
+      { "Function",		"loop.function",
+	FT_UINT16,	BASE_DEC,	VALS(function_vals),	0x0,
+      	"", HFILL }},
+
+    { &hf_loop_receipt_number,
+      { "Receipt number",	"loop.receipt_number",
+	FT_UINT16,	BASE_DEC,	NULL,	0x0,
+      	"", HFILL }},
+
+    { &hf_loop_forwarding_address,
+      { "Forwarding address",	"loop.forwarding_address",
+	FT_ETHER,	BASE_NONE,	NULL,	0x0,
+      	"", HFILL }},
+  };
+  static gint *ett[] = {
+    &ett_loop,
+  };
+
+  proto_loop = proto_register_protocol("Configuration Test Protocol (loopback)",
+				      "LOOP", "loop");
+  proto_register_field_array(proto_loop, hf, array_length(hf));
+  proto_register_subtree_array(ett, array_length(ett));
+}
+
+void
+proto_reg_handoff_loop(void)
+{
+  dissector_handle_t loop_handle;
+
+  loop_handle = create_dissector_handle(dissect_loop, proto_loop);
+
+  dissector_add("ethertype", ETHERTYPE_LOOP, loop_handle);
+
+  data_handle = find_dissector("data");
+}
diff -urN ethereal-0.10.6/epan/dissectors/packet-lwapp.c ethereal-0.10.7/epan/dissectors/packet-lwapp.c
--- ethereal-0.10.6/epan/dissectors/packet-lwapp.c	2004-08-12 17:42:27.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-lwapp.c	2004-10-20 17:34:59.000000000 -0500
@@ -1,9 +1,9 @@
 /* packet-lwapp.c
  *
  * Routines for LWAPP encapsulated packet disassembly
- * draft-calhoun-seamoby-lwapp-N (the current draft is 3)
+ * draft-ohara-capwap-lwapp-N (the current draft is 0)
  *
- * $Id: packet-lwapp.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-lwapp.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Copyright (c) 2003 by David Frascone <dave@frascone.com>
  *
@@ -40,7 +40,7 @@
 #include "xmlstub.h"
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 
 
 #ifdef NEED_SNPRINTF_H
diff -urN ethereal-0.10.6/epan/dissectors/packet-m2pa.c ethereal-0.10.7/epan/dissectors/packet-m2pa.c
--- ethereal-0.10.6/epan/dissectors/packet-m2pa.c	2004-08-12 17:42:29.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-m2pa.c	2004-10-20 17:35:00.000000000 -0500
@@ -2,12 +2,13 @@
  * Routines for MTP2 Peer Adaptation Layer dissection
  * It is hopefully (needs testing) compliant to
  * http://www.ietf.org/internet-drafts/draft-ietf-sigtran-m2pa-02.txt
- * http://www.ietf.org/internet-drafts/draft-ietf-sigtran-m2pa-11.txt
+ * http://www.ietf.org/internet-drafts/draft-ietf-sigtran-m2pa-08.txt
+ * http://www.ietf.org/internet-drafts/draft-ietf-sigtran-m2pa-12.txt
  *
  * Copyright 2001, 2002, Jeff Morriss <jeff.morriss[AT]ulticom.com>,
  * updated by Michael Tuexen <tuexen [AT] fh-muenster.de>
  *
- * $Id: packet-m2pa.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-m2pa.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,7 +37,7 @@
 #endif
 
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "sctpppids.h"
 
 #define NETWORK_BYTE_ORDER          FALSE
@@ -54,6 +55,7 @@
 static int hf_spare        = -1;
 static int hf_v2_type      = -1;
 static int hf_v8_type      = -1;
+static int hf_v12_type     = -1;
 static int hf_class        = -1;
 static int hf_length       = -1;
 static int hf_unused       = -1;
@@ -61,12 +63,15 @@
 static int hf_fsn          = -1;
 static int hf_v2_status    = -1;
 static int hf_v8_status    = -1;
+static int hf_v12_status   = -1;
 static int hf_v2_li_spare  = -1;
 static int hf_v8_li_spare  = -1;
 static int hf_v2_li_prio   = -1;
 static int hf_v8_li_prio   = -1;
 static int hf_filler       = -1;
 static int hf_unknown_data = -1;
+static int hf_pri_prio     = -1;
+static int hf_pri_spare    = -1;
 
 static gint ett_m2pa       = -1;
 static gint ett_m2pa_li    = -1;
@@ -75,17 +80,19 @@
 static dissector_handle_t mtp3_handle;
 
 typedef enum {
-  M2PA_V2 = 1,
-  M2PA_V11 = 2
+  M2PA_V02 = 1,
+  M2PA_V08 = 2,
+  M2PA_V12 = 3
 } Version_Type;
 
-static Version_Type m2pa_version = M2PA_V11;
+static Version_Type m2pa_version = M2PA_V12;
 
 #define VERSION_LENGTH         1
 #define SPARE_LENGTH           1
 #define CLASS_LENGTH           1
 #define V2_TYPE_LENGTH         2
 #define V8_TYPE_LENGTH         1
+#define V12_TYPE_LENGTH        V8_TYPE_LENGTH
 #define LENGTH_LENGTH          4
 #define UNUSED_LENGTH          1
 #define BSN_LENGTH             3
@@ -98,6 +105,7 @@
                                 CLASS_LENGTH + V8_TYPE_LENGTH + LENGTH_LENGTH + \
                                 UNUSED_LENGTH + BSN_LENGTH + UNUSED_LENGTH + \
                                 FSN_LENGTH)
+#define V12_HEADER_LENGTH       V8_HEADER_LENGTH
 
 #define HEADER_OFFSET          0
 #define VERSION_OFFSET         HEADER_OFFSET
@@ -105,7 +113,9 @@
 #define CLASS_OFFSET           (SPARE_OFFSET + SPARE_LENGTH)
 #define V2_TYPE_OFFSET         (SPARE_OFFSET + SPARE_LENGTH)
 #define V8_TYPE_OFFSET         (CLASS_OFFSET + CLASS_LENGTH)
+#define V12_TYPE_OFFSET        V8_TYPE_OFFSET
 #define V8_LENGTH_OFFSET       (V8_TYPE_OFFSET + V8_TYPE_LENGTH)
+#define V12_LENGTH_OFFSET      V8_LENGTH_OFFSET
 #define V2_LENGTH_OFFSET       (V2_TYPE_OFFSET + V2_TYPE_LENGTH)
 #define FIRST_UNUSED_OFFSET    (V8_LENGTH_OFFSET + LENGTH_LENGTH)
 #define BSN_OFFSET             (FIRST_UNUSED_OFFSET + UNUSED_LENGTH)
@@ -136,6 +146,14 @@
   { V8_LINK_STATUS_TYPE, "Link Status" },
   { 0,                   NULL } };
 
+#define V12_USER_DATA_TYPE   V8_USER_DATA_TYPE
+#define V12_LINK_STATUS_TYPE V8_LINK_STATUS_TYPE
+
+static const value_string v12_message_type_values[] = {
+  { V12_USER_DATA_TYPE,   "User Data" },
+  { V12_LINK_STATUS_TYPE, "Link Status" },
+  { 0,                   NULL } };
+
 static void
 dissect_v2_header(tvbuff_t *header_tvb, packet_info *pinfo, proto_tree *m2pa_tree)
 {
@@ -177,6 +195,29 @@
   }
 }
 
+static void
+dissect_v12_header(tvbuff_t *header_tvb, packet_info *pinfo, proto_tree *m2pa_tree)
+{
+  guint8 message_type;
+  
+  message_type  = tvb_get_guint8(header_tvb, V8_TYPE_OFFSET);
+
+  if (check_col(pinfo->cinfo, COL_INFO))
+    col_add_fstr(pinfo->cinfo, COL_INFO, "%s ", val_to_str(message_type, v8_message_type_values, "Unknown"));
+
+  if (m2pa_tree) {
+    proto_tree_add_item(m2pa_tree, hf_version,  header_tvb, VERSION_OFFSET,       VERSION_LENGTH,  NETWORK_BYTE_ORDER);
+    proto_tree_add_item(m2pa_tree, hf_spare,    header_tvb, SPARE_OFFSET,         SPARE_LENGTH,    NETWORK_BYTE_ORDER);
+    proto_tree_add_item(m2pa_tree, hf_class,    header_tvb, CLASS_OFFSET,         CLASS_LENGTH,    NETWORK_BYTE_ORDER);
+    proto_tree_add_item(m2pa_tree, hf_v12_type, header_tvb, V12_TYPE_OFFSET,      V12_TYPE_LENGTH, NETWORK_BYTE_ORDER);
+    proto_tree_add_item(m2pa_tree, hf_length,   header_tvb, V12_LENGTH_OFFSET,    LENGTH_LENGTH,   NETWORK_BYTE_ORDER);
+    proto_tree_add_item(m2pa_tree, hf_unused,   header_tvb, FIRST_UNUSED_OFFSET,  UNUSED_LENGTH,   NETWORK_BYTE_ORDER);
+    proto_tree_add_item(m2pa_tree, hf_bsn,      header_tvb, BSN_OFFSET,           BSN_LENGTH,      NETWORK_BYTE_ORDER);
+    proto_tree_add_item(m2pa_tree, hf_unused,   header_tvb, SECOND_UNUSED_OFFSET, UNUSED_LENGTH,   NETWORK_BYTE_ORDER);
+    proto_tree_add_item(m2pa_tree, hf_fsn,      header_tvb, FSN_OFFSET,           FSN_LENGTH,      NETWORK_BYTE_ORDER);
+  }
+}
+
 #define LI_OFFSET           0
 #define LI_LENGTH           1
 #define MTP3_OFFSET         (LI_OFFSET + LI_LENGTH)
@@ -208,8 +249,8 @@
   call_dissector(mtp3_handle, payload_tvb, pinfo, tree);
 }
 
-#define V8_LI_SPARE_MASK         0x3f
-#define V8_LI_PRIORITY_MASK      0xc0
+#define V8_LI_SPARE_MASK        0x3f
+#define V8_LI_PRIORITY_MASK     0xc0
 
 static void
 dissect_v8_user_data_message(tvbuff_t *message_data_tvb, packet_info *pinfo, proto_item *m2pa_item, proto_tree *m2pa_tree, proto_tree *tree)
@@ -234,6 +275,35 @@
   }
 }
 
+#define PRIORITY_MASK     0xc0
+#define SPARE_MASK        0x3f
+
+#define PRI_OFFSET           0
+#define PRI_LENGTH           1
+
+static void
+dissect_v12_user_data_message(tvbuff_t *message_data_tvb, packet_info *pinfo, proto_item *m2pa_item, proto_tree *m2pa_tree, proto_tree *tree)
+{
+  proto_item *m2pa_li_item;
+  proto_tree *m2pa_li_tree;
+  tvbuff_t *payload_tvb;
+
+  if (tvb_length(message_data_tvb) > 0) {
+    if (m2pa_tree) {
+      m2pa_li_item = proto_tree_add_text(m2pa_tree, message_data_tvb, PRI_OFFSET, PRI_LENGTH, "Priority");
+      m2pa_li_tree = proto_item_add_subtree(m2pa_li_item, ett_m2pa_li);
+      proto_tree_add_item(m2pa_li_tree, hf_pri_prio,  message_data_tvb, PRI_OFFSET, PRI_LENGTH, NETWORK_BYTE_ORDER);
+      proto_tree_add_item(m2pa_li_tree, hf_pri_spare, message_data_tvb, PRI_OFFSET, PRI_LENGTH, NETWORK_BYTE_ORDER);
+
+        /* Re-adjust length of M2PA item since it will be dissected as MTP3 */
+      proto_item_set_len(m2pa_item, V12_HEADER_LENGTH + PRI_LENGTH);
+    }
+
+    payload_tvb = tvb_new_subset(message_data_tvb, MTP3_OFFSET, -1, -1);
+    call_dissector(mtp3_handle, payload_tvb, pinfo, tree);
+  }
+}
+
 static const value_string v2_link_status_values[] = {
   { 1, "In Service" },
   { 2, "Processor Outage" },
@@ -282,6 +352,33 @@
       proto_tree_add_item(m2pa_tree, hf_filler, message_data_tvb, FILLER_OFFSET, filler_length, NETWORK_BYTE_ORDER);
 }
 
+static const value_string v12_link_status_values[] = {
+  { 1, "Alignment" },
+  { 2, "Proving Normal" },
+  { 3, "Proving Emergency" },
+  { 4, "Ready" },
+  { 5, "Processor Outage" },
+  { 6, "Processor Outage Ended" },
+  { 7, "Busy" },
+  { 8, "Busy Ended" },
+  { 9, "Out of Service" },
+  { 0, NULL } };
+
+static void
+dissect_v12_link_status_message(tvbuff_t *message_data_tvb, packet_info *pinfo, proto_tree *m2pa_tree)
+{
+  guint16 filler_length;
+  
+  if (check_col(pinfo->cinfo, COL_INFO))
+    col_append_fstr(pinfo->cinfo, COL_INFO, "(%s) ", val_to_str(tvb_get_ntohl(message_data_tvb, STATUS_OFFSET), v12_link_status_values, "Unknown"));
+
+  filler_length = tvb_length(message_data_tvb) - STATUS_LENGTH;
+  
+  proto_tree_add_item(m2pa_tree, hf_v12_status, message_data_tvb, STATUS_OFFSET, STATUS_LENGTH, NETWORK_BYTE_ORDER);
+  if (filler_length > 0)
+      proto_tree_add_item(m2pa_tree, hf_filler, message_data_tvb, FILLER_OFFSET, filler_length, NETWORK_BYTE_ORDER);
+}
+
 static void
 dissect_unknown_message(tvbuff_t *message_data_tvb, proto_tree *m2pa_tree)
 {
@@ -343,6 +440,32 @@
   }
 }
 
+#define V12_MESSAGE_DATA_OFFSET (HEADER_OFFSET + V12_HEADER_LENGTH)
+
+static void
+dissect_v12_message_data(tvbuff_t *message_tvb, packet_info *pinfo, proto_item *m2pa_item, proto_tree *m2pa_tree, proto_tree *tree)
+{
+  guint32 message_data_length;
+  guint8 type;
+  tvbuff_t *message_data_tvb;
+
+  message_data_length = tvb_get_ntohl(message_tvb, V12_LENGTH_OFFSET) - V8_HEADER_LENGTH;
+  message_data_tvb    = tvb_new_subset(message_tvb, V12_MESSAGE_DATA_OFFSET, message_data_length, message_data_length);
+  type                = tvb_get_guint8(message_tvb, V12_TYPE_OFFSET);
+
+
+  switch(type) {
+  case V12_USER_DATA_TYPE:
+    dissect_v12_user_data_message(message_data_tvb, pinfo, m2pa_item, m2pa_tree, tree);
+    break;
+  case V12_LINK_STATUS_TYPE:
+    dissect_v12_link_status_message(message_data_tvb, pinfo, m2pa_tree);
+    break;
+  default:
+    dissect_unknown_message(message_data_tvb, m2pa_tree);
+  }
+}
+
 static void
 dissect_v2_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_item *m2pa_item, proto_tree *m2pa_tree, proto_tree *tree)
 {
@@ -358,6 +481,13 @@
 }
 
 static void
+dissect_v12_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_item *m2pa_item, proto_tree *m2pa_tree, proto_tree *tree)
+{
+  dissect_v12_header(message_tvb, pinfo, m2pa_tree);
+  dissect_v12_message_data(message_tvb, pinfo, m2pa_item, m2pa_tree, tree);
+}
+
+static void
 dissect_m2pa(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
   proto_item *m2pa_item;
@@ -365,11 +495,14 @@
 
   if (check_col(pinfo->cinfo, COL_PROTOCOL))
     switch(m2pa_version) {
-    case M2PA_V2:
+    case M2PA_V02:
       col_set_str(pinfo->cinfo, COL_PROTOCOL, "M2PA (ID 02)");
       break;
-    case M2PA_V11:
-      col_set_str(pinfo->cinfo, COL_PROTOCOL, "M2PA (ID 11)");
+    case M2PA_V08:
+      col_set_str(pinfo->cinfo, COL_PROTOCOL, "M2PA (ID 08)");
+      break;
+    case M2PA_V12:
+      col_set_str(pinfo->cinfo, COL_PROTOCOL, "M2PA (ID 12)");
       break;
     };      
 
@@ -382,12 +515,15 @@
   }
 
   switch(m2pa_version) {
-    case M2PA_V2:
+    case M2PA_V02:
       dissect_v2_message(tvb, pinfo, m2pa_item, m2pa_tree, tree);
       break;
-    case M2PA_V11:
+    case M2PA_V08:
       dissect_v8_message(tvb, pinfo, m2pa_item, m2pa_tree, tree);
       break;
+    case M2PA_V12:
+      dissect_v12_message(tvb, pinfo, m2pa_item, m2pa_tree, tree);
+      break;
   };      
 }
 
@@ -395,23 +531,27 @@
 proto_register_m2pa(void)
 {
   static hf_register_info hf[] = 
-  { { &hf_version,      { "Version",        "m2pa.version",      FT_UINT8,  BASE_DEC,  VALS(protocol_version_values), 0x0,                 "", HFILL} },
-    { &hf_spare,        { "Spare",          "m2pa.spare",        FT_UINT8,  BASE_HEX,  NULL,                          0x0,                 "", HFILL} },
-    { &hf_v2_type,      { "Message Type",   "m2pa.type",         FT_UINT16, BASE_HEX,  VALS(v2_message_type_values),  0x0,                 "", HFILL} },
-    { &hf_v8_type,      { "Message Type",   "m2pa.type",         FT_UINT8,  BASE_DEC,  VALS(v8_message_type_values),  0x0,                 "", HFILL} },
-    { &hf_class,        { "Message Class",  "m2pa.class",        FT_UINT8,  BASE_DEC,  VALS(message_class_values),    0x0,                 "", HFILL} },
-    { &hf_length,       { "Message length", "m2pa.length",       FT_UINT32, BASE_DEC,  NULL,                          0x0,                 "", HFILL} },
-    { &hf_unused,       { "Unused",         "m2pa.unused",       FT_UINT8,  BASE_DEC,  NULL,                          0x0,                 "", HFILL} },
-    { &hf_bsn,          { "BSN",            "m2pa.bsn",          FT_UINT24, BASE_DEC,  NULL,                          0x0,                 "", HFILL} },
-    { &hf_fsn,          { "FSN",            "m2pa.fsn",          FT_UINT24, BASE_DEC,  NULL,                          0x0,                 "", HFILL} },
-    { &hf_v2_li_spare,  { "Spare",          "m2pa.li_spare",     FT_UINT8,  BASE_DEC,  NULL,                          V2_LI_SPARE_MASK,    "", HFILL} },
-    { &hf_v8_li_spare,  { "Spare",          "m2pa.li_spare",     FT_UINT8,  BASE_HEX,  NULL,                          V8_LI_SPARE_MASK,    "", HFILL} },
-    { &hf_v2_li_prio,   { "Priority",       "m2pa.li_priority",  FT_UINT8,  BASE_DEC,  NULL,                          V2_LI_PRIORITY_MASK, "", HFILL} },
-    { &hf_v8_li_prio,   { "Priority",       "m2pa.li_priority",  FT_UINT8,  BASE_HEX,  NULL,                          V8_LI_PRIORITY_MASK, "", HFILL} },
-    { &hf_v2_status,    { "Link Status",    "m2pa.status",       FT_UINT32, BASE_DEC,  VALS(v2_link_status_values),   0x0,                 "", HFILL} },
-    { &hf_v8_status,    { "Link Status",    "m2pa.status",       FT_UINT32, BASE_DEC,  VALS(v8_link_status_values),   0x0,                 "", HFILL} },
-    { &hf_filler,       { "Filler",         "m2pa.filler",       FT_BYTES,  BASE_NONE, NULL,                          0x0,                 "", HFILL} },
-    { &hf_unknown_data, { "Unknown Data",   "m2pa.unknown_data", FT_BYTES,  BASE_NONE, NULL,                          0x0,                 "", HFILL} }
+  { { &hf_version,      { "Version",        "m2pa.version",        FT_UINT8,  BASE_DEC,  VALS(protocol_version_values), 0x0,                 "", HFILL} },
+    { &hf_spare,        { "Spare",          "m2pa.spare",          FT_UINT8,  BASE_HEX,  NULL,                          0x0,                 "", HFILL} },
+    { &hf_v2_type,      { "Message Type",   "m2pa.type",           FT_UINT16, BASE_HEX,  VALS(v2_message_type_values),  0x0,                 "", HFILL} },
+    { &hf_v8_type,      { "Message Type",   "m2pa.type",           FT_UINT8,  BASE_DEC,  VALS(v8_message_type_values),  0x0,                 "", HFILL} },
+    { &hf_v12_type,     { "Message Type",   "m2pa.type",           FT_UINT8,  BASE_DEC,  VALS(v12_message_type_values), 0x0,                 "", HFILL} },
+    { &hf_class,        { "Message Class",  "m2pa.class",          FT_UINT8,  BASE_DEC,  VALS(message_class_values),    0x0,                 "", HFILL} },
+    { &hf_length,       { "Message length", "m2pa.length",         FT_UINT32, BASE_DEC,  NULL,                          0x0,                 "", HFILL} },
+    { &hf_unused,       { "Unused",         "m2pa.unused",         FT_UINT8,  BASE_DEC,  NULL,                          0x0,                 "", HFILL} },
+    { &hf_bsn,          { "BSN",            "m2pa.bsn",            FT_UINT24, BASE_DEC,  NULL,                          0x0,                 "", HFILL} },
+    { &hf_fsn,          { "FSN",            "m2pa.fsn",            FT_UINT24, BASE_DEC,  NULL,                          0x0,                 "", HFILL} },
+    { &hf_v2_li_spare,  { "Spare",          "m2pa.li_spare",       FT_UINT8,  BASE_DEC,  NULL,                          V2_LI_SPARE_MASK,    "", HFILL} },
+    { &hf_v8_li_spare,  { "Spare",          "m2pa.li_spare",       FT_UINT8,  BASE_HEX,  NULL,                          V8_LI_SPARE_MASK,    "", HFILL} },
+    { &hf_pri_spare,    { "Spare",          "m2pa.priority_spare", FT_UINT8,  BASE_HEX,  NULL,                          SPARE_MASK,          "", HFILL} },
+    { &hf_v2_li_prio,   { "Priority",       "m2pa.li_priority",    FT_UINT8,  BASE_DEC,  NULL,                          V2_LI_PRIORITY_MASK, "", HFILL} },
+    { &hf_v8_li_prio,   { "Priority",       "m2pa.li_priority",    FT_UINT8,  BASE_HEX,  NULL,                          V8_LI_PRIORITY_MASK, "", HFILL} },
+    { &hf_pri_prio,     { "Priority",       "m2pa.priority",       FT_UINT8,  BASE_HEX,  NULL,                          PRIORITY_MASK,       "", HFILL} },
+    { &hf_v2_status,    { "Link Status",    "m2pa.status",         FT_UINT32, BASE_DEC,  VALS(v2_link_status_values),   0x0,                 "", HFILL} },
+    { &hf_v8_status,    { "Link Status",    "m2pa.status",         FT_UINT32, BASE_DEC,  VALS(v8_link_status_values),   0x0,                 "", HFILL} },
+    { &hf_v12_status,   { "Link Status",    "m2pa.status",         FT_UINT32, BASE_DEC,  VALS(v12_link_status_values),  0x0,                 "", HFILL} },
+    { &hf_filler,       { "Filler",         "m2pa.filler",         FT_BYTES,  BASE_NONE, NULL,                          0x0,                 "", HFILL} },
+    { &hf_unknown_data, { "Unknown Data",   "m2pa.unknown_data",   FT_BYTES,  BASE_NONE, NULL,                          0x0,                 "", HFILL} }
   };
 
   static gint *ett[] = {
@@ -420,8 +560,9 @@
   };
 
   static enum_val_t m2pa_version_options[] = {
-    { "draft-2", "Internet Draft version 2", M2PA_V2 },
-    { "draft-11", "Internet Draft version 11", M2PA_V11 },
+    { "draft-2",  "Internet Draft version 2",  M2PA_V02 },
+    { "draft-8",  "Internet Draft version 8",  M2PA_V08 },
+    { "draft-12", "Internet Draft version 12", M2PA_V12 },
     { NULL, NULL, 0 }
   };
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-m2ua.c ethereal-0.10.7/epan/dissectors/packet-m2ua.c
--- ethereal-0.10.6/epan/dissectors/packet-m2ua.c	2004-08-12 17:42:04.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-m2ua.c	2004-10-20 17:34:43.000000000 -0500
@@ -6,7 +6,7 @@
  *
  * Copyright 2002, Michael Tuexen <tuexen [AT] fh-muenster.de>
  *
- * $Id: packet-m2ua.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-m2ua.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #endif
 
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "sctpppids.h"
 
 #define SCTP_PORT_M2UA                  2904
diff -urN ethereal-0.10.6/epan/dissectors/packet-m3ua.c ethereal-0.10.7/epan/dissectors/packet-m3ua.c
--- ethereal-0.10.6/epan/dissectors/packet-m3ua.c	2004-08-12 17:42:09.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-m3ua.c	2004-10-20 17:34:46.000000000 -0500
@@ -8,7 +8,7 @@
  *
  * Copyright 2000, 2001, 2002, 2003, 2004 Michael Tuexen <tuexen [AT] fh-muenster.de>
  *
- * $Id: packet-m3ua.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-m3ua.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -43,7 +43,7 @@
 #include <glib.h>
 
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "sctpppids.h"
 #include "packet-mtp3.h"
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-maccontrol.c ethereal-0.10.7/epan/dissectors/packet-maccontrol.c
--- ethereal-0.10.6/epan/dissectors/packet-maccontrol.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-maccontrol.c	2004-10-20 17:34:46.000000000 -0500
@@ -0,0 +1,105 @@
+/* packet-maccontrol.c
+ * Routines for MAC Control ethernet header disassembly
+ *
+ * $Id: packet-maccontrol.c 11735 2004-08-13 09:35:25Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <epan/packet.h>
+#include "packet-ieee8023.h"
+#include "packet-llc.h"
+#include "etypes.h"
+
+static int proto_macctrl = -1;
+
+static gint ett_macctrl = -1;
+static int hf_macctrl_pause = -1;
+static int hf_macctrl_quanta = -1;
+
+
+static void
+dissect_macctrl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+  proto_tree *ti;
+  proto_tree *volatile macctrl_tree;
+	guint16 pause;
+	guint16 pause_quanta;
+
+	pause = tvb_get_ntohs(tvb, 0);
+	pause_quanta = tvb_get_ntohs(tvb, 2);
+
+  if (check_col(pinfo->cinfo, COL_PROTOCOL))
+    col_set_str(pinfo->cinfo, COL_PROTOCOL, "CTRL");
+  if (check_col(pinfo->cinfo, COL_INFO))
+    col_clear(pinfo->cinfo, COL_INFO);
+
+  if (pause==1){
+    if (check_col(pinfo->cinfo, COL_INFO)) {
+      col_add_fstr(pinfo->cinfo, COL_INFO, "MAC PAUSE: Quanta %d", pause_quanta);
+    }
+  } 
+
+  macctrl_tree = NULL;
+
+  if (tree) {
+		ti = proto_tree_add_item(tree, proto_macctrl, tvb, 0, 4, FALSE);
+		macctrl_tree = proto_item_add_subtree(ti, ett_macctrl);
+		
+		proto_tree_add_uint(macctrl_tree, hf_macctrl_pause, tvb, 0, 2, pause);
+    proto_tree_add_uint(macctrl_tree, hf_macctrl_quanta, tvb, 2, 2, pause_quanta);
+	}
+
+}
+
+
+void
+proto_register_macctrl(void)
+{
+	static hf_register_info hf[] = {
+        { &hf_macctrl_pause, 
+        {  "Pause", "macctrl.pause", FT_UINT16, BASE_HEX,
+           NULL, 0x0, "MAC control Pause", HFILL}},
+
+        { &hf_macctrl_quanta,
+        { "Quanta", "macctrl.quanta", FT_UINT16, BASE_DEC,
+          NULL, 0x0, "MAC control quanta", HFILL }}
+	};
+
+  static gint *ett[] = {
+        &ett_macctrl,
+  };
+  proto_macctrl = proto_register_protocol("MAC Control", "MACC", "macc");
+	proto_register_field_array(proto_macctrl, hf, array_length(hf));
+  proto_register_subtree_array(ett, array_length(ett));
+}
+
+void
+proto_reg_handoff_macctrl(void)
+{
+  dissector_handle_t macctrl_handle;
+
+  macctrl_handle = create_dissector_handle(dissect_macctrl, proto_macctrl);
+  dissector_add("ethertype", ETHERTYPE_MAC_CONTROL, macctrl_handle);
+}
diff -urN ethereal-0.10.6/epan/dissectors/packet-mdshdr.c ethereal-0.10.7/epan/dissectors/packet-mdshdr.c
--- ethereal-0.10.6/epan/dissectors/packet-mdshdr.c	2004-08-12 17:42:24.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-mdshdr.c	2004-10-20 17:34:53.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for dissection of Cisco MDS Switch Internal Header
  * Copyright 2001, Dinesh G Dutt <ddutt@andiamo.com>
  *
- * $Id: packet-mdshdr.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-mdshdr.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -54,7 +54,7 @@
 #include <epan/value_string.h>
 #include <etypes.h>
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #define MDSHDR_VERSION_OFFSET 		0
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-mip6.c ethereal-0.10.7/epan/dissectors/packet-mip6.c
--- ethereal-0.10.6/epan/dissectors/packet-mip6.c	2004-08-12 17:41:58.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-mip6.c	2004-10-20 17:34:38.000000000 -0500
@@ -1,6 +1,6 @@
 /* packet-mip6.c
  *
- * $Id: packet-mip6.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-mip6.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Routines for Mobile IPv6 dissection (draft-ietf-mobileip-ipv6-20.txt)
  * Copyright 2003 Oy L M Ericsson Ab <teemu.rinta-aho@ericsson.fi>
@@ -30,7 +30,7 @@
 
 #include <epan/packet.h>
 
-#include "ipproto.h"
+#include <epan/ipproto.h>
 #include "ip_opts.h"
 #include "packet-mip6.h"
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-mpls-echo.c ethereal-0.10.7/epan/dissectors/packet-mpls-echo.c
--- ethereal-0.10.6/epan/dissectors/packet-mpls-echo.c	2004-08-12 17:42:04.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-mpls-echo.c	2004-10-20 17:34:43.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for Multiprotocol Label Switching Echo dissection
  * Copyright 2004, Carlos Pignataro <cpignata@cisco.com>
  *
- * $Id: packet-mpls-echo.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-mpls-echo.c 12241 2004-10-08 17:01:43Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -32,7 +32,8 @@
 #include <string.h>
 #include <glib.h>
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
+#include <epan/sminmpec.h>
 #include "packet-ntp.h"
 #include "packet-ldp.h"
 
@@ -59,6 +60,18 @@
 static int hf_mpls_echo_tlv_fec_value = -1;
 static int hf_mpls_echo_tlv_fec_ldp_ipv4 = -1;
 static int hf_mpls_echo_tlv_fec_ldp_ipv4_mask = -1;
+static int hf_mpls_echo_tlv_fec_ldp_ipv6 = -1;
+static int hf_mpls_echo_tlv_fec_ldp_ipv6_mask = -1;
+static int hf_mpls_echo_tlv_fec_rsvp_ipv4_ipv4_endpoint = -1;
+static int hf_mpls_echo_tlv_fec_rsvp_ipv6_ipv6_endpoint = -1;
+static int hf_mpls_echo_tlv_fec_rsvp_ip_mbz1 = -1;
+static int hf_mpls_echo_tlv_fec_rsvp_ip_tunnel_id = -1;
+static int hf_mpls_echo_tlv_fec_rsvp_ipv4_ext_tunnel_id = -1;
+static int hf_mpls_echo_tlv_fec_rsvp_ipv4_ipv4_sender = -1;
+static int hf_mpls_echo_tlv_fec_rsvp_ipv6_ext_tunnel_id = -1;
+static int hf_mpls_echo_tlv_fec_rsvp_ipv6_ipv6_sender = -1;
+static int hf_mpls_echo_tlv_fec_rsvp_ip_mbz2 = -1;
+static int hf_mpls_echo_tlv_fec_rsvp_ip_lsp_id = -1;
 static int hf_mpls_echo_tlv_fec_l2cid_sender = -1;
 static int hf_mpls_echo_tlv_fec_l2cid_remote = -1;
 static int hf_mpls_echo_tlv_fec_l2cid_vcid = -1;
@@ -66,6 +79,7 @@
 static int hf_mpls_echo_tlv_fec_l2cid_mbz = -1;
 static int hf_mpls_echo_tlv_padaction = -1;
 static int hf_mpls_echo_tlv_padding = -1;
+static int hf_mpls_echo_tlv_vendor = -1;
 
 static gint ett_mpls_echo = -1;
 static gint ett_mpls_echo_tlv = -1;
@@ -111,6 +125,8 @@
 #define TLV_PAD                    0x0003
 #define TLV_ERROR_CODE             0x0004
 #define TLV_VENDOR_CODE            0x0005
+#define TLV_VENDOR_PRIVATE_START   0xFC00
+#define TLV_VENDOR_PRIVATE_END     0xFFFF
 
 /* MPLS Echo TLV Type names */
 static const value_string mpls_echo_tlv_type_names[] = {
@@ -119,6 +135,7 @@
   { TLV_PAD,                       "Pad" },
   { TLV_ERROR_CODE,                "Error Code" },
   { TLV_VENDOR_CODE,               "Vendor Enterprise Code" },
+  { TLV_VENDOR_PRIVATE_START,      "Vendor Private" },
   { 0, NULL}
 };
 
@@ -130,7 +147,10 @@
 #define TLV_FEC_STACK_VPN_IPv4     6
 #define TLV_FEC_STACK_VPN_IPv6     7
 #define TLV_FEC_STACK_L2_VPN       8
-#define TLV_FEC_STACK_L2_CID       9
+#define TLV_FEC_STACK_L2_CID_OLD   9
+#define TLV_FEC_STACK_L2_CID_NEW  10
+#define TLV_FEC_VENDOR_PRIVATE_START   0xFC00
+#define TLV_FEC_VENDOR_PRIVATE_END     0xFFFF
 
 /* FEC sub-TLV Type names */
 static const value_string mpls_echo_tlv_fec_names[] = {
@@ -142,7 +162,9 @@
   { TLV_FEC_STACK_VPN_IPv4,    "VPN IPv4 prefix"},
   { TLV_FEC_STACK_VPN_IPv6,    "VPN IPv6 prefix"},
   { TLV_FEC_STACK_L2_VPN,      "L2 VPN endpoint"},
-  { TLV_FEC_STACK_L2_CID,      "L2 cirtuit ID"},
+  { TLV_FEC_STACK_L2_CID_OLD,  "L2 cirtuit ID (deprecated)"},
+  { TLV_FEC_STACK_L2_CID_NEW,  "L2 cirtuit ID (current)"},
+  { TLV_FEC_VENDOR_PRIVATE_START, "Vendor Private"},
   { 0, NULL}
 };
 
@@ -165,6 +187,10 @@
         if (tree){
           while (rem >= 4){ /* Type, Length */
             type = tvb_get_ntohs(tvb, offset);
+	    /* Check for Vendor Private sub-TLVs */
+	    if(type >= TLV_FEC_VENDOR_PRIVATE_START) /* && <= TLV_FEC_VENDOR_PRIVATE_END always true */
+		type = TLV_FEC_VENDOR_PRIVATE_START;
+
             length = tvb_get_ntohs(tvb, offset + 2);
             ti = proto_tree_add_text(tree, tvb, offset, length + 4, "FEC Element %u: %s",
                      index, val_to_str(type, mpls_echo_tlv_fec_names, 
@@ -185,14 +211,80 @@
                     tvb, offset + 4, 4, FALSE);
                 proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_ldp_ipv4_mask, 
                     tvb, offset + 8, 1, FALSE);
-                if (length == 9)
-                    proto_tree_add_text(tlv_fec_tree, tvb, offset + 6, 3, "Padding");
+                if (length == 8)
+                    proto_tree_add_text(tlv_fec_tree, tvb, offset + 9, 3, "Padding");
                 break;
-            case TLV_FEC_STACK_L2_CID:
-                if (length != 16){
-                    if(tree)
-                        proto_tree_add_text(tree, tvb, offset, rem,
-                            "Error processing sub-TLV: length is %d, should be 16", length);
+	    case TLV_FEC_STACK_LDP_IPv6:
+                proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_ldp_ipv6,
+                    tvb, offset + 4, 16, FALSE);
+                proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_ldp_ipv6_mask,
+                    tvb, offset + 20, 1, FALSE);
+                if (length == 20)
+                    proto_tree_add_text(tlv_fec_tree, tvb, offset + 21, 3, "Padding");
+                break;
+	    case TLV_FEC_STACK_RSVP_IPv4:
+		if (length != 20){
+		    proto_tree_add_text(tlv_fec_tree, tvb, offset, rem,
+		        "Error processing sub-TLV: length is %d, should be 20", length);
+		    return;
+		}
+		proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_rsvp_ipv4_ipv4_endpoint,
+		    tvb, offset + 4, 4, FALSE);
+		proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_rsvp_ip_mbz1,
+		    tvb, offset + 8, 2, FALSE);
+		proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_rsvp_ip_tunnel_id,
+		    tvb, offset + 10, 2, FALSE);
+		proto_tree_add_text(tlv_fec_tree, tvb, offset + 12, 4,
+		    "Extended Tunnel ID: 0x%08X (%s)", tvb_get_ntohl(tvb, offset + 12),
+		    ip_to_str(tvb_get_ptr(tvb, offset + 12, 4)));
+		proto_tree_add_item_hidden(tlv_fec_tree, hf_mpls_echo_tlv_fec_rsvp_ipv4_ext_tunnel_id,
+		    tvb, offset + 12, 4, FALSE);
+		proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_rsvp_ipv4_ipv4_sender,
+		    tvb, offset + 16, 4, FALSE);
+		proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_rsvp_ip_mbz2,
+		    tvb, offset + 20, 2, FALSE);
+		proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_rsvp_ip_lsp_id,
+		    tvb, offset + 22, 2, FALSE);
+		break;
+            case TLV_FEC_STACK_RSVP_IPv6:
+                if (length != 56){
+                    proto_tree_add_text(tlv_fec_tree, tvb, offset, rem,
+                        "Error processing sub-TLV: length is %d, should be 56", length);
+                    return;
+                }
+                proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_rsvp_ipv6_ipv6_endpoint,
+                    tvb, offset + 4, 16, FALSE);
+                proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_rsvp_ip_mbz1,
+                    tvb, offset + 20, 2, FALSE);
+                proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_rsvp_ip_tunnel_id,
+                    tvb, offset + 22, 2, FALSE);
+                proto_tree_add_text(tlv_fec_tree, tvb, offset + 24, 16,
+                    "Extended Tunnel ID: 0x%s (%s)",
+		    tvb_bytes_to_str(tvb, offset + 24, 16),
+                    ip6_to_str((const struct e_in6_addr *)tvb_get_ptr(tvb, offset + 24, 16)));
+                proto_tree_add_item_hidden(tlv_fec_tree, hf_mpls_echo_tlv_fec_rsvp_ipv6_ext_tunnel_id,
+                    tvb, offset + 24, 16, FALSE);
+                proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_rsvp_ipv6_ipv6_sender,
+                    tvb, offset + 40, 16, FALSE);
+                proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_rsvp_ip_mbz2,
+                    tvb, offset + 56, 2, FALSE);
+                proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_rsvp_ip_lsp_id,
+                    tvb, offset + 58, 2, FALSE);
+                break;
+            case TLV_FEC_STACK_L2_CID_OLD:
+                proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_l2cid_remote,
+                    tvb, offset + 4, 4, FALSE);
+                proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_l2cid_vcid,
+                    tvb, offset + 8, 4, FALSE);
+                proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_l2cid_encap,
+                    tvb, offset + 12, 2, FALSE);
+                proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_l2cid_mbz,
+                    tvb, offset + 14, 2, FALSE);
+                break;
+	    case TLV_FEC_STACK_L2_CID_NEW:
+                if (length < 14){
+                    proto_tree_add_text(tlv_fec_tree, tvb, offset, rem,
+                        "Error processing sub-TLV: length is %d, should be 14", length);
                     return;
                 }
                 proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_l2cid_sender,
@@ -206,9 +298,18 @@
                 proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_fec_l2cid_mbz,
                     tvb, offset + 18, 2, FALSE);
                 break;
-            case TLV_FEC_STACK_LDP_IPv6:
-            case TLV_FEC_STACK_RSVP_IPv4:
-            case TLV_FEC_STACK_RSVP_IPv6:
+	    case TLV_FEC_VENDOR_PRIVATE_START:
+		if (length < 4) { /* SMI Enterprise code */
+			proto_tree_add_text(tlv_fec_tree, tvb, offset + 4, length,
+				"Error processing Vendor Private sub-TLV: length is %d, should be >= 4",
+				length);
+		} else {
+			proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_vendor, tvb,
+				offset + 4, 4, FALSE);
+			proto_tree_add_item(tlv_fec_tree, hf_mpls_echo_tlv_value, tvb,
+				offset + 8, length - 4, FALSE);
+		}
+		break;
             case TLV_FEC_STACK_RES:
             case TLV_FEC_STACK_VPN_IPv4:
             case TLV_FEC_STACK_VPN_IPv6:
@@ -251,6 +352,10 @@
         length = MIN(length, rem);
 
         if (tree) {
+		/* Check for Vendor Private TLVs */
+		if(type >= TLV_VENDOR_PRIVATE_START) /* && <= TLV_VENDOR_PRIVATE_END always true */
+			type = TLV_VENDOR_PRIVATE_START;
+
                 ti = proto_tree_add_text(tree, tvb, offset, length + 4, "%s",
                         val_to_str(type, mpls_echo_tlv_type_names, "Unknown TLV type (0x%04X)"));
                 mpls_echo_tlv_tree = proto_item_add_subtree(ti, ett_mpls_echo_tlv);
@@ -263,6 +368,9 @@
                 proto_tree_add_item(mpls_echo_tlv_tree, hf_mpls_echo_tlv_len, tvb, offset + 2, 2, FALSE);
 
                 /* MPLS Echo TLV Value */
+                if (length == 0)
+                        return 4; /* Empty TLV, return Type and Length consumed. */
+
                 switch (type) {
                 case TLV_TARGET_FEC_STACK:
                         dissect_mpls_echo_tlv_fec(tvb, offset + 4, mpls_echo_tlv_tree, length);
@@ -273,9 +381,24 @@
                         proto_tree_add_item(mpls_echo_tlv_tree, hf_mpls_echo_tlv_padding, tvb,
                             offset + 5, length - 1, FALSE);
                         break;
+		case TLV_VENDOR_CODE:
+			proto_tree_add_item(mpls_echo_tlv_tree, hf_mpls_echo_tlv_vendor, tvb,
+			offset + 4, 4, FALSE);
+			break;
+		case TLV_VENDOR_PRIVATE_START:
+			if (length < 4) { /* SMI Enterprise code */
+				proto_tree_add_text(mpls_echo_tlv_tree, tvb, offset + 4, length,
+					"Error processing Vendor Private TLV: length is %d, should be >= 4",
+					length);
+			} else {
+				proto_tree_add_item(mpls_echo_tlv_tree, hf_mpls_echo_tlv_vendor, tvb,
+					offset + 4, 4, FALSE);
+				proto_tree_add_item(mpls_echo_tlv_tree, hf_mpls_echo_tlv_value, tvb,
+					offset + 8, length - 4, FALSE);
+			}
+			break;
                 case TLV_DOWNSTREAM_MAPPING:
                 case TLV_ERROR_CODE:
-                case TLV_VENDOR_CODE:
                 default:
                         proto_tree_add_item(mpls_echo_tlv_tree, hf_mpls_echo_tlv_value, tvb,
                             offset + 4, length, FALSE);
@@ -455,6 +578,54 @@
                         { "Prefix Length", "mpls_echo.tlv.fec.ldp_ipv4_mask",
                         FT_UINT8, BASE_DEC, NULL, 0x0, "MPLS ECHO TLV FEC Stack IPv4 Prefix Length", HFILL}
                 },
+		{ &hf_mpls_echo_tlv_fec_ldp_ipv6,
+			{ "IPv6 Prefix", "mpls_echo.tlv.fec.ldp_ipv6",
+			FT_IPv6, BASE_NONE, NULL, 0x0, "MPLS ECHO TLV FEC Stack IPv6", HFILL}
+		},
+		{ &hf_mpls_echo_tlv_fec_ldp_ipv6_mask,
+			{ "Prefix Length", "mpls_echo.tlv.fec.ldp_ipv6_mask",
+			FT_UINT8, BASE_DEC, NULL, 0x0, "MPLS ECHO TLV FEC Stack IPv6 Prefix Length", HFILL}
+		},
+		{ &hf_mpls_echo_tlv_fec_rsvp_ipv4_ipv4_endpoint,
+			{ "IPv4 Tunnel endpoint address", "mpls_echo.tlv.fec.rsvp_ipv4_ep",
+			FT_IPv4, BASE_NONE, NULL, 0x0, "MPLS ECHO TLV FEC Stack RSVP IPv4 Tunnel Endpoint Address", HFILL}
+		},
+                { &hf_mpls_echo_tlv_fec_rsvp_ipv6_ipv6_endpoint,
+                        { "IPv6 Tunnel endpoint address", "mpls_echo.tlv.fec.rsvp_ipv6_ep",
+                        FT_IPv6, BASE_NONE, NULL, 0x0, "MPLS ECHO TLV FEC Stack RSVP IPv6 Tunnel Endpoint Address", HFILL}
+                },
+		{ &hf_mpls_echo_tlv_fec_rsvp_ip_mbz1,
+			{ "Must Be Zero", "mpls_echo.tlv.fec.rsvp_ip_mbz1",
+			FT_UINT16, BASE_DEC, NULL, 0x0, "MPLS ECHO TLV FEC Stack RSVP MBZ", HFILL}
+		},
+		{ &hf_mpls_echo_tlv_fec_rsvp_ip_tunnel_id,
+			{ "Tunnel ID", "mpls_echo.tlv.fec.rsvp_ip_tun_id",
+			FT_UINT16, BASE_DEC, NULL, 0x0, "MPLS ECHO TLV FEC Stack RSVP Tunnel ID", HFILL}
+		},
+		{ &hf_mpls_echo_tlv_fec_rsvp_ipv4_ext_tunnel_id,
+			{ "Extended Tunnel ID", "mpls_echo.tlv.fec.rsvp_ipv4_ext_tun_id",
+			FT_UINT32, BASE_HEX, NULL, 0x0, "MPLS ECHO TLV FEC Stack RSVP IPv4 Extended Tunnel ID", HFILL}
+		},
+		{ &hf_mpls_echo_tlv_fec_rsvp_ipv4_ipv4_sender,
+			{ "IPv4 Tunnel sender address", "mpls_echo.tlv.fec.rsvp_ipv4_sender",
+			FT_IPv4, BASE_NONE, NULL, 0x0, "MPLS ECHO TLV FEC Stack RSVP IPv4 Sender", HFILL}
+		},
+                { &hf_mpls_echo_tlv_fec_rsvp_ipv6_ext_tunnel_id,
+                        { "Extended Tunnel ID", "mpls_echo.tlv.fec.rsvp_ipv6_ext_tun_id",
+                        FT_BYTES, BASE_HEX, NULL, 0x0, "MPLS ECHO TLV FEC Stack RSVP IPv6 Extended Tunnel ID", HFILL}
+                },
+                { &hf_mpls_echo_tlv_fec_rsvp_ipv6_ipv6_sender,
+                        { "IPv6 Tunnel sender address", "mpls_echo.tlv.fec.rsvp_ipv6_sender",
+                        FT_IPv6, BASE_NONE, NULL, 0x0, "MPLS ECHO TLV FEC Stack RSVP IPv4 Sender", HFILL}
+                },
+		{ &hf_mpls_echo_tlv_fec_rsvp_ip_mbz2,
+			{ "Must Be Zero", "mpls_echo.tlv.fec.rsvp_ip_mbz2",
+			FT_UINT16, BASE_DEC, NULL, 0x0, "MPLS ECHO TLV FEC Stack RSVP MBZ", HFILL}
+		},
+		{ &hf_mpls_echo_tlv_fec_rsvp_ip_lsp_id,
+			{ "LSP ID", "mpls_echo.tlv.fec.rsvp_ip_lsp_id",
+			FT_UINT16, BASE_DEC, NULL, 0x0, "MPLS ECHO TLV FEC Stack RSVP LSP ID", HFILL}
+		},
                 { &hf_mpls_echo_tlv_fec_l2cid_sender,
                         { "Sender's PE Address", "mpls_echo.tlv.fec.l2cid_sender",
                         FT_IPv4, BASE_NONE, NULL, 0x0, "MPLS ECHO TLV FEC Stack L2CID Sender", HFILL}
@@ -482,7 +653,11 @@
                 { &hf_mpls_echo_tlv_padding,
                         { "Padding", "mpls_echo.tlv.pad_padding",
                         FT_BYTES, BASE_NONE, NULL, 0x0, "MPLS ECHO Pad TLV Padding", HFILL}
-                }
+                },
+		{ &hf_mpls_echo_tlv_vendor,
+			{ "Vendor Id", "mpls_echo.tlv.vendor_id",
+			FT_UINT32, BASE_DEC, VALS(sminmpec_values), 0x0, "MPLS ECHO Vendor Id", HFILL}
+		}
         };
 
         static gint *ett[] = {
diff -urN ethereal-0.10.6/epan/dissectors/packet-mpls.c ethereal-0.10.7/epan/dissectors/packet-mpls.c
--- ethereal-0.10.6/epan/dissectors/packet-mpls.c	2004-08-12 17:42:06.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-mpls.c	2004-10-20 17:34:45.000000000 -0500
@@ -4,7 +4,7 @@
  *
  * (c) Copyright Ashok Narayanan <ashokn@cisco.com>
  *
- * $Id: packet-mpls.c 11622 2004-08-07 03:36:20Z guy $
+ * $Id: packet-mpls.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -42,7 +42,7 @@
 #include <epan/packet.h>
 #include "ppptypes.h"
 #include "etypes.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-ppp.h"
 
 static gint proto_mpls = -1;
@@ -214,21 +214,30 @@
 	    ti = proto_tree_add_item(tree, proto_mpls, tvb, offset, 4, FALSE);
 	    mpls_tree = proto_item_add_subtree(ti, ett_mpls);
 
-	    if (label <= MAX_RESERVED)
+	    proto_item_append_text(ti, ", Label: %u", label);
+	    if (label <= MAX_RESERVED){
 		proto_tree_add_uint_format(mpls_tree, mpls_filter[MPLSF_LABEL], tvb,
-				    offset, 3, label, "Label: %u (%s)",
+				    offset, 3, label, "MPLS Label: %u (%s)",
 				    label, val_to_str(label, special_labels,
 						      "Reserved - Unknown"));
-	    else
-		proto_tree_add_uint(mpls_tree, mpls_filter[MPLSF_LABEL], tvb,
-				    offset, 3, label);
+		proto_item_append_text(ti, " (%s)", val_to_str(label, special_labels,
+					"Reserved - Unknown"));
+	    } else {
+		proto_tree_add_uint_format(mpls_tree, mpls_filter[MPLSF_LABEL], tvb,
+				    offset, 3, label, "MPLS Label: %u", label);
+	    }
 
 	    proto_tree_add_uint(mpls_tree,mpls_filter[MPLSF_EXP], tvb,
 				offset+2,1, exp);
+	    proto_item_append_text(ti, ", Exp: %u", exp);
+
 	    proto_tree_add_uint(mpls_tree,mpls_filter[MPLSF_BOTTOM_OF_STACK], tvb,
 				offset+2,1, bos);
+	    proto_item_append_text(ti, ", S: %u", bos);
+
 	    proto_tree_add_uint(mpls_tree,mpls_filter[MPLSF_TTL], tvb,
 				offset+3,1, ttl);
+	    proto_item_append_text(ti, ", TTL: %u", ttl);
 	}
 	offset += 4;
 	if (bos) break;
diff -urN ethereal-0.10.6/epan/dissectors/packet-mq.c ethereal-0.10.7/epan/dissectors/packet-mq.c
--- ethereal-0.10.6/epan/dissectors/packet-mq.c	2004-08-12 17:42:28.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-mq.c	2004-10-20 17:34:59.000000000 -0500
@@ -3,7 +3,7 @@
  *
  * metatech <metatech@flashmail.com>
  *
- * $Id: packet-mq.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-mq.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -72,7 +72,7 @@
 #include <epan/packet.h>
 #include <epan/conversation.h>
 #include "reassemble.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-tcp.h"
 #include "packet-mq.h"
 
@@ -3256,12 +3256,13 @@
 
   mq_module = prefs_register_protocol(proto_mq, NULL);
   prefs_register_bool_preference(mq_module, "desegment",
-    "Desegment all MQ messages spanning multiple TCP segments",
-    "Whether the MQ dissector should desegment all messages spanning multiple TCP segments",
+    "Reassemble MQ messages spanning multiple TCP segments",
+    "Whether the MQ dissector should reassemble messages spanning multiple TCP segments."
+    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
     &mq_desegment);
   prefs_register_bool_preference(mq_module, "reassembly",
     "Reassemble segmented MQ messages",
-    "Whether the MQ dissector should reassemble all MQ messages spanning multiple TSH segments",
+    "Whether the MQ dissector should reassemble MQ messages spanning multiple TSH segments",
     &mq_reassembly);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-mtp3.c ethereal-0.10.7/epan/dissectors/packet-mtp3.c
--- ethereal-0.10.6/epan/dissectors/packet-mtp3.c	2004-08-12 17:42:01.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-mtp3.c	2004-10-20 17:34:41.000000000 -0500
@@ -9,7 +9,7 @@
  * Copyright 2001, Michael Tuexen <tuexen [AT] fh-muenster.de>
  * Updated for ANSI and Chinese ITU support by Jeff Morriss <jeff.morriss[AT]ulticom.com>
  *
- * $Id: packet-mtp3.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-mtp3.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -44,8 +44,8 @@
 #endif
 
 #include <epan/packet.h>
-#include "tap.h"
-#include "prefs.h"
+#include <epan/tap.h>
+#include <epan/prefs.h>
 
 /* Initialize the protocol and registered fields */
 static int proto_mtp3  = -1;
@@ -689,6 +689,7 @@
   mtp3_handle = create_dissector_handle(dissect_mtp3, proto_mtp3); 	 
         	 
   dissector_add("wtap_encap", WTAP_ENCAP_MTP3, mtp3_handle); 	 
+  dissector_add_string("tali.opcode", "mtp3", mtp3_handle);
 	   	 
   data_handle = find_dissector("data");
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-mtp3mg.c ethereal-0.10.7/epan/dissectors/packet-mtp3mg.c
--- ethereal-0.10.6/epan/dissectors/packet-mtp3mg.c	2004-08-12 17:42:25.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-mtp3mg.c	2004-10-20 17:34:54.000000000 -0500
@@ -10,7 +10,7 @@
  *
  * Copyright 2003, Jeff Morriss <jeff.morriss[AT]ulticom.com>
  *
- * $Id: packet-mtp3mg.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-mtp3mg.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -44,7 +44,7 @@
 #endif
 
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #include <packet-mtp3.h>
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-multipart.c ethereal-0.10.7/epan/dissectors/packet-multipart.c
--- ethereal-0.10.6/epan/dissectors/packet-multipart.c	2004-08-12 17:41:56.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-multipart.c	2004-10-20 17:34:37.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 2004, Anders Broman.
  * Copyright 2004, Olivier Biot.
  *
- * $Id: packet-multipart.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-multipart.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Refer to the AUTHORS file or the AUTHORS section in the man page
  * for contacting the author(s) of this file.
@@ -63,7 +63,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <glib.h>
 #include <ctype.h>
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-mysql.c ethereal-0.10.7/epan/dissectors/packet-mysql.c
--- ethereal-0.10.6/epan/dissectors/packet-mysql.c	2004-08-12 17:42:06.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-mysql.c	2004-10-20 17:34:45.000000000 -0500
@@ -3,7 +3,7 @@
  *
  * Huagang XIE <huagang@intruvert.com>
  *
- * $Id: packet-mysql.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-mysql.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -41,7 +41,7 @@
 
 #include "packet-tcp.h"
 #include "reassemble.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 /* Capabilities */
 #define MYSQL_CAPS_LP 0x0001
@@ -803,8 +803,9 @@
 
 	mysql_module = prefs_register_protocol(proto_mysql, NULL);
 	prefs_register_bool_preference(mysql_module, "desegment_buffers",
-		"Desegment all MySQL buffers spanning multiple TCP segments",
-		"Whether the MySQL dissector should desegment all MySQL buffers spanning multiple TCP segments",
+		"Reassemble MySQL buffers spanning multiple TCP segments",
+		"Whether the MySQL dissector should reassemble MySQL buffers spanning multiple TCP segments."
+		" To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 		&mysql_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-nbns.c ethereal-0.10.7/epan/dissectors/packet-nbns.c
--- ethereal-0.10.6/epan/dissectors/packet-nbns.c	2004-08-12 17:41:57.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-nbns.c	2004-10-20 17:34:37.000000000 -0500
@@ -3,7 +3,7 @@
  * to when it had only NBNS)
  * Guy Harris <guy@alum.mit.edu>
  *
- * $Id: packet-nbns.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-nbns.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -37,7 +37,7 @@
 #include "packet-netbios.h"
 #include "packet-tcp.h"
 #include "packet-frame.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 static int proto_nbns = -1;
 static int hf_nbns_flags = -1;
@@ -1906,8 +1906,9 @@
 
   nbss_module = prefs_register_protocol(proto_nbss, NULL);
   prefs_register_bool_preference(nbss_module, "desegment_nbss_commands",
-    "Desegment all NBSS packets spanning multiple TCP segments",
-    "Whether NBSS dissector should desegment all packets spanning multiple TCP segments",
+    "Reassemble NBSS packets spanning multiple TCP segments",
+    "Whether the NBSS dissector should reassemble packets spanning multiple TCP segments."
+    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
     &nbss_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-ncp-nmas.c ethereal-0.10.7/epan/dissectors/packet-ncp-nmas.c
--- ethereal-0.10.6/epan/dissectors/packet-ncp-nmas.c	2004-08-12 17:42:27.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ncp-nmas.c	2004-10-20 17:34:57.000000000 -0500
@@ -3,7 +3,7 @@
  * Greg Morris <gmorris@novell.com>
  * Copyright (c) Novell, Inc. 2002-2004
  *
- * $Id: packet-ncp-nmas.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-ncp-nmas.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -31,7 +31,7 @@
 #include <string.h>
 #include <glib.h>
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-ncp-int.h"
 #include "packet-ncp-nmas.h"
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-ncp.c ethereal-0.10.7/epan/dissectors/packet-ncp.c
--- ethereal-0.10.6/epan/dissectors/packet-ncp.c	2004-08-12 17:42:29.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ncp.c	2004-10-20 17:34:59.000000000 -0500
@@ -9,7 +9,7 @@
  * Portions Copyright (c) by James Coe 2000-2002
  * Portions Copyright (c) Novell, Inc. 2000-2003
  *
- * $Id: packet-ncp.c 11551 2004-07-28 08:23:52Z guy $
+ * $Id: packet-ncp.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -45,7 +45,7 @@
 #include <string.h>
 #include <glib.h>
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-ipx.h"
 #include "packet-tcp.h"
 #include "packet-ncp-int.h"
@@ -76,6 +76,7 @@
 static int hf_ncp_burst_seqno = -1;
 static int hf_ncp_ack_seqno = -1;
 static int hf_ncp_burst_len = -1;
+static int hf_ncp_burst_offset = -1;
 static int hf_ncp_data_offset = -1;
 static int hf_ncp_data_bytes = -1;
 static int hf_ncp_missing_fraglist_count = -1;
@@ -314,18 +315,18 @@
 	char				flags_str[1+3+1+3+1+3+1+1];
 	char				*sep;
 	proto_tree			*flags_tree = NULL;
-	guint16				data_len = 0;
-	guint16				missing_fraglist_count = 0;
 	int				hdr_offset = 0;
 	int				commhdr;
-	int				offset;
+	int				offset = 0;
 	gint				length_remaining;
 	tvbuff_t       			*next_tvb;
 	guint32				testvar = 0, ncp_burst_command, burst_len, burst_off, burst_file;
 	guint8				subfunction;
+	guint32				data_offset;
+	guint16				data_len = 0;
+	guint16				missing_fraglist_count = 0;
 	mncp_rhash_value		*request_value = NULL;
 	conversation_t			*conversation;
-	char				*burst_command_name;
 
 	if (check_col(pinfo->cinfo, COL_PROTOCOL))
 		col_set_str(pinfo->cinfo, COL_PROTOCOL, "NCP");
@@ -614,41 +615,72 @@
 		    tvb, commhdr + 22, 2, FALSE);
 		proto_tree_add_item(ncp_tree, hf_ncp_burst_len,
 		    tvb, commhdr + 24, 4, FALSE);
-		proto_tree_add_item(ncp_tree, hf_ncp_data_offset,
-		    tvb, commhdr + 28, 4, FALSE);
+		data_offset = tvb_get_ntohl(tvb, commhdr + 28);
+		proto_tree_add_uint(ncp_tree, hf_ncp_data_offset,
+		    tvb, commhdr + 28, 4, data_offset);
 		data_len = tvb_get_ntohs(tvb, commhdr + 32);
 		proto_tree_add_uint(ncp_tree, hf_ncp_data_bytes,
 		    tvb, commhdr + 32, 2, data_len);
 		missing_fraglist_count = tvb_get_ntohs(tvb, commhdr + 34);
 		proto_tree_add_item(ncp_tree, hf_ncp_missing_fraglist_count,
 		    tvb, commhdr + 34, 2, FALSE);
-		if (ncp_burst_seqno == ncp_ack_seqno) {
-			ncp_burst_command = tvb_get_ntohl(tvb, commhdr+36);
+		offset = commhdr + 36;
+		if (!(flags & SYS) && ncp_burst_seqno == ncp_ack_seqno &&
+		    data_offset == 0) {
+			/*
+			 * This is either a Burst Read or Burst Write
+			 * command.  The data length includes the burst
+			 * mode header, plus any data in the command
+			 * (there shouldn't be any in a read, but there
+			 * might be some in a write).
+			 */
+			if (data_len < 4)
+				return;
+			ncp_burst_command = tvb_get_ntohl(tvb, offset);
 			proto_tree_add_item(ncp_tree, hf_ncp_burst_command,
-			    tvb, commhdr + 36, 4, FALSE);
-			burst_file = tvb_get_ntohl(tvb, commhdr+40);
+			    tvb, offset, 4, FALSE);
+			offset += 4;
+			data_len -= 4;
+
+			if (data_len < 4)
+				return;
+			burst_file = tvb_get_ntohl(tvb, offset);
 			proto_tree_add_item(ncp_tree, hf_ncp_burst_file_handle,
-			    tvb, commhdr + 40, 4, FALSE);
+			    tvb, offset, 4, FALSE);
+			offset += 4;
+			data_len -= 4;
+
+			if (data_len < 8)
+				return;
 			proto_tree_add_item(ncp_tree, hf_ncp_burst_reserved,
-			    tvb, commhdr + 44, 8, FALSE);
-			burst_off = tvb_get_ntohl(tvb, commhdr+52);
-			proto_tree_add_item(ncp_tree, hf_ncp_data_offset,
-			    tvb, commhdr + 52, 4, FALSE);
-			burst_len = tvb_get_ntohl(tvb, commhdr+56);
-			proto_tree_add_item(ncp_tree, hf_ncp_burst_len,
-			    tvb, commhdr + 56, 4, FALSE);
+			    tvb, offset, 8, FALSE);
+			offset += 8;
+			data_len -= 8;
+
+			if (data_len < 4)
+				return;
+			burst_off = tvb_get_ntohl(tvb, offset);
+			proto_tree_add_uint(ncp_tree, hf_ncp_burst_offset,
+			    tvb, offset, 4, burst_off);
+			offset += 4;
+			data_len -= 4;
+
+			if (data_len < 4)
+				return;
+			burst_len = tvb_get_ntohl(tvb, offset);
+			proto_tree_add_uint(ncp_tree, hf_ncp_burst_len,
+			    tvb, offset, 4, burst_len);
+			offset += 4;
+			data_len -= 4;
+
 			if (check_col(pinfo->cinfo, COL_INFO)) {
-				burst_command_name =
-				    match_strval(ncp_burst_command,
-				      burst_command);
-				if (burst_command_name != NULL) {
-					col_add_fstr(pinfo->cinfo, COL_INFO,
-					    "%s %d bytes starting at offset %d in file 0x%08x",
-					    burst_command_name, burst_len,
-					    burst_off, burst_file);
-				}
+				col_add_fstr(pinfo->cinfo, COL_INFO,
+				    "%s %d bytes starting at offset %d in file 0x%08x",
+				    val_to_str(ncp_burst_command,
+				      burst_command, "Unknown (0x%08x)"),
+				     burst_len, burst_off, burst_file);
 			}
-			return;
+			break;
 		} else {
 			if (tvb_get_guint8(tvb, commhdr + 2) & 0x10) {
 				if (check_col(pinfo->cinfo, COL_INFO)) {
@@ -777,12 +809,13 @@
 			 * System packet; show missing fragments if there
 			 * are any.
 			 */
-			offset = commhdr + 36;
 			while (missing_fraglist_count != 0) {
 				proto_tree_add_item(ncp_tree, hf_ncp_missing_data_offset,
 				    tvb, offset, 4, FALSE);
+				offset += 4;
 				proto_tree_add_item(ncp_tree, hf_ncp_missing_data_count,
 				    tvb, offset, 2, FALSE);
+				offset += 2;
 				missing_fraglist_count--;
 			}
 		} else {
@@ -794,12 +827,12 @@
 			 * length of the packet, but that's arguably a
 			 * feature in this case.
 			 */
-			length_remaining = tvb_length_remaining(tvb, commhdr + 36);
+			length_remaining = tvb_length_remaining(tvb, offset);
 			if (length_remaining > data_len)
 				length_remaining = data_len;
 			if (data_len != 0) {
 				call_dissector(data_handle,
-				    tvb_new_subset(tvb, commhdr + 36,
+				    tvb_new_subset(tvb, offset,
 					length_remaining, data_len),
 				    pinfo, ncp_tree);
 			}
@@ -973,10 +1006,14 @@
       { "Burst Length",    "ncp.burst_len",
 	FT_UINT32, BASE_DEC, NULL, 0x0,
 	"Total length of data in this burst", HFILL }},
+    { &hf_ncp_burst_offset,
+      { "Burst Offset",    "ncp.burst_offset",
+	FT_UINT32, BASE_DEC, NULL, 0x0,
+	"Offset of data in the burst", HFILL }},
     { &hf_ncp_data_offset,
       { "Data Offset",    "ncp.data_offset",
 	FT_UINT32, BASE_DEC, NULL, 0x0,
-	"Offset of this packet in the burst", HFILL }},
+	"Offset of this packet", HFILL }},
     { &hf_ncp_data_bytes,
       { "Data Bytes",    "ncp.data_bytes",
 	FT_UINT16, BASE_DEC, NULL, 0x0,
@@ -1046,12 +1083,13 @@
   ncp_module = prefs_register_protocol(proto_ncp, NULL);
   prefs_register_obsolete_preference(ncp_module, "initial_hash_size");
   prefs_register_bool_preference(ncp_module, "desegment",
-    "Desegment all NCP-over-TCP messages spanning multiple segments",
-    "Whether the NCP dissector should desegment all messages spanning multiple TCP segments",
+    "Reassemble NCP-over-TCP messages spanning multiple TCP segments",
+    "Whether the NCP dissector should reassemble messages spanning multiple TCP segments."
+    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
     &ncp_desegment);
   prefs_register_bool_preference(ncp_module, "defragment_nds",
-    "Defragment all NDS messages spanning multiple packets",
-    "Whether the NCP dissector should defragment all NDS messages spanning multiple packets",
+    "Reassemble fragmented NDS messages spanning multiple packets",
+    "Whether the NCP dissector should defragment NDS messages spanning multiple packets.",
     &nds_defragment);
   register_init_routine(&mncp_init_protocol);
   register_postseq_cleanup_routine(&mncp_postseq_cleanup);
diff -urN ethereal-0.10.6/epan/dissectors/packet-ncp2222.inc ethereal-0.10.7/epan/dissectors/packet-ncp2222.inc
--- ethereal-0.10.6/epan/dissectors/packet-ncp2222.inc	2004-08-12 17:42:22.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ncp2222.inc	2004-10-20 17:34:52.000000000 -0500
@@ -11,7 +11,7 @@
  * Portions Copyright (c) Gilbert Ramirez 2000-2002
  * Portions Copyright (c) Novell, Inc. 2000-2003
  *
- * $Id: packet-ncp2222.inc 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-ncp2222.inc 11836 2004-08-26 07:46:29Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -1823,15 +1823,6 @@
                                         value1, vvalues->vstring);
                                voffset = voffset + value1;
                                voffset += align_4(tvb, voffset);
-                               value2 = tvb_get_letohl(tvb, voffset); /* Bit Count */
-                               voffset=voffset+4;
-                               value3 = tvb_get_letohl(tvb, voffset); /* Bit length */
-                               voffset = voffset+4;
-                               get_string(tvb, voffset, value3, vvalues->vstring);
-                               proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, 
-                                        value3, vvalues->vstring);
-                               voffset = voffset+value3;         
-                               voffset += align_4(tvb, voffset);
                                break;
                        case 0x0000000c:        /* Network Address */
                                value1 = tvb_get_letohl(tvb, voffset); /* length of field */
@@ -4862,9 +4853,10 @@
 		proto_tree_add_item(ncp_tree, hf_ncp_connection_status, tvb, 7, 1, FALSE);
 
 		/*
-		 * Unless this is a reply, that's all there is to parse.
+		 * Unless this is a successful reply, that's all there
+		 * is to parse.
 		 */
-		if (type != NCP_SERVICE_REPLY)
+		if (type != NCP_SERVICE_REPLY || completion_code != 0)
 			return;
 
                 /* Decode NDS Reply packets */
diff -urN ethereal-0.10.6/epan/dissectors/packet-ndmp.c ethereal-0.10.7/epan/dissectors/packet-ndmp.c
--- ethereal-0.10.6/epan/dissectors/packet-ndmp.c	2004-08-12 17:41:56.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ndmp.c	2004-10-20 17:34:36.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for NDMP dissection
  * 2001 Ronnie Sahlberg (see AUTHORS for email)
  *
- * $Id: packet-ndmp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-ndmp.c 12216 2004-10-06 09:59:50Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -40,7 +40,7 @@
 #include "packet-rpc.h"
 #include "packet-scsi.h"
 #include "packet-frame.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "reassemble.h"
 #include "rpc_defrag.h"
 
@@ -2754,7 +2754,7 @@
 	return TRUE;
 }
 
-static void
+static int
 dissect_ndmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
 	int offset = 0;
@@ -2768,23 +2768,28 @@
 		len = dissect_rpc_fragment(tvb, offset, pinfo, tree,
 		    dissect_ndmp_message, FALSE, proto_ndmp, ett_ndmp,
 		    ndmp_defragment, first_pdu);
-		first_pdu = FALSE;
 		if (len < 0) {
 			/*
 			 * We need more data from the TCP stream for
 			 * this fragment.
 			 */
-			return;
+			return tvb_length(tvb);
 		}
 		if (len == 0) {
 			/*
 			 * It's not NDMP.  Stop processing.
+			 * Return a "this isn't NDMP" indication
+			 * if this is the first PDU.
 			 */
+			if (first_pdu)
+				return 0;
 			break;
 		}
+		first_pdu = FALSE;
 
 		offset += len;
 	}
+	return tvb_length(tvb);
 }
 
 void
@@ -3474,12 +3479,13 @@
 	ndmp_protocol_versions,
 	FALSE);
   prefs_register_bool_preference(ndmp_module, "desegment",
-  	"Desegment all NDMP messages spanning multiple TCP segments",
-  	"Whether the dissector should desegment NDMP messages",
+    "Reassemble NDMP messages spanning multiple TCP segments",
+    "Whether the NDMP dissector should reassemble messages spanning multiple TCP segments."
+    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
   	&ndmp_desegment);
   prefs_register_bool_preference(ndmp_module, "defragment",
-  	"Defragment all multi-fragment NDMP messages",
-  	"Whether the dissector should defragment multi-fragment NDMP messages",
+  	"Reassemble fragmented NDMP messages spanning multiple packets",
+  	"Whether the dissector should defragment NDMP messages spanning multiple packets.",
   	&ndmp_defragment);
 }
 
@@ -3488,6 +3494,6 @@
 {
   dissector_handle_t ndmp_handle;
 
-  ndmp_handle = create_dissector_handle(dissect_ndmp, proto_ndmp);
+  ndmp_handle = new_create_dissector_handle(dissect_ndmp, proto_ndmp);
   dissector_add("tcp.port",TCP_PORT_NDMP, ndmp_handle);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-ndps.c ethereal-0.10.7/epan/dissectors/packet-ndps.c
--- ethereal-0.10.6/epan/dissectors/packet-ndps.c	2004-08-12 17:42:08.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ndps.c	2004-10-20 17:34:46.000000000 -0500
@@ -3,7 +3,7 @@
  * Greg Morris <gmorris@novell.com>
  * Copyright (c) Novell, Inc. 2002-2003
  *
- * $Id: packet-ndps.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-ndps.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -31,7 +31,7 @@
 #include <string.h>
 #include <glib.h>
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-ipx.h"
 #include "packet-tcp.h"
 #include <epan/conversation.h>
@@ -8846,12 +8846,13 @@
 
 	ndps_module = prefs_register_protocol(proto_ndps, NULL);
 	prefs_register_bool_preference(ndps_module, "desegment_tcp",
-	    "Desegment all NDPS messages spanning multiple TCP segments",
-	    "Whether the NDPS dissector should desegment all messages spanning multiple TCP segments",
+	    "Reassemble NDPS messages spanning multiple TCP segments",
+	    "Whether the NDPS dissector should reassemble messages spanning multiple TCP segments."
+	    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 	    &ndps_desegment);
 	prefs_register_bool_preference(ndps_module, "desegment_spx",
-	    "Desegment all NDPS messages spanning multiple SPX packets",
-	    "Whether the NDPS dissector should desegment all messages spanning multiple SPX packets",
+	    "Reassemble fragmented NDPS messages spanning multiple SPX packets",
+	    "Whether the NDPS dissector should reassemble fragmented NDPS messages spanning multiple SPX packets",
 	    &ndps_defragment);
 	prefs_register_bool_preference(ndps_module, "show_oid",
 	    "Display NDPS Details",
diff -urN ethereal-0.10.6/epan/dissectors/packet-netbios.c ethereal-0.10.7/epan/dissectors/packet-netbios.c
--- ethereal-0.10.6/epan/dissectors/packet-netbios.c	2004-08-12 17:42:01.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-netbios.c	2004-10-20 17:34:41.000000000 -0500
@@ -5,7 +5,7 @@
  *
  * derived from the packet-nbns.c
  *
- * $Id: packet-netbios.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-netbios.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -37,7 +37,7 @@
 #include <epan/packet.h>
 #include "llcsaps.h"
 #include "reassemble.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-netbios.h"
 
 /* Netbios command numbers */
@@ -1411,8 +1411,8 @@
 
 	netbios_module = prefs_register_protocol(proto_netbios, NULL);
 	prefs_register_bool_preference(netbios_module, "defragment",
-	    "Defragment all NetBIOS messages spanning multiple frames",
-	    "Whether the NetBIOS dissector should defragment all messages spanning multiple frames",
+	    "Reassemble fragmented NetBIOS messages spanning multiple frames",
+	    "Whether the NetBIOS dissector should defragment messages spanning multiple frames",
 	    &netbios_defragment);
 
 	register_init_routine(netbios_init);
diff -urN ethereal-0.10.6/epan/dissectors/packet-netflow.c ethereal-0.10.7/epan/dissectors/packet-netflow.c
--- ethereal-0.10.6/epan/dissectors/packet-netflow.c	2004-08-12 17:42:10.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-netflow.c	2004-10-20 17:34:48.000000000 -0500
@@ -23,6 +23,8 @@
  ** Previous NetFlow dissector written by Matthew Smart <smart@monkey.org>
  ** NetFlow v9 support added by same.
  **
+ ** NetFlow v9 patches by Luca Deri <deri@ntop.org>
+ **
  ** See
  **
  ** http://www.cisco.com/warp/public/cc/pd/iosw/prodlit/tflow_wp.htm
@@ -45,7 +47,7 @@
  ** http://www.cisco.com/univercd/cc/td/doc/cisintwk/intsolns/netflsol/nfwhite.htm
  **
  ** $Yahoo: //depot/fumerola/packet-netflow/packet-netflow.c#14 $
- ** $Id: packet-netflow.c 11410 2004-07-18 18:06:47Z gram $
+ ** $Id: packet-netflow.c 12115 2004-09-27 22:55:15Z guy $
  */
 
 #ifdef HAVE_CONFIG_H
@@ -56,7 +58,7 @@
 #include <epan/packet.h>
 #include <string.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #define UDP_PORT_NETFLOW	2055
 
@@ -141,6 +143,7 @@
 	guint32	length;
 	guint32 source_id;
 	guint32	source_addr;
+	guint16 option_template; /* 0=data template, 1=option template */
 	struct v9_template_entry *entries;
 };
 
@@ -192,6 +195,11 @@
 static int	hf_cflow_template_field_count = -1;
 static int	hf_cflow_template_field_type = -1;
 static int	hf_cflow_template_field_length = -1;
+static int	hf_cflow_option_scope_length = -1;
+static int	hf_cflow_option_length = -1;
+static int	hf_cflow_template_scope_field_type = -1;
+static int	hf_cflow_template_scope_field_length = -1;
+
 
 /*
  * pdu storage
@@ -232,6 +240,10 @@
 static int      hf_cflow_octets_exp = -1;
 static int      hf_cflow_packets_exp = -1;
 static int      hf_cflow_flows_exp = -1;
+static int      hf_cflow_sampling_interval = -1;
+static int      hf_cflow_sampling_algorithm = -1;
+static int      hf_cflow_flow_active_timeout = -1;
+static int      hf_cflow_flow_inactive_timeout = -1;
 
 void		proto_reg_handoff_netflow(void);
 
@@ -249,10 +261,8 @@
 			       int offset, guint16 id, guint length);
 static void	dissect_v9_pdu(proto_tree * pdutree, tvbuff_t * tvb,
 			       int offset, struct v9_template * template);
-#if 0
 static int	dissect_v9_options(proto_tree * pdutree, tvbuff_t * tvb,
 			       int offset);
-#endif
 static int	dissect_v9_template(proto_tree * pdutree, tvbuff_t * tvb,
 				    int offset);
 static void	v9_template_add(struct v9_template * template);
@@ -473,7 +483,7 @@
 	 * everything below here should be payload 
 	 */
 	for (x = 1; x < pdus + 1; x++) {
-		/*
+          	/*
 		 * make sure we have a pdu's worth of data 
 		 */
 		available = tvb_length_remaining(tvb, offset);
@@ -496,6 +506,8 @@
 
 		pduret = pduptr(pdutree, tvb, offset, vspec);
 
+		if (pduret < pdusize) pduret = pdusize; /* padding */
+
 		/*
 		 * if we came up short, stop processing 
 		 */
@@ -830,7 +842,7 @@
 		    offset, 2, FALSE);
 		offset += 2;
 
-		/* dissect_v9_options(pdutree, tvb, offset); */
+		dissect_v9_options(pdutree, tvb, offset);
 	} else if (flowset_id >= 2 && flowset_id <= 255) {
 		/* Reserved */
 		proto_tree_add_item(pdutree, hf_cflow_flowset_id, tvb,
@@ -932,7 +944,7 @@
 				    tvb, offset, length,
 				    "Octets: length %u", length);
 			}
-			break;
+		  break;
 
 		case 2: /* packets */
 			if (length == 4) {
@@ -1109,6 +1121,26 @@
 			proto_tree_add_time(pdutree, hf_cflow_timestart,
 			    tvb, offset, length, &ts);
 			break;
+			
+		case 34: /* sampling interval */
+		  proto_tree_add_item(pdutree, hf_cflow_sampling_interval,
+				      tvb, offset, length, FALSE);
+		  break;
+
+		case 35: /* sampling algorithm */
+		  proto_tree_add_item(pdutree, hf_cflow_sampling_algorithm,
+				      tvb, offset, length, FALSE);
+		  break;
+
+		case 36: /* flow active timeout */
+		   proto_tree_add_item(pdutree, hf_cflow_flow_active_timeout,
+				      tvb, offset, length, FALSE);
+		  break;
+
+		case 37: /* flow inactive timeout */
+		   proto_tree_add_item(pdutree, hf_cflow_flow_inactive_timeout,
+				      tvb, offset, length, FALSE);
+		  break;
 
 		case 40: /* bytes exported */
 			proto_tree_add_item(pdutree, hf_cflow_octets_exp,
@@ -1135,13 +1167,69 @@
 	}
 }
 
-#if 0
 static int
 dissect_v9_options(proto_tree * pdutree, tvbuff_t * tvb, int offset)
 {
-	return (0);
+  guint16 length, option_scope_len, option_len, i, id, size;
+  struct v9_template template;
+  int template_offset;
+
+  id = tvb_get_ntohs(tvb, offset);
+  proto_tree_add_item(pdutree, hf_cflow_template_id, tvb,
+		      offset, 2, FALSE);
+  offset += 2;
+
+  option_scope_len = length = tvb_get_ntohs(tvb, offset);
+  proto_tree_add_item(pdutree, hf_cflow_option_scope_length, tvb,
+		      offset, 2, FALSE);
+  offset += 2;
+
+  option_len = length = tvb_get_ntohs(tvb, offset);
+  proto_tree_add_item(pdutree, hf_cflow_option_length, tvb,
+		      offset, 2, FALSE);
+  offset += 2;
+
+  for(i=0; i<option_scope_len; i++) {
+    length = tvb_get_ntohs(tvb, offset);
+    proto_tree_add_item(pdutree, hf_cflow_template_scope_field_type, tvb,
+			offset, 2, FALSE);
+    offset += 2; i += 2;
+
+    length = tvb_get_ntohs(tvb, offset);
+    proto_tree_add_item(pdutree, hf_cflow_template_scope_field_length, tvb,
+			offset, 2, FALSE);
+    offset += 2; i += 2;
+  }
+
+  template_offset = offset;
+
+  for(i=0; i<option_len;) {
+    length = tvb_get_ntohs(tvb, offset);
+    proto_tree_add_item(pdutree, hf_cflow_template_field_type, tvb,
+			offset, 2, FALSE);
+    offset += 2; i += 2;
+
+    length = tvb_get_ntohs(tvb, offset);
+    proto_tree_add_item(pdutree, hf_cflow_template_field_length, tvb,
+			offset, 2, FALSE);
+    offset += 2; i += 2;
+  }
+
+  /* Cache template */
+  memset(&template, 0, sizeof(template));
+  template.id = id;
+  template.count = option_len/4;
+  template.source_addr = 0;	/* XXX */
+  template.source_id = 0;	/* XXX */
+  template.option_template = 1; /* Option template */
+  size = template.count * sizeof(struct v9_template_entry);
+  template.entries = g_malloc(size);
+  tvb_memcpy(tvb, (guint8 *)template.entries, template_offset, size);
+
+  v9_template_add(&template);
+  
+  return (0);
 }
-#endif
 
 static int
 dissect_v9_template(proto_tree * pdutree, tvbuff_t * tvb, int offset)
@@ -1168,6 +1256,7 @@
 	template.count = count;
 	template.source_addr = 0;	/* XXX */
 	template.source_id = 0;		/* XXX */
+	template.option_template = 0;   /* Data template */
 	template.entries = g_malloc(count * sizeof(struct v9_template_entry));
 	tvb_memcpy(tvb, (guint8 *)template.entries, offset,
 	    count * sizeof(struct v9_template_entry));
@@ -1218,10 +1307,51 @@
 	{ 20, "MUL_DOCTETS" },
 	{ 21, "LAST_SWITCHED" },
 	{ 22, "FIRST_SWITCHED" },
+	{ 27, "IPV6_SRC_ADDR" },
+	{ 28, "IPV6_DST_ADDR" },
+	{ 29, "IPV6_SRC_MASK" },
+	{ 30, "IPV6_DST_MASK" },
+	{ 31, "FLOW_LABEL" },
+	{ 32, "ICMP_TYPE" },
+	{ 33, "IGMP_TYPE" },
+	{ 34, "SAMPLING_INTERVAL" },
+	{ 35, "SAMPLING_ALGORITHM" },
+	{ 36, "FLOW_ACTIVE_TIMEOUT" },
+	{ 37, "FLOW_INACTIVE_TIMEOUT" },
+	{ 38, "ENGINE_TYPE" },
+	{ 39, "ENGINE_ID" },
 	{ 24, "OUT_PKTS" },
 	{ 40, "TOTAL_BYTES_EXP" },
 	{ 41, "TOTAL_PKTS_EXP" },
 	{ 42, "TOTAL_FLOWS_EXP" },
+	{ 56, "SRC_MAC" },
+	{ 57, "DST_MAC" },
+	{ 58, "SRC_VLAN" },
+	{ 59, "DST_VLAN" },
+	{ 60, "IP_PROTOCOL_VERSION" },
+	{ 61, "DIRECTION" },
+	{ 62, "IPV6_NEXT_HOP" },
+	{ 63, "BPG_IPV6_NEXT_HOP" },
+	{ 64, "IPV6_OPTION_HEADERS" },
+	{ 70, "MPLS_LABEL_1" },
+	{ 71, "MPLS_LABEL_2" },
+	{ 72, "MPLS_LABEL_3" },
+	{ 73, "MPLS_LABEL_4" },
+	{ 74, "MPLS_LABEL_5" },
+	{ 75, "MPLS_LABEL_6" },
+	{ 76, "MPLS_LABEL_7" },
+	{ 71, "MPLS_LABEL_8" },
+	{ 72, "MPLS_LABEL_9" },
+	{ 72, "MPLS_LABEL_10" },
+	{ 0, NULL },
+};
+
+static value_string v9_scope_field_types[] = {
+	{ 1, "System" },
+	{ 2, "Interface" },
+	{ 3, "Line Card" },
+	{ 4, "NetFlow Cache" },
+	{ 5, "Template" },
 	{ 0, NULL },
 };
 
@@ -1527,6 +1657,49 @@
 		  FT_UINT16, BASE_DEC, NULL, 0x0,
 		  "Template field length", HFILL}
 		 },
+
+		/* options */
+		{&hf_cflow_option_scope_length,
+		 {"Option Scope Length", "cflow.option_scope_length",
+		  FT_UINT16, BASE_DEC, NULL, 0x0,
+		  "Option scope length", HFILL}
+		 },
+		{&hf_cflow_option_length,
+		 {"Option Length", "cflow.option_length",
+		  FT_UINT16, BASE_DEC, NULL, 0x0,
+		  "Option length", HFILL}
+		 },
+		{&hf_cflow_template_scope_field_type,
+		 {"Scope Type", "cflow.scope_field_type",
+		  FT_UINT16, BASE_DEC, VALS(v9_scope_field_types), 0x0,
+		  "Scope field type", HFILL}
+		 },		
+		{&hf_cflow_template_scope_field_length,
+		 {"Scope Field Length", "cflow.scope_field_length",
+		  FT_UINT16, BASE_DEC, NULL, 0x0,
+		  "Scope field length", HFILL}
+		 },
+		{&hf_cflow_sampling_interval,
+		 {"Sampling interval", "cflow.sampling_interval",
+		  FT_UINT32, BASE_DEC, NULL, 0x0,
+		  "Sampling interval", HFILL}
+		},
+		{&hf_cflow_sampling_algorithm,
+		 {"Sampling algorithm", "cflow.sampling_algorithm",
+		  FT_UINT8, BASE_DEC, NULL, 0x0,
+		  "Sampling algorithm", HFILL}
+		},
+		{&hf_cflow_flow_active_timeout,
+		 {"Flow active timeout", "cflow.flow_active_timeout",
+		  FT_UINT16, BASE_DEC, NULL, 0x0,
+		  "Flow active timeout", HFILL}
+		},
+		{&hf_cflow_flow_inactive_timeout,
+		 {"Flow inactive timeout", "cflow.flow_inactive_timeout",
+		  FT_UINT16, BASE_DEC, NULL, 0x0,
+		  "Flow inactive timeout", HFILL}
+		},
+
 		/*
 		 * begin pdu content storage 
 		 */
diff -urN ethereal-0.10.6/epan/dissectors/packet-nfs.c ethereal-0.10.7/epan/dissectors/packet-nfs.c
--- ethereal-0.10.6/epan/dissectors/packet-nfs.c	2004-08-12 17:42:04.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-nfs.c	2004-10-20 17:34:43.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 1999, Uwe Girlich <Uwe.Girlich@philosys.de>
  * Copyright 2000-2004, Mike Frisch <frisch@hummingbird.com> (NFSv4 decoding)
  *
- * $Id: packet-nfs.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-nfs.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,8 +36,7 @@
 
 #include "packet-rpc.h"
 #include "packet-nfs.h"
-#include "prefs.h"
-#include "epan/int-64bit.h"
+#include <epan/prefs.h>
 
 static int proto_nfs = -1;
 
@@ -4288,13 +4287,13 @@
 dissect_nfs3_read_call(tvbuff_t *tvb, int offset, packet_info *pinfo,
 	proto_tree* tree)
 {
-	unsigned char *off;
+	guint64 off;
 	guint32 len;
 	guint32 hash;
 
 	offset = dissect_nfs_fh3(tvb, offset, pinfo, tree, "file", &hash);
 
-	off=u64toa(tvb_get_ptr(tvb, offset, 8));
+	off=tvb_get_ntoh64(tvb, offset);
 	offset = dissect_rpc_uint64(tvb, tree, hf_nfs_offset3, offset);
 
 	len=tvb_get_ntohl(tvb, offset);
@@ -4302,9 +4301,9 @@
 
 	
 	if (check_col(pinfo->cinfo, COL_INFO)) {
-		col_append_fstr(pinfo->cinfo, COL_INFO,", FH:0x%08x Offset:%s Len:%d", hash, off, len);
+		col_append_fstr(pinfo->cinfo, COL_INFO,", FH:0x%08x Offset:%" PRIu64 " Len:%u", hash, off, len);
 	}
-	proto_item_append_text(tree, ", READ Call FH:0x%08x Offset:%s Len:%d", hash, off, len);
+	proto_item_append_text(tree, ", READ Call FH:0x%08x Offset:%" PRIu64 " Len:%u", hash, off, len);
 
 	return offset;
 }
@@ -4382,14 +4381,14 @@
 dissect_nfs3_write_call(tvbuff_t *tvb, int offset, packet_info *pinfo,
 	proto_tree* tree)
 {
-	unsigned char *off;
+	guint64 off;
 	guint32 len;
 	guint32 stable;
 	guint32 hash;
 
 	offset = dissect_nfs_fh3   (tvb, offset, pinfo, tree, "file", &hash);
 
-	off=u64toa(tvb_get_ptr(tvb, offset, 8));
+	off=tvb_get_ntoh64(tvb, offset);
 	offset = dissect_rpc_uint64(tvb, tree, hf_nfs_offset3, offset);
 
 	len=tvb_get_ntohl(tvb, offset);
@@ -4399,9 +4398,9 @@
 	offset = dissect_stable_how(tvb, offset, tree, hf_nfs_write_stable);
 
 	if (check_col(pinfo->cinfo, COL_INFO)) {
-		col_append_fstr(pinfo->cinfo, COL_INFO,", FH:0x%08x Offset:%s Len:%d %s", hash, off, len, val_to_str(stable, names_stable_how, "Stable:%u"));
+		col_append_fstr(pinfo->cinfo, COL_INFO,", FH:0x%08x Offset:%" PRIu64 " Len:%u %s", hash, off, len, val_to_str(stable, names_stable_how, "Stable:%u"));
 	}
-	proto_item_append_text(tree, ", WRITE Call FH:0x%08x Offset:%s Len:%d %s", hash, off, len, val_to_str(stable, names_stable_how, "Stable:%u"));
+	proto_item_append_text(tree, ", WRITE Call FH:0x%08x Offset:%" PRIu64 " Len:%u %s", hash, off, len, val_to_str(stable, names_stable_how, "Stable:%u"));
 
 	offset = dissect_nfsdata   (tvb, offset, tree, hf_nfs_data);
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-nlm.c ethereal-0.10.7/epan/dissectors/packet-nlm.c
--- ethereal-0.10.6/epan/dissectors/packet-nlm.c	2004-08-12 17:42:10.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-nlm.c	2004-10-20 17:34:48.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-nlm.c
  * Routines for nlm dissection
  *
- * $Id: packet-nlm.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-nlm.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -40,7 +40,7 @@
 #include "packet-rpc.h"
 #include "packet-nfs.h"
 #include "packet-nlm.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <string.h>
 
 /*
diff -urN ethereal-0.10.6/epan/dissectors/packet-ns_cert_exts.c ethereal-0.10.7/epan/dissectors/packet-ns_cert_exts.c
--- ethereal-0.10.6/epan/dissectors/packet-ns_cert_exts.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-ns_cert_exts.c	2004-10-20 17:34:48.000000000 -0500
@@ -0,0 +1,292 @@
+/* Do not modify this file.                                                   */
+/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
+/* ./packet-ns_cert_exts.c                                                    */
+/* ../../tools/asn2eth.py -X -b -p ns_cert_exts -c ns_cert_exts.cnf -s packet-ns_cert_exts-template NETSCAPE-CERT-EXTS.asn */
+
+/* Input file: packet-ns_cert_exts-template.c */
+
+/* packet-ns_cert_exts.c
+ * Routines for NetScape Certificate Extensions packet dissection
+ *
+ * $Id: packet-ns_cert_exts-template.c 12203 2004-10-05 09:18:55Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <epan/packet.h>
+#include <epan/conversation.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "packet-ber.h"
+
+#define PNAME  "NetScape Certificate Extensions"
+#define PSNAME "NS_CERT_EXTS"
+#define PFNAME "ns_cert_exts"
+
+/* Initialize the protocol and registered fields */
+int proto_ns_cert_exts = -1;
+
+/*--- Included file: packet-ns_cert_exts-hf.c ---*/
+
+static int hf_ns_cert_exts_BaseUrl_PDU = -1;      /* BaseUrl */
+static int hf_ns_cert_exts_RevocationUrl_PDU = -1;  /* RevocationUrl */
+static int hf_ns_cert_exts_CaRevocationUrl_PDU = -1;  /* CaRevocationUrl */
+static int hf_ns_cert_exts_CaPolicyUrl_PDU = -1;  /* CaPolicyUrl */
+static int hf_ns_cert_exts_Comment_PDU = -1;      /* Comment */
+static int hf_ns_cert_exts_SslServerName_PDU = -1;  /* SslServerName */
+static int hf_ns_cert_exts_CertRenewalUrl_PDU = -1;  /* CertRenewalUrl */
+static int hf_ns_cert_exts_CertType_PDU = -1;     /* CertType */
+/* named bits */
+static int hf_ns_cert_exts_CertType_client = -1;
+static int hf_ns_cert_exts_CertType_server = -1;
+static int hf_ns_cert_exts_CertType_ca = -1;
+
+/*--- End of included file: packet-ns_cert_exts-hf.c ---*/
+
+
+/* Initialize the subtree pointers */
+
+/*--- Included file: packet-ns_cert_exts-ett.c ---*/
+
+static gint ett_ns_cert_exts_CertType = -1;
+
+/*--- End of included file: packet-ns_cert_exts-ett.c ---*/
+
+
+
+/*--- Included file: packet-ns_cert_exts-fn.c ---*/
+
+/*--- Fields for imported types ---*/
+
+
+
+static int
+dissect_ns_cert_exts_BaseUrl(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
+                                         pinfo, tree, tvb, offset, hf_index,
+                                         NULL);
+
+  return offset;
+}
+
+
+static int
+dissect_ns_cert_exts_RevocationUrl(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
+                                         pinfo, tree, tvb, offset, hf_index,
+                                         NULL);
+
+  return offset;
+}
+
+
+static int
+dissect_ns_cert_exts_CaRevocationUrl(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
+                                         pinfo, tree, tvb, offset, hf_index,
+                                         NULL);
+
+  return offset;
+}
+
+
+static int
+dissect_ns_cert_exts_CaPolicyUrl(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
+                                         pinfo, tree, tvb, offset, hf_index,
+                                         NULL);
+
+  return offset;
+}
+
+
+static int
+dissect_ns_cert_exts_Comment(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
+                                         pinfo, tree, tvb, offset, hf_index,
+                                         NULL);
+
+  return offset;
+}
+
+
+static int
+dissect_ns_cert_exts_SslServerName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
+                                         pinfo, tree, tvb, offset, hf_index,
+                                         NULL);
+
+  return offset;
+}
+
+
+static int
+dissect_ns_cert_exts_CertRenewalUrl(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
+                                         pinfo, tree, tvb, offset, hf_index,
+                                         NULL);
+
+  return offset;
+}
+
+static const asn_namedbit CertType_bits[] = {
+  {  0, &hf_ns_cert_exts_CertType_client, -1, -1, NULL, NULL },
+  {  1, &hf_ns_cert_exts_CertType_server, -1, -1, NULL, NULL },
+  {  5, &hf_ns_cert_exts_CertType_ca, -1, -1, NULL, NULL },
+  { 0, NULL, 0, 0, NULL, NULL }
+};
+
+static int
+dissect_ns_cert_exts_CertType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
+                                 CertType_bits, hf_index, ett_ns_cert_exts_CertType,
+                                 NULL);
+
+  return offset;
+}
+
+/*--- PDUs ---*/
+
+static void dissect_BaseUrl_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_ns_cert_exts_BaseUrl(FALSE, tvb, 0, pinfo, tree, hf_ns_cert_exts_BaseUrl_PDU);
+}
+static void dissect_RevocationUrl_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_ns_cert_exts_RevocationUrl(FALSE, tvb, 0, pinfo, tree, hf_ns_cert_exts_RevocationUrl_PDU);
+}
+static void dissect_CaRevocationUrl_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_ns_cert_exts_CaRevocationUrl(FALSE, tvb, 0, pinfo, tree, hf_ns_cert_exts_CaRevocationUrl_PDU);
+}
+static void dissect_CaPolicyUrl_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_ns_cert_exts_CaPolicyUrl(FALSE, tvb, 0, pinfo, tree, hf_ns_cert_exts_CaPolicyUrl_PDU);
+}
+static void dissect_Comment_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_ns_cert_exts_Comment(FALSE, tvb, 0, pinfo, tree, hf_ns_cert_exts_Comment_PDU);
+}
+static void dissect_SslServerName_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_ns_cert_exts_SslServerName(FALSE, tvb, 0, pinfo, tree, hf_ns_cert_exts_SslServerName_PDU);
+}
+static void dissect_CertRenewalUrl_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_ns_cert_exts_CertRenewalUrl(FALSE, tvb, 0, pinfo, tree, hf_ns_cert_exts_CertRenewalUrl_PDU);
+}
+static void dissect_CertType_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_ns_cert_exts_CertType(FALSE, tvb, 0, pinfo, tree, hf_ns_cert_exts_CertType_PDU);
+}
+
+
+/*--- End of included file: packet-ns_cert_exts-fn.c ---*/
+
+
+
+/*--- proto_register_ns_cert_exts -------------------------------------------*/
+void proto_register_ns_cert_exts(void) {
+
+  /* List of fields */
+  static hf_register_info hf[] = {
+
+/*--- Included file: packet-ns_cert_exts-hfarr.c ---*/
+
+    { &hf_ns_cert_exts_BaseUrl_PDU,
+      { "BaseUrl", "ns_cert_exts.BaseUrl",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "BaseUrl", HFILL }},
+    { &hf_ns_cert_exts_RevocationUrl_PDU,
+      { "RevocationUrl", "ns_cert_exts.RevocationUrl",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "RevocationUrl", HFILL }},
+    { &hf_ns_cert_exts_CaRevocationUrl_PDU,
+      { "CaRevocationUrl", "ns_cert_exts.CaRevocationUrl",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "CaRevocationUrl", HFILL }},
+    { &hf_ns_cert_exts_CaPolicyUrl_PDU,
+      { "CaPolicyUrl", "ns_cert_exts.CaPolicyUrl",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "CaPolicyUrl", HFILL }},
+    { &hf_ns_cert_exts_Comment_PDU,
+      { "Comment", "ns_cert_exts.Comment",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "Comment", HFILL }},
+    { &hf_ns_cert_exts_SslServerName_PDU,
+      { "SslServerName", "ns_cert_exts.SslServerName",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "SslServerName", HFILL }},
+    { &hf_ns_cert_exts_CertRenewalUrl_PDU,
+      { "CertRenewalUrl", "ns_cert_exts.CertRenewalUrl",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "CertRenewalUrl", HFILL }},
+    { &hf_ns_cert_exts_CertType_PDU,
+      { "CertType", "ns_cert_exts.CertType",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "CertType", HFILL }},
+    { &hf_ns_cert_exts_CertType_client,
+      { "client", "ns_cert_exts.client",
+        FT_BOOLEAN, 8, NULL, 0x80,
+        "", HFILL }},
+    { &hf_ns_cert_exts_CertType_server,
+      { "server", "ns_cert_exts.server",
+        FT_BOOLEAN, 8, NULL, 0x40,
+        "", HFILL }},
+    { &hf_ns_cert_exts_CertType_ca,
+      { "ca", "ns_cert_exts.ca",
+        FT_BOOLEAN, 8, NULL, 0x04,
+        "", HFILL }},
+
+/*--- End of included file: packet-ns_cert_exts-hfarr.c ---*/
+
+  };
+
+  /* List of subtrees */
+  static gint *ett[] = {
+
+/*--- Included file: packet-ns_cert_exts-ettarr.c ---*/
+
+    &ett_ns_cert_exts_CertType,
+
+/*--- End of included file: packet-ns_cert_exts-ettarr.c ---*/
+
+  };
+
+  /* Register protocol */
+  proto_ns_cert_exts = proto_register_protocol(PNAME, PSNAME, PFNAME);
+
+  /* Register fields and subtrees */
+  proto_register_field_array(proto_ns_cert_exts, hf, array_length(hf));
+  proto_register_subtree_array(ett, array_length(ett));
+
+}
+
+
+/*--- proto_reg_handoff_ns_cert_exts ---------------------------------------*/
+void proto_reg_handoff_ns_cert_exts(void) {
+	register_ber_oid_dissector("2.16.840.1.113730.1.1", dissect_CertType_PDU, proto_ns_cert_exts, "ns-cert-exts.cert_type");
+	register_ber_oid_dissector("2.16.840.1.113730.1.2", dissect_BaseUrl_PDU, proto_ns_cert_exts, "ns-cert-exts.base_url");
+	register_ber_oid_dissector("2.16.840.1.113730.1.3", dissect_RevocationUrl_PDU, proto_ns_cert_exts, "ns-cert-exts.revocation-url");
+	register_ber_oid_dissector("2.16.840.1.113730.1.4", dissect_CaRevocationUrl_PDU, proto_ns_cert_exts, "ns-cert-exts.ca-revocation-url");
+	register_ber_oid_dissector("2.16.840.1.113730.1.7", dissect_CertRenewalUrl_PDU, proto_ns_cert_exts, "ns-cert-exts.cert-renewal-url");
+	register_ber_oid_dissector("2.16.840.1.113730.1.8", dissect_CaPolicyUrl_PDU, proto_ns_cert_exts, "ns-cert-exts.ca-policy-url");
+	register_ber_oid_dissector("2.16.840.1.113730.1.12", dissect_SslServerName_PDU, proto_ns_cert_exts, "ns-cert-exts.ssl-server-name");
+	register_ber_oid_dissector("2.16.840.1.113730.1.13", dissect_Comment_PDU, proto_ns_cert_exts, "ns-cert-exts.comment");
+}
+
diff -urN ethereal-0.10.6/epan/dissectors/packet-ntlmssp.c ethereal-0.10.7/epan/dissectors/packet-ntlmssp.c
--- ethereal-0.10.6/epan/dissectors/packet-ntlmssp.c	2004-08-12 17:42:00.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ntlmssp.c	2004-10-20 17:34:40.000000000 -0500
@@ -3,7 +3,7 @@
  * Devin Heitmueller <dheitmueller@netilla.com>
  * Copyright 2003, Tim Potter <tpot@samba.org>
  *
- * $Id: packet-ntlmssp.c 11600 2004-08-04 03:13:41Z guy $
+ * $Id: packet-ntlmssp.c 12116 2004-09-27 23:29:22Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -39,10 +39,10 @@
 #include "asn1.h"		/* XXX - needed for subid_t */
 #include "packet-gssapi.h"
 #include "packet-frame.h"
-#include "prefs.h"
-#include "crypt-rc4.h"
-#include "crypt-md4.h"
-#include "crypt-des.h"
+#include <epan/prefs.h>
+#include <epan/crypt-rc4.h>
+#include <epan/crypt-md4.h>
+#include <epan/crypt-des.h>
 #include "packet-dcerpc.h"
 
 #include "packet-ntlmssp.h"
@@ -718,8 +718,19 @@
 
 		if (name_type == 0) /* End of list */
 			break;
-	};
+	}
 
+	/*
+	 * XXX - Windows puts 4 bytes of additional stuff here.
+	 * Samba's smbclient doesn't.
+	 * Both of them appear to be able to connect to W2K SMB
+	 * servers.
+	 * Should we display the rest of the response as an
+	 * "extra data" item?
+	 *
+	 * XXX - we should also check whether we go past the length
+	 * of the response.
+	 */
 	return offset;
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-null.c ethereal-0.10.7/epan/dissectors/packet-null.c
--- ethereal-0.10.6/epan/dissectors/packet-null.c	2004-08-12 17:42:27.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-null.c	2004-10-20 17:34:57.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-null.c
  * Routines for null packet disassembly
  *
- * $Id: packet-null.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-null.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <epan/packet.h>
 #include "packet-null.h"
 #include <epan/atalk-utils.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-ip.h"
 #include "packet-ipx.h"
 #include "packet-osi.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-ospf.c ethereal-0.10.7/epan/dissectors/packet-ospf.c
--- ethereal-0.10.6/epan/dissectors/packet-ospf.c	2004-08-12 17:42:25.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ospf.c	2004-10-20 17:34:54.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for OSPF packet disassembly
  * (c) Copyright Hannes R. Boehm <hannes@boehm.org>
  *
- * $Id: packet-ospf.c 11492 2004-07-23 23:28:08Z jmayer $
+ * $Id: packet-ospf.c 12130 2004-09-29 00:52:45Z guy $
  *
  * At this time, this module is able to analyze OSPF
  * packets as specified in RFC2328. MOSPF (RFC1584) and other
@@ -44,8 +44,8 @@
 
 #include <glib.h>
 #include <epan/packet.h>
-#include "ipproto.h"
-#include "in_cksum.h"
+#include <epan/ipproto.h>
+#include <epan/in_cksum.h>
 #include "packet-rsvp.h"
 
 #define OSPF_VERSION_2 2
@@ -176,6 +176,11 @@
 
 };
 
+static const value_string mpls_link_stlv_ltype_str[] = {
+    {1, "Point-to-point"},
+    {2, "Multi-access"},
+    {0, NULL},
+};
 
 #define OSPF_V3_ROUTER_LSA_FLAG_B 0x01
 #define OSPF_V3_ROUTER_LSA_FLAG_E 0x02
@@ -208,6 +213,7 @@
 static gint ett_ospf_lsa_mpls_router = -1;
 static gint ett_ospf_lsa_mpls_link = -1;
 static gint ett_ospf_lsa_mpls_link_stlv = -1;
+static gint ett_ospf_lsa_mpls_link_stlv_admingrp = -1;
 static gint ett_ospf_lsa_oif_tna = -1;
 static gint ett_ospf_lsa_oif_tna_stlv = -1;
 
@@ -248,11 +254,13 @@
     OSPFF_LS_MPLS,
     OSPFF_LS_MPLS_ROUTERID,
 
+    OSPFF_LS_MPLS_LINKTYPE,
     OSPFF_LS_MPLS_LINKID,
     OSPFF_LS_MPLS_LOCAL_ADDR,
     OSPFF_LS_MPLS_REMOTE_ADDR,
     OSPFF_LS_MPLS_LOCAL_IFID,
     OSPFF_LS_MPLS_REMOTE_IFID,
+    OSPFF_LS_MPLS_LINKCOLOR,
 
     OSPFF_MAX
 };
@@ -343,6 +351,9 @@
      { "MPLS/TE Router ID", "ospf.mpls.routerid", FT_IPv4, BASE_NONE, NULL, 0x0,
        "", HFILL }},
 
+    {&ospf_filter[OSPFF_LS_MPLS_LINKTYPE],
+     { "MPLS/TE Link Type", "ospf.mpls.linktype", FT_UINT8, BASE_DEC, VALS(mpls_link_stlv_ltype_str), 0x0,
+       "MPLS/TE Link Type", HFILL }},
     {&ospf_filter[OSPFF_LS_MPLS_LINKID],
      { "MPLS/TE Link ID", "ospf.mpls.linkid", FT_IPv4, BASE_NONE, NULL, 0x0,
        "", HFILL }},
@@ -358,6 +369,9 @@
     {&ospf_filter[OSPFF_LS_MPLS_REMOTE_IFID],
      { "MPLS/TE Remote Interface Index", "ospf.mpls.remote_id", FT_UINT32,
        BASE_DEC, NULL, 0x0, "", HFILL }},
+    {&ospf_filter[OSPFF_LS_MPLS_LINKCOLOR],
+     { "MPLS/TE Link Resource Class/Color", "ospf.mpls.linkcolor", FT_UINT32,
+       BASE_HEX, NULL, 0x0, "MPLS/TE Link Resource Class/Color", HFILL }},
 
 
 
@@ -970,6 +984,7 @@
     proto_tree *mpls_tree;
     proto_tree *tlv_tree;
     proto_tree *stlv_tree;
+    proto_tree *stlv_admingrp_tree = NULL;
 
     int tlv_type;
     int tlv_length;
@@ -977,6 +992,7 @@
 
     int stlv_type, stlv_len, stlv_offset;
     char *stlv_name;
+    guint32 stlv_admingrp, mask;
     int i;
     guint8 switch_cap;
 
@@ -1023,22 +1039,23 @@
 
 		case MPLS_LINK_TYPE:
 		    ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
-					     "%s: %u", stlv_name,
-					     tvb_get_guint8(tvb, stlv_offset + 4));
+				     "%s: %u - %s", stlv_name,
+				     tvb_get_guint8(tvb, stlv_offset + 4),
+				     val_to_str(tvb_get_guint8(tvb, stlv_offset + 4), 
+					mpls_link_stlv_ltype_str, "Unknown Link Type"));
 		    stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 		    proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 					"TLV Type: %u: %s", stlv_type, stlv_name);
 		    proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 		    			stlv_len);
-		    proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, 1, "%s: %u", stlv_name,
-					tvb_get_guint8(tvb, stlv_offset + 4));
+		    proto_tree_add_item(stlv_tree, ospf_filter[OSPFF_LS_MPLS_LINKTYPE],
+					tvb, stlv_offset+4, 1,FALSE);
 		    break;
 
 		case MPLS_LINK_ID:
 		    ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
-					     "%s: %s (%x)", stlv_name,
-					     ip_to_str(tvb_get_ptr(tvb, stlv_offset + 4, 4)),
-					     tvb_get_ntohl(tvb, stlv_offset + 4));
+					     "%s: %s", stlv_name,
+					     ip_to_str(tvb_get_ptr(tvb, stlv_offset + 4, 4)));
 		    stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 		    proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 					"TLV Type: %u: %s", stlv_type, stlv_name);
@@ -1068,7 +1085,6 @@
 		    break;
 
 		case MPLS_LINK_TE_METRIC:
-		case MPLS_LINK_COLOR:
 		    ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 					     "%s: %u", stlv_name,
 					     tvb_get_ntohl(tvb, stlv_offset + 4));
@@ -1081,18 +1097,45 @@
 					tvb_get_ntohl(tvb, stlv_offset + 4));
 		    break;
 
+		case MPLS_LINK_COLOR:
+		    ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
+					     "%s: 0x%08x", stlv_name,
+					     tvb_get_ntohl(tvb, stlv_offset + 4));
+		    stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
+		    proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
+					"TLV Type: %u: %s", stlv_type, stlv_name);
+		    proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
+					stlv_len);
+		    stlv_admingrp = tvb_get_ntohl(tvb, stlv_offset + 4);
+		    mask = 1;
+		    ti = proto_tree_add_item(stlv_tree, ospf_filter[OSPFF_LS_MPLS_LINKCOLOR],
+                                        tvb, stlv_offset+4, 4, FALSE);
+		    stlv_admingrp_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv_admingrp);
+		    if (stlv_admingrp_tree == NULL)
+			return;
+		    for (i = 0 ; i < 32 ; i++) {
+			if ((stlv_admingrp & mask) != 0) {
+			    proto_tree_add_text(stlv_admingrp_tree, tvb, stlv_offset+4,
+				4, "Group %d", i);
+			}
+			mask <<= 1;
+		    }
+		    break;
+
 		case MPLS_LINK_MAX_BW:
 		case MPLS_LINK_MAX_RES_BW:
 		    ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
-					     "%s: %.10g", stlv_name,
-					     tvb_get_ntohieee_float(tvb, stlv_offset + 4));
+					     "%s: %.10g bytes/s (%.0f bits/s)", stlv_name,
+					     tvb_get_ntohieee_float(tvb, stlv_offset + 4),
+					     tvb_get_ntohieee_float(tvb, stlv_offset + 4) * 8.0);
 		    stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 		    proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 					"TLV Type: %u: %s", stlv_type, stlv_name);
 		    proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 					stlv_len);
-		    proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, 4, "%s: %.10g", stlv_name,
-					tvb_get_ntohieee_float(tvb, stlv_offset + 4));
+		    proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, 4, "%s: %.10g bytes/s (%.0f bits/s)", stlv_name,
+					tvb_get_ntohieee_float(tvb, stlv_offset + 4),
+					tvb_get_ntohieee_float(tvb, stlv_offset + 4) * 8.0);
 		    break;
 
 		case MPLS_LINK_UNRES_BW:
@@ -1248,8 +1291,15 @@
 
 		    break;
 		default:
-		    proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
+		    ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 					"Unknown Link sub-TLV: %u", stlv_type);
+		    stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
+		    proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
+					"TLV Type: %u: %s", stlv_type, stlv_name);
+		    proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
+					stlv_len);
+		    proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, stlv_len,
+					"TLV Value");
 		    break;
 		}
 		stlv_offset += ((stlv_len+4+3)/4)*4;
@@ -2308,6 +2358,7 @@
 	&ett_ospf_lsa_mpls_router,
 	&ett_ospf_lsa_mpls_link,
 	&ett_ospf_lsa_mpls_link_stlv,
+	&ett_ospf_lsa_mpls_link_stlv_admingrp,
         &ett_ospf_lsa_oif_tna,
         &ett_ospf_lsa_oif_tna_stlv
     };
diff -urN ethereal-0.10.6/epan/dissectors/packet-pagp.c ethereal-0.10.7/epan/dissectors/packet-pagp.c
--- ethereal-0.10.6/epan/dissectors/packet-pagp.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-pagp.c	2004-10-20 17:34:43.000000000 -0500
@@ -0,0 +1,578 @@
+/* packet-pagp.c
+ * Routines for PAgP (Port Aggregation Protocol - aka FEC) dissection
+ * Copyright 2004, Mark C. Brown <mbrown@nosila.net>
+ *
+ * $Id: packet-pagp.c 12157 2004-09-30 19:53:27Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * Copied from packet-slowprotocols.c
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <glib.h>
+#include <epan/packet.h>
+#include "etypes.h"
+#include "llcsaps.h"
+#include "ppptypes.h"
+#include <epan/address.h>
+#include <epan/addr_resolv.h>
+
+/* Offsets of fields within a PagP PDU */
+
+#define PAGP_VERSION_NUMBER		0
+
+#define PAGP_FLAGS			1
+#define PAGP_LOCAL_DEVICE_ID		2
+#define PAGP_LOCAL_LEARN_CAP		8
+#define PAGP_LOCAL_PORT_PRIORITY		9
+#define PAGP_LOCAL_SENT_PORT_IFINDEX	10
+#define PAGP_LOCAL_GROUP_CAPABILITY	14
+#define PAGP_LOCAL_GROUP_IFINDEX		18
+#define PAGP_PARTNER_DEVICE_ID		22
+#define PAGP_PARTNER_LEARN_CAP		28
+#define PAGP_PARTNER_PORT_PRIORITY		29
+#define PAGP_PARTNER_SENT_PORT_IFINDEX	30
+#define PAGP_PARTNER_GROUP_CAPABILITY	34
+#define PAGP_PARTNER_GROUP_IFINDEX		38
+#define PAGP_PARTNER_COUNT		42
+#define PAGP_NUM_TLVS			44
+#define PAGP_FIRST_TLV			46
+
+#define PAGP_FLUSH_LOCAL_DEVICE_ID		2
+#define PAGP_FLUSH_PARTNER_DEVICE_ID	8
+#define PAGP_FLUSH_TRANSACTION_ID	14
+
+/* PDU Versions */
+
+#define PAGP_INFO_PDU			1
+#define PAGP_FLUSH_PDU			2
+
+/* Flag bits */
+
+#define PAGP_FLAGS_SLOW_HELLO		0x01
+#define PAGP_FLAGS_AUTO_MODE		0x02
+#define PAGP_FLAGS_CONSISTENT_STATE	0x04
+
+/* TLV Types */
+
+
+#define PAGP_TLV_DEVICE_NAME		1
+#define PAGP_TLV_PORT_NAME		2
+#define PAGP_TLV_AGPORT_MAC		3
+#define PAGP_TLV_RESERVED		4
+
+/* Initialise the protocol and registered fields */
+
+static int proto_pagp = -1;
+
+static int hf_pagp_version_number = -1;
+
+static int hf_pagp_flags = -1;
+static int hf_pagp_flags_slow_hello = -1;
+static int hf_pagp_flags_auto_mode = -1;
+static int hf_pagp_flags_consistent_state = -1;
+static int hf_pagp_local_device_id = -1;
+static int hf_pagp_local_learn_cap = -1;
+static int hf_pagp_local_port_priority = -1;
+static int hf_pagp_local_sent_port_ifindex = -1;
+static int hf_pagp_local_group_capability = -1;
+static int hf_pagp_local_group_ifindex = -1;
+static int hf_pagp_partner_device_id = -1;
+static int hf_pagp_partner_learn_cap = -1;
+static int hf_pagp_partner_port_priority = -1;
+static int hf_pagp_partner_sent_port_ifindex = -1;
+static int hf_pagp_partner_group_capability = -1;
+static int hf_pagp_partner_group_ifindex = -1;
+static int hf_pagp_partner_count = -1;
+static int hf_pagp_num_tlvs = -1;
+static int hf_pagp_tlv = -1;
+static int hf_pagp_tlv_device_name = -1;
+static int hf_pagp_tlv_port_name = -1;
+static int hf_pagp_tlv_agport_mac = -1;
+
+static int hf_pagp_flush_local_device_id = -1;
+static int hf_pagp_flush_partner_device_id = -1;
+static int hf_pagp_flush_transaction_id = -1;
+
+/* Initialise the subtree pointers */
+
+static gint ett_pagp = -1;
+static gint ett_pagp_flags = -1;
+static gint ett_pagp_tlvs = -1;
+
+/* General declarations and macros */
+
+static const char initial_sep[] = " (";
+static const char cont_sep[] = ", ";
+
+static const value_string pdu_vers[] = {
+	{ 1, "Info PDU" },
+	{ 2, "Flush PDU" },
+	{ 0, NULL }
+};
+
+static const value_string learn_cap[] = {
+	{ 1, "Source-based Distribution" },
+	{ 2, "Arbitrary Distribution" },
+	{ 0, NULL }
+};
+
+static const value_string tlv_types[] = {
+	{ 1, "Device Name TLV" },
+	{ 2, "Physical Port Name TLV" },
+	{ 3, "Agport MAC Address" },
+	{ 4, "Reserved" },
+	{ 0, NULL }
+};
+
+static const true_false_string yesno = {
+	"Yes",
+	"No"
+};
+
+static const true_false_string automode = {
+	"Yes",
+	"Desirable Mode"
+};
+
+#define APPEND_BOOLEAN_FLAG(flag, item, string) \
+	if(flag) {							\
+		if(item)						\
+			proto_item_append_text(item, string, sep);	\
+		sep = cont_sep;						\
+	}
+
+/* Code to actually dissect the PAGP packets */
+static void
+dissect_pagp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+      guint32 raw_word;
+      guint16 raw_half_word;
+      guint16 num_tlvs;
+      guint16 tlv;
+      guint16 len;
+      guint16 i;
+      guint16 offset = PAGP_FIRST_TLV;
+      guint8  raw_octet;
+
+      guint8  flags;
+
+      struct _address device_id;
+
+      const guint8 *p_sys;
+
+      guchar *ch;
+
+      proto_tree *pagp_tree = NULL;
+      proto_item *pagp_item;
+      proto_tree *flags_tree;
+      proto_item *flags_item;
+      proto_tree *tlv_tree;
+      proto_item *tlv_item;
+
+
+      const char *sep;
+
+
+      device_id.type = AT_ETHER;
+      device_id.len = 6;
+
+      if (check_col(pinfo->cinfo, COL_PROTOCOL)) {
+	    col_set_str(pinfo->cinfo, COL_PROTOCOL, "PAGP"); /* PAGP Protocol */
+      }
+
+      if (check_col(pinfo->cinfo, COL_INFO)) {
+	    col_clear(pinfo->cinfo, COL_INFO);
+      }
+
+      pinfo->current_proto = "PAGP";
+
+      raw_octet = tvb_get_guint8(tvb, PAGP_VERSION_NUMBER);
+      if (tree) {
+	    pagp_item = proto_tree_add_protocol_format(tree, proto_pagp, tvb,
+				0, -1, "Port Aggregation Protocol");
+	    pagp_tree = proto_item_add_subtree(pagp_item, ett_pagp);
+	    proto_tree_add_uint(pagp_tree, hf_pagp_version_number, tvb,
+				PAGP_VERSION_NUMBER, 1, raw_octet);
+      } 
+      if (check_col(pinfo->cinfo, COL_INFO)) {
+         col_append_str(pinfo->cinfo, COL_INFO,
+  	       val_to_str(raw_octet, pdu_vers, "Unknown PDU version"));
+      }
+
+      if (raw_octet == PAGP_FLUSH_PDU) {
+
+         device_id.data = tvb_get_ptr(tvb, PAGP_FLUSH_LOCAL_DEVICE_ID, 6);
+         if (check_col(pinfo->cinfo, COL_INFO)) {
+            col_append_fstr(pinfo->cinfo, COL_INFO, "; Local DevID: %s",
+               address_to_str(&device_id));
+         }
+         if (tree) {
+	       proto_tree_add_ether(pagp_tree, hf_pagp_flush_local_device_id, tvb,
+			   PAGP_FLUSH_LOCAL_DEVICE_ID, 6, device_id.data);
+         }
+
+         device_id.data = tvb_get_ptr(tvb, PAGP_FLUSH_PARTNER_DEVICE_ID, 6);
+         if (check_col(pinfo->cinfo, COL_INFO)) {
+            col_append_fstr(pinfo->cinfo, COL_INFO, ", Partner DevID: %s",
+               address_to_str(&device_id));
+         }
+         if (tree) {
+	    proto_tree_add_ether(pagp_tree, hf_pagp_flush_partner_device_id, tvb,
+			   PAGP_FLUSH_PARTNER_DEVICE_ID, 6, device_id.data);
+         }
+
+         raw_word = tvb_get_ntohl(tvb, PAGP_FLUSH_TRANSACTION_ID);
+	 if (check_col(pinfo->cinfo, COL_INFO)) {
+            col_append_fstr(pinfo->cinfo, COL_INFO,
+		"; Transaction ID: 0x%x ", raw_word);
+	 }
+         if (tree) {
+	    proto_tree_add_uint(pagp_tree, hf_pagp_flush_transaction_id, tvb,
+			   PAGP_FLUSH_TRANSACTION_ID, 4, raw_word);
+	 }
+         return;
+      }
+
+      /* Info PDU */
+
+      flags = tvb_get_guint8(tvb, PAGP_FLAGS);
+      if (check_col(pinfo->cinfo, COL_INFO)) {
+         col_append_fstr(pinfo->cinfo, COL_INFO, "; Flags 0x%x", flags);
+      }
+
+      if (tree) {
+         flags_item = proto_tree_add_uint(pagp_tree, hf_pagp_flags, tvb,
+			PAGP_FLAGS, 1, flags);
+         flags_tree = proto_item_add_subtree(flags_item, ett_pagp_flags);
+
+	 sep = initial_sep;
+
+	 APPEND_BOOLEAN_FLAG(flags & PAGP_FLAGS_SLOW_HELLO, flags_item, "%sSlow Hello");
+	 proto_tree_add_boolean(flags_tree, hf_pagp_flags_slow_hello, tvb,
+			PAGP_FLAGS, 1, flags);
+
+	 APPEND_BOOLEAN_FLAG(flags & PAGP_FLAGS_AUTO_MODE, flags_item, "%sAuto Mode");
+	 proto_tree_add_boolean(flags_tree, hf_pagp_flags_auto_mode, tvb,
+			PAGP_FLAGS, 1, flags);
+
+	 APPEND_BOOLEAN_FLAG(flags & PAGP_FLAGS_CONSISTENT_STATE, flags_item,
+			"%sConsistent State");
+	 proto_tree_add_boolean(flags_tree, hf_pagp_flags_consistent_state, tvb,
+				PAGP_FLAGS, 1, flags);
+
+	 sep = cont_sep;
+	 if (sep != initial_sep) {
+            /* We put something in; put in the terminating ")" */
+            proto_item_append_text(flags_item, ")");
+	 }
+      }
+
+      device_id.data = tvb_get_ptr(tvb, PAGP_LOCAL_DEVICE_ID, 6);
+      if (check_col(pinfo->cinfo, COL_INFO)) {
+         col_append_fstr(pinfo->cinfo, COL_INFO, "; Local DevID: %s",
+            address_to_str(&device_id));
+      }
+      if (tree) {
+	    proto_tree_add_ether(pagp_tree, hf_pagp_local_device_id, tvb,
+				PAGP_LOCAL_DEVICE_ID, 6, device_id.data);
+      }
+
+      if (tree) {
+	    raw_octet = tvb_get_guint8(tvb, PAGP_LOCAL_LEARN_CAP);
+	    proto_tree_add_uint(pagp_tree, hf_pagp_local_learn_cap, tvb,
+				PAGP_LOCAL_LEARN_CAP, 1, raw_octet);
+
+	    raw_octet = tvb_get_guint8(tvb, PAGP_LOCAL_PORT_PRIORITY);
+	    proto_tree_add_uint(pagp_tree, hf_pagp_local_port_priority, tvb,
+				PAGP_LOCAL_PORT_PRIORITY, 1, raw_octet);
+
+	    raw_word = tvb_get_ntohl(tvb, PAGP_LOCAL_SENT_PORT_IFINDEX);
+	    proto_tree_add_uint(pagp_tree, hf_pagp_local_sent_port_ifindex, tvb,
+				PAGP_LOCAL_SENT_PORT_IFINDEX, 4, raw_word);
+
+	    raw_word = tvb_get_ntohl(tvb, PAGP_LOCAL_GROUP_CAPABILITY);
+	    proto_tree_add_uint(pagp_tree, hf_pagp_local_group_capability, tvb,
+				PAGP_LOCAL_GROUP_CAPABILITY, 4, raw_word);
+
+	    raw_word = tvb_get_ntohl(tvb, PAGP_LOCAL_GROUP_IFINDEX);
+	    proto_tree_add_uint(pagp_tree, hf_pagp_local_group_ifindex, tvb,
+				PAGP_LOCAL_GROUP_IFINDEX, 4, raw_word);
+      }
+
+      device_id.data = tvb_get_ptr(tvb, PAGP_PARTNER_DEVICE_ID, 6);
+      if (check_col(pinfo->cinfo, COL_INFO)) {
+         col_append_fstr(pinfo->cinfo, COL_INFO, ", Partner DevID: %s",
+  	       address_to_str(&device_id));
+      }
+      if (tree) {
+	    proto_tree_add_ether(pagp_tree, hf_pagp_partner_device_id, tvb,
+				PAGP_PARTNER_DEVICE_ID, 6, device_id.data);
+      }
+
+      if (tree) {
+	    raw_octet = tvb_get_guint8(tvb, PAGP_PARTNER_LEARN_CAP);
+	    proto_tree_add_uint(pagp_tree, hf_pagp_partner_learn_cap, tvb,
+				PAGP_PARTNER_LEARN_CAP, 1, raw_octet);
+
+	    raw_octet = tvb_get_guint8(tvb, PAGP_PARTNER_PORT_PRIORITY);
+	    proto_tree_add_uint(pagp_tree, hf_pagp_partner_port_priority, tvb,
+				PAGP_PARTNER_PORT_PRIORITY, 1, raw_octet);
+
+	    raw_word = tvb_get_ntohl(tvb, PAGP_PARTNER_SENT_PORT_IFINDEX);
+	    proto_tree_add_uint(pagp_tree, hf_pagp_partner_sent_port_ifindex, tvb,
+				PAGP_PARTNER_SENT_PORT_IFINDEX, 4, raw_word);
+
+	    raw_word = tvb_get_ntohl(tvb, PAGP_PARTNER_GROUP_CAPABILITY);
+	    proto_tree_add_uint(pagp_tree, hf_pagp_partner_group_capability, tvb,
+				PAGP_PARTNER_GROUP_CAPABILITY, 4, raw_word);
+
+	    raw_word = tvb_get_ntohl(tvb, PAGP_PARTNER_GROUP_IFINDEX);
+	    proto_tree_add_uint(pagp_tree, hf_pagp_partner_group_ifindex, tvb,
+				PAGP_PARTNER_GROUP_IFINDEX, 4, raw_word);
+
+	    raw_half_word = tvb_get_ntohs(tvb, PAGP_PARTNER_COUNT);
+	    proto_tree_add_uint(pagp_tree, hf_pagp_partner_count, tvb,
+				PAGP_PARTNER_COUNT, 2, raw_half_word);
+
+	    num_tlvs = tvb_get_ntohs(tvb, PAGP_NUM_TLVS);
+	    proto_tree_add_uint(pagp_tree, hf_pagp_num_tlvs, tvb,
+				PAGP_NUM_TLVS, 2, num_tlvs);
+
+	    /* dump TLV entries */
+
+	    for ( i = 1; i <= num_tlvs; i++ ) {
+
+		tlv = tvb_get_ntohs(tvb, offset);
+		len = tvb_get_ntohs(tvb, offset + 2);
+		if ( len == 0 ) {
+		   proto_tree_add_text(pagp_tree, tvb, offset, -1,
+			               "Unknown data - TLV len=0");
+		   return;
+		}
+
+		tlv_item = proto_tree_add_text (pagp_tree, tvb, offset, len,
+			   "TLV Entry #%d", i);
+                                                                                
+		tlv_tree = proto_item_add_subtree (tlv_item, ett_pagp_tlvs);
+		proto_tree_add_uint_format (tlv_tree, hf_pagp_tlv, tvb,
+			offset,2,tlv,"Type = %d (%s)", tlv,
+			val_to_str(tlv,tlv_types, "Unknown")) ;
+		proto_tree_add_text (tlv_tree, tvb, offset+2, 2,
+			"Length = %u bytes (includes Type and Length)", len) ;
+		if ( tvb_reported_length_remaining(tvb, offset) < len ) {
+		   proto_tree_add_text(tlv_tree, tvb, offset, -1,
+			               "TLV length too large");
+		   return;
+		}
+                                                                                
+		switch (tlv) {
+		   case PAGP_TLV_DEVICE_NAME:
+			ch = tvb_get_string(tvb, offset+4, len-4);
+			proto_tree_add_string(tlv_tree, hf_pagp_tlv_device_name,
+			   tvb, offset+4, len-4, ch);
+			g_free(ch);
+			break;
+		   case PAGP_TLV_PORT_NAME:
+			ch = tvb_get_string(tvb, offset+4, len-4);
+			proto_tree_add_string(tlv_tree, hf_pagp_tlv_port_name,
+			   tvb, offset+4, len-4, ch);
+			g_free(ch);
+			break;
+		   case PAGP_TLV_AGPORT_MAC:
+			p_sys = tvb_get_ptr(tvb, offset+4, 6);
+			proto_tree_add_ether(tlv_tree, hf_pagp_tlv_agport_mac,
+			   tvb, offset+4, 6, p_sys);
+			break;
+		   case PAGP_TLV_RESERVED:
+			break;
+		}
+
+		offset += len;
+
+	    }
+      }
+}
+
+
+/* Register the protocol with Ethereal */
+
+void
+proto_register_pagp(void)
+{
+/* Setup list of header fields */
+
+  static hf_register_info hf[] = {
+
+    { &hf_pagp_version_number,
+      { "Version",		"pagp.version",
+	FT_UINT8,	BASE_HEX,	VALS(pdu_vers),	0x0,
+      	"Identifies the PAgP PDU version: 1 = Info, 2 = Flush", HFILL }},
+
+    { &hf_pagp_flags,
+      { "Flags",		"pagp.flags",
+	FT_UINT8,	BASE_HEX,	NULL,	0x0,
+      	"Infomation flags", HFILL }},
+
+    { &hf_pagp_flags_slow_hello,
+      { "Slow Hello",		"pagp.flags.slowhello",
+	FT_BOOLEAN,	8,	TFS(&yesno),	PAGP_FLAGS_SLOW_HELLO,
+      	"1 = using Slow Hello, 0 = Slow Hello disabled", HFILL }},
+
+    { &hf_pagp_flags_auto_mode,
+      { "Auto Mode",		"pagp.flags.automode",
+	FT_BOOLEAN,	8,	TFS(&automode),	PAGP_FLAGS_AUTO_MODE,
+      	"1 = Auto Mode enabled, 0 = Desirable Mode", HFILL }},
+
+    { &hf_pagp_flags_consistent_state,
+      { "Consistent State",	"pagp.flags.state",
+	FT_BOOLEAN,	8,	NULL,	PAGP_FLAGS_CONSISTENT_STATE,
+      	"1 = Consistent State, 0 = Not Ready", HFILL }},
+
+    { &hf_pagp_local_device_id,
+      { "Local Device ID",	"pagp.localdevid",
+	FT_ETHER,	BASE_NONE,	NULL,	0x0,
+      	"Local device ID", HFILL }},
+
+    { &hf_pagp_local_learn_cap,
+      { "Local Learn Capability",	"pagp.localearncap",
+	FT_UINT8,	BASE_HEX,	VALS(learn_cap),	0x0,
+      	"Local learn capability", HFILL }},
+
+    { &hf_pagp_local_port_priority,
+      { "Local Port Hot Standby Priority", 	"pagp.localportpri",
+	FT_UINT8,	BASE_DEC,	NULL,	0x0,
+      	"The local hot standby priority assigned to this port", HFILL }},
+
+    { &hf_pagp_local_sent_port_ifindex,
+      { "Local Sent Port ifindex",	"pagp.localsentportifindex",
+	FT_UINT32,	BASE_DEC,	NULL,	0x0,
+      	"The interface index of the local port used to send PDU", HFILL }},
+
+    { &hf_pagp_local_group_capability,
+      { "Local Group Capability",	"pagp.localgroupcap",
+	FT_UINT32,	BASE_HEX,	NULL,	0x0,
+      	"The local group capability", HFILL }},
+
+    { &hf_pagp_local_group_ifindex,
+      { "Local Group ifindex",		"pagp.localgroupifindex",
+	FT_UINT32,	BASE_DEC,	NULL,	0x0,
+      	"The local group interface index", HFILL }},
+
+    { &hf_pagp_partner_device_id,
+      { "Partner Device ID",		"pagp.partnerdevid",
+	FT_ETHER,	BASE_NONE,	NULL,	0x0,
+      	"Remote Device ID (MAC)", HFILL }},
+
+    { &hf_pagp_partner_learn_cap,
+      { "Partner Learn Capability",	"pagp.partnerlearncap",
+	FT_UINT8,	BASE_HEX,	VALS(learn_cap),	0x0,
+      	"Remote learn capability", HFILL }},
+
+    { &hf_pagp_partner_port_priority,
+      { "Partner Port Hot Standby Priority",	"pagp.partnerportpri",
+	FT_UINT8,	BASE_DEC,	NULL,	0x0,
+      	"Remote port priority", HFILL }},
+
+    { &hf_pagp_partner_sent_port_ifindex,
+      { "Partner Sent Port ifindex",	"pagp.partnersentportifindex",
+	FT_UINT32,	BASE_DEC,	NULL,	0x0,
+      	"Remote port interface index sent", HFILL }},
+
+    { &hf_pagp_partner_group_capability,
+      { "Partner Group Capability",	"pagp.partnergroupcap",
+	FT_UINT32,	BASE_HEX,	NULL,	0x0,
+      	"Remote group capability", HFILL }},
+
+    { &hf_pagp_partner_group_ifindex,
+      { "Partner Group ifindex",	"pagp.partnergroupifindex",
+	FT_UINT32,	BASE_DEC,	NULL,	0x0,
+      	"Remote group interface index", HFILL }},
+
+    { &hf_pagp_partner_count,
+      { "Partner Count",		"pagp.partnercount",
+	FT_UINT16,	BASE_DEC,	NULL,	0x0,
+      	"Partner count", HFILL }},
+
+    { &hf_pagp_num_tlvs,
+      { "Number of TLVs",		"pagp.numtlvs",
+	FT_UINT16,	BASE_DEC,	NULL,	0x0,
+      	"Number of TLVs following", HFILL }},
+
+    { &hf_pagp_tlv,
+      { "Entry",		"pagp.tlv",
+	FT_UINT16,	BASE_DEC,	NULL,	0x0,
+      	"Type/Length/Value", HFILL }},
+
+    { &hf_pagp_tlv_device_name,
+      { "Device Name",		"pagp.tlvdevname",
+	FT_STRING,	BASE_NONE,	NULL,	0x0,
+      	"sysName of device", HFILL }},
+
+    { &hf_pagp_tlv_port_name,
+      { "Physical Port Name",		"pagp.tlvportname",
+	FT_STRING,	BASE_NONE,	NULL,	0x0,
+      	"Name of port used to send PDU", HFILL }},
+
+    { &hf_pagp_tlv_agport_mac,
+      { "Agport MAC Address",		"pagp.tlvagportmac",
+	FT_ETHER,	BASE_NONE,	NULL,	0x0,
+      	"Source MAC on frames for this aggregate", HFILL }},
+
+    { &hf_pagp_flush_transaction_id,
+      { "Transaction ID",		"pagp.transid",
+	FT_UINT32,	BASE_HEX,	NULL,	0x0,
+      	"Flush transaction ID", HFILL }},
+
+  };
+
+  /* Setup protocol subtree array */
+
+  static gint *ett[] = {
+    &ett_pagp,
+    &ett_pagp_flags,
+    &ett_pagp_tlvs,
+  };
+
+  /* Register the protocol name and description */
+
+  proto_pagp = proto_register_protocol("Port Aggregation Protocol", "PAGP", "pagp");
+
+  /* Required function calls to register the header fields and subtrees used */
+
+  proto_register_field_array(proto_pagp, hf, array_length(hf));
+  proto_register_subtree_array(ett, array_length(ett));
+
+}
+
+
+void
+proto_reg_handoff_pagp(void)
+{
+  dissector_handle_t pagp_handle;
+
+  pagp_handle = create_dissector_handle(dissect_pagp, proto_pagp);
+  dissector_add("llc.cisco_pid", 0x0104, pagp_handle);
+}
diff -urN ethereal-0.10.6/epan/dissectors/packet-per.c ethereal-0.10.7/epan/dissectors/packet-per.c
--- ethereal-0.10.6/epan/dissectors/packet-per.c	2004-08-12 17:42:06.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-per.c	2004-10-20 17:34:44.000000000 -0500
@@ -7,7 +7,7 @@
  * Routines for dissection of ASN.1 Aligned PER
  * 2003  Ronnie Sahlberg
  *
- * $Id: packet-per.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-per.c 12281 2004-10-12 17:51:13Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -38,7 +38,7 @@
 #include <stdio.h>
 #include <string.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-per.h"
 
 
@@ -278,6 +278,7 @@
 	guint32 old_offset;
 
 DEBUG_ENTRY("dissect_per_restricted_character_string");
+
 	/* xx.x if the length is 0 bytes there will be no encoding */
 	if(max_len==0){
 		return offset;
@@ -289,46 +290,6 @@
 	}
 
 
-	/* xx.x */
-	length=max_len;
-	if(min_len!=max_len){
-		proto_tree *etr = NULL;
-
-		if(display_internal_per_fields){
-			etr=tree;
-		}
-		offset=dissect_per_constrained_integer(tvb, offset, pinfo,
-			etr, hf_per_octet_string_length, min_len, max_len,
-			&length, NULL, FALSE);
-	}
-
-
-	/* xx.x if length is fixed or constrained to be less than or equal to
-	   two bytes, then it will not be byte aligned. */
-	byte_aligned=TRUE;
-	if((min_len==max_len)&&(max_len<=2)){
-		byte_aligned=FALSE;
-	}
-	if(max_len<2){
-		byte_aligned=FALSE;
-	}
-	if(!length){  
-		/* there is no string at all, so dont do any byte alignment */
-		byte_aligned=FALSE;
-	}
-
-	if(byte_aligned){
-		if(offset&0x07){
-			offset=(offset&0xfffffff8)+8;
-		}
-	}
-
-
-	if(length>=1024){
-		PER_NOT_DECODED_YET("restricted char string too long");
-		length=1024;
-	}
-
 	/* 27.5.2 depending of the alphabet length, find how many bits
 	   are used to encode each character */
 /* unaligned PER
@@ -360,6 +321,56 @@
 		bits_per_char=8;
 	}
 
+
+	byte_aligned=TRUE;
+	if((min_len==max_len)&&(max_len<=2)){
+		byte_aligned=FALSE;
+	}
+	if((max_len!=-1)&&(max_len<2)){
+		byte_aligned=FALSE;
+	}
+
+	/* xx.x */
+	length=max_len;
+	if(max_len==-1){
+		proto_tree *etr = NULL;
+
+		if(display_internal_per_fields){
+			etr=tree;
+		}
+		offset = dissect_per_length_determinant(tvb, offset, pinfo, etr, 
+				hf_per_octet_string_length, &length);
+		/* the unconstrained strings are always byte aligned (27.6.3)*/
+		byte_aligned=TRUE;
+	} else if(min_len!=max_len){
+		proto_tree *etr = NULL;
+
+		if(display_internal_per_fields){
+			etr=tree;
+		}
+		offset=dissect_per_constrained_integer(tvb, offset, pinfo,
+			etr, hf_per_octet_string_length, min_len, max_len,
+			&length, NULL, FALSE);
+	}
+
+	if(!length){
+		/* there is no string at all, so dont do any byte alignment */
+		byte_aligned=FALSE;
+	}
+
+	if(byte_aligned){
+		if(offset&0x07){
+			offset=(offset&0xfffffff8)+8;
+		}
+	}
+
+
+	if(length>=1024){
+		PER_NOT_DECODED_YET("restricted char string too long");
+		length=1024;
+	}
+
+
 	old_offset=offset;
 	for(char_pos=0;char_pos<length;char_pos++){
 		guchar val;
@@ -371,10 +382,18 @@
 			offset=dissect_per_boolean(tvb, offset, pinfo, tree, -1, &bit, NULL);
 			val=(val<<1)|bit;
 		}
-		if (val >= alphabet_length)
-			str[char_pos] = '?';	/* XXX - how to mark this? */
-		else
-			str[char_pos]=alphabet[val];
+		/* ALIGNED PER does not do any remapping of chars if 
+		   bitsperchar is 8 
+		*/
+		if(bits_per_char==8){
+			str[char_pos]=val;
+		} else {
+			if (val < alphabet_length){
+				str[char_pos]=alphabet[val];
+			} else {
+				str[char_pos] = '?';	/* XXX - how to mark this? */
+			}
+		}
 	}
 	str[char_pos]=0;
 	proto_tree_add_string(tree, hf_index, tvb, (old_offset>>3), (offset>>3)-(old_offset>>3), str);
@@ -886,7 +905,7 @@
 	   22.8 extension marker == 1
 */
 guint32
-dissect_per_choice(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *tree, int hf_index, gint ett_index, per_choice_t *choice, char *name, guint32 *value)
+dissect_per_choice(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *tree, int hf_index, gint ett_index, const per_choice_t *choice, char *name, guint32 *value)
 {
 	gboolean extension_present, extension_flag;
 	int extension_root_entries;
@@ -1037,7 +1056,7 @@
 
 
 static char *
-index_get_optional_name(per_sequence_t *sequence, int index)
+index_get_optional_name(const per_sequence_t *sequence, int index)
 {
 	int i;
 
@@ -1053,7 +1072,7 @@
 }
 
 static char *
-index_get_extension_name(per_sequence_t *sequence, int index)
+index_get_extension_name(const per_sequence_t *sequence, int index)
 {
 	int i;
 
@@ -1081,7 +1100,7 @@
 	   18.9
 */
 guint32
-dissect_per_sequence(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *parent_tree, int hf_index, gint ett_index, per_sequence_t *sequence)
+dissect_per_sequence(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *parent_tree, int hf_index, gint ett_index, const per_sequence_t *sequence)
 {
 	gboolean extension_present, extension_flag, optional_field_flag;
 	proto_item *item;
diff -urN ethereal-0.10.6/epan/dissectors/packet-per.h ethereal-0.10.7/epan/dissectors/packet-per.h
--- ethereal-0.10.6/epan/dissectors/packet-per.h	2004-08-12 17:42:06.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-per.h	2004-10-20 17:34:44.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for dissection of ASN.1 Aligned PER
  * 2003  Ronnie Sahlberg
  *
- * $Id: packet-per.h 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-per.h 12253 2004-10-11 06:38:12Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -90,9 +90,9 @@
 
 extern guint32 dissect_per_constrained_integer(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *tree, int hf_index, guint32 min, guint32 max, guint32 *value, proto_item **item, gboolean has_extension);
 
-extern guint32 dissect_per_choice(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *tree, int hf_index, gint ett_index, per_choice_t *choice, char *name, guint32 *value);
+extern guint32 dissect_per_choice(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *tree, int hf_index, gint ett_index, const per_choice_t *choice, char *name, guint32 *value);
 
-extern guint32 dissect_per_sequence(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *parent_tree, int hf_index, gint ett_index, per_sequence_t *sequence);
+extern guint32 dissect_per_sequence(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *parent_tree, int hf_index, gint ett_index, const per_sequence_t *sequence);
 
 extern guint32 dissect_per_octet_string(tvbuff_t *tvb, guint32 offset, packet_info *pinfo, proto_tree *tree, int hf_index, int min_len, int max_len, guint32 *value_offset, guint32 *value_len);
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-pgm.c ethereal-0.10.7/epan/dissectors/packet-pgm.c
--- ethereal-0.10.6/epan/dissectors/packet-pgm.c	2004-08-12 17:42:02.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-pgm.c	2004-10-20 17:34:41.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-pgm.c
  * Routines for PGM packet disassembly, RFC 3208
  *
- * $Id: packet-pgm.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-pgm.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Copyright (c) 2000 by Talarian Corp
  *
@@ -34,12 +34,12 @@
 #include <time.h>
 #include <string.h>
 #include <epan/packet.h>
-#include "afn.h"
-#include "ipproto.h"
-#include "in_cksum.h"
+#include <epan/afn.h>
+#include <epan/ipproto.h>
+#include <epan/in_cksum.h>
 #include <epan/addr_resolv.h>
 #include <epan/strutil.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #include <epan/proto.h>
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-pim.c ethereal-0.10.7/epan/dissectors/packet-pim.c
--- ethereal-0.10.6/epan/dissectors/packet-pim.c	2004-08-12 17:42:09.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-pim.c	2004-10-20 17:34:46.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for PIM disassembly
  * (c) Copyright Jun-ichiro itojun Hagino <itojun@itojun.org>
  *
- * $Id: packet-pim.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-pim.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,10 +36,10 @@
 #endif
 
 #include <epan/packet.h>
-#include "ipproto.h"
-#include "afn.h"
+#include <epan/ipproto.h>
+#include <epan/afn.h>
 #include "packet-ipv6.h"
-#include "in_cksum.h"
+#include <epan/in_cksum.h>
 
 #define PIM_TYPE(x)	((x) & 0x0f)
 #define PIM_VER(x)	(((x) & 0xf0) >> 4)
diff -urN ethereal-0.10.6/epan/dissectors/packet-pkcs1.c ethereal-0.10.7/epan/dissectors/packet-pkcs1.c
--- ethereal-0.10.6/epan/dissectors/packet-pkcs1.c	2004-08-12 17:42:01.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-pkcs1.c	2004-10-20 17:34:41.000000000 -0500
@@ -1,15 +1,14 @@
 /* Do not modify this file.                                                   */
 /* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-pkcs1.c                                                             */
+/* ./packet-pkcs1.c                                                           */
 /* ../../tools/asn2eth.py -X -b -p pkcs1 -c pkcs1.cnf -s packet-pkcs1-template PKCS1.asn */
 
 /* Input file: packet-pkcs1-template.c */
-/* Include files: packet-pkcs1-hf.c, packet-pkcs1-ett.c, packet-pkcs1-fn.c, packet-pkcs1-hfarr.c, packet-pkcs1-ettarr.c, packet-pkcs1-val.h */
 
 /* packet-pkcs1.c
  * Routines for PKCS#1/RFC2313 packet dissection
  *
- * $Id: packet-pkcs1-template.c,v 1.2 2004/05/25 21:07:43 guy Exp $
+ * $Id: packet-pkcs1-template.c 12203 2004-10-05 09:18:55Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -53,11 +52,6 @@
 
 /*--- Included file: packet-pkcs1-hf.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-pkcs1-hf.c                                                          */
-/* ../../tools/asn2eth.py -X -b -p pkcs1 -c pkcs1.cnf -s packet-pkcs1-template PKCS1.asn */
-
 static int hf_pkcs1_modulus = -1;                 /* INTEGER */
 static int hf_pkcs1_publicExponent = -1;          /* INTEGER */
 static int hf_pkcs1_version = -1;                 /* Version */
@@ -77,11 +71,6 @@
 
 /*--- Included file: packet-pkcs1-ett.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-pkcs1-ett.c                                                         */
-/* ../../tools/asn2eth.py -X -b -p pkcs1 -c pkcs1.cnf -s packet-pkcs1-template PKCS1.asn */
-
 static gint ett_pkcs1_RSAPublicKey = -1;
 static gint ett_pkcs1_RSAPrivateKey = -1;
 static gint ett_pkcs1_DigestInfo = -1;
@@ -92,11 +81,6 @@
 
 /*--- Included file: packet-pkcs1-fn.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-pkcs1-fn.c                                                          */
-/* ../../tools/asn2eth.py -X -b -p pkcs1 -c pkcs1.cnf -s packet-pkcs1-template PKCS1.asn */
-
 /*--- Fields for imported types ---*/
 
 
@@ -133,7 +117,7 @@
   return dissect_pkcs1_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_pkcs1_coefficient);
 }
 
-static ber_sequence RSAPublicKey_sequence[] = {
+static const ber_sequence RSAPublicKey_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_modulus },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_publicExponent },
   { 0, 0, 0, NULL }
@@ -159,7 +143,7 @@
   return dissect_pkcs1_Version(FALSE, tvb, offset, pinfo, tree, hf_pkcs1_version);
 }
 
-static ber_sequence RSAPrivateKey_sequence[] = {
+static const ber_sequence RSAPrivateKey_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_version },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_modulus },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_publicExponent },
@@ -203,7 +187,7 @@
   return dissect_pkcs1_Digest(FALSE, tvb, offset, pinfo, tree, hf_pkcs1_digest);
 }
 
-static ber_sequence DigestInfo_sequence[] = {
+static const ber_sequence DigestInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_digestAlgorithm },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_digest },
   { 0, 0, 0, NULL }
@@ -229,11 +213,6 @@
 
 /*--- Included file: packet-pkcs1-hfarr.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-pkcs1-hfarr.c                                                       */
-/* ../../tools/asn2eth.py -X -b -p pkcs1 -c pkcs1.cnf -s packet-pkcs1-template PKCS1.asn */
-
     { &hf_pkcs1_modulus,
       { "modulus", "pkcs1.modulus",
         FT_INT32, BASE_DEC, NULL, 0,
@@ -288,11 +267,6 @@
 
 /*--- Included file: packet-pkcs1-ettarr.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-pkcs1-ettarr.c                                                      */
-/* ../../tools/asn2eth.py -X -b -p pkcs1 -c pkcs1.cnf -s packet-pkcs1-template PKCS1.asn */
-
     &ett_pkcs1_RSAPublicKey,
     &ett_pkcs1_RSAPrivateKey,
     &ett_pkcs1_DigestInfo,
diff -urN ethereal-0.10.6/epan/dissectors/packet-pkcs1.h ethereal-0.10.7/epan/dissectors/packet-pkcs1.h
--- ethereal-0.10.6/epan/dissectors/packet-pkcs1.h	2004-08-12 17:42:01.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-pkcs1.h	2004-10-20 17:34:41.000000000 -0500
@@ -1,15 +1,14 @@
 /* Do not modify this file.                                                   */
 /* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-pkcs1.h                                                             */
+/* ./packet-pkcs1.h                                                           */
 /* ../../tools/asn2eth.py -X -b -p pkcs1 -c pkcs1.cnf -s packet-pkcs1-template PKCS1.asn */
 
 /* Input file: packet-pkcs1-template.h */
-/* Include files: packet-pkcs1-exp.h, packet-pkcs1-valexp.h */
 
 /* packet-pkcs1.h
  * Routines for PKCS#1/RFC2313 packet dissection
  *
- * $Id: packet-pkcs1-template.h,v 1.1 2004/05/24 08:42:29 sahlberg Exp $
+ * $Id: packet-pkcs1-template.h 12203 2004-10-05 09:18:55Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,11 +35,6 @@
 
 /*--- Included file: packet-pkcs1-exp.h ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-pkcs1-exp.h                                                         */
-/* ../../tools/asn2eth.py -X -b -p pkcs1 -c pkcs1.cnf -s packet-pkcs1-template PKCS1.asn */
-
 int dissect_pkcs1_RSAPublicKey(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
 int dissect_pkcs1_RSAPrivateKey(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
 int dissect_pkcs1_DigestInfo(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
diff -urN ethereal-0.10.6/epan/dissectors/packet-pkinit.c ethereal-0.10.7/epan/dissectors/packet-pkinit.c
--- ethereal-0.10.6/epan/dissectors/packet-pkinit.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-pkinit.c	2004-10-20 17:34:45.000000000 -0500
@@ -0,0 +1,270 @@
+/* Do not modify this file.                                                   */
+/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
+/* ./packet-pkinit.c                                                          */
+/* ../../tools/asn2eth.py -e -X -b -p pkinit -c pkinit.cnf -s packet-pkinit-template PKINIT.asn */
+
+/* Input file: packet-pkinit-template.c */
+
+/* packet-pkinit.c
+ * Routines for PKINIT packet dissection
+ *
+ * $Id: packet-pkinit-template.c 12203 2004-10-05 09:18:55Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <epan/packet.h>
+#include <epan/conversation.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "packet-ber.h"
+#include "packet-pkinit.h"
+#include "packet-cms.h"
+#include "packet-pkix1explicit.h"
+
+#define PNAME  "PKINIT"
+#define PSNAME "PKInit"
+#define PFNAME "pkinit"
+
+/* Initialize the protocol and registered fields */
+static int proto_pkinit = -1;
+
+/*--- Included file: packet-pkinit-hf.c ---*/
+
+static int hf_pkinit_signedAuthPack = -1;         /* ContentInfo */
+static int hf_pkinit_trustedCertifiers = -1;      /* SEQUNCE_OF_TrustedCA */
+static int hf_pkinit_trustedCertifiers_item = -1;  /* TrustedCA */
+static int hf_pkinit_kdcCert = -1;                /* IssuerAndSerialNumber */
+static int hf_pkinit_caName = -1;                 /* Name */
+static int hf_pkinit_issuerAndSerial = -1;        /* IssuerAndSerialNumber */
+static int hf_pkinit_dhSignedData = -1;           /* ContentInfo */
+static int hf_pkinit_encKeyPack = -1;             /* ContentInfo */
+
+/*--- End of included file: packet-pkinit-hf.c ---*/
+
+
+/* Initialize the subtree pointers */
+
+/*--- Included file: packet-pkinit-ett.c ---*/
+
+static gint ett_pkinit_PaPkAsReq = -1;
+static gint ett_pkinit_SEQUNCE_OF_TrustedCA = -1;
+static gint ett_pkinit_TrustedCA = -1;
+static gint ett_pkinit_PaPkAsRep = -1;
+
+/*--- End of included file: packet-pkinit-ett.c ---*/
+
+
+
+
+/*--- Included file: packet-pkinit-fn.c ---*/
+
+/*--- Fields for imported types ---*/
+
+static int dissect_signedAuthPack(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_cms_ContentInfo(FALSE, tvb, offset, pinfo, tree, hf_pkinit_signedAuthPack);
+}
+static int dissect_kdcCert(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_cms_IssuerAndSerialNumber(FALSE, tvb, offset, pinfo, tree, hf_pkinit_kdcCert);
+}
+static int dissect_caName(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_pkix1explicit_Name(FALSE, tvb, offset, pinfo, tree, hf_pkinit_caName);
+}
+static int dissect_issuerAndSerial(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_cms_IssuerAndSerialNumber(FALSE, tvb, offset, pinfo, tree, hf_pkinit_issuerAndSerial);
+}
+static int dissect_dhSignedData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_cms_ContentInfo(FALSE, tvb, offset, pinfo, tree, hf_pkinit_dhSignedData);
+}
+static int dissect_encKeyPack(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_cms_ContentInfo(FALSE, tvb, offset, pinfo, tree, hf_pkinit_encKeyPack);
+}
+
+
+static const value_string TrustedCA_vals[] = {
+  {   0, "caName" },
+  {   2, "issuerAndSerial" },
+  { 0, NULL }
+};
+
+static const ber_choice TrustedCA_choice[] = {
+  {   0, BER_CLASS_CON, 0, 0, dissect_caName },
+  {   2, BER_CLASS_CON, 2, 0, dissect_issuerAndSerial },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_pkinit_TrustedCA(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              TrustedCA_choice, hf_index, ett_pkinit_TrustedCA);
+
+  return offset;
+}
+static int dissect_trustedCertifiers_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_pkinit_TrustedCA(FALSE, tvb, offset, pinfo, tree, hf_pkinit_trustedCertifiers_item);
+}
+
+static const ber_sequence SEQUNCE_OF_TrustedCA_sequence_of[1] = {
+  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_trustedCertifiers_item },
+};
+
+static int
+dissect_pkinit_SEQUNCE_OF_TrustedCA(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_TrustedCA_sequence_of, hf_index, ett_pkinit_SEQUNCE_OF_TrustedCA);
+
+  return offset;
+}
+static int dissect_trustedCertifiers(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_pkinit_SEQUNCE_OF_TrustedCA(FALSE, tvb, offset, pinfo, tree, hf_pkinit_trustedCertifiers);
+}
+
+static const ber_sequence PaPkAsReq_sequence[] = {
+  { BER_CLASS_CON, 0, 0, dissect_signedAuthPack },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_trustedCertifiers },
+  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_kdcCert },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_pkinit_PaPkAsReq(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                PaPkAsReq_sequence, hf_index, ett_pkinit_PaPkAsReq);
+
+  return offset;
+}
+
+
+static const value_string PaPkAsRep_vals[] = {
+  {   0, "dhSignedData" },
+  {   1, "encKeyPack" },
+  { 0, NULL }
+};
+
+static const ber_choice PaPkAsRep_choice[] = {
+  {   0, BER_CLASS_CON, 0, 0, dissect_dhSignedData },
+  {   1, BER_CLASS_CON, 1, 0, dissect_encKeyPack },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_pkinit_PaPkAsRep(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              PaPkAsRep_choice, hf_index, ett_pkinit_PaPkAsRep);
+
+  return offset;
+}
+
+
+/*--- End of included file: packet-pkinit-fn.c ---*/
+
+
+int
+dissect_pkinit_PA_PK_AS_REQ(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  offset = dissect_pkinit_PaPkAsReq(FALSE, tvb, offset, pinfo, tree, -1);
+  return offset;
+}
+
+int
+dissect_pkinit_PA_PK_AS_REP(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  offset = dissect_pkinit_PaPkAsRep(FALSE, tvb, offset, pinfo, tree, -1);
+  return offset;
+}
+
+
+/*--- proto_register_pkinit ----------------------------------------------*/
+void proto_register_pkinit(void) {
+
+  /* List of fields */
+  static hf_register_info hf[] = {
+
+/*--- Included file: packet-pkinit-hfarr.c ---*/
+
+    { &hf_pkinit_signedAuthPack,
+      { "signedAuthPack", "pkinit.signedAuthPack",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "PaPkAsReq/signedAuthPack", HFILL }},
+    { &hf_pkinit_trustedCertifiers,
+      { "trustedCertifiers", "pkinit.trustedCertifiers",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "PaPkAsReq/trustedCertifiers", HFILL }},
+    { &hf_pkinit_trustedCertifiers_item,
+      { "Item", "pkinit.trustedCertifiers_item",
+        FT_UINT32, BASE_DEC, VALS(TrustedCA_vals), 0,
+        "PaPkAsReq/trustedCertifiers/_item", HFILL }},
+    { &hf_pkinit_kdcCert,
+      { "kdcCert", "pkinit.kdcCert",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "PaPkAsReq/kdcCert", HFILL }},
+    { &hf_pkinit_caName,
+      { "caName", "pkinit.caName",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "TrustedCA/caName", HFILL }},
+    { &hf_pkinit_issuerAndSerial,
+      { "issuerAndSerial", "pkinit.issuerAndSerial",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "TrustedCA/issuerAndSerial", HFILL }},
+    { &hf_pkinit_dhSignedData,
+      { "dhSignedData", "pkinit.dhSignedData",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "PaPkAsRep/dhSignedData", HFILL }},
+    { &hf_pkinit_encKeyPack,
+      { "encKeyPack", "pkinit.encKeyPack",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "PaPkAsRep/encKeyPack", HFILL }},
+
+/*--- End of included file: packet-pkinit-hfarr.c ---*/
+
+  };
+
+  /* List of subtrees */
+  static gint *ett[] = {
+
+/*--- Included file: packet-pkinit-ettarr.c ---*/
+
+    &ett_pkinit_PaPkAsReq,
+    &ett_pkinit_SEQUNCE_OF_TrustedCA,
+    &ett_pkinit_TrustedCA,
+    &ett_pkinit_PaPkAsRep,
+
+/*--- End of included file: packet-pkinit-ettarr.c ---*/
+
+  };
+
+  /* Register protocol */
+  proto_pkinit = proto_register_protocol(PNAME, PSNAME, PFNAME);
+
+  /* Register fields and subtrees */
+  proto_register_field_array(proto_pkinit, hf, array_length(hf));
+  proto_register_subtree_array(ett, array_length(ett));
+
+}
+
+
+/*--- proto_reg_handoff_pkinit -------------------------------------------*/
+void proto_reg_handoff_pkinit(void) {
+}
+
diff -urN ethereal-0.10.6/epan/dissectors/packet-pkinit.h ethereal-0.10.7/epan/dissectors/packet-pkinit.h
--- ethereal-0.10.6/epan/dissectors/packet-pkinit.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-pkinit.h	2004-10-20 17:34:45.000000000 -0500
@@ -0,0 +1,41 @@
+/* Do not modify this file.                                                   */
+/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
+/* ./packet-pkinit.h                                                          */
+/* ../../tools/asn2eth.py -e -X -b -p pkinit -c pkinit.cnf -s packet-pkinit-template PKINIT.asn */
+
+/* Input file: packet-pkinit-template.h */
+
+/* packet-pkinit.h
+ * Routines for PKINIT packet dissection
+ *
+ * $Id: packet-pkinit-template.h 12203 2004-10-05 09:18:55Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef PACKET_PKINIT_H
+#define PACKET_PKINIT_H
+
+int dissect_pkinit_PA_PK_AS_REQ(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset);
+int dissect_pkinit_PA_PK_AS_REP(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset);
+
+/*#include "packet-pkinit-exp.h"*/
+
+#endif  /* PACKET_PKINIT_H */
+
diff -urN ethereal-0.10.6/epan/dissectors/packet-pkix1explicit.c ethereal-0.10.7/epan/dissectors/packet-pkix1explicit.c
--- ethereal-0.10.6/epan/dissectors/packet-pkix1explicit.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-pkix1explicit.c	2004-10-20 17:34:59.000000000 -0500
@@ -0,0 +1,210 @@
+/* Do not modify this file.                                                   */
+/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
+/* ./packet-pkix1explicit.c                                                   */
+/* ../../tools/asn2eth.py -e -X -b -p pkix1explicit -c pkix1explicit.cnf -s packet-pkix1explicit-template PKIX1EXPLICIT93.asn */
+
+/* Input file: packet-pkix1explicit-template.c */
+
+#define BER_UNI_TAG_TeletexString	    20  /* workaround bug in asn2eth */
+
+/* packet-pkix1explicit.c
+ * Routines for PKIX1Explitic packet dissection
+ *
+ * $Id: packet-pkix1explicit-template.c 12203 2004-10-05 09:18:55Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <epan/packet.h>
+#include <epan/conversation.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "packet-ber.h"
+#include "packet-pkix1explicit.h"
+#include "packet-x509af.h"
+#include "packet-x509if.h"
+
+#define PNAME  "PKIX1Explitit"
+#define PSNAME "PKIX1EXPLICIT"
+#define PFNAME "pkix1explicit"
+
+/* Initialize the protocol and registered fields */
+static int proto_pkix1explicit = -1;
+
+/*--- Included file: packet-pkix1explicit-hf.c ---*/
+
+static int hf_pkix1explicit_type = -1;            /* TeletexString */
+static int hf_pkix1explicit_value = -1;           /* TeletexString */
+
+/*--- End of included file: packet-pkix1explicit-hf.c ---*/
+
+
+/* Initialize the subtree pointers */
+
+/*--- Included file: packet-pkix1explicit-ett.c ---*/
+
+static gint ett_pkix1explicit_TeletexDomainDefinedAttribute = -1;
+
+/*--- End of included file: packet-pkix1explicit-ett.c ---*/
+
+
+
+int
+dissect_pkix1explicit_CertificateSerialNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_x509af_CertificateSerialNumber(implicit_tag, tvb, offset, pinfo, tree, hf_index);
+
+  return offset;
+}
+
+int
+dissect_pkix1explicit_Name(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index) {
+  offset = dissect_x509if_Name(implicit_tag, tvb, offset, pinfo, tree, hf_index);
+
+  return offset;
+}
+
+int
+dissect_pkix1explicit_AlgorithmIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_x509af_AlgorithmIdentifier(implicit_tag, tvb, offset, pinfo, tree, hf_index);
+
+  return offset;
+}
+
+int
+dissect_pkix1explicit_SubjectPublicKeyInfo(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index) {
+  offset = dissect_x509af_SubjectPublicKeyInfo(implicit_tag, tvb, offset, pinfo, tree, hf_index);
+
+  return offset;
+}
+
+
+
+/*--- Included file: packet-pkix1explicit-fn.c ---*/
+
+/*--- Fields for imported types ---*/
+
+
+
+
+const value_string TerminalType_vals[] = {
+  {   3, "telex" },
+  {   4, "teletex" },
+  {   5, "g3-facsimile" },
+  {   6, "g4-facsimile" },
+  {   7, "ia5-terminal" },
+  {   8, "videotex" },
+  { 0, NULL }
+};
+
+
+int
+dissect_pkix1explicit_TerminalType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+
+
+static int
+dissect_pkix1explicit_TeletexString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString,
+                                         pinfo, tree, tvb, offset, hf_index,
+                                         NULL);
+
+  return offset;
+}
+static int dissect_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_pkix1explicit_TeletexString(FALSE, tvb, offset, pinfo, tree, hf_pkix1explicit_type);
+}
+static int dissect_value(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_pkix1explicit_TeletexString(FALSE, tvb, offset, pinfo, tree, hf_pkix1explicit_value);
+}
+
+static const ber_sequence TeletexDomainDefinedAttribute_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_NOOWNTAG, dissect_type },
+  { BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_NOOWNTAG, dissect_value },
+  { 0, 0, 0, NULL }
+};
+
+int
+dissect_pkix1explicit_TeletexDomainDefinedAttribute(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                TeletexDomainDefinedAttribute_sequence, hf_index, ett_pkix1explicit_TeletexDomainDefinedAttribute);
+
+  return offset;
+}
+
+
+/*--- End of included file: packet-pkix1explicit-fn.c ---*/
+
+
+
+/*--- proto_register_pkix1explicit ----------------------------------------------*/
+void proto_register_pkix1explicit(void) {
+
+  /* List of fields */
+  static hf_register_info hf[] = {
+
+/*--- Included file: packet-pkix1explicit-hfarr.c ---*/
+
+    { &hf_pkix1explicit_type,
+      { "type", "pkix1explicit.type",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "TeletexDomainDefinedAttribute/type", HFILL }},
+    { &hf_pkix1explicit_value,
+      { "value", "pkix1explicit.value",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "TeletexDomainDefinedAttribute/value", HFILL }},
+
+/*--- End of included file: packet-pkix1explicit-hfarr.c ---*/
+
+  };
+
+  /* List of subtrees */
+  static gint *ett[] = {
+
+/*--- Included file: packet-pkix1explicit-ettarr.c ---*/
+
+    &ett_pkix1explicit_TeletexDomainDefinedAttribute,
+
+/*--- End of included file: packet-pkix1explicit-ettarr.c ---*/
+
+  };
+
+  /* Register protocol */
+  proto_pkix1explicit = proto_register_protocol(PNAME, PSNAME, PFNAME);
+
+  /* Register fields and subtrees */
+  proto_register_field_array(proto_pkix1explicit, hf, array_length(hf));
+  proto_register_subtree_array(ett, array_length(ett));
+
+}
+
+
+/*--- proto_reg_handoff_pkix1explicit -------------------------------------------*/
+void proto_reg_handoff_pkix1explicit(void) {
+}
+
diff -urN ethereal-0.10.6/epan/dissectors/packet-pkix1explicit.h ethereal-0.10.7/epan/dissectors/packet-pkix1explicit.h
--- ethereal-0.10.6/epan/dissectors/packet-pkix1explicit.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-pkix1explicit.h	2004-10-20 17:34:59.000000000 -0500
@@ -0,0 +1,52 @@
+/* Do not modify this file.                                                   */
+/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
+/* ./packet-pkix1explicit.h                                                   */
+/* ../../tools/asn2eth.py -e -X -b -p pkix1explicit -c pkix1explicit.cnf -s packet-pkix1explicit-template PKIX1EXPLICIT93.asn */
+
+/* Input file: packet-pkix1explicit-template.h */
+
+/* packet-pkix1explicit.h
+ * Routines for PKIX1Explicit packet dissection
+ *
+ * $Id: packet-pkix1explicit-template.h 12203 2004-10-05 09:18:55Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef PACKET_PKIX1EXPLICIT_H
+#define PACKET_PKIX1EXPLICIT_H
+
+int dissect_pkix1explicit_CertificateSerialNumber(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
+int dissect_pkix1explicit_Name(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
+int dissect_pkix1explicit_AlgorithmIdentifier(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index);
+int dissect_pkix1explicit_SubjectPublicKeyInfo(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
+
+
+
+/*--- Included file: packet-pkix1explicit-exp.h ---*/
+
+extern const value_string TerminalType_vals[];
+int dissect_pkix1explicit_TerminalType(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
+int dissect_pkix1explicit_TeletexDomainDefinedAttribute(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
+
+/*--- End of included file: packet-pkix1explicit-exp.h ---*/
+
+
+#endif  /* PACKET_PKIX1EXPLICIT_H */
+
diff -urN ethereal-0.10.6/epan/dissectors/packet-pkix1implicit.c ethereal-0.10.7/epan/dissectors/packet-pkix1implicit.c
--- ethereal-0.10.6/epan/dissectors/packet-pkix1implicit.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-pkix1implicit.c	2004-10-20 17:34:40.000000000 -0500
@@ -0,0 +1,289 @@
+/* Do not modify this file.                                                   */
+/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
+/* ./packet-pkix1implicit.c                                                   */
+/* ../../tools/asn2eth.py -e -X -b -p pkix1implicit -c pkix1implicit.cnf -s packet-pkix1implicit-template PKIX1IMPLICIT93.asn */
+
+/* Input file: packet-pkix1implicit-template.c */
+
+/* packet-pkix1implicit.c
+ * Routines for PKIX1Implitic packet dissection
+ *
+ * $Id: packet-pkix1implicit-template.c 12203 2004-10-05 09:18:55Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <epan/packet.h>
+#include <epan/conversation.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "packet-ber.h"
+#include "packet-pkix1implicit.h"
+
+#define PNAME  "PKIX1Implitit"
+#define PSNAME "PKIX1IMPLICIT"
+#define PFNAME "pkix1implicit"
+
+/* Initialize the protocol and registered fields */
+static int proto_pkix1implicit = -1;
+
+/*--- Included file: packet-pkix1implicit-hf.c ---*/
+
+static int hf_pkix1implicit_noticeRef = -1;       /* NoticeReference */
+static int hf_pkix1implicit_explicitText = -1;    /* DisplayText */
+static int hf_pkix1implicit_organization = -1;    /* DisplayText */
+static int hf_pkix1implicit_noticeNumbers = -1;   /* SEQUNCE_OF_INTEGER */
+static int hf_pkix1implicit_noticeNumbers_item = -1;  /* INTEGER */
+static int hf_pkix1implicit_visibleString = -1;   /* VisibleString */
+static int hf_pkix1implicit_bmpString = -1;       /* BMPString */
+static int hf_pkix1implicit_utf8String = -1;      /* UTF8String */
+
+/*--- End of included file: packet-pkix1implicit-hf.c ---*/
+
+
+/* Initialize the subtree pointers */
+
+/*--- Included file: packet-pkix1implicit-ett.c ---*/
+
+static gint ett_pkix1implicit_UserNotice = -1;
+static gint ett_pkix1implicit_NoticeReference = -1;
+static gint ett_pkix1implicit_SEQUNCE_OF_INTEGER = -1;
+static gint ett_pkix1implicit_DisplayText = -1;
+
+/*--- End of included file: packet-pkix1implicit-ett.c ---*/
+
+
+
+
+/*--- Included file: packet-pkix1implicit-fn.c ---*/
+
+/*--- Fields for imported types ---*/
+
+
+
+static int
+dissect_pkix1implicit_VisibleString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_VisibleString,
+                                         pinfo, tree, tvb, offset, hf_index,
+                                         NULL);
+
+  return offset;
+}
+static int dissect_visibleString(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_pkix1implicit_VisibleString(FALSE, tvb, offset, pinfo, tree, hf_pkix1implicit_visibleString);
+}
+
+
+static int
+dissect_pkix1implicit_BMPString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_BMPString,
+                                         pinfo, tree, tvb, offset, hf_index,
+                                         NULL);
+
+  return offset;
+}
+static int dissect_bmpString(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_pkix1implicit_BMPString(FALSE, tvb, offset, pinfo, tree, hf_pkix1implicit_bmpString);
+}
+
+
+static int
+dissect_pkix1implicit_UTF8String(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTF8String,
+                                         pinfo, tree, tvb, offset, hf_index,
+                                         NULL);
+
+  return offset;
+}
+static int dissect_utf8String(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_pkix1implicit_UTF8String(FALSE, tvb, offset, pinfo, tree, hf_pkix1implicit_utf8String);
+}
+
+
+static const value_string DisplayText_vals[] = {
+  {   0, "visibleString" },
+  {   1, "bmpString" },
+  {   2, "utf8String" },
+  { 0, NULL }
+};
+
+static const ber_choice DisplayText_choice[] = {
+  {   0, BER_CLASS_UNI, BER_UNI_TAG_VisibleString, BER_FLAGS_NOOWNTAG, dissect_visibleString },
+  {   1, BER_CLASS_UNI, BER_UNI_TAG_BMPString, BER_FLAGS_NOOWNTAG, dissect_bmpString },
+  {   2, BER_CLASS_UNI, BER_UNI_TAG_UTF8String, BER_FLAGS_NOOWNTAG, dissect_utf8String },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_pkix1implicit_DisplayText(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                              DisplayText_choice, hf_index, ett_pkix1implicit_DisplayText);
+
+  return offset;
+}
+static int dissect_explicitText(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_pkix1implicit_DisplayText(FALSE, tvb, offset, pinfo, tree, hf_pkix1implicit_explicitText);
+}
+static int dissect_organization(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_pkix1implicit_DisplayText(FALSE, tvb, offset, pinfo, tree, hf_pkix1implicit_organization);
+}
+
+
+
+static int
+dissect_pkix1implicit_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_integer(pinfo, tree, tvb, offset, hf_index, NULL);
+
+  return offset;
+}
+static int dissect_noticeNumbers_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_pkix1implicit_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_pkix1implicit_noticeNumbers_item);
+}
+
+static const ber_sequence SEQUNCE_OF_INTEGER_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_noticeNumbers_item },
+};
+
+static int
+dissect_pkix1implicit_SEQUNCE_OF_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                   SEQUNCE_OF_INTEGER_sequence_of, hf_index, ett_pkix1implicit_SEQUNCE_OF_INTEGER);
+
+  return offset;
+}
+static int dissect_noticeNumbers(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_pkix1implicit_SEQUNCE_OF_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_pkix1implicit_noticeNumbers);
+}
+
+static const ber_sequence NoticeReference_sequence[] = {
+  { BER_CLASS_UNI, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_organization },
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_noticeNumbers },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_pkix1implicit_NoticeReference(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                NoticeReference_sequence, hf_index, ett_pkix1implicit_NoticeReference);
+
+  return offset;
+}
+static int dissect_noticeRef(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_pkix1implicit_NoticeReference(FALSE, tvb, offset, pinfo, tree, hf_pkix1implicit_noticeRef);
+}
+
+static const ber_sequence UserNotice_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_noticeRef },
+  { BER_CLASS_UNI, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_explicitText },
+  { 0, 0, 0, NULL }
+};
+
+int
+dissect_pkix1implicit_UserNotice(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                UserNotice_sequence, hf_index, ett_pkix1implicit_UserNotice);
+
+  return offset;
+}
+
+
+/*--- End of included file: packet-pkix1implicit-fn.c ---*/
+
+
+
+/*--- proto_register_pkix1implicit ----------------------------------------------*/
+void proto_register_pkix1implicit(void) {
+
+  /* List of fields */
+  static hf_register_info hf[] = {
+
+/*--- Included file: packet-pkix1implicit-hfarr.c ---*/
+
+    { &hf_pkix1implicit_noticeRef,
+      { "noticeRef", "pkix1implicit.noticeRef",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "UserNotice/noticeRef", HFILL }},
+    { &hf_pkix1implicit_explicitText,
+      { "explicitText", "pkix1implicit.explicitText",
+        FT_UINT32, BASE_DEC, VALS(DisplayText_vals), 0,
+        "UserNotice/explicitText", HFILL }},
+    { &hf_pkix1implicit_organization,
+      { "organization", "pkix1implicit.organization",
+        FT_UINT32, BASE_DEC, VALS(DisplayText_vals), 0,
+        "NoticeReference/organization", HFILL }},
+    { &hf_pkix1implicit_noticeNumbers,
+      { "noticeNumbers", "pkix1implicit.noticeNumbers",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "NoticeReference/noticeNumbers", HFILL }},
+    { &hf_pkix1implicit_noticeNumbers_item,
+      { "Item", "pkix1implicit.noticeNumbers_item",
+        FT_INT32, BASE_DEC, NULL, 0,
+        "NoticeReference/noticeNumbers/_item", HFILL }},
+    { &hf_pkix1implicit_visibleString,
+      { "visibleString", "pkix1implicit.visibleString",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "DisplayText/visibleString", HFILL }},
+    { &hf_pkix1implicit_bmpString,
+      { "bmpString", "pkix1implicit.bmpString",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "DisplayText/bmpString", HFILL }},
+    { &hf_pkix1implicit_utf8String,
+      { "utf8String", "pkix1implicit.utf8String",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "DisplayText/utf8String", HFILL }},
+
+/*--- End of included file: packet-pkix1implicit-hfarr.c ---*/
+
+  };
+
+  /* List of subtrees */
+  static gint *ett[] = {
+
+/*--- Included file: packet-pkix1implicit-ettarr.c ---*/
+
+    &ett_pkix1implicit_UserNotice,
+    &ett_pkix1implicit_NoticeReference,
+    &ett_pkix1implicit_SEQUNCE_OF_INTEGER,
+    &ett_pkix1implicit_DisplayText,
+
+/*--- End of included file: packet-pkix1implicit-ettarr.c ---*/
+
+  };
+
+  /* Register protocol */
+  proto_pkix1implicit = proto_register_protocol(PNAME, PSNAME, PFNAME);
+
+  /* Register fields and subtrees */
+  proto_register_field_array(proto_pkix1implicit, hf, array_length(hf));
+  proto_register_subtree_array(ett, array_length(ett));
+
+}
+
+
+/*--- proto_reg_handoff_pkix1implicit -------------------------------------------*/
+void proto_reg_handoff_pkix1implicit(void) {
+}
+
diff -urN ethereal-0.10.6/epan/dissectors/packet-pkix1implicit.h ethereal-0.10.7/epan/dissectors/packet-pkix1implicit.h
--- ethereal-0.10.6/epan/dissectors/packet-pkix1implicit.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-pkix1implicit.h	2004-10-20 17:34:40.000000000 -0500
@@ -0,0 +1,44 @@
+/* Do not modify this file.                                                   */
+/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
+/* ./packet-pkix1implicit.h                                                   */
+/* ../../tools/asn2eth.py -e -X -b -p pkix1implicit -c pkix1implicit.cnf -s packet-pkix1implicit-template PKIX1IMPLICIT93.asn */
+
+/* Input file: packet-pkix1implicit-template.h */
+
+/* packet-pkix1implicit.h
+ * Routines for PKIX1Implicit packet dissection
+ *
+ * $Id: packet-pkix1implicit-template.h 12203 2004-10-05 09:18:55Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef PACKET_PKIX1IMPLICIT_H
+#define PACKET_PKIX1IMPLICIT_H
+
+
+/*--- Included file: packet-pkix1implicit-exp.h ---*/
+
+int dissect_pkix1implicit_UserNotice(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
+
+/*--- End of included file: packet-pkix1implicit-exp.h ---*/
+
+
+#endif  /* PACKET_PKIX1IMPLICIT_H */
+
diff -urN ethereal-0.10.6/epan/dissectors/packet-portmap.c ethereal-0.10.7/epan/dissectors/packet-portmap.c
--- ethereal-0.10.6/epan/dissectors/packet-portmap.c	2004-08-12 17:42:05.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-portmap.c	2004-10-20 17:34:43.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-portmap.c
  * Routines for portmap dissection
  *
- * $Id: packet-portmap.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-portmap.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -32,7 +32,7 @@
 
 #include "packet-rpc.h"
 #include "packet-portmap.h"
-#include "ipproto.h"
+#include <epan/ipproto.h>
 #include "epan/conversation.h"
 #include "epan/packet_info.h"
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-ppp.c ethereal-0.10.7/epan/dissectors/packet-ppp.c
--- ethereal-0.10.6/epan/dissectors/packet-ppp.c	2004-08-12 17:42:04.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ppp.c	2004-10-20 17:34:43.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for ppp packet disassembly
  * RFC 1661, RFC 1662
  *
- * $Id: packet-ppp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-ppp.c 12117 2004-09-28 00:06:32Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -31,7 +31,7 @@
 
 #include <string.h>
 #include <glib.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/packet.h>
 #include "packet-ppp.h"
 #include "ppptypes.h"
@@ -43,8 +43,8 @@
 #include "packet-ipx.h"
 #include "packet-vines.h"
 #include "nlpid.h"
-#include "crc16.h"
-#include "crc32.h"
+#include <epan/crc16.h>
+#include <epan/crc32.h>
 
 #define ppp_min(a, b)  ((a<b) ? a : b)
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-pres.c ethereal-0.10.7/epan/dissectors/packet-pres.c
--- ethereal-0.10.6/epan/dissectors/packet-pres.c	2004-08-12 17:42:10.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-pres.c	2004-10-20 17:34:48.000000000 -0500
@@ -2,7 +2,7 @@
 *
 * Routine to dissect ISO 8823 OSI Presentation Protocol packets
 *
-* $Id: packet-pres.c 11410 2004-07-18 18:06:47Z gram $
+* $Id: packet-pres.c 12115 2004-09-27 22:55:15Z guy $
 *
 * Yuriy Sidelnikov <YSidelnikov@hotmail.com>
 *
@@ -37,7 +37,7 @@
 
 #include "packet-pres.h"
 #include "packet-frame.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #include <epan/strutil.h>
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-ptp.c ethereal-0.10.7/epan/dissectors/packet-ptp.c
--- ethereal-0.10.6/epan/dissectors/packet-ptp.c	2004-08-12 17:42:25.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ptp.c	2004-10-20 17:34:55.000000000 -0500
@@ -4,6 +4,8 @@
  * Copyright 2004, Dominic Bchaz <bdo@zhwin.ch> , ZHW/InES
  * Copyright 2004, Markus Seehofer <mseehofe@nt.hirschmann.de>
  *
+ * $Id: packet-ptp.c 12158 2004-09-30 19:54:01Z guy $
+ *
  * A plugin for:
  *
  * Ethereal - Network traffic analyzer
diff -urN ethereal-0.10.6/epan/dissectors/packet-q931.c ethereal-0.10.7/epan/dissectors/packet-q931.c
--- ethereal-0.10.6/epan/dissectors/packet-q931.c	2004-08-12 17:42:12.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-q931.c	2004-10-20 17:34:49.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for Q.931 frame disassembly
  * Guy Harris <guy@alum.mit.edu>
  *
- * $Id: packet-q931.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-q931.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Modified by Andreas Sikkema for possible use with H.323
  *
@@ -37,7 +37,7 @@
 #include "nlpid.h"
 #include "packet-q931.h"
 #include "packet-e164.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "reassemble.h"
 
 #include "lapd_sapi.h"
@@ -3134,8 +3134,9 @@
 
 	q931_module = prefs_register_protocol(proto_q931, NULL);
 	prefs_register_bool_preference(q931_module, "desegment_h323_messages",
-	    "Desegment all Q.931 messages spanning multiple TCP segments",
-	    "Whether the Q.931 dissector should desegment all messages spanning multiple TCP segments",
+	    "Reassemble Q.931 messages spanning multiple TCP segments",
+	    "Whether the Q.931 dissector should reassemble messages spanning multiple TCP segments."
+	    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 	    &q931_desegment);
 	prefs_register_bool_preference(q931_module, "reassembly",
 	    "Reassemble segmented Q.931 messages",
diff -urN ethereal-0.10.6/epan/dissectors/packet-quake.c ethereal-0.10.7/epan/dissectors/packet-quake.c
--- ethereal-0.10.6/epan/dissectors/packet-quake.c	2004-08-12 17:42:02.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-quake.c	2004-10-20 17:34:41.000000000 -0500
@@ -4,7 +4,7 @@
  * Uwe Girlich <uwe@planetquake.com>
  *	http://www.idsoftware.com/q1source/q1source.zip
  *
- * $Id: packet-quake.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-quake.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <glib.h>
 #include <epan/packet.h>
 #include <epan/conversation.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 
 static int proto_quake = -1;
 static int hf_quake_header_flags = -1;
diff -urN ethereal-0.10.6/epan/dissectors/packet-quake2.c ethereal-0.10.7/epan/dissectors/packet-quake2.c
--- ethereal-0.10.6/epan/dissectors/packet-quake2.c	2004-08-12 17:42:04.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-quake2.c	2004-10-20 17:34:43.000000000 -0500
@@ -7,7 +7,7 @@
  *	http://www.dgs.monash.edu.au/~timf/bottim/
  *	http://www.opt-sci.Arizona.EDU/Pandora/default.asp
  *
- * $Id: packet-quake2.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-quake2.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,7 +36,7 @@
 
 #include <glib.h>
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 
 static int proto_quake2 = -1;
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-quake3.c ethereal-0.10.7/epan/dissectors/packet-quake3.c
--- ethereal-0.10.6/epan/dissectors/packet-quake3.c	2004-08-12 17:42:05.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-quake3.c	2004-10-20 17:34:44.000000000 -0500
@@ -3,7 +3,7 @@
  *
  * Uwe Girlich <uwe@planetquake.com>
  *
- * $Id: packet-quake3.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-quake3.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -44,7 +44,7 @@
 #include <string.h>
 #include <glib.h>
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/addr_resolv.h>
 
 static int proto_quake3 = -1;
diff -urN ethereal-0.10.6/epan/dissectors/packet-quakeworld.c ethereal-0.10.7/epan/dissectors/packet-quakeworld.c
--- ethereal-0.10.6/epan/dissectors/packet-quakeworld.c	2004-08-12 17:42:09.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-quakeworld.c	2004-10-20 17:34:46.000000000 -0500
@@ -4,7 +4,7 @@
  * Uwe Girlich <uwe@planetquake.com>
  *	http://www.idsoftware.com/q1source/q1source.zip
  *
- * $Id: packet-quakeworld.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-quakeworld.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <glib.h>
 #include <string.h>
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 
 static int proto_quakeworld = -1;
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-radius.c ethereal-0.10.7/epan/dissectors/packet-radius.c
--- ethereal-0.10.6/epan/dissectors/packet-radius.c	2004-08-12 17:42:23.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-radius.c	2004-10-20 17:34:53.000000000 -0500
@@ -4,9 +4,7 @@
  * Copyright 1999 Johan Feyaerts
  * Changed 03/12/2003 Rui Carmo (http://the.taoofmac.com - added all 3GPP VSAs, some parsing)
  *
- * RFC 2865, RFC 2866, RFC 2867, RFC 2868, RFC 2869
- *
- * $Id: packet-radius.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-radius.c 12207 2004-10-05 17:44:03Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -25,6 +23,28 @@
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * References:
+ *
+ * RFC 2865 - Remote Authentication Dial In User Service (RADIUS)
+ * RFC 2866 - RADIUS Accounting
+ * RFC 2867 - RADIUS Accounting Modifications for Tunnel Protocol Support
+ * RFC 2868 - RADIUS Attributes for Tunnel Protocol Support
+ * RFC 2869 - RADIUS Extensions
+ *
+ * See also
+ *
+ *	http://www.iana.org/assignments/radius-types
+ */
+
+/*
+ * Some of the development of the RADIUS protocol decoder was sponsored by
+ * Cable Television Laboratories, Inc. ("CableLabs") based upon proprietary
+ * CableLabs' specifications. Your license and use of this protocol decoder
+ * does not mean that you are licensed to use the CableLabs'
+ * specifications.  If you have questions about this protocol, contact
+ * jf.mule [AT] cablelabs.com or c.stuart [AT] cablelabs.com for additional
+ * information.
  */
 
 #ifdef HAVE_CONFIG_H
@@ -45,13 +65,71 @@
 
 #include "packet-q931.h"
 #include "packet-gtp.h"
-#include "prefs.h"
-#include "crypt-md5.h"
+#include <epan/prefs.h>
+#include <epan/crypt-md5.h>
+#include <epan/sminmpec.h>
 
 static int proto_radius = -1;
 static int hf_radius_length = -1;
 static int hf_radius_code = -1;
 static int hf_radius_id =-1;
+static int hf_radius_userName = -1;
+static int hf_radius_framedProtocol = -1;
+static int hf_radius_serviceType = -1;
+static int hf_radius_callingStationId = -1;
+static int hf_radius_calledStationId = -1;
+static int hf_radius_framedAddress = -1;
+static int hf_radius_class = -1;
+static int hf_radius_nasIp = -1;
+static int hf_radius_acctStatusType = -1;
+static int hf_radius_acctSessionId = -1;
+static int hf_radius_3gpp_SgsnIpAddr = -1;
+static int hf_radius_3gpp_GgsnIpAddr = -1;
+static int hf_radius_cisco_cai = -1;
+static int hf_packetcable_em_header_version_id = -1;
+static int hf_packetcable_bcid_timestamp = -1;
+static int hf_packetcable_bcid_event_counter = -1;
+static int hf_packetcable_em_header_event_message_type = -1;
+static int hf_packetcable_em_header_element_type = -1;
+static int hf_packetcable_em_header_sequence_number = -1;
+static int hf_packetcable_em_header_status = -1;
+static int hf_packetcable_em_header_status_error_indicator = -1;
+static int hf_packetcable_em_header_status_event_origin = -1;
+static int hf_packetcable_em_header_status_event_message_proxied = -1;
+static int hf_packetcable_em_header_priority = -1;
+static int hf_packetcable_em_header_attribute_count = -1;
+static int hf_packetcable_em_header_event_object = -1;
+static int hf_packetcable_call_termination_cause_source_document = -1;
+static int hf_packetcable_call_termination_cause_code = -1;
+static int hf_packetcable_trunk_group_id_trunk_type = -1;
+static int hf_packetcable_trunk_group_id_trunk_number = -1;
+static int hf_packetcable_qos_status = -1;
+static int hf_packetcable_qos_status_indication = -1;
+static int hf_packetcable_time_adjustment = -1;
+static int hf_packetcable_redirected_from_info_number_of_redirections = -1;
+static int hf_packetcable_electronic_surveillance_indication_df_cdc_address = -1;
+static int hf_packetcable_electronic_surveillance_indication_df_ccc_address = -1;
+static int hf_packetcable_electronic_surveillance_indication_cdc_port = -1;
+static int hf_packetcable_electronic_surveillance_indication_ccc_port = -1;
+static int hf_packetcable_terminal_display_info_terminal_display_status_bitmask = -1;
+static int hf_packetcable_terminal_display_info_sbm_general_display = -1;
+static int hf_packetcable_terminal_display_info_sbm_calling_number = -1;
+static int hf_packetcable_terminal_display_info_sbm_calling_name = -1;
+static int hf_packetcable_terminal_display_info_sbm_message_waiting = -1;
+static int hf_packetcable_terminal_display_info_general_display = -1;
+static int hf_packetcable_terminal_display_info_calling_number = -1;
+static int hf_packetcable_terminal_display_info_calling_name = -1;
+static int hf_packetcable_terminal_display_info_message_waiting = -1;
+/* This is slightly ugly.  */
+static int hf_packetcable_qos_desc_flags[] =
+{
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+};
+static int hf_packetcable_qos_desc_fields[] =
+{
+  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+};
+
 
 static char *shared_secret = NULL;
 static gpointer authenticator = NULL;
@@ -60,6 +138,11 @@
 static gint ett_radius_avp = -1;
 static gint ett_radius_eap = -1;
 static gint ett_radius_vsa = -1;
+static gint ett_radius_vendor_packetcable_bcid = -1;
+static gint ett_radius_vendor_packetcable_status = -1;
+static gint ett_radius_vendor_packetcable_qos_status = -1;
+
+static void decode_packetcable_bcid (tvbuff_t *tvb, proto_tree *tree, int offset);
 
 static dissector_handle_t eap_fragment_handle;
 
@@ -87,6 +170,7 @@
         guint16 value_type;
 	gchar *str;
 	const value_string *vs;
+	int *hf;
 } radius_attr_info;
 
 typedef struct _rd_vsa_table {
@@ -98,6 +182,9 @@
 	gchar *str;
 	int offset;
 	guint8 length;
+	gchar *val_str;
+	int val_offset;
+	guint val_len;
 } rd_vsa_buffer;
 
 #define AUTHENTICATOR_LENGTH	16
@@ -148,7 +235,9 @@
     RADIUS_STRING,
     RADIUS_BINSTRING,
     RADIUS_USERPASSWORD,
+    RADIUS_INTEGER2,
     RADIUS_INTEGER4,
+    RADIUS_INTEGER8,
     RADIUS_IP_ADDRESS,
     RADIUS_IP6_ADDRESS,
     RADIUS_IP6_PREFIX,
@@ -172,7 +261,18 @@
     THE3GPP_SELECTION_MODE,
     THE3GPP_CHARGING_CHARACTERISTICS,
     THE3GPP_IPV6_DNS_SERVERS,
-    THE3GPP_SGSN_MCC_MNC
+    THE3GPP_SGSN_MCC_MNC,
+
+    PACKETCABLE_EM_HEADER,
+    PACKETCABLE_CALL_TERMINATION_CAUSE,
+    PACKETCABLE_RELATED_CALL_BILLING_CORRELATION_ID,
+    PACKETCABLE_TRUNK_GROUP_ID,
+    PACKETCABLE_QOS_DESCRIPTOR,
+    PACKETCABLE_TIME_ADJUSTMENT,
+    PACKETCABLE_REDIRECTED_FROM_INFO,
+    PACKETCABLE_ELECTRONIC_SURVEILLANCE_INDICATION,
+    PACKETCABLE_ELECTRONIC_SURVEILLANCE_DF_SECURITY,
+    PACKETCABLE_TERMINAL_DISPLAY_INFO
 };
 
 static const value_string radius_vals[] =
@@ -207,81 +307,6 @@
 };
 
 /*
- * These are SMI Network Management Private Enterprise Codes for
- * organizations; see
- *
- *	http://www.iana.org/assignments/enterprise-numbers
- *
- * for a list.
- *
- * XXX - these also appear in FreeRadius dictionary files, with items such
- * as
- *
- *	VENDOR          Cisco           9
- */
-#define VENDOR_ACC			5
-#define VENDOR_CISCO			9
-#define VENDOR_MERIT			61
-#define VENDOR_SHIVA			166
-#define VENDOR_CISCO_VPN5000		255
-#define VENDOR_LIVINGSTON		307
-#define VENDOR_MICROSOFT		311
-#define VENDOR_3COM			429
-#define VENDOR_ASCEND			529
-#define VENDOR_BAY			1584
-#define VENDOR_FOUNDRY			1991
-#define VENDOR_VERSANET			2180
-#define VENDOR_REDBACK			2352
-#define VENDOR_JUNIPER			2636
-#define VENDOR_APTIS			2637
-#define VENDOR_CISCO_VPN3000		3076
-#define VENDOR_COSINE			3085
-#define VENDOR_SHASTA			3199
-#define VENDOR_NOMADIX			3309
-#define VENDOR_SIEMENS			4329
-#define VENDOR_UNISPHERE		4874
-#define VENDOR_CISCO_BBSM		5263
-#define VENDOR_ISSANNI			5948
-#define VENDOR_QUINTUM			6618
-#define VENDOR_INTERLINK		6728
-#define VENDOR_COLUBRIS			8744
-#define VENDOR_COLUMBIA_UNIVERSITY	11862
-#define VENDOR_THE3GPP			10415
-
-static const value_string radius_vendor_specific_vendors[] =
-{
-  {VENDOR_ACC,			"ACC"},
-  {VENDOR_CISCO,		"Cisco"},
-  {VENDOR_MERIT,		"Merit"},
-  {VENDOR_SHIVA,		"Shiva"},
-  {VENDOR_CISCO_VPN5000,	"Cisco VPN 5000"},
-  {VENDOR_MICROSOFT,		"Microsoft"},
-  {VENDOR_LIVINGSTON,		"Livingston"},
-  {VENDOR_3COM,			"3Com"},
-  {VENDOR_ASCEND,		"Ascend"},
-  {VENDOR_BAY,			"Bay Networks"},
-  {VENDOR_FOUNDRY,		"Foundry"},
-  {VENDOR_VERSANET,		"Versanet"},
-  {VENDOR_REDBACK,		"Redback"},
-  {VENDOR_JUNIPER,		"Juniper Networks"},
-  {VENDOR_APTIS,		"Aptis"},
-  {VENDOR_CISCO_VPN3000,	"Cisco VPN 3000"},
-  {VENDOR_COSINE,		"CoSine Communications"},
-  {VENDOR_SHASTA,		"Shasta"},
-  {VENDOR_NOMADIX,		"Nomadix"},
-  {VENDOR_SIEMENS,		"SIEMENS"},
-  {VENDOR_UNISPHERE,		"Unisphere Networks"},
-  {VENDOR_CISCO_BBSM,		"Cisco BBSM"},
-  {VENDOR_ISSANNI,		"Issanni Communications"},
-  {VENDOR_QUINTUM,		"Quintum"},
-  {VENDOR_INTERLINK,	"Interlink"},
-  {VENDOR_COLUBRIS,		"Colubris"},
-  {VENDOR_COLUMBIA_UNIVERSITY,	"Columbia University"},
-  {VENDOR_THE3GPP,		"3GPP"},
-  {0, NULL}
-};
-
-/*
  * XXX - should we construct these tables in Ethereal at start-up time by
  * reading files such as FreeRadius dictionary files?  For example,
  * the FreeRadius "dictionary" file has
@@ -318,6 +343,13 @@
   {8,	"Authenticate Only"},
   {9,	"Callback NAS Prompt"},
   {10,	"Call Check"},
+  {11,	"Callback Administrative"},
+  {12,	"Voice"},								/*[Chiba]				*/
+  {13,	"Fax"},									/*[Chiba]				*/
+  {14,	"Modem Relay"},							/*[Chiba]				*/
+  {15,	"IAPP-Register"},						/*[IEEE 802.11f][Kerry]	*/
+  {16,	"IAPP-AP-Check"},						/*[IEEE 802.11f][Kerry]	*/
+  {17,	"Authorize Only"},						/*[RFC3576]				*/
   {0, NULL}
 };
 
@@ -329,6 +361,7 @@
   {4,	"Gandalf proprietary Singlelink/Multilink Protocol"},
   {5,	"Xylogics proprietary IPX/SLIP"},
   {6,	"X.75 Synchronous"},
+  {7,	"GPRS PDP Context"},
   {255,	"Ascend ARA"},
   {256,	"Ascend MPP"},
   {257,	"Ascend EURAW"},
@@ -373,40 +406,43 @@
   {0,	"Telnet"},
   {0, NULL}
 };
-
+/* Values for RADIUS Attribute 29, Termination-Action: */
 static const value_string radius_terminating_action_vals[] =
 {
   {1,	"RADIUS Request"},
   {0,	"Default"},
   {0, NULL}
 };
-
+/* Values for RADIUS Attribute 40, Acct-Status-Type [RFC 2866]:*/
 static const value_string radius_accounting_status_type_vals[] =
 {
-  {1,	"Start"},
-  {2,	"Stop"},
-  {3,	"Interim Update"},
-  {7,	"Accounting On"},
-  {8,	"Accounting Off"},
-  {9,	"Tunnel Start"},	/* Tunnel accounting */
-  {10,	"Tunnel Stop"},		/* Tunnel accounting */
-  {11,	"Tunnel Reject"},	/* Tunnel accounting */
-  {12,	"Tunnel Link Start"},	/* Tunnel accounting */
-  {13,	"Tunnel Link Stop"},	/* Tunnel accounting */
-  {14,	"Tunnel Link Reject"},	/* Tunnel accounting */
+  {1,	"Start"},				/*  [RFC 2866]*/
+  {2,	"Stop"},				/*  [RFC 2866]*/
+  {3,	"Interim Update"},		/*  [RFC 2866]*/
+  {7,	"Accounting On"},		/*  [RFC 2866]*/
+  {8,	"Accounting Off"},		/*  [RFC 2866]*/
+  {9,	"Tunnel Start"},		/* Tunnel accounting [RFC 2867]	*/
+  {10,	"Tunnel Stop"},			/* Tunnel accounting [RFC 2867]	*/
+  {11,	"Tunnel Reject"},		/* Tunnel accounting [RFC 2867]	*/
+  {12,	"Tunnel Link Start"},	/* Tunnel accounting [RFC 2867]	*/
+  {13,	"Tunnel Link Stop"},	/* Tunnel accounting [RFC 2867]	*/
+  {14,	"Tunnel Link Reject"},	/* Tunnel accounting [RFC 2867]	*/
+  {15,	"Failed"},				/* [RFC 2866]					*/
+
   {0, NULL}
 };
-
+/* Values for RADIUS Attribute 45, Acct-Authentic [RFC 2866]: */
 static const value_string radius_accounting_authentication_vals[] =
 {
   {1,	"Radius"},
   {2,	"Local"},
   {3,	"Remote"},
+  {4,	"Diameter"},
   /* RFC 2866 says 3 is Remote. Is 7 a mistake? */
   {7,	"Remote"},
   {0, NULL}
 };
-
+/*Values for RADIUS Attribute 49, Acct-Terminate-Cause [RFC 2866]: */
 static const value_string radius_acct_terminate_cause_vals[] =
 {
   {1,	"User Request"},
@@ -427,6 +463,11 @@
   {16,	"Callback"},
   {17,	"User Error"},
   {18,	"Host Request"},
+  {19,	"Supplicant Restart"},					/*[RFC3580]*/
+  {20,	"Reauthentication Failure"},			/*[RFC3580]*/
+  {21,	"Port Reinitialized"},					/*[RFC3580]*/
+  {22,	"Port Administratively Disabled"},		/*[RFC3580]*/
+
   {0, NULL}
 };
 
@@ -444,6 +485,7 @@
   {10,	"GRE"},
   {11,	"DVS"},
   {12,	"IP-IP"},
+  {12,	"VLAN"},								/*[RFC3580]*/
   {0, NULL}
 };
 
@@ -466,7 +508,7 @@
   {15,	"E.164 NSAP"},
   {0, NULL}
 };
-
+/*Values for RADIUS Attribute 61, NAS-Port-Type [RFC 2865]: */
 static const value_string radius_nas_port_type_vals[] =
 {
   {0,	"Async"},
@@ -489,6 +531,14 @@
   {17,	"Cable"},
   {18,	"Wireless Other"},
   {19,	"Wireless IEEE 802.11"},
+  {20,	"Token-Ring"},									/*[RFC3580]*/
+  {21,	"FDDI"},										/*[RFC3580]*/
+  {22,	"Wireless - CDMA2000"},							/*[McCann] */
+  {23,	"Wireless - UMTS"},								/*[McCann] */
+  {24,	"Wireless - 1X-EV"},							/*[McCann] */
+  {25,	"IAPP"},									/*[IEEE 802.11f][Kerry]*/
+  {26,	"FTTP - Fiber to the Premises"},				/*[Nyce]*/
+
   {0, NULL}
 };
 /*
@@ -515,120 +565,120 @@
 
 static const radius_attr_info radius_attrib[] =
 {
-  {1,	RADIUS_STRING,		"User Name", NULL},
-  {2,	RADIUS_USERPASSWORD,	"User Password", NULL},
-  {3,	RADIUS_BINSTRING,	"CHAP Password", NULL},
-  {4,	RADIUS_IP_ADDRESS,	"NAS IP Address", NULL},
-  {5,	RADIUS_INTEGER4,	"NAS Port", NULL},
-  {6,	RADIUS_INTEGER4,	"Service Type", radius_service_type_vals},
-  {7,	RADIUS_INTEGER4,	"Framed Protocol", radius_framed_protocol_vals},
-  {8,	RADIUS_IP_ADDRESS,	"Framed IP Address", NULL},
-  {9,	RADIUS_IP_ADDRESS,	"Framed IP Netmask", NULL},
-  {10,	RADIUS_INTEGER4,	"Framed Routing", radius_framed_routing_vals},
-  {11,	RADIUS_STRING,		"Filter Id", NULL},
-  {12,	RADIUS_INTEGER4,	"Framed MTU", NULL},
-  {13,	RADIUS_INTEGER4,	"Framed Compression", radius_framed_compression_vals},
-  {14,	RADIUS_IP_ADDRESS,	"Login IP Host", NULL},
-  {15,	RADIUS_INTEGER4,	"Login Service", radius_login_service_vals},
-  {16,	RADIUS_INTEGER4,	"Login TCP Port", NULL},
-  {17,	RADIUS_UNKNOWN,		"Unassigned", NULL},
-  {18,	RADIUS_STRING,		"Reply Message", NULL},
-  {19,	RADIUS_STRING,		"Callback Number", NULL},
-  {20,	RADIUS_STRING,		"Callback Id", NULL},
-  {21,	RADIUS_UNKNOWN,		"Unassigned", NULL},
-  {22,	RADIUS_STRING,		"Framed Route", NULL},
-  {23,	RADIUS_IPX_ADDRESS,	"Framed IPX network", NULL},
-  {24,	RADIUS_BINSTRING,	"State", NULL},
-  {25,	RADIUS_BINSTRING,	"Class", NULL},
-  {26,	RADIUS_VENDOR_SPECIFIC,	"Vendor Specific", NULL},
-  {27,	RADIUS_INTEGER4,	"Session Timeout", NULL},
-  {28,	RADIUS_INTEGER4,	"Idle Timeout", NULL},
-  {29,	RADIUS_INTEGER4,	"Terminating Action", radius_terminating_action_vals},
-  {30,	RADIUS_STRING,		"Called Station Id", NULL},
-  {31,	RADIUS_STRING,		"Calling Station Id", NULL},
-  {32,	RADIUS_STRING,		"NAS identifier", NULL},
-  {33,	RADIUS_BINSTRING,	"Proxy State", NULL},
-  {34,	RADIUS_STRING,		"Login LAT Service", NULL},
-  {35,	RADIUS_STRING,		"Login LAT Node", NULL},
-  {36,	RADIUS_BINSTRING,	"Login LAT Group", NULL},
-  {37,	RADIUS_INTEGER4,	"Framed AppleTalk Link", NULL},
-  {38,	RADIUS_INTEGER4,	"Framed AppleTalk Network", NULL},
-  {39,	RADIUS_STRING,		"Framed AppleTalk Zone", NULL},
-  {40,	RADIUS_INTEGER4,	"Acct Status Type", radius_accounting_status_type_vals},
-  {41,	RADIUS_INTEGER4,	"Acct Delay Time", NULL},
-  {42,	RADIUS_INTEGER4,	"Acct Input Octets", NULL},
-  {43,	RADIUS_INTEGER4,	"Acct Output Octets", NULL},
-  {44,	RADIUS_STRING,		"Acct Session Id", NULL},
-  {45,	RADIUS_INTEGER4,	"Acct Authentic", radius_accounting_authentication_vals},
-  {46,	RADIUS_INTEGER4,	"Acct Session Time", NULL},
-  {47,	RADIUS_INTEGER4,	"Acct Input Packets", NULL},
-  {48,	RADIUS_INTEGER4,	"Acct Output Packets", NULL},
-  {49,	RADIUS_INTEGER4,	"Acct Terminate Cause", radius_acct_terminate_cause_vals},
-  {50,	RADIUS_STRING,		"Acct Multi Session Id", NULL},
-  {51,	RADIUS_INTEGER4,	"Acct Link Count", NULL},
-  {52,	RADIUS_INTEGER4,	"Acct Input Gigawords", NULL},
-  {53,	RADIUS_INTEGER4,	"Acct Output Gigawords", NULL},
+  {1,	RADIUS_STRING,		"User Name", NULL, &hf_radius_userName},
+  {2,	RADIUS_USERPASSWORD,	"User Password", NULL, NULL},
+  {3,	RADIUS_BINSTRING,	"CHAP Password", NULL, NULL},
+  {4,	RADIUS_IP_ADDRESS,	"NAS IP Address", NULL, &hf_radius_nasIp},
+  {5,	RADIUS_INTEGER4,	"NAS Port", NULL, NULL},
+  {6,	RADIUS_INTEGER4,	"Service Type", radius_service_type_vals, &hf_radius_serviceType},
+  {7,	RADIUS_INTEGER4,	"Framed Protocol", radius_framed_protocol_vals, &hf_radius_framedProtocol},
+  {8,	RADIUS_IP_ADDRESS,	"Framed IP Address", NULL, &hf_radius_framedAddress},
+  {9,	RADIUS_IP_ADDRESS,	"Framed IP Netmask", NULL, NULL},
+  {10,	RADIUS_INTEGER4,	"Framed Routing", radius_framed_routing_vals, NULL},
+  {11,	RADIUS_STRING,		"Filter Id", NULL, NULL},
+  {12,	RADIUS_INTEGER4,	"Framed MTU", NULL, NULL},
+  {13,	RADIUS_INTEGER4,	"Framed Compression", radius_framed_compression_vals, NULL},
+  {14,	RADIUS_IP_ADDRESS,	"Login IP Host", NULL, NULL},
+  {15,	RADIUS_INTEGER4,	"Login Service", radius_login_service_vals, NULL},
+  {16,	RADIUS_INTEGER4,	"Login TCP Port", NULL, NULL},
+  {17,	RADIUS_UNKNOWN,		"Unassigned", NULL, NULL},
+  {18,	RADIUS_STRING,		"Reply Message", NULL, NULL},
+  {19,	RADIUS_STRING,		"Callback Number", NULL, NULL},
+  {20,	RADIUS_STRING,		"Callback Id", NULL, NULL},
+  {21,	RADIUS_UNKNOWN,		"Unassigned", NULL, NULL},
+  {22,	RADIUS_STRING,		"Framed Route", NULL, NULL},
+  {23,	RADIUS_IPX_ADDRESS,	"Framed IPX network", NULL, NULL},
+  {24,	RADIUS_BINSTRING,	"State", NULL, NULL},
+  {25,	RADIUS_BINSTRING,	"Class", NULL, &hf_radius_class},
+  {26,	RADIUS_VENDOR_SPECIFIC,	"Vendor Specific", NULL, NULL},
+  {27,	RADIUS_INTEGER4,	"Session Timeout", NULL, NULL},
+  {28,	RADIUS_INTEGER4,	"Idle Timeout", NULL, NULL},
+  {29,	RADIUS_INTEGER4,	"Terminating Action", radius_terminating_action_vals, NULL},
+  {30,	RADIUS_STRING,		"Called Station Id", NULL, &hf_radius_calledStationId},
+  {31,	RADIUS_STRING,		"Calling Station Id", NULL, &hf_radius_callingStationId},
+  {32,	RADIUS_STRING,		"NAS identifier", NULL, NULL},
+  {33,	RADIUS_BINSTRING,	"Proxy State", NULL, NULL},
+  {34,	RADIUS_STRING,		"Login LAT Service", NULL, NULL},
+  {35,	RADIUS_STRING,		"Login LAT Node", NULL, NULL},
+  {36,	RADIUS_BINSTRING,	"Login LAT Group", NULL, NULL},
+  {37,	RADIUS_INTEGER4,	"Framed AppleTalk Link", NULL, NULL},
+  {38,	RADIUS_INTEGER4,	"Framed AppleTalk Network", NULL, NULL},
+  {39,	RADIUS_STRING,		"Framed AppleTalk Zone", NULL, NULL},
+  {40,	RADIUS_INTEGER4,	"Acct Status Type", radius_accounting_status_type_vals, &hf_radius_acctStatusType},
+  {41,	RADIUS_INTEGER4,	"Acct Delay Time", NULL, NULL},
+  {42,	RADIUS_INTEGER4,	"Acct Input Octets", NULL, NULL},
+  {43,	RADIUS_INTEGER4,	"Acct Output Octets", NULL, NULL},
+  {44,	RADIUS_STRING,		"Acct Session Id", NULL, &hf_radius_acctSessionId},
+  {45,	RADIUS_INTEGER4,	"Acct Authentic", radius_accounting_authentication_vals, NULL},
+  {46,	RADIUS_INTEGER4,	"Acct Session Time", NULL, NULL},
+  {47,	RADIUS_INTEGER4,	"Acct Input Packets", NULL, NULL},
+  {48,	RADIUS_INTEGER4,	"Acct Output Packets", NULL, NULL},
+  {49,	RADIUS_INTEGER4,	"Acct Terminate Cause", radius_acct_terminate_cause_vals, NULL},
+  {50,	RADIUS_STRING,		"Acct Multi Session Id", NULL, NULL},
+  {51,	RADIUS_INTEGER4,	"Acct Link Count", NULL, NULL},
+  {52,	RADIUS_INTEGER4,	"Acct Input Gigawords", NULL, NULL},
+  {53,	RADIUS_INTEGER4,	"Acct Output Gigawords", NULL, NULL},
   /* 54 Unused */
-  {55,	RADIUS_TIMESTAMP,	"Event Timestamp", NULL},
+  {55,	RADIUS_TIMESTAMP,	"Event Timestamp", NULL, NULL},
   /* 56-59 Unused */
-  {60,	RADIUS_BINSTRING,	"CHAP Challenge", NULL},
-  {61,	RADIUS_INTEGER4,	"NAS Port Type", radius_nas_port_type_vals},
-  {62,	RADIUS_INTEGER4,	"Port Limit", NULL},
-  {63,	RADIUS_BINSTRING,	"Login LAT Port", NULL},
-  {64,	RADIUS_INTEGER4_TAGGED,	"Tunnel Type", radius_tunnel_type_vals},
-  {65,	RADIUS_INTEGER4_TAGGED,	"Tunnel Medium Type", radius_tunnel_medium_type_vals},
-  {66,	RADIUS_STRING_TAGGED,	"Tunnel Client Endpoint", NULL},
-  {67,	RADIUS_STRING_TAGGED,	"Tunnel Server Endpoint", NULL},
-  {68,	RADIUS_STRING,		"Tunnel Connection", NULL},
-  {69,	RADIUS_STRING_TAGGED,	"Tunnel Password", NULL},
-  {70,	RADIUS_STRING,		"ARAP Password", NULL},
-  {71,	RADIUS_STRING,		"ARAP Features", NULL},
-  {72,	RADIUS_INTEGER4,	"ARAP Zone-Access", NULL},
-  {73,	RADIUS_INTEGER4,	"ARAP Security", NULL},
-  {74,	RADIUS_STRING,		"ARAP Security Data", NULL},
-  {75,	RADIUS_INTEGER4,	"Password Retry", NULL},
-  {76,	RADIUS_INTEGER4,	"Prompt", NULL},
-  {77,	RADIUS_STRING,		"Connect Info", NULL},
-  {78,	RADIUS_STRING,		"Configuration Token", NULL},
-  {79,	RADIUS_EAP_MESSAGE,	"EAP Message", NULL},
-  {80,	RADIUS_BINSTRING,	"Message Authenticator", NULL},
-  {81,	RADIUS_STRING_TAGGED,	"Tunnel Private Group ID", NULL},
-  {82,	RADIUS_STRING_TAGGED,	"Tunnel Assignment ID", NULL},
-  {83,	RADIUS_INTEGER4_TAGGED,	"Tunnel Preference", NULL},
-  {84,	RADIUS_STRING,		"ARAP Challenge Response", NULL},
-  {85,	RADIUS_INTEGER4,	"Acct Interim Interval", NULL},
-  {86,	RADIUS_INTEGER4,	"Tunnel Packets Lost", NULL},
-  {87,	RADIUS_STRING,		"NAS Port ID", NULL},
-  {88,	RADIUS_STRING,		"Framed Pool", NULL},
-  {90,	RADIUS_STRING_TAGGED,	"Tunnel Client Auth ID", NULL},
-  {91,	RADIUS_STRING_TAGGED,	"Tunnel Server Auth ID", NULL},
-  {95,	RADIUS_IP6_ADDRESS,	"NAS IPv6 Address", NULL},
-  {96,	RADIUS_IP6_INTF_ID,	"Framed Interface Id", NULL},
-  {97,	RADIUS_IP6_PREFIX,	"Framed IPv6 Prefix", NULL},
-  {98,	RADIUS_IP6_ADDRESS,	"Login IPv6 Host", NULL},
-  {99,	RADIUS_STRING,		"Framed IPV6 Route", NULL},
-  {100,	RADIUS_STRING,		"Framed IPV6 Pool", NULL},
-  {101,	RADIUS_INTEGER4,	"Error-Cause Attribute",radius_error_cause_attribute_vals},/*[RFC3576]*/ 
-  {120,	RADIUS_INTEGER4,	"Ascend Modem Port No", NULL},
-  {121,	RADIUS_INTEGER4,	"Ascend Modem Slot No", NULL},
-  {187,	RADIUS_INTEGER4,	"Ascend Multilink ID", NULL},
-  {188,	RADIUS_INTEGER4,	"Ascend Num In Multilink", NULL},
-  {189,	RADIUS_IP_ADDRESS,	"Ascend First Dest", NULL},
-  {190,	RADIUS_INTEGER4,	"Ascend Pre Input Octets", NULL},
-  {191,	RADIUS_INTEGER4,	"Ascend Pre Output Octets", NULL},
-  {192,	RADIUS_INTEGER4,	"Ascend Pre Input Packets", NULL},
-  {193,	RADIUS_INTEGER4,	"Ascend Pre Output Packets", NULL},
-  {194,	RADIUS_INTEGER4,	"Ascend Maximum Time", NULL},
-  {195,	RADIUS_INTEGER4,	"Ascend Disconnect Cause", NULL},
-  {196,	RADIUS_INTEGER4,	"Ascend Connect Progress", NULL},
-  {197,	RADIUS_INTEGER4,	"Ascend Data Rate", NULL},
-  {198,	RADIUS_INTEGER4,	"Ascend PreSession Time", NULL},
-  {211,	RADIUS_STRING,		"Merit Proxy-Action", NULL},
-  {218,	RADIUS_INTEGER4,	"Ascend Assign IP Pool", NULL},
-  {222,	RADIUS_STRING,		"Merit User-Id", NULL},
-  {223,	RADIUS_STRING,		"Merit User-Realm", NULL},
-  {255,	RADIUS_INTEGER4,	"Ascend Xmit Rate", NULL},
-  {0, 0, NULL, NULL}
+  {60,	RADIUS_BINSTRING,	"CHAP Challenge", NULL, NULL},
+  {61,	RADIUS_INTEGER4,	"NAS Port Type", radius_nas_port_type_vals, NULL},
+  {62,	RADIUS_INTEGER4,	"Port Limit", NULL, NULL},
+  {63,	RADIUS_BINSTRING,	"Login LAT Port", NULL, NULL},
+  {64,	RADIUS_INTEGER4_TAGGED,	"Tunnel Type", radius_tunnel_type_vals, NULL},
+  {65,	RADIUS_INTEGER4_TAGGED,	"Tunnel Medium Type", radius_tunnel_medium_type_vals, NULL},
+  {66,	RADIUS_STRING_TAGGED,	"Tunnel Client Endpoint", NULL, NULL},
+  {67,	RADIUS_STRING_TAGGED,	"Tunnel Server Endpoint", NULL, NULL},
+  {68,	RADIUS_STRING,		"Tunnel Connection", NULL, NULL},
+  {69,	RADIUS_STRING_TAGGED,	"Tunnel Password", NULL, NULL},
+  {70,	RADIUS_STRING,		"ARAP Password", NULL, NULL},
+  {71,	RADIUS_STRING,		"ARAP Features", NULL, NULL},
+  {72,	RADIUS_INTEGER4,	"ARAP Zone-Access", NULL, NULL},
+  {73,	RADIUS_INTEGER4,	"ARAP Security", NULL, NULL},
+  {74,	RADIUS_STRING,		"ARAP Security Data", NULL, NULL},
+  {75,	RADIUS_INTEGER4,	"Password Retry", NULL, NULL},
+  {76,	RADIUS_INTEGER4,	"Prompt", NULL, NULL},
+  {77,	RADIUS_STRING,		"Connect Info", NULL, NULL},
+  {78,	RADIUS_STRING,		"Configuration Token", NULL, NULL},
+  {79,	RADIUS_EAP_MESSAGE,	"EAP Message", NULL, NULL},
+  {80,	RADIUS_BINSTRING,	"Message Authenticator", NULL, NULL},
+  {81,	RADIUS_STRING_TAGGED,	"Tunnel Private Group ID", NULL, NULL},
+  {82,	RADIUS_STRING_TAGGED,	"Tunnel Assignment ID", NULL, NULL},
+  {83,	RADIUS_INTEGER4_TAGGED,	"Tunnel Preference", NULL, NULL},
+  {84,	RADIUS_STRING,		"ARAP Challenge Response", NULL, NULL},
+  {85,	RADIUS_INTEGER4,	"Acct Interim Interval", NULL, NULL},
+  {86,	RADIUS_INTEGER4,	"Tunnel Packets Lost", NULL, NULL},
+  {87,	RADIUS_STRING,		"NAS Port ID", NULL, NULL},
+  {88,	RADIUS_STRING,		"Framed Pool", NULL, NULL},
+  {90,	RADIUS_STRING_TAGGED,	"Tunnel Client Auth ID", NULL, NULL},
+  {91,	RADIUS_STRING_TAGGED,	"Tunnel Server Auth ID", NULL, NULL},
+  {95,	RADIUS_IP6_ADDRESS,	"NAS IPv6 Address", NULL, NULL},
+  {96,	RADIUS_IP6_INTF_ID,	"Framed Interface Id", NULL, NULL},
+  {97,	RADIUS_IP6_PREFIX,	"Framed IPv6 Prefix", NULL, NULL},
+  {98,	RADIUS_IP6_ADDRESS,	"Login IPv6 Host", NULL, NULL},
+  {99,	RADIUS_STRING,		"Framed IPV6 Route", NULL, NULL},
+  {100,	RADIUS_STRING,		"Framed IPV6 Pool", NULL, NULL},
+  {101,	RADIUS_INTEGER4,	"Error-Cause Attribute",radius_error_cause_attribute_vals, NULL},/*[RFC3576]*/
+  {120,	RADIUS_INTEGER4,	"Ascend Modem Port No", NULL, NULL},
+  {121,	RADIUS_INTEGER4,	"Ascend Modem Slot No", NULL, NULL},
+  {187,	RADIUS_INTEGER4,	"Ascend Multilink ID", NULL, NULL},
+  {188,	RADIUS_INTEGER4,	"Ascend Num In Multilink", NULL, NULL},
+  {189,	RADIUS_IP_ADDRESS,	"Ascend First Dest", NULL, NULL},
+  {190,	RADIUS_INTEGER4,	"Ascend Pre Input Octets", NULL, NULL},
+  {191,	RADIUS_INTEGER4,	"Ascend Pre Output Octets", NULL, NULL},
+  {192,	RADIUS_INTEGER4,	"Ascend Pre Input Packets", NULL, NULL},
+  {193,	RADIUS_INTEGER4,	"Ascend Pre Output Packets", NULL, NULL},
+  {194,	RADIUS_INTEGER4,	"Ascend Maximum Time", NULL, NULL},
+  {195,	RADIUS_INTEGER4,	"Ascend Disconnect Cause", NULL, NULL},
+  {196,	RADIUS_INTEGER4,	"Ascend Connect Progress", NULL, NULL},
+  {197,	RADIUS_INTEGER4,	"Ascend Data Rate", NULL, NULL},
+  {198,	RADIUS_INTEGER4,	"Ascend PreSession Time", NULL, NULL},
+  {211,	RADIUS_STRING,		"Merit Proxy-Action", NULL, NULL},
+  {218,	RADIUS_INTEGER4,	"Ascend Assign IP Pool", NULL, NULL},
+  {222,	RADIUS_STRING,		"Merit User-Id", NULL, NULL},
+  {223,	RADIUS_STRING,		"Merit User-Realm", NULL, NULL},
+  {255,	RADIUS_INTEGER4,	"Ascend Xmit Rate", NULL, NULL},
+  {0, 0, NULL, NULL, NULL}
 };
 
 /*
@@ -799,59 +849,76 @@
   {2,	"NETMAN"},
   {0, NULL}
 };
+static const value_string radius_vendor_acct_terminate_cause[] =
+{
+  {1,	"User Request"},
+  {4,	"Idle Timeout"},
+  {5,	"Session Timeout"},
+  {15,	"Service Unavailable"},
+  {0, NULL}
+};
 
+static const value_string radius_vendor_acc_role_vals[] =
+{
+  {1,	"Originating"},
+  {2,	"Terminating"},
+  {0, NULL}
+};
 static const radius_attr_info radius_vendor_acc_attrib[] =
 {
-  {1,	RADIUS_INTEGER4,	"Acc Reason Code", radius_vendor_acc_reason_code_vals},
-  {2,	RADIUS_INTEGER4,	"Acc Ccp Option", radius_vendor_acc_ccp_option_vals},
-  {3,	RADIUS_INTEGER4,	"Acc Input Errors", NULL},
-  {4,	RADIUS_INTEGER4,	"Acc Output Errors", NULL},
-  {5,	RADIUS_STRING,		"Acc Access Partition", NULL},
-  {6,	RADIUS_STRING,		"Acc Customer Id", NULL},
-  {7,	RADIUS_IP_ADDRESS,	"Acc Ip Gateway Pri", NULL},
-  {8,	RADIUS_IP_ADDRESS,	"Acc Ip Gateway Sec", NULL},
-  {9,	RADIUS_INTEGER4,	"Acc Route Policy", radius_vendor_acc_route_policy_vals},
-  {10,	RADIUS_INTEGER4,	"Acc ML MLX Admin State", radius_vendor_acc_ml_mlx_admin_state_vals},
-  {11,	RADIUS_INTEGER4,	"Acc ML Call Threshold", NULL},
-  {12,	RADIUS_INTEGER4,	"Acc ML Clear Threshold", NULL},
-  {13,	RADIUS_INTEGER4,	"Acc ML Damping Factor", NULL},
-  {14,	RADIUS_STRING,		"Acc Tunnel Secret", NULL},
-  {15,	RADIUS_INTEGER4,	"Acc Clearing Cause", q931_cause_code_vals},
-  {16,	RADIUS_INTEGER4,	"Acc Clearing Location", q931_cause_location_vals},
-  {17,	RADIUS_STRING,		"Acc Service Profile", NULL},
-  {18,	RADIUS_INTEGER4,	"Acc Request Type", radius_vendor_acc_request_type_vals},
-  {19,	RADIUS_INTEGER4,	"Acc Bridging Support", radius_vendor_acc_bridging_support_vals},
-  {20,	RADIUS_INTEGER4,	"Acc Apsm Oversubscribed", radius_vendor_acc_apsm_oversubscribed_vals},
-  {21,	RADIUS_INTEGER4,	"Acc Acct On Off Reason", radius_vendor_acc_acct_on_off_reason_vals},
-  {22,	RADIUS_INTEGER4,	"Acc Tunnel Port", NULL},
-  {23,	RADIUS_IP_ADDRESS,	"Acc Dns Server Pri", NULL},
-  {24,	RADIUS_IP_ADDRESS,	"Acc Dns Server Sec", NULL},
-  {25,	RADIUS_IP_ADDRESS,	"Acc Nbns Server Pri", NULL},
-  {26,	RADIUS_IP_ADDRESS,	"Acc Nbns Server Sec", NULL},
-  {27,	RADIUS_INTEGER4,	"Acc Dial Port Index", NULL},
-  {28,	RADIUS_INTEGER4,	"Acc Ip Compression", radius_vendor_acc_ip_compression_vals},
-  {29,	RADIUS_INTEGER4,	"Acc Ipx Compression", radius_vendor_acc_ipx_compression_vals},
-  {30,	RADIUS_INTEGER4,	"Acc Connect Tx Speed", NULL},
-  {31,	RADIUS_INTEGER4,	"Acc Connect Rx Speed", NULL},
-  {32,	RADIUS_STRING,		"Acc Modem Modulation Type", NULL},
-  {33,	RADIUS_STRING,		"Acc Modem Error Protocol", NULL},
-  {34,	RADIUS_INTEGER4,	"Acc Callback Delay", NULL},
-  {35,	RADIUS_STRING,		"Acc Callback Num Valid", NULL},
-  {36,	RADIUS_INTEGER4,	"Acc Callback Mode", radius_vendor_acc_callback_mode_vals},
-  {37,	RADIUS_INTEGER4,	"Acc Callback CBCP Type", radius_vendor_acc_callback_cbcp_type_vals},
-  {38,	RADIUS_INTEGER4,	"Acc Dialout Auth Mode", radius_vendor_acc_dialout_auth_mode_vals},
-  {39,	RADIUS_STRING,		"Acc Dialout Auth Password", NULL},
-  {40,	RADIUS_STRING,		"Acc Dialout Auth Username", NULL},
-  {42,	RADIUS_INTEGER4,	"Acc Access Community", radius_vendor_acc_access_community_vals},
-  {43,	RADIUS_INTEGER4,	"Acc Vpsm Reject Cause", NULL},
-  {44,	RADIUS_STRING,		"Acc Ace Token", NULL},
-  {45,	RADIUS_INTEGER4,	"Acc Ace Token-Ttl", NULL},
-  {46,	RADIUS_STRING,		"Acc Ip Pool Name", NULL},
-  {47,	RADIUS_INTEGER4,	"Acc Igmp Admin State", NULL},
-  {48,	RADIUS_INTEGER4,	"Acc Igmp Version", NULL},
+  {1,	RADIUS_INTEGER4,	"Acc Reason Code", radius_vendor_acc_reason_code_vals, NULL},
+  {2,	RADIUS_INTEGER4,	"Acc Ccp Option", radius_vendor_acc_ccp_option_vals, NULL},
+  {3,	RADIUS_INTEGER4,	"Acc Input Errors", NULL, NULL},
+  {4,	RADIUS_INTEGER4,	"Acc Output Errors", NULL, NULL},
+  {5,	RADIUS_STRING,		"Acc Access Partition", NULL, NULL},
+  {6,	RADIUS_STRING,		"Acc Customer Id", NULL, NULL},
+  {7,	RADIUS_IP_ADDRESS,	"Acc Ip Gateway Pri", NULL, NULL},
+  {8,	RADIUS_IP_ADDRESS,	"Acc Ip Gateway Sec", NULL, NULL},
+  {9,	RADIUS_INTEGER4,	"Acc Route Policy", radius_vendor_acc_route_policy_vals, NULL},
+  {10,	RADIUS_INTEGER4,	"Acc ML MLX Admin State", radius_vendor_acc_ml_mlx_admin_state_vals, NULL},
+  {11,	RADIUS_INTEGER4,	"Acc ML Call Threshold", NULL, NULL},
+  {12,	RADIUS_INTEGER4,	"Acc ML Clear Threshold", NULL, NULL},
+  {13,	RADIUS_INTEGER4,	"Acc ML Damping Factor", NULL, NULL},
+  {14,	RADIUS_STRING,		"Acc Tunnel Secret", NULL, NULL},
+  {15,	RADIUS_INTEGER4,	"Acc Clearing Cause", q931_cause_code_vals, NULL},
+  {16,	RADIUS_INTEGER4,	"Acc Clearing Location", q931_cause_location_vals, NULL},
+  {17,	RADIUS_STRING,		"Acc Service Profile", NULL, NULL},
+  {18,	RADIUS_INTEGER4,	"Acc Request Type", radius_vendor_acc_request_type_vals, NULL},
+  {19,	RADIUS_INTEGER4,	"Acc Bridging Support", radius_vendor_acc_bridging_support_vals, NULL},
+  {20,	RADIUS_INTEGER4,	"Acc Apsm Oversubscribed", radius_vendor_acc_apsm_oversubscribed_vals, NULL},
+  {21,	RADIUS_INTEGER4,	"Acc Acct On Off Reason", radius_vendor_acc_acct_on_off_reason_vals, NULL},
+  {22,	RADIUS_INTEGER4,	"Acc Tunnel Port", NULL, NULL},
+  {23,	RADIUS_IP_ADDRESS,	"Acc Dns Server Pri", NULL, NULL},
+  {24,	RADIUS_IP_ADDRESS,	"Acc Dns Server Sec", NULL, NULL},
+  {25,	RADIUS_IP_ADDRESS,	"Acc Nbns Server Pri", NULL, NULL},
+  {26,	RADIUS_IP_ADDRESS,	"Acc Nbns Server Sec", NULL, NULL},
+  {27,	RADIUS_INTEGER4,	"Acc Dial Port Index", NULL, NULL},
+  {28,	RADIUS_INTEGER4,	"Acc Ip Compression", radius_vendor_acc_ip_compression_vals, NULL},
+  {29,	RADIUS_INTEGER4,	"Acc Ipx Compression", radius_vendor_acc_ipx_compression_vals, NULL},
+  {30,	RADIUS_INTEGER4,	"Acc Connect Tx Speed", NULL, NULL},
+  {31,	RADIUS_INTEGER4,	"Acc Connect Rx Speed", NULL, NULL},
+  {32,	RADIUS_STRING,		"Acc Modem Modulation Type", NULL, NULL},
+  {33,	RADIUS_STRING,		"Acc Modem Error Protocol", NULL, NULL},
+  {34,	RADIUS_INTEGER4,	"Acc Callback Delay", NULL, NULL},
+  {35,	RADIUS_STRING,		"Acc Callback Num Valid", NULL, NULL},
+  {36,	RADIUS_INTEGER4,	"Acc Callback Mode", radius_vendor_acc_callback_mode_vals, NULL},
+  {37,	RADIUS_INTEGER4,	"Acc Callback CBCP Type", radius_vendor_acc_callback_cbcp_type_vals, NULL},
+  {38,	RADIUS_INTEGER4,	"Acc Dialout Auth Mode", radius_vendor_acc_dialout_auth_mode_vals, NULL},
+  {39,	RADIUS_STRING,		"Acc Dialout Auth Password", NULL, NULL},
+  {40,	RADIUS_STRING,		"Acc Dialout Auth Username", NULL, NULL},
+  {42,	RADIUS_INTEGER4,	"Acc Access Community", radius_vendor_acc_access_community_vals, NULL},
+  {43,	RADIUS_INTEGER4,	"Acc Vpsm Reject Cause", NULL, NULL},
+  {44,	RADIUS_STRING,		"Acc Ace Token", NULL, NULL},
+  {45,	RADIUS_INTEGER4,	"Acc Ace Token-Ttl", NULL, NULL},
+  {46,	RADIUS_STRING,		"Acc Ip Pool Name", NULL, NULL},
+  {47,	RADIUS_INTEGER4,	"Acc Igmp Admin State", NULL, NULL},
+  {48,	RADIUS_INTEGER4,	"Acc Igmp Version", NULL, NULL},
+  {49,	RADIUS_INTEGER4,	"Acct-Terminate-Cause", radius_vendor_acct_terminate_cause, NULL},
+  {72,	RADIUS_INTEGER4,	"Acc-Time-For-Start-Of-Charging", NULL, NULL},
+  {133, RADIUS_INTEGER4,	"Acc-Role",radius_vendor_acc_role_vals, NULL},
 
 
-  {0, 0, NULL, NULL},
+  {0, 0, NULL, NULL, NULL},
 };
 
 /*
@@ -898,97 +965,97 @@
 static const radius_attr_info radius_vendor_cisco_attrib[] =
 {
   /* stanard attributes */
-  {1,	RADIUS_STRING,		"Cisco AV Pair", NULL},
-  {2,	RADIUS_STRING,		"Cisco NAS Port", NULL},
+  {1,	RADIUS_STRING,		"Cisco AV Pair", NULL, NULL},
+  {2,	RADIUS_STRING,		"Cisco NAS Port", NULL, NULL},
   /* fax */
-  {3,	RADIUS_STRING,		"Fax Account Id Origin", NULL},
-  {4,	RADIUS_STRING,		"Fax Msg Id", NULL},
-  {5,	RADIUS_STRING,		"Fax Pages", NULL},
-  {6,	RADIUS_STRING,		"Fax Cover Page Flag", NULL},
-  {7,	RADIUS_STRING,		"Fax Modem Time", NULL},
-  {8,	RADIUS_STRING,		"Fax Connect Speed", NULL},
-  {9,	RADIUS_STRING,		"Fax Recipent Count", NULL},
-  {10,	RADIUS_STRING,		"Fax Process Abort Flag", NULL},
-  {11,	RADIUS_STRING,		"Fax DSN Address", NULL},
-  {12,	RADIUS_STRING,		"Fax DSN Flag", NULL},
-  {13,	RADIUS_STRING,		"Fax MDN Address", NULL},
-  {14,	RADIUS_STRING,		"Fax MDN Flag", NULL},
-  {15,	RADIUS_STRING,		"Fax Auth Status", NULL},
-  {16,	RADIUS_STRING,		"Email Server Address", NULL},
-  {17,	RADIUS_STRING,		"Email Server Ack Flag", NULL},
-  {18,	RADIUS_STRING,		"Gateway Id", NULL},
-  {19,	RADIUS_STRING,		"Call Type", NULL},
-  {20,	RADIUS_STRING,		"Port Used", NULL},
-  {21,	RADIUS_STRING,		"Abort Cause", NULL},
+  {3,	RADIUS_STRING,		"Fax Account Id Origin", NULL, NULL},
+  {4,	RADIUS_STRING,		"Fax Msg Id", NULL, NULL},
+  {5,	RADIUS_STRING,		"Fax Pages", NULL, NULL},
+  {6,	RADIUS_STRING,		"Fax Cover Page Flag", NULL, NULL},
+  {7,	RADIUS_STRING,		"Fax Modem Time", NULL, NULL},
+  {8,	RADIUS_STRING,		"Fax Connect Speed", NULL, NULL},
+  {9,	RADIUS_STRING,		"Fax Recipent Count", NULL, NULL},
+  {10,	RADIUS_STRING,		"Fax Process Abort Flag", NULL, NULL},
+  {11,	RADIUS_STRING,		"Fax DSN Address", NULL, NULL},
+  {12,	RADIUS_STRING,		"Fax DSN Flag", NULL, NULL},
+  {13,	RADIUS_STRING,		"Fax MDN Address", NULL, NULL},
+  {14,	RADIUS_STRING,		"Fax MDN Flag", NULL, NULL},
+  {15,	RADIUS_STRING,		"Fax Auth Status", NULL, NULL},
+  {16,	RADIUS_STRING,		"Email Server Address", NULL, NULL},
+  {17,	RADIUS_STRING,		"Email Server Ack Flag", NULL, NULL},
+  {18,	RADIUS_STRING,		"Gateway Id", NULL, NULL},
+  {19,	RADIUS_STRING,		"Call Type", NULL, NULL},
+  {20,	RADIUS_STRING,		"Port Used", NULL, NULL},
+  {21,	RADIUS_STRING,		"Abort Cause", NULL, NULL},
   /* #22 */
   /* H323 - Voice over IP attributes. */
-  {23,	RADIUS_STRING,		"H323 Remote Address", NULL},
-  {24,	RADIUS_STRING,		"H323 Conf Id", NULL},
-  {25,	RADIUS_STRING,		"H323 Setup Time", NULL},
-  {26,	RADIUS_STRING,		"H323 Call Origin", NULL},
-  {27,	RADIUS_STRING,		"H323 Call Type", NULL},
-  {28,	RADIUS_STRING,		"H323 Connect Time", NULL},
-  {29,	RADIUS_STRING,		"H323 Disconnect Time", NULL},
-  {30,	RADIUS_STRING,		"H323 Disconnect Cause", NULL},
-  {31,	RADIUS_STRING,		"H323 Voice Quality", NULL},
+  {23,	RADIUS_STRING,		"H323 Remote Address", NULL, NULL},
+  {24,	RADIUS_STRING,		"H323 Conf Id", NULL, NULL},
+  {25,	RADIUS_STRING,		"H323 Setup Time", NULL, NULL},
+  {26,	RADIUS_STRING,		"H323 Call Origin", NULL, NULL},
+  {27,	RADIUS_STRING,		"H323 Call Type", NULL, NULL},
+  {28,	RADIUS_STRING,		"H323 Connect Time", NULL, NULL},
+  {29,	RADIUS_STRING,		"H323 Disconnect Time", NULL, NULL},
+  {30,	RADIUS_STRING,		"H323 Disconnect Cause", NULL, NULL},
+  {31,	RADIUS_STRING,		"H323 Voice Quality", NULL, NULL},
   /* #32 */
-  {33,	RADIUS_STRING,		"H323 GW Id", NULL},
+  {33,	RADIUS_STRING,		"H323 GW Id", NULL, NULL},
   /* #34 */
-  {35,	RADIUS_STRING,		"H323 Incoming Conf Id", NULL},
+  {35,	RADIUS_STRING,		"H323 Incoming Conf Id", NULL, NULL},
   /* #36-#100 */
-  {101,	RADIUS_STRING,		"H323 Credit Amount", NULL},
-  {102,	RADIUS_STRING,		"H323 Credit Time", NULL},
-  {103,	RADIUS_STRING,		"H323 Return Code", NULL},
-  {104,	RADIUS_STRING,		"H323 Prompt Id", NULL},
-  {105,	RADIUS_STRING,		"H323 Time And Day", NULL},
-  {106,	RADIUS_STRING,		"H323 Redirect Number", NULL},
-  {107,	RADIUS_STRING,		"H323 Preferred Lang", NULL},
-  {108,	RADIUS_STRING,		"H323 Redirect Ip Address", NULL},
-  {109,	RADIUS_STRING,		"H323 Billing Model", NULL},
-  {110,	RADIUS_STRING,		"H323 Currency Type", NULL},
+  {101,	RADIUS_STRING,		"H323 Credit Amount", NULL, NULL},
+  {102,	RADIUS_STRING,		"H323 Credit Time", NULL, NULL},
+  {103,	RADIUS_STRING,		"H323 Return Code", NULL, NULL},
+  {104,	RADIUS_STRING,		"H323 Prompt Id", NULL, NULL},
+  {105,	RADIUS_STRING,		"H323 Time And Day", NULL, NULL},
+  {106,	RADIUS_STRING,		"H323 Redirect Number", NULL, NULL},
+  {107,	RADIUS_STRING,		"H323 Preferred Lang", NULL, NULL},
+  {108,	RADIUS_STRING,		"H323 Redirect Ip Address", NULL, NULL},
+  {109,	RADIUS_STRING,		"H323 Billing Model", NULL, NULL},
+  {110,	RADIUS_STRING,		"H323 Currency Type", NULL, NULL},
   /* #111-#186 */
 /*
        Extra attributes sent by the Cisco, if you configure
        "radius-server vsa accounting" (requires IOS11.2+).
 */
-  {187,	RADIUS_INTEGER4,	"Cisco Multilink ID", NULL},
-  {188,	RADIUS_INTEGER4,	"Cisco Num In Multilink", NULL},
+  {187,	RADIUS_INTEGER4,	"Cisco Multilink ID", NULL, NULL},
+  {188,	RADIUS_INTEGER4,	"Cisco Num In Multilink", NULL, NULL},
   /* #189 */
-  {190,	RADIUS_INTEGER4,	"Cisco Pre Input Octets", NULL},
-  {191,	RADIUS_INTEGER4,	"Cisco Pre Output Octets", NULL},
-  {192,	RADIUS_INTEGER4,	"Cisco Pre Input Packets", NULL},
-  {193,	RADIUS_INTEGER4,	"Cisco Pre Output Packets", NULL},
-  {194,	RADIUS_INTEGER4,	"Cisco Maximum Time", NULL},
-  {195,	RADIUS_INTEGER4,	"Cisco Disconnect Cause", radius_vendor_cisco_disconnect_cause_vals},
+  {190,	RADIUS_INTEGER4,	"Cisco Pre Input Octets", NULL, NULL},
+  {191,	RADIUS_INTEGER4,	"Cisco Pre Output Octets", NULL, NULL},
+  {192,	RADIUS_INTEGER4,	"Cisco Pre Input Packets", NULL, NULL},
+  {193,	RADIUS_INTEGER4,	"Cisco Pre Output Packets", NULL, NULL},
+  {194,	RADIUS_INTEGER4,	"Cisco Maximum Time", NULL, NULL},
+  {195,	RADIUS_INTEGER4,	"Cisco Disconnect Cause", radius_vendor_cisco_disconnect_cause_vals, NULL},
   /* #196 */
-  {197,	RADIUS_INTEGER4,	"Cisco Data Rate", NULL},
-  {198,	RADIUS_INTEGER4,	"Cisco PreSession Time", NULL},
+  {197,	RADIUS_INTEGER4,	"Cisco Data Rate", NULL, NULL},
+  {198,	RADIUS_INTEGER4,	"Cisco PreSession Time", NULL, NULL},
   /* #199-#207 */
-  {208,	RADIUS_INTEGER4,	"Cisco PW Lifetime", NULL},
-  {209,	RADIUS_INTEGER4,	"Cisco IP Direct", NULL},
-  {210,	RADIUS_INTEGER4,	"Cisco PPP VJ Slot Comp", NULL},
+  {208,	RADIUS_INTEGER4,	"Cisco PW Lifetime", NULL, NULL},
+  {209,	RADIUS_INTEGER4,	"Cisco IP Direct", NULL, NULL},
+  {210,	RADIUS_INTEGER4,	"Cisco PPP VJ Slot Comp", NULL, NULL},
   /* #211 */
-  {212,	RADIUS_INTEGER4,	"Cisco PPP Async Map", NULL},
+  {212,	RADIUS_INTEGER4,	"Cisco PPP Async Map", NULL, NULL},
   /* #213-#216 */
-  {217,	RADIUS_INTEGER4,	"Cisco IP Pool Definition", NULL},
-  {218,	RADIUS_INTEGER4,	"Cisco Asing IP Pool", NULL},
+  {217,	RADIUS_INTEGER4,	"Cisco IP Pool Definition", NULL, NULL},
+  {218,	RADIUS_INTEGER4,	"Cisco Asing IP Pool", NULL, NULL},
   /* #219-#227 */
-  {228,	RADIUS_INTEGER4,	"Cisco Route IP", NULL},
+  {228,	RADIUS_INTEGER4,	"Cisco Route IP", NULL, NULL},
   /* #229-#232 */
-  {233,	RADIUS_INTEGER4,	"Cisco Link Compression", NULL},
-  {234,	RADIUS_INTEGER4,	"Cisco Target Util", NULL},
-  {235,	RADIUS_INTEGER4,	"Cisco Maximum Channels", NULL},
+  {233,	RADIUS_INTEGER4,	"Cisco Link Compression", NULL, NULL},
+  {234,	RADIUS_INTEGER4,	"Cisco Target Util", NULL, NULL},
+  {235,	RADIUS_INTEGER4,	"Cisco Maximum Channels", NULL, NULL},
   /* #236-#241 */
-  {242,	RADIUS_INTEGER4,	"Cisco Data Filter", NULL},
-  {243,	RADIUS_INTEGER4,	"Cisco Call Filter", NULL},
-  {244,	RADIUS_INTEGER4,	"Cisco Idle Limit", NULL},
+  {242,	RADIUS_INTEGER4,	"Cisco Data Filter", NULL, NULL},
+  {243,	RADIUS_INTEGER4,	"Cisco Call Filter", NULL, NULL},
+  {244,	RADIUS_INTEGER4,	"Cisco Idle Limit", NULL, NULL},
   /* Cisco SSG Service Selection Gateway Attributes */
-  {250, RADIUS_STRING,		"Cisco Account Info", NULL},
-  {251, RADIUS_STRING,		"Cisco Service Info", NULL},
-  {252, RADIUS_BINSTRING,	"Cisco Command Info", NULL},
-  {253, RADIUS_STRING,		"Cisco Control Info", NULL},
-  {255,	RADIUS_INTEGER4,	"Cisco Xmit Rate", NULL},
-  {0, 0, NULL, NULL}
+  {250, RADIUS_STRING,		"Cisco Account Info", NULL, &hf_radius_cisco_cai},
+  {251, RADIUS_STRING,		"Cisco Service Info", NULL, NULL},
+  {252, RADIUS_BINSTRING,	"Cisco Command Info", NULL, NULL},
+  {253, RADIUS_STRING,		"Cisco Control Info", NULL, NULL},
+  {255,	RADIUS_INTEGER4,	"Cisco Xmit Rate", NULL, NULL},
+  {0, 0, NULL, NULL, NULL}
 };
 
 /*
@@ -1056,23 +1123,23 @@
 
 static const radius_attr_info radius_vendor_shiva_attrib[] =
 {
-  {1,	RADIUS_STRING,		"Shiva User Attributes", NULL},
-  {90,	RADIUS_STRING,		"Shiva Called Number", NULL},
-  {91,	RADIUS_STRING,		"Shiva Calling Number", NULL},
-  {92,	RADIUS_STRING,		"Shiva Customer Id", NULL},
-  {93,	RADIUS_INTEGER4,	"Shiva Type Of Service", radius_vendor_shiva_type_of_service_vals},
-  {94,	RADIUS_INTEGER4,	"Shiva Link Speed", NULL},
-  {95,	RADIUS_INTEGER4,	"Shiva Links In Bundle", NULL},
-  {96,	RADIUS_INTEGER4,	"Shiva Compression Type", NULL},
-  {97,	RADIUS_INTEGER4,	"Shiva Link Protocol", radius_vendor_shiva_link_protocol_vals},
-  {98,	RADIUS_INTEGER4,	"Shiva Network Protocols", NULL},
-  {99,	RADIUS_INTEGER4,	"Shiva Session Id", NULL},
-  {100,	RADIUS_INTEGER4,	"Shiva Disconnect Reason", radius_vendor_shiva_disconnect_reason_vals},
-  {101,	RADIUS_IP_ADDRESS,	"Shiva Acct Serv Switch", NULL},
-  {102,	RADIUS_INTEGER4,	"Shiva Event Flags", NULL},
-  {103,	RADIUS_INTEGER4,	"Shiva Function", radius_vendor_shiva_function_vals},
-  {104,	RADIUS_INTEGER4,	"Shiva Connect Reason", radius_vendor_shiva_connect_reason_vals},
-  {0, 0, NULL, NULL},
+  {1,	RADIUS_STRING,		"Shiva User Attributes", NULL, NULL},
+  {90,	RADIUS_STRING,		"Shiva Called Number", NULL, NULL},
+  {91,	RADIUS_STRING,		"Shiva Calling Number", NULL, NULL},
+  {92,	RADIUS_STRING,		"Shiva Customer Id", NULL, NULL},
+  {93,	RADIUS_INTEGER4,	"Shiva Type Of Service", radius_vendor_shiva_type_of_service_vals, NULL},
+  {94,	RADIUS_INTEGER4,	"Shiva Link Speed", NULL, NULL},
+  {95,	RADIUS_INTEGER4,	"Shiva Links In Bundle", NULL, NULL},
+  {96,	RADIUS_INTEGER4,	"Shiva Compression Type", NULL, NULL},
+  {97,	RADIUS_INTEGER4,	"Shiva Link Protocol", radius_vendor_shiva_link_protocol_vals, NULL},
+  {98,	RADIUS_INTEGER4,	"Shiva Network Protocols", NULL, NULL},
+  {99,	RADIUS_INTEGER4,	"Shiva Session Id", NULL, NULL},
+  {100,	RADIUS_INTEGER4,	"Shiva Disconnect Reason", radius_vendor_shiva_disconnect_reason_vals, NULL},
+  {101,	RADIUS_IP_ADDRESS,	"Shiva Acct Serv Switch", NULL, NULL},
+  {102,	RADIUS_INTEGER4,	"Shiva Event Flags", NULL, NULL},
+  {103,	RADIUS_INTEGER4,	"Shiva Function", radius_vendor_shiva_function_vals, NULL},
+  {104,	RADIUS_INTEGER4,	"Shiva Connect Reason", radius_vendor_shiva_connect_reason_vals, NULL},
+  {0, 0, NULL, NULL, NULL},
 };
 
 /*
@@ -1084,14 +1151,14 @@
 
 static const radius_attr_info radius_vendor_cisco_vpn5000_attrib[] =
 {
-  {1,	RADIUS_INTEGER4,		"CVPN5000-Tunnel-Throughput", NULL},
-  {2,	RADIUS_IP_ADDRESS,	"CVPN5000-Client-Assigned-IP", NULL},
-  {3,	RADIUS_IP_ADDRESS,	"CVPN5000-Client-Real-IP", NULL},
-  {4,	RADIUS_STRING,		"CVPN5000-VPN-GroupInfo", NULL},
-  {5,	RADIUS_STRING,		"CVPN5000-VPN-Password", NULL},
-  {6,	RADIUS_INTEGER4,		"CVPN5000-Echo", NULL},
-  {7,	RADIUS_INTEGER4,		"CVPN5000-Client-Assigned-IPX", NULL},
-  {0, 0, NULL, NULL},
+  {1,	RADIUS_INTEGER4,		"CVPN5000-Tunnel-Throughput", NULL, NULL},
+  {2,	RADIUS_IP_ADDRESS,	"CVPN5000-Client-Assigned-IP", NULL, NULL},
+  {3,	RADIUS_IP_ADDRESS,	"CVPN5000-Client-Real-IP", NULL, NULL},
+  {4,	RADIUS_STRING,		"CVPN5000-VPN-GroupInfo", NULL, NULL},
+  {5,	RADIUS_STRING,		"CVPN5000-VPN-Password", NULL, NULL},
+  {6,	RADIUS_INTEGER4,		"CVPN5000-Echo", NULL, NULL},
+  {7,	RADIUS_INTEGER4,		"CVPN5000-Client-Assigned-IPX", NULL, NULL},
+  {0, 0, NULL, NULL, NULL},
 };
 
 /*
@@ -1149,28 +1216,28 @@
 
 static const radius_attr_info radius_vendor_livingston_attrib[] =
 {
-  {2,	RADIUS_STRING,		"LE Terminate Detail", NULL},
-  {3,	RADIUS_STRING,		"LE Advice of Charge", NULL},
-  {4,	RADIUS_STRING,		"LE Connect Detail", NULL},
-  {6,	RADIUS_STRING,		"LE IP Pool", NULL},
-  {7,	RADIUS_IP_ADDRESS,	"LE IP Gateway", NULL},
-  {8,	RADIUS_STRING,		"LE Modem Info", NULL},
-  {9,	RADIUS_INTEGER4,	"LE IPSec Log Options", radius_vendor_livingston_ipsec_log_options_vals},
-  {10,	RADIUS_INTEGER4,	"LE IPSec Deny Action", radius_vendor_livingston_ipsec_deny_action_vals},
-  {11,	RADIUS_STRING,		"LE IPSec Active Profile", NULL},
-  {12,	RADIUS_STRING,		"LE IPSec Outsource Profile", NULL},
-  {13,	RADIUS_STRING,		"LE IPSec Passive Profile", NULL},
-  {14,	RADIUS_INTEGER4,	"LE NAT TCP Session Timeout", NULL},
-  {15,	RADIUS_INTEGER4,	"LE NAT Other Session Timeout", NULL},
-  {16,	RADIUS_INTEGER4,	"LE NAT Log Options", radius_vendor_livingston_nat_log_options_vals},
-  {17,	RADIUS_INTEGER4,	"LE NAT Sess Dir Fail Action", radius_vendor_livingston_nat_sess_dir_fail_action_vals},
-  {18,	RADIUS_STRING,		"LE NAT Inmap", NULL},
-  {19,	RADIUS_STRING,		"LE NAT Outmap", NULL},
-  {20,	RADIUS_STRING,		"LE NAT Outsource Inmap", NULL},
-  {21,	RADIUS_STRING,		"LE NAT Outsource Outmap", NULL},
-  {22,	RADIUS_STRING,		"LE Admin Group", NULL},
-  {23,	RADIUS_INTEGER4,	"LE Multicast Client", radius_vendor_livingston_multicast_client_vals},
-  {0, 0, NULL, NULL},
+  {2,	RADIUS_STRING,		"LE Terminate Detail", NULL, NULL},
+  {3,	RADIUS_STRING,		"LE Advice of Charge", NULL, NULL},
+  {4,	RADIUS_STRING,		"LE Connect Detail", NULL, NULL},
+  {6,	RADIUS_STRING,		"LE IP Pool", NULL, NULL},
+  {7,	RADIUS_IP_ADDRESS,	"LE IP Gateway", NULL, NULL},
+  {8,	RADIUS_STRING,		"LE Modem Info", NULL, NULL},
+  {9,	RADIUS_INTEGER4,	"LE IPSec Log Options", radius_vendor_livingston_ipsec_log_options_vals, NULL},
+  {10,	RADIUS_INTEGER4,	"LE IPSec Deny Action", radius_vendor_livingston_ipsec_deny_action_vals, NULL},
+  {11,	RADIUS_STRING,		"LE IPSec Active Profile", NULL, NULL},
+  {12,	RADIUS_STRING,		"LE IPSec Outsource Profile", NULL, NULL},
+  {13,	RADIUS_STRING,		"LE IPSec Passive Profile", NULL, NULL},
+  {14,	RADIUS_INTEGER4,	"LE NAT TCP Session Timeout", NULL, NULL},
+  {15,	RADIUS_INTEGER4,	"LE NAT Other Session Timeout", NULL, NULL},
+  {16,	RADIUS_INTEGER4,	"LE NAT Log Options", radius_vendor_livingston_nat_log_options_vals, NULL},
+  {17,	RADIUS_INTEGER4,	"LE NAT Sess Dir Fail Action", radius_vendor_livingston_nat_sess_dir_fail_action_vals, NULL},
+  {18,	RADIUS_STRING,		"LE NAT Inmap", NULL, NULL},
+  {19,	RADIUS_STRING,		"LE NAT Outmap", NULL, NULL},
+  {20,	RADIUS_STRING,		"LE NAT Outsource Inmap", NULL, NULL},
+  {21,	RADIUS_STRING,		"LE NAT Outsource Outmap", NULL, NULL},
+  {22,	RADIUS_STRING,		"LE Admin Group", NULL, NULL},
+  {23,	RADIUS_INTEGER4,	"LE Multicast Client", radius_vendor_livingston_multicast_client_vals, NULL},
+  {0, 0, NULL, NULL, NULL},
 };
 
 static const value_string radius_vendor_microsoft_bap_usage_vals[] =
@@ -1211,38 +1278,38 @@
 
 static const radius_attr_info radius_vendor_microsoft_attrib[] =
 {
-  {1,	RADIUS_BINSTRING,	"MS CHAP Response", NULL},
-  {2,	RADIUS_STRING,		"MS CHAP Error", NULL},
-  {3,	RADIUS_BINSTRING,	"MS CHAP CPW 1", NULL},
-  {4,	RADIUS_BINSTRING,	"MS CHAP CPW 2", NULL},
-  {5,	RADIUS_BINSTRING,	"MS CHAP LM Enc PW", NULL},
-  {6,	RADIUS_BINSTRING,	"MS CHAP NT Enc PW", NULL},
-  {7,	RADIUS_BINSTRING,	"MS MPPE Encryption Policy", NULL},
-  {8,	RADIUS_BINSTRING,	"MS MPPE Encryption Type", NULL},
-  {9,	RADIUS_INTEGER4,	"MS RAS Vendor", NULL},
-  {10,	RADIUS_STRING,		"MS CHAP Domain", NULL},
-  {11,	RADIUS_BINSTRING,	"MS CHAP Challenge", NULL},
-  {12,	RADIUS_BINSTRING,	"MS CHAP MPPE Keys", NULL},
-  {13,	RADIUS_INTEGER4,	"MS BAP Usage", radius_vendor_microsoft_bap_usage_vals},
-  {14,	RADIUS_INTEGER4,	"MS Link Utilization Threshold", NULL},
-  {15,	RADIUS_INTEGER4,	"MS Link Drop Time Limit", NULL},
-  {16,	RADIUS_BINSTRING,	"MS MPPE Send Key", NULL},
-  {17,	RADIUS_BINSTRING,	"MS MPPE Recv Key", NULL},
-  {18,	RADIUS_STRING,		"MS RAS Version", NULL},
-  {19,	RADIUS_BINSTRING,	"MS Old ARAP Password", NULL},
-  {20,	RADIUS_BINSTRING,	"MS New ARAP Password", NULL},
-  {21,	RADIUS_INTEGER4,	"MS ARAP PW Change Reason", radius_vendor_microsoft_arap_pw_change_reason_vals},
-  {22,	RADIUS_BINSTRING,	"MS Filter", NULL},
-  {23,	RADIUS_INTEGER4,	"MS Acct Auth Type", radius_vendor_microsoft_acct_auth_type_vals},
-  {24,	RADIUS_INTEGER4,	"MS Acct EAP Type", radius_vendor_microsoft_acct_eap_type_vals},
-  {25,	RADIUS_BINSTRING,	"MS CHAP2 Response", NULL},
-  {26,	RADIUS_BINSTRING,	"MS CHAP2 Success", NULL},
-  {27,	RADIUS_BINSTRING,	"MS CHAP2 CPW", NULL},
-  {28,	RADIUS_IP_ADDRESS,	"MS Primary DNS Server", NULL},
-  {29,	RADIUS_IP_ADDRESS,	"MS Secondary DNS Server", NULL},
-  {30,	RADIUS_IP_ADDRESS,	"MS Primary NBNS Server", NULL},
-  {31,	RADIUS_IP_ADDRESS,	"MS Secondary NBNS Server", NULL},
-  {0, 0, NULL, NULL}
+  {1,	RADIUS_BINSTRING,	"MS CHAP Response", NULL, NULL},
+  {2,	RADIUS_STRING,		"MS CHAP Error", NULL, NULL},
+  {3,	RADIUS_BINSTRING,	"MS CHAP CPW 1", NULL, NULL},
+  {4,	RADIUS_BINSTRING,	"MS CHAP CPW 2", NULL, NULL},
+  {5,	RADIUS_BINSTRING,	"MS CHAP LM Enc PW", NULL, NULL},
+  {6,	RADIUS_BINSTRING,	"MS CHAP NT Enc PW", NULL, NULL},
+  {7,	RADIUS_BINSTRING,	"MS MPPE Encryption Policy", NULL, NULL},
+  {8,	RADIUS_BINSTRING,	"MS MPPE Encryption Type", NULL, NULL},
+  {9,	RADIUS_INTEGER4,	"MS RAS Vendor", NULL, NULL},
+  {10,	RADIUS_STRING,		"MS CHAP Domain", NULL, NULL},
+  {11,	RADIUS_BINSTRING,	"MS CHAP Challenge", NULL, NULL},
+  {12,	RADIUS_BINSTRING,	"MS CHAP MPPE Keys", NULL, NULL},
+  {13,	RADIUS_INTEGER4,	"MS BAP Usage", radius_vendor_microsoft_bap_usage_vals, NULL},
+  {14,	RADIUS_INTEGER4,	"MS Link Utilization Threshold", NULL, NULL},
+  {15,	RADIUS_INTEGER4,	"MS Link Drop Time Limit", NULL, NULL},
+  {16,	RADIUS_BINSTRING,	"MS MPPE Send Key", NULL, NULL},
+  {17,	RADIUS_BINSTRING,	"MS MPPE Recv Key", NULL, NULL},
+  {18,	RADIUS_STRING,		"MS RAS Version", NULL, NULL},
+  {19,	RADIUS_BINSTRING,	"MS Old ARAP Password", NULL, NULL},
+  {20,	RADIUS_BINSTRING,	"MS New ARAP Password", NULL, NULL},
+  {21,	RADIUS_INTEGER4,	"MS ARAP PW Change Reason", radius_vendor_microsoft_arap_pw_change_reason_vals, NULL},
+  {22,	RADIUS_BINSTRING,	"MS Filter", NULL, NULL},
+  {23,	RADIUS_INTEGER4,	"MS Acct Auth Type", radius_vendor_microsoft_acct_auth_type_vals, NULL},
+  {24,	RADIUS_INTEGER4,	"MS Acct EAP Type", radius_vendor_microsoft_acct_eap_type_vals, NULL},
+  {25,	RADIUS_BINSTRING,	"MS CHAP2 Response", NULL, NULL},
+  {26,	RADIUS_BINSTRING,	"MS CHAP2 Success", NULL, NULL},
+  {27,	RADIUS_BINSTRING,	"MS CHAP2 CPW", NULL, NULL},
+  {28,	RADIUS_IP_ADDRESS,	"MS Primary DNS Server", NULL, NULL},
+  {29,	RADIUS_IP_ADDRESS,	"MS Secondary DNS Server", NULL, NULL},
+  {30,	RADIUS_IP_ADDRESS,	"MS Primary NBNS Server", NULL, NULL},
+  {31,	RADIUS_IP_ADDRESS,	"MS Secondary NBNS Server", NULL, NULL},
+  {0, 0, NULL, NULL, NULL}
 };
 
 static const value_string radius_vendor_ascend_calling_id_type_of_number_vals[] =
@@ -1286,254 +1353,254 @@
 
 static const radius_attr_info radius_vendor_ascend_attrib[] =
 {
-  {7,	RADIUS_STRING,		"Ascend UU Info", NULL},
-  {9,	RADIUS_INTEGER4,	"Ascend CIR Timer", NULL},
-  {10,	RADIUS_INTEGER4,	"Ascend FR 08 Mode", NULL},
-  {11,	RADIUS_INTEGER4,	"Ascend Destination Nas Port", NULL},
-  {12,	RADIUS_STRING,		"Ascend FR SVC Addr", NULL},
-  {13,	RADIUS_INTEGER4,	"Ascend NAS Port Format", NULL},
-  {14,	RADIUS_INTEGER4,	"Ascend ATM Fault Management", NULL},
-  {15,	RADIUS_INTEGER4,	"Ascend ATM Loopback Cell Loss", NULL},
-  {16,	RADIUS_INTEGER4,	"Ascend Ckt Type", NULL},
-  {17,	RADIUS_INTEGER4,	"Ascend SVC Enabled", NULL},
-  {18,	RADIUS_INTEGER4,	"Ascend Session Type", NULL},
-  {19,	RADIUS_IP_ADDRESS,	"Ascend H323 Gatekeeper", NULL},
-  {20,	RADIUS_STRING,		"Ascend Global Call Id", NULL},
-  {21,	RADIUS_INTEGER4,	"Ascend H323 Conference Id", NULL},
-  {22,	RADIUS_IP_ADDRESS,	"Ascend H323 Fegw Address", NULL},
-  {23,	RADIUS_INTEGER4,	"Ascend H323 Dialed Time", NULL},
-  {24,	RADIUS_STRING,		"Ascend Dialed Number", NULL},
-  {25,	RADIUS_INTEGER4,	"Ascend Inter Arrival Jitter", NULL},
-  {26,	RADIUS_INTEGER4,	"Ascend Dropped Octets", NULL},
-  {27,	RADIUS_INTEGER4,	"Ascend Dropped Packets", NULL},
-  {29,	RADIUS_INTEGER4,	"Ascend X25 Pad X3 Profile", NULL},
-  {30,	RADIUS_STRING,		"Ascend X25 Pad X3 Parameters", NULL},
-  {31,	RADIUS_STRING,		"Ascend Tunnel VRouter Name", NULL},
-  {32,	RADIUS_INTEGER4,	"Ascend X25 Reverse Charging", NULL},
-  {33,	RADIUS_STRING,		"Ascend X25 Nui Prompt", NULL},
-  {34,	RADIUS_STRING,		"Ascend X25 Nui Password Prompt", NULL},
-  {35,	RADIUS_STRING,		"Ascend X25 Cug", NULL},
-  {36,	RADIUS_STRING,		"Ascend X25 Pad Alias 1", NULL},
-  {37,	RADIUS_STRING,		"Ascend X25 Pad Alias 2", NULL},
-  {38,	RADIUS_STRING,		"Ascend X25 Pad Alias 3", NULL},
-  {39,	RADIUS_STRING,		"Ascend X25 X121 Address", NULL},
-  {40,	RADIUS_STRING,		"Ascend X25 Nui", NULL},
-  {41,	RADIUS_STRING,		"Ascend X25 Rpoa", NULL},
-  {42,	RADIUS_STRING,		"Ascend X25 Pad Prompt", NULL},
-  {43,	RADIUS_STRING,		"Ascend X25 Pad Banner", NULL},
-  {44,	RADIUS_STRING,		"Ascend X25 Profile Name", NULL},
-  {45,	RADIUS_STRING,		"Ascend Recv Name", NULL},
-  {46,	RADIUS_INTEGER4,	"Ascend Bi Directional Auth", NULL},
-  {47,	RADIUS_INTEGER4,	"Ascend MTU", NULL},
-  {48,	RADIUS_INTEGER4,	"Ascend Call Direction", NULL},
-  {49,	RADIUS_INTEGER4,	"Ascend Service Type", NULL},
-  {50,	RADIUS_INTEGER4,	"Ascend Filter Required", NULL},
-  {51,	RADIUS_INTEGER4,	"Ascend Traffic Shaper", NULL},
-  {52,	RADIUS_STRING,		"Ascend Access Intercept LEA", NULL},
-  {53,	RADIUS_STRING,		"Ascend Access Intercept Log", NULL},
-  {54,	RADIUS_STRING,		"Ascend Private Route Table ID", NULL},
-  {55,	RADIUS_INTEGER4,	"Ascend Private Route Required", NULL},
-  {56,	RADIUS_INTEGER4,	"Ascend Cache Refresh", NULL},
-  {57,	RADIUS_INTEGER4,	"Ascend Cache Time", NULL},
-  {58,	RADIUS_INTEGER4,	"Ascend Egress Enabled", NULL},
-  {59,	RADIUS_STRING,		"Ascend QOS Upstream", NULL},
-  {60,	RADIUS_STRING,		"Ascend QOS Downstream", NULL},
-  {61,	RADIUS_INTEGER4,	"Ascend ATM Connect Vpi", NULL},
-  {62,	RADIUS_INTEGER4,	"Ascend ATM Connect Vci", NULL},
-  {63,	RADIUS_INTEGER4,	"Ascend ATM Connect Group", NULL},
-  {64,	RADIUS_INTEGER4,	"Ascend ATM Group", NULL},
-  {65,	RADIUS_INTEGER4,	"Ascend IPX Header Compression", NULL},
-  {66,	RADIUS_INTEGER4,	"Ascend Calling Id Type Of Number", radius_vendor_ascend_calling_id_type_of_number_vals},
-  {67,	RADIUS_INTEGER4,	"Ascend Calling Id Numbering Plan", radius_vendor_ascend_calling_id_numbering_plan_vals},
-  {68,	RADIUS_INTEGER4,	"Ascend Calling Id Presentation", radius_vendor_ascend_calling_id_presentation_vals},
-  {69,	RADIUS_INTEGER4,	"Ascend Calling Id Screening", radius_vendor_ascend_calling_id_screening_vals},
-  {70,	RADIUS_INTEGER4,	"Ascend BIR Enable", NULL},
-  {71,	RADIUS_INTEGER4,	"Ascend BIR Proxy", NULL},
-  {72,	RADIUS_INTEGER4,	"Ascend BIR Bridge Group", NULL},
-  {73,	RADIUS_STRING,		"Ascend IPSEC Profile", NULL},
-  {74,	RADIUS_INTEGER4,	"Ascend PPPoE Enable", NULL},
-  {75,	RADIUS_INTEGER4,	"Ascend Bridge Non PPPoE", NULL},
-  {76,	RADIUS_INTEGER4,	"Ascend ATM Direct", NULL},
-  {77,	RADIUS_STRING,		"Ascend ATM Direct Profile", NULL},
-  {78,	RADIUS_IP_ADDRESS,	"Ascend Client Primary WINS", NULL},
-  {79,	RADIUS_IP_ADDRESS,	"Ascend Client Secondary WINS", NULL},
-  {80,	RADIUS_INTEGER4,	"Ascend Client Assign WINS", NULL},
-  {81,	RADIUS_INTEGER4,	"Ascend Auth Type", NULL},
-  {82,	RADIUS_INTEGER4,	"Ascend Port Redir Protocol", NULL},
-  {83,	RADIUS_INTEGER4,	"Ascend Port Redir Portnum", NULL},
-  {84,	RADIUS_IP_ADDRESS,	"Ascend Port Redir Server", NULL},
-  {85,	RADIUS_INTEGER4,	"Ascend IP Pool Chaining", NULL},
-  {86,	RADIUS_IP_ADDRESS,	"Ascend Owner IP Addr", NULL},
-  {87,	RADIUS_INTEGER4,	"Ascend IP TOS", NULL},
-  {88,	RADIUS_INTEGER4,	"Ascend IP TOS Precedence", NULL},
-  {89,	RADIUS_INTEGER4,	"Ascend IP TOS Apply To", NULL},
-  {90,	RADIUS_STRING,		"Ascend Filter", NULL},
-  {91,	RADIUS_STRING,		"Ascend Telnet Profile", NULL},
-  {92,	RADIUS_INTEGER4,	"Ascend Dsl Rate Type", NULL},
-  {93,	RADIUS_STRING,		"Ascend Redirect Number", NULL},
-  {94,	RADIUS_INTEGER4,	"Ascend ATM Vpi", NULL},
-  {95,	RADIUS_INTEGER4,	"Ascend ATM Vci", NULL},
-  {96,	RADIUS_INTEGER4,	"Ascend Source IP Check", NULL},
-  {97,	RADIUS_INTEGER4,	"Ascend Dsl Rate Mode", NULL},
-  {98,	RADIUS_INTEGER4,	"Ascend Dsl Upstream Limit", NULL},
-  {99,	RADIUS_INTEGER4,	"Ascend Dsl Downstream Limit", NULL},
-  {100,	RADIUS_INTEGER4,	"Ascend Dsl CIR Recv Limit", NULL},
-  {101,	RADIUS_INTEGER4,	"Ascend Dsl CIR Xmit Limit", NULL},
-  {102,	RADIUS_STRING,		"Ascend VRouter Name", NULL},
-  {103,	RADIUS_STRING,		"Ascend Source Auth", NULL},
-  {104,	RADIUS_STRING,		"Ascend Private Route", NULL},
-  {105,	RADIUS_INTEGER4,	"Ascend Numbering Plan ID", NULL},
-  {106,	RADIUS_INTEGER4,	"Ascend FR Link Status DLCI", NULL},
-  {107,	RADIUS_STRING,		"Ascend Calling Subaddress", NULL},
-  {108,	RADIUS_INTEGER4,	"Ascend Callback Delay", NULL},
-  {109,	RADIUS_STRING,		"Ascend Endpoint Disc", NULL},
-  {110,	RADIUS_STRING,		"Ascend Remote FW", NULL},
-  {111,	RADIUS_INTEGER4,	"Ascend Multicast GLeave Delay", NULL},
-  {112,	RADIUS_INTEGER4,	"Ascend CBCP Enable", NULL},
-  {113,	RADIUS_INTEGER4,	"Ascend CBCP Mode", NULL},
-  {114,	RADIUS_INTEGER4,	"Ascend CBCP Delay", NULL},
-  {115,	RADIUS_INTEGER4,	"Ascend CBCP Trunk Group", NULL},
-  {116,	RADIUS_STRING,		"Ascend Appletalk Route", NULL},
-  {117,	RADIUS_INTEGER4,	"Ascend Appletalk Peer Mode", NULL},
-  {118,	RADIUS_INTEGER4,	"Ascend Route Appletalk", NULL},
-  {119,	RADIUS_STRING,		"Ascend FCP Parameter", NULL},
-  {120,	RADIUS_INTEGER4,	"Ascend Modem Port No", NULL},
-  {121,	RADIUS_INTEGER4,	"Ascend Modem Slot No", NULL},
-  {122,	RADIUS_INTEGER4,	"Ascend Modem Shelf No", NULL},
-  {123,	RADIUS_INTEGER4,	"Ascend Call Attempt Limit", NULL},
-  {124,	RADIUS_INTEGER4,	"Ascend Call Block Duration", NULL},
-  {125,	RADIUS_INTEGER4,	"Ascend Maximum Call Duration", NULL},
-  {126,	RADIUS_INTEGER4,	"Ascend Temporary Rtes", NULL},
-  {127,	RADIUS_INTEGER4,	"Ascend Tunneling Protocol", NULL},
-  {128,	RADIUS_INTEGER4,	"Ascend Shared Profile Enable", NULL},
-  {129,	RADIUS_STRING,		"Ascend Primary Home Agent", NULL},
-  {130,	RADIUS_STRING,		"Ascend Secondary Home Agent", NULL},
-  {131,	RADIUS_INTEGER4,	"Ascend Dialout Allowed", NULL},
-  {132,	RADIUS_IP_ADDRESS,	"Ascend Client Gateway", NULL},
-  {133,	RADIUS_INTEGER4,	"Ascend BACP Enable", NULL},
-  {134,	RADIUS_INTEGER4,	"Ascend DHCP Maximum Leases", NULL},
-  {135,	RADIUS_IP_ADDRESS,	"Ascend Client Primary DNS", NULL},
-  {136,	RADIUS_IP_ADDRESS,	"Ascend Client Secondary DNS", NULL},
-  {137,	RADIUS_INTEGER4,	"Ascend Client Assign DNS", NULL},
-  {138,	RADIUS_INTEGER4,	"Ascend User Acct Type", NULL},
-  {139,	RADIUS_IP_ADDRESS,	"Ascend User Acct Host", NULL},
-  {140,	RADIUS_INTEGER4,	"Ascend User Acct Port", NULL},
-  {141,	RADIUS_STRING,		"Ascend User Acct Key", NULL},
-  {142,	RADIUS_INTEGER4,	"Ascend User Acct Base", NULL},
-  {143,	RADIUS_INTEGER4,	"Ascend User Acct Time", NULL},
-  {144,	RADIUS_IP_ADDRESS,	"Ascend Assign IP Client", NULL},
-  {145,	RADIUS_IP_ADDRESS,	"Ascend Assign IP Server", NULL},
-  {146,	RADIUS_STRING,		"Ascend Assign IP Global Pool", NULL},
-  {147,	RADIUS_INTEGER4,	"Ascend DHCP Reply", NULL},
-  {148,	RADIUS_INTEGER4,	"Ascend DHCP Pool Number", NULL},
-  {149,	RADIUS_INTEGER4,	"Ascend Expect Callback", NULL},
-  {150,	RADIUS_INTEGER4,	"Ascend Event Type", NULL},
-  {151,	RADIUS_STRING,		"Ascend Session Svr Key", NULL},
-  {152,	RADIUS_INTEGER4,	"Ascend Multicast Rate Limit", NULL},
-  {153,	RADIUS_IP_ADDRESS,	"Ascend IF Netmask", NULL},
-  {154,	RADIUS_IP_ADDRESS,	"Ascend Remote Addr", NULL},
-  {155,	RADIUS_INTEGER4,	"Ascend Multicast Client", NULL},
-  {156,	RADIUS_STRING,		"Ascend FR Circuit Name", NULL},
-  {157,	RADIUS_INTEGER4,	"Ascend FR LinkUp", NULL},
-  {158,	RADIUS_INTEGER4,	"Ascend FR Nailed Grp", NULL},
-  {159,	RADIUS_INTEGER4,	"Ascend FR Type", NULL},
-  {160,	RADIUS_INTEGER4,	"Ascend FR Link Mgt", NULL},
-  {161,	RADIUS_INTEGER4,	"Ascend FR N391", NULL},
-  {162,	RADIUS_INTEGER4,	"Ascend FR DCE N392", NULL},
-  {163,	RADIUS_INTEGER4,	"Ascend FR DTE N392", NULL},
-  {164,	RADIUS_INTEGER4,	"Ascend FR DCE N393", NULL},
-  {165,	RADIUS_INTEGER4,	"Ascend FR DTE N393", NULL},
-  {166,	RADIUS_INTEGER4,	"Ascend FR T391", NULL},
-  {167,	RADIUS_INTEGER4,	"Ascend FR T392", NULL},
-  {168,	RADIUS_STRING,		"Ascend Bridge Address", NULL},
-  {169,	RADIUS_INTEGER4,	"Ascend TS Idle Limit", NULL},
-  {170,	RADIUS_INTEGER4,	"Ascend TS Idle Mode", NULL},
-  {171,	RADIUS_INTEGER4,	"Ascend DBA Monitor", NULL},
-  {172,	RADIUS_INTEGER4,	"Ascend Base Channel Count", NULL},
-  {173,	RADIUS_INTEGER4,	"Ascend Minimum Channels", NULL},
-  {174,	RADIUS_STRING,		"Ascend IPX Route", NULL},
-  {175,	RADIUS_INTEGER4,	"Ascend FT1 Caller", NULL},
-  {176,	RADIUS_STRING,		"Ascend Backup", NULL},
-  {177,	RADIUS_INTEGER4,	"Ascend Call Type", NULL},
-  {178,	RADIUS_STRING,		"Ascend Group", NULL},
-  {179,	RADIUS_INTEGER4,	"Ascend FR DLCI", NULL},
-  {180,	RADIUS_STRING,		"Ascend FR Profile Name", NULL},
-  {181,	RADIUS_STRING,		"Ascend Ara PW", NULL},
-  {182,	RADIUS_STRING,		"Ascend IPX Node Addr", NULL},
-  {183,	RADIUS_IP_ADDRESS,	"Ascend Home Agent IP Addr", NULL},
-  {184,	RADIUS_STRING,		"Ascend Home Agent Password", NULL},
-  {185,	RADIUS_STRING,		"Ascend Home Network Name", NULL},
-  {186,	RADIUS_INTEGER4,	"Ascend Home Agent UDP Port", NULL},
-  {187,	RADIUS_INTEGER4,	"Ascend Multilink ID", NULL},
-  {188,	RADIUS_INTEGER4,	"Ascend Num In Multilink", NULL},
-  {189,	RADIUS_IP_ADDRESS,	"Ascend First Dest", NULL},
-  {190,	RADIUS_INTEGER4,	"Ascend Pre Input Octets", NULL},
-  {191,	RADIUS_INTEGER4,	"Ascend Pre Output Octets", NULL},
-  {192,	RADIUS_INTEGER4,	"Ascend Pre Input Packets", NULL},
-  {193,	RADIUS_INTEGER4,	"Ascend Pre Output Packets", NULL},
-  {194,	RADIUS_INTEGER4,	"Ascend Maximum Time", NULL},
-  {195,	RADIUS_INTEGER4,	"Ascend Disconnect Cause", NULL},
-  {196,	RADIUS_INTEGER4,	"Ascend Connect Progress", NULL},
-  {197,	RADIUS_INTEGER4,	"Ascend Data Rate", NULL},
-  {198,	RADIUS_INTEGER4,	"Ascend PreSession Time", NULL},
-  {199,	RADIUS_INTEGER4,	"Ascend Token Idle", NULL},
-  {200,	RADIUS_INTEGER4,	"Ascend Token Immediate", NULL},
-  {201,	RADIUS_INTEGER4,	"Ascend Require Auth", NULL},
-  {202,	RADIUS_STRING,		"Ascend Number Sessions", NULL},
-  {203,	RADIUS_STRING,		"Ascend Authen Alias", NULL},
-  {204,	RADIUS_INTEGER4,	"Ascend Token Expiry", NULL},
-  {205,	RADIUS_STRING,		"Ascend Menu Selector", NULL},
-  {206,	RADIUS_STRING,		"Ascend Menu Item", NULL},
-  {207,	RADIUS_INTEGER4,	"Ascend PW Warntime", NULL},
-  {208,	RADIUS_INTEGER4,	"Ascend PW Lifetime", NULL},
-  {209,	RADIUS_IP_ADDRESS,	"Ascend IP Direct", NULL},
-  {210,	RADIUS_INTEGER4,	"Ascend PPP VJ Slot Comp", NULL},
-  {211,	RADIUS_INTEGER4,	"Ascend PPP VJ 1172", NULL},
-  {212,	RADIUS_INTEGER4,	"Ascend PPP Async Map", NULL},
-  {213,	RADIUS_STRING,		"Ascend Third Prompt", NULL},
-  {214,	RADIUS_STRING,		"Ascend Send Secret", NULL},
-  {215,	RADIUS_STRING,		"Ascend Receive Secret", NULL},
-  {216,	RADIUS_INTEGER4,	"Ascend IPX Peer Mode", NULL},
-  {217,	RADIUS_STRING,		"Ascend IP Pool Definition", NULL},
-  {218,	RADIUS_INTEGER4,	"Ascend Assign IP Pool", NULL},
-  {219,	RADIUS_INTEGER4,	"Ascend FR Direct", NULL},
-  {220,	RADIUS_STRING,		"Ascend FR Direct Profile", NULL},
-  {221,	RADIUS_INTEGER4,	"Ascend FR Direct DLCI", NULL},
-  {222,	RADIUS_INTEGER4,	"Ascend Handle IPX", NULL},
-  {223,	RADIUS_INTEGER4,	"Ascend Netware timeout", NULL},
-  {224,	RADIUS_INTEGER4,	"Ascend IPX Alias", NULL},
-  {225,	RADIUS_INTEGER4,	"Ascend Metric", NULL},
-  {226,	RADIUS_INTEGER4,	"Ascend PRI Number Type", NULL},
-  {227,	RADIUS_STRING,		"Ascend Dial Number", NULL},
-  {228,	RADIUS_INTEGER4,	"Ascend Route IP", NULL},
-  {229,	RADIUS_INTEGER4,	"Ascend Route IPX", NULL},
-  {230,	RADIUS_INTEGER4,	"Ascend Bridge", NULL},
-  {231,	RADIUS_INTEGER4,	"Ascend Send Auth", NULL},
-  {232,	RADIUS_STRING,		"Ascend Send Passwd", NULL},
-  {233,	RADIUS_INTEGER4,	"Ascend Link Compression", NULL},
-  {234,	RADIUS_INTEGER4,	"Ascend Target Util", NULL},
-  {235,	RADIUS_INTEGER4,	"Ascend Maximum Channels", NULL},
-  {236,	RADIUS_INTEGER4,	"Ascend Inc Channel Count", NULL},
-  {237,	RADIUS_INTEGER4,	"Ascend Dec Channel Count", NULL},
-  {238,	RADIUS_INTEGER4,	"Ascend Seconds Of History", NULL},
-  {239,	RADIUS_INTEGER4,	"Ascend History Weigh Type", NULL},
-  {240,	RADIUS_INTEGER4,	"Ascend Add Seconds", NULL},
-  {241,	RADIUS_INTEGER4,	"Ascend Remove Seconds", NULL},
-  {242,	RADIUS_BINSTRING,	"Ascend Data Filter", NULL},
-  {243,	RADIUS_BINSTRING,	"Ascend Call Filter", NULL},
-  {244,	RADIUS_INTEGER4,	"Ascend Idle Limit", NULL},
-  {245,	RADIUS_INTEGER4,	"Ascend Preempt Limit", NULL},
-  {246,	RADIUS_INTEGER4,	"Ascend Callback", NULL},
-  {247,	RADIUS_INTEGER4,	"Ascend Data Svc", NULL},
-  {248,	RADIUS_INTEGER4,	"Ascend Force 56", NULL},
-  {249,	RADIUS_STRING,		"Ascend Billing Number", NULL},
-  {250,	RADIUS_INTEGER4,	"Ascend Call By Call", NULL},
-  {251,	RADIUS_STRING,		"Ascend Transit Number", NULL},
-  {252,	RADIUS_STRING,		"Ascend Host Info", NULL},
-  {253,	RADIUS_IP_ADDRESS,	"Ascend PPP Address", NULL},
-  {254,	RADIUS_INTEGER4,	"Ascend MPP Idle Percent", NULL},
-  {255,	RADIUS_INTEGER4,	"Ascend Xmit Rate", NULL},
-  {0, 0, NULL, NULL}
+  {7,	RADIUS_STRING,		"Ascend UU Info", NULL, NULL},
+  {9,	RADIUS_INTEGER4,	"Ascend CIR Timer", NULL, NULL},
+  {10,	RADIUS_INTEGER4,	"Ascend FR 08 Mode", NULL, NULL},
+  {11,	RADIUS_INTEGER4,	"Ascend Destination Nas Port", NULL, NULL},
+  {12,	RADIUS_STRING,		"Ascend FR SVC Addr", NULL, NULL},
+  {13,	RADIUS_INTEGER4,	"Ascend NAS Port Format", NULL, NULL},
+  {14,	RADIUS_INTEGER4,	"Ascend ATM Fault Management", NULL, NULL},
+  {15,	RADIUS_INTEGER4,	"Ascend ATM Loopback Cell Loss", NULL, NULL},
+  {16,	RADIUS_INTEGER4,	"Ascend Ckt Type", NULL, NULL},
+  {17,	RADIUS_INTEGER4,	"Ascend SVC Enabled", NULL, NULL},
+  {18,	RADIUS_INTEGER4,	"Ascend Session Type", NULL, NULL},
+  {19,	RADIUS_IP_ADDRESS,	"Ascend H323 Gatekeeper", NULL, NULL},
+  {20,	RADIUS_STRING,		"Ascend Global Call Id", NULL, NULL},
+  {21,	RADIUS_INTEGER4,	"Ascend H323 Conference Id", NULL, NULL},
+  {22,	RADIUS_IP_ADDRESS,	"Ascend H323 Fegw Address", NULL, NULL},
+  {23,	RADIUS_INTEGER4,	"Ascend H323 Dialed Time", NULL, NULL},
+  {24,	RADIUS_STRING,		"Ascend Dialed Number", NULL, NULL},
+  {25,	RADIUS_INTEGER4,	"Ascend Inter Arrival Jitter", NULL, NULL},
+  {26,	RADIUS_INTEGER4,	"Ascend Dropped Octets", NULL, NULL},
+  {27,	RADIUS_INTEGER4,	"Ascend Dropped Packets", NULL, NULL},
+  {29,	RADIUS_INTEGER4,	"Ascend X25 Pad X3 Profile", NULL, NULL},
+  {30,	RADIUS_STRING,		"Ascend X25 Pad X3 Parameters", NULL, NULL},
+  {31,	RADIUS_STRING,		"Ascend Tunnel VRouter Name", NULL, NULL},
+  {32,	RADIUS_INTEGER4,	"Ascend X25 Reverse Charging", NULL, NULL},
+  {33,	RADIUS_STRING,		"Ascend X25 Nui Prompt", NULL, NULL},
+  {34,	RADIUS_STRING,		"Ascend X25 Nui Password Prompt", NULL, NULL},
+  {35,	RADIUS_STRING,		"Ascend X25 Cug", NULL, NULL},
+  {36,	RADIUS_STRING,		"Ascend X25 Pad Alias 1", NULL, NULL},
+  {37,	RADIUS_STRING,		"Ascend X25 Pad Alias 2", NULL, NULL},
+  {38,	RADIUS_STRING,		"Ascend X25 Pad Alias 3", NULL, NULL},
+  {39,	RADIUS_STRING,		"Ascend X25 X121 Address", NULL, NULL},
+  {40,	RADIUS_STRING,		"Ascend X25 Nui", NULL, NULL},
+  {41,	RADIUS_STRING,		"Ascend X25 Rpoa", NULL, NULL},
+  {42,	RADIUS_STRING,		"Ascend X25 Pad Prompt", NULL, NULL},
+  {43,	RADIUS_STRING,		"Ascend X25 Pad Banner", NULL, NULL},
+  {44,	RADIUS_STRING,		"Ascend X25 Profile Name", NULL, NULL},
+  {45,	RADIUS_STRING,		"Ascend Recv Name", NULL, NULL},
+  {46,	RADIUS_INTEGER4,	"Ascend Bi Directional Auth", NULL, NULL},
+  {47,	RADIUS_INTEGER4,	"Ascend MTU", NULL, NULL},
+  {48,	RADIUS_INTEGER4,	"Ascend Call Direction", NULL, NULL},
+  {49,	RADIUS_INTEGER4,	"Ascend Service Type", NULL, NULL},
+  {50,	RADIUS_INTEGER4,	"Ascend Filter Required", NULL, NULL},
+  {51,	RADIUS_INTEGER4,	"Ascend Traffic Shaper", NULL, NULL},
+  {52,	RADIUS_STRING,		"Ascend Access Intercept LEA", NULL, NULL},
+  {53,	RADIUS_STRING,		"Ascend Access Intercept Log", NULL, NULL},
+  {54,	RADIUS_STRING,		"Ascend Private Route Table ID", NULL, NULL},
+  {55,	RADIUS_INTEGER4,	"Ascend Private Route Required", NULL, NULL},
+  {56,	RADIUS_INTEGER4,	"Ascend Cache Refresh", NULL, NULL},
+  {57,	RADIUS_INTEGER4,	"Ascend Cache Time", NULL, NULL},
+  {58,	RADIUS_INTEGER4,	"Ascend Egress Enabled", NULL, NULL},
+  {59,	RADIUS_STRING,		"Ascend QOS Upstream", NULL, NULL},
+  {60,	RADIUS_STRING,		"Ascend QOS Downstream", NULL, NULL},
+  {61,	RADIUS_INTEGER4,	"Ascend ATM Connect Vpi", NULL, NULL},
+  {62,	RADIUS_INTEGER4,	"Ascend ATM Connect Vci", NULL, NULL},
+  {63,	RADIUS_INTEGER4,	"Ascend ATM Connect Group", NULL, NULL},
+  {64,	RADIUS_INTEGER4,	"Ascend ATM Group", NULL, NULL},
+  {65,	RADIUS_INTEGER4,	"Ascend IPX Header Compression", NULL, NULL},
+  {66,	RADIUS_INTEGER4,	"Ascend Calling Id Type Of Number", radius_vendor_ascend_calling_id_type_of_number_vals, NULL},
+  {67,	RADIUS_INTEGER4,	"Ascend Calling Id Numbering Plan", radius_vendor_ascend_calling_id_numbering_plan_vals, NULL},
+  {68,	RADIUS_INTEGER4,	"Ascend Calling Id Presentation", radius_vendor_ascend_calling_id_presentation_vals, NULL},
+  {69,	RADIUS_INTEGER4,	"Ascend Calling Id Screening", radius_vendor_ascend_calling_id_screening_vals, NULL},
+  {70,	RADIUS_INTEGER4,	"Ascend BIR Enable", NULL, NULL},
+  {71,	RADIUS_INTEGER4,	"Ascend BIR Proxy", NULL, NULL},
+  {72,	RADIUS_INTEGER4,	"Ascend BIR Bridge Group", NULL, NULL},
+  {73,	RADIUS_STRING,		"Ascend IPSEC Profile", NULL, NULL},
+  {74,	RADIUS_INTEGER4,	"Ascend PPPoE Enable", NULL, NULL},
+  {75,	RADIUS_INTEGER4,	"Ascend Bridge Non PPPoE", NULL, NULL},
+  {76,	RADIUS_INTEGER4,	"Ascend ATM Direct", NULL, NULL},
+  {77,	RADIUS_STRING,		"Ascend ATM Direct Profile", NULL, NULL},
+  {78,	RADIUS_IP_ADDRESS,	"Ascend Client Primary WINS", NULL, NULL},
+  {79,	RADIUS_IP_ADDRESS,	"Ascend Client Secondary WINS", NULL, NULL},
+  {80,	RADIUS_INTEGER4,	"Ascend Client Assign WINS", NULL, NULL},
+  {81,	RADIUS_INTEGER4,	"Ascend Auth Type", NULL, NULL},
+  {82,	RADIUS_INTEGER4,	"Ascend Port Redir Protocol", NULL, NULL},
+  {83,	RADIUS_INTEGER4,	"Ascend Port Redir Portnum", NULL, NULL},
+  {84,	RADIUS_IP_ADDRESS,	"Ascend Port Redir Server", NULL, NULL},
+  {85,	RADIUS_INTEGER4,	"Ascend IP Pool Chaining", NULL, NULL},
+  {86,	RADIUS_IP_ADDRESS,	"Ascend Owner IP Addr", NULL, NULL},
+  {87,	RADIUS_INTEGER4,	"Ascend IP TOS", NULL, NULL},
+  {88,	RADIUS_INTEGER4,	"Ascend IP TOS Precedence", NULL, NULL},
+  {89,	RADIUS_INTEGER4,	"Ascend IP TOS Apply To", NULL, NULL},
+  {90,	RADIUS_STRING,		"Ascend Filter", NULL, NULL},
+  {91,	RADIUS_STRING,		"Ascend Telnet Profile", NULL, NULL},
+  {92,	RADIUS_INTEGER4,	"Ascend Dsl Rate Type", NULL, NULL},
+  {93,	RADIUS_STRING,		"Ascend Redirect Number", NULL, NULL},
+  {94,	RADIUS_INTEGER4,	"Ascend ATM Vpi", NULL, NULL},
+  {95,	RADIUS_INTEGER4,	"Ascend ATM Vci", NULL, NULL},
+  {96,	RADIUS_INTEGER4,	"Ascend Source IP Check", NULL, NULL},
+  {97,	RADIUS_INTEGER4,	"Ascend Dsl Rate Mode", NULL, NULL},
+  {98,	RADIUS_INTEGER4,	"Ascend Dsl Upstream Limit", NULL, NULL},
+  {99,	RADIUS_INTEGER4,	"Ascend Dsl Downstream Limit", NULL, NULL},
+  {100,	RADIUS_INTEGER4,	"Ascend Dsl CIR Recv Limit", NULL, NULL},
+  {101,	RADIUS_INTEGER4,	"Ascend Dsl CIR Xmit Limit", NULL, NULL},
+  {102,	RADIUS_STRING,		"Ascend VRouter Name", NULL, NULL},
+  {103,	RADIUS_STRING,		"Ascend Source Auth", NULL, NULL},
+  {104,	RADIUS_STRING,		"Ascend Private Route", NULL, NULL},
+  {105,	RADIUS_INTEGER4,	"Ascend Numbering Plan ID", NULL, NULL},
+  {106,	RADIUS_INTEGER4,	"Ascend FR Link Status DLCI", NULL, NULL},
+  {107,	RADIUS_STRING,		"Ascend Calling Subaddress", NULL, NULL},
+  {108,	RADIUS_INTEGER4,	"Ascend Callback Delay", NULL, NULL},
+  {109,	RADIUS_STRING,		"Ascend Endpoint Disc", NULL, NULL},
+  {110,	RADIUS_STRING,		"Ascend Remote FW", NULL, NULL},
+  {111,	RADIUS_INTEGER4,	"Ascend Multicast GLeave Delay", NULL, NULL},
+  {112,	RADIUS_INTEGER4,	"Ascend CBCP Enable", NULL, NULL},
+  {113,	RADIUS_INTEGER4,	"Ascend CBCP Mode", NULL, NULL},
+  {114,	RADIUS_INTEGER4,	"Ascend CBCP Delay", NULL, NULL},
+  {115,	RADIUS_INTEGER4,	"Ascend CBCP Trunk Group", NULL, NULL},
+  {116,	RADIUS_STRING,		"Ascend Appletalk Route", NULL, NULL},
+  {117,	RADIUS_INTEGER4,	"Ascend Appletalk Peer Mode", NULL, NULL},
+  {118,	RADIUS_INTEGER4,	"Ascend Route Appletalk", NULL, NULL},
+  {119,	RADIUS_STRING,		"Ascend FCP Parameter", NULL, NULL},
+  {120,	RADIUS_INTEGER4,	"Ascend Modem Port No", NULL, NULL},
+  {121,	RADIUS_INTEGER4,	"Ascend Modem Slot No", NULL, NULL},
+  {122,	RADIUS_INTEGER4,	"Ascend Modem Shelf No", NULL, NULL},
+  {123,	RADIUS_INTEGER4,	"Ascend Call Attempt Limit", NULL, NULL},
+  {124,	RADIUS_INTEGER4,	"Ascend Call Block Duration", NULL, NULL},
+  {125,	RADIUS_INTEGER4,	"Ascend Maximum Call Duration", NULL, NULL},
+  {126,	RADIUS_INTEGER4,	"Ascend Temporary Rtes", NULL, NULL},
+  {127,	RADIUS_INTEGER4,	"Ascend Tunneling Protocol", NULL, NULL},
+  {128,	RADIUS_INTEGER4,	"Ascend Shared Profile Enable", NULL, NULL},
+  {129,	RADIUS_STRING,		"Ascend Primary Home Agent", NULL, NULL},
+  {130,	RADIUS_STRING,		"Ascend Secondary Home Agent", NULL, NULL},
+  {131,	RADIUS_INTEGER4,	"Ascend Dialout Allowed", NULL, NULL},
+  {132,	RADIUS_IP_ADDRESS,	"Ascend Client Gateway", NULL, NULL},
+  {133,	RADIUS_INTEGER4,	"Ascend BACP Enable", NULL, NULL},
+  {134,	RADIUS_INTEGER4,	"Ascend DHCP Maximum Leases", NULL, NULL},
+  {135,	RADIUS_IP_ADDRESS,	"Ascend Client Primary DNS", NULL, NULL},
+  {136,	RADIUS_IP_ADDRESS,	"Ascend Client Secondary DNS", NULL, NULL},
+  {137,	RADIUS_INTEGER4,	"Ascend Client Assign DNS", NULL, NULL},
+  {138,	RADIUS_INTEGER4,	"Ascend User Acct Type", NULL, NULL},
+  {139,	RADIUS_IP_ADDRESS,	"Ascend User Acct Host", NULL, NULL},
+  {140,	RADIUS_INTEGER4,	"Ascend User Acct Port", NULL, NULL},
+  {141,	RADIUS_STRING,		"Ascend User Acct Key", NULL, NULL},
+  {142,	RADIUS_INTEGER4,	"Ascend User Acct Base", NULL, NULL},
+  {143,	RADIUS_INTEGER4,	"Ascend User Acct Time", NULL, NULL},
+  {144,	RADIUS_IP_ADDRESS,	"Ascend Assign IP Client", NULL, NULL},
+  {145,	RADIUS_IP_ADDRESS,	"Ascend Assign IP Server", NULL, NULL},
+  {146,	RADIUS_STRING,		"Ascend Assign IP Global Pool", NULL, NULL},
+  {147,	RADIUS_INTEGER4,	"Ascend DHCP Reply", NULL, NULL},
+  {148,	RADIUS_INTEGER4,	"Ascend DHCP Pool Number", NULL, NULL},
+  {149,	RADIUS_INTEGER4,	"Ascend Expect Callback", NULL, NULL},
+  {150,	RADIUS_INTEGER4,	"Ascend Event Type", NULL, NULL},
+  {151,	RADIUS_STRING,		"Ascend Session Svr Key", NULL, NULL},
+  {152,	RADIUS_INTEGER4,	"Ascend Multicast Rate Limit", NULL, NULL},
+  {153,	RADIUS_IP_ADDRESS,	"Ascend IF Netmask", NULL, NULL},
+  {154,	RADIUS_IP_ADDRESS,	"Ascend Remote Addr", NULL, NULL},
+  {155,	RADIUS_INTEGER4,	"Ascend Multicast Client", NULL, NULL},
+  {156,	RADIUS_STRING,		"Ascend FR Circuit Name", NULL, NULL},
+  {157,	RADIUS_INTEGER4,	"Ascend FR LinkUp", NULL, NULL},
+  {158,	RADIUS_INTEGER4,	"Ascend FR Nailed Grp", NULL, NULL},
+  {159,	RADIUS_INTEGER4,	"Ascend FR Type", NULL, NULL},
+  {160,	RADIUS_INTEGER4,	"Ascend FR Link Mgt", NULL, NULL},
+  {161,	RADIUS_INTEGER4,	"Ascend FR N391", NULL, NULL},
+  {162,	RADIUS_INTEGER4,	"Ascend FR DCE N392", NULL, NULL},
+  {163,	RADIUS_INTEGER4,	"Ascend FR DTE N392", NULL, NULL},
+  {164,	RADIUS_INTEGER4,	"Ascend FR DCE N393", NULL, NULL},
+  {165,	RADIUS_INTEGER4,	"Ascend FR DTE N393", NULL, NULL},
+  {166,	RADIUS_INTEGER4,	"Ascend FR T391", NULL, NULL},
+  {167,	RADIUS_INTEGER4,	"Ascend FR T392", NULL, NULL},
+  {168,	RADIUS_STRING,		"Ascend Bridge Address", NULL, NULL},
+  {169,	RADIUS_INTEGER4,	"Ascend TS Idle Limit", NULL, NULL},
+  {170,	RADIUS_INTEGER4,	"Ascend TS Idle Mode", NULL, NULL},
+  {171,	RADIUS_INTEGER4,	"Ascend DBA Monitor", NULL, NULL},
+  {172,	RADIUS_INTEGER4,	"Ascend Base Channel Count", NULL, NULL},
+  {173,	RADIUS_INTEGER4,	"Ascend Minimum Channels", NULL, NULL},
+  {174,	RADIUS_STRING,		"Ascend IPX Route", NULL, NULL},
+  {175,	RADIUS_INTEGER4,	"Ascend FT1 Caller", NULL, NULL},
+  {176,	RADIUS_STRING,		"Ascend Backup", NULL, NULL},
+  {177,	RADIUS_INTEGER4,	"Ascend Call Type", NULL, NULL},
+  {178,	RADIUS_STRING,		"Ascend Group", NULL, NULL},
+  {179,	RADIUS_INTEGER4,	"Ascend FR DLCI", NULL, NULL},
+  {180,	RADIUS_STRING,		"Ascend FR Profile Name", NULL, NULL},
+  {181,	RADIUS_STRING,		"Ascend Ara PW", NULL, NULL},
+  {182,	RADIUS_STRING,		"Ascend IPX Node Addr", NULL, NULL},
+  {183,	RADIUS_IP_ADDRESS,	"Ascend Home Agent IP Addr", NULL, NULL},
+  {184,	RADIUS_STRING,		"Ascend Home Agent Password", NULL, NULL},
+  {185,	RADIUS_STRING,		"Ascend Home Network Name", NULL, NULL},
+  {186,	RADIUS_INTEGER4,	"Ascend Home Agent UDP Port", NULL, NULL},
+  {187,	RADIUS_INTEGER4,	"Ascend Multilink ID", NULL, NULL},
+  {188,	RADIUS_INTEGER4,	"Ascend Num In Multilink", NULL, NULL},
+  {189,	RADIUS_IP_ADDRESS,	"Ascend First Dest", NULL, NULL},
+  {190,	RADIUS_INTEGER4,	"Ascend Pre Input Octets", NULL, NULL},
+  {191,	RADIUS_INTEGER4,	"Ascend Pre Output Octets", NULL, NULL},
+  {192,	RADIUS_INTEGER4,	"Ascend Pre Input Packets", NULL, NULL},
+  {193,	RADIUS_INTEGER4,	"Ascend Pre Output Packets", NULL, NULL},
+  {194,	RADIUS_INTEGER4,	"Ascend Maximum Time", NULL, NULL},
+  {195,	RADIUS_INTEGER4,	"Ascend Disconnect Cause", NULL, NULL},
+  {196,	RADIUS_INTEGER4,	"Ascend Connect Progress", NULL, NULL},
+  {197,	RADIUS_INTEGER4,	"Ascend Data Rate", NULL, NULL},
+  {198,	RADIUS_INTEGER4,	"Ascend PreSession Time", NULL, NULL},
+  {199,	RADIUS_INTEGER4,	"Ascend Token Idle", NULL, NULL},
+  {200,	RADIUS_INTEGER4,	"Ascend Token Immediate", NULL, NULL},
+  {201,	RADIUS_INTEGER4,	"Ascend Require Auth", NULL, NULL},
+  {202,	RADIUS_STRING,		"Ascend Number Sessions", NULL, NULL},
+  {203,	RADIUS_STRING,		"Ascend Authen Alias", NULL, NULL},
+  {204,	RADIUS_INTEGER4,	"Ascend Token Expiry", NULL, NULL},
+  {205,	RADIUS_STRING,		"Ascend Menu Selector", NULL, NULL},
+  {206,	RADIUS_STRING,		"Ascend Menu Item", NULL, NULL},
+  {207,	RADIUS_INTEGER4,	"Ascend PW Warntime", NULL, NULL},
+  {208,	RADIUS_INTEGER4,	"Ascend PW Lifetime", NULL, NULL},
+  {209,	RADIUS_IP_ADDRESS,	"Ascend IP Direct", NULL, NULL},
+  {210,	RADIUS_INTEGER4,	"Ascend PPP VJ Slot Comp", NULL, NULL},
+  {211,	RADIUS_INTEGER4,	"Ascend PPP VJ 1172", NULL, NULL},
+  {212,	RADIUS_INTEGER4,	"Ascend PPP Async Map", NULL, NULL},
+  {213,	RADIUS_STRING,		"Ascend Third Prompt", NULL, NULL},
+  {214,	RADIUS_STRING,		"Ascend Send Secret", NULL, NULL},
+  {215,	RADIUS_STRING,		"Ascend Receive Secret", NULL, NULL},
+  {216,	RADIUS_INTEGER4,	"Ascend IPX Peer Mode", NULL, NULL},
+  {217,	RADIUS_STRING,		"Ascend IP Pool Definition", NULL, NULL},
+  {218,	RADIUS_INTEGER4,	"Ascend Assign IP Pool", NULL, NULL},
+  {219,	RADIUS_INTEGER4,	"Ascend FR Direct", NULL, NULL},
+  {220,	RADIUS_STRING,		"Ascend FR Direct Profile", NULL, NULL},
+  {221,	RADIUS_INTEGER4,	"Ascend FR Direct DLCI", NULL, NULL},
+  {222,	RADIUS_INTEGER4,	"Ascend Handle IPX", NULL, NULL},
+  {223,	RADIUS_INTEGER4,	"Ascend Netware timeout", NULL, NULL},
+  {224,	RADIUS_INTEGER4,	"Ascend IPX Alias", NULL, NULL},
+  {225,	RADIUS_INTEGER4,	"Ascend Metric", NULL, NULL},
+  {226,	RADIUS_INTEGER4,	"Ascend PRI Number Type", NULL, NULL},
+  {227,	RADIUS_STRING,		"Ascend Dial Number", NULL, NULL},
+  {228,	RADIUS_INTEGER4,	"Ascend Route IP", NULL, NULL},
+  {229,	RADIUS_INTEGER4,	"Ascend Route IPX", NULL, NULL},
+  {230,	RADIUS_INTEGER4,	"Ascend Bridge", NULL, NULL},
+  {231,	RADIUS_INTEGER4,	"Ascend Send Auth", NULL, NULL},
+  {232,	RADIUS_STRING,		"Ascend Send Passwd", NULL, NULL},
+  {233,	RADIUS_INTEGER4,	"Ascend Link Compression", NULL, NULL},
+  {234,	RADIUS_INTEGER4,	"Ascend Target Util", NULL, NULL},
+  {235,	RADIUS_INTEGER4,	"Ascend Maximum Channels", NULL, NULL},
+  {236,	RADIUS_INTEGER4,	"Ascend Inc Channel Count", NULL, NULL},
+  {237,	RADIUS_INTEGER4,	"Ascend Dec Channel Count", NULL, NULL},
+  {238,	RADIUS_INTEGER4,	"Ascend Seconds Of History", NULL, NULL},
+  {239,	RADIUS_INTEGER4,	"Ascend History Weigh Type", NULL, NULL},
+  {240,	RADIUS_INTEGER4,	"Ascend Add Seconds", NULL, NULL},
+  {241,	RADIUS_INTEGER4,	"Ascend Remove Seconds", NULL, NULL},
+  {242,	RADIUS_BINSTRING,	"Ascend Data Filter", NULL, NULL},
+  {243,	RADIUS_BINSTRING,	"Ascend Call Filter", NULL, NULL},
+  {244,	RADIUS_INTEGER4,	"Ascend Idle Limit", NULL, NULL},
+  {245,	RADIUS_INTEGER4,	"Ascend Preempt Limit", NULL, NULL},
+  {246,	RADIUS_INTEGER4,	"Ascend Callback", NULL, NULL},
+  {247,	RADIUS_INTEGER4,	"Ascend Data Svc", NULL, NULL},
+  {248,	RADIUS_INTEGER4,	"Ascend Force 56", NULL, NULL},
+  {249,	RADIUS_STRING,		"Ascend Billing Number", NULL, NULL},
+  {250,	RADIUS_INTEGER4,	"Ascend Call By Call", NULL, NULL},
+  {251,	RADIUS_STRING,		"Ascend Transit Number", NULL, NULL},
+  {252,	RADIUS_STRING,		"Ascend Host Info", NULL, NULL},
+  {253,	RADIUS_IP_ADDRESS,	"Ascend PPP Address", NULL, NULL},
+  {254,	RADIUS_INTEGER4,	"Ascend MPP Idle Percent", NULL, NULL},
+  {255,	RADIUS_INTEGER4,	"Ascend Xmit Rate", NULL, NULL},
+  {0, 0, NULL, NULL, NULL}
 };
 
 /*
@@ -1660,72 +1727,72 @@
 
 static const radius_attr_info radius_vendor_bay_attrib[] =
 {
-  {28,	RADIUS_STRING,		"Annex Filter", NULL},
-  {29,	RADIUS_STRING,		"Annex CLI Command", NULL},
-  {30,	RADIUS_STRING,		"Annex CLI Filter", NULL},
-  {31,	RADIUS_STRING,		"Annex Host Restrict", NULL},
-  {32,	RADIUS_STRING,		"Annex Host Allow", NULL},
-  {33,	RADIUS_STRING,		"Annex Product Name", NULL},
-  {34,	RADIUS_STRING,		"Annex SW Version", NULL},
-  {35,	RADIUS_IP_ADDRESS,	"Annex Local IP Address", NULL},
-  {36,	RADIUS_INTEGER4,	"Annex Callback Portlist", NULL},
-  {37,	RADIUS_INTEGER4,	"Annex Sec Profile Index", NULL},
-  {38,	RADIUS_INTEGER4,	"Annex Tunnel Authen Type", radius_vendor_bay_tunnel_authen_type_vals},
-  {39,	RADIUS_INTEGER4,	"Annex Tunnel Authen Mode", radius_vendor_bay_tunnel_authen_mode_vals},
-  {40,	RADIUS_STRING,		"Annex Authen Servers", NULL},
-  {41,	RADIUS_STRING,		"Annex Acct Servers", NULL},
-  {42,	RADIUS_INTEGER4,	"Annex User Server Location", radius_vendor_bay_user_server_location_vals},
-  {43,	RADIUS_STRING,		"Annex Local Username", NULL},
-  {44,	RADIUS_INTEGER4,	"Annex System Disc Reason", radius_vendor_bay_system_disc_reason_vals},
-  {45,	RADIUS_INTEGER4,	"Annex Modem Disc Reason", radius_vendor_bay_modem_disc_reason_vals},
-  {46,	RADIUS_INTEGER4,	"Annex Disconnect Reason", NULL},
-  {47,	RADIUS_INTEGER4,	"Annex Addr Resolution Protocol", radius_vendor_bay_addr_resolution_protocol_vals},
-  {48,	RADIUS_STRING,		"Annex Addr Resolution Servers", NULL},
-  {49,	RADIUS_STRING,		"Annex Domain Name", NULL},
-  {50,	RADIUS_INTEGER4,	"Annex Transmit Speed", NULL},
-  {51,	RADIUS_INTEGER4,	"Annex Receive Speed", NULL},
-  {52,	RADIUS_STRING,		"Annex Input Filter", NULL},
-  {53,	RADIUS_STRING,		"Annex Output Filter", NULL},
-  {54,	RADIUS_IP_ADDRESS,	"Annex Primary DNS Server", NULL},
-  {55,	RADIUS_IP_ADDRESS,	"Annex Secondary DNS Server", NULL},
-  {56,	RADIUS_IP_ADDRESS,	"Annex Primary NBNS Server", NULL},
-  {57,	RADIUS_IP_ADDRESS,	"Annex Secondary NBNS Server", NULL},
-  {58,	RADIUS_INTEGER4,	"Annex Syslog Tap", NULL},
-  {59,	RADIUS_INTEGER4,	"Annex Keypress Timeout", NULL},
-  {60,	RADIUS_INTEGER4,	"Annex Unauthenticated Time", NULL},
-  {61,	RADIUS_INTEGER4,	"Annex Re CHAP Timeout", NULL},
-  {62,	RADIUS_INTEGER4,	"Annex MRRU", NULL},
-  {63,	RADIUS_STRING,		"Annex EDO", NULL},
-  {64,	RADIUS_INTEGER4,	"Annex PPP Trace Level", NULL},
-  {65,	RADIUS_INTEGER4,	"Annex Pre Input Octets", NULL},
-  {66,	RADIUS_INTEGER4,	"Annex Pre Output Octets", NULL},
-  {67,	RADIUS_INTEGER4,	"Annex Pre Input Packets", NULL},
-  {68,	RADIUS_INTEGER4,	"Annex Pre Output Packets", NULL},
-  {69,	RADIUS_INTEGER4,	"Annex Connect Progress", NULL},
-  {73,	RADIUS_INTEGER4,	"Annex Multicast Rate Limit", NULL},
-  {74,	RADIUS_INTEGER4,	"Annex Maximum Call Duration", NULL},
-  {75,	RADIUS_INTEGER4,	"Annex Multilink Id", NULL},
-  {76,	RADIUS_INTEGER4,	"Annex Num In Multilink", NULL},
-  {81,	RADIUS_INTEGER4,	"Annex Logical Channel Number", NULL},
-  {82,	RADIUS_INTEGER4,	"Annex Wan Number", NULL},
-  {83,	RADIUS_INTEGER4,	"Annex Port", NULL},
-  {85,	RADIUS_INTEGER4,	"Annex Pool Id", NULL},
-  {86,	RADIUS_STRING,		"Annex Compression Protocol", NULL},
-  {87,	RADIUS_INTEGER4,	"Annex Transmitted Packets", NULL},
-  {88,	RADIUS_INTEGER4,	"Annex Retransmitted Packets", NULL},
-  {89,	RADIUS_INTEGER4,	"Annex Signal to Noise Ratio", NULL},
-  {90,	RADIUS_INTEGER4,	"Annex Retrain Requests Sent", NULL},
-  {91,	RADIUS_INTEGER4,	"Annex Retrain Requests Rcvd", NULL},
-  {92,	RADIUS_INTEGER4,	"Annex Rate Reneg Req Sent", NULL},
-  {93,	RADIUS_INTEGER4,	"Annex Rate Reneg Req Rcvd", NULL},
-  {94,	RADIUS_INTEGER4,	"Annex Begin Receive Line Level", NULL},
-  {95,	RADIUS_INTEGER4,	"Annex End Receive Line Level", NULL},
-  {96,	RADIUS_STRING,		"Annex Begin Modulation", NULL},
-  {97,	RADIUS_STRING,		"Annex Error Correction Prot", NULL},
-  {98,	RADIUS_STRING,		"Annex End Modulation", NULL},
-  {100,	RADIUS_INTEGER4,	"Annex User Level", radius_vendor_bay_user_level_vals},
-  {101,	RADIUS_INTEGER4,	"Annex Audit Level", radius_vendor_bay_audit_level_vals},
-  {0, 0, NULL, NULL},
+  {28,	RADIUS_STRING,		"Annex Filter", NULL, NULL},
+  {29,	RADIUS_STRING,		"Annex CLI Command", NULL, NULL},
+  {30,	RADIUS_STRING,		"Annex CLI Filter", NULL, NULL},
+  {31,	RADIUS_STRING,		"Annex Host Restrict", NULL, NULL},
+  {32,	RADIUS_STRING,		"Annex Host Allow", NULL, NULL},
+  {33,	RADIUS_STRING,		"Annex Product Name", NULL, NULL},
+  {34,	RADIUS_STRING,		"Annex SW Version", NULL, NULL},
+  {35,	RADIUS_IP_ADDRESS,	"Annex Local IP Address", NULL, NULL},
+  {36,	RADIUS_INTEGER4,	"Annex Callback Portlist", NULL, NULL},
+  {37,	RADIUS_INTEGER4,	"Annex Sec Profile Index", NULL, NULL},
+  {38,	RADIUS_INTEGER4,	"Annex Tunnel Authen Type", radius_vendor_bay_tunnel_authen_type_vals, NULL},
+  {39,	RADIUS_INTEGER4,	"Annex Tunnel Authen Mode", radius_vendor_bay_tunnel_authen_mode_vals, NULL},
+  {40,	RADIUS_STRING,		"Annex Authen Servers", NULL, NULL},
+  {41,	RADIUS_STRING,		"Annex Acct Servers", NULL, NULL},
+  {42,	RADIUS_INTEGER4,	"Annex User Server Location", radius_vendor_bay_user_server_location_vals, NULL},
+  {43,	RADIUS_STRING,		"Annex Local Username", NULL, NULL},
+  {44,	RADIUS_INTEGER4,	"Annex System Disc Reason", radius_vendor_bay_system_disc_reason_vals, NULL},
+  {45,	RADIUS_INTEGER4,	"Annex Modem Disc Reason", radius_vendor_bay_modem_disc_reason_vals, NULL},
+  {46,	RADIUS_INTEGER4,	"Annex Disconnect Reason", NULL, NULL},
+  {47,	RADIUS_INTEGER4,	"Annex Addr Resolution Protocol", radius_vendor_bay_addr_resolution_protocol_vals, NULL},
+  {48,	RADIUS_STRING,		"Annex Addr Resolution Servers", NULL, NULL},
+  {49,	RADIUS_STRING,		"Annex Domain Name", NULL, NULL},
+  {50,	RADIUS_INTEGER4,	"Annex Transmit Speed", NULL, NULL},
+  {51,	RADIUS_INTEGER4,	"Annex Receive Speed", NULL, NULL},
+  {52,	RADIUS_STRING,		"Annex Input Filter", NULL, NULL},
+  {53,	RADIUS_STRING,		"Annex Output Filter", NULL, NULL},
+  {54,	RADIUS_IP_ADDRESS,	"Annex Primary DNS Server", NULL, NULL},
+  {55,	RADIUS_IP_ADDRESS,	"Annex Secondary DNS Server", NULL, NULL},
+  {56,	RADIUS_IP_ADDRESS,	"Annex Primary NBNS Server", NULL, NULL},
+  {57,	RADIUS_IP_ADDRESS,	"Annex Secondary NBNS Server", NULL, NULL},
+  {58,	RADIUS_INTEGER4,	"Annex Syslog Tap", NULL, NULL},
+  {59,	RADIUS_INTEGER4,	"Annex Keypress Timeout", NULL, NULL},
+  {60,	RADIUS_INTEGER4,	"Annex Unauthenticated Time", NULL, NULL},
+  {61,	RADIUS_INTEGER4,	"Annex Re CHAP Timeout", NULL, NULL},
+  {62,	RADIUS_INTEGER4,	"Annex MRRU", NULL, NULL},
+  {63,	RADIUS_STRING,		"Annex EDO", NULL, NULL},
+  {64,	RADIUS_INTEGER4,	"Annex PPP Trace Level", NULL, NULL},
+  {65,	RADIUS_INTEGER4,	"Annex Pre Input Octets", NULL, NULL},
+  {66,	RADIUS_INTEGER4,	"Annex Pre Output Octets", NULL, NULL},
+  {67,	RADIUS_INTEGER4,	"Annex Pre Input Packets", NULL, NULL},
+  {68,	RADIUS_INTEGER4,	"Annex Pre Output Packets", NULL, NULL},
+  {69,	RADIUS_INTEGER4,	"Annex Connect Progress", NULL, NULL},
+  {73,	RADIUS_INTEGER4,	"Annex Multicast Rate Limit", NULL, NULL},
+  {74,	RADIUS_INTEGER4,	"Annex Maximum Call Duration", NULL, NULL},
+  {75,	RADIUS_INTEGER4,	"Annex Multilink Id", NULL, NULL},
+  {76,	RADIUS_INTEGER4,	"Annex Num In Multilink", NULL, NULL},
+  {81,	RADIUS_INTEGER4,	"Annex Logical Channel Number", NULL, NULL},
+  {82,	RADIUS_INTEGER4,	"Annex Wan Number", NULL, NULL},
+  {83,	RADIUS_INTEGER4,	"Annex Port", NULL, NULL},
+  {85,	RADIUS_INTEGER4,	"Annex Pool Id", NULL, NULL},
+  {86,	RADIUS_STRING,		"Annex Compression Protocol", NULL, NULL},
+  {87,	RADIUS_INTEGER4,	"Annex Transmitted Packets", NULL, NULL},
+  {88,	RADIUS_INTEGER4,	"Annex Retransmitted Packets", NULL, NULL},
+  {89,	RADIUS_INTEGER4,	"Annex Signal to Noise Ratio", NULL, NULL},
+  {90,	RADIUS_INTEGER4,	"Annex Retrain Requests Sent", NULL, NULL},
+  {91,	RADIUS_INTEGER4,	"Annex Retrain Requests Rcvd", NULL, NULL},
+  {92,	RADIUS_INTEGER4,	"Annex Rate Reneg Req Sent", NULL, NULL},
+  {93,	RADIUS_INTEGER4,	"Annex Rate Reneg Req Rcvd", NULL, NULL},
+  {94,	RADIUS_INTEGER4,	"Annex Begin Receive Line Level", NULL, NULL},
+  {95,	RADIUS_INTEGER4,	"Annex End Receive Line Level", NULL, NULL},
+  {96,	RADIUS_STRING,		"Annex Begin Modulation", NULL, NULL},
+  {97,	RADIUS_STRING,		"Annex Error Correction Prot", NULL, NULL},
+  {98,	RADIUS_STRING,		"Annex End Modulation", NULL, NULL},
+  {100,	RADIUS_INTEGER4,	"Annex User Level", radius_vendor_bay_user_level_vals, NULL},
+  {101,	RADIUS_INTEGER4,	"Annex Audit Level", radius_vendor_bay_audit_level_vals, NULL},
+  {0, 0, NULL, NULL, NULL},
 };
 
 /*
@@ -1735,10 +1802,10 @@
 */
 static const radius_attr_info radius_vendor_foundry_attrib[] =
 {
-  {1,	RADIUS_INTEGER4,	"Foundry Privilege Level", NULL},
-  {2,	RADIUS_STRING,		"Foundry Command String", NULL},
-  {3,	RADIUS_INTEGER4,	"Foundry Command Exception Flag", NULL},
-  {0, 0, NULL, NULL},
+  {1,	RADIUS_INTEGER4,	"Foundry Privilege Level", NULL, NULL},
+  {2,	RADIUS_STRING,		"Foundry Command String", NULL, NULL},
+  {3,	RADIUS_INTEGER4,	"Foundry Command Exception Flag", NULL, NULL},
+  {0, 0, NULL, NULL, NULL},
 };
 
 /*
@@ -1775,8 +1842,8 @@
 
 static const radius_attr_info radius_vendor_versanet_attrib[] =
 {
-  {1,	RADIUS_INTEGER4,	"Versanet Termination Cause", radius_vendor_versanet_termination_cause_vals},
-  {0, 0, NULL, NULL},
+  {1,	RADIUS_INTEGER4,	"Versanet Termination Cause", radius_vendor_versanet_termination_cause_vals, NULL},
+  {0, 0, NULL, NULL, NULL},
 };
 
 /*
@@ -1927,90 +1994,90 @@
 
 static const radius_attr_info radius_vendor_redback_attrib[] =
 {
-  {1,	RADIUS_IP_ADDRESS,	"Client DNS Pri", NULL},
-  {2,	RADIUS_IP_ADDRESS,	"Client DNS Sec", NULL},
-  {3,	RADIUS_INTEGER4,	"DHCP Max Leases", NULL},
-  {4,	RADIUS_STRING,		"Context Name", NULL},
-  {5,	RADIUS_STRING,		"Bridge Group", NULL},
-  {6,	RADIUS_STRING,		"BG Aging Time", NULL},
-  {7,	RADIUS_STRING,		"BG Path Cost", NULL},
-  {8,	RADIUS_STRING,		"BG Span Dis", NULL},
-  {9,	RADIUS_STRING,		"BG Trans BPDU", NULL},
-  {10,	RADIUS_INTEGER4,	"Rate Limit Rate", NULL},
-  {11,	RADIUS_INTEGER4,	"Rate Limit Burst", NULL},
-  {12,	RADIUS_INTEGER4,	"Police Rate", NULL},
-  {13,	RADIUS_INTEGER4,	"Police Burst", NULL},
-  {14,	RADIUS_INTEGER4,	"Source Validation", NULL},
-  {15,	RADIUS_INTEGER4,	"Tunnel Domain", NULL},
-  {16,	RADIUS_STRING,		"Tunnel Local Name", NULL},
-  {17,	RADIUS_STRING,		"Tunnel Remote Name", NULL},
-  {18,	RADIUS_INTEGER4,	"Tunnel Function", radius_vendor_redback_tunnel_function_vals},
-  {21,	RADIUS_INTEGER4,	"Tunnel Max Sessions", NULL},
-  {22,	RADIUS_INTEGER4,	"Tunnel Max Tunnels", NULL},
-  {23,	RADIUS_INTEGER4,	"Tunnel Session Auth", NULL},
-  {24,	RADIUS_INTEGER4,	"Tunnel Window", NULL},
-  {25,	RADIUS_INTEGER4,	"Tunnel Retransmit", NULL},
-  {26,	RADIUS_INTEGER4,	"Tunnel Cmd Timeout", NULL},
-  {27,	RADIUS_STRING,		"PPPOE URL", NULL},
-  {28,	RADIUS_STRING,		"PPPOE MOTM", NULL},
-  {29,	RADIUS_INTEGER4,	"Tunnel Group", NULL},
-  {30,	RADIUS_STRING,		"Tunnel Context", NULL},
-  {31,	RADIUS_INTEGER4,	"Tunnel Algorithm", NULL},
-  {32,	RADIUS_INTEGER4,	"Tunnel Deadtime", NULL},
-  {33,	RADIUS_INTEGER4,	"Mcast Send", radius_vendor_redback_mcast_send_vals},
-  {34,	RADIUS_INTEGER4,	"Mcast Receive", radius_vendor_redback_mcast_receive_vals},
-  {35,	RADIUS_INTEGER4,	"Mcast MaxGroups", NULL},
-  {36,	RADIUS_STRING,		"Ip Address Pool Name", NULL},
-  {37,	RADIUS_INTEGER4,	"Tunnel DNIS", radius_vendor_redback_tunnel_dnis_vals},
-  {38,	RADIUS_INTEGER4,	"Medium Type", NULL},
-  {39,	RADIUS_INTEGER4,	"PVC Encapsulation Type", radius_vendor_redback_pvc_encapsulation_type_vals},
-  {40,	RADIUS_STRING,		"PVC Profile Name", NULL},
-  {41,	RADIUS_INTEGER4,	"PVC Circuit Padding", radius_vendor_redback_pvc_circuit_padding_vals},
-  {42,	RADIUS_INTEGER4,	"Bind Type", radius_vendor_redback_bind_type_vals},
-  {43,	RADIUS_INTEGER4,	"Bind Auth Protocol", radius_vendor_redback_bind_auth_protocol_vals},
-  {44,	RADIUS_INTEGER4,	"Bind Auth Max Sessions", NULL},
-  {45,	RADIUS_STRING,		"Bind Bypass Bypass", NULL},
-  {46,	RADIUS_STRING,		"Bind Auth Context", NULL},
-  {47,	RADIUS_STRING,		"Bind Auth Service Grp", NULL},
-  {48,	RADIUS_STRING,		"Bind Bypass Context", NULL},
-  {49,	RADIUS_STRING,		"Bind Int Context", NULL},
-  {50,	RADIUS_STRING,		"Bind Tun Context", NULL},
-  {51,	RADIUS_STRING,		"Bind Ses Context", NULL},
-  {52,	RADIUS_INTEGER4,	"Bind Dot1q Slot", NULL},
-  {53,	RADIUS_INTEGER4,	"Bind Dot1q Port", NULL},
-  {54,	RADIUS_INTEGER4,	"Bind Dot1q Vlan Tag Id", NULL},
-  {55,	RADIUS_STRING,		"Bind Int Interface Name", NULL},
-  {56,	RADIUS_STRING,		"Bind L2TP Tunnel Name", NULL},
-  {57,	RADIUS_INTEGER4,	"Bind L2TP Flow Control", NULL},
-  {58,	RADIUS_STRING,		"Bind Sub User At Context", NULL},
-  {59,	RADIUS_STRING,		"Bind Sub Password", NULL},
-  {60,	RADIUS_STRING,		"Ip Host Addr", NULL},
-  {61,	RADIUS_INTEGER4,	"IP TOS Field", NULL},
-  {62,	RADIUS_INTEGER4,	"NAS Real Port", NULL},
-  {63,	RADIUS_STRING,		"Tunnel Session Auth Ctx", NULL},
-  {64,	RADIUS_STRING,		"Tunnel Session Auth Service Grp", NULL},
-  {65,	RADIUS_INTEGER4,	"Tunnel Rate Limit Rate", NULL},
-  {66,	RADIUS_INTEGER4,	"Tunnel Rate Limit Burst", NULL},
-  {67,	RADIUS_INTEGER4,	"Tunnel Police Rate", NULL},
-  {68,	RADIUS_INTEGER4,	"Tunnel Police Burst", NULL},
-  {69,	RADIUS_STRING,		"Tunnel L2F Second Password", NULL},
-  {128,	RADIUS_INTEGER4,	"Acct Input Octets 64", NULL},
-  {129,	RADIUS_INTEGER4,	"Acct Output Octets 64", NULL},
-  {130,	RADIUS_INTEGER4,	"Acct Input Packets 64", NULL},
-  {131,	RADIUS_INTEGER4,	"Acct Output Packets 64", NULL},
-  {132,	RADIUS_IP_ADDRESS,	"Assigned IP Address", NULL},
-  {133,	RADIUS_INTEGER4,	"Acct Mcast In Octets", NULL},
-  {134,	RADIUS_INTEGER4,	"Acct Mcast Out Octets", NULL},
-  {135,	RADIUS_INTEGER4,	"Acct Mcast In Packets", NULL},
-  {136,	RADIUS_INTEGER4,	"Acct Mcast Out Packets", NULL},
-  {137,	RADIUS_INTEGER4,	"LAC Port", NULL},
-  {138,	RADIUS_INTEGER4,	"LAC Real Port", NULL},
-  {139,	RADIUS_INTEGER4,	"LAC Port Type", radius_vendor_redback_lac_port_type_vals},
-  {140,	RADIUS_INTEGER4,	"LAC Real Port Type", radius_vendor_redback_lac_real_port_type_vals},
-  {141, RADIUS_STRING,		"Acct Dyn Ac Ent", NULL},
-  {142, RADIUS_INTEGER4,	"Session Error Code", NULL},
-  {143, RADIUS_STRING,		"Session Error Msg", NULL},
-  {0, 0, NULL, NULL},
+  {1,	RADIUS_IP_ADDRESS,	"Client DNS Pri", NULL, NULL},
+  {2,	RADIUS_IP_ADDRESS,	"Client DNS Sec", NULL, NULL},
+  {3,	RADIUS_INTEGER4,	"DHCP Max Leases", NULL, NULL},
+  {4,	RADIUS_STRING,		"Context Name", NULL, NULL},
+  {5,	RADIUS_STRING,		"Bridge Group", NULL, NULL},
+  {6,	RADIUS_STRING,		"BG Aging Time", NULL, NULL},
+  {7,	RADIUS_STRING,		"BG Path Cost", NULL, NULL},
+  {8,	RADIUS_STRING,		"BG Span Dis", NULL, NULL},
+  {9,	RADIUS_STRING,		"BG Trans BPDU", NULL, NULL},
+  {10,	RADIUS_INTEGER4,	"Rate Limit Rate", NULL, NULL},
+  {11,	RADIUS_INTEGER4,	"Rate Limit Burst", NULL, NULL},
+  {12,	RADIUS_INTEGER4,	"Police Rate", NULL, NULL},
+  {13,	RADIUS_INTEGER4,	"Police Burst", NULL, NULL},
+  {14,	RADIUS_INTEGER4,	"Source Validation", NULL, NULL},
+  {15,	RADIUS_INTEGER4,	"Tunnel Domain", NULL, NULL},
+  {16,	RADIUS_STRING,		"Tunnel Local Name", NULL, NULL},
+  {17,	RADIUS_STRING,		"Tunnel Remote Name", NULL, NULL},
+  {18,	RADIUS_INTEGER4,	"Tunnel Function", radius_vendor_redback_tunnel_function_vals, NULL},
+  {21,	RADIUS_INTEGER4,	"Tunnel Max Sessions", NULL, NULL},
+  {22,	RADIUS_INTEGER4,	"Tunnel Max Tunnels", NULL, NULL},
+  {23,	RADIUS_INTEGER4,	"Tunnel Session Auth", NULL, NULL},
+  {24,	RADIUS_INTEGER4,	"Tunnel Window", NULL, NULL},
+  {25,	RADIUS_INTEGER4,	"Tunnel Retransmit", NULL, NULL},
+  {26,	RADIUS_INTEGER4,	"Tunnel Cmd Timeout", NULL, NULL},
+  {27,	RADIUS_STRING,		"PPPOE URL", NULL, NULL},
+  {28,	RADIUS_STRING,		"PPPOE MOTM", NULL, NULL},
+  {29,	RADIUS_INTEGER4,	"Tunnel Group", NULL, NULL},
+  {30,	RADIUS_STRING,		"Tunnel Context", NULL, NULL},
+  {31,	RADIUS_INTEGER4,	"Tunnel Algorithm", NULL, NULL},
+  {32,	RADIUS_INTEGER4,	"Tunnel Deadtime", NULL, NULL},
+  {33,	RADIUS_INTEGER4,	"Mcast Send", radius_vendor_redback_mcast_send_vals, NULL},
+  {34,	RADIUS_INTEGER4,	"Mcast Receive", radius_vendor_redback_mcast_receive_vals, NULL},
+  {35,	RADIUS_INTEGER4,	"Mcast MaxGroups", NULL, NULL},
+  {36,	RADIUS_STRING,		"Ip Address Pool Name", NULL, NULL},
+  {37,	RADIUS_INTEGER4,	"Tunnel DNIS", radius_vendor_redback_tunnel_dnis_vals, NULL},
+  {38,	RADIUS_INTEGER4,	"Medium Type", NULL, NULL},
+  {39,	RADIUS_INTEGER4,	"PVC Encapsulation Type", radius_vendor_redback_pvc_encapsulation_type_vals, NULL},
+  {40,	RADIUS_STRING,		"PVC Profile Name", NULL, NULL},
+  {41,	RADIUS_INTEGER4,	"PVC Circuit Padding", radius_vendor_redback_pvc_circuit_padding_vals, NULL},
+  {42,	RADIUS_INTEGER4,	"Bind Type", radius_vendor_redback_bind_type_vals, NULL},
+  {43,	RADIUS_INTEGER4,	"Bind Auth Protocol", radius_vendor_redback_bind_auth_protocol_vals, NULL},
+  {44,	RADIUS_INTEGER4,	"Bind Auth Max Sessions", NULL, NULL},
+  {45,	RADIUS_STRING,		"Bind Bypass Bypass", NULL, NULL},
+  {46,	RADIUS_STRING,		"Bind Auth Context", NULL, NULL},
+  {47,	RADIUS_STRING,		"Bind Auth Service Grp", NULL, NULL},
+  {48,	RADIUS_STRING,		"Bind Bypass Context", NULL, NULL},
+  {49,	RADIUS_STRING,		"Bind Int Context", NULL, NULL},
+  {50,	RADIUS_STRING,		"Bind Tun Context", NULL, NULL},
+  {51,	RADIUS_STRING,		"Bind Ses Context", NULL, NULL},
+  {52,	RADIUS_INTEGER4,	"Bind Dot1q Slot", NULL, NULL},
+  {53,	RADIUS_INTEGER4,	"Bind Dot1q Port", NULL, NULL},
+  {54,	RADIUS_INTEGER4,	"Bind Dot1q Vlan Tag Id", NULL, NULL},
+  {55,	RADIUS_STRING,		"Bind Int Interface Name", NULL, NULL},
+  {56,	RADIUS_STRING,		"Bind L2TP Tunnel Name", NULL, NULL},
+  {57,	RADIUS_INTEGER4,	"Bind L2TP Flow Control", NULL, NULL},
+  {58,	RADIUS_STRING,		"Bind Sub User At Context", NULL, NULL},
+  {59,	RADIUS_STRING,		"Bind Sub Password", NULL, NULL},
+  {60,	RADIUS_STRING,		"Ip Host Addr", NULL, NULL},
+  {61,	RADIUS_INTEGER4,	"IP TOS Field", NULL, NULL},
+  {62,	RADIUS_INTEGER4,	"NAS Real Port", NULL, NULL},
+  {63,	RADIUS_STRING,		"Tunnel Session Auth Ctx", NULL, NULL},
+  {64,	RADIUS_STRING,		"Tunnel Session Auth Service Grp", NULL, NULL},
+  {65,	RADIUS_INTEGER4,	"Tunnel Rate Limit Rate", NULL, NULL},
+  {66,	RADIUS_INTEGER4,	"Tunnel Rate Limit Burst", NULL, NULL},
+  {67,	RADIUS_INTEGER4,	"Tunnel Police Rate", NULL, NULL},
+  {68,	RADIUS_INTEGER4,	"Tunnel Police Burst", NULL, NULL},
+  {69,	RADIUS_STRING,		"Tunnel L2F Second Password", NULL, NULL},
+  {128,	RADIUS_INTEGER4,	"Acct Input Octets 64", NULL, NULL},
+  {129,	RADIUS_INTEGER4,	"Acct Output Octets 64", NULL, NULL},
+  {130,	RADIUS_INTEGER4,	"Acct Input Packets 64", NULL, NULL},
+  {131,	RADIUS_INTEGER4,	"Acct Output Packets 64", NULL, NULL},
+  {132,	RADIUS_IP_ADDRESS,	"Assigned IP Address", NULL, NULL},
+  {133,	RADIUS_INTEGER4,	"Acct Mcast In Octets", NULL, NULL},
+  {134,	RADIUS_INTEGER4,	"Acct Mcast Out Octets", NULL, NULL},
+  {135,	RADIUS_INTEGER4,	"Acct Mcast In Packets", NULL, NULL},
+  {136,	RADIUS_INTEGER4,	"Acct Mcast Out Packets", NULL, NULL},
+  {137,	RADIUS_INTEGER4,	"LAC Port", NULL, NULL},
+  {138,	RADIUS_INTEGER4,	"LAC Real Port", NULL, NULL},
+  {139,	RADIUS_INTEGER4,	"LAC Port Type", radius_vendor_redback_lac_port_type_vals, NULL},
+  {140,	RADIUS_INTEGER4,	"LAC Real Port Type", radius_vendor_redback_lac_real_port_type_vals, NULL},
+  {141, RADIUS_STRING,		"Acct Dyn Ac Ent", NULL, NULL},
+  {142, RADIUS_INTEGER4,	"Session Error Code", NULL, NULL},
+  {143, RADIUS_STRING,		"Session Error Msg", NULL, NULL},
+  {0, 0, NULL, NULL, NULL},
 };
 
 /*
@@ -2019,12 +2086,12 @@
 */
 static const radius_attr_info radius_vendor_juniper_attrib[] =
 {
-  {1,	RADIUS_STRING,		"Juniper Local User Name", NULL},
-  {2,	RADIUS_STRING,		"Juniper Allow Commands", NULL},
-  {3,	RADIUS_STRING,		"Juniper Deny Commands", NULL},
-  {4,	RADIUS_STRING,		"Juniper Allow Configuration", NULL},
-  {5,	RADIUS_STRING,		"Juniper Deny Configuration", NULL},
-  {0, 0, NULL, NULL}
+  {1,	RADIUS_STRING,		"Juniper Local User Name", NULL, NULL},
+  {2,	RADIUS_STRING,		"Juniper Allow Commands", NULL, NULL},
+  {3,	RADIUS_STRING,		"Juniper Deny Commands", NULL, NULL},
+  {4,	RADIUS_STRING,		"Juniper Allow Configuration", NULL, NULL},
+  {5,	RADIUS_STRING,		"Juniper Deny Configuration", NULL, NULL},
+  {0, 0, NULL, NULL, NULL}
 };
 
 /*
@@ -2034,29 +2101,29 @@
 */
 static const radius_attr_info radius_vendor_aptis_attrib[] =
 {
-  {1,	RADIUS_STRING,		"CVX Identification", NULL},
-  {2,	RADIUS_INTEGER4,	"CVX VPOP ID", NULL},
-  {3,	RADIUS_INTEGER4,	"CVX SS7 Session ID Type", NULL},
-  {4,	RADIUS_INTEGER4,	"CVX Radius Redirect", NULL},
-  {5,	RADIUS_INTEGER4,	"CVX IPSVC AZNLVL", NULL},
-  {6,	RADIUS_INTEGER4,	"CVX IPSVC Mask", NULL},
-  {7,	RADIUS_INTEGER4,	"CVX Multilink Match Info", NULL},
-  {8,	RADIUS_INTEGER4,	"CVX Multilink Group Number", NULL},
-  {9,	RADIUS_INTEGER4,	"CVX PPP Log Mask", NULL},
-  {10,	RADIUS_STRING,		"CVX Modem Begin Modulation", NULL},
-  {11,	RADIUS_STRING,		"CVX Modem End Modulation", NULL},
-  {12,	RADIUS_STRING,		"CVX Modem Error Correction", NULL},
-  {13,	RADIUS_STRING,		"CVX Modem Data Compression", NULL},
-  {14,	RADIUS_INTEGER4,	"CVX Modem Tx Packets", NULL},
-  {15,	RADIUS_INTEGER4,	"CVX Modem ReTx Packets", NULL},
-  {16,	RADIUS_INTEGER4,	"CVX Modem SNR", NULL},
-  {17,	RADIUS_INTEGER4,	"CVX Modem Local Retrains", NULL},
-  {18,	RADIUS_INTEGER4,	"CVX Modem Remote Retrains", NULL},
-  {19,	RADIUS_INTEGER4,	"CVX Modem Local Rate Negs", NULL},
-  {20,	RADIUS_INTEGER4,	"CVX Modem Remote Rate Negs", NULL},
-  {21,	RADIUS_INTEGER4,	"CVX Modem Begin Recv Line Lvl", NULL},
-  {22,	RADIUS_INTEGER4,	"CVX Modem End Recv Line Lvl", NULL},
-  {0, 0, NULL, NULL},
+  {1,	RADIUS_STRING,		"CVX Identification", NULL, NULL},
+  {2,	RADIUS_INTEGER4,	"CVX VPOP ID", NULL, NULL},
+  {3,	RADIUS_INTEGER4,	"CVX SS7 Session ID Type", NULL, NULL},
+  {4,	RADIUS_INTEGER4,	"CVX Radius Redirect", NULL, NULL},
+  {5,	RADIUS_INTEGER4,	"CVX IPSVC AZNLVL", NULL, NULL},
+  {6,	RADIUS_INTEGER4,	"CVX IPSVC Mask", NULL, NULL},
+  {7,	RADIUS_INTEGER4,	"CVX Multilink Match Info", NULL, NULL},
+  {8,	RADIUS_INTEGER4,	"CVX Multilink Group Number", NULL, NULL},
+  {9,	RADIUS_INTEGER4,	"CVX PPP Log Mask", NULL, NULL},
+  {10,	RADIUS_STRING,		"CVX Modem Begin Modulation", NULL, NULL},
+  {11,	RADIUS_STRING,		"CVX Modem End Modulation", NULL, NULL},
+  {12,	RADIUS_STRING,		"CVX Modem Error Correction", NULL, NULL},
+  {13,	RADIUS_STRING,		"CVX Modem Data Compression", NULL, NULL},
+  {14,	RADIUS_INTEGER4,	"CVX Modem Tx Packets", NULL, NULL},
+  {15,	RADIUS_INTEGER4,	"CVX Modem ReTx Packets", NULL, NULL},
+  {16,	RADIUS_INTEGER4,	"CVX Modem SNR", NULL, NULL},
+  {17,	RADIUS_INTEGER4,	"CVX Modem Local Retrains", NULL, NULL},
+  {18,	RADIUS_INTEGER4,	"CVX Modem Remote Retrains", NULL, NULL},
+  {19,	RADIUS_INTEGER4,	"CVX Modem Local Rate Negs", NULL, NULL},
+  {20,	RADIUS_INTEGER4,	"CVX Modem Remote Rate Negs", NULL, NULL},
+  {21,	RADIUS_INTEGER4,	"CVX Modem Begin Recv Line Lvl", NULL, NULL},
+  {22,	RADIUS_INTEGER4,	"CVX Modem End Recv Line Lvl", NULL, NULL},
+  {0, 0, NULL, NULL, NULL},
 };
 
 /*
@@ -2076,7 +2143,7 @@
   {6,   	"SEP 2 + SEP 3"},
   {7,   	"SEP 1 + SEP 2 + SEP 3"},
   {8,   	"SEP 4"},
-  {9,	"SEP 1 + SEP 4"}, 
+  {9,	"SEP 1 + SEP 4"},
   {10,  	"SEP 2 + SEP 4"},
   {11,  	"SEP 1 + SEP 2 + SEP 4"},
   {12,  	"SEP 3 + SEP 4"},
@@ -2151,7 +2218,7 @@
 
 static const value_string radius_vendor_cisco_vpn3000_l2tp_encryption_vals[] =
 {
-  {1,	"Encryption required"}, 
+  {1,	"Encryption required"},
   {2,	"40 Bits"},
   {3,	"40 Bits - Encryption required"},
   {4,	"128 Bits"},
@@ -2163,7 +2230,7 @@
   {10,	"40 Bits - Stateless required"},
   {11,	"40 Bits Encryption / Stateless required"},
   {12,	"128 Bits - Stateless required"},
-  {13,	"128 Bits - Encryption / Stateless required"}, 
+  {13,	"128 Bits - Encryption / Stateless required"},
   {14,	"40/128 Bits - Stateless required"},
   {15,	"40/128 Bits - Encryption / Stateless required"},
  {0, NULL}
@@ -2222,7 +2289,7 @@
 {
   {1,	"Required"},
   {2,	"If supported by certifiate"},
-  {3,	"Do not check"}, 
+  {3,	"Do not check"},
   {0, NULL}
 };
 
@@ -2258,7 +2325,7 @@
  {0, NULL}
 };
 
-static const value_string radius_vendor_cisco_vpn_req_user_auth_vals[] = 
+static const value_string radius_vendor_cisco_vpn_req_user_auth_vals[] =
 {
   {0,	"No"},
   {1,	"Yes"},
@@ -2346,78 +2413,78 @@
 
 static const radius_attr_info radius_vendor_cisco_vpn3000_attrib[] =
 {
-  {1,	RADIUS_STRING,		"CVPN3000-Access-Hours", NULL},
-  {2,	RADIUS_INTEGER4,		"CVPN3000-Simultaneous-Logins", NULL},
-  {5,	RADIUS_IP_ADDRESS,	"CVPN3000-Primary-DNS", NULL},
-  {6,	RADIUS_IP_ADDRESS,	"CVPN3000-Secondary-DNS", NULL},
-  {7,	RADIUS_IP_ADDRESS,	"CVPN3000-Primary-WINS", NULL},
-  {8,	RADIUS_IP_ADDRESS,	"CVPN3000-Secondary-WINS", NULL},
-  {9,   	RADIUS_INTEGER4,		"CVPN3000-SEP-Card-Assignment", radius_vendor_cisco_vpn3000_sep_card_assignment_vals},
-  {11,  	RADIUS_INTEGER4,		"CVPN3000-Tunneling-Protocols", radius_vendor_cisco_vpn3000_tunneling_protocols_vals},
-  {12,	RADIUS_STRING,		"CVPN3000-IPSec-Sec-Association", NULL},
-  {13,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Authentication", radius_vendor_cisco_vpn3000_ipsec_authentication_vals},
-  {15,	RADIUS_STRING,		"CVPN3000-IPSec-Banner1", NULL},
-  {16,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Allow-Passwd-Store", radius_vendor_cisco_vpn3000_allow_pw_store_vals},
-  {17,	RADIUS_INTEGER4,		"CVPN3000-Use-Client-Address", radius_vendor_cisco_vpn3000_use_client_address_vals},
-  {20,	RADIUS_INTEGER4,		"CVPN3000-PPTP-Encryption", radius_vendor_cisco_vpn3000_pptp_encryption_vals},
-  {21,	RADIUS_INTEGER4,		"CVPN3000-L2TP-Encryption", radius_vendor_cisco_vpn3000_l2tp_encryption_vals},
-  {27,	RADIUS_STRING,		"CVPN3000-IPSec-Split-Tunnel-List", NULL},
-  {28,	RADIUS_STRING,		"CVPN3000-IPSec-Default-Domain", NULL},
-  {29,	RADIUS_STRING,		"CVPN3000-IPSec-Split-DNS-Names", NULL},
-  {30,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Tunnel-Type", radius_vendor_cisco_vpn3000_tunnel_type_vals},
-  {31,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Mode-Config", radius_vendor_cisco_vpn3000_mode_config_vals},
-  {33,	RADIUS_INTEGER4,		"CVPN3000-IPSec-User-Group-Lock", radius_vendor_cisco_vpn3000_user_group_lock_vals},
-  {34,  	RADIUS_INTEGER4,		"CVPN3000-IPSec-Over-UDP", radius_vendor_cisco_vpn3000_ipsec_over_udp_vals},
-  {35,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Over-UDP-Port", NULL},
-  {36,	RADIUS_STRING,		"CVPN3000-IPSec-Banner2", NULL},
-  {37,	RADIUS_INTEGER4,		"CVPN3000-PPTP-MPPC-Compression", radius_vendor_cisco_vpn3000_pptp_mppc_compression_vals},
-  {38,	RADIUS_INTEGER4,		"CVPN3000-L2TP-MPPC-Compression", radius_vendor_cisco_vpn3000_l2tp_mppc_compression_vals},
-  {39,	RADIUS_INTEGER4,		"CVPN3000-IPSec-IP-Compression", radius_vendor_cisco_vpn3000_ipsec_ip_compression_vals},
-  {40,	RADIUS_INTEGER4,		"CVPN3000-IPSec-IKE-Peer-IDCheck", radius_vendor_cisco_vpn3000_ipsec_ike_peer_idcheck_vals},
-  {41,	RADIUS_INTEGER4,		"CVPN3000-IKE-Keep-Alives", radius_vendor_cisco_vpn3000_ike_keep_alives_vals},
-  {42,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Auth-On-Rekey", radius_vendor_cisco_vpn3000_auth_on_rekey_vals},
-  {45,	RADIUS_INTEGER4,		"CVPN3000-Required-Client-Firewall-Vendor-Code", radius_vendor_cisco_vpn3000_required_client_fw_vendor_code_vals},
-  {46,	RADIUS_INTEGER4,		"CVPN3000-Required-Client-Firewall-Product-Code", NULL},
-  {47,	RADIUS_STRING,		"CVPN3000-Required-Client-Firewall-Description", NULL},
-  {48,	RADIUS_INTEGER4,		"CVPN3000-Require-HW-Client-Auth", radius_vendor_cisco_vpn3000_hw_client_auth_vals},
-  {49,	RADIUS_INTEGER4,		"CVPN3000-Required-Individual-User-Auth", radius_vendor_cisco_vpn_req_user_auth_vals},
-  {50,	RADIUS_INTEGER4,		"CVPN3000-Authenticated-User-Idle-Timeout", NULL},
-  {51,	RADIUS_INTEGER4,		"CVPN3000-Cisco-IP-Phone-Bypass", radius_vendor_cisco_vpn3000_ip_phone_bypass_vals},
-  {52,	RADIUS_STRING,		"CVPN3000-User-Auth-Server-Name", NULL},
-  {53,	RADIUS_INTEGER4,		"CVPN3000-User-Auth-Server-Port", NULL},
-  {54,  	RADIUS_STRING,		"CVPN3000-User-Auth-Server-Secret", NULL},
-  {55,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Split-Tunneling-Policy", radius_vendor_cisco_vpn3000_ipsec_split_tunneling_policy_vals},
-  {56,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Required-Client-Firewall-Capability", radius_vendor_cisco_vpn3000_ipsec_required_client_fw_capability_vals},
-  {57,	RADIUS_STRING,		"CVPN3000-IPSec-Client-Firewall-Filter-Name", NULL},
-  {58,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Client-Firewall-Filter-Optional", radius_vendor_cisco_vpn3000_ipsec_client_fw_filter_optional_vals},
-  {59,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Backup-Servers", radius_vendor_cisco_vpn3000_ipsec_backup_servers_vals},
-  {60,	RADIUS_STRING,		"CVPN3000-IPSec-Backup-Server-List", NULL},
-  {62,	RADIUS_INTEGER4,		"CVPN3000-MS-Client-Intercept-DHCP-Configure-Message", radius_vendor_cisco_vpn3000_ms_client_intercept_dhcp_configure_message_vals},
-  {63,	RADIUS_IP_ADDRESS,	"CVPN3000-MS-Client-Subnet-Mask", NULL},
-  {64,	RADIUS_INTEGER4,		"CVPN3000-Allow-Network-Extension-Mode", radius_vendor_cisco_vpn3000_allow_network_extension_mode_vals},
-  {68,	RADIUS_INTEGER4,		"CVPN3000-Confidence-Interval", NULL},
-  {69,	RADIUS_INTEGER4,		"CVPN3000-WebVPN-Content-Filter-Parameters", radius_vendor_cisco_vpn3000_webvpn_content_filter_parameters_vals},
-  {70,	RADIUS_INTEGER4,		"CVPN3000-WebVPN-Enable-functions", NULL},
-  {74,	RADIUS_STRING,		"CVPN3000-WebVPN-Exchange-Server-Address", NULL},
-  {75,	RADIUS_INTEGER4,		"CVPN3000-Cisco-LEAP-Bypass", NULL},
-  {77,	RADIUS_STRING,		"CVPN3000-Client-Type-Version-Limiting", NULL},
-  {78,	RADIUS_STRING,		"CVPN3000-WebVPN-ExchangeServer-NETBIOS-Name", NULL},
-  {79,	RADIUS_STRING,		"CVPN3000-Port-Forwarding-Name", NULL},
-  {135,	RADIUS_INTEGER4,		"CVPN3000-Strip-Realm", radius_vendor_cisco_vpn3000_strip_realm_vals},
-  {0,	0, NULL, NULL}
+  {1,	RADIUS_STRING,		"CVPN3000-Access-Hours", NULL, NULL},
+  {2,	RADIUS_INTEGER4,		"CVPN3000-Simultaneous-Logins", NULL, NULL},
+  {5,	RADIUS_IP_ADDRESS,	"CVPN3000-Primary-DNS", NULL, NULL},
+  {6,	RADIUS_IP_ADDRESS,	"CVPN3000-Secondary-DNS", NULL, NULL},
+  {7,	RADIUS_IP_ADDRESS,	"CVPN3000-Primary-WINS", NULL, NULL},
+  {8,	RADIUS_IP_ADDRESS,	"CVPN3000-Secondary-WINS", NULL, NULL},
+  {9,   	RADIUS_INTEGER4,		"CVPN3000-SEP-Card-Assignment", radius_vendor_cisco_vpn3000_sep_card_assignment_vals, NULL},
+  {11,  	RADIUS_INTEGER4,		"CVPN3000-Tunneling-Protocols", radius_vendor_cisco_vpn3000_tunneling_protocols_vals, NULL},
+  {12,	RADIUS_STRING,		"CVPN3000-IPSec-Sec-Association", NULL, NULL},
+  {13,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Authentication", radius_vendor_cisco_vpn3000_ipsec_authentication_vals, NULL},
+  {15,	RADIUS_STRING,		"CVPN3000-IPSec-Banner1", NULL, NULL},
+  {16,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Allow-Passwd-Store", radius_vendor_cisco_vpn3000_allow_pw_store_vals, NULL},
+  {17,	RADIUS_INTEGER4,		"CVPN3000-Use-Client-Address", radius_vendor_cisco_vpn3000_use_client_address_vals, NULL},
+  {20,	RADIUS_INTEGER4,		"CVPN3000-PPTP-Encryption", radius_vendor_cisco_vpn3000_pptp_encryption_vals, NULL},
+  {21,	RADIUS_INTEGER4,		"CVPN3000-L2TP-Encryption", radius_vendor_cisco_vpn3000_l2tp_encryption_vals, NULL},
+  {27,	RADIUS_STRING,		"CVPN3000-IPSec-Split-Tunnel-List", NULL, NULL},
+  {28,	RADIUS_STRING,		"CVPN3000-IPSec-Default-Domain", NULL, NULL},
+  {29,	RADIUS_STRING,		"CVPN3000-IPSec-Split-DNS-Names", NULL, NULL},
+  {30,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Tunnel-Type", radius_vendor_cisco_vpn3000_tunnel_type_vals, NULL},
+  {31,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Mode-Config", radius_vendor_cisco_vpn3000_mode_config_vals, NULL},
+  {33,	RADIUS_INTEGER4,		"CVPN3000-IPSec-User-Group-Lock", radius_vendor_cisco_vpn3000_user_group_lock_vals, NULL},
+  {34,  	RADIUS_INTEGER4,		"CVPN3000-IPSec-Over-UDP", radius_vendor_cisco_vpn3000_ipsec_over_udp_vals, NULL},
+  {35,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Over-UDP-Port", NULL, NULL},
+  {36,	RADIUS_STRING,		"CVPN3000-IPSec-Banner2", NULL, NULL},
+  {37,	RADIUS_INTEGER4,		"CVPN3000-PPTP-MPPC-Compression", radius_vendor_cisco_vpn3000_pptp_mppc_compression_vals, NULL},
+  {38,	RADIUS_INTEGER4,		"CVPN3000-L2TP-MPPC-Compression", radius_vendor_cisco_vpn3000_l2tp_mppc_compression_vals, NULL},
+  {39,	RADIUS_INTEGER4,		"CVPN3000-IPSec-IP-Compression", radius_vendor_cisco_vpn3000_ipsec_ip_compression_vals, NULL},
+  {40,	RADIUS_INTEGER4,		"CVPN3000-IPSec-IKE-Peer-IDCheck", radius_vendor_cisco_vpn3000_ipsec_ike_peer_idcheck_vals, NULL},
+  {41,	RADIUS_INTEGER4,		"CVPN3000-IKE-Keep-Alives", radius_vendor_cisco_vpn3000_ike_keep_alives_vals, NULL},
+  {42,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Auth-On-Rekey", radius_vendor_cisco_vpn3000_auth_on_rekey_vals, NULL},
+  {45,	RADIUS_INTEGER4,		"CVPN3000-Required-Client-Firewall-Vendor-Code", radius_vendor_cisco_vpn3000_required_client_fw_vendor_code_vals, NULL},
+  {46,	RADIUS_INTEGER4,		"CVPN3000-Required-Client-Firewall-Product-Code", NULL, NULL},
+  {47,	RADIUS_STRING,		"CVPN3000-Required-Client-Firewall-Description", NULL, NULL},
+  {48,	RADIUS_INTEGER4,		"CVPN3000-Require-HW-Client-Auth", radius_vendor_cisco_vpn3000_hw_client_auth_vals, NULL},
+  {49,	RADIUS_INTEGER4,		"CVPN3000-Required-Individual-User-Auth", radius_vendor_cisco_vpn_req_user_auth_vals, NULL},
+  {50,	RADIUS_INTEGER4,		"CVPN3000-Authenticated-User-Idle-Timeout", NULL, NULL},
+  {51,	RADIUS_INTEGER4,		"CVPN3000-Cisco-IP-Phone-Bypass", radius_vendor_cisco_vpn3000_ip_phone_bypass_vals, NULL},
+  {52,	RADIUS_STRING,		"CVPN3000-User-Auth-Server-Name", NULL, NULL},
+  {53,	RADIUS_INTEGER4,		"CVPN3000-User-Auth-Server-Port", NULL, NULL},
+  {54,  	RADIUS_STRING,		"CVPN3000-User-Auth-Server-Secret", NULL, NULL},
+  {55,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Split-Tunneling-Policy", radius_vendor_cisco_vpn3000_ipsec_split_tunneling_policy_vals, NULL},
+  {56,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Required-Client-Firewall-Capability", radius_vendor_cisco_vpn3000_ipsec_required_client_fw_capability_vals, NULL},
+  {57,	RADIUS_STRING,		"CVPN3000-IPSec-Client-Firewall-Filter-Name", NULL, NULL},
+  {58,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Client-Firewall-Filter-Optional", radius_vendor_cisco_vpn3000_ipsec_client_fw_filter_optional_vals, NULL},
+  {59,	RADIUS_INTEGER4,		"CVPN3000-IPSec-Backup-Servers", radius_vendor_cisco_vpn3000_ipsec_backup_servers_vals, NULL},
+  {60,	RADIUS_STRING,		"CVPN3000-IPSec-Backup-Server-List", NULL, NULL},
+  {62,	RADIUS_INTEGER4,		"CVPN3000-MS-Client-Intercept-DHCP-Configure-Message", radius_vendor_cisco_vpn3000_ms_client_intercept_dhcp_configure_message_vals, NULL},
+  {63,	RADIUS_IP_ADDRESS,	"CVPN3000-MS-Client-Subnet-Mask", NULL, NULL},
+  {64,	RADIUS_INTEGER4,		"CVPN3000-Allow-Network-Extension-Mode", radius_vendor_cisco_vpn3000_allow_network_extension_mode_vals, NULL},
+  {68,	RADIUS_INTEGER4,		"CVPN3000-Confidence-Interval", NULL, NULL},
+  {69,	RADIUS_INTEGER4,		"CVPN3000-WebVPN-Content-Filter-Parameters", radius_vendor_cisco_vpn3000_webvpn_content_filter_parameters_vals, NULL},
+  {70,	RADIUS_INTEGER4,		"CVPN3000-WebVPN-Enable-functions", NULL, NULL},
+  {74,	RADIUS_STRING,		"CVPN3000-WebVPN-Exchange-Server-Address", NULL, NULL},
+  {75,	RADIUS_INTEGER4,		"CVPN3000-Cisco-LEAP-Bypass", NULL, NULL},
+  {77,	RADIUS_STRING,		"CVPN3000-Client-Type-Version-Limiting", NULL, NULL},
+  {78,	RADIUS_STRING,		"CVPN3000-WebVPN-ExchangeServer-NETBIOS-Name", NULL, NULL},
+  {79,	RADIUS_STRING,		"CVPN3000-Port-Forwarding-Name", NULL, NULL},
+  {135,	RADIUS_INTEGER4,		"CVPN3000-Strip-Realm", radius_vendor_cisco_vpn3000_strip_realm_vals, NULL},
+  {0,	0, NULL, NULL, NULL}
 };
 
 static const radius_attr_info radius_vendor_cosine_attrib[] =
 {
-  {1,	RADIUS_STRING,		"Connection Profile Name", NULL},
-  {2,	RADIUS_STRING,		"Enterprise ID", NULL},
-  {3,	RADIUS_STRING,		"Address Pool Name", NULL},
-  {4,	RADIUS_INTEGER4,	"DS Byte", NULL},
-  {5,	COSINE_VPI_VCI,		"VPI/VCI", NULL},
-  {6,	RADIUS_INTEGER4,	"DLCI", NULL},
-  {7,	RADIUS_IP_ADDRESS,	"LNS IP Address", NULL},
-  {8,	RADIUS_STRING,		"CLI User Permission ID", NULL},
-  {0, 0, NULL, NULL}
+  {1,	RADIUS_STRING,		"Connection Profile Name", NULL, NULL},
+  {2,	RADIUS_STRING,		"Enterprise ID", NULL, NULL},
+  {3,	RADIUS_STRING,		"Address Pool Name", NULL, NULL},
+  {4,	RADIUS_INTEGER4,	"DS Byte", NULL, NULL},
+  {5,	COSINE_VPI_VCI,		"VPI/VCI", NULL, NULL},
+  {6,	RADIUS_INTEGER4,	"DLCI", NULL, NULL},
+  {7,	RADIUS_IP_ADDRESS,	"LNS IP Address", NULL, NULL},
+  {8,	RADIUS_STRING,		"CLI User Permission ID", NULL, NULL},
+  {0, 0, NULL, NULL, NULL}
 };
 
 /*
@@ -2435,10 +2502,10 @@
 
 static const radius_attr_info radius_vendor_shasta_attrib[] =
 {
-  {1,	RADIUS_INTEGER4,	"Shasta User Privilege", radius_vendor_shasta_user_privilege_vals},
-  {2,	RADIUS_STRING,		"Shasta Service Profile", NULL},
-  {3,	RADIUS_STRING,		"Shasta VPN Name", NULL},
-  {0, 0, NULL, NULL},
+  {1,	RADIUS_INTEGER4,	"Shasta User Privilege", radius_vendor_shasta_user_privilege_vals, NULL},
+  {2,	RADIUS_STRING,		"Shasta Service Profile", NULL, NULL},
+  {3,	RADIUS_STRING,		"Shasta VPN Name", NULL, NULL},
+  {0, 0, NULL, NULL, NULL},
 };
 
 /*
@@ -2448,25 +2515,399 @@
 */
 static const radius_attr_info radius_vendor_nomadix_attrib[] =
 {
-  {1,	RADIUS_INTEGER4,	"Nomadix Bw Up", NULL},
-  {2,	RADIUS_INTEGER4,	"Nomadix Bw Down", NULL},
-  {0, 0, NULL, NULL},
+  {1,	RADIUS_INTEGER4,	"Nomadix Bw Up", NULL, NULL},
+  {2,	RADIUS_INTEGER4,	"Nomadix Bw Down", NULL, NULL},
+  {0, 0, NULL, NULL, NULL},
+};
+
+/*
+reference:
+	PKT-SP-EM-I09-040402 - PacketCable(tm) Event Message Specification
+	http://www.packetcable.com/specifications/
+*/
+
+/* XXX - Do we need to strip off the spaces for RJ strings? */
+#define PACKETCABLE_RJ_STRING RADIUS_STRING
+#define PACKETCABLE_EM_HEADER_CODE 1
+
+static value_string radius_vendor_packetcable_event_message_vals[] =
+{
+  {0,  "Reserved"},
+  {1,  "Signaling_Start"},
+  {2,  "Signaling_Stop"},
+  {3,  "Database_Query"},
+  {4,  "Intelligent_Peripheral_Usage_Start"},
+  {5,  "Intelligent_Peripheral_Usage_Stop"},
+  {6,  "Service_Instance"},
+  {7,  "QoS_Reserve"},
+  {8,  "QoS_Release"},
+  {9,  "Service_Activation"},
+  {10, "Service_Deactivation"},
+  {11,  "Media_Report"},
+  {12,  "Signal_Instance"},
+  {13, "Interconnect_(Signaling)_Start"},
+  {14, "Interconnect_(Signaling)_Stop"},
+  {15, "Call_Answer"},
+  {16, "Call_Disconnect"},
+  {17, "Time_Change"},
+  {19, "QoS_Commit"},
+  {20, "Media_Alive"},
+  {31,  "Policy_Request"},
+  {32,  "Policy_Delete"},
+  {33,  "Policy_Update"},
+  {0, NULL}
+};
+
+static value_string radius_vendor_packetcable_query_type_vals[] =
+{
+  {0,  "Reserved"},
+  {1,  "Toll Free Number Looukp"},
+  {2,  "LNPNumberLookup"},
+  {3,  "Calling Name Delivery Lookup"},
+  {0, NULL}
+};
+
+static value_string radius_vendor_packetcable_channel_state_vals[] =
+{
+  {0,  "Not Used/Reserved"},
+  {1,  "Open"},
+  {2,  "Change"},
+  {2,  "Close"},
+  {0, NULL}
+};
+
+static value_string radius_vendor_packetcable_direction_indicator_vals[] =
+{
+  {0,  "Undefined"},
+  {1,  "Originating"},
+  {2,  "Terminating"},
+  {0, NULL}
+};
+
+static value_string radius_vendor_packetcable_flow_direction_vals[] =
+{
+  {0,  "Reserved"},
+  {1,  "Upstream"},
+  {2,  "Downstream"},
+  {0, NULL}
+};
+
+static value_string radius_vendor_packetcable_signal_type_vals[] =
+{
+  {0,  "Reserved"},
+  {1,  "Network_Signal"},
+  {2,  "Subject_Signal"},
+  {0, NULL}
+};
+
+static value_string radius_vendor_packetcable_alerting_signal_vals[] =
+{
+  {0,  "Reserved"},
+  {1,  "Ringing (rg)"},
+  {2,  "Distinctive ringing 2 (r2)"},
+  {3,  "Distinctive ringing 3 (r3)"},
+  {4,  "Distinctive ringing 4 (r4)"},
+  {5,  "Ringsplash (rs)"},
+  {6,  "Call waiting tone 1 (wt1)"},
+  {7,  "Call waiting tone 2 (wt2)"},
+  {8,  "Call waiting tone 3 (wt3)"},
+  {9,  "Call waiting tone 4 (wt4)"},
+  {10,  "Reserved"},
+  {11,  "Distinctive ringing 0 (r0)"},
+  {12,  "Distinctive ringing 1 (r1)"},
+  {13,  "Distinctive ringing 5 (r5)"},
+  {14,  "Distinctive ringing 6 (r6)"},
+  {15,  "Distinctive ringing 7 (r7)"},
+  {0, NULL}
+};
+
+static value_string radius_vendor_packetcable_subject_audible_signal_vals[] =
+{
+  {0,  "Reserved"},
+  {1,  "Dial tone (dl)"},
+  {2,  "Stutter dial tone (sl)"},
+  {3,  "Ring back tone (rt)"},
+  {4,  "Reorder tone (ro)"},
+  {5,  "Busy tone (bz)"},
+  {6,  "Confirmation tone (cf)"},
+  {7,  "Reserved"},
+  {8,  "Message waiting indicator (mwi)"},
+  {9,  "Off-hook warning tone (ot)"},
+  {10, "Reserved"},
+  {11, "Reserved"},
+  {12, "Reserved"},
+  {13, "Reserved"},
+  {14, "Reserved"},
+  {15, "Reserved"},
+  {16, "Reserved"},
+  {17, "Reserved"},
+  {18, "Reserved"},
+  {19, "Reserved"},
+  {20, "Reserved"},
+  {21, "Reserved"},
+  {0, NULL}
+};
+
+static value_string radius_vendor_packetcable_element_requesting_qos_vals[] =
+{
+  {0, "Client"},
+  {1, "Policy Server"},
+  {2, "Embedded Client"},
+  {0, NULL}
+};
+
+static value_string radius_vendor_packetcable_qos_release_reason_vals[] =
+{
+  {1,   "Gate Closed by PS"},
+  {2,   "Inactivity resource recovery (T4) timer expiration"},
+  {3,   "CM Failure"},
+  {4,   "Pre-Empted"},
+  {5,   "RSVP PathTear request"},
+  {6,   "CM Request"},
+  {7,   "Admitted (T2) timer expiration"},
+  {127, "Other"},
+  {0, NULL}
+};
+
+static value_string radius_vendor_packetcable_policy_denied_reason_vals[] =
+{
+  {1,   "Policy Server admission control failure"},
+  {2,   "Insufficient resources"},
+  {3,   "Unknown subscriber"},
+  {4,   "Unauthorized AMID"},
+  {5,   "Undefined Service Class Name"},
+  {6,   "Incompatible Envelope"},
+  {127, "Other"},
+  {0, NULL}
+};
+
+static value_string radius_vendor_packetcable_policy_deleted_reason_vals[] =
+{
+  {1,   "Application Manager request"},
+  {2,   "CMTS decistion"},
+  {127, "Other"},
+  {0, NULL}
+};
+
+static value_string radius_vendor_packetcable_policy_update_reason_vals[] =
+{
+  {1,   "Traffic Profile"},
+  {2,   "Classifier"},
+  {3,   "Volume Limit"},
+  {4,   "Time Limit"},
+  {5,   "Opaque data"},
+  {6,   "Multiple Updates"},
+  {127, "Other"},
+  {0, NULL}
+};
+
+static value_string radius_vendor_packetcable_policy_decision_status_vals[] =
+{
+  {1, "Policy Approved"},
+  {2, "Policy Denied"},
+  {0, NULL}
+};
+
+
+static value_string packetcable_em_header_element_type_vals[] =
+{
+  {0,  "Reserved"},
+  {1,  "CMS"},
+  {2,  "CMTS"},
+  {3,  "Media Gateway Controller"},
+  {0, NULL}
+};
+
+#define PACKETCABLE_EMHS_EI_MASK 0X0003
+#define PACKETCABLE_EMHS_EO_MASK 0X0004
+#define PACKETCABLE_EMHS_EMP_MASK 0X0008
+#define PACKETCABLE_EMHS_RESERVED_MASK 0Xfff0
+
+static value_string packetcable_em_header_status_error_indicator_vals[] =
+{
+  {0,  "No Error"},
+  {1,  "Possible Error"},
+  {2,  "Known Error"},
+  {3,  "Reserved"},
+  {0, NULL},
+};
+
+static value_string packetcable_em_header_status_event_origin_vals[] =
+{
+  {0,  "Trusted Element"},
+  {1,  "Untrusted Element"},
+  {0, NULL},
+};
+
+static value_string packetcable_em_header_status_event_message_proxied_vals[] =
+{
+  {0,  "Not proxied"},
+  {1,  "Proxied"},
+  {0, NULL},
+};
+
+static value_string packetcable_call_termination_cause_vals[] =
+{
+  {0,  "Reserved"},
+  {1,  "BAF"},
+  {2,  "Reserved"},
+  {0, NULL},
+};
+
+static value_string packetcable_trunk_type_vals[] =
+{
+  {1,  "Not Used"},
+  {2,  "Not Used"},
+  {3,  "SS7 direct trunk group member"},
+  {4,  "SS7 from IC to AT and SS7 from AT to EO"},
+  {5,  "Not Used"},
+  {6,  "SS7 from IC to AT and non-SS7 from AT to EO (terminating only)"},
+  {9,  "Signaling type not specified"},
+  {0, NULL},
 };
 
+#define PACKETCABLE_QOS_STATE_INDICATION_MASK 0X0003
+static value_string packetcable_state_indication_vals[] =
+{
+  {0,  "Illegal Value"},
+  {1,  "Resource Reserved but not Activated"},
+  {2,  "Resource Activated"},
+  {3,  "Resource Reserved & Activated"},
+};
+
+#define PACKETCABLE_SERVICE_FLOW_SCHEDULING_TYPE_MASK  (1 << 2)
+#define PACKETCABLE_NOMINAL_GRANT_INTERVAL_MASK        (1 << 3)
+#define PACKETCABLE_TOLERATED_GRANT_JITTER_MASK        (1 << 4)
+#define PACKETCABLE_GRANTS_PER_INTERVAL_MASK   (1 << 5)
+#define PACKETCABLE_UNSOLICITED_GRANT_SIZE_MASK        (1 << 6)
+#define PACKETCABLE_TRAFFIC_PRIORITY_MASK      (1 << 7)
+#define PACKETCABLE_MAXIMUM_SUSTAINED_RATE_MASK        (1 << 8)
+#define PACKETCABLE_MAXIMUM_TRAFFIC_BURST_MASK (1 << 9)
+#define PACKETCABLE_MINIMUM_RESERVED_TRAFFIC_RATE_MASK (1 << 10)
+#define PACKETCABLE_MINIMUM_PACKET_SIZE_MASK   (1 << 11)
+#define PACKETCABLE_MAXIMUM_CONCATENATED_BURST_MASK    (1 << 12)
+#define PACKETCABLE_REQUEST_TRANSMISSION_POLICY_MASK   (1 << 13)
+#define PACKETCABLE_NOMINAL_POLLING_INTERVAL_MASK      (1 << 14)
+#define PACKETCABLE_TOLERATED_POLL_JITTER_MASK (1 << 15)
+#define PACKETCABLE_IP_TYPE_OF_SERVICE_OVERRIDE_MASK   (1 << 16)
+#define PACKETCABLE_MAXIMUM_DOWNSTREAM_LATENCY_MASK    (1 << 17)
+
+static guint32 packetcable_qos_desc_mask[] =
+{
+  PACKETCABLE_SERVICE_FLOW_SCHEDULING_TYPE_MASK,
+  PACKETCABLE_NOMINAL_GRANT_INTERVAL_MASK,
+  PACKETCABLE_TOLERATED_GRANT_JITTER_MASK,
+  PACKETCABLE_GRANTS_PER_INTERVAL_MASK,
+  PACKETCABLE_UNSOLICITED_GRANT_SIZE_MASK,
+  PACKETCABLE_TRAFFIC_PRIORITY_MASK,
+  PACKETCABLE_MAXIMUM_SUSTAINED_RATE_MASK,
+  PACKETCABLE_MAXIMUM_TRAFFIC_BURST_MASK,
+  PACKETCABLE_MINIMUM_RESERVED_TRAFFIC_RATE_MASK,
+  PACKETCABLE_MINIMUM_PACKET_SIZE_MASK,
+  PACKETCABLE_MAXIMUM_CONCATENATED_BURST_MASK,
+  PACKETCABLE_REQUEST_TRANSMISSION_POLICY_MASK,
+  PACKETCABLE_NOMINAL_POLLING_INTERVAL_MASK,
+  PACKETCABLE_TOLERATED_POLL_JITTER_MASK,
+  PACKETCABLE_IP_TYPE_OF_SERVICE_OVERRIDE_MASK,
+  PACKETCABLE_MAXIMUM_DOWNSTREAM_LATENCY_MASK,
+};
+
+#define PACKETCABLE_QOS_DESC_BITFIELDS 16
+
+
+static const radius_attr_info radius_vendor_cablelabs_attrib[] =
+{
+  {0,  RADIUS_RESERVED,                        "Reserved", NULL, NULL},
+  {1,  PACKETCABLE_EM_HEADER,                  "EM_Header Data structure", NULL, NULL},
+  /* 2 Undefined */
+  {3,  RADIUS_STRING,                          "MTA_Endpoint_Name", NULL, NULL},
+  {4,  PACKETCABLE_RJ_STRING,                  "Calling_Party_Number", NULL, NULL},
+  {5,  PACKETCABLE_RJ_STRING,                  "Called_Party_Number", NULL, NULL},
+  {6,  PACKETCABLE_RJ_STRING,                  "Database_ID", NULL, NULL},
+  {7,  RADIUS_INTEGER2,                        "Query_Type", radius_vendor_packetcable_query_type_vals, NULL},
+  /* 8 Undefined */
+  {9,  PACKETCABLE_RJ_STRING,                  "Returned_Number", NULL, NULL},
+  /* 10 Undefined */
+  {11, PACKETCABLE_CALL_TERMINATION_CAUSE,     "Call_Termination_Cause", NULL, NULL},
+  /* 12 Undefined */
+  {13, PACKETCABLE_RELATED_CALL_BILLING_CORRELATION_ID,        "Related_Call_Billing_Correlation_ID", NULL, NULL},
+  {14, PACKETCABLE_RJ_STRING,                  "First_Call_Calling_Party_Number", NULL, NULL},
+  {15, PACKETCABLE_RJ_STRING,                  "Second_Call_Calling_Party_Number", NULL, NULL},
+  {16, PACKETCABLE_RJ_STRING,                  "Charge_Number", NULL, NULL},
+  {17, PACKETCABLE_RJ_STRING,                  "Forwarded_Number", NULL, NULL},
+  {18, PACKETCABLE_RJ_STRING,                  "Service_Name", NULL, NULL},
+  /* 19 Undefined */
+  {20, PACKETCABLE_RJ_STRING,                  "Intl_Code", NULL, NULL},
+  {21, PACKETCABLE_RJ_STRING,                  "Dial_Around_Code", NULL, NULL},
+  {22, PACKETCABLE_RJ_STRING,                  "Location_Routing_Number", NULL, NULL},
+  {23, PACKETCABLE_RJ_STRING,                  "Carrier_Identification_Code", NULL, NULL},
+  {24, PACKETCABLE_TRUNK_GROUP_ID,             "Trunk_Group_ID", NULL, NULL},
+  {25, PACKETCABLE_RJ_STRING,                  "Routing_Number", NULL, NULL},
+  {26, RADIUS_INTEGER4,                        "MTA_UDP_Portnum", NULL, NULL},
+  /* 27 Undefined */
+  /* 28 Undefined */
+  {29, RADIUS_INTEGER2,                        "Channel_State", radius_vendor_packetcable_channel_state_vals, NULL},
+  {30, RADIUS_INTEGER4,                        "SF_ID", NULL, NULL},
+  {31, PACKETCABLE_RJ_STRING,                  "Error_Description", NULL, NULL},
+  {32, PACKETCABLE_QOS_DESCRIPTOR,             "QoS_Descriptor", NULL, NULL},
+  {37, RADIUS_INTEGER2,                        "Direction_indicator", radius_vendor_packetcable_direction_indicator_vals, NULL},
+  {38, PACKETCABLE_TIME_ADJUSTMENT,            "Time_Adjustment", NULL, NULL},
+  {39, RADIUS_STRING,                          "SDP_Upstream", NULL, NULL},
+  {40, RADIUS_STRING,                          "SDP_Downstream", NULL, NULL},
+  {41, RADIUS_STRING,                          "User_Input", NULL, NULL},
+  {42, PACKETCABLE_RJ_STRING,                  "Translation_Input", NULL, NULL},
+  {43, PACKETCABLE_REDIRECTED_FROM_INFO,       "Redirected_From_Info", NULL, NULL},
+  {44, PACKETCABLE_ELECTRONIC_SURVEILLANCE_INDICATION, "Electronic_Surveillance_Indication", NULL, NULL},
+  {45, PACKETCABLE_RJ_STRING,                  "Redirected_From_Party_Number", NULL, NULL},
+  {46, PACKETCABLE_RJ_STRING,                  "Redirected_To_Party_Number", NULL, NULL},
+  {47, PACKETCABLE_ELECTRONIC_SURVEILLANCE_DF_SECURITY,        "Electronic_Surveillance_DF_Security", NULL, NULL},
+  {48, RADIUS_INTEGER4,                        "CCC_ID", NULL, NULL},
+  {49, RADIUS_STRING,                          "Financial Entity ID", NULL, NULL},
+  {50, RADIUS_INTEGER2,                        "Flow Direction", radius_vendor_packetcable_flow_direction_vals, NULL},
+  {51, RADIUS_INTEGER2,                        "Signal_Type", radius_vendor_packetcable_signal_type_vals, NULL},
+  {52, RADIUS_INTEGER4,                        "Alerting_Signal", radius_vendor_packetcable_alerting_signal_vals, NULL},
+  {53, RADIUS_INTEGER4,                        "Subject_Audible_Signal", radius_vendor_packetcable_subject_audible_signal_vals, NULL},
+  {54, PACKETCABLE_TERMINAL_DISPLAY_INFO,      "Terminal_Display_Info", NULL, NULL},
+  {55, RADIUS_STRING,                          "Switch_Hook_Flash", NULL, NULL},
+  {56, RADIUS_STRING,                          "Dialed_Digits", NULL, NULL},
+  {57, RADIUS_STRING,                          "Misc_Signaling_Information", NULL, NULL},
+
+/* PacketCable MM */
+  {61, RADIUS_INTEGER8,                        "AM_Opaque_Data", NULL, NULL },
+  {62, RADIUS_IP_ADDRESS,                      "Subscriber_ID", NULL, NULL },
+  {63, RADIUS_INTEGER8,                        "Volume_Usage_Limit", NULL, NULL },
+  {64, RADIUS_INTEGER8,                        "Gate_Usage_Info", NULL, NULL },
+  {65, RADIUS_INTEGER2,                        "Element_Requesting_QoS", radius_vendor_packetcable_element_requesting_qos_vals, NULL },
+  {66, RADIUS_INTEGER2,                        "QoS_Release_Reason", radius_vendor_packetcable_qos_release_reason_vals, NULL },
+  {67, RADIUS_INTEGER2,                        "Policy_Denied_Reason", radius_vendor_packetcable_policy_denied_reason_vals, NULL },
+  {68, RADIUS_INTEGER2,                        "Policy_Deleted_Reason", radius_vendor_packetcable_policy_deleted_reason_vals, NULL },
+  {69, RADIUS_INTEGER2,                        "Policy_Update_Reason", radius_vendor_packetcable_policy_update_reason_vals, NULL },
+  {70, RADIUS_INTEGER2,                        "Policy_Decision_Status", radius_vendor_packetcable_policy_decision_status_vals, NULL },
+  {71, RADIUS_INTEGER4,                        "Application_Manager_ID", NULL, NULL },
+  {72, RADIUS_INTEGER4,                        "Time_Usage_Limit", NULL, NULL },
+  {73, RADIUS_INTEGER4,                        "Gate_Time_Info", NULL, NULL },
+
+  {80, PACKETCABLE_RJ_STRING,                  "Account_Code", NULL, NULL},
+  {81, PACKETCABLE_RJ_STRING,                  "Authorization_Code", NULL, NULL},
+  {0, 0, NULL, NULL, NULL},
+};
+
+
+
 /*
 reference:
-	'unisphere5-2.dct' file from Juniper Networks
-          http://www.juniper.net/techpubs/software/erx/junose52/unisphere5-2.dct
+	'unisphere5-3.dct' file from Juniper Networks
+          http://www.juniper.net/techpubs/software/erx/junose53/unisphere5-3.dct
 */
 
 static const value_string radius_vendor_unisphere_ingress_statistics_vals[] =
-{ 
+{
   {0,	"Disable"},
   {1,	"Enable"}
 };
 
 static const value_string radius_vendor_unisphere_egress_statistics_vals[] =
-{ 
+{
   {0,	"Disable"},
   {1,	"Enable"}
 };
@@ -2517,54 +2958,62 @@
 
 static const radius_attr_info radius_vendor_unisphere_attrib[] =
 {
-  {1,	RADIUS_STRING,		"ERX Virtual Router Name", NULL},
-  {2,	RADIUS_STRING,		"ERX Address Pool Name", NULL},
-  {3,	RADIUS_STRING,		"ERX Local Loopback Interface", NULL},
-  {4,	RADIUS_IP_ADDRESS,	"ERX Primary Dns", NULL},
-  {5,	RADIUS_IP_ADDRESS,	"ERX Primary Wins", NULL},
-  {6,	RADIUS_IP_ADDRESS,	"ERX Secondary Dns", NULL},
-  {7,	RADIUS_IP_ADDRESS,	"ERX Secondary Wins", NULL},
-  {8,	RADIUS_STRING,		"ERX Tunnel Virtual Router", NULL},
-  {9,	RADIUS_STRING,		"ERX Tunnel Password", NULL},
-  {10,	RADIUS_STRING,		"ERX Ingress Policy Name", NULL},
-  {11,	RADIUS_STRING,		"ERX Egress Policy Name", NULL},
-  {12,	RADIUS_STRING,		"ERX Ingress Statistics", radius_vendor_unisphere_ingress_statistics_vals},
-  {13,	RADIUS_STRING,		"ERX Egress Statistics", radius_vendor_unisphere_egress_statistics_vals},
-  {14,	RADIUS_STRING,		"ERX Atm Service Category", radius_vendor_unisphere_atm_service_category_vals},
-  {15,	RADIUS_STRING,		"ERX Atm PCR", NULL},
-  {16,	RADIUS_STRING,		"ERX Atm SCR", NULL},
-  {17,	RADIUS_STRING,		"ERX Atm MBS", NULL},
-  {18,	RADIUS_STRING,		"ERX Cli Initial Access Level", NULL},
-  {19,	RADIUS_INTEGER4,	"ERX Cli Allow All VR Access", radius_vendor_unisphere_cli_allow_all_vr_access_vals},
-  {20,	RADIUS_STRING,		"ERX Alternate Cli Access Level", NULL},
-  {21,	RADIUS_STRING,		"ERX Alternate Cli Vrouter Name", NULL},
-  {22,	RADIUS_INTEGER4,	"ERX Sa Validate", radius_vendor_unisphere_sa_validate_vals},
-  {23,	RADIUS_INTEGER4,	"ERX Igmp Enable", radius_vendor_unisphere_igmp_enable_vals},
-  {24,	RADIUS_STRING,		"ERX PPPoE Description", NULL},
-  {25,	RADIUS_STRING,		"ERX Redirect Virtual Router Name", NULL},
-  {26,	RADIUS_STRING,		"ERX Qos Profile Name", NULL},
+  {1,	RADIUS_STRING,		"ERX Virtual Router Name", NULL, NULL},
+  {2,	RADIUS_STRING,		"ERX Address Pool Name", NULL, NULL},
+  {3,	RADIUS_STRING,		"ERX Local Loopback Interface", NULL, NULL},
+  {4,	RADIUS_IP_ADDRESS,	"ERX Primary Dns", NULL, NULL},
+  {5,	RADIUS_IP_ADDRESS,	"ERX Primary Wins", NULL, NULL},
+  {6,	RADIUS_IP_ADDRESS,	"ERX Secondary Dns", NULL, NULL},
+  {7,	RADIUS_IP_ADDRESS,	"ERX Secondary Wins", NULL, NULL},
+  {8,	RADIUS_STRING,		"ERX Tunnel Virtual Router", NULL, NULL},
+  {9,	RADIUS_STRING,		"ERX Tunnel Password", NULL, NULL},
+  {10,	RADIUS_STRING,		"ERX Ingress Policy Name", NULL, NULL},
+  {11,	RADIUS_STRING,		"ERX Egress Policy Name", NULL, NULL},
+  {12,	RADIUS_STRING,		"ERX Ingress Statistics", radius_vendor_unisphere_ingress_statistics_vals, NULL},
+  {13,	RADIUS_STRING,		"ERX Egress Statistics", radius_vendor_unisphere_egress_statistics_vals, NULL},
+  {14,	RADIUS_STRING,		"ERX Atm Service Category", radius_vendor_unisphere_atm_service_category_vals, NULL},
+  {15,	RADIUS_STRING,		"ERX Atm PCR", NULL, NULL},
+  {16,	RADIUS_STRING,		"ERX Atm SCR", NULL, NULL},
+  {17,	RADIUS_STRING,		"ERX Atm MBS", NULL, NULL},
+  {18,	RADIUS_STRING,		"ERX Cli Initial Access Level", NULL, NULL},
+  {19,	RADIUS_INTEGER4,	"ERX Cli Allow All VR Access", radius_vendor_unisphere_cli_allow_all_vr_access_vals, NULL},
+  {20,	RADIUS_STRING,		"ERX Alternate Cli Access Level", NULL, NULL},
+  {21,	RADIUS_STRING,		"ERX Alternate Cli Vrouter Name", NULL, NULL},
+  {22,	RADIUS_INTEGER4,	"ERX Sa Validate", radius_vendor_unisphere_sa_validate_vals, NULL},
+  {23,	RADIUS_INTEGER4,	"ERX Igmp Enable", radius_vendor_unisphere_igmp_enable_vals, NULL},
+  {24,	RADIUS_STRING,		"ERX PPPoE Description", NULL, NULL},
+  {25,	RADIUS_STRING,		"ERX Redirect Virtual Router Name", NULL, NULL},
+  {26,	RADIUS_STRING,		"ERX Qos Profile Name", NULL, NULL},
   /* 27 Unused */
-  {28,	RADIUS_STRING,		"ERX PPPoE URL", NULL},
+  {28,	RADIUS_STRING,		"ERX PPPoE URL", NULL, NULL},
   /* 29,30 Unused */
-  {31,	RADIUS_STRING,		"ERX Service Bundle", NULL},
+  {31,	RADIUS_STRING,		"ERX Service Bundle", NULL, NULL},
   /* 32 Unused */
-  {33,	RADIUS_INTEGER4,	"ERX Tunnel Max Sessions", NULL},
-  {34,	RADIUS_INTEGER4,	"ERX Framed IP Route Tag", NULL},
-  {35,	RADIUS_STRING,		"ERX Tunnel Dialout Number", NULL},
-  {36,	RADIUS_STRING,		"ERX PPP Username", NULL},
-  {37,	RADIUS_STRING,		"ERX PPP Password", NULL},
-  {38,	RADIUS_INTEGER4,	"ERX PPP Protocol", radius_vendor_unisphere_ppp_protocol_vals},
-  {39,	RADIUS_INTEGER4,	"ERX Tunnel Min Bps", NULL},
-  {40,	RADIUS_INTEGER4,	"ERX Tunnel Max Bps", NULL},
-  {41,	RADIUS_INTEGER4,	"ERX Tunnel Bearer Type", radius_vendor_unisphere_tunnel_bearer_type_vals},
-  {42,	RADIUS_INTEGER4,	"ERX Input Gigapackets", NULL},
-  {43,	RADIUS_INTEGER4,	"ERX Output Gigapackets", NULL},
-  {44,	RADIUS_STRING,		"ERX Tunnel Interface Id", NULL},
-  {45,	RADIUS_STRING,		"ERX IPV6 Virtual Router", NULL},
-  {46,	RADIUS_STRING,		"ERX IPV6 Local Interface", NULL},
-  {47,	RADIUS_IP6_ADDRESS,	"ERX IPV6 Primary Dns", NULL},
-  {48,	RADIUS_IP6_ADDRESS,	"ERX IPV6 Secondary Dns", NULL},
-  {0, 0, NULL, NULL},
+  {33,	RADIUS_INTEGER4,	"ERX Tunnel Max Sessions", NULL, NULL},
+  {34,	RADIUS_INTEGER4,	"ERX Framed IP Route Tag", NULL, NULL},
+  {35,	RADIUS_STRING,		"ERX Tunnel Dialout Number", NULL, NULL},
+  {36,	RADIUS_STRING,		"ERX PPP Username", NULL, NULL},
+  {37,	RADIUS_STRING,		"ERX PPP Password", NULL, NULL},
+  {38,	RADIUS_INTEGER4,	"ERX PPP Protocol", radius_vendor_unisphere_ppp_protocol_vals, NULL},
+  {39,	RADIUS_INTEGER4,	"ERX Tunnel Min Bps", NULL, NULL},
+  {40,	RADIUS_INTEGER4,	"ERX Tunnel Max Bps", NULL, NULL},
+  {41,	RADIUS_INTEGER4,	"ERX Tunnel Bearer Type", radius_vendor_unisphere_tunnel_bearer_type_vals, NULL},
+  {42,	RADIUS_INTEGER4,	"ERX Input Gigapackets", NULL, NULL},
+  {43,	RADIUS_INTEGER4,	"ERX Output Gigapackets", NULL, NULL},
+  {44,	RADIUS_STRING,		"ERX Tunnel Interface Id", NULL, NULL},
+  {45,	RADIUS_STRING,		"ERX IPV6 Virtual Router", NULL, NULL},
+  {46,	RADIUS_STRING,		"ERX IPV6 Local Interface", NULL, NULL},
+  {47,	RADIUS_IP6_ADDRESS,	"ERX IPV6 Primary Dns", NULL, NULL},
+  {48,	RADIUS_IP6_ADDRESS,	"ERX IPV6 Secondary Dns", NULL, NULL},
+  /* 49, 50 Unused */
+  {51,	RADIUS_BINSTRING,	"ERX Disconnect Cause", NULL, NULL},
+  /* 52 Unused */
+  {53,	RADIUS_BINSTRING,	"ERX Service Description", NULL, NULL},
+  /* 54 Unused */
+  {55,	RADIUS_BINSTRING,	"ERX DHCP Options", NULL, NULL},
+  {56,	RADIUS_STRING,		"ERX DHCP Mac Address", NULL, NULL},
+  {57,	RADIUS_IP_ADDRESS,	"ERX DHCP Gi Address", NULL, NULL},
+  {0, 0, NULL, NULL, NULL},
 };
 
 /*
@@ -2575,30 +3024,30 @@
 
 static const radius_attr_info radius_vendor_cisco_bbsm_attrib[] =
 {
-  {1,	RADIUS_INTEGER4,	"CBBSM-Bandwidth", NULL},
-  {0, 0, NULL, NULL},
+  {1,	RADIUS_INTEGER4,	"CBBSM-Bandwidth", NULL, NULL},
+  {0, 0, NULL, NULL, NULL},
 };
 
 static const radius_attr_info radius_vendor_issanni_attrib[] =
 {
-  {1,	RADIUS_STRING,		"Softflow Template", NULL},
-  {2,	RADIUS_STRING,		"NAT Pool", NULL},
-  {3,	RADIUS_STRING,		"Virtual Routing Domain", NULL},
-  {4,	RADIUS_STRING,		"Tunnel Name", NULL},
-  {5,	RADIUS_STRING,		"IP Pool Name", NULL},
-  {6,	RADIUS_STRING,		"PPPoE URL", NULL},
-  {7,	RADIUS_STRING,		"PPPoE MOTM", NULL},
-  {8,	RADIUS_STRING,		"PPPoE Service", NULL},
-  {9,	RADIUS_IP_ADDRESS,	"Primary DNS", NULL},
-  {10,	RADIUS_IP_ADDRESS,	"Secondary DNS", NULL},
-  {11,	RADIUS_IP_ADDRESS,	"Primary NBNS", NULL},
-  {12,	RADIUS_IP_ADDRESS,	"Secondary NBNS", NULL},
-  {13,	RADIUS_STRING,		"Policing Traffic Class", NULL},
-  {14,	RADIUS_INTEGER4,	"Tunnel Type", NULL},
-  {15,	RADIUS_INTEGER4,	"NAT Type", NULL},
-  {16,	RADIUS_STRING,		"QoS Traffic Class", NULL},
-  {17,	RADIUS_STRING,		"Interface Name", NULL},
-  {0, 0, NULL, NULL}
+  {1,	RADIUS_STRING,		"Softflow Template", NULL, NULL},
+  {2,	RADIUS_STRING,		"NAT Pool", NULL, NULL},
+  {3,	RADIUS_STRING,		"Virtual Routing Domain", NULL, NULL},
+  {4,	RADIUS_STRING,		"Tunnel Name", NULL, NULL},
+  {5,	RADIUS_STRING,		"IP Pool Name", NULL, NULL},
+  {6,	RADIUS_STRING,		"PPPoE URL", NULL, NULL},
+  {7,	RADIUS_STRING,		"PPPoE MOTM", NULL, NULL},
+  {8,	RADIUS_STRING,		"PPPoE Service", NULL, NULL},
+  {9,	RADIUS_IP_ADDRESS,	"Primary DNS", NULL, NULL},
+  {10,	RADIUS_IP_ADDRESS,	"Secondary DNS", NULL, NULL},
+  {11,	RADIUS_IP_ADDRESS,	"Primary NBNS", NULL, NULL},
+  {12,	RADIUS_IP_ADDRESS,	"Secondary NBNS", NULL, NULL},
+  {13,	RADIUS_STRING,		"Policing Traffic Class", NULL, NULL},
+  {14,	RADIUS_INTEGER4,	"Tunnel Type", NULL, NULL},
+  {15,	RADIUS_INTEGER4,	"NAT Type", NULL, NULL},
+  {16,	RADIUS_STRING,		"QoS Traffic Class", NULL, NULL},
+  {17,	RADIUS_STRING,		"Interface Name", NULL, NULL},
+  {0, 0, NULL, NULL, NULL}
 };
 
 /*
@@ -2608,30 +3057,30 @@
 */
 static const radius_attr_info radius_vendor_quintum_attrib[] =
 {
-  {1,	RADIUS_STRING,		"Quintum AVPair", NULL},
-  {2,	RADIUS_STRING,		"Quintum NAS Port", NULL},
-  {23,	RADIUS_STRING,		"Quintum h323 remote address", NULL},
-  {24,	RADIUS_STRING,		"Quintum h323 conf id", NULL},
-  {25,	RADIUS_STRING,		"Quintum h323 setup time", NULL},
-  {26,	RADIUS_STRING,		"Quintum h323 call origin", NULL},
-  {27,	RADIUS_STRING,		"Quintum h323 call type", NULL},
-  {28,	RADIUS_STRING,		"Quintum h323 connect time", NULL},
-  {29,	RADIUS_STRING,		"Quintum h323 disconnect time", NULL},
-  {30,	RADIUS_STRING,		"Quintum h323 disconnect cause", NULL},
-  {31,	RADIUS_STRING,		"Quintum h323 voice quality", NULL},
-  {33,	RADIUS_STRING,		"Quintum h323 gw id", NULL},
-  {35,	RADIUS_STRING,		"Quintum h323 incoming conf id", NULL},
-  {101,	RADIUS_STRING,		"Quintum h323 credit amount", NULL},
-  {102,	RADIUS_STRING,		"Quintum h323 credit time", NULL},
-  {103,	RADIUS_STRING,		"Quintum h323 return code", NULL},
-  {104,	RADIUS_STRING,		"Quintum h323 prompt id", NULL},
-  {105,	RADIUS_STRING,		"Quintum h323 time and day", NULL},
-  {106,	RADIUS_STRING,		"Quintum h323 redirect number", NULL},
-  {107,	RADIUS_STRING,		"Quintum h323 preferred lang", NULL},
-  {108,	RADIUS_STRING,		"Quintum h323 redirect ip address", NULL},
-  {109,	RADIUS_STRING,		"Quintum h323 billing model", NULL},
-  {110,	RADIUS_STRING,		"Quintum h323 currency type", NULL},
-  {0, 0, NULL, NULL},
+  {1,	RADIUS_STRING,		"Quintum AVPair", NULL, NULL},
+  {2,	RADIUS_STRING,		"Quintum NAS Port", NULL, NULL},
+  {23,	RADIUS_STRING,		"Quintum h323 remote address", NULL, NULL},
+  {24,	RADIUS_STRING,		"Quintum h323 conf id", NULL, NULL},
+  {25,	RADIUS_STRING,		"Quintum h323 setup time", NULL, NULL},
+  {26,	RADIUS_STRING,		"Quintum h323 call origin", NULL, NULL},
+  {27,	RADIUS_STRING,		"Quintum h323 call type", NULL, NULL},
+  {28,	RADIUS_STRING,		"Quintum h323 connect time", NULL, NULL},
+  {29,	RADIUS_STRING,		"Quintum h323 disconnect time", NULL, NULL},
+  {30,	RADIUS_STRING,		"Quintum h323 disconnect cause", NULL, NULL},
+  {31,	RADIUS_STRING,		"Quintum h323 voice quality", NULL, NULL},
+  {33,	RADIUS_STRING,		"Quintum h323 gw id", NULL, NULL},
+  {35,	RADIUS_STRING,		"Quintum h323 incoming conf id", NULL, NULL},
+  {101,	RADIUS_STRING,		"Quintum h323 credit amount", NULL, NULL},
+  {102,	RADIUS_STRING,		"Quintum h323 credit time", NULL, NULL},
+  {103,	RADIUS_STRING,		"Quintum h323 return code", NULL, NULL},
+  {104,	RADIUS_STRING,		"Quintum h323 prompt id", NULL, NULL},
+  {105,	RADIUS_STRING,		"Quintum h323 time and day", NULL, NULL},
+  {106,	RADIUS_STRING,		"Quintum h323 redirect number", NULL, NULL},
+  {107,	RADIUS_STRING,		"Quintum h323 preferred lang", NULL, NULL},
+  {108,	RADIUS_STRING,		"Quintum h323 redirect ip address", NULL, NULL},
+  {109,	RADIUS_STRING,		"Quintum h323 billing model", NULL, NULL},
+  {110,	RADIUS_STRING,		"Quintum h323 currency type", NULL, NULL},
+  {0, 0, NULL, NULL, NULL},
 };
 
 /*
@@ -2640,8 +3089,8 @@
 */
 static const radius_attr_info radius_vendor_colubris_attrib[] =
 {
-  {0,	RADIUS_STRING,		"Colubris AV Pair", NULL},
-  {0, 0, NULL, NULL},
+  {0,	RADIUS_STRING,		"Colubris AV Pair", NULL, NULL},
+  {0, 0, NULL, NULL, NULL},
 };
 
 /*
@@ -2660,11 +3109,11 @@
 
 static const radius_attr_info radius_vendor_columbia_university_attrib[] =
 {
-  {0,	RADIUS_INTEGER4,	"SIP Method", radius_vendor_columbia_university_sip_method_vals},
-  {1,	RADIUS_STRING,		"SIP From", NULL},
-  {2,	RADIUS_STRING,		"SIP To", NULL},
-  {4,	RADIUS_STRING,		"SIP Translated Request URI", NULL},
-  {0, 0, NULL, NULL},
+  {0,	RADIUS_INTEGER4,	"SIP Method", radius_vendor_columbia_university_sip_method_vals, NULL},
+  {1,	RADIUS_STRING,		"SIP From", NULL, NULL},
+  {2,	RADIUS_STRING,		"SIP To", NULL, NULL},
+  {4,	RADIUS_STRING,		"SIP Translated Request URI", NULL, NULL},
+  {0, 0, NULL, NULL, NULL},
 };
 
 static const value_string the3gpp_pdp_type_vals[] = {
@@ -2677,25 +3126,52 @@
 static const radius_attr_info radius_vendor_3gpp_attrib[] =
 {
    /* According to 3GPP TS 29.061 V4.8.0 (2003-06) */
-   {1,  THE3GPP_IMSI,		"IMSI", NULL},
-   {2,  RADIUS_INTEGER4,	"Charging ID", NULL},
-   {3,  RADIUS_INTEGER4,	"PDP Type", the3gpp_pdp_type_vals},
-   {4,  RADIUS_IP_ADDRESS,	"Charging Gateway Address", NULL},
-   {5,  THE3GPP_QOS,		"QoS Profile", NULL},
-   {6,  RADIUS_IP_ADDRESS,	"SGSN Address", NULL},
-   {7,  RADIUS_IP_ADDRESS,	"GGSN Address", NULL},
-   {8,  THE3GPP_IMSI_MCC_MNC,	"IMSI MCC-MNC", NULL},
-   {9,  THE3GPP_GGSN_MCC_MNC,	"GGSN MCC-MNC", NULL},
-   {10, THE3GPP_NSAPI,		"NSAPI", NULL},
-   {11, THE3GPP_SESSION_STOP_INDICATOR, "Session Stop Indicator", NULL},
-   {12, THE3GPP_SELECTION_MODE,	"Selection Mode", NULL},
-   {13, THE3GPP_CHARGING_CHARACTERISTICS, "Charging Characteristics", NULL},
-   {14, RADIUS_IP6_ADDRESS,	"Charging Gateway IPv6 Address", NULL},
-   {15, RADIUS_IP6_ADDRESS,	"SGSN IPv6 Address", NULL},
-   {16, RADIUS_IP6_ADDRESS,	"GGSN IPv6 Address", NULL},
-   {17, THE3GPP_IPV6_DNS_SERVERS, "IPv6 DNS Servers", NULL},
-   {18, THE3GPP_SGSN_MCC_MNC,	"SGSN MCC-MNC", NULL},
-   {0, 0, NULL, NULL},
+   {1,  THE3GPP_IMSI,		"IMSI", NULL, NULL},
+   {2,  RADIUS_INTEGER4,	"Charging ID", NULL, NULL},
+   {3,  RADIUS_INTEGER4,	"PDP Type", the3gpp_pdp_type_vals, NULL},
+   {4,  RADIUS_IP_ADDRESS,	"Charging Gateway Address", NULL, NULL},
+   {5,  THE3GPP_QOS,		"QoS Profile", NULL, NULL},
+   {6,  RADIUS_IP_ADDRESS,	"SGSN Address", NULL, &hf_radius_3gpp_SgsnIpAddr},
+   {7,  RADIUS_IP_ADDRESS,	"GGSN Address", NULL, &hf_radius_3gpp_GgsnIpAddr},
+   {8,  THE3GPP_IMSI_MCC_MNC,	"IMSI MCC-MNC", NULL, NULL},
+   {9,  THE3GPP_GGSN_MCC_MNC,	"GGSN MCC-MNC", NULL, NULL},
+   {10, THE3GPP_NSAPI,		"NSAPI", NULL, NULL},
+   {11, THE3GPP_SESSION_STOP_INDICATOR, "Session Stop Indicator", NULL, NULL},
+   {12, THE3GPP_SELECTION_MODE,	"Selection Mode", NULL, NULL},
+   {13, THE3GPP_CHARGING_CHARACTERISTICS, "Charging Characteristics", NULL, NULL},
+   {14, RADIUS_IP6_ADDRESS,	"Charging Gateway IPv6 Address", NULL, NULL},
+   {15, RADIUS_IP6_ADDRESS,	"SGSN IPv6 Address", NULL, NULL},
+   {16, RADIUS_IP6_ADDRESS,	"GGSN IPv6 Address", NULL, NULL},
+   {17, THE3GPP_IPV6_DNS_SERVERS, "IPv6 DNS Servers", NULL, NULL},
+   {18, THE3GPP_SGSN_MCC_MNC,	"SGSN MCC-MNC", NULL, NULL},
+   {0, 0, NULL, NULL, NULL},
+};
+
+static const radius_attr_info radius_vendor_gemtek_systems_attrib[] =
+{
+   {21, RADIUS_INTEGER4,	"Acct-Session-Input-Octets", NULL, NULL},
+   {22, RADIUS_INTEGER4,	"Acct-Session-Input-Gigawords", NULL, NULL},
+   {23, RADIUS_INTEGER4,	"Acct-Session-Output-Octets", NULL, NULL},
+   {24, RADIUS_INTEGER4,	"Acct-Session-Output-Gigawords", NULL, NULL},
+   {25, RADIUS_INTEGER4,	"Acct-Session-Octets", NULL, NULL},
+   {26, RADIUS_INTEGER4,	"Acct-Session-Gigawords", NULL, NULL},
+   {0, 0, NULL, NULL, NULL},
+};
+
+static const radius_attr_info radius_vendor_wifi_alliance_attrib[] =
+{
+   {1,  RADIUS_STRING,		"Location-ID", NULL, NULL},
+   {2,  RADIUS_STRING,		"Location-Name", NULL, NULL},
+   {3,  RADIUS_STRING,		"Logoff-URL", NULL, NULL},
+   {4,  RADIUS_STRING,		"Redirection-URL", NULL, NULL},
+   {5,  RADIUS_INTEGER4,	"Bandwidth-Min-Up", NULL, NULL},
+   {6,  RADIUS_INTEGER4,	"Bandwidth-Min-Down", NULL, NULL},
+   {7,  RADIUS_INTEGER4,	"Bandwidth-Max-Up", NULL, NULL},
+   {8,  RADIUS_INTEGER4,	"Bandwidth-Max-Down", NULL, NULL},
+   {9,  RADIUS_STRING,		"Session-Terminate-Time", NULL, NULL},
+   {10, RADIUS_INTEGER4,	"Session-Terminate-End-Of-Day", NULL, NULL},
+   {11, RADIUS_STRING,		"Billing-Class-Of-Service", NULL, NULL},
+   {0, 0, NULL, NULL, NULL},
 };
 
 static rd_vsa_table radius_vsa_table[] =
@@ -2717,6 +3193,7 @@
   {VENDOR_COSINE,		radius_vendor_cosine_attrib},
   {VENDOR_SHASTA,		radius_vendor_shasta_attrib},
   {VENDOR_NOMADIX,		radius_vendor_nomadix_attrib},
+  {VENDOR_CABLELABS,		radius_vendor_cablelabs_attrib},
   {VENDOR_UNISPHERE,		radius_vendor_unisphere_attrib},
   {VENDOR_CISCO_BBSM,		radius_vendor_cisco_bbsm_attrib},
   {VENDOR_ISSANNI,		radius_vendor_issanni_attrib},
@@ -2724,6 +3201,8 @@
   {VENDOR_COLUBRIS,		radius_vendor_colubris_attrib},
   {VENDOR_COLUMBIA_UNIVERSITY,	radius_vendor_columbia_university_attrib},
   {VENDOR_THE3GPP,		radius_vendor_3gpp_attrib},
+  {VENDOR_GEMTEK_SYSTEMS,	radius_vendor_gemtek_systems_attrib},
+  {VENDOR_WIFI_ALLIANCE,	radius_vendor_wifi_alliance_attrib},
   {0, NULL},
 };
 
@@ -2850,6 +3329,54 @@
 	return val_to_str(val, vs, "Undefined");
 }
 
+static void rd_add_field_to_tree(proto_tree *tree, tvbuff_t *tvb, int offset,
+                                 guint length,
+                                 const radius_attr_info *attr_info)
+{
+  if (attr_info->hf) {
+    switch(attr_info->value_type)
+    {
+        case( RADIUS_STRING ):
+        case( RADIUS_BINSTRING ):
+                proto_tree_add_item(tree, *attr_info->hf, tvb, offset, length, FALSE);
+                break;
+
+        case( RADIUS_INTEGER4 ):
+                if (length != 4) {
+                        proto_tree_add_text(tree, tvb, offset, length,
+                            "%s: Length is %u, should be 4",
+                            proto_registrar_get_name(*attr_info->hf),
+                            length);
+                        break;
+                }
+                proto_tree_add_item(tree, *attr_info->hf, tvb, offset, 4, FALSE);
+                break;
+
+        case( RADIUS_INTEGER8 ):
+                if (length != 8) {
+                        proto_tree_add_text(tree, tvb, offset, length,
+                            "%s: Length is %u, should be 8",
+                            proto_registrar_get_name(*attr_info->hf),
+                            length);
+                        break;
+                }
+                proto_tree_add_item(tree, *attr_info->hf, tvb, offset, 8, FALSE);
+                break;
+
+        case( RADIUS_IP_ADDRESS ):
+                if (length != 4) {
+                        proto_tree_add_text(tree, tvb, offset, length,
+                            "%s: Length is %u, should be 4",
+                            proto_registrar_get_name(*attr_info->hf),
+                            length);
+                        break;
+                }
+                proto_tree_add_item(tree, *attr_info->hf, tvb, offset, 4, FALSE);
+                break;
+    }
+  }
+}
+
 /* NOTE: This function's signature has been changed with the addition of the
  * tree parameter at the end.
  *
@@ -2879,10 +3406,10 @@
   gchar *tmp_punt;
 
   gchar *cont;
-  guint32 intval;
+  guint32 intval, packetcable_qos_flags;
   gint32 timeval;
   const guint8 *pd;
-  guint8 tag;
+  guint8 tag, packetcable_buf[64], bitmask;
   guint8 ipv6_prefix_length;
   guint8 ipv6_addr_temp[16];
 
@@ -2891,6 +3418,9 @@
   int vsa_index;
   const radius_attr_info *vsa_attr_info_table;
   const e_avphdr *vsa_avph;
+  proto_item *ti;
+  proto_tree *obj_tree;
+  guint packetcable_qos_off = offset + 22;
 
   /* Default begin */
   strcpy(dest, "Value:");
@@ -2903,27 +3433,47 @@
   {
         case( RADIUS_STRING ):
 		rdconvertbufftostr(cont,tvb,offset+2,avph->avp_length-2);
+		rd_add_field_to_tree(tree, tvb, offset+2, avph->avp_length-2,
+		    attr_info);
                 break;
 
         case( RADIUS_BINSTRING ):
 		rdconvertbufftobinstr(cont,tvb,offset+2,avph->avp_length-2);
+		rd_add_field_to_tree(tree, tvb, offset+2, avph->avp_length-2,
+		    attr_info);
                 break;
 
         case( RADIUS_USERPASSWORD ):
 		rddecryptpass(cont,tvb,offset+2,avph->avp_length-2);
                 break;
 
+        case( RADIUS_INTEGER2 ):
+        	intval = tvb_get_ntohs(tvb,offset+2);
+        	if (attr_info->vs != NULL)
+			sprintf(cont, "%s(%u)", rd_match_strval(intval, attr_info->vs), intval);
+		else
+	                sprintf(cont,"%u", intval);
+		rd_add_field_to_tree(tree, tvb, offset+2, 2, attr_info);
+                break;
+
         case( RADIUS_INTEGER4 ):
         	intval = tvb_get_ntohl(tvb,offset+2);
         	if (attr_info->vs != NULL)
 			sprintf(cont, "%s(%u)", rd_match_strval(intval, attr_info->vs), intval);
 		else
 	                sprintf(cont,"%u", intval);
+		rd_add_field_to_tree(tree, tvb, offset+2, 4, attr_info);
                 break;
 
+	case( RADIUS_INTEGER8 ):
+		sprintf(cont, "%" PRIx64, tvb_get_ntoh64(tvb, offset+2));
+		rd_add_field_to_tree(tree, tvb, offset+2, 8, attr_info);
+		break;
+
         case( RADIUS_IP_ADDRESS ):
                 ip_to_str_buf(tvb_get_ptr(tvb,offset+2,4),cont);
-                break;
+		rd_add_field_to_tree(tree, tvb, offset+2, 4, attr_info);
+		break;
 
         case( RADIUS_IP6_ADDRESS ):
                 ip6_to_str_buf((const struct e_in6_addr *)tvb_get_ptr(tvb,offset+2,16),cont);
@@ -2965,7 +3515,7 @@
 
 	case ( RADIUS_VENDOR_SPECIFIC ):
 		intval = tvb_get_ntohl(tvb,offset+2);
-		sprintf(dest, "Vendor:%s(%u)", rd_match_strval(intval,radius_vendor_specific_vendors), intval);
+		sprintf(dest, "Vendor:%s(%u)", rd_match_strval(intval,sminmpec_values), intval);
 		cont = &dest[strlen(dest)];
 		vsa_length = avph->avp_length;
 		vsa_len = 6;
@@ -2996,12 +3546,18 @@
 					tree);
 			vsa_index++;
 			vsa_len += vsa_avph->avp_length;
-			if (next_attr_info != NULL &&
-			    next_attr_info->value_type == THE3GPP_QOS )
+
+			if ( next_attr_info )
 			{
-				cont = tmp_punt;
-				vsa_index--;
-				(*vsabuffer)[vsa_index].str = 0;
+				rd_add_field_to_tree(tree, tvb, offset+8,
+				                     avph->avp_length-8,
+				                     next_attr_info);
+				if ( next_attr_info->value_type == THE3GPP_QOS )
+				{
+			    		cont = tmp_punt;
+					vsa_index--;
+					(*vsabuffer)[vsa_index].str = 0;
+				}
 			}
 		} while (vsa_length > vsa_len && vsa_index < VSABUFFER);
 		break;
@@ -3046,6 +3602,179 @@
 		decode_qos_umts(tvb, offset + 1, tree, tmp_punt, 3);
 		break;
 
+
+	case ( PACKETCABLE_EM_HEADER ):
+		proto_tree_add_text(tree, tvb, offset, avph->avp_length, "%s", vsabuffer[0]->str);
+		vsabuffer[0]->str = NULL;
+		proto_tree_add_item(tree, hf_packetcable_em_header_version_id,
+				tvb, offset + 2, 2, FALSE);
+		ti = proto_tree_add_text(tree, tvb, offset + 4, 24, "BCID");
+		obj_tree = proto_item_add_subtree(ti, ett_radius_vendor_packetcable_bcid);
+		decode_packetcable_bcid(tvb, obj_tree, offset + 4);
+
+		proto_tree_add_item(tree, hf_packetcable_em_header_event_message_type,
+				tvb, offset + 28, 2, FALSE);
+		proto_tree_add_item(tree, hf_packetcable_em_header_element_type,
+				tvb, offset + 30, 2, FALSE);
+		tvb_memcpy(tvb, packetcable_buf, offset + 32, 8); packetcable_buf[8] = '\0';
+		proto_tree_add_text(tree, tvb, offset + 32, 8,
+				"Element ID: %s", packetcable_buf );
+		tvb_memcpy(tvb, packetcable_buf, offset + 41, 7); packetcable_buf[7] = '\0';
+		proto_tree_add_text(tree, tvb, offset + 40, 8,
+				"Time Zone: DST: %c, Offset: %s", tvb_get_guint8(tvb, offset + 40),
+				packetcable_buf);
+		proto_tree_add_item(tree, hf_packetcable_em_header_sequence_number,
+				tvb, offset + 48, 4, FALSE);
+		tvb_memcpy(tvb, packetcable_buf, offset + 52, 18); packetcable_buf[18] = '\0';
+		proto_tree_add_text(tree, tvb, offset + 52, 18,
+				"Event Time: %s", packetcable_buf);
+
+		ti = proto_tree_add_item(tree, hf_packetcable_em_header_status,
+				tvb, offset + 70, 4, FALSE);
+		obj_tree = proto_item_add_subtree(ti, ett_radius_vendor_packetcable_status);
+		proto_tree_add_item(obj_tree, hf_packetcable_em_header_status_error_indicator,
+				tvb, offset + 70, 4, FALSE);
+		proto_tree_add_item(obj_tree, hf_packetcable_em_header_status_event_origin,
+				tvb, offset + 70, 4, FALSE);
+		proto_tree_add_item(obj_tree, hf_packetcable_em_header_status_event_message_proxied,
+				tvb, offset + 70, 4, FALSE);
+
+		proto_tree_add_item(tree, hf_packetcable_em_header_priority,
+				tvb, offset + 74, 1, FALSE);
+		proto_tree_add_item(tree, hf_packetcable_em_header_attribute_count,
+				tvb, offset + 75, 2, FALSE);
+		proto_tree_add_item(tree, hf_packetcable_em_header_event_object,
+				tvb, offset + 77, 1, FALSE);
+		break;
+	case ( PACKETCABLE_CALL_TERMINATION_CAUSE ):
+		proto_tree_add_text(tree, tvb, offset, avph->avp_length, "%s", vsabuffer[0]->str);
+		vsabuffer[0]->str = NULL;
+		proto_tree_add_item(tree, hf_packetcable_call_termination_cause_source_document,
+				tvb, offset + 2, 2, FALSE);
+		proto_tree_add_item(tree, hf_packetcable_call_termination_cause_code,
+				tvb, offset + 4, 4, FALSE);
+		break;
+	case ( PACKETCABLE_RELATED_CALL_BILLING_CORRELATION_ID ):
+		proto_tree_add_text(tree, tvb, offset, avph->avp_length, "%s", vsabuffer[0]->str);
+		vsabuffer[0]->str = NULL;
+		decode_packetcable_bcid(tvb, tree, offset + 2);
+		break;
+	case ( PACKETCABLE_TRUNK_GROUP_ID ):
+		proto_tree_add_text(tree, tvb, offset, avph->avp_length, "%s", vsabuffer[0]->str);
+		vsabuffer[0]->str = NULL;
+		proto_tree_add_item(tree, hf_packetcable_trunk_group_id_trunk_type,
+				tvb, offset + 2, 2, FALSE);
+		proto_tree_add_item(tree, hf_packetcable_trunk_group_id_trunk_number,
+				tvb, offset + 4, 4, FALSE);
+		break;
+	case ( PACKETCABLE_QOS_DESCRIPTOR ):
+		proto_tree_add_text(tree, tvb, offset, avph->avp_length, "%s", vsabuffer[0]->str);
+		vsabuffer[0]->str = NULL;
+		packetcable_qos_flags = tvb_get_letohl(tvb, offset + 2);
+		ti = proto_tree_add_item(tree, hf_packetcable_qos_status,
+				tvb, offset + 2, 4, FALSE);
+		obj_tree = proto_item_add_subtree(ti, ett_radius_vendor_packetcable_qos_status);
+		proto_tree_add_item(obj_tree, hf_packetcable_qos_status_indication,
+				tvb, offset + 2, 4, FALSE);
+		for (intval = 0; intval < PACKETCABLE_QOS_DESC_BITFIELDS; intval++) {
+			proto_tree_add_item(obj_tree, hf_packetcable_qos_desc_flags[intval],
+					tvb, offset + 2, 4, FALSE);
+		}
+		tvb_memcpy(tvb, packetcable_buf, offset + 6, 16); packetcable_buf[16] = '\0';
+		proto_tree_add_text(tree, tvb, offset + 6, 16,
+				"Service Class Name: %s", packetcable_buf);
+		packetcable_qos_flags = ntohl(packetcable_qos_flags);
+		for (intval = 0; intval < PACKETCABLE_QOS_DESC_BITFIELDS; intval++) {
+			if (packetcable_qos_flags & packetcable_qos_desc_mask[intval]) {
+				proto_tree_add_item(tree, hf_packetcable_qos_desc_fields[intval],
+						tvb, packetcable_qos_off, 4, FALSE);
+				packetcable_qos_off += 4;
+			}
+		}
+		break;
+	case ( PACKETCABLE_TIME_ADJUSTMENT ):
+		proto_tree_add_text(tree, tvb, offset, avph->avp_length, "%s", vsabuffer[0]->str);
+		vsabuffer[0]->str = NULL;
+		proto_tree_add_item(tree, hf_packetcable_time_adjustment,
+				tvb, offset + 2, 8, FALSE);
+		break;
+	case ( PACKETCABLE_REDIRECTED_FROM_INFO ):
+		proto_tree_add_text(tree, tvb, offset, avph->avp_length, "%s", vsabuffer[0]->str);
+		vsabuffer[0]->str = NULL;
+		tvb_memcpy(tvb, packetcable_buf, offset + 2, 20); packetcable_buf[20] = '\0';
+		proto_tree_add_text(tree, tvb, offset + 2, 20,
+				"Last-Redirecting-Party: %s", packetcable_buf);
+		tvb_memcpy(tvb, packetcable_buf, offset + 22, 20); packetcable_buf[20] = '\0';
+		proto_tree_add_text(tree, tvb, offset + 22, 20,
+				"Original-Called-Party: %s", packetcable_buf);
+		proto_tree_add_item(tree, hf_packetcable_redirected_from_info_number_of_redirections,
+				tvb, offset + 42, 2, FALSE);
+		break;
+	case ( PACKETCABLE_ELECTRONIC_SURVEILLANCE_INDICATION ):
+		if (avph->avp_length == 2) {
+		    proto_tree_add_text(tree, tvb, offset, avph->avp_length, "%s [None]", vsabuffer[0]->str);
+		    vsabuffer[0]->str = NULL;
+		    break;
+		}
+		proto_tree_add_text(tree, tvb, offset, avph->avp_length, "%s", vsabuffer[0]->str);
+		vsabuffer[0]->str = NULL;
+		proto_tree_add_item(tree, hf_packetcable_electronic_surveillance_indication_df_cdc_address,
+				tvb, offset + 2, 4, FALSE);
+		proto_tree_add_item(tree, hf_packetcable_electronic_surveillance_indication_df_ccc_address,
+				tvb, offset + 6, 4, FALSE);
+		proto_tree_add_item(tree, hf_packetcable_electronic_surveillance_indication_cdc_port,
+				tvb, offset + 10, 2, FALSE);
+		proto_tree_add_item(tree, hf_packetcable_electronic_surveillance_indication_ccc_port,
+				tvb, offset + 12, 2, FALSE);
+		proto_tree_add_text(tree, tvb, offset + 14, avph->avp_length,
+				"DF-DF-Key");
+		break;
+	case ( PACKETCABLE_ELECTRONIC_SURVEILLANCE_DF_SECURITY ):
+		break;
+#define PACKETCABLE_GENERAL_DISPLAY (1 << 0)
+#define PACKETCABLE_CALLING_NUMBER  (1 << 1)
+#define PACKETCABLE_CALLING_NAME    (1 << 2)
+#define PACKETCABLE_MESSAGE_WAITING (1 << 3)
+	case ( PACKETCABLE_TERMINAL_DISPLAY_INFO ):
+		proto_tree_add_text(tree, tvb, offset, avph->avp_length, "%s", vsabuffer[0]->str);
+		vsabuffer[0]->str = NULL;
+		bitmask = tvb_get_guint8(tvb, 2);
+		intval = offset + 3;
+		ti = proto_tree_add_item(tree, hf_packetcable_terminal_display_info_terminal_display_status_bitmask,
+				tvb, offset + 2, 1, FALSE);
+		obj_tree = proto_item_add_subtree(ti, ett_radius_vsa);
+		proto_tree_add_item(obj_tree, hf_packetcable_terminal_display_info_sbm_general_display,
+				tvb, offset + 2, 1, bitmask);
+		proto_tree_add_item(obj_tree, hf_packetcable_terminal_display_info_sbm_calling_number,
+				tvb, offset + 2, 1, bitmask);
+		proto_tree_add_item(obj_tree, hf_packetcable_terminal_display_info_sbm_calling_name,
+				tvb, offset + 2, 1, bitmask);
+		proto_tree_add_item(obj_tree, hf_packetcable_terminal_display_info_sbm_message_waiting,
+				tvb, offset + 2, 1, bitmask);
+		if (bitmask & PACKETCABLE_GENERAL_DISPLAY) {
+			proto_tree_add_item(obj_tree, hf_packetcable_terminal_display_info_general_display,
+				tvb, intval, 80, FALSE);
+			intval += 80;
+		}
+		if (bitmask & PACKETCABLE_CALLING_NUMBER) {
+			proto_tree_add_item(obj_tree, hf_packetcable_terminal_display_info_calling_number,
+				tvb, intval, 40, FALSE);
+			intval += 40;
+		}
+		if (bitmask & PACKETCABLE_CALLING_NAME) {
+			proto_tree_add_item(obj_tree, hf_packetcable_terminal_display_info_calling_name,
+				tvb, intval, 40, FALSE);
+			intval += 40;
+		}
+		if (bitmask & PACKETCABLE_MESSAGE_WAITING) {
+			proto_tree_add_item(obj_tree, hf_packetcable_terminal_display_info_message_waiting,
+				tvb, intval, 40, FALSE);
+			intval += 40;
+		}
+
+		break;
+
+
         case( RADIUS_TIMESTAMP ):
 		timeval=tvb_get_ntohl(tvb,offset+2);
 		sprintf(cont,"%d (%s)", timeval, abs_time_secs_to_str(timeval));
@@ -3262,9 +3991,10 @@
         rd_value_to_str(textbuffer, &vsabuffer, &avph, tvb, offset,
 			attr_info, vsa_tree);
         proto_item_append_text(ti, ", %s", textbuffer);
-	for (i = 0; vsabuffer[i].str && i < VSABUFFER; i++)
+	for (i = 0; vsabuffer[i].str && i < VSABUFFER; i++) {
 	    proto_tree_add_text(vsa_tree, tvb, vsabuffer[i].offset,
 				vsabuffer[i].length, "%s", vsabuffer[i].str);
+	}
       }
     }
 
@@ -3279,6 +4009,26 @@
   CLEANUP_CALL_AND_POP;
 }
 
+/* Decode a PacketCable BCID. */
+/* XXX - This should probably be combinde with the equivalent COPS code */
+static void decode_packetcable_bcid (tvbuff_t *tvb, proto_tree *tree, int offset)
+{
+	guint8 packetcable_buf[16];
+
+	proto_tree_add_item(tree, hf_packetcable_bcid_timestamp,
+			tvb, offset, 4, FALSE);
+	tvb_memcpy(tvb, packetcable_buf, offset + 4, 8); packetcable_buf[8] = '\0';
+	proto_tree_add_text(tree, tvb, offset + 4, 8,
+			"Element ID: %s", packetcable_buf);
+	tvb_memcpy(tvb, packetcable_buf, offset + 13, 7); packetcable_buf[7] = '\0';
+	proto_tree_add_text(tree, tvb, offset + 12, 8,
+			"Time Zone: DST: %c, Offset: %s", tvb_get_guint8(tvb, offset + 12),
+			packetcable_buf);
+	proto_tree_add_item(tree, hf_packetcable_bcid_event_counter,
+			tvb, offset + 20, 4, FALSE);
+}
+
+
 static void dissect_radius(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
   proto_tree *radius_tree = NULL, *avptree = NULL;
@@ -3387,13 +4137,404 @@
 
 		{ &hf_radius_length,
 		{ "Length","radius.length", FT_UINT16, BASE_DEC, NULL, 0x0,
-			"", HFILL }}
+			"", HFILL }},
+
+		{ &hf_radius_userName,
+		{ "User-Name",	"radius.username", FT_STRING, BASE_NONE, NULL, 0x0,
+			"", HFILL }},
+
+		{ &hf_radius_serviceType,
+		{ "Service-Type",	"radius.service_type", FT_UINT32, BASE_DEC, VALS(radius_service_type_vals), 0x0,
+			"", HFILL }},
+
+		{ &hf_radius_framedProtocol,
+		{ "Framed-Protocol",	"radius.framed_protocol", FT_UINT32, BASE_DEC, VALS(radius_framed_protocol_vals), 0x0,
+			"", HFILL }},
+
+		{ &hf_radius_callingStationId,
+		{ "Calling-Station-Id",	"radius.calling", FT_STRING, BASE_NONE, NULL, 0x0,
+			"", HFILL }},
+
+		{ &hf_radius_calledStationId,
+		{ "Called-Station-Id",	"radius.called", FT_STRING, BASE_NONE, NULL, 0x0,
+			"", HFILL }},
+
+		{ &hf_radius_class,
+		{ "Class",	"radius.class", FT_BYTES, BASE_NONE, NULL, 0x0,
+			"", HFILL }},
+
+		{ &hf_radius_acctSessionId,
+		{ "Accounting Session Id",	"radius.acct.sessionid", FT_STRING, BASE_NONE, NULL, 0x0,
+			"", HFILL }},
+
+		{ &hf_radius_framedAddress,
+		{ "Framed Address",	"radius.framed_addr", FT_IPv4, BASE_NONE, NULL, 0x0,
+			"", HFILL }},
+
+		{ &hf_radius_acctStatusType,
+		{ "Accounting Status Type",	"radius.acct.status_type", FT_UINT32, BASE_DEC, VALS(radius_accounting_status_type_vals), 0x0,
+			"", HFILL }},
+
+		{ &hf_radius_nasIp,
+		{ "Nas IP Address",	"radius.nas_ip", FT_IPv4, BASE_NONE, NULL, 0x0,
+			"", HFILL }},
+
+		{ &hf_radius_3gpp_SgsnIpAddr,
+		{ "SGSN IP Address",	"radius.3gpp.sgsn_ip", FT_IPv4, BASE_NONE, NULL, 0x0,
+			"", HFILL }},
+
+		{ &hf_radius_3gpp_GgsnIpAddr,
+		{ "GGSN IP Address",	"radius.3gpp.ggsn_ip", FT_IPv4, BASE_NONE, NULL, 0x0,
+			"", HFILL }},
+
+		{ &hf_radius_cisco_cai,
+		{ "Cisco-Account-Info",	"radius.cisco.cai", FT_STRING, BASE_NONE, NULL, 0x0,
+			"", HFILL }},
+
+		{ &hf_packetcable_em_header_version_id,
+			{ "Event Message Version ID","radius.vendor.pkt.emh.vid",
+			  FT_UINT16, BASE_DEC, NULL, 0x0,
+			  "PacketCable Event Message header version ID", HFILL }
+		},
+		{ &hf_packetcable_bcid_timestamp,
+			{ "Timestamp","radius.vendor.pkt.bcid.ts",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable Event Message BCID Timestamp", HFILL }
+		},
+		{ &hf_packetcable_bcid_event_counter,
+			{ "Event Counter","radius.vendor.pkt.bcid.ec",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable Event Message BCID Event Counter", HFILL }
+		},
+		{ &hf_packetcable_em_header_event_message_type,
+			{ "Event Message Type","radius.vendor.pkt.emh.emt",
+			  FT_UINT16, BASE_DEC, radius_vendor_packetcable_event_message_vals, 0x0,
+			  "PacketCable Event Message Type", HFILL }
+		},
+		{ &hf_packetcable_em_header_element_type,
+			{ "Element Type","radius.vendor.pkt.emh.et",
+			  FT_UINT16, BASE_DEC, packetcable_em_header_element_type_vals, 0x0,
+			  "PacketCable Event Message Element Type", HFILL }
+		},
+		{ &hf_packetcable_em_header_sequence_number,
+			{ "Sequence Number","radius.vendor.pkt.emh.sn",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable Event Message Sequence Number", HFILL }
+		},
+		{ &hf_packetcable_em_header_status,
+			{ "Status","radius.vendor.pkt.emh.st",
+			  FT_UINT32, BASE_HEX, NULL, 0x0,
+			  "PacketCable Event Message Status", HFILL }
+		},
+		{ &hf_packetcable_em_header_status_error_indicator,
+			{ "Status","radius.vendor.pkt.emh.st.ei",
+			  FT_UINT32, BASE_HEX, packetcable_em_header_status_error_indicator_vals,
+			  PACKETCABLE_EMHS_EI_MASK,
+			  "PacketCable Event Message Status Error Indicator", HFILL }
+		},
+		{ &hf_packetcable_em_header_status_event_origin,
+			{ "Event Origin","radius.vendor.pkt.emh.st.eo",
+			  FT_UINT32, BASE_HEX, packetcable_em_header_status_event_origin_vals,
+			  PACKETCABLE_EMHS_EO_MASK,
+			  "PacketCable Event Message Status Event Origin", HFILL }
+		},
+		{ &hf_packetcable_em_header_status_event_message_proxied,
+			{ "Event Message Proxied","radius.vendor.pkt.emh.st.emp",
+			  FT_UINT32, BASE_HEX, packetcable_em_header_status_event_message_proxied_vals,
+			  PACKETCABLE_EMHS_EMP_MASK,
+			  "PacketCable Event Message Status Event Message Proxied", HFILL }
+		},
+		{ &hf_packetcable_em_header_priority,
+			{ "Priority","radius.vendor.pkt.emh.priority",
+			  FT_UINT8, BASE_DEC, NULL, 0x0,
+			  "PacketCable Event Message Priority", HFILL }
+		},
+		{ &hf_packetcable_em_header_attribute_count,
+			{ "Attribute Count","radius.vendor.pkt.emh.ac",
+			  FT_UINT16, BASE_DEC, NULL, 0x0,
+			  "PacketCable Event Message Attribute Count", HFILL }
+		},
+		{ &hf_packetcable_em_header_event_object,
+			{ "Event Object","radius.vendor.pkt.emh.eo",
+			  FT_UINT8, BASE_DEC, NULL, 0x0,
+			  "PacketCable Event Message Event Object", HFILL }
+		},
+		{ &hf_packetcable_call_termination_cause_source_document,
+			{ "Source Document","radius.vendor.pkt.ctc.sd",
+			  FT_UINT16, BASE_HEX, packetcable_call_termination_cause_vals, 0x0,
+			  "PacketCable Call Termination Cause Source Document", HFILL }
+		},
+		{ &hf_packetcable_call_termination_cause_code,
+			{ "Event Object","radius.vendor.pkt.ctc.cc",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable Call Termination Cause Code", HFILL }
+		},
+		{ &hf_packetcable_trunk_group_id_trunk_type,
+			{ "Trunk Type","radius.vendor.pkt.tgid.tt",
+			  FT_UINT16, BASE_HEX, packetcable_trunk_type_vals, 0x0,
+			  "PacketCable Trunk Group ID Trunk Type", HFILL }
+		},
+		{ &hf_packetcable_trunk_group_id_trunk_number,
+			{ "Event Object","radius.vendor.pkt.tgid.tn",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable Trunk Group ID Trunk Number", HFILL }
+		},
+		{ &hf_packetcable_qos_status,
+			{ "QoS Status","radius.vendor.pkt.qs",
+			  FT_UINT32, BASE_HEX, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute QoS Status", HFILL }
+		},
+		{ &hf_packetcable_qos_status_indication,
+			{ "Status Indication","radius.vendor.pkt.qs.si",
+			  FT_UINT32, BASE_DEC, packetcable_state_indication_vals, PACKETCABLE_QOS_STATE_INDICATION_MASK,
+			  "PacketCable QoS Descriptor Attribute QoS State Indication", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_flags[0],
+			{ "Service Flow Scheduling Type","radius.vendor.pkt.qs.flags.sfst",
+			  FT_UINT32, BASE_DEC, NULL, PACKETCABLE_SERVICE_FLOW_SCHEDULING_TYPE_MASK,
+			  "PacketCable QoS Descriptor Attribute Bitmask: Service Flow Scheduling Type", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_flags[1],
+			{ "Grant Interval","radius.vendor.pkt.qs.flags.gi",
+			  FT_UINT32, BASE_DEC, NULL, PACKETCABLE_NOMINAL_GRANT_INTERVAL_MASK,
+			  "PacketCable QoS Descriptor Attribute Bitmask: Grant Interval", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_flags[2],
+			{ "Tolerated Grant Jitter","radius.vendor.pkt.qs.flags.tgj",
+			  FT_UINT32, BASE_DEC, NULL, PACKETCABLE_TOLERATED_GRANT_JITTER_MASK,
+			  "PacketCable QoS Descriptor Attribute Bitmask: Tolerated Grant Jitter", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_flags[3],
+			{ "Grants Per Interval","radius.vendor.pkt.qs.flags.gpi",
+			  FT_UINT32, BASE_DEC, NULL, PACKETCABLE_GRANTS_PER_INTERVAL_MASK,
+			  "PacketCable QoS Descriptor Attribute Bitmask: Grants Per Interval", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_flags[4],
+			{ "Unsolicited Grant Size","radius.vendor.pkt.qs.flags.ugs",
+			  FT_UINT32, BASE_DEC, NULL, PACKETCABLE_UNSOLICITED_GRANT_SIZE_MASK,
+			  "PacketCable QoS Descriptor Attribute Bitmask: Unsolicited Grant Size", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_flags[5],
+			{ "Traffic Priority","radius.vendor.pkt.qs.flags.tp",
+			  FT_UINT32, BASE_DEC, NULL, PACKETCABLE_TRAFFIC_PRIORITY_MASK,
+			  "PacketCable QoS Descriptor Attribute Bitmask: Traffic Priority", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_flags[6],
+			{ "Maximum Sustained Rate","radius.vendor.pkt.qs.flags.msr",
+			  FT_UINT32, BASE_DEC, NULL, PACKETCABLE_MAXIMUM_SUSTAINED_RATE_MASK,
+			  "PacketCable QoS Descriptor Attribute Bitmask: Maximum Sustained Rate", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_flags[7],
+			{ "Maximum Traffic Burst","radius.vendor.pkt.qs.flags.mtb",
+			  FT_UINT32, BASE_DEC, NULL, PACKETCABLE_MAXIMUM_TRAFFIC_BURST_MASK,
+			  "PacketCable QoS Descriptor Attribute Bitmask: Maximum Traffic Burst", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_flags[8],
+			{ "Minimum Reserved Traffic Rate","radius.vendor.pkt.qs.flags.mrtr",
+			  FT_UINT32, BASE_DEC, NULL, PACKETCABLE_MINIMUM_RESERVED_TRAFFIC_RATE_MASK,
+			  "PacketCable QoS Descriptor Attribute Bitmask: Minimum Reserved Traffic Rate", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_flags[9],
+			{ "Minium Packet Size","radius.vendor.pkt.qs.flags.mps",
+			  FT_UINT32, BASE_DEC, NULL, PACKETCABLE_MINIMUM_PACKET_SIZE_MASK,
+			  "PacketCable QoS Descriptor Attribute Bitmask: Minimum Packet Size", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_flags[10],
+			{ "Maximum Concatenated Burst","radius.vendor.pkt.qs.flags.mcb",
+			  FT_UINT32, BASE_DEC, NULL, PACKETCABLE_MAXIMUM_CONCATENATED_BURST_MASK,
+			  "PacketCable QoS Descriptor Attribute Bitmask: Maximum Concatenated Burst", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_flags[11],
+			{ "Status Request/Transmission Policy","radius.vendor.pkt.qs.flags.srtp",
+			  FT_UINT32, BASE_DEC, NULL, PACKETCABLE_REQUEST_TRANSMISSION_POLICY_MASK,
+			  "PacketCable QoS Descriptor Attribute Bitmask: Status Request/Transmission Policy", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_flags[12],
+			{ "Nominal Polling Interval","radius.vendor.pkt.qs.flags.npi",
+			  FT_UINT32, BASE_DEC, NULL, PACKETCABLE_NOMINAL_POLLING_INTERVAL_MASK,
+			  "PacketCable QoS Descriptor Attribute Bitmask: Nominal Polling Interval", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_flags[13],
+			{ "Tolerated Poll Jitter","radius.vendor.pkt.qs.flags.tpj",
+			  FT_UINT32, BASE_DEC, NULL, PACKETCABLE_TOLERATED_POLL_JITTER_MASK,
+			  "PacketCable QoS Descriptor Attribute Bitmask: Tolerated Poll Jitter", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_flags[14],
+			{ "Type of Service Override","radius.vendor.pkt.qs.flags.toso",
+			  FT_UINT32, BASE_DEC, NULL, PACKETCABLE_IP_TYPE_OF_SERVICE_OVERRIDE_MASK,
+			  "PacketCable QoS Descriptor Attribute Bitmask: Type of Service Override", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_flags[15],
+			{ "Maximum Downstream Latency","radius.vendor.pkt.qs.flags.mdl",
+			  FT_UINT32, BASE_DEC, NULL, PACKETCABLE_MAXIMUM_DOWNSTREAM_LATENCY_MASK,
+			  "PacketCable QoS Descriptor Attribute Bitmask: Maximum Downstream Latency", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_fields[0],
+			{ "Service Flow Scheduling Type","radius.vendor.pkt.qs.sfst",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute Service Flow Scheduling Type", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_fields[1],
+			{ "Grant Interval","radius.vendor.pkt.qs.gi",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute Grant Interval", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_fields[2],
+			{ "Tolerated Grant Jitter","radius.vendor.pkt.qs.tgj",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute Tolerated Grant Jitter", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_fields[3],
+			{ "Grants Per Interval","radius.vendor.pkt.qs.gpi",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute Grants Per Interval", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_fields[4],
+			{ "Unsolicited Grant Size","radius.vendor.pkt.qs.ugs",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute Unsolicited Grant Size", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_fields[5],
+			{ "Traffic Priority","radius.vendor.pkt.qs.tp",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute Traffic Priority", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_fields[6],
+			{ "Maximum Sustained Rate","radius.vendor.pkt.qs.msr",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute Maximum Sustained Rate", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_fields[7],
+			{ "Maximum Traffic Burst","radius.vendor.pkt.qs.mtb",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute Maximum Traffic Burst", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_fields[8],
+			{ "Minimum Reserved Traffic Rate","radius.vendor.pkt.qs.mrtr",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute Minimum Reserved Traffic Rate", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_fields[9],
+			{ "Minium Packet Size","radius.vendor.pkt.qs.mps",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute Minimum Packet Size", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_fields[10],
+			{ "Maximum Concatenated Burst","radius.vendor.pkt.qs.mcb",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute Maximum Concatenated Burst", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_fields[11],
+			{ "Status Request/Transmission Policy","radius.vendor.pkt.qs.srtp",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute Status Request/Transmission Policy", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_fields[12],
+			{ "Nominal Polling Interval","radius.vendor.pkt.qs.npi",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute Nominal Polling Interval", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_fields[13],
+			{ "Tolerated Poll Jitter","radius.vendor.pkt.qs.tpj",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute Tolerated Poll Jitter", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_fields[14],
+			{ "Type of Service Override","radius.vendor.pkt.qs.toso",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute Type of Service Override", HFILL }
+		},
+		{ &hf_packetcable_qos_desc_fields[15],
+			{ "Maximum Downstream Latency","radius.vendor.pkt.qs.mdl",
+			  FT_UINT32, BASE_DEC, NULL, 0x0,
+			  "PacketCable QoS Descriptor Attribute Maximum Downstream Latency", HFILL }
+		},
+		{ &hf_packetcable_time_adjustment,
+			{ "Time Adjustment","radius.vendor.pkt.ti",
+			  FT_UINT64, BASE_DEC, NULL, 0x0,
+			  "PacketCable Time Adjustment", HFILL }
+		},
+		{ &hf_packetcable_redirected_from_info_number_of_redirections,
+			{ "Number-of-Redirections","radius.vendor.pkt.rfi.nr",
+			  FT_UINT16, BASE_DEC, NULL, 0x0,
+			  "PacketCable Redirected-From-Info Number-of-Redirections", HFILL }
+		},
+		{ &hf_packetcable_electronic_surveillance_indication_df_cdc_address,
+			{ "DF_CDC_Address","radius.vendor.pkt.esi.dfcdca",
+			  FT_IPv4, BASE_DEC, NULL, 0x0,
+			  "PacketCable Electronic-Surveillance-Indication DF_CDC_Address", HFILL }
+		},
+		{ &hf_packetcable_electronic_surveillance_indication_df_ccc_address,
+			{ "DF_CDC_Address","radius.vendor.pkt.esi.dfccca",
+			  FT_IPv4, BASE_DEC, NULL, 0x0,
+			  "PacketCable Electronic-Surveillance-Indication DF_CCC_Address", HFILL }
+		},
+		{ &hf_packetcable_electronic_surveillance_indication_cdc_port,
+			{ "CDC-Port","radius.vendor.pkt.esi.cdcp",
+			  FT_UINT16, BASE_DEC, NULL, 0x0,
+			  "PacketCable Electronic-Surveillance-Indication CDC-Port", HFILL }
+		},
+		{ &hf_packetcable_electronic_surveillance_indication_ccc_port,
+			{ "CCC-Port","radius.vendor.pkt.esi.cccp",
+			  FT_UINT16, BASE_DEC, NULL, 0x0,
+			  "PacketCable Electronic-Surveillance-Indication CCC-Port", HFILL }
+		},
+
+		{ &hf_packetcable_terminal_display_info_terminal_display_status_bitmask,
+			{ "Terminal_Display_Status_Bitmask","radius.vendor.pkt.tdi.sbm",
+			  FT_UINT8, BASE_HEX, NULL, 0xff,
+			  "PacketCable Terminal_Display_Info Terminal_Display_Status_Bitmask", HFILL }
+		},
+		{ &hf_packetcable_terminal_display_info_sbm_general_display,
+			{ "General_Display","radius.vendor.pkt.tdi.sbm.gd",
+			  FT_BOOLEAN, 8, NULL, 0x01,
+			  "PacketCable Terminal_Display_Info Terminal_Display_Status_Bitmask General_Display", HFILL }
+		},
+		{ &hf_packetcable_terminal_display_info_sbm_calling_number,
+			{ "Calling_Number","radius.vendor.pkt.tdi.sbm.cnum",
+			  FT_BOOLEAN, 8, NULL, 0x02,
+			  "PacketCable Terminal_Display_Info Terminal_Display_Status_Bitmask Calling_Number", HFILL }
+		},
+		{ &hf_packetcable_terminal_display_info_sbm_calling_name,
+			{ "Calling_Name","radius.vendor.pkt.tdi.sbm.cname",
+			  FT_BOOLEAN, 8, NULL, 0x04,
+			  "PacketCable Terminal_Display_Info Terminal_Display_Status_Bitmask Calling_Name", HFILL }
+		},
+		{ &hf_packetcable_terminal_display_info_sbm_message_waiting,
+			{ "Message_Waiting","radius.vendor.pkt.tdi.sbm.mw",
+			  FT_BOOLEAN, 8, NULL, 0x08,
+			  "PacketCable Terminal_Display_Info Terminal_Display_Status_Bitmask Message_Waiting", HFILL }
+		},
+		{ &hf_packetcable_terminal_display_info_general_display,
+			{ "General_Display","radius.vendor.pkt.tdi.gd",
+			  FT_STRING, BASE_NONE, NULL, 0,
+			  "PacketCable Terminal_Display_Info General_Display", HFILL }
+		},
+		{ &hf_packetcable_terminal_display_info_calling_number,
+			{ "Calling_Number","radius.vendor.pkt.tdi.cnum",
+			  FT_STRING, BASE_NONE, NULL, 0,
+			  "PacketCable Terminal_Display_Info Calling_Number", HFILL }
+		},
+		{ &hf_packetcable_terminal_display_info_calling_name,
+			{ "Calling_Name","radius.vendor.pkt.tdi.cname",
+			  FT_STRING, BASE_NONE, NULL, 0,
+			  "PacketCable Terminal_Display_Info Calling_Name", HFILL }
+		},
+		{ &hf_packetcable_terminal_display_info_message_waiting,
+			{ "Message_Waiting","radius.vendor.pkt.tdi.mw",
+			  FT_STRING, BASE_NONE, NULL, 0,
+			  "PacketCable Terminal_Display_Info Message_Waiting", HFILL }
+		},
+
 	};
 	static gint *ett[] = {
 		&ett_radius,
 		&ett_radius_avp,
 		&ett_radius_eap,
 		&ett_radius_vsa,
+		&ett_radius_vendor_packetcable_bcid,
+		&ett_radius_vendor_packetcable_status,
+		&ett_radius_vendor_packetcable_qos_status,
 	};
 
 	module_t *radius_module;
@@ -3402,7 +4543,7 @@
 	    "radius");
 	proto_register_field_array(proto_radius, hf, array_length(hf));
 	proto_register_subtree_array(ett, array_length(ett));
-	
+
 	radius_module = prefs_register_protocol(proto_radius,NULL);
 	prefs_register_string_preference(radius_module,"shared_secret","Shared Secret",
 					"Shared secret used to decode User Passwords",
diff -urN ethereal-0.10.6/epan/dissectors/packet-raw.c ethereal-0.10.7/epan/dissectors/packet-raw.c
--- ethereal-0.10.6/epan/dissectors/packet-raw.c	2004-08-12 17:42:21.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-raw.c	2004-10-20 17:34:51.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-raw.c
  * Routines for raw packet disassembly
  *
- * $Id: packet-raw.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-raw.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -31,7 +31,7 @@
 #include <string.h>
 #include <glib.h>
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-raw.h"
 #include "packet-ip.h"
 #include "packet-ppp.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-ripng.h ethereal-0.10.7/epan/dissectors/packet-ripng.h
--- ethereal-0.10.6/epan/dissectors/packet-ripng.h	2004-08-12 17:42:30.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ripng.h	2004-10-20 17:35:00.000000000 -0500
@@ -2,13 +2,12 @@
  * RIPng definition
  * (c) Copyright Jun-ichiro itojun Hagino <itojun@itojun.org>
  *
- * $Id: packet-ripng.h 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-ripng.h 11891 2004-09-04 01:29:22Z guy $
  *
  * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@zing.org>
+ * By Gerald Combs <gerald@eethereal.com>
  * Copyright 1998 Gerald Combs
  *
- *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
@@ -27,7 +26,6 @@
 #ifndef __PACKET_RIPNG_H_DEFINED__
 #define __PACKET_RIPNG_H_DEFINED__
 
-#include "globals.h"
 #include "packet-ipv6.h"
 
 /*
diff -urN ethereal-0.10.6/epan/dissectors/packet-rpc.c ethereal-0.10.7/epan/dissectors/packet-rpc.c
--- ethereal-0.10.6/epan/dissectors/packet-rpc.c	2004-08-12 17:42:27.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-rpc.c	2004-10-20 17:34:56.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for rpc dissection
  * Copyright 1999, Uwe Girlich <Uwe.Girlich@philosys.de>
  *
- * $Id: packet-rpc.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-rpc.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -38,11 +38,11 @@
 #include "packet-rpc.h"
 #include "packet-frame.h"
 #include "packet-tcp.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "reassemble.h"
 #include "rpc_defrag.h"
 #include "packet-nfs.h"
-#include "tap.h"
+#include <epan/tap.h>
 
 /*
  * See:
@@ -3494,18 +3494,19 @@
 
 	rpc_module = prefs_register_protocol(proto_rpc, NULL);
 	prefs_register_bool_preference(rpc_module, "desegment_rpc_over_tcp",
-		"Desegment all RPC-over-TCP messages",
-		"Whether the RPC dissector should desegment all RPC-over-TCP messages",
+	    "Reassemble RPC over TCP messages\nspanning multiple TCP segments",
+	    "Whether the RPC dissector should reassemble messages spanning multiple TCP segments."
+	    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 		&rpc_desegment);
 	prefs_register_bool_preference(rpc_module, "defragment_rpc_over_tcp",
-		"Defragment all RPC-over-TCP messages",
-		"Whether the RPC dissector should defragment multi-fragment RPC-over-TCP messages",
+		"Reassemble fragmented RPC-over-TCP messages",
+		"Whether the RPC dissector should defragment RPC-over-TCP messages.",
 		&rpc_defragment);
 
 	prefs_register_uint_preference(rpc_module, "max_tcp_pdu_size", "Maximum size of a RPC-over-TCP PDU",
 		"Set the maximum size of RPCoverTCP PDUs. "
 		" If the size field of the record marker is larger "
-		"than this value it will not be considered a valid RPC PDU",
+		"than this value it will not be considered a valid RPC PDU.",
 		 10, &max_rpc_tcp_pdu_size);
 
 	prefs_register_bool_preference(rpc_module, "dissect_unknown_programs",
diff -urN ethereal-0.10.6/epan/dissectors/packet-rsvp.c ethereal-0.10.7/epan/dissectors/packet-rsvp.c
--- ethereal-0.10.6/epan/dissectors/packet-rsvp.c	2004-08-12 17:42:04.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-rsvp.c	2004-10-20 17:34:43.000000000 -0500
@@ -3,7 +3,7 @@
  *
  * (c) Copyright Ashok Narayanan <ashokn@cisco.com>
  *
- * $Id: packet-rsvp.c 11492 2004-07-23 23:28:08Z jmayer $
+ * $Id: packet-rsvp.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -69,9 +69,9 @@
 #include <epan/tvbuff.h>
 #include <epan/packet.h>
 #include <prefs.h>
-#include "in_cksum.h"
+#include <epan/in_cksum.h>
 #include "etypes.h"
-#include "ipproto.h"
+#include <epan/ipproto.h>
 
 #include "packet-rsvp.h"
 #include "packet-ip.h"
@@ -2614,7 +2614,6 @@
     proto_tree *rsvp_object_tree;
     proto_tree *ti2, *rsvp_integ_flags_tree;
     int flags;
-    guint64 sequence_number;
 
     rsvp_object_tree = proto_item_add_subtree(ti, TREE(TT_INTEGRITY));
     proto_tree_add_text(rsvp_object_tree, tvb, offset, 2,
@@ -2632,11 +2631,8 @@
 	decode_boolean_bitfield(flags, 0x01, 8, "Handshake capable", "Handshake not capable"));
     proto_tree_add_text(rsvp_object_tree, tvb, offset2+2, 6,
 			"Key Identifier: %s", tvb_bytes_to_str(tvb, offset2+2, 6));
-    sequence_number = tvb_get_ntohl(tvb, offset2+8);
-    sequence_number <<= 32;
-    sequence_number = tvb_get_ntohl(tvb, offset2+12);
     proto_tree_add_text(rsvp_object_tree, tvb, offset2+8, 8,
-			"Sequence Number: %" PRIu64, sequence_number);
+			"Sequence Number: %" PRIu64, tvb_get_ntoh64(tvb, offset2+8));
     proto_tree_add_text(rsvp_object_tree, tvb, offset2+16, obj_length - 20,
 			"Hash: %s", tvb_bytes_to_str(tvb, offset2+16, obj_length - 20));
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-rsync.c ethereal-0.10.7/epan/dissectors/packet-rsync.c
--- ethereal-0.10.6/epan/dissectors/packet-rsync.c	2004-08-12 17:42:04.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-rsync.c	2004-10-20 17:34:43.000000000 -0500
@@ -3,7 +3,7 @@
  * [ very rough, but mininally functional ]
  * Copyright 2003, Brad Hards <bradh@frogmouth.net>
  *
- * $Id: packet-rsync.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-rsync.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -39,7 +39,7 @@
 #include <epan/strutil.h>
 #include <epan/conversation.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 
 
 /* what states make sense here ? */
@@ -326,9 +326,10 @@
 				   10,
 				   &glb_rsync_tcp_port);
     prefs_register_bool_preference(rsync_module, "desegment",
-        "Desegment all RSYNC messages\nspanning multiple TCP segments",
-	"Whether the RSYNC dissector should desegment all messages spanning multiple TCP segments",
-				   &rsync_desegment);
+	    "Reassemble RSYNC messages spanning multiple TCP segments",
+	    "Whether the RSYNC dissector should reassemble messages spanning multiple TCP segments."
+	    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
+	    &rsync_desegment);
 }
 void
 proto_reg_handoff_rsync(void)
diff -urN ethereal-0.10.6/epan/dissectors/packet-rtcp.c ethereal-0.10.7/epan/dissectors/packet-rtcp.c
--- ethereal-0.10.6/epan/dissectors/packet-rtcp.c	2004-08-12 17:42:25.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-rtcp.c	2004-10-20 17:34:54.000000000 -0500
@@ -1,6 +1,6 @@
 /* packet-rtcp.c
  *
- * $Id: packet-rtcp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-rtcp.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Routines for RTCP dissection
  * RTCP = Real-time Transport Control Protocol
@@ -58,7 +58,7 @@
 #endif
 #include <epan/conversation.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 
 
 /* Version is the first 2 bits of the first octet*/
@@ -149,6 +149,7 @@
 {
 	{  1,   "Floor already in use"},
 	{  2,   "Internal PoC server error"},
+	{  3,	"Only one participant in the group "},
 	{  0,   NULL },
 };
 
@@ -156,6 +157,7 @@
 {
 	{  1,   "Only one user"},
 	{  2,   "Talk burst too long"},
+	{  3,	"No access to floor"},
 	{  0,   NULL },
 };
 /* RTCP header fields                   */
@@ -211,6 +213,12 @@
 static int hf_rtcp_setup_frame  = -1;
 static int hf_rtcp_setup_method = -1;
 
+/* RTCP roundtrip delay fields */
+static int hf_rtcp_roundtrip_delay        = -1;
+static int hf_rtcp_roundtrip_delay_frame  = -1;
+static int hf_rtcp_roundtrip_delay_delay  = -1;
+
+
 
 /* RTCP fields defining a sub tree */
 static gint ett_rtcp			= -1;
@@ -221,29 +229,42 @@
 static gint ett_sdes_item		= -1;
 static gint ett_PoC1			= -1;
 static gint ett_rtcp_setup		= -1;
+static gint ett_rtcp_roundtrip_delay	= -1;
 
-static address fake_addr;
-static int heur_init = FALSE;
+/* Main dissection function */
+static void dissect_rtcp( tvbuff_t *tvb, packet_info *pinfo,
+     proto_tree *tree );
 
+/* Heuristic dissection */
+static gboolean global_rtcp_heur = FALSE;
 static gboolean dissect_rtcp_heur( tvbuff_t *tvb, packet_info *pinfo,
     proto_tree *tree );
-static void dissect_rtcp( tvbuff_t *tvb, packet_info *pinfo,
-     proto_tree *tree );
-static void show_setup_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
 
-/* Preferences bool to control whether or not setup info should be shown */
+/* Displaying set info */
 static gboolean global_rtcp_show_setup_info = TRUE;
+static void show_setup_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+
+/* Related to roundtrip calculation (using LSR and DLSR) */
+static gboolean global_rtcp_show_roundtrip_calculation = FALSE;
+#define MIN_ROUNDTRIP_TO_REPORT_DEFAULT 10
+static guint global_rtcp_show_roundtrip_calculation_minimum = MIN_ROUNDTRIP_TO_REPORT_DEFAULT;
+static void remember_outgoing_sr(packet_info *pinfo, long lsr);
+static void calculate_roundtrip_delay(tvbuff_t *tvb, packet_info *pinfo,
+                                      proto_tree *tree, guint32 lsr, guint32 dlsr);
+static void add_roundtrip_delay_info(tvbuff_t *tvb, packet_info *pinfo,
+                                     proto_tree *tree, guint frame, guint delay);
+
 
 /* Memory chunk for storing conversation and per-packet info */
 static GMemChunk *rtcp_conversations = NULL;
 
-
+/* Set up an RTCP conversation using the info given */
 void rtcp_add_address( packet_info *pinfo,
-                       const unsigned char* ip_addr, int port,
+                       address *addr, int port,
                        int other_port,
                        gchar *setup_method, guint32 setup_frame_number)
 {
-	address src_addr;
+	address null_addr;
 	conversation_t* p_conv;
 	struct _rtcp_conversation_info *p_conv_data = NULL;
 
@@ -257,66 +278,57 @@
 		return;
 	}
 
-	src_addr.type = pinfo->net_src.type;
-	src_addr.len = pinfo->net_src.len;
-	src_addr.data = ip_addr;
-
-	/*
-	 * The first time the function is called let the udp dissector
-	 * know that we're interested in traffic
-	 * TODO???
-	 *
-	if ( ! heur_init ) {
-		heur_dissector_add( "udp", dissect_rtcp_heur, proto_rtcp );
-		heur_init = TRUE;
-	}
-	*/
+	SET_ADDRESS(&null_addr, AT_NONE, 0, NULL);
 
 	/*
 	 * Check if the ip address and port combination is not
-	 * already registered
+	 * already registered as a conversation.
 	 */
-	p_conv = find_conversation( &src_addr, &src_addr, PT_UDP, port, other_port,
+	p_conv = find_conversation( addr, &null_addr, PT_UDP, port, other_port,
 	                            NO_ADDR_B | (!other_port ? NO_PORT_B : 0));
 
 	/*
-	 * If not, add
+	 * If not, create a new conversation.
 	 */
 	if ( ! p_conv ) {
-		/* Create conversation data */
-		p_conv_data = g_mem_chunk_alloc(rtcp_conversations);
-
-		/* Check length first time we look at method string */
-		strncpy(p_conv_data->method, setup_method,
-		        (strlen(setup_method)+1 <= MAX_RTCP_SETUP_METHOD_SIZE) ?
-		            strlen(setup_method)+1 :
-		            MAX_RTCP_SETUP_METHOD_SIZE);
-		p_conv_data->method[MAX_RTCP_SETUP_METHOD_SIZE] = '\0';
-		p_conv_data->frame_number = setup_frame_number;
-
-		/* Create conversation with this data */
-		p_conv = conversation_new( &src_addr, &src_addr, PT_UDP,
+		p_conv = conversation_new( addr, &null_addr, PT_UDP,
 		                           (guint32)port, (guint32)other_port,
 		                           NO_ADDR2 | (!other_port ? NO_PORT2 : 0));
-		conversation_add_proto_data(p_conv, proto_rtcp, p_conv_data);
-
-		/* Set dissector */
-		conversation_set_dissector(p_conv, rtcp_handle);
 	}
-	else
-	{
-		/* Update existing conversation data */
-		p_conv_data = conversation_get_proto_data(p_conv, proto_rtcp);
-		strcpy(p_conv_data->method, setup_method);
-		p_conv_data->frame_number = setup_frame_number;
+
+	/* Set dissector */
+	conversation_set_dissector(p_conv, rtcp_handle);
+
+	/*
+	 * Check if the conversation has data associated with it.
+	 */
+	p_conv_data = conversation_get_proto_data(p_conv, proto_rtcp);
+
+	/*
+	 * If not, add a new data item.
+	 */
+	if ( ! p_conv_data ) {
+		/* Create conversation data */
+		p_conv_data = g_mem_chunk_alloc(rtcp_conversations);
+		if (!p_conv_data)
+		{
+			return;
+		}
+		memset(p_conv_data, 0, sizeof(struct _rtcp_conversation_info));
+		conversation_add_proto_data(p_conv, proto_rtcp, p_conv_data);
 	}
+
+	/*
+	 * Update the conversation data.
+	 */
+	p_conv_data->setup_method_set = TRUE;
+	strncpy(p_conv_data->setup_method, setup_method, MAX_RTCP_SETUP_METHOD_SIZE);
+	p_conv_data->setup_method[MAX_RTCP_SETUP_METHOD_SIZE] = '\0';
+	p_conv_data->setup_frame_number = setup_frame_number;
 }
 
 static void rtcp_init( void )
 {
-	unsigned char* tmp_data;
-	int i;
-
 	/* (Re)allocate mem chunk for conversations */
 	if (rtcp_conversations)
 	{
@@ -326,55 +338,59 @@
 	                                     sizeof(struct _rtcp_conversation_info),
 	                                     20 * sizeof(struct _rtcp_conversation_info),
 	                                     G_ALLOC_ONLY);
-
-
-	/* Create a fake adddress... */
-	fake_addr.type = AT_IPv4;
-	fake_addr.len = 4;
-
-	tmp_data = g_malloc( fake_addr.len );
-	for ( i = 0; i < fake_addr.len; i++) {
-		tmp_data[i] = 0;
-	}
-	fake_addr.data = tmp_data;
 }
 
 static gboolean
 dissect_rtcp_heur( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree )
 {
-	conversation_t* pconv;
+ 	unsigned int offset = 0;
+	unsigned int first_byte;
+	unsigned int packet_type;
 
 	/* This is a heuristic dissector, which means we get all the UDP
 	 * traffic not sent to a known dissector and not claimed by
 	 * a heuristic dissector called before us!
-	 * So we first check if the frame is really meant for us.
 	 */
-	if ( ( pconv = find_conversation( &pinfo->src, &fake_addr, pinfo->ptype,
-	    pinfo->srcport, 0, 0 ) ) == NULL ) {
-		/*
-		 * The source ip:port combination was not what we were
-		 * looking for, check the destination
-		 */
-		if ( ( pconv = find_conversation( &pinfo->dst, &fake_addr,
-		    pinfo->ptype, pinfo->destport, 0, 0 ) ) == NULL ) {
-			return FALSE;
-		}
+
+	if (!global_rtcp_heur)
+	{
+		return FALSE;
 	}
 
+	/* Was it sent between 2 odd-numbered ports? */
+	if (!(pinfo->srcport % 2) || !(pinfo->destport % 2))
+	{
+		return FALSE;
+	}
 
-	/*
-	 * An RTCP conversation always has a data item for RTCP.
-	 * (Its existence is sufficient to indicate that this is an RTCP
-	 * conversation.)
-	 */
-	if (conversation_get_proto_data(pconv, proto_rtcp) == NULL)
+	/* Look at first byte */
+	first_byte = tvb_get_guint8(tvb, offset);
+
+	/* Are version bits set to 2? */
+	if (((first_byte & 0xC0) >> 6) != 2)
+	{
 		return FALSE;
+	}
 
-	/*
-	 * The message is a valid RTCP message!
-	 */
-	dissect_rtcp( tvb, pinfo, tree );
+	/* Look at packet type */
+	packet_type = tvb_get_guint8(tvb, offset + 1);
+
+	/* First packet within compound packet is supposed to be a sender
+	   or receiver report.  Also see BYE so allow this...  */
+	if (!((packet_type == RTCP_SR)  || (packet_type == RTCP_RR) ||
+           packet_type == RTCP_BYE))
+	{
+		return FALSE;
+	}
+
+	/* Overall length must be a multiple of 4 bytes */
+	if (tvb_length(tvb) % 4)
+	{
+		return FALSE;
+	}
 
+	/* OK, dissect as RTCP */
+	dissect_rtcp(tvb, pinfo, tree);
 	return TRUE;
 }
 
@@ -709,7 +725,7 @@
 }
 
 static int
-dissect_rtcp_rr( tvbuff_t *tvb, int offset, proto_tree *tree,
+dissect_rtcp_rr( packet_info *pinfo, tvbuff_t *tvb, int offset, proto_tree *tree,
     unsigned int count )
 {
 	unsigned int counter = 1;
@@ -721,6 +737,8 @@
 	unsigned int cum_nr = 0;
 
 	while ( counter <= count ) {
+		guint32 lsr, dlsr;
+
 		/* Create a new subtree for a length of 24 bytes */
 		ti = proto_tree_add_text(tree, tvb, offset, 24,
 		    "Source %u", counter );
@@ -767,14 +785,24 @@
 		offset += 4;
 
 		/* Last SR timestamp */
+		lsr = tvb_get_ntohl( tvb, offset );
 		proto_tree_add_uint( ssrc_tree, hf_rtcp_ssrc_lsr, tvb,
-		    offset, 4, tvb_get_ntohl( tvb, offset ) );
+		                     offset, 4, lsr );
 		offset += 4;
 
 		/* Delay since last SR timestamp */
+		dlsr = tvb_get_ntohl( tvb, offset );
 		proto_tree_add_uint( ssrc_tree, hf_rtcp_ssrc_dlsr, tvb,
-		    offset, 4, tvb_get_ntohl( tvb, offset ) );
+		                     offset, 4, dlsr );
 		offset += 4;
+
+		/* Do roundtrip calculation */
+		if (global_rtcp_show_roundtrip_calculation)
+		{
+			/* Based on delay since SR was send in other direction */
+			calculate_roundtrip_delay(tvb, pinfo, ssrc_tree, lsr, dlsr);
+		}
+
 		counter++;
 	}
 
@@ -782,7 +810,7 @@
 }
 
 static int
-dissect_rtcp_sr( tvbuff_t *tvb, int offset, proto_tree *tree,
+dissect_rtcp_sr( packet_info *pinfo, tvbuff_t *tvb, int offset, proto_tree *tree,
     unsigned int count )
 {
 #if 0
@@ -799,11 +827,13 @@
 	 * XXX - RFC 1889 says this is an NTP timestamp, but that appears
 	 * not to be the case.
 	 */
-	proto_tree_add_text(tree, tvb, offset, 4, "Timestamp, MSW: %u",
-		tvb_get_ntohl(tvb, offset));
+	guint32 ts_msw, ts_lsw;
+
+	ts_msw = tvb_get_ntohl(tvb, offset);
+	proto_tree_add_text(tree, tvb, offset, 4, "Timestamp, MSW: %u", ts_msw);
 	offset += 4;
-	proto_tree_add_text(tree, tvb, offset, 4, "Timestamp, LSW: %u",
-		tvb_get_ntohl(tvb, offset));
+	ts_lsw = tvb_get_ntohl(tvb, offset);
+	proto_tree_add_text(tree, tvb, offset, 4, "Timestamp, LSW: %u", ts_lsw);
 	offset += 4;
 #endif
 	/* RTP timestamp, 32 bits */
@@ -816,9 +846,19 @@
 	proto_tree_add_uint( tree, hf_rtcp_sender_oct_cnt, tvb, offset, 4, tvb_get_ntohl( tvb, offset ) );
 	offset += 4;
 
+	/* Record the time of this packet in the sender's conversation */
+	if (global_rtcp_show_roundtrip_calculation)
+	{
+		/* Use middle 32 bits of 64-bit time value */
+		guint32 lsr = ((ts_msw & 0x0000ffff) << 16 | (ts_lsw & 0xffff0000) >> 16);
+
+		/* Record the time that we sent this in appropriate conversation */
+		remember_outgoing_sr(pinfo, lsr);
+	}
+
 	/* The rest of the packet is equal to the RR packet */
 	if ( count != 0 )
-		offset = dissect_rtcp_rr( tvb, offset, tree, count );
+		offset = dissect_rtcp_rr( pinfo, tvb, offset, tree, count );
 
 	return offset;
 }
@@ -837,48 +877,304 @@
 	{
 		/* First time, get info from conversation */
 		p_conv = find_conversation(&pinfo->net_dst, &pinfo->net_src,
-                                   pinfo->ptype,
-                                   pinfo->destport, pinfo->srcport, NO_ADDR_B);
+		                           pinfo->ptype,
+		                           pinfo->destport, pinfo->srcport, NO_ADDR_B);
 
 		if (p_conv)
 		{
-			/* Create space for packet info */
+			/* Look for data in conversation */
 			struct _rtcp_conversation_info *p_conv_packet_data;
 			p_conv_data = conversation_get_proto_data(p_conv, proto_rtcp);
 
-			/* Save this conversation info into packet info */
-			p_conv_packet_data = g_mem_chunk_alloc(rtcp_conversations);
-			strcpy(p_conv_packet_data->method, p_conv_data->method);
-			p_conv_packet_data->frame_number = p_conv_data->frame_number;
-			p_add_proto_data(pinfo->fd, proto_rtcp, p_conv_packet_data);
+			if (p_conv_data)
+			{
+				/* Save this conversation info into packet info */
+				p_conv_packet_data = g_mem_chunk_alloc(rtcp_conversations);
+				if (!p_conv_packet_data)
+				{
+					return;
+				}
+				memcpy(p_conv_packet_data, p_conv_data,
+				       sizeof(struct _rtcp_conversation_info));
+
+				p_add_proto_data(pinfo->fd, proto_rtcp, p_conv_packet_data);
+			}
 		}
 	}
 
 	/* Create setup info subtree with summary info. */
-	if (p_conv_data)
+	if (p_conv_data && p_conv_data->setup_method_set)
 	{
 		proto_tree *rtcp_setup_tree;
 		proto_item *ti =  proto_tree_add_string_format(tree, hf_rtcp_setup, tvb, 0, 0,
 		                                               "",
 		                                               "Stream setup by %s (frame %d)",
-		                                               p_conv_data->method,
-		                                               p_conv_data->frame_number);
+		                                               p_conv_data->setup_method,
+		                                               p_conv_data->setup_frame_number);
 		PROTO_ITEM_SET_GENERATED(ti);
 		rtcp_setup_tree = proto_item_add_subtree(ti, ett_rtcp_setup);
 		if (rtcp_setup_tree)
 		{
 			/* Add details into subtree */
 			proto_item* item = proto_tree_add_uint(rtcp_setup_tree, hf_rtcp_setup_frame,
-			                                       tvb, 0, 0, p_conv_data->frame_number);
+			                                       tvb, 0, 0, p_conv_data->setup_frame_number);
 			PROTO_ITEM_SET_GENERATED(item);
 			item = proto_tree_add_string(rtcp_setup_tree, hf_rtcp_setup_method,
-			                             tvb, 0, 0, p_conv_data->method);
+			                             tvb, 0, 0, p_conv_data->setup_method);
 			PROTO_ITEM_SET_GENERATED(item);
 		}
 	}
 }
 
 
+/* Update conversation data to record time that outgoing rr/sr was sent */
+static void remember_outgoing_sr(packet_info *pinfo, long lsr)
+{
+	conversation_t *p_conv = NULL;
+	struct _rtcp_conversation_info *p_conv_data = NULL;
+	struct _rtcp_conversation_info *p_packet_data = NULL;
+
+	/* This information will be accessed when an incoming packet comes back to
+	   the side that sent this packet, so no use storing in the packet
+	   info.  However, do store the fact that we've already set this info
+	   before  */
+
+
+	/**************************************************************************/
+	/* First of all, see if we've already stored this information for this sr */
+
+	/* Look first in packet info */
+	p_packet_data = p_get_proto_data(pinfo->fd, proto_rtcp);
+	if (p_packet_data && p_packet_data->last_received_set &&
+	    p_packet_data->last_received_frame_number >= pinfo->fd->num)
+	{
+		/* We already did this, OK */
+		return;
+	}
+
+
+	/**************************************************************************/
+	/* Otherwise, we want to find/create the conversation and update it       */
+
+	/* First time, get info from conversation.
+	   Even though we think of this as an outgoing packet being sent,
+	   we store the time as being received by the destination. */
+	p_conv = find_conversation(&pinfo->net_dst, &pinfo->net_src,
+	                           pinfo->ptype,
+	                           pinfo->destport, pinfo->srcport, NO_ADDR_B);
+
+	/* If the conversation doesn't exist, create it now. */
+	if (!p_conv)
+	{
+		p_conv = conversation_new(&pinfo->net_dst, &pinfo->net_src, PT_UDP,
+		                          pinfo->destport, pinfo->srcport,
+		                          NO_ADDR2);
+		if (!p_conv)
+		{
+			/* Give up if can't create it */
+			return;
+		}
+	}
+
+
+	/****************************************************/
+	/* Now find/create conversation data                */
+	p_conv_data = conversation_get_proto_data(p_conv, proto_rtcp);
+	if (!p_conv_data)
+	{
+		/* Allocate memory for data */
+		p_conv_data = g_mem_chunk_alloc(rtcp_conversations);
+		if (!p_conv_data)
+		{
+			/* Give up if couldn't allocate space for memory */
+			return;
+		}
+		memset(p_conv_data, 0, sizeof(struct _rtcp_conversation_info));
+
+		/* Add it to conversation. */
+		conversation_add_proto_data(p_conv, proto_rtcp, p_conv_data);
+	}
+
+	/*******************************************************/
+	/* Update conversation data                            */
+	p_conv_data->last_received_set = TRUE;
+	p_conv_data->last_received_frame_number = pinfo->fd->num;
+	p_conv_data->last_received_time_secs = pinfo->fd->abs_secs;
+	p_conv_data->last_received_time_usecs = pinfo->fd->abs_usecs;
+	p_conv_data->last_received_ts = lsr;
+
+
+	/****************************************************************/
+	/* Update packet info to record conversation state              */
+
+	/* Will use/create packet info */
+	if (!p_packet_data)
+	{
+		p_packet_data = g_mem_chunk_alloc(rtcp_conversations);
+		if (!p_packet_data)
+		{
+			/* Give up if allocation fails */
+			return;
+		}
+		memset(p_packet_data, 0, sizeof(struct _rtcp_conversation_info));
+
+		p_add_proto_data(pinfo->fd, proto_rtcp, p_packet_data);
+	}
+
+	/* Copy current conversation data into packet info */
+	p_packet_data->last_received_set = TRUE;
+	p_packet_data->last_received_frame_number = p_conv_data->last_received_frame_number;
+	p_packet_data->last_received_time_secs = p_conv_data->last_received_time_secs;
+	p_packet_data->last_received_time_usecs = p_conv_data->last_received_time_usecs;
+}
+
+
+/* Use received sr to work out what the roundtrip delay is
+   (at least between capture point and the other endpoint involved in
+    the conversation) */
+static void calculate_roundtrip_delay(tvbuff_t *tvb, packet_info *pinfo,
+                                      proto_tree *tree, guint32 lsr, guint32 dlsr)
+{
+	/*****************************************************/
+	/* This is called dissecting an SR.  We need to:
+	   - look in the packet info for stored calculation.  If found, use.
+	   - look up the conversation of the sending side to see when the
+	     'last SR' was detected (received)
+	   - calculate the network delay using the that packet time,
+	     this packet time, and dlsr
+	*****************************************************/
+
+	conversation_t *p_conv = NULL;
+	struct _rtcp_conversation_info *p_conv_data = NULL;
+	struct _rtcp_conversation_info *p_packet_data = NULL;
+
+
+	/*************************************************/
+	/* Look for previously stored calculation result */
+	p_packet_data = p_get_proto_data(pinfo->fd, proto_rtcp);
+	if (p_packet_data && p_packet_data->calculated_delay_set)
+	{
+		/* Show info. */
+		add_roundtrip_delay_info(tvb, pinfo, tree,
+		                         p_packet_data->calculated_delay_used_frame,
+		                         p_packet_data->calculated_delay);
+		return;
+	}
+
+
+	/********************************************************************/
+	/* Look for captured timestamp of last SR in conversation of sender */
+	/* of this packet                                                   */
+	p_conv = find_conversation(&pinfo->net_src, &pinfo->net_dst,
+	                           pinfo->ptype,
+	                           pinfo->srcport, pinfo->destport, NO_ADDR_B);
+	if (!p_conv)
+	{
+		return;
+	}
+
+	/* Look for conversation data  */
+	p_conv_data = conversation_get_proto_data(p_conv, proto_rtcp);
+	if (!p_conv_data)
+	{
+		return;
+	}
+
+	if (p_conv_data->last_received_set)
+	{
+		/* Store result of calculation in packet info */
+		if (!p_packet_data)
+		{
+			/* Create packet info if it doesn't exist */
+			p_packet_data = g_mem_chunk_alloc(rtcp_conversations);
+			if (!p_packet_data)
+			{
+				/* Give up if allocation fails */
+				return;
+			}
+
+			memset(p_packet_data, 0, sizeof(struct _rtcp_conversation_info));
+
+			/* Set as packet info */
+			p_add_proto_data(pinfo->fd, proto_rtcp, p_packet_data);
+		}
+
+		/* Any previous report must match the lsr given here */
+		if (p_conv_data->last_received_ts == lsr)
+		{
+			/* Look at time of since original packet was sent */
+			gint seconds_between_packets =
+			      pinfo->fd->abs_secs - p_conv_data->last_received_time_secs;
+			gint useconds_between_packets =
+			      pinfo->fd->abs_usecs - p_conv_data->last_received_time_usecs;
+
+
+			gint total_gap = ((seconds_between_packets*1000000) +
+			                 useconds_between_packets) / 1000;
+			gint delay = total_gap - (int)(((double)dlsr/(double)65536) * 1000.0);
+
+			/* No useful calculation can be done if dlsr not set... */
+			if (!dlsr)
+			{
+				return;
+			}
+
+			p_packet_data->calculated_delay_set = TRUE;
+			p_packet_data->calculated_delay = delay;
+			p_packet_data->calculated_delay_used_frame = p_conv_data->last_received_frame_number;
+
+			/* Show info. */
+			add_roundtrip_delay_info(tvb, pinfo, tree, p_conv_data->last_received_frame_number, delay);
+		}
+	}
+}
+
+/* Show the calcaulted roundtrip delay info by adding protocol tree items
+   and appending text to the info column */
+static void add_roundtrip_delay_info(tvbuff_t *tvb, packet_info *pinfo,
+                                     proto_tree *tree, guint frame, guint delay)
+{
+	proto_tree *rtcp_roundtrip_delay_tree;
+	proto_item *ti;
+
+	/* Don't report on calculated delays below the threshold */
+	if (delay < global_rtcp_show_roundtrip_calculation_minimum)
+	{
+		return;
+	}
+
+	/* Add labelled subtree for roundtrip delay info */
+	ti =  proto_tree_add_string_format(tree, hf_rtcp_roundtrip_delay, tvb, 0, 0,
+	                                   "",
+	                                   "Calculated Roundtrip delay <-> %s = %dms, using frame %d",
+	                                   address_to_str(&pinfo->net_src), delay,
+	                                   frame);
+
+	PROTO_ITEM_SET_GENERATED(ti);
+	rtcp_roundtrip_delay_tree = proto_item_add_subtree(ti, ett_rtcp_roundtrip_delay);
+	if (rtcp_roundtrip_delay_tree)
+	{
+		/* Add details into subtree */
+		proto_item* item = proto_tree_add_uint(rtcp_roundtrip_delay_tree,
+		                                       hf_rtcp_roundtrip_delay_frame,
+		                                       tvb, 0, 0, frame);
+		PROTO_ITEM_SET_GENERATED(item);
+		item = proto_tree_add_uint(rtcp_roundtrip_delay_tree, hf_rtcp_roundtrip_delay_delay,
+		                           tvb, 0, 0, delay);
+		PROTO_ITEM_SET_GENERATED(item);
+	}
+
+	/* Report delay in INFO column */
+	if (check_col(pinfo->cinfo, COL_INFO))
+	{
+		col_append_fstr(pinfo->cinfo, COL_INFO,
+		                " (roundtrip delay <-> %s = %dms, using frame %d)",
+						address_to_str(&pinfo->net_src), delay, frame);
+	}
+}
+
+
+
 static void
 dissect_rtcp( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree )
 {
@@ -930,137 +1226,135 @@
 		}
 	}
 
-	if ( tree ) {
-		/*
-		 * Check if there are at least 4 bytes left in the frame,
-		 * the last 16 bits of those is the length of the current
-		 * RTCP message. The last compound message contains padding,
-		 * that enables us to break from the while loop.
-		 */
-		while ( tvb_bytes_exist( tvb, offset, 4) ) {
-			/*
-			 * First retreive the packet_type
-			 */
-			packet_type = tvb_get_guint8( tvb, offset + 1 );
-
-			/*
-			 * Check if it's a valid type
-			 */
-			if ( ( packet_type < 192 ) || ( packet_type >  204 ) )
-				break;
+    /*
+     * Check if there are at least 4 bytes left in the frame,
+     * the last 16 bits of those is the length of the current
+     * RTCP message. The last compound message contains padding,
+     * that enables us to break from the while loop.
+     */
+    while ( tvb_bytes_exist( tvb, offset, 4) ) {
+        /*
+         * First retreive the packet_type
+         */
+        packet_type = tvb_get_guint8( tvb, offset + 1 );
+
+        /*
+         * Check if it's a valid type
+         */
+        if ( ( packet_type < 192 ) || ( packet_type >  204 ) )
+            break;
+
+        /*
+         * get the packet-length for the complete RTCP packet
+         */
+        packet_length = ( tvb_get_ntohs( tvb, offset + 2 ) + 1 ) * 4;
 
-			/*
-			 * get the packet-length for the complete RTCP packet
-			 */
-			packet_length = ( tvb_get_ntohs( tvb, offset + 2 ) + 1 ) * 4;
-
-			ti = proto_tree_add_item(tree, proto_rtcp, tvb, offset, packet_length, FALSE );
-			rtcp_tree = proto_item_add_subtree( ti, ett_rtcp );
-
-
-			/* Conversation setup info */
-			if (global_rtcp_show_setup_info)
-			{
-				show_setup_info(tvb, pinfo, rtcp_tree);
-			}
-
-
-			temp_byte = tvb_get_guint8( tvb, offset );
-
-			proto_tree_add_uint( rtcp_tree, hf_rtcp_version, tvb,
-			    offset, 1, temp_byte);
-			padding_set = RTCP_PADDING( temp_byte );
-			proto_tree_add_boolean( rtcp_tree, hf_rtcp_padding, tvb,
-			    offset, 1, temp_byte );
-			elem_count = RTCP_COUNT( temp_byte );
-
-			switch ( packet_type ) {
-				case RTCP_SR:
-				case RTCP_RR:
-					/* Receiver report count, 5 bits */
-					proto_tree_add_uint( rtcp_tree, hf_rtcp_rc, tvb, offset, 1, temp_byte );
-					offset++;
-					/* Packet type, 8 bits */
-					proto_tree_add_item( rtcp_tree, hf_rtcp_pt, tvb, offset, 1, FALSE );
-					offset++;
-					/* Packet length in 32 bit words MINUS one, 16 bits */
-					proto_tree_add_uint( rtcp_tree, hf_rtcp_length, tvb, offset, 2, tvb_get_ntohs( tvb, offset ) );
-					offset += 2;
-					/* Sender Synchronization source, 32 bits */
-					proto_tree_add_uint( rtcp_tree, hf_rtcp_ssrc_sender, tvb, offset, 4, tvb_get_ntohl( tvb, offset ) );
-					offset += 4;
-
-					if ( packet_type == RTCP_SR ) offset = dissect_rtcp_sr( tvb, offset, rtcp_tree, elem_count );
-					else offset = dissect_rtcp_rr( tvb, offset, rtcp_tree, elem_count );
-					break;
-				case RTCP_SDES:
-					/* Source count, 5 bits */
-					proto_tree_add_uint( rtcp_tree, hf_rtcp_sc, tvb, offset, 1, temp_byte );
-					offset++;
-					/* Packet type, 8 bits */
-					proto_tree_add_item( rtcp_tree, hf_rtcp_pt, tvb, offset, 1, FALSE );
-					offset++;
-					/* Packet length in 32 bit words MINUS one, 16 bits */
-					proto_tree_add_uint( rtcp_tree, hf_rtcp_length, tvb, offset, 2, tvb_get_ntohs( tvb, offset ) );
-					offset += 2;
-					dissect_rtcp_sdes( tvb, offset, rtcp_tree, elem_count );
-					offset += packet_length - 4;
-					break;
-				case RTCP_BYE:
-					/* Source count, 5 bits */
-					proto_tree_add_uint( rtcp_tree, hf_rtcp_sc, tvb, offset, 1, temp_byte );
-					offset++;
-					/* Packet type, 8 bits */
-					proto_tree_add_item( rtcp_tree, hf_rtcp_pt, tvb, offset, 1, FALSE );
-					offset++;
-					/* Packet length in 32 bit words MINUS one, 16 bits */
-					proto_tree_add_uint( rtcp_tree, hf_rtcp_length, tvb, offset, 2, tvb_get_ntohs( tvb, offset ) );
-					offset += 2;
-					offset = dissect_rtcp_bye( tvb, offset, rtcp_tree, elem_count );
-					break;
-				case RTCP_APP:
-					/* Subtype, 5 bits */
-					rtcp_subtype = elem_count;
-					proto_tree_add_uint( rtcp_tree, hf_rtcp_subtype, tvb, offset, 1, elem_count );
-					offset++;
-					/* Packet type, 8 bits */
-					proto_tree_add_item( rtcp_tree, hf_rtcp_pt, tvb, offset, 1, FALSE );
-					offset++;
-					/* Packet length in 32 bit words MINUS one, 16 bits */
-					proto_tree_add_uint( rtcp_tree, hf_rtcp_length, tvb, offset, 2, tvb_get_ntohs( tvb, offset ) );
-					offset += 2;
-					offset = dissect_rtcp_app( tvb, pinfo, offset,
-					    rtcp_tree, padding_set,
-					    packet_length - 4, rtcp_subtype );
-					break;
-				case RTCP_FIR:
-					offset = dissect_rtcp_fir( tvb, offset, rtcp_tree );
-					break;
-				case RTCP_NACK:
-					offset = dissect_rtcp_nack( tvb, offset, rtcp_tree );
-					break;
-				default:
-					/*
-					 * To prevent endless loops in case of an unknown message type
-					 * increase offset. Some time the while will end :-)
-					 */
-					offset++;
-					break;
-			}
-		}
-		/* If the padding bit is set, the last octet of the
-		 * packet contains the length of the padding
-		 * We only have to check for this at the end of the LAST RTCP message
-		 */
-		if ( padding_set ) {
-			/* If everything went according to plan offset should now point to the
-			 * first octet of the padding
-			 */
-			proto_tree_add_item( rtcp_tree, hf_rtcp_padding_data, tvb, offset, tvb_length_remaining( tvb, offset) - 1, FALSE );
-			offset += tvb_length_remaining( tvb, offset) - 1;
-			proto_tree_add_item( rtcp_tree, hf_rtcp_padding_count, tvb, offset, 1, FALSE );
+		ti = proto_tree_add_item(tree, proto_rtcp, tvb, offset, packet_length, FALSE );
+		rtcp_tree = proto_item_add_subtree( ti, ett_rtcp );
+
+		/* Conversation setup info */
+		if (global_rtcp_show_setup_info)
+		{
+			show_setup_info(tvb, pinfo, rtcp_tree);
 		}
-	}
+
+
+        temp_byte = tvb_get_guint8( tvb, offset );
+
+		proto_tree_add_uint( rtcp_tree, hf_rtcp_version, tvb,
+							 offset, 1, temp_byte);
+        padding_set = RTCP_PADDING( temp_byte );
+
+		proto_tree_add_boolean( rtcp_tree, hf_rtcp_padding, tvb,
+								offset, 1, temp_byte );
+        elem_count = RTCP_COUNT( temp_byte );
+
+        switch ( packet_type ) {
+            case RTCP_SR:
+            case RTCP_RR:
+                /* Receiver report count, 5 bits */
+                proto_tree_add_uint( rtcp_tree, hf_rtcp_rc, tvb, offset, 1, temp_byte );
+                offset++;
+                /* Packet type, 8 bits */
+                proto_tree_add_item( rtcp_tree, hf_rtcp_pt, tvb, offset, 1, FALSE );
+                offset++;
+                /* Packet length in 32 bit words MINUS one, 16 bits */
+                proto_tree_add_uint( rtcp_tree, hf_rtcp_length, tvb, offset, 2, tvb_get_ntohs( tvb, offset ) );
+                offset += 2;
+                /* Sender Synchronization source, 32 bits */
+                proto_tree_add_uint( rtcp_tree, hf_rtcp_ssrc_sender, tvb, offset, 4, tvb_get_ntohl( tvb, offset ) );
+                offset += 4;
+
+                if ( packet_type == RTCP_SR ) offset = dissect_rtcp_sr( pinfo, tvb, offset, rtcp_tree, elem_count );
+                else offset = dissect_rtcp_rr( pinfo, tvb, offset, rtcp_tree, elem_count );
+                break;
+            case RTCP_SDES:
+                /* Source count, 5 bits */
+                proto_tree_add_uint( rtcp_tree, hf_rtcp_sc, tvb, offset, 1, temp_byte );
+                offset++;
+                /* Packet type, 8 bits */
+                proto_tree_add_item( rtcp_tree, hf_rtcp_pt, tvb, offset, 1, FALSE );
+                offset++;
+                /* Packet length in 32 bit words MINUS one, 16 bits */
+                proto_tree_add_uint( rtcp_tree, hf_rtcp_length, tvb, offset, 2, tvb_get_ntohs( tvb, offset ) );
+                offset += 2;
+                dissect_rtcp_sdes( tvb, offset, rtcp_tree, elem_count );
+                offset += packet_length - 4;
+                break;
+            case RTCP_BYE:
+                /* Source count, 5 bits */
+                proto_tree_add_uint( rtcp_tree, hf_rtcp_sc, tvb, offset, 1, temp_byte );
+                offset++;
+                /* Packet type, 8 bits */
+                proto_tree_add_item( rtcp_tree, hf_rtcp_pt, tvb, offset, 1, FALSE );
+                offset++;
+                /* Packet length in 32 bit words MINUS one, 16 bits */
+                proto_tree_add_uint( rtcp_tree, hf_rtcp_length, tvb, offset, 2, tvb_get_ntohs( tvb, offset ) );
+                offset += 2;
+                offset = dissect_rtcp_bye( tvb, offset, rtcp_tree, elem_count );
+                break;
+            case RTCP_APP:
+                /* Subtype, 5 bits */
+                rtcp_subtype = elem_count;
+                proto_tree_add_uint( rtcp_tree, hf_rtcp_subtype, tvb, offset, 1, elem_count );
+                offset++;
+                /* Packet type, 8 bits */
+                proto_tree_add_item( rtcp_tree, hf_rtcp_pt, tvb, offset, 1, FALSE );
+                offset++;
+                /* Packet length in 32 bit words MINUS one, 16 bits */
+                proto_tree_add_uint( rtcp_tree, hf_rtcp_length, tvb, offset, 2, tvb_get_ntohs( tvb, offset ) );
+                offset += 2;
+                offset = dissect_rtcp_app( tvb, pinfo, offset,
+                    rtcp_tree, padding_set,
+                    packet_length - 4, rtcp_subtype );
+                break;
+            case RTCP_FIR:
+                offset = dissect_rtcp_fir( tvb, offset, rtcp_tree );
+                break;
+            case RTCP_NACK:
+                offset = dissect_rtcp_nack( tvb, offset, rtcp_tree );
+                break;
+            default:
+                /*
+                 * To prevent endless loops in case of an unknown message type
+                 * increase offset. Some time the while will end :-)
+                 */
+                offset++;
+                break;
+        }
+    }
+    /* If the padding bit is set, the last octet of the
+     * packet contains the length of the padding
+     * We only have to check for this at the end of the LAST RTCP message
+     */
+    if ( padding_set ) {
+        /* If everything went according to plan offset should now point to the
+         * first octet of the padding
+         */
+        proto_tree_add_item( rtcp_tree, hf_rtcp_padding_data, tvb, offset, tvb_length_remaining( tvb, offset) - 1, FALSE );
+        offset += tvb_length_remaining( tvb, offset) - 1;
+        proto_tree_add_item( rtcp_tree, hf_rtcp_padding_count, tvb, offset, 1, FALSE );
+    }
 }
 
 void
@@ -1607,6 +1901,42 @@
 				0x0,
 				"Method used to set up this stream", HFILL
 			}
+		},
+		{
+			&hf_rtcp_roundtrip_delay,
+			{
+				"Roundtrip Delay",
+				"rtcp.roundtrip-delay",
+				FT_STRING,
+				BASE_NONE,
+				NULL,
+				0x0,
+				"Calculated roundtrip delay, frame and ms value", HFILL
+			}
+		},
+		{
+			&hf_rtcp_roundtrip_delay_frame,
+			{
+				"Previous SR frame used in calculation",
+				"rtcp.roundtrip-previous-sr-frame",
+				FT_FRAMENUM,
+				BASE_NONE,
+				NULL,
+				0x0,
+				"Frame used to calculate roundtrip delay", HFILL
+			}
+		},
+		{
+			&hf_rtcp_roundtrip_delay_delay,
+			{
+				"Roundtrip Delay(ms)",
+				"rtcp.roundtrip-delay-delay",
+				FT_UINT32,
+				BASE_DEC,
+				NULL,
+				0x0,
+				"Calculated roundtrip delay in ms", HFILL
+			}
 		}
 
 	};
@@ -1620,7 +1950,8 @@
 		&ett_sdes,
 		&ett_sdes_item,
 		&ett_PoC1,
-		&ett_rtcp_setup
+		&ett_rtcp_setup,
+		&ett_rtcp_roundtrip_delay
 	};
 
 	module_t *rtcp_module;
@@ -1640,6 +1971,25 @@
 		"this RTCP stream to be created",
 		&global_rtcp_show_setup_info);
 
+	prefs_register_bool_preference(rtcp_module, "heuristic_rtcp",
+		"Try to decode RTCP outside of conversations ",
+		"If call control SIP/H.323/RTSP/.. messages are missing in the trace, "
+		"RTCP isn't decoded without this",
+		&global_rtcp_heur);
+
+	prefs_register_bool_preference(rtcp_module, "show_roundtrip_calculation",
+		"Show relative roundtrip calculations",
+		"Try to work out network delay by comparing time between packets "
+		"as captured and delays as seen by endpoint",
+		&global_rtcp_show_roundtrip_calculation);
+
+	prefs_register_uint_preference(rtcp_module, "roundtrip_min_threshhold",
+		"Minimum roundtrip calculations to report (ms)",
+		"Minimum calculated roundtrip delay time in milliseconds that "
+		"should be reported",
+		MIN_ROUNDTRIP_TO_REPORT_DEFAULT, &global_rtcp_show_roundtrip_calculation_minimum);
+
+
 	register_init_routine( &rtcp_init );
 }
 
@@ -1652,4 +2002,6 @@
 	 */
 	rtcp_handle = find_dissector("rtcp");
 	dissector_add_handle("udp.port", rtcp_handle);
+
+	heur_dissector_add( "udp", dissect_rtcp_heur, proto_rtcp);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-rtcp.h ethereal-0.10.7/epan/dissectors/packet-rtcp.h
--- ethereal-0.10.6/epan/dissectors/packet-rtcp.h	2004-08-12 17:42:25.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-rtcp.h	2004-10-20 17:34:54.000000000 -0500
@@ -1,6 +1,6 @@
 /* packet-rtcp.h
  *
- * $Id: packet-rtcp.h 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-rtcp.h 11998 2004-09-15 20:08:30Z etxrab $
  *
  * Routines for RTCP dissection
  * RTCP = Real-time Transport Control Protocol
@@ -27,18 +27,33 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
-/* Info to save in RTCP conversation / packet-info */
+/* Info to save in RTCP conversation / packet-info.
+   Note that this structure applies to the destination end of
+   an RTP session */
 #define MAX_RTCP_SETUP_METHOD_SIZE 8
 struct _rtcp_conversation_info
 {
-	gchar   method[MAX_RTCP_SETUP_METHOD_SIZE];
-	guint32 frame_number;
+    /* Setup info is relevant to traffic whose dest is the conversation address */
+    guchar  setup_method_set;
+    gchar   setup_method[MAX_RTCP_SETUP_METHOD_SIZE];
+    guint32 setup_frame_number;
+
+    /* Info used for roundtrip calculations */
+    guchar  last_received_set;
+    guint32 last_received_frame_number;
+    guint32 last_received_time_secs;
+    guint32 last_received_time_usecs;
+    guint32 last_received_ts;
+
+    /* Stored result of calculation (ms) */
+    guchar  calculated_delay_set;
+    guint32 calculated_delay_used_frame;
+    guint32 calculated_delay;
 };
 
 
 /* Add an RTCP conversation with the given details */
 void rtcp_add_address(packet_info *pinfo,
-                      const unsigned char* ip_addr, int port,
+                      address *addr, int port,
                       int other_port,
                       gchar *setup_method, guint32 setup_frame_number);
-
diff -urN ethereal-0.10.6/epan/dissectors/packet-rtp-events.c ethereal-0.10.7/epan/dissectors/packet-rtp-events.c
--- ethereal-0.10.6/epan/dissectors/packet-rtp-events.c	2004-08-12 17:42:21.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-rtp-events.c	2004-10-20 17:34:52.000000000 -0500
@@ -3,7 +3,7 @@
  * Routines for RFC 2833 RTP Events dissection
  * Copyright 2003, Kevin A. Noll <knoll[AT]poss.com>
  *
- * $Id: packet-rtp-events.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-rtp-events.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -35,7 +35,7 @@
 
 #include <glib.h>
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #include <stdio.h>
 #include <string.h>
diff -urN ethereal-0.10.6/epan/dissectors/packet-rtp.c ethereal-0.10.7/epan/dissectors/packet-rtp.c
--- ethereal-0.10.6/epan/dissectors/packet-rtp.c	2004-08-12 17:42:31.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-rtp.c	2004-10-20 17:35:02.000000000 -0500
@@ -6,7 +6,7 @@
  * Copyright 2000, Philips Electronics N.V.
  * Written by Andreas Sikkema <h323@ramdyne.nl>
  *
- * $Id: packet-rtp.c 11561 2004-07-29 02:25:54Z gerald $
+ * $Id: packet-rtp.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -64,9 +64,9 @@
 #include "packet-rtp.h"
 #include "rtp_pt.h"
 #include <epan/conversation.h>
-#include "tap.h"
+#include <epan/tap.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 
 static dissector_handle_t rtp_handle;
 
@@ -190,16 +190,14 @@
 	{ 0,		NULL },
 };
 
-static address fake_addr;
-
 /* Set up an RTP conversation */
 void rtp_add_address(packet_info *pinfo,
-                     const unsigned char* ip_addr, int port,
+                     address *addr, int port,
                      int other_port,
                      gchar *setup_method, guint32 setup_frame_number)
 {
-	address src_addr;
-	conversation_t* p_conv = NULL;
+	address null_addr;
+	conversation_t* p_conv;
 	struct _rtp_conversation_info *p_conv_data = NULL;
 
 	/*
@@ -212,55 +210,52 @@
 		return;
 	}
 
-	src_addr.type = pinfo->net_src.type;
-	src_addr.len = pinfo->net_src.len;
-	src_addr.data = ip_addr;
+	SET_ADDRESS(&null_addr, AT_NONE, 0, NULL);
 
 	/*
 	 * Check if the ip address and port combination is not
-	 * already registered
+	 * already registered as a conversation.
 	 */
-	p_conv = find_conversation( &src_addr, &src_addr, PT_UDP, port, other_port,
+	p_conv = find_conversation( addr, &null_addr, PT_UDP, port, other_port,
                                 NO_ADDR_B | (!other_port ? NO_PORT_B : 0));
 
 	/*
-	 * If not, add
+	 * If not, create a new conversation.
 	 */
 	if ( ! p_conv ) {
+		p_conv = conversation_new( addr, &null_addr, PT_UDP,
+		                           (guint32)port, (guint32)other_port,
+								   NO_ADDR2 | (!other_port ? NO_PORT2 : 0));
+	}
+
+	/* Set dissector */
+	conversation_set_dissector(p_conv, rtp_handle);
+
+	/*
+	 * Check if the conversation has data associated with it.
+	 */
+	p_conv_data = conversation_get_proto_data(p_conv, proto_rtp);
+
+	/*
+	 * If not, add a new data item.
+	 */
+	if ( ! p_conv_data ) {
 		/* Create conversation data */
 		p_conv_data = g_mem_chunk_alloc(rtp_conversations);
 
-		/* Check length first time we look at method string */
-		strncpy(p_conv_data->method, setup_method,
-		        (strlen(setup_method)+1 <= MAX_RTP_SETUP_METHOD_SIZE) ?
-		             strlen(setup_method)+1 :
-		             MAX_RTP_SETUP_METHOD_SIZE);
-		p_conv_data->method[MAX_RTP_SETUP_METHOD_SIZE] = '\0';
-		p_conv_data->frame_number = setup_frame_number;
-
-		/* Create conversation with this data */
-		p_conv = conversation_new( &src_addr, &src_addr, PT_UDP,
-		                           (guint32)port, (guint32)other_port,
-								   NO_ADDR2 | (!other_port ? NO_PORT2 : 0));
 		conversation_add_proto_data(p_conv, proto_rtp, p_conv_data);
-
-		/* Set dissector */
-		conversation_set_dissector(p_conv, rtp_handle);
-	}
-	else
-	{
-		/* Update existing conversation data */
-		p_conv_data = conversation_get_proto_data(p_conv, proto_rtp);
-		strcpy(p_conv_data->method, setup_method);
-		p_conv_data->frame_number = setup_frame_number;
 	}
+
+	/*
+	 * Update the conversation data.
+	 */
+	strncpy(p_conv_data->method, setup_method, MAX_RTP_SETUP_METHOD_SIZE);
+	p_conv_data->method[MAX_RTP_SETUP_METHOD_SIZE] = '\0';
+	p_conv_data->frame_number = setup_frame_number;
 }
 
 static void rtp_init( void )
 {
-	unsigned char* tmp_data;
-	int i;
-
 	/* (Re)allocate mem chunk for conversations */
 	if (rtp_conversations)
 	{
@@ -270,16 +265,6 @@
 	                                    sizeof(struct _rtp_conversation_info),
 	                                    20 * sizeof(struct _rtp_conversation_info),
 	                                    G_ALLOC_ONLY);
-
-	/* Create a fake adddress... */
-	fake_addr.type = AT_IPv4;
-	fake_addr.len = 4;
-
-	tmp_data = malloc( fake_addr.len );
-	for ( i = 0; i < fake_addr.len; i++) {
-		tmp_data[i] = 0;
-	}
-	fake_addr.data = tmp_data;
 }
 
 static gboolean
@@ -366,6 +351,8 @@
 	octet1 = tvb_get_guint8( tvb, offset );
 	version = RTP_VERSION( octet1 );
 
+	/* fill in the rtp_info structure */
+	rtp_info.info_version = version;
 	if (version != 2) {
 		/*
 		 * Unknown or unsupported version.
diff -urN ethereal-0.10.6/epan/dissectors/packet-rtp.h ethereal-0.10.7/epan/dissectors/packet-rtp.h
--- ethereal-0.10.6/epan/dissectors/packet-rtp.h	2004-08-12 17:42:31.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-rtp.h	2004-10-20 17:35:02.000000000 -0500
@@ -3,7 +3,7 @@
  * Routines for RTP dissection
  * RTP = Real time Transport Protocol
  *
- * $Id: packet-rtp.h 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-rtp.h 12341 2004-10-18 15:14:13Z gerald $
  *
  * Copyright 2000, Philips Electronics N.V.
  * Written by Andreas Sikkema <andreas.sikkema@philips.com>
@@ -28,6 +28,7 @@
  */
 
 struct _rtp_info {
+	unsigned int  info_version;
 	gboolean      info_padding_set;
 	gboolean      info_marker_set;
 	unsigned int  info_payload_type;
@@ -60,6 +61,6 @@
 
 /* Add an RTP conversation with the given details */
 void rtp_add_address(packet_info *pinfo,
-                     const unsigned char* ip_addr, int port,
+                     address *addr, int port,
                      int other_port,
                      gchar *setup_method, guint32 setup_frame_number);
diff -urN ethereal-0.10.6/epan/dissectors/packet-rtsp.c ethereal-0.10.7/epan/dissectors/packet-rtsp.c
--- ethereal-0.10.6/epan/dissectors/packet-rtsp.c	2004-08-12 17:42:00.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-rtsp.c	2004-10-20 17:34:40.000000000 -0500
@@ -4,7 +4,7 @@
  * Jason Lango <jal@netapp.com>
  * Liberally copied from packet-http.c, by Guy Harris <guy@alum.mit.edu>
  *
- * $Id: packet-rtsp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-rtsp.c 12129 2004-09-29 00:25:05Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -35,11 +35,11 @@
 #include <ctype.h>
 #include <stdlib.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #include <glib.h>
 #include <epan/packet.h>
-#include "req_resp_hdrs.h"
+#include <epan/req_resp_hdrs.h>
 #include "packet-rtp.h"
 #include "packet-rtcp.h"
 #include <epan/conversation.h>
@@ -352,7 +352,6 @@
 	guchar		*tmp;
 	guint		c_data_port, c_mon_port;
 	guint		s_data_port, s_mon_port;
-	address		null_addr;
 
 	if (line_len > sizeof(buf) - 1) {
 		/*
@@ -441,15 +440,13 @@
 	 * sent the packet, so we construct a conversation with no
 	 * second address.
 	 */
-	SET_ADDRESS(&null_addr, pinfo->src.type, 0, NULL);
-
-	rtp_add_address(pinfo, (char *)pinfo->dst.data, c_data_port, s_data_port,
+	rtp_add_address(pinfo, &pinfo->dst, c_data_port, s_data_port,
                     "RTSP", pinfo->fd->num);
 
 	if (!c_mon_port)
 		return;
 
-	rtcp_add_address(pinfo, (char *)pinfo->dst.data, c_mon_port, s_mon_port,
+	rtcp_add_address(pinfo, &pinfo->dst, c_mon_port, s_mon_port,
                      "RTSP", pinfo->fd->num);
 }
 
@@ -1173,9 +1170,10 @@
 		"Set the alternate TCP port for RTSP messages",
 		10, &global_rtsp_tcp_alternate_port);
 	prefs_register_bool_preference(rtsp_module, "desegment_headers",
-	    "Desegment all RTSP headers\nspanning multiple TCP segments",
-	    "Whether the RTSP dissector should desegment all headers "
-	    "of a request spanning multiple TCP segments",
+	    "Reassemble RTSP headers spanning multiple TCP segments",
+	    "Whether the RTSP dissector should reassemble headers "
+	    "of a request spanning multiple TCP segments. "
+	    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 	    &rtsp_desegment_headers);
 	prefs_register_bool_preference(rtsp_module, "desegment_body",
 	    "Trust the \"Content-length:\" header and\ndesegment RTSP "
diff -urN ethereal-0.10.6/epan/dissectors/packet-sccp.c ethereal-0.10.7/epan/dissectors/packet-sccp.c
--- ethereal-0.10.6/epan/dissectors/packet-sccp.c	2004-08-12 17:42:25.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-sccp.c	2004-10-20 17:34:55.000000000 -0500
@@ -8,7 +8,7 @@
  *
  * Copyright 2002, Jeff Morriss <jeff.morriss[AT]ulticom.com>
  *
- * $Id: packet-sccp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-sccp.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -47,7 +47,7 @@
 
 #include <epan/packet.h>
 #include "packet-mtp3.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #define SCCP_SI 3
 
@@ -2361,6 +2361,7 @@
 
   dissector_add("mtp3.service_indicator", SCCP_SI, sccp_handle);
   dissector_add("m3ua.protocol_data_si", SCCP_SI, sccp_handle);
+  dissector_add_string("tali.opcode", "sccp", sccp_handle);
 
   data_handle = find_dissector("data");
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-scsi.c ethereal-0.10.7/epan/dissectors/packet-scsi.c
--- ethereal-0.10.6/epan/dissectors/packet-scsi.c	2004-08-12 17:42:27.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-scsi.c	2004-10-20 17:34:56.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for decoding SCSI CDBs and responses
  * Author: Dinesh G Dutt (ddutt@cisco.com)
  *
- * $Id: packet-scsi.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-scsi.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -83,8 +83,7 @@
 #include <string.h>
 #include <epan/strutil.h>
 #include <epan/packet.h>
-#include <epan/int-64bit.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-scsi.h"
 
 static int proto_scsi                    = -1;
@@ -1827,8 +1826,8 @@
                 payload_len -= desclen;
                 break;
             }
-            proto_tree_add_text (scsi_tree, tvb, offset, 8, "No. of Blocks: %s",
-                                 u64toa (tvb_get_ptr (tvb, offset, 8)));
+            proto_tree_add_text (scsi_tree, tvb, offset, 8, "No. of Blocks: %" PRIu64,
+                                 tvb_get_ntoh64 (tvb, offset));
             offset += 8;
             payload_len -= 8;
             desclen -= 8;
@@ -3755,21 +3754,21 @@
                 offset += 4;
 
                 proto_tree_add_text (tree, tvb, offset, 8,
-                                     "Block Number: %s",
-                                     u64toa (tvb_get_ptr (tvb, offset, 8)));
+                                     "Block Number: %" PRIu64,
+                                     tvb_get_ntoh64 (tvb, offset));
                  offset += 8;
             } else
                 offset += 12;
 
             if (!(flags & MPU)) {
                 proto_tree_add_text (tree, tvb, offset, 8,
-                                     "File Number: %s",
-                                     u64toa (tvb_get_ptr (tvb, offset, 8)));
+                                     "File Number: %" PRIu64,
+                                     tvb_get_ntoh64 (tvb, offset));
                 offset += 8;
 
                 proto_tree_add_text (tree, tvb, offset, 8,
-                                     "Set Number: %s",
-                                     u64toa (tvb_get_ptr (tvb, offset, 8)));
+                                     "Set Number: %" PRIu64,
+                                     tvb_get_ntoh64 (tvb, offset));
                 offset += 8;
             } else
                 offset += 16;
@@ -3806,13 +3805,13 @@
 
             if (!(flags & BPU)) {
                 proto_tree_add_text (tree, tvb, offset, 8,
-                                     "First Block Location: %s",
-                                     u64toa (tvb_get_ptr (tvb, offset, 8)));
+                                     "First Block Location: %" PRIu64,
+                                     tvb_get_ntoh64 (tvb, offset));
                 offset += 8;
 
                 proto_tree_add_text (tree, tvb, offset, 8,
-                                     "Last Block Location: %s",
-                                     u64toa (tvb_get_ptr (tvb, offset, 8)));
+                                     "Last Block Location: %" PRIu64,
+                                     tvb_get_ntoh64 (tvb, offset));
                 offset += 8;
             } else
                 offset += 16;
@@ -3821,8 +3820,8 @@
 
             if (!(flags & BYCU)) {
                 proto_tree_add_text (tree, tvb, offset, 8,
-                                     "Number of Bytes in Buffer: %s",
-                                     u64toa (tvb_get_ptr (tvb, offset, 8)));
+                                     "Number of Bytes in Buffer: %" PRIu64,
+                                     tvb_get_ntoh64 (tvb, offset));
             }
             offset += 8;
             break;
diff -urN ethereal-0.10.6/epan/dissectors/packet-sctp.c ethereal-0.10.7/epan/dissectors/packet-sctp.c
--- ethereal-0.10.6/epan/dissectors/packet-sctp.c	2004-08-12 17:42:03.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-sctp.c	2004-10-20 17:34:42.000000000 -0500
@@ -4,9 +4,10 @@
  * - RFC 2960
  * - RFC 3309
  * - RFC 3758
- * - http://www.ietf.org/internet-drafts/draft-ietf-tsvwg-sctpimpguide-09.txt
+ * - http://www.ietf.org/internet-drafts/draft-ietf-tsvwg-sctpimpguide-11.txt
  * - http://www.ietf.org/internet-drafts/draft-ietf-tsvwg-addip-sctp-09.txt
-* - http://www.ietf.org/internet-drafts/draft-stewart-sctp-pktdrprep-00.txt
+ * - http://www.ietf.org/internet-drafts/draft-stewart-sctp-pktdrprep-01.txt
+ * - http://www.ietf.org/internet-drafts/draft-tuexen-sctp-auth-chunk-01.txt
  *
  * Copyright 2000, 2001, 2002, 2003, 2004 Michael Tuexen <tuexen [AT] fh-muenster.de>
  * Still to do (so stay tuned)
@@ -17,7 +18,7 @@
  *   * bundling errors
  *   * value errors
  *
- * $Id: packet-sctp.c 11580 2004-08-02 17:36:34Z tuexen $
+ * $Id: packet-sctp.c 12291 2004-10-13 08:41:32Z tuexen $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -45,10 +46,10 @@
 #endif
 
 #include <string.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/packet.h>
-#include "tap.h"
-#include "ipproto.h"
+#include <epan/tap.h>
+#include <epan/ipproto.h>
 #include "packet-sctp.h"
 #include "sctpppids.h"
 
@@ -198,11 +199,12 @@
 #define SCTP_ECNE_CHUNK_ID              12
 #define SCTP_CWR_CHUNK_ID               13
 #define SCTP_SHUTDOWN_COMPLETE_CHUNK_ID 14
-#define SCTP_FORWARD_TSN_CHUNK_ID      192
+#define SCTP_AUTH_CHUNK_ID            0x16
 #define SCTP_ASCONF_ACK_CHUNK_ID      0x80
-#define SCTP_PKTDROP_CHUNK_ID         0X81
-#define SCTP_ASCONF_CHUNK_ID          0XC1
-#define SCTP_IETF_EXT                  255
+#define SCTP_PKTDROP_CHUNK_ID         0x81
+#define SCTP_FORWARD_TSN_CHUNK_ID     0xC0
+#define SCTP_ASCONF_CHUNK_ID          0xC1
+#define SCTP_IETF_EXT                 0xFF
 
 static const value_string chunk_type_values[] = {
   { SCTP_DATA_CHUNK_ID,              "DATA" },
@@ -220,6 +222,7 @@
   { SCTP_ECNE_CHUNK_ID,              "ECNE" },
   { SCTP_CWR_CHUNK_ID,               "CWR" },
   { SCTP_SHUTDOWN_COMPLETE_CHUNK_ID, "SHUTDOWN_COMPLETE" },
+  { SCTP_AUTH_CHUNK_ID,              "AUTH" },
   { SCTP_FORWARD_TSN_CHUNK_ID,       "FORWARD TSN" },
   { SCTP_ASCONF_ACK_CHUNK_ID,        "ASCONF_ACK" },
   { SCTP_PKTDROP_CHUNK_ID,           "PKTDROP" },
@@ -499,10 +502,12 @@
 static void
 dissect_ipv4_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item, proto_item *additional_item, gboolean dissecting_init_init_ack_chunk)
 {
-  proto_tree_add_item(parameter_tree, hf_ipv4_address, parameter_tvb, IPV4_ADDRESS_OFFSET, IPV4_ADDRESS_LENGTH, NETWORK_BYTE_ORDER);
-  proto_item_append_text(parameter_item, " (Address: %s)", ip_to_str((const guint8 *)tvb_get_ptr(parameter_tvb, IPV4_ADDRESS_OFFSET, IPV4_ADDRESS_LENGTH)));
-  if (additional_item)
-      proto_item_append_text(additional_item, "%s", ip_to_str((const guint8 *)tvb_get_ptr(parameter_tvb, IPV4_ADDRESS_OFFSET, IPV4_ADDRESS_LENGTH)));
+  if (parameter_tree) {
+    proto_tree_add_item(parameter_tree, hf_ipv4_address, parameter_tvb, IPV4_ADDRESS_OFFSET, IPV4_ADDRESS_LENGTH, NETWORK_BYTE_ORDER);
+    proto_item_append_text(parameter_item, " (Address: %s)", ip_to_str((const guint8 *)tvb_get_ptr(parameter_tvb, IPV4_ADDRESS_OFFSET, IPV4_ADDRESS_LENGTH)));
+    if (additional_item)
+        proto_item_append_text(additional_item, "%s", ip_to_str((const guint8 *)tvb_get_ptr(parameter_tvb, IPV4_ADDRESS_OFFSET, IPV4_ADDRESS_LENGTH)));
+  }
   if (dissecting_init_init_ack_chunk) {
   	  if (sctp_info.number_of_tvbs < MAXIMUM_NUMBER_OF_TVBS)
         sctp_info.tvb[sctp_info.number_of_tvbs++] = parameter_tvb;
@@ -517,10 +522,12 @@
 static void
 dissect_ipv6_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item, proto_item *additional_item, gboolean dissecting_init_init_ack_chunk)
 {
-  proto_tree_add_item(parameter_tree, hf_ipv6_address, parameter_tvb, IPV6_ADDRESS_OFFSET, IPV6_ADDRESS_LENGTH, NETWORK_BYTE_ORDER);
-  proto_item_append_text(parameter_item, " (Address: %s)", ip6_to_str((const struct e_in6_addr *)tvb_get_ptr(parameter_tvb, IPV6_ADDRESS_OFFSET, IPV6_ADDRESS_LENGTH)));
-  if (additional_item)
-    proto_item_append_text(additional_item, "%s", ip6_to_str((const struct e_in6_addr *)tvb_get_ptr(parameter_tvb, IPV6_ADDRESS_OFFSET, IPV6_ADDRESS_LENGTH)));
+  if (parameter_tree) {
+    proto_tree_add_item(parameter_tree, hf_ipv6_address, parameter_tvb, IPV6_ADDRESS_OFFSET, IPV6_ADDRESS_LENGTH, NETWORK_BYTE_ORDER);
+    proto_item_append_text(parameter_item, " (Address: %s)", ip6_to_str((const struct e_in6_addr *)tvb_get_ptr(parameter_tvb, IPV6_ADDRESS_OFFSET, IPV6_ADDRESS_LENGTH)));
+    if (additional_item)
+      proto_item_append_text(additional_item, "%s", ip6_to_str((const struct e_in6_addr *)tvb_get_ptr(parameter_tvb, IPV6_ADDRESS_OFFSET, IPV6_ADDRESS_LENGTH)));
+  }
   if (dissecting_init_init_ack_chunk) {
   	if (sctp_info.number_of_tvbs < MAXIMUM_NUMBER_OF_TVBS)
       sctp_info.tvb[sctp_info.number_of_tvbs++] = parameter_tvb;
@@ -785,15 +792,23 @@
   length         = tvb_get_ntohs(parameter_tvb, PARAMETER_LENGTH_OFFSET);
   padding_length = tvb_length(parameter_tvb) - length;
 
-  parameter_item = proto_tree_add_text(chunk_tree, parameter_tvb, PARAMETER_HEADER_OFFSET, tvb_length(parameter_tvb), "%s parameter", val_to_str(type, parameter_identifier_values, "Unknown"));
-  parameter_tree = proto_item_add_subtree(parameter_item, ett_sctp_chunk_parameter);
+  if (!(chunk_tree || (dissecting_init_init_ack_chunk && (type == IPV4ADDRESS_PARAMETER_ID || type == IPV6ADDRESS_PARAMETER_ID))))
+    return;
 
-  type_item = proto_tree_add_item(parameter_tree, hf_parameter_type,   parameter_tvb, PARAMETER_TYPE_OFFSET,   PARAMETER_TYPE_LENGTH,   NETWORK_BYTE_ORDER);
-  type_tree = proto_item_add_subtree(type_item, ett_sctp_parameter_type);
-  proto_tree_add_item(type_tree, hf_parameter_bit_1,  parameter_tvb, PARAMETER_TYPE_OFFSET,  PARAMETER_TYPE_LENGTH,  NETWORK_BYTE_ORDER);
-  proto_tree_add_item(type_tree, hf_parameter_bit_2,  parameter_tvb, PARAMETER_TYPE_OFFSET,  PARAMETER_TYPE_LENGTH,  NETWORK_BYTE_ORDER);
-  proto_tree_add_item(parameter_tree, hf_parameter_length, parameter_tvb, PARAMETER_LENGTH_OFFSET, PARAMETER_LENGTH_LENGTH, NETWORK_BYTE_ORDER);
+  if (chunk_tree) {
+    parameter_item = proto_tree_add_text(chunk_tree, parameter_tvb, PARAMETER_HEADER_OFFSET, tvb_length(parameter_tvb), "%s parameter", val_to_str(type, parameter_identifier_values, "Unknown"));
+    parameter_tree = proto_item_add_subtree(parameter_item, ett_sctp_chunk_parameter);
 
+    type_item = proto_tree_add_item(parameter_tree, hf_parameter_type,   parameter_tvb, PARAMETER_TYPE_OFFSET,   PARAMETER_TYPE_LENGTH,   NETWORK_BYTE_ORDER);
+    type_tree = proto_item_add_subtree(type_item, ett_sctp_parameter_type);
+    proto_tree_add_item(type_tree, hf_parameter_bit_1,  parameter_tvb, PARAMETER_TYPE_OFFSET,  PARAMETER_TYPE_LENGTH,  NETWORK_BYTE_ORDER);
+    proto_tree_add_item(type_tree, hf_parameter_bit_2,  parameter_tvb, PARAMETER_TYPE_OFFSET,  PARAMETER_TYPE_LENGTH,  NETWORK_BYTE_ORDER);
+    proto_tree_add_item(parameter_tree, hf_parameter_length, parameter_tvb, PARAMETER_LENGTH_OFFSET, PARAMETER_LENGTH_LENGTH, NETWORK_BYTE_ORDER);
+  } else {
+    parameter_item = NULL;
+    parameter_tree = NULL;
+  }
+  
   switch(type) {
   case HEARTBEAT_INFO_PARAMETER_ID:
     dissect_heartbeat_info_parameter(parameter_tvb, parameter_tree, parameter_item);
@@ -1334,6 +1349,7 @@
 static gboolean
 dissect_data_chunk(tvbuff_t *chunk_tvb, packet_info *pinfo, proto_tree *tree, proto_tree *chunk_tree, proto_item *chunk_item, proto_item *flags_item)
 {
+  guint number_of_ppid;
   guint16 payload_length;
   guint32 payload_proto_id;
   tvbuff_t *payload_tvb;
@@ -1341,6 +1357,15 @@
   guint8 e_bit, b_bit, u_bit;
 	
   payload_proto_id  = tvb_get_ntohl(chunk_tvb, DATA_CHUNK_PAYLOAD_PROTOCOL_ID_OFFSET);
+  
+  /* insert the PPID in the pinfo structure if it is non-zero, not already there and there is still room */
+  if (payload_proto_id) {
+    for(number_of_ppid = 0; number_of_ppid < MAX_NUMBER_OF_PPIDS; number_of_ppid++)
+      if ((pinfo->ppid[number_of_ppid] == 0) || (pinfo->ppid[number_of_ppid] == payload_proto_id))
+        break;
+    if ((number_of_ppid < MAX_NUMBER_OF_PPIDS) && (pinfo->ppid[number_of_ppid] == 0))
+      pinfo->ppid[number_of_ppid] = payload_proto_id;
+  }
 
   if (chunk_tree) {
     proto_item_set_len(chunk_item, DATA_CHUNK_HEADER_LENGTH);
@@ -1431,15 +1456,14 @@
     proto_tree_add_item(chunk_tree, hf_init_chunk_number_of_inbound_streams,  chunk_tvb, INIT_CHUNK_NUMBER_OF_INBOUND_STREAMS_OFFSET,  INIT_CHUNK_NUMBER_OF_INBOUND_STREAMS_LENGTH,  NETWORK_BYTE_ORDER);
     proto_tree_add_item(chunk_tree, hf_init_chunk_initial_tsn,                chunk_tvb, INIT_CHUNK_INITIAL_TSN_OFFSET,                INIT_CHUNK_INITIAL_TSN_LENGTH,                NETWORK_BYTE_ORDER);
 
-    /* handle variable paramters */
-    parameters_length = tvb_get_ntohs(chunk_tvb, CHUNK_LENGTH_OFFSET) - INIT_CHUNK_FIXED_PARAMTERS_LENGTH - CHUNK_HEADER_LENGTH;
-    parameters_tvb = tvb_new_subset(chunk_tvb, INIT_CHUNK_VARIABLE_LENGTH_PARAMETER_OFFSET, parameters_length, parameters_length);
-    dissect_parameters(parameters_tvb, pinfo, chunk_tree, NULL, TRUE);
-
     proto_item_append_text(chunk_item, " (Outbound streams: %u, inbound streams: %u)",
                            tvb_get_ntohs(chunk_tvb, INIT_CHUNK_NUMBER_OF_OUTBOUND_STREAMS_OFFSET),
                            tvb_get_ntohs(chunk_tvb, INIT_CHUNK_NUMBER_OF_INBOUND_STREAMS_OFFSET));
   }
+  /* handle variable paramters */
+  parameters_length = tvb_get_ntohs(chunk_tvb, CHUNK_LENGTH_OFFSET) - INIT_CHUNK_FIXED_PARAMTERS_LENGTH - CHUNK_HEADER_LENGTH;
+  parameters_tvb = tvb_new_subset(chunk_tvb, INIT_CHUNK_VARIABLE_LENGTH_PARAMETER_OFFSET, parameters_length, parameters_length);
+  dissect_parameters(parameters_tvb, pinfo, chunk_tree, NULL, TRUE);
 }
 
 static void
@@ -1457,15 +1481,14 @@
     proto_tree_add_item(chunk_tree, hf_initack_chunk_number_of_inbound_streams,  chunk_tvb, INIT_CHUNK_NUMBER_OF_INBOUND_STREAMS_OFFSET,  INIT_CHUNK_NUMBER_OF_INBOUND_STREAMS_LENGTH,  NETWORK_BYTE_ORDER);
     proto_tree_add_item(chunk_tree, hf_initack_chunk_initial_tsn,                chunk_tvb, INIT_CHUNK_INITIAL_TSN_OFFSET,                INIT_CHUNK_INITIAL_TSN_LENGTH,                NETWORK_BYTE_ORDER);
 
-    /* handle variable paramters */
-    parameters_length = tvb_get_ntohs(chunk_tvb, CHUNK_LENGTH_OFFSET) - INIT_CHUNK_FIXED_PARAMTERS_LENGTH - CHUNK_HEADER_LENGTH;
-    parameters_tvb = tvb_new_subset(chunk_tvb, INIT_CHUNK_VARIABLE_LENGTH_PARAMETER_OFFSET, parameters_length, parameters_length);
-    dissect_parameters(parameters_tvb, pinfo, chunk_tree, NULL, TRUE);
-
     proto_item_append_text(chunk_item, " (Outbound streams: %u, inbound streams: %u)",
                            tvb_get_ntohs(chunk_tvb, INIT_CHUNK_NUMBER_OF_OUTBOUND_STREAMS_OFFSET),
                            tvb_get_ntohs(chunk_tvb, INIT_CHUNK_NUMBER_OF_INBOUND_STREAMS_OFFSET));
   }
+  /* handle variable paramters */
+  parameters_length = tvb_get_ntohs(chunk_tvb, CHUNK_LENGTH_OFFSET) - INIT_CHUNK_FIXED_PARAMTERS_LENGTH - CHUNK_HEADER_LENGTH;
+  parameters_tvb = tvb_new_subset(chunk_tvb, INIT_CHUNK_VARIABLE_LENGTH_PARAMETER_OFFSET, parameters_length, parameters_length);
+  dissect_parameters(parameters_tvb, pinfo, chunk_tree, NULL, TRUE);
 }
 
 #define SACK_CHUNK_CUMULATIVE_TSN_ACK_LENGTH    4
@@ -1571,7 +1594,7 @@
 {
   guint16 causes_length;
   tvbuff_t *causes_tvb;
-	proto_tree *flags_tree;
+  proto_tree *flags_tree;
 	
   if (chunk_tree) {
     flags_tree  = proto_item_add_subtree(flags_item, ett_sctp_abort_chunk_flags);
@@ -1660,8 +1683,8 @@
 
 
 static const true_false_string sctp_shutdown_complete_chunk_t_bit_value = {
-  "No TCB destroyed",
-  "TCB destroyed"
+  "Tag reflected",
+  "Tag not reflected"
 };
 
 
@@ -2104,7 +2127,8 @@
 dissect_sctp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
   guint16 source_port, destination_port;
-  
+  guint number_of_ppid;
+
   /* Extract the common header */
   source_port      = tvb_get_ntohs(tvb, SOURCE_PORT_OFFSET);
   destination_port = tvb_get_ntohs(tvb, DESTINATION_PORT_OFFSET);
@@ -2122,6 +2146,10 @@
   if (check_col(pinfo->cinfo, COL_INFO))
     col_set_str(pinfo->cinfo, COL_INFO, "");
       
+  /* is this done automatically ? */
+  for(number_of_ppid = 0; number_of_ppid < MAX_NUMBER_OF_PPIDS; number_of_ppid++)
+    pinfo->ppid[number_of_ppid] = 0;
+
   memset(&sctp_info, 0, sizeof(struct _sctp_info));
   sctp_info.verification_tag = tvb_get_ntohl(tvb, VERIFICATION_TAG_OFFSET);
   dissect_sctp_packet(tvb, pinfo, tree, FALSE);
diff -urN ethereal-0.10.6/epan/dissectors/packet-sdlc.c ethereal-0.10.7/epan/dissectors/packet-sdlc.c
--- ethereal-0.10.6/epan/dissectors/packet-sdlc.c	2004-08-12 17:42:29.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-sdlc.c	2004-10-20 17:35:00.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-sdlc.c
  * Routines for SDLC frame disassembly
  *
- * $Id: packet-sdlc.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-sdlc.c 12127 2004-09-28 23:48:02Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -30,7 +30,7 @@
 #include <glib.h>
 #include <string.h>
 #include <epan/packet.h>
-#include "xdlc.h"
+#include <epan/xdlc.h>
 
 /*
  * See
diff -urN ethereal-0.10.6/epan/dissectors/packet-sdp.c ethereal-0.10.7/epan/dissectors/packet-sdp.c
--- ethereal-0.10.6/epan/dissectors/packet-sdp.c	2004-08-12 17:42:15.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-sdp.c	2004-10-20 17:34:50.000000000 -0500
@@ -4,7 +4,7 @@
  * Jason Lango <jal@netapp.com>
  * Liberally copied from packet-http.c, by Guy Harris <guy@alum.mit.edu>
  *
- * $Id: packet-sdp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-sdp.c 11854 2004-08-30 10:03:54Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -383,13 +383,13 @@
 		    src_addr.data=(char *)&ipv4_address;
 
 		    if(rtp_handle){
-				rtp_add_address(pinfo, (char *)&ipv4_address, ipv4_port, 0,
+				rtp_add_address(pinfo, &src_addr, ipv4_port, 0,
 				                "SDP", pinfo->fd->num);
 		    }
 
 		    if(rtcp_handle){
 				ipv4_port++;
-				rtcp_add_address(pinfo, (char *)&ipv4_address, ipv4_port, 0,
+				rtcp_add_address(pinfo, &src_addr, ipv4_port, 0,
 				                 "SDP", pinfo->fd->num);
 		    }
 	    }
diff -urN ethereal-0.10.6/epan/dissectors/packet-ses.c ethereal-0.10.7/epan/dissectors/packet-ses.c
--- ethereal-0.10.6/epan/dissectors/packet-ses.c	2004-08-12 17:42:29.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ses.c	2004-10-20 17:35:00.000000000 -0500
@@ -2,7 +2,7 @@
 *
 * Routine to dissect ISO 8327-1 OSI Session Protocol packets
 *
-* $Id: packet-ses.c 11410 2004-07-18 18:06:47Z gram $
+* $Id: packet-ses.c 12115 2004-09-27 22:55:15Z guy $
 *
 * Yuriy Sidelnikov <YSidelnikov@hotmail.com>
 *
@@ -37,7 +37,7 @@
 
 #include "packet-ses.h"
 #include "packet-frame.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #include <epan/strutil.h>
 
@@ -1724,8 +1724,8 @@
 	ses_module = prefs_register_protocol(proto_ses, NULL);
 /*
 	prefs_register_bool_preference(ses_module, "desegment",
-	    "Desegment all session packets ",
-	    "Whether the session dissector should desegment all messages spanning multiple SES segments",
+	    "Reassemble session packets ",
+	    "Whether the session dissector should reassemble messages spanning multiple SES segments",
 	    &ses_desegment);  */
 
 	/*
@@ -1781,6 +1781,8 @@
 	/* define sub dissector */
 	pres_handle = find_dissector("pres");
 
-	/* add our session dissector to cotp dissector list */
+	/* add our session dissector to cotp dissector list 
+	 * and cotp_is dissector list*/
 	heur_dissector_add("cotp", dissect_ses_heur, proto_ses);
+	heur_dissector_add("cotp_is", dissect_ses_heur, proto_ses);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-sigcomp.c ethereal-0.10.7/epan/dissectors/packet-sigcomp.c
--- ethereal-0.10.6/epan/dissectors/packet-sigcomp.c	2004-08-12 17:42:08.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-sigcomp.c	2004-10-20 17:34:46.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for Signaling Compression (SigComp) dissection.
  * Copyright 2004, Anders Broman <anders.broman@ericsson.com>
  *
- * $Id: packet-sigcomp.c 11445 2004-07-20 19:04:48Z etxrab $
+ * $Id: packet-sigcomp.c 12239 2004-10-08 16:42:27Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -25,7 +25,7 @@
  * http://www.ietf.org/rfc/rfc3320.txt?number=3320
  * http://www.ietf.org/rfc/rfc3321.txt?number=3321
  * Useful links :
- * http://www.ietf.org/internet-drafts/draft-ietf-rohc-sigcomp-impl-guide-02.txt
+ * http://www.ietf.org/internet-drafts/draft-ietf-rohc-sigcomp-impl-guide-03.txt
  * http://www.ietf.org/internet-drafts/draft-ietf-rohc-sigcomp-sip-01.txt
  */
 
@@ -45,9 +45,11 @@
 
 #include <epan/packet.h>
 #include "prefs.h"
+#include "sigcomp-udvm.h"
 
 /* Initialize the protocol and registered fields */
 static int proto_sigcomp							= -1;
+static int proto_raw_sigcomp						= -1;
 static int hf_sigcomp_t_bit							= -1;
 static int hf_sigcomp_len							= -1;
 static int hf_sigcomp_returned_feedback_item		= -1;
@@ -61,7 +63,9 @@
 static int hf_udvm_literal_bytecode					= -1;
 static int hf_udvm_operand							= -1;
 static int hf_udvm_length							= -1;
+static int hf_udvm_addr_length						= -1;
 static int hf_udvm_destination						= -1;
+static int hf_udvm_addr_destination					= -1;
 static int hf_udvm_at_address						= -1;
 static int hf_udvm_address							= -1;
 static int hf_udvm_literal_num						= -1;
@@ -79,8 +83,9 @@
 static int hf_udvm_operand_2						= -1;
 static int hf_udvm_operand_2_addr					= -1;
 static int hf_udvm_j								= -1;
+static int hf_udvm_addr_j							= -1;
 static int hf_udvm_output_start						= -1;
-static int hf_udvm_output_start_addr				= -1;
+static int hf_udvm_addr_output_start				= -1;
 static int hf_udvm_output_length					= -1;
 static int hf_udvm_output_length_addr				= -1;
 static int hf_udvm_req_feedback_loc					= -1;
@@ -94,13 +99,16 @@
 static int hf_udvm_upper_bound						= -1;
 static int hf_udvm_uncompressed						= -1;
 static int hf_udvm_offset							= -1;
+static int hf_udvm_addr_offset						= -1;
 static int hf_udvm_start_value						= -1;
 
 /* Initialize the subtree pointers */
-static gint ett_sigcomp			= -1;
-static gint ett_sigcomp_udvm	= -1;
-
+static gint ett_sigcomp				= -1;
+static gint ett_sigcomp_udvm		= -1;
+static gint ett_sigcomp_udvm_exe	= -1;
+static gint ett_raw_text			= -1;
 
+static dissector_handle_t sip_handle;
 /* set the tcp port */
 static guint SigCompUDPPort1 = 5555;
 static guint SigCompUDPPort2 = 6666;
@@ -109,6 +117,9 @@
 static gboolean display_udvm_bytecode = FALSE;
 /* Default preference wether to dissect the UDVM code or not */
 static gboolean dissect_udvm_code = TRUE;
+static gboolean display_raw_txt = FALSE;
+/* Default preference wether to print debug info at execution of UDVM */
+static gint udvm_print_detail_level = 0;
 
 /* Value strings */
 static const value_string length_encoding_vals[] = {
@@ -248,6 +259,7 @@
 
 static int dissect_udvm_reference_operand(tvbuff_t *udvm_tvb, proto_tree *sigcomp_udvm_tree, 
 							   gint offset, gint *start_offset, guint16 *value);
+static void tvb_raw_text_add(tvbuff_t *tvb, proto_tree *tree);
 
 
 /* Code to actually dissect the packets */
@@ -256,24 +268,29 @@
 {
 
 /* Set up structures needed to add the protocol subtree and manage it */
-	tvbuff_t *udvm_tvb;
-	proto_item *ti, *udvm_item;
-	proto_tree *sigcomp_tree, *sigcomp_udvm_tree;
+	tvbuff_t *udvm_tvb, *msg_tvb;
+	tvbuff_t *decomp_tvb = NULL;
+	proto_item *ti, *udvm_bytecode_item, *udvm_exe_item;
+	proto_tree *sigcomp_tree, *sigcomp_udvm_tree, *sigcomp_udvm_exe_tree;
 	gint offset = 0;
+	gint bytecode_offset;
 	gint partial_state_len;
 	guint octet;
 	guint8 returned_feedback_field[128];
 	guint8 partial_state[12];
 	guint tbit;
 	guint16 len = 0;
+	guint16 bytecode_len = 0;
 	guint destination;
+	gint msg_len = 0;
+
 /* Is this a SigComp message or not ? */
 	octet = tvb_get_guint8(tvb, offset);
 	if ((octet  & 0xf8) != 0xf8)
 	 return 0;
 
 /* Make entries in Protocol column and Info column on summary display */
-	if (check_col(pinfo->cinfo, COL_PROTOCOL)) 
+	if (check_col(pinfo->cinfo, COL_PROTOCOL))
 		col_set_str(pinfo->cinfo, COL_PROTOCOL, "SIGCOMP");
 
 	if (check_col(pinfo->cinfo, COL_INFO)) 
@@ -413,26 +430,45 @@
 		proto_tree_add_item(sigcomp_tree,hf_sigcomp_destination, tvb, (offset+ 1), 1, FALSE);
 		offset = offset +2;
 
-		udvm_item = proto_tree_add_text(sigcomp_tree, tvb, offset, len, 
-			"Uploaded UDVM bytecode %u (0x%x) bytes", len, len);
-		sigcomp_udvm_tree = proto_item_add_subtree( udvm_item, ett_sigcomp_udvm);
+		bytecode_len = len;
+		bytecode_offset = offset;
+		udvm_bytecode_item = proto_tree_add_text(sigcomp_tree, tvb, bytecode_offset, bytecode_len, 
+			"Uploaded UDVM bytecode %u (0x%x) bytes", bytecode_len, bytecode_len);
+		sigcomp_udvm_tree = proto_item_add_subtree( udvm_bytecode_item, ett_sigcomp_udvm);
 
 		udvm_tvb = tvb_new_subset(tvb, offset, len, len);
 		if ( dissect_udvm_code )
 			dissect_udvm_bytecode(udvm_tvb, sigcomp_udvm_tree, destination); 
-				offset = offset + len;
+
+		offset = offset + len;
+		msg_len = tvb_reported_length_remaining(tvb, offset);
 
 		proto_tree_add_text(sigcomp_tree, tvb, offset, -1, "Remaining SigComp message %u bytes",
 			tvb_reported_length_remaining(tvb, offset));
+
+		msg_tvb = tvb_new_subset(tvb, offset, msg_len, msg_len);
+
+		udvm_exe_item = proto_tree_add_text(sigcomp_tree, tvb, bytecode_offset, bytecode_len, 
+			"UDVM execution trace");
+		sigcomp_udvm_exe_tree = proto_item_add_subtree( udvm_exe_item, ett_sigcomp_udvm_exe);
+		decomp_tvb = decompress_sigcomp_message(udvm_tvb, msg_tvb, pinfo,
+						   sigcomp_udvm_exe_tree, destination, udvm_print_detail_level);
+		if ( decomp_tvb ){
+			proto_tree_add_text(sigcomp_tree, decomp_tvb, 0, -1,"SigComp message Decompressed WOHO!!");
+			if ( display_raw_txt )
+				tvb_raw_text_add(decomp_tvb, tree);
+			if (check_col(pinfo->cinfo, COL_PROTOCOL)){
+				col_append_str(pinfo->cinfo, COL_PROTOCOL, "/");
+				col_set_fence(pinfo->cinfo,COL_PROTOCOL);
+			}
+			call_dissector(sip_handle, decomp_tvb, pinfo, tree);
+		}
+
 	}
 	return tvb_length(tvb);
 }
 
 		
-
-/* Continue adding tree items to process the packet here */
-/* If this protocol has a sub-dissector call it here, see section 1.8 */
-
 #define	SIGCOMP_INSTR_DECOMPRESSION_FAILURE     0
 #define SIGCOMP_INSTR_AND                       1
 #define SIGCOMP_INSTR_OR                        2
@@ -675,7 +711,6 @@
 			break;
 
 		case SIGCOMP_INSTR_SORT_DESCENDING: /* 12 SORT-DESCENDING (%start, %n, %k) */
-			/* while programming stop while loop */
 			offset = offset + tvb_reported_length_remaining(udvm_tvb, offset);
 			break;
 		case SIGCOMP_INSTR_SHA_1: /* 13 SHA-1 (%position, %length, %destination) */
@@ -688,8 +723,13 @@
 			/*  %length, */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, FALSE,&start_offset, &value, &is_memory_address);
 			len = offset - start_offset;
-			proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_length, 
-				udvm_tvb, start_offset, len, value);
+			if ( is_memory_address ){
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_addr_length, 
+					udvm_tvb, start_offset, len, value);
+			}else{
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_length, 
+					udvm_tvb, start_offset, len, value);
+			}
 
 			/* $destination */
 			offset = dissect_udvm_reference_operand(udvm_tvb, sigcomp_udvm_tree, offset, &start_offset, &value);
@@ -757,7 +797,8 @@
 			break;
 
 		case SIGCOMP_INSTR_POP: /* 17 POP (%address) */
-			/* %address */			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, TRUE, &start_offset, &value, &is_memory_address);
+			/* %address */			
+			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, TRUE, &start_offset, &value, &is_memory_address);
 
 			len = offset - start_offset;
 			proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_address, 
@@ -774,8 +815,13 @@
 			/*  %length, */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, FALSE,&start_offset, &value, &is_memory_address);
 			len = offset - start_offset;
-			proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_length, 
-				udvm_tvb, start_offset, len, value);
+			if ( is_memory_address ){
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_addr_length, 
+					udvm_tvb, start_offset, len, value);
+			}else{
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_length, 
+					udvm_tvb, start_offset, len, value);
+			}
 
 			/* $destination */
 			offset = dissect_udvm_reference_operand(udvm_tvb, sigcomp_udvm_tree, offset, &start_offset, &value);
@@ -794,8 +840,13 @@
 			/*  %length, */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, FALSE,&start_offset, &value, &is_memory_address);
 			len = offset - start_offset;
-			proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_length, 
-				udvm_tvb, start_offset, len, value);
+			if ( is_memory_address ){
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_addr_length, 
+					udvm_tvb, start_offset, len, value);
+			}else{
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_length, 
+					udvm_tvb, start_offset, len, value);
+			}
 
 			/* $destination */
 			offset = dissect_udvm_reference_operand(udvm_tvb, sigcomp_udvm_tree, offset, &start_offset, &value);
@@ -808,14 +859,24 @@
 			/* %offset */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, FALSE,&start_offset, &value, &is_memory_address);
 			len = offset - start_offset;
-			proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_offset, 
-				udvm_tvb, start_offset, len, value);
+			if ( is_memory_address ){
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_addr_offset, 
+					udvm_tvb, start_offset, len, value);
+			}else{
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_offset, 
+					udvm_tvb, start_offset, len, value);
+			}
 
 			/*  %length, */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, FALSE,&start_offset, &value, &is_memory_address);
 			len = offset - start_offset;
-			proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_length, 
-				udvm_tvb, start_offset, len, value);
+			if ( is_memory_address ){
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_addr_length, 
+					udvm_tvb, start_offset, len, value);
+			}else{
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_length, 
+					udvm_tvb, start_offset, len, value);
+			}
 
 			/* $destination */
 			offset = dissect_udvm_reference_operand(udvm_tvb, sigcomp_udvm_tree, offset, &start_offset, &value);
@@ -834,8 +895,13 @@
 			/*  %length, */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, FALSE, &start_offset, &value, &is_memory_address);
 			len = offset - start_offset;
-			proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_length, 
-				udvm_tvb, start_offset, len, value);
+			if ( is_memory_address ){
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_addr_length, 
+					udvm_tvb, start_offset, len, value);
+			}else{
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_length, 
+					udvm_tvb, start_offset, len, value);
+			}
 
 			/* %start_value */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, FALSE,&start_offset, &value, &is_memory_address);
@@ -921,6 +987,7 @@
 				udvm_tvb, start_offset, len, value);
 			break;
 		case SIGCOMP_INSTR_RETURN: /* 25 POP and return */
+
 		break;
 
 		case SIGCOMP_INSTR_SWITCH: /* 26 SWITCH (#n, %j, @address_0, @address_1, ... , @address_n-1) */
@@ -936,10 +1003,10 @@
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, FALSE,&start_offset, &value, &is_memory_address);
 			len = offset - start_offset;
 			if ( is_memory_address ){
-				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_addr_value, 
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_addr_j, 
 					udvm_tvb, start_offset, len, value);
 			}else{
-				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_value, 
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_j, 
 					udvm_tvb, start_offset, len, value);
 			}
 
@@ -975,8 +1042,13 @@
 			/* %length */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, FALSE,&start_offset, &value, &is_memory_address);
 			len = offset - start_offset;
-			proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_length, 
-				udvm_tvb, start_offset, len, value);
+			if ( is_memory_address ){
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_addr_length, 
+					udvm_tvb, start_offset, len, value);
+			}else{
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_length, 
+					udvm_tvb, start_offset, len, value);
+			}
 
 			/* @address */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, TRUE, &start_offset, &value, &is_memory_address);
@@ -992,14 +1064,24 @@
 			/* %length */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, FALSE,&start_offset, &value, &is_memory_address);
 			len = offset - start_offset;
-			proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_length, 
-				udvm_tvb, start_offset, len, value);
+			if ( is_memory_address ){
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_addr_length, 
+					udvm_tvb, start_offset, len, value);
+			}else{
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_length, 
+					udvm_tvb, start_offset, len, value);
+			}
 
 			/* %destination */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, FALSE,&start_offset, &value, &is_memory_address);
 			len = offset - start_offset;
-			proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_destination, 
-				udvm_tvb, start_offset, len, value);
+			if ( is_memory_address ){
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_addr_destination, 
+					udvm_tvb, start_offset, len, value);
+			}else{
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_destination, 
+					udvm_tvb, start_offset, len, value);
+			}
 
 			/* @address */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, TRUE, &start_offset, &value, &is_memory_address);
@@ -1013,14 +1095,24 @@
 			/* %length */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, FALSE,&start_offset, &value, &is_memory_address);
 			len = offset - start_offset;
-			proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_length, 
-				udvm_tvb, start_offset, len, value);
+			if ( is_memory_address ){
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_addr_length, 
+					udvm_tvb, start_offset, len, value);
+			}else{
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_length, 
+					udvm_tvb, start_offset, len, value);
+			}
 
 			/* %destination */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, FALSE,&start_offset, &value, &is_memory_address);
 			len = offset - start_offset;
-			proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_destination, 
-				udvm_tvb, start_offset, len, value);
+			if ( is_memory_address ){
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_addr_destination, 
+					udvm_tvb, start_offset, len, value);
+			}else{
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_destination, 
+					udvm_tvb, start_offset, len, value);
+			}
 
 			/* @address */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, TRUE, &start_offset, &value, &is_memory_address);
@@ -1039,9 +1131,13 @@
 			/* %destination */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, FALSE,&start_offset, &value, &is_memory_address);
 			len = offset - start_offset;
-			proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_destination, 
-				udvm_tvb, start_offset, len, value);
-
+			if ( is_memory_address ){
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_addr_destination, 
+					udvm_tvb, start_offset, len, value);
+			}else{
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_destination, 
+					udvm_tvb, start_offset, len, value);
+			}
 			/* @address */
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, TRUE, &start_offset, &value, &is_memory_address);
 			len = offset - start_offset;
@@ -1220,7 +1316,7 @@
 			offset = dissect_udvm_multitype_operand(udvm_tvb, sigcomp_udvm_tree, offset, TRUE, &start_offset, &value, &is_memory_address);
 			len = offset - start_offset;
 			if ( is_memory_address ) {
-				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_output_start, 
+				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_addr_output_start, 
 					udvm_tvb, start_offset, len, value);
 			}else{
 				proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_output_start, 
@@ -1317,7 +1413,6 @@
 			break;
 
 		default:
-			/* while programming stop while loop */
 			offset = offset + tvb_reported_length_remaining(udvm_tvb, offset);			
 			break;
 		}
@@ -1458,7 +1553,7 @@
 		if ( display_udvm_bytecode )
 			proto_tree_add_uint(sigcomp_udvm_tree, hf_udvm_reference_bytecode,
 				udvm_tvb, offset, 1, display_bytecode);
-		operand = ( bytecode & 0x3f);
+		operand = ( bytecode & 0x7f);
 		*value = (operand * 2);
 		*start_offset = offset;
 		offset ++;
@@ -1649,6 +1744,32 @@
 	}
 	return offset;
 }
+
+static void
+tvb_raw_text_add(tvbuff_t *tvb, proto_tree *tree)
+{
+        proto_tree *raw_tree = NULL;
+        proto_item *ti = NULL;
+        int offset, next_offset, linelen;
+
+	if(tree) {
+		ti = proto_tree_add_item(tree, proto_raw_sigcomp, tvb, 0, -1, FALSE);
+		raw_tree = proto_item_add_subtree(ti, ett_raw_text);
+	}
+
+        offset = 0;
+
+        while (tvb_offset_exists(tvb, offset)) {
+                tvb_find_line_end(tvb, offset, -1, &next_offset, FALSE);
+                linelen = next_offset - offset;
+                if(raw_tree) {
+			proto_tree_add_text(raw_tree, tvb, offset, linelen,
+			    "%s", tvb_format_text(tvb, offset, linelen));
+		}
+                offset = next_offset;
+        }
+}
+
 /* Register the protocol with Ethereal */
 
 
@@ -1680,6 +1801,8 @@
 	dissector_add("udp.port", SigCompUDPPort1, sigcomp_handle);
 	dissector_add("udp.port", SigCompUDPPort2, sigcomp_handle);
 
+	sip_handle = find_dissector("sip");
+
 
 }
 
@@ -1758,11 +1881,21 @@
 			FT_UINT16, BASE_DEC, NULL, 0x0,          
 			"Length", HFILL }
 		},
+		{ &hf_udvm_addr_length,
+			{ " %Length[memory address]", "sigcomp.udvm.addr.length",
+			FT_UINT16, BASE_DEC, NULL, 0x0,          
+			"Length", HFILL }
+		},
 		{ &hf_udvm_destination,
 			{ " %Destination", "sigcomp.udvm.destination",
 			FT_UINT16, BASE_DEC, NULL, 0x0,          
 			"Destination", HFILL }
 		},
+		{ &hf_udvm_addr_destination,
+			{ " %Destination[memory address]", "sigcomp.udvm.addr.destination",
+			FT_UINT16, BASE_DEC, NULL, 0x0,          
+			"Destination", HFILL }
+		},
 		{ &hf_udvm_at_address,
 			{ " @Address(mem_add_of_inst + D) mod 2^16)", "sigcomp.udvm.at.address",
 			FT_UINT16, BASE_DEC, NULL, 0x0,          
@@ -1849,13 +1982,18 @@
 			FT_UINT16, BASE_DEC, NULL, 0x0,          
 			"j", HFILL }
 		},
+		{ &hf_udvm_addr_j,
+			{ " %j[memory address]", "sigcomp.udvm.addr.j",
+			FT_UINT16, BASE_DEC, NULL, 0x0,          
+			"j", HFILL }
+		},
 		{ &hf_udvm_output_start,
 			{ " %Output_start", "sigcomp.output.start",
 			FT_UINT16, BASE_DEC, NULL, 0x0,          
 			"Output start", HFILL }
 		},
-		{ &hf_udvm_output_start_addr,
-			{ " %Output_start[memory address]", "sigcomp.output.start.addr",
+		{ &hf_udvm_addr_output_start,
+			{ " %Output_start[memory address]", "sigcomp.addr.output.start",
 			FT_UINT16, BASE_DEC, NULL, 0x0,          
 			"Output start", HFILL }
 		},
@@ -1929,23 +2067,45 @@
 			FT_UINT16, BASE_DEC, NULL, 0x0,          
 			"Offset", HFILL }
 		},
+		{ &hf_udvm_addr_offset,
+			{ " %Offset[memory address]", "sigcomp.udvm.addr.offset",
+			FT_UINT16, BASE_DEC, NULL, 0x0,          
+			"Offset", HFILL }
+		},
 	};
 
 /* Setup protocol subtree array */
 	static gint *ett[] = {
 		&ett_sigcomp,
 		&ett_sigcomp_udvm,
+		&ett_sigcomp_udvm_exe,
+	};
+	static gint *ett_raw[] = {
+		&ett_raw_text,
 	};
 
 	module_t *sigcomp_module;
+    static enum_val_t udvm_detail_vals[] = {
+	{"no-printout", "No-Printout", 0},
+	{"low-detail", "Low-detail", 1},
+	{"medium-detail", "medium-detail", 2},
+	{"high-detail", "High-detail", 3},
+	{NULL, NULL, -1}
+    };
+
 
 /* Register the protocol name and description */
 	proto_sigcomp = proto_register_protocol("Signaling Compression",
 	    "SIGCOMP", "sigcomp");
+	proto_raw_sigcomp = proto_register_protocol("Decompressed SigComp message as raw text",
+		"Raw_SigComp", "raw_sigcomp");
+
+	new_register_dissector("sigcomp", dissect_sigcomp, proto_sigcomp);
 
 /* Required function calls to register the header fields and subtrees used */
 	proto_register_field_array(proto_sigcomp, hf, array_length(hf));
 	proto_register_subtree_array(ett, array_length(ett));
+	proto_register_subtree_array(ett_raw, array_length(ett_raw));
 
 /* Register a configuration option for port */
 	sigcomp_module = prefs_register_protocol(proto_sigcomp,
@@ -1971,6 +2131,14 @@
 								   "Display the bytecode of operands",
 								   "preference wether to display the bytecode in UDVM operands or not",
 								   &display_udvm_bytecode);
+	prefs_register_bool_preference(sigcomp_module, "display.decomp.msg.as.txt",
+								   "Displays the decompressed message as text",
+								   "preference wether to display the decompressed message as raw text or not",
+								   &display_raw_txt);
+    prefs_register_enum_preference(sigcomp_module, "show.udvm.execution",
+      "Level of detail of UDVM execution",
+      "0 = UDVM executes silently, then incrising detail about execution of UDVM instructions, Warning! CPU intense at high detail",
+      &udvm_print_detail_level, udvm_detail_vals, FALSE);
 
 
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-sip.c ethereal-0.10.7/epan/dissectors/packet-sip.c
--- ethereal-0.10.6/epan/dissectors/packet-sip.c	2004-08-12 17:41:58.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-sip.c	2004-10-20 17:34:37.000000000 -0500
@@ -18,7 +18,7 @@
  * Copyright 2000, Heikki Vatiainen <hessu@cs.tut.fi>
  * Copyright 2001, Jean-Francois Mule <jfm@cablelabs.com>
  *
- * $Id: packet-sip.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-sip.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -50,13 +50,13 @@
 #include <string.h>
 #include <ctype.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #include <glib.h>
 #include <epan/packet.h>
 
 #include "packet-sip.h"
-#include "tap.h"
+#include <epan/tap.h>
 
 #define TCP_PORT_SIP 5060
 #define UDP_PORT_SIP 5060
@@ -111,22 +111,23 @@
         "PUBLISH"
 };
 
-/* from RFC 3261 */
-/* Updated with info from http://www.iana.org/assignments/sip-parameters */
-/* (last updated 2003-10-31) */
-/* Added two headsers ( Etag and If-Match )from http://www.ietf.org/internet-drafts/draft-ietf-sip-publish-01.txt */
+/* from RFC 3261 
+ * Updated with info from http://www.iana.org/assignments/sip-parameters 
+ * (last updated 2004-10-17) 
+ */
 typedef struct {
         char *name;
         char *compact_name;
 } sip_header_t;
 static const sip_header_t sip_headers[] = {
-                { "Unknown-header", 			NULL }, /* Pad so that the real headers start at index 1 */
+                { "Unknown-header", 			NULL }, /* 0 Pad so that the real headers start at index 1 */
                 { "Accept", 					NULL },
+                { "Accept-Contact",				"a"	 },  /* 2 RFC3841  */
                 { "Accept-Encoding", 			NULL },
                 { "Accept-Language", 			NULL },
                 { "Alert-Info", 				NULL },
                 { "Allow", 						NULL },
-                { "Allow-Events", 				NULL },
+                { "Allow-Events", 				"u"  },	/* 7 RFC3265  */
                 { "Authentication-Info",	 	NULL },
                 { "Authorization", 				NULL },
                 { "Call-ID", 					"i"  },
@@ -143,202 +144,233 @@
                 { "Event", 						"o"  },
                 { "Expires", 					NULL },
                 { "From", 						"f"  },
-                { "In-Reply-To", 				NULL },
+                { "In-Reply-To", 				NULL },	/*  24 RFC3261  */
+                { "Join",		 				NULL }, /*  25 RFC-ietf-sip-join-03.txt  */
                 { "Max-Forwards", 				NULL },
                 { "MIME-Version", 				NULL },
                 { "Min-Expires", 				NULL },
+                { "Min-SE",						NULL },  /*  29 RFC-ietf-sip-session-timer-15.txt  */
                 { "Organization", 				NULL },
+                { "P-Access-Network-Info",		NULL },  /*  31 RFC3455  */
+                { "P-Asserted-Identity",        NULL },  /*  32 RFC3325  */
+                { "P-Associated-URI",           NULL },  /*  33 RFC3455  */
+                { "P-Called-Party-ID",          NULL },  /*  34 RFC3455  */
+                { "P-Charging-Function-Addresses",NULL },/*  35 RFC3455  */
+                { "P-Charging-Vector",          NULL },  /*  36 RFC3455  */
+                { "P-DCS-Trace-Party-ID",       NULL },  /*  37 RFC3603  */
+                { "P-DCS-OSPS",                 NULL },  /*  38 RFC3603  */
+                { "P-DCS-Billing-Info",         NULL },  /*  39 RFC3603  */
+                { "P-DCS-LAES",                 NULL },  /*  40 RFC3603  */
+                { "P-DCS-Redirect",             NULL },  /*  41 RFC3603  */
+                { "P-Media-Authorization",      NULL },  /*  42 RFC3313  */
+                { "P-Preferred-Identity",       NULL },  /*  43 RFC3325  */
+                { "P-Visited-Network-ID",       NULL },  /*  44 RFC3455  */
+                { "Path",                       NULL },  /*  45 RFC3327  */
                 { "Priority", 					NULL },
+                { "Privacy",                    NULL },  /*  47 RFC3323  */
                 { "Proxy-Authenticate", 		NULL },
                 { "Proxy-Authorization", 		NULL },
                 { "Proxy-Require", 				NULL },
                 { "RAck", 						NULL },
-                { "RSeq", 						NULL },
+                { "Reason",                     NULL },  /*  53 RFC3326  */
                 { "Record-Route", 				NULL },
-                { "Reply-To", 					NULL },
-                { "Require", 					NULL },
-                { "Retry-After", 				NULL },
-                { "Route", 						NULL },
-                { "Server",			 			NULL },
-                { "Subject",					"s"  },
-                { "Subscription-State", 		NULL },
-                { "Supported",					"k"	 },
-                { "Timestamp",					NULL },
-                { "To",							"t"  },
-                { "Unsupported",				NULL },
-                { "User-Agent", 				NULL },
-                { "Via",			 			"v" },
-                { "Warning",		 			NULL },
-                { "WWW-Authenticate",			NULL },
-                { "P-Access-Network-Info",		NULL },  /*  RFC3455  */
-                { "P-Asserted-Identity",        NULL },  /*  RFC3325  */
-                { "P-Associated-URI",           NULL },  /*  RFC3455  */
-                { "P-Called-Party-ID",          NULL },  /*  RFC3455  */
-                { "P-Charging-Function-Addresses",NULL }, /*  RFC3455  */
-                { "P-Charging-Vector",          NULL },  /*  RFC3455  */
-                { "P-DCS-Trace-Party-ID",       NULL },  /*  RFC3603  */
-                { "P-DCS-OSPS",                 NULL },  /*  RFC3603  */
-                { "P-DCS-Billing-Info",         NULL },  /*  RFC3603  */
-                { "P-DCS-LAES",                 NULL },  /*  RFC3603  */
-                { "P-DCS-Redirect",             NULL },  /*  RFC3603  */
-                { "P-Media-Authorization",      NULL },  /*  RFC3313  */
-                { "P-Preferred-Identity",       NULL },  /*  RFC3325  */
-                { "P-Visited-Network-ID",       NULL },  /*  RFC3455  */
-                { "Path",                       NULL },  /*  RFC3327  */
-                { "Privacy",                    NULL },  /*  RFC3323  */
-                { "Reason",                     NULL },  /*  RFC3326  */
-                { "Refer-To",					"r"  },  /*  RFC3515  */
-                { "Service-Route",				NULL },  /*  RFC3608  */
-                { "SIP-ETag",					NULL },  /*  draft-ietf-sip-publish-03  */
-                { "SIP-If-Match",				NULL },  /*  draft-ietf-sip-publish-03  */
+                { "Referred-By",				"b"  },  /*  55 RFC3892  */
+                { "Reject-Contact",				"j"  },  /*  56 RFC3841  */
+                { "Replaces",					NULL },  /*  57 RFC3891  */
+                { "Reply-To", 					NULL },  /*  58 RFC3261  */
+                { "Request-Disposition",		"d"  },  /*  59 RFC3841  */
+                { "Require", 					NULL },  /*  60 RFC3261  */
+                { "Retry-After", 				NULL },  /*  61 RFC3261  */
+                { "Route", 						NULL },  /*  62 RFC3261  */
+                { "RSeq", 						NULL },  /*  63 RFC3841  */
+                { "Security-Client",			NULL },  /*  64 RFC3329  */
+                { "Security-Server",			NULL },  /*  65 RFC3329  */
+                { "Security-Verify",			NULL },  /*  66 RFC3329  */
+                { "Server",			 			NULL },  /*  67 RFC3261  */
+                { "Service-Route",				NULL },  /*  68 RFC3608  */
+                { "Session-Expires",			"x"  },  /*  69 RFC-ietf-sip-session-timer-15.txt  */
+                { "SIP-ETag",					NULL },  /*  70 draft-ietf-sip-publish-03  */
+                { "SIP-If-Match",				NULL },  /*  71 draft-ietf-sip-publish-03  */
+                { "Subject",					"s"  },  /*  72 RFC3261  */
+                { "Subscription-State", 		NULL },  /*  73 RFC3265  */
+                { "Supported",					"k"	 },  /*  74 RFC3261  */
+                { "Timestamp",					NULL },  /*  75 RFC3261  */
+                { "To",							"t"  },  /*  76 RFC3261  */
+                { "Unsupported",				NULL },  /*  77 RFC3261  */
+                { "User-Agent", 				NULL },  /*  78 RFC3261  */
+                { "Via",			 			"v"  },  /*  79 RFC3261  */
+                { "Warning",		 			NULL },  /*  80 RFC3261  */
+                { "WWW-Authenticate",			NULL },  /*  81 RFC3261  */
+                { "Refer-To",					"r"  },  /*  82 RFC3515  */
 
 };
 
 
-#define POS_ACCEPT				1
-#define POS_ACCEPT_ENCODING		2
-#define POS_ACCEPT_LANGUAGE		3
-#define POS_ALERT_INFO			4
-#define POS_ALLOW				5
-#define POS_ALLOW_EVENTS		6
-#define POS_AUTHENTICATION_INFO	7
-#define POS_AUTHORIZATION		8
-#define POS_CALL_ID				9
-#define POS_CALL_INFO			10
-#define POS_CONTACT				11
-#define POS_CONTENT_DISPOSITION	12
-#define POS_CONTENT_ENCODING	13
-#define POS_CONTENT_LANGUAGE	14
-#define POS_CONTENT_LENGTH		15
-#define POS_CONTENT_TYPE		16
-#define POS_CSEQ				17
-#define POS_DATE				18
-#define POS_ERROR_INFO			19
-#define POS_EVENT				20
-#define POS_EXPIRES				21
-#define POS_FROM				22
-#define POS_IN_REPLY_TO			23
-#define POS_MAX_FORWARDS		24
-#define POS_MIME_VERSION		25
-#define POS_MIN_EXPIRES			26
-#define POS_ORGANIZATION		27
-#define POS_PRIORITY			28
-#define POS_PROXY_AUTHENTICATE	29
-#define POS_PROXY_AUTHORIZATION	30
-#define POS_PROXY_REQUIRE		31
-#define POS_RACK				32
-#define POS_RSEQ				33
-#define POS_RECORD_ROUTE		34
-#define POS_REPLY_TO			35
-#define POS_REQUIRE				36
-#define POS_RETRY_AFTER			37
-#define POS_ROUTE				38
-#define POS_SERVER				39
-#define POS_SUBJECT				40
-#define POS_SUBSCRIPTION_STATE	41
-#define POS_SUPPORTED			42
-#define POS_TIMESTAMP			43
-#define POS_TO					44
-#define POS_UNSUPPORTED			45
-#define POS_USER_AGENT			46
-#define POS_VIA					47
-#define POS_WARNING				48
-#define POS_WWW_AUTHENTICATE	49
-
-#define POS_P_ACCESS_NETWORK_INFO			50
-#define POS_P_ASSERTED_IDENTITY				51
-#define POS_P_ASSOCIATED_URI				52
-#define POS_P_CALLED_PARTY_ID				53
-#define POS_P_CHARGING_FUNCTION_ADDRESSES	54
-#define POS_P_CHARGING_VECTOR				55
-#define POS_P_DCS_TRACE_PARTY_ID			56
-#define POS_P_DCS_OSPS						57
-#define POS_P_DCS_BILLING_INFO				58
-#define POS_P_DCS_LAES						59
-#define POS_P_DCS_REDIRECT					60
-#define POS_P_MEDIA_AUTHORIZATION			61
-#define POS_P_PREFERRED_IDENTITY			62
-#define POS_P_VISITED_NETWORK_ID			63
-#define POS_PATH							64
-#define POS_PRIVACY							65
-#define POS_REASON							66
-#define POS_REFER_TO						67
-#define POS_SERVICE_ROUTE					68
+#define POS_ACCEPT							1
+#define POS_ACCEPT_CONTACT					2
+#define POS_ACCEPT_ENCODING					3
+#define POS_ACCEPT_LANGUAGE					4
+#define POS_ALERT_INFO						5
+#define POS_ALLOW							6
+#define POS_ALLOW_EVENTS					7
+#define POS_AUTHENTICATION_INFO				8
+#define POS_AUTHORIZATION					9
+#define POS_CALL_ID							10
+#define POS_CALL_INFO						11
+#define POS_CONTACT							12
+#define POS_CONTENT_DISPOSITION				13
+#define POS_CONTENT_ENCODING				14
+#define POS_CONTENT_LANGUAGE				15
+#define POS_CONTENT_LENGTH					16
+#define POS_CONTENT_TYPE					17
+#define POS_CSEQ							18
+#define POS_DATE							19
+#define POS_ERROR_INFO						20
+#define POS_EVENT							21
+#define POS_EXPIRES							22
+#define POS_FROM							23
+#define POS_IN_REPLY_TO						24
+#define POS_JOIN							25
+#define POS_MAX_FORWARDS					26
+#define POS_MIME_VERSION					27
+#define POS_MIN_EXPIRES						28
+#define POS_MIN_SE							29
+#define POS_ORGANIZATION					30
+#define POS_P_ACCESS_NETWORK_INFO			31
+#define POS_P_ASSERTED_IDENTITY				32
+#define POS_P_ASSOCIATED_URI				33
+#define POS_P_CALLED_PARTY_ID				34
+#define POS_P_CHARGING_FUNCTION_ADDRESSES	35
+#define POS_P_CHARGING_VECTOR				36
+#define POS_P_DCS_TRACE_PARTY_ID			37
+#define POS_P_DCS_OSPS						38
+#define POS_P_DCS_BILLING_INFO				39
+#define POS_P_DCS_LAES						40
+#define POS_P_DCS_REDIRECT					41
+#define POS_P_MEDIA_AUTHORIZATION			42
+#define POS_P_PREFERRED_IDENTITY			43
+#define POS_P_VISITED_NETWORK_ID			44
+#define POS_PATH							45
+#define POS_PRIORITY						46
+#define POS_PRIVACY							47
+#define POS_PROXY_AUTHENTICATE				48
+#define POS_PROXY_AUTHORIZATION				49
+#define POS_PROXY_REQUIRE					50
+#define POS_RACK							51
+#define POS_REASON							52
+#define POS_RECORD_ROUTE					53
+#define POS_REFERED_BY						54
+#define POS_REJECT_CONTACT					55
+#define POS_REPLACES						56
+#define POS_REPLY_TO						57
+#define POS_REQUEST_DISPOSITION				58
+#define POS_REQUIRE							59
+#define POS_RETRY_AFTER						60
+#define POS_ROUTE							61
+#define POS_RSEQ							62
+#define POS_SECURITY_CLIENT					63
+#define POS_SECURITY_SERVER					64
+#define POS_SECURITY_VERIFY					65
+#define POS_SERVER							66
+#define POS_SERVICE_ROUTE					67
+#define POS_SESSION_EXPIRES					68
 #define POS_SIP_ETAG						69
 #define POS_SIP_IF_MATCH					70
+#define POS_SUBJECT							71
+#define POS_SUBSCRIPTION_STATE				72
+#define POS_SUPPORTED						73
+#define POS_TIMESTAMP						74
+#define POS_TO								75
+#define POS_UNSUPPORTED						76
+#define POS_USER_AGENT						77
+#define POS_VIA								78
+#define POS_WARNING							79
+#define POS_WWW_AUTHENTICATE				80
+#define POS_REFER_TO						81
 
 static gint hf_header_array[] = {
-				-1, /* "Unknown-header" - Pad so that the real headers start at index 1 */
-				-1, /* "Accept" */
-				-1, /* "Accept-Encoding" */
-                -1, /* "Accept-Language" */
-                -1, /* "Alert-Info" */
-                -1, /* "Allow" */
-				-1, /* "Allow-Events" - RFC 3265 */
-                -1, /* "Authentication-Info" */
-                -1, /* "Authorization" */
-                -1, /* "Call-ID" */
-                -1, /* "Call-Info" */
-                -1, /* "Contact" */
-                -1, /* "Content-Disposition" */
-                -1, /* "Content-Encoding" */
-                -1, /* "Content-Language" */
-                -1, /* "Content-Length" */
-                -1, /* "Content-Type" */
-                -1, /* "CSeq" */
-                -1, /* "Date" */
-                -1, /* "Error-Info" */
-                -1, /* "Expires" */
-				-1, /* "Event" - RFC 3265 */
-                -1, /* "From" */
-                -1, /* "In-Reply-To" */
-                -1, /* "Max-Forwards" */
-                -1, /* "MIME-Version" */
-                -1, /* "Min-Expires" */
-                -1, /* "Organization" */
-                -1, /* "Priority" */
-                -1, /* "Proxy-Authenticate" */
-                -1, /* "Proxy-Authorization" */
-                -1, /* "Proxy-Require" */
-				-1, /* "RAck" - RFC 3262 */
-				-1, /* "RSeq" - RFC 3261 */
-                -1, /* "Record-Route" */
-                -1, /* "Reply-To" */
-                -1, /* "Require" */
-                -1, /* "Retry-After" */
-                -1, /* "Route" */
-                -1, /* "Server" */
-                -1, /* "Subject" */
-				-1, /* "Subscription-State" - RFC 3265 */
-                -1, /* "Supported" */
-                -1, /* "Timestamp" */
-                -1, /* "To" */
-                -1, /* "Unsupported" */
-                -1, /* "User-Agent" */
-                -1, /* "Via" */
-                -1, /* "Warning" */
-                -1,  /* "WWW-Authenticate" */
-                -1,  /* "P-Access-Network-Info"	-   RFC3455  */
-                -1,  /* "P-Asserted-Identity" 	-   RFC3325  */
-                -1,  /* "P-Associated-URI" 	    -   RFC3455  */
-                -1,  /* "P-Called-Party-ID"		-   RFC3455  */
-                -1,  /* "P-Charging-Function-Addresses" -   RFC3455  */
-                -1,  /* "P-Charging-Vector"		-   RFC3455  */
-                -1,  /* "P-DCS-Trace-Party-ID"	-   RFC3603  */
-                -1,  /* "P-DCS-OSPS"			-   RFC3603  */
-                -1,  /* "P-DCS-Billing-Info"	-   RFC3603  */
-                -1,  /* "P-DCS-LAES"			-   RFC3603  */
-                -1,  /* "P-DCS-Redirect" 		-   RFC3603  */
-                -1,  /* "P-Media-Authorization"	-   RFC3313  */
-                -1,  /* "P-Preferred-Identity" 	-   RFC3325  */
-                -1,  /* "P-Visited-Network-ID" 	-   RFC3455  */
-                -1,  /* "Path"					-   RFC3327  */
-                -1,  /* "Privacy" 				-   RFC3323  */
-                -1,  /* "Reason" 				-   RFC3326  */
-                -1,  /* "Refer-To" 				-   RFC3515  */
-                -1,  /* "Service-Route" 		-   RFC3608  */
-                -1,  /* "ETag"     draft-ietf-sip-publish-01  */
-                -1,  /* "If-Match  draft-ietf-sip-publish-01  */
+                -1, /* 0"Unknown-header" - Pad so that the real headers start at index 1 */
+                -1, /* 1"Accept"										*/
+                -1, /* 2"Accept-Contact"					RFC3841		*/
+                -1, /* 3"Accept-Encoding"								*/
+                -1, /* 4"Accept-Language"								*/
+                -1, /* 5"Alert-Info",									*/
+                -1, /* 6"Allow", 										*/
+                -1, /* 7"Allow-Events",						RFC3265		*/
+                -1, /* 8"Authentication-Info"							*/
+                -1, /* 9"Authorization",								*/
+                -1, /* 10"Call-ID",										*/
+                -1, /* 11"Call-Info"									*/
+                -1, /* 12"Contact",										*/
+                -1, /* 13"Content-Disposition",							*/
+                -1, /* 14"Content-Encoding",							*/
+                -1, /* 15"Content-Language",							*/
+                -1, /* 16"Content-Length",								*/
+                -1, /* 17"Content-Type",								*/
+                -1, /* 18"CSeq",										*/
+                -1, /* 19"Date",										*/
+                -1, /* 20"Error-Info",									*/
+                -1, /* 21"Event",										*/
+                -1, /* 22"Expires",										*/
+                -1, /* 23"From", 										*/
+                -1, /* 24"In-Reply-To",						RFC3261		*/
+                -1, /* 25"Join",							RFC-ietf-sip-join-03.txt  */
+                -1, /* 26"Max-Forwards",								*/
+                -1, /* 27"MIME-Version",								*/
+                -1, /* 28"Min-Expires",									*/
+                -1, /* 29"Min-SE",							RFC-ietf-sip-session-timer-15.txt  */
+                -1, /* 30"Organization",								*/
+                -1, /* 31"P-Access-Network-Info",				RFC3455	*/
+                -1, /* 32"P-Asserted-Identity",					RFC3325	*/
+                -1, /* 33"P-Associated-URI",					RFC3455	*/
+                -1, /* 34"P-Called-Party-ID",					RFC3455	*/
+                -1, /* 35"P-Charging-Function-Addresses",		RFC3455 */
+                -1, /* 36"P-Charging-Vector",					RFC3455 */
+                -1, /* 37"P-DCS-Trace-Party-ID",				RFC3603 */
+                -1, /* 38"P-DCS-OSPS",							RFC3603 */
+                -1, /* 39"P-DCS-Billing-Info",					RFC3603 */
+                -1, /* 40"P-DCS-LAES",							RFC3603 */
+                -1, /* 41"P-DCS-Redirect",						RFC3603 */
+                -1, /* 42"P-Media-Authorization",				RFC3313 */
+                -1, /* 43"P-Preferred-Identity",				RFC3325 */
+                -1, /* 44"P-Visited-Network-ID",				RFC3455 */
+                -1, /* 45"Path",								RFC3327 */
+                -1, /* 46"Priority"										*/
+                -1, /* 47"Privacy",								RFC3323 */
+                -1, /* 48"Proxy-Authenticate",							*/
+                -1, /* 49"Proxy-Authorization",							*/
+                -1, /* 50"Proxy-Require",								*/
+                -1, /* 51"RAck",										*/
+                -1, /* 52"Reason",								RFC3326 */
+                -1, /* 53"Record-Route",								*/
+                -1, /* 54"Referred-By",									*/
+                -1, /* 55"Reject-Contact",						RFC3841 */
+                -1, /* 56"Replaces",							RFC3891 */
+                -1, /* 57"Reply-To",							RFC3261 */
+                -1, /* 58"Request-Disposition",					RFC3841 */
+                -1, /* 59"Require",								RFC3261 */
+                -1, /* 60"Retry-After",							RFC3261 */
+                -1, /* 61"Route",								RFC3261 */
+                -1, /* 62"RSeq",								RFC3841 */
+                -1, /* 63"Security-Client",						RFC3329 */
+                -1, /* 64"Security-Server",						RFC3329 */
+                -1, /* 65"Security-Verify",						RFC3329 */
+                -1, /* 66"Server",								RFC3261 */
+                -1, /* 67"Service-Route",						RFC3608 */
+                -1, /* 68"Session-Expires",	RFC-ietf-sip-session-timer-15.txt  */
+                -1, /* 69"SIP-ETag",			  draft-ietf-sip-publish-04  */
+                -1, /* 70"SIP-If-Match",		  draft-ietf-sip-publish-04  */
+                -1, /* 71"Subject",								RFC3261 */
+                -1, /* 72"Subscription-State",					RFC3265 */
+                -1, /* 73"Supported",							RFC3261 */
+                -1, /* 74"Timestamp",							RFC3261 */
+                -1, /* 75"To",									RFC3261 */
+                -1, /* 76"Unsupported",							RFC3261 */
+                -1, /* 77"User-Agent",							RFC3261 */
+                -1, /* 78"Via",									RFC3261 */
+                -1, /* 79"Warning",								RFC3261 */
+                -1, /* 80"WWW-Authenticate",					RFC3261 */
+                -1, /* 81"Refer-To",							RFC3515 */
 
 };
 
@@ -1569,22 +1601,22 @@
         /* Setup list of header fields */
         static hf_register_info hf[] = {
 
-                { &hf_msg_hdr,
-                        { "Message Header",           "sip.msg_hdr",
+		{ &hf_msg_hdr,
+				{ "Message Header",           "sip.msg_hdr",
                         FT_NONE, 0, NULL, 0,
                         "Message Header in SIP message", HFILL }
                 },
-                { &hf_Method,
+		{ &hf_Method,
 		       { "Method", 		"sip.Method",
 		       FT_STRING, BASE_NONE,NULL,0x0,
 			"SIP Method", HFILL }
 		},
-                { &hf_Request_Line,
-                       { "Request-Line",                "sip.Request-Line",
-                       FT_STRING, BASE_NONE,NULL,0x0,
+		{ &hf_Request_Line,
+				{ "Request-Line",                "sip.Request-Line",
+					FT_STRING, BASE_NONE,NULL,0x0,
                        "SIP Request-Line", HFILL }
                 },
-                { &hf_Status_Code,
+		{ &hf_Status_Code,
 		       { "Status-Code", 		"sip.Status-Code",
 		       FT_UINT32, BASE_DEC,NULL,0x0,
 			"SIP Status Code", HFILL }
@@ -1594,22 +1626,22 @@
 		       FT_STRING, BASE_NONE,NULL,0x0,
                        "SIP Status-Line", HFILL }
                 },
-                { &hf_sip_display,
-		       { "SIP Display info", 		"sip.display.info",
+		{ &hf_sip_display,
+			{ "SIP Display info", 		"sip.display.info",
 		       FT_STRING, BASE_NONE,NULL,0x0,
 			"RFC 3261: Display info", HFILL }
 		},
-                { &hf_sip_to_addr,
-		       { "SIP to address", 		"sip.to.addr",
+		{ &hf_sip_to_addr,
+				{ "SIP to address", 		"sip.to.addr",
 		       FT_STRING, BASE_NONE,NULL,0x0,
 			"RFC 3261: to addr", HFILL }
 		},
-                { &hf_sip_from_addr,
+		{ &hf_sip_from_addr,
 		       { "SIP from address", 		"sip.from.addr",
 		       FT_STRING, BASE_NONE,NULL,0x0,
 			"RFC 3261: from addr", HFILL }
 		},
-                { &hf_sip_tag,
+		{ &hf_sip_tag,
 		       { "SIP tag", 		"sip.tag",
 		       FT_STRING, BASE_NONE,NULL,0x0,
 			"RFC 3261: tag", HFILL }
@@ -1619,10 +1651,15 @@
 		       FT_STRING, BASE_NONE,NULL,0x0,
 			"RFC 3261: Accept Header", HFILL }
 		},
+                { &hf_header_array[POS_ACCEPT_CONTACT],
+		       { "Accept-Contact", 		"sip.Accept-Contact",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3841: Accept-Contact Header", HFILL }
+		},
                 { &hf_header_array[POS_ACCEPT_ENCODING],
 		       { "Accept-Encoding", 		"sip.Accept-Encoding",
 		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Accept-Encoding Header", HFILL }
+			"RFC 3841: Accept-Encoding Header", HFILL }
 		},
                 { &hf_header_array[POS_ACCEPT_LANGUAGE],
 		       { "Accept-Language", 		"sip.Accept-Language",
@@ -1729,6 +1766,11 @@
 		       FT_STRING, BASE_NONE,NULL,0x0,
 			"RFC 3261: In-Reply-To Header", HFILL }
 		},
+                { &hf_header_array[POS_JOIN],
+		       { "Join", 		"sip.Join",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"Draft: Join Header", HFILL }
+		},
                 { &hf_header_array[POS_MAX_FORWARDS],
 		       { "Max-Forwards", 		"sip.Max-Forwards",
 		       FT_STRING, BASE_NONE,NULL,0x0,
@@ -1744,121 +1786,16 @@
 		       FT_STRING, BASE_NONE,NULL,0x0,
 			"RFC 3261: Min-Expires Header", HFILL }
 		},
+                { &hf_header_array[POS_MIN_SE],
+		       { "Min-SE", 		"sip.Min-SE",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"Draft: Min-SE Header", HFILL }
+		},
                 { &hf_header_array[POS_ORGANIZATION],
 		       { "Organization", 		"sip.Organization",
 		       FT_STRING, BASE_NONE,NULL,0x0,
 			"RFC 3261: Organization Header", HFILL }
 		},
-                { &hf_header_array[POS_PRIORITY],
-		       { "Priority", 		"sip.Priority",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Priority Header", HFILL }
-		},
-                { &hf_header_array[POS_PROXY_AUTHENTICATE],
-		       { "Proxy-Authenticate", 		"sip.Proxy-Authenticate",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Proxy-Authenticate Header", HFILL }
-		},
-                { &hf_header_array[POS_PROXY_AUTHORIZATION],
-		       { "Proxy-Authorization", 		"sip.Proxy-Authorization",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Proxy-Authorization Header", HFILL }
-		},
-                { &hf_header_array[POS_RACK],
-		       { "RAck", 		"sip.RAck",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3262: RAck Header", HFILL }
-		},
-                { &hf_header_array[POS_RSEQ],
-		       { "RSeq", 		"sip.RSeq",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3262: RSeq Header", HFILL }
-		},
-                { &hf_header_array[POS_PROXY_REQUIRE],
-		       { "Proxy-Require", 		"sip.Proxy-Require",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Proxy-Require Header", HFILL }
-		},
-                { &hf_header_array[POS_RECORD_ROUTE],
-		       { "Record-Route", 		"sip.Record-Route",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Record-Route Header", HFILL }
-		},
-                { &hf_header_array[POS_REPLY_TO],
-		       { "Reply-To", 		"sip.Reply-To",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Reply-To Header", HFILL }
-		},
-                { &hf_header_array[POS_REQUIRE],
-		       { "Require", 		"sip.Require",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Require Header", HFILL }
-		},
-                { &hf_header_array[POS_RETRY_AFTER],
-		       { "Retry-After", 		"sip.Retry-After",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Retry-After Header", HFILL }
-		},
-                { &hf_header_array[POS_ROUTE],
-		       { "Route", 		"sip.Route",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Route Header", HFILL }
-		},
-                { &hf_header_array[POS_SERVER],
-		       { "Server", 		"sip.Server",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Server Header", HFILL }
-		},
-                { &hf_header_array[POS_SUBJECT],
-		       { "Subject", 		"sip.Subject",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Subject Header", HFILL }
-		},
-                { &hf_header_array[POS_SUBSCRIPTION_STATE],
-		       { "Subscription-State", 		"sip.Subscription-State",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3265: Subscription-State Header", HFILL }
-		},
-                { &hf_header_array[POS_SUPPORTED],
-		       { "Supported", 		"sip.Supported",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Supported Header", HFILL }
-		},
-                { &hf_header_array[POS_TIMESTAMP],
-		       { "Timestamp", 		"sip.Timestamp",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Timestamp Header", HFILL }
-		},
-                { &hf_header_array[POS_TO],
-		       { "To", 		"sip.To",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: To Header", HFILL }
-		},
-                { &hf_header_array[POS_UNSUPPORTED],
-		       { "Unsupported", 		"sip.Unsupported",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Unsupported Header", HFILL }
-		},
-                { &hf_header_array[POS_USER_AGENT],
-		       { "User-Agent", 		"sip.User-Agent",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: User-Agent Header", HFILL }
-		},
-                { &hf_header_array[POS_VIA],
-		       { "Via", 		"sip.Via",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Via Header", HFILL }
-		},
-                { &hf_header_array[POS_WARNING],
-		       { "Warning", 		"sip.Warning",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: Warning Header", HFILL }
-		},
-                { &hf_header_array[POS_WWW_AUTHENTICATE],
-		       { "WWW-Authenticate", 		"sip.WWW-Authenticate",
-		       FT_STRING, BASE_NONE,NULL,0x0,
-			"RFC 3261: WWW-Authenticate Header", HFILL }
-		},
 		{ &hf_header_array[POS_P_ACCESS_NETWORK_INFO],
 		       { "P-Access-Network-Info",	"sip.P-Access-Network-Info",
 		       FT_STRING, BASE_NONE,NULL,0x0,
@@ -1949,30 +1886,123 @@
 			"Path Header", HFILL }
 		},
 
+        { &hf_header_array[POS_PRIORITY],
+		       { "Priority", 		"sip.Priority",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: Priority Header", HFILL }
+		},
 		{ &hf_header_array[POS_PRIVACY],
 		       { "Privacy", 			"sip.Privacy",
 		       FT_STRING, BASE_NONE,NULL,0x0,
 			"Privacy Header", HFILL }
 		},
 
+        { &hf_header_array[POS_PROXY_AUTHENTICATE],
+		       { "Proxy-Authenticate", 		"sip.Proxy-Authenticate",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: Proxy-Authenticate Header", HFILL }
+		},
+                { &hf_header_array[POS_PROXY_AUTHORIZATION],
+		       { "Proxy-Authorization", 		"sip.Proxy-Authorization",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: Proxy-Authorization Header", HFILL }
+		},
+
+        { &hf_header_array[POS_PROXY_REQUIRE],
+		       { "Proxy-Require", 		"sip.Proxy-Require",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: Proxy-Require Header", HFILL }
+		},
+		{ &hf_header_array[POS_RACK],
+		       { "RAck", 		"sip.RAck",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3262: RAck Header", HFILL }
+		},
 		{ &hf_header_array[POS_REASON],
 		       { "Reason", 			"sip.Reason",
 		       FT_STRING, BASE_NONE,NULL,0x0,
-			"Reason Header", HFILL }
+			"RFC 3326 Reason Header", HFILL }
 		},
-
-		{ &hf_header_array[POS_REFER_TO],
-		       { "Refer-To", 			"sip.Refer-To",
+		{ &hf_header_array[POS_RECORD_ROUTE],
+		       { "Record-Route", 		"sip.Record-Route",
 		       FT_STRING, BASE_NONE,NULL,0x0,
-			"Refer-To Header", HFILL }
+			"RFC 3261: Record-Route Header", HFILL }
+		},
+		{ &hf_header_array[POS_REFERED_BY],
+		       { "Refered By", 		"sip.Refered-by",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3892: Refered-by Header", HFILL }
+		},
+		{ &hf_header_array[POS_REJECT_CONTACT],
+			{ "Reject-Contact", 		"sip.Reject-Contact",
+			FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3841: Reject-Contact Header", HFILL }
+		},
+		{ &hf_header_array[POS_REPLACES],
+			{ "Replaces", 		"sip.Replaces",
+			FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3891: Replaces Header", HFILL }
+		},
+		{ &hf_header_array[POS_REPLY_TO],
+		       { "Reply-To", 		"sip.Reply-To",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: Reply-To Header", HFILL }
+		},
+		{ &hf_header_array[POS_REQUEST_DISPOSITION],
+		       { "Request-Disposition", 	"sip.Request-Disposition",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3841: Request-Disposition Header", HFILL }
+		},
+		{ &hf_header_array[POS_REQUIRE],
+			{ "Require", 		"sip.Require",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: Require Header", HFILL }
+		},
+		{ &hf_header_array[POS_RETRY_AFTER],
+			{ "Retry-After", 		"sip.Retry-After",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: Retry-After Header", HFILL }
+		},
+		{ &hf_header_array[POS_ROUTE],
+		       { "Route", 		"sip.Route",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: Route Header", HFILL }
+		},
+        { &hf_header_array[POS_RSEQ],
+		       { "RSeq", 		"sip.RSeq",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3262: RSeq Header", HFILL }
+		},
+		{ &hf_header_array[ POS_SECURITY_CLIENT],
+		       { "Security-Client", 		"sip.Security-Client",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3329 Security-Client Header", HFILL }
+		},
+		{ &hf_header_array[ POS_SECURITY_SERVER],
+		       { "Security-Server", 		"sip.Security-Server",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3329 Security-Server Header", HFILL }
+		},
+		{ &hf_header_array[ POS_SECURITY_VERIFY],
+		       { "Security-Verify", 		"sip.Security-Verify",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3329 Security-Verify Header", HFILL }
+		},
+		{ &hf_header_array[POS_SERVER],
+			{ "Server", 		"sip.Server",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: Server Header", HFILL }
 		},
-
 		{ &hf_header_array[POS_SERVICE_ROUTE],
 		       { "Service-Route", 		"sip.Service-Route",
 		       FT_STRING, BASE_NONE,NULL,0x0,
 			"Service-Route Header", HFILL }
 		},
-
+		{ &hf_header_array[POS_SESSION_EXPIRES],
+		       { "Session-Expires", 		"sip.Session-Expires",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"Session-Expires Header", HFILL }
+		},
 		{ &hf_header_array[POS_SIP_ETAG],
 		       { "ETag", 		"sip.ETag",
 		       FT_STRING, BASE_NONE,NULL,0x0,
@@ -1983,6 +2013,63 @@
 		       FT_STRING, BASE_NONE,NULL,0x0,
 			"SIP-If-Match Header", HFILL }
 		},
+		{ &hf_header_array[POS_SUBJECT],
+		       { "Subject", 		"sip.Subject",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: Subject Header", HFILL }
+		},
+		{ &hf_header_array[POS_SUBSCRIPTION_STATE],
+		       { "Subscription-State", 		"sip.Subscription-State",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3265: Subscription-State Header", HFILL }
+		},
+		{ &hf_header_array[POS_SUPPORTED],
+			{ "Supported", 		"sip.Supported",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: Supported Header", HFILL }
+		},
+		{ &hf_header_array[POS_TIMESTAMP],
+			{ "Timestamp", 		"sip.Timestamp",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: Timestamp Header", HFILL }
+		},
+		{ &hf_header_array[POS_TO],
+			{ "To", 		"sip.To",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: To Header", HFILL }
+		},
+					
+		{ &hf_header_array[POS_UNSUPPORTED],
+			{ "Unsupported", 		"sip.Unsupported",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: Unsupported Header", HFILL }
+		},
+		{ &hf_header_array[POS_USER_AGENT],
+			{ "User-Agent", 		"sip.User-Agent",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: User-Agent Header", HFILL }
+		},
+		{ &hf_header_array[POS_VIA],
+			{ "Via", 		"sip.Via",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: Via Header", HFILL }
+		},
+		{ &hf_header_array[POS_WARNING],
+			{ "Warning", 		"sip.Warning",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: Warning Header", HFILL }
+		},
+		
+		{ &hf_header_array[POS_WWW_AUTHENTICATE],
+			{ "WWW-Authenticate", 		"sip.WWW-Authenticate",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"RFC 3261: WWW-Authenticate Header", HFILL }
+		},
+		{ &hf_header_array[POS_REFER_TO],
+		       { "Refer-To", 			"sip.Refer-To",
+		       FT_STRING, BASE_NONE,NULL,0x0,
+			"Refer-To Header", HFILL }
+		},
 		{ &hf_sip_resend,
 			{ "Resent Packet", "sip.resend",
 			FT_BOOLEAN, BASE_NONE, NULL, 0x0,
@@ -2013,6 +2100,7 @@
             "SIP", "sip");
         proto_raw_sip = proto_register_protocol("Session Initiation Protocol (SIP as raw text)",
             "Raw_SIP", "raw_sip");
+        new_register_dissector("sip", dissect_sip, proto_sip);
 
         /* Required function calls to register the header fields and subtrees used */
         proto_register_field_array(proto_sip, hf, array_length(hf));
@@ -2020,10 +2108,8 @@
         proto_register_subtree_array(ett_raw, array_length(ett_raw));
 
 	/* SIP content type and internet media type used by other dissectors are the same */
-
 	media_type_dissector_table = find_dissector_table("media_type");
 
-
         sip_module = prefs_register_protocol(proto_sip, NULL);
 
 	prefs_register_bool_preference(sip_module, "display_raw_text",
diff -urN ethereal-0.10.6/epan/dissectors/packet-skinny.c ethereal-0.10.7/epan/dissectors/packet-skinny.c
--- ethereal-0.10.6/epan/dissectors/packet-skinny.c	2004-08-12 17:42:30.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-skinny.c	2004-10-20 17:35:00.000000000 -0500
@@ -11,7 +11,7 @@
  * This file is based on packet-aim.c, which is
  * Copyright 2000, Ralf Hoelzer <ralf@well.com>
  *
- * $Id: packet-skinny.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-skinny.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -43,7 +43,7 @@
 #include <string.h>
 
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #include "packet-rtp.h"
 #include "packet-tcp.h"
@@ -1317,7 +1317,7 @@
       proto_tree_add_item(skinny_tree, hf_skinny_deviceName, tvb, offset+12, StationMaxDeviceNameSize, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_stationUserId, tvb, offset+28, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_stationInstance, tvb, offset+32, 4, TRUE);
-      proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+36, 4, TRUE);
+      proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+36, 4, FALSE);
       proto_tree_add_item(skinny_tree, hf_skinny_deviceType, tvb, offset+40, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_maxStreams, tvb, offset+44, 4, TRUE);
       break;
@@ -1375,7 +1375,7 @@
       proto_tree_add_item(skinny_tree, hf_skinny_alarmSeverity, tvb, offset+12, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_displayMessage, tvb, offset+16, StationMaxAlarmMessageSize, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_alarmParam1, tvb, offset+96, 4, TRUE);
-      proto_tree_add_item(skinny_tree, hf_skinny_alarmParam2, tvb, offset+100, 4, TRUE);
+      proto_tree_add_item(skinny_tree, hf_skinny_alarmParam2, tvb, offset+100, 4, FALSE);
       break;
 
     case 0x21 : /* stationMulticastMediaReceptionAck - This decode NOT verified*/
@@ -1385,13 +1385,18 @@
 
     case 0x22 : /* stationOpenReceiveChannelAck */
       proto_tree_add_item(skinny_tree, hf_skinny_ORCStatus, tvb, offset+12, 4, TRUE);
-      proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+16, 4, TRUE);
+      proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+16, 4, FALSE);
       proto_tree_add_item(skinny_tree, hf_skinny_portNumber, tvb, offset+20, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+24, 4, TRUE);
       if((!pinfo->fd->flags.visited) && rtp_handle){
-		  guint32 ipv4_address;
-		  tvb_memcpy(tvb, (char*)&ipv4_address, offset+16, 4);
-          rtp_add_address(pinfo, (char *)&ipv4_address, tvb_get_letohl(tvb, offset+20), 0, "Skinny", pinfo->fd->num);
+	    address src_addr;
+	    guint32 ipv4_address;
+
+	    src_addr.type=AT_IPv4;
+	    src_addr.len=4;
+	    src_addr.data=(char *)&ipv4_address;
+	    tvb_memcpy(tvb, (char *)&ipv4_address, offset+16, 4);
+	    rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+20), 0, "Skinny", pinfo->fd->num);
       }
       break;
 
@@ -1423,14 +1428,14 @@
       i = offset+12+StationMaxDeviceNameSize;
       proto_tree_add_item(skinny_tree, hf_skinny_stationUserId, tvb, i, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_stationInstance, tvb, i+4, 4, TRUE);
-      proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, i+8, 4, TRUE);
+      proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, i+8, 4, FALSE);
       proto_tree_add_item(skinny_tree, hf_skinny_deviceType, tvb, i+12, 4, TRUE);
       break;
 
     case 0x2A : /* MediaTransmissionFailure */
       proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, TRUE);
-      proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+20, 4, TRUE);
+      proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+20, 4, FALSE);
       proto_tree_add_item(skinny_tree, hf_skinny_portNumber, tvb, offset+24, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+28, 4, TRUE);
       break;
@@ -1480,8 +1485,8 @@
       proto_tree_add_item(skinny_tree, hf_skinny_customPictureFormatCount, tvb, offset+28, 4, TRUE);
       count = offset+32;
       for ( i = 0; i < MAX_CUSTOM_PICTURES; i++ ) {
-		    ti_sub = proto_tree_add_text(skinny_tree, tvb, offset, 20, "customPictureFormat[%d]", i);
-		    skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
+        ti_sub = proto_tree_add_text(skinny_tree, tvb, offset, 20, "customPictureFormat[%d]", i);
+        skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
         proto_tree_add_item(skinny_sub_tree, hf_skinny_pictureWidth, tvb, count, 4, TRUE);
         count+= 4;
         proto_tree_add_item(skinny_sub_tree, hf_skinny_pictureHeight, tvb, count, 4, TRUE);
@@ -1493,8 +1498,8 @@
         proto_tree_add_item(skinny_sub_tree, hf_skinny_clockDivisor, tvb, count, 4, TRUE);
         count+= 4;
       }
-		  ti_sub = proto_tree_add_text(skinny_tree, tvb, offset, 8, "confResources");
-		  skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
+      ti_sub = proto_tree_add_text(skinny_tree, tvb, offset, 8, "confResources");
+      skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
       proto_tree_add_item(skinny_sub_tree, hf_skinny_activeStreamsOnRegistration, tvb, count, 4, TRUE);
       count+= 4;
       proto_tree_add_item(skinny_sub_tree, hf_skinny_maxBW, tvb, count, 4, TRUE);
@@ -1503,14 +1508,14 @@
       count+= 4;
       skinny_sub_tree_sav = skinny_sub_tree;
       for ( i = 0; i < MAX_SERVICE_TYPE; i++ ) {
-		    ti_sub = proto_tree_add_text(skinny_sub_tree_sav, tvb, offset, 20, "serviceResource[%d]", i);
-		    skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
+        ti_sub = proto_tree_add_text(skinny_sub_tree_sav, tvb, offset, 20, "serviceResource[%d]", i);
+        skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
         proto_tree_add_item(skinny_sub_tree, hf_skinny_layoutCount, tvb, count, 4, TRUE);
         count+= 4;
         skinny_sub_tree_sav_sav = skinny_sub_tree_sav;
         for ( t = 0; t < MAX_LAYOUT_WITH_SAME_SERVICE; t++ ) {
-		      ti_sub = proto_tree_add_text(skinny_sub_tree_sav, tvb, offset, 20, "layouts[%d]", t);
-		      skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
+          ti_sub = proto_tree_add_text(skinny_sub_tree_sav, tvb, offset, 20, "layouts[%d]", t);
+          skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
           proto_tree_add_item(skinny_sub_tree, hf_skinny_layout, tvb, count, 4, TRUE);
           count+= 4;
         }
@@ -1525,86 +1530,86 @@
         count+= 4;
       }
       for ( i = 0; i < StationMaxCapabilities; i++ ) {
-		    ti_sub = proto_tree_add_text(skinny_tree, tvb, offset, 20, "audiocaps[%d]", i);
-		    skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
-	      proto_tree_add_item(skinny_sub_tree, hf_skinny_payloadCapability, tvb, count, 4, TRUE);
+        ti_sub = proto_tree_add_text(skinny_tree, tvb, offset, 20, "audiocaps[%d]", i);
+        skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
+        proto_tree_add_item(skinny_sub_tree, hf_skinny_payloadCapability, tvb, count, 4, TRUE);
         count+= 4;
-	      proto_tree_add_item(skinny_sub_tree, hf_skinny_maxFramesPerPacket, tvb, count, 2, TRUE);
+        proto_tree_add_item(skinny_sub_tree, hf_skinny_maxFramesPerPacket, tvb, count, 2, TRUE);
         count+= 4;
         /* skip past union it is only for G723 */
         count+= 8;
       }
       for ( i = 0; i < StationMaxVideoCapabilities; i++ ) {
-		    ti_sub = proto_tree_add_text(skinny_tree, tvb, offset, 20, "vidCaps[%d]", i);
-		    skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
-	      proto_tree_add_item(skinny_sub_tree, hf_skinny_payloadCapability, tvb, count, 4, TRUE);
+        ti_sub = proto_tree_add_text(skinny_tree, tvb, offset, 20, "vidCaps[%d]", i);
+        skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
+        proto_tree_add_item(skinny_sub_tree, hf_skinny_payloadCapability, tvb, count, 4, TRUE);
         count+= 4;
-	      proto_tree_add_item(skinny_sub_tree, hf_skinny_transmitOrReceive, tvb, count, 4, TRUE);
+        proto_tree_add_item(skinny_sub_tree, hf_skinny_transmitOrReceive, tvb, count, 4, TRUE);
         count+= 4;
-	      proto_tree_add_item(skinny_sub_tree, hf_skinny_levelPreferenceCount, tvb, count, 4, TRUE);
+        proto_tree_add_item(skinny_sub_tree, hf_skinny_levelPreferenceCount, tvb, count, 4, TRUE);
         count+= 4;
         skinny_sub_tree_sav = skinny_sub_tree;
         for ( t = 0; t < MAX_LEVEL_PREFERENCE; t++ ) {
-		      ti_sub = proto_tree_add_text(skinny_sub_tree_sav, tvb, offset, 20, "levelPreference[%d]", t);
-		      skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
-	        proto_tree_add_item(skinny_sub_tree, hf_skinny_transmitPreference, tvb, count, 4, TRUE);
+          ti_sub = proto_tree_add_text(skinny_sub_tree_sav, tvb, offset, 20, "levelPreference[%d]", t);
+          skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
+          proto_tree_add_item(skinny_sub_tree, hf_skinny_transmitPreference, tvb, count, 4, TRUE);
           count+= 4;
-	        proto_tree_add_item(skinny_sub_tree, hf_skinny_format, tvb, count, 4, TRUE);
+          proto_tree_add_item(skinny_sub_tree, hf_skinny_format, tvb, count, 4, TRUE);
           count+= 4;
-	        proto_tree_add_item(skinny_sub_tree, hf_skinny_maxBitRate, tvb, count, 4, TRUE);
+          proto_tree_add_item(skinny_sub_tree, hf_skinny_maxBitRate, tvb, count, 4, TRUE);
           count+= 4;
-	        proto_tree_add_item(skinny_sub_tree, hf_skinny_minBitRate, tvb, count, 4, TRUE);
+          proto_tree_add_item(skinny_sub_tree, hf_skinny_minBitRate, tvb, count, 4, TRUE);
           count+= 4;
-	        proto_tree_add_item(skinny_sub_tree, hf_skinny_MPI, tvb, count, 4, TRUE);
+          proto_tree_add_item(skinny_sub_tree, hf_skinny_MPI, tvb, count, 4, TRUE);
           count+= 4;
-	        proto_tree_add_item(skinny_sub_tree, hf_skinny_serviceNumber, tvb, count, 4, TRUE);
+          proto_tree_add_item(skinny_sub_tree, hf_skinny_serviceNumber, tvb, count, 4, TRUE);
           count+= 4;
         }
         val = count;
 
         /* H.261 */
-		    ti_sub = proto_tree_add_text(skinny_sub_tree_sav, tvb, offset, 8, "h261VideoCapability");
-		    skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
-	      proto_tree_add_item(skinny_sub_tree, hf_skinny_temporalSpatialTradeOffCapability, tvb, count, 4, TRUE);
+        ti_sub = proto_tree_add_text(skinny_sub_tree_sav, tvb, offset, 8, "h261VideoCapability");
+        skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
+        proto_tree_add_item(skinny_sub_tree, hf_skinny_temporalSpatialTradeOffCapability, tvb, count, 4, TRUE);
         count+= 4;
-	      proto_tree_add_item(skinny_sub_tree, hf_skinny_stillImageTransmission, tvb, count, 4, TRUE);
+        proto_tree_add_item(skinny_sub_tree, hf_skinny_stillImageTransmission, tvb, count, 4, TRUE);
         count+= 4;
 
         /* H.263 */
         count = val;
-		    ti_sub = proto_tree_add_text(skinny_sub_tree_sav, tvb, offset, 8, "h263VideoCapability");
-		    skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
-	      proto_tree_add_item(skinny_sub_tree, hf_skinny_h263_capability_bitfield, tvb, count, 4, TRUE);
+        ti_sub = proto_tree_add_text(skinny_sub_tree_sav, tvb, offset, 8, "h263VideoCapability");
+        skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
+        proto_tree_add_item(skinny_sub_tree, hf_skinny_h263_capability_bitfield, tvb, count, 4, TRUE);
         count+= 4;
-	      proto_tree_add_item(skinny_sub_tree, hf_skinny_annexNandWFutureUse, tvb, count, 4, TRUE);
+        proto_tree_add_item(skinny_sub_tree, hf_skinny_annexNandWFutureUse, tvb, count, 4, TRUE);
         count+= 4;
 
         /* Video */
         count = val;
-		    ti_sub = proto_tree_add_text(skinny_sub_tree_sav, tvb, offset, 8, "vieoVideoCapability");
-		    skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
-	      proto_tree_add_item(skinny_sub_tree, hf_skinny_modelNumber, tvb, count, 4, TRUE);
+        ti_sub = proto_tree_add_text(skinny_sub_tree_sav, tvb, offset, 8, "vieoVideoCapability");
+        skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
+        proto_tree_add_item(skinny_sub_tree, hf_skinny_modelNumber, tvb, count, 4, TRUE);
         count+= 4;
-	      proto_tree_add_item(skinny_sub_tree, hf_skinny_bandwidth, tvb, count, 4, TRUE);
+        proto_tree_add_item(skinny_sub_tree, hf_skinny_bandwidth, tvb, count, 4, TRUE);
         count+= 4;
       }
       for ( i = 0; i < StationMaxDataCapabilities; i++ ) {
-		    ti_sub = proto_tree_add_text(skinny_tree, tvb, offset, 20, "dataCaps[%d]", i);
-		    skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
-	      proto_tree_add_item(skinny_sub_tree, hf_skinny_payloadCapability, tvb, count, 4, TRUE);
+        ti_sub = proto_tree_add_text(skinny_tree, tvb, offset, 20, "dataCaps[%d]", i);
+        skinny_sub_tree = proto_item_add_subtree(ti_sub, ett_skinny_tree);
+        proto_tree_add_item(skinny_sub_tree, hf_skinny_payloadCapability, tvb, count, 4, TRUE);
         count+= 4;
-	      proto_tree_add_item(skinny_sub_tree, hf_skinny_transmitOrReceive, tvb, count, 4, TRUE);
+        proto_tree_add_item(skinny_sub_tree, hf_skinny_transmitOrReceive, tvb, count, 4, TRUE);
         count+= 4;
-	      proto_tree_add_item(skinny_sub_tree, hf_skinny_protocolDependentData, tvb, count, 4, TRUE);
+        proto_tree_add_item(skinny_sub_tree, hf_skinny_protocolDependentData, tvb, count, 4, TRUE);
         count+= 4;
-	      proto_tree_add_item(skinny_sub_tree, hf_skinny_maxBitRate, tvb, count, 4, TRUE);
+        proto_tree_add_item(skinny_sub_tree, hf_skinny_maxBitRate, tvb, count, 4, TRUE);
         count+= 4;
       }
       break;
 
     case 0x31 : /* OpenMultiMediaReceiveChannelAckMessage */
       proto_tree_add_item(skinny_tree, hf_skinny_ORCStatus, tvb, offset+12, 4, TRUE);
-      proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+16, 4, TRUE);
+      proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+16, 4, FALSE);
       proto_tree_add_item(skinny_tree, hf_skinny_portNumber, tvb, offset+20, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+24, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+28, 4, TRUE);
@@ -1756,7 +1761,7 @@
     case 0x8a : /* startMediaTransmistion */
       proto_tree_add_item(skinny_tree, hf_skinny_conferenceID,          tvb, offset+12, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID,       tvb, offset+16, 4, TRUE);
-      proto_tree_add_item(skinny_tree, hf_skinny_remoteIpAddr,          tvb, offset+20, 4, TRUE);
+      proto_tree_add_item(skinny_tree, hf_skinny_remoteIpAddr,          tvb, offset+20, 4, FALSE);
       proto_tree_add_item(skinny_tree, hf_skinny_remotePortNumber,      tvb, offset+24, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_millisecondPacketSize, tvb, offset+28, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_payloadCapability,     tvb, offset+32, 4, TRUE);
@@ -1765,9 +1770,14 @@
       proto_tree_add_item(skinny_tree, hf_skinny_maxFramesPerPacket,    tvb, offset+44, 2, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_g723BitRate,           tvb, offset+48, 4, TRUE);
       if((!pinfo->fd->flags.visited) && rtp_handle){
-          guint32 ipv4_address;
-          tvb_memcpy(tvb, (char*)&ipv4_address, offset+20, 4);
-          rtp_add_address(pinfo, (char *)&ipv4_address, tvb_get_letohl(tvb, offset+24), 0, "Skinny", pinfo->fd->num);
+	    address src_addr;
+	    guint32 ipv4_address;
+
+	    src_addr.type=AT_IPv4;
+	    src_addr.len=4;
+	    src_addr.data=(char *)&ipv4_address;
+	    tvb_memcpy(tvb, (char *)&ipv4_address, offset+20, 4);
+	    rtp_add_address(pinfo, &src_addr, tvb_get_letohl(tvb, offset+24), 0, "Skinny", pinfo->fd->num);
       }
       break;
 
@@ -1902,12 +1912,12 @@
       break;
 
     case 0x95 : /* startSessionTransmission */
-      proto_tree_add_item(skinny_tree, hf_skinny_remoteIpAddr,  tvb, offset+12, 4, TRUE);
+      proto_tree_add_item(skinny_tree, hf_skinny_remoteIpAddr,  tvb, offset+12, 4, FALSE);
       proto_tree_add_item(skinny_tree, hf_skinny_sessionType, tvb, offset+16, 4, TRUE);
       break;
 
     case 0x96 : /* stopSessionTransmission */
-      proto_tree_add_item(skinny_tree, hf_skinny_remoteIpAddr,  tvb, offset+12, 4, TRUE);
+      proto_tree_add_item(skinny_tree, hf_skinny_remoteIpAddr,  tvb, offset+12, 4, FALSE);
       proto_tree_add_item(skinny_tree, hf_skinny_sessionType, tvb, offset+16, 4, TRUE);
       break;
 
@@ -1958,7 +1968,7 @@
       }
       j = j+(i*4);
       for (i = 0; i < StationMaxServers; i++) {
-	      proto_tree_add_item(skinny_tree, hf_skinny_serverIpAddress, tvb, j+(i*4), 4, TRUE);
+	      proto_tree_add_item(skinny_tree, hf_skinny_serverIpAddress, tvb, j+(i*4), 4, FALSE);
       }
       break;
 
@@ -1969,7 +1979,7 @@
     case 0x101 : /* startMulticastMediaReception*/
       proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, TRUE);
-      proto_tree_add_item(skinny_tree, hf_skinny_multicastIpAddress, tvb, offset+20, 4, TRUE);
+      proto_tree_add_item(skinny_tree, hf_skinny_multicastIpAddress, tvb, offset+20, 4, FALSE);
       proto_tree_add_item(skinny_tree, hf_skinny_multicastPort, tvb, offset+24, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_millisecondPacketSize, tvb, offset+28, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_payloadCapability, tvb, offset+32, 4, TRUE);
@@ -1980,7 +1990,7 @@
     case 0x102 : /* startMulticateMediaTermination*/
       proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, TRUE);
-      proto_tree_add_item(skinny_tree, hf_skinny_multicastIpAddress, tvb, offset+20, 4, TRUE);
+      proto_tree_add_item(skinny_tree, hf_skinny_multicastIpAddress, tvb, offset+20, 4, FALSE);
       proto_tree_add_item(skinny_tree, hf_skinny_multicastPort, tvb, offset+24, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_millisecondPacketSize, tvb, offset+28, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_payloadCapability, tvb, offset+32, 4, TRUE);
@@ -2326,7 +2336,7 @@
       proto_tree_add_item(skinny_tree, hf_skinny_conferenceID, tvb, offset+12, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_passThruPartyID, tvb, offset+16, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_payloadCapability, tvb, offset+20, 4, TRUE);
-      proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+24, 4, TRUE);
+      proto_tree_add_item(skinny_tree, hf_skinny_ipAddress, tvb, offset+24, 4, FALSE);
       proto_tree_add_item(skinny_tree, hf_skinny_portNumber, tvb, offset+28, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_callIdentifier, tvb, offset+32, 4, TRUE);
       proto_tree_add_item(skinny_tree, hf_skinny_payload_rfc_number, tvb, offset+36, 4, TRUE);
@@ -4238,8 +4248,9 @@
 
   skinny_module = prefs_register_protocol(proto_skinny, NULL);
   prefs_register_bool_preference(skinny_module, "desegment",
-    "Desegment all SCCP messages spanning multiple TCP segments",
-    "Whether the SCCP dissector should desegment all messages spanning multiple TCP segments",
+    "Reassemble SCCP messages spanning multiple TCP segments",
+    "Whether the SCCP dissector should reassemble messages spanning multiple TCP segments."
+    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
     &skinny_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-slsk.c ethereal-0.10.7/epan/dissectors/packet-slsk.c
--- ethereal-0.10.6/epan/dissectors/packet-slsk.c	2004-08-12 17:41:57.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-slsk.c	2004-10-20 17:34:37.000000000 -0500
@@ -9,7 +9,7 @@
  * http://cvs.sourceforge.net/viewcvs.py/soleseek/SoleSeek/doc/protocol.html?rev=HEAD
  * Updated for SoulSeek client version 151
  *
- * $Id: packet-slsk.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-slsk.c 12115 2004-09-27 22:55:15Z guy $
  *
  *
  * Ethereal - Network traffic analyzer
@@ -44,7 +44,7 @@
 #include <epan/packet.h>
 #include <epan/tvbuff.h>
 #include "packet-tcp.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 /* Initialize the protocol and registered fields */
 static int proto_slsk = -1;
@@ -2454,8 +2454,9 @@
 
 /* Registers the options in the menu preferences */
 	prefs_register_bool_preference(slsk_module, "desegment",
-	    "Desegment all SoulSeek messages spanning multiple TCP segments",
-	    "Whether the SoulSeek dissector should desegment all messages spanning multiple TCP segments",
+	    "Reassemble SoulSeek messages spanning multiple TCP segments",
+	    "Whether the SoulSeek dissector should reassemble messages spanning multiple TCP segments."
+	    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 	    &slsk_desegment);
 #ifdef HAVE_LIBZ
 	prefs_register_bool_preference(slsk_module, "decompress",
diff -urN ethereal-0.10.6/epan/dissectors/packet-smb-sidsnooping.c ethereal-0.10.7/epan/dissectors/packet-smb-sidsnooping.c
--- ethereal-0.10.6/epan/dissectors/packet-smb-sidsnooping.c	2004-08-12 17:42:06.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-smb-sidsnooping.c	2004-10-20 17:34:45.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for snooping SID to name mappings
  * Copyright 2003, Ronnie Sahlberg
  *
- * $Id: packet-smb-sidsnooping.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-smb-sidsnooping.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -32,7 +32,7 @@
 #include "epan/packet_info.h"
 #include "epan/epan_dissect.h"
 #include "epan/proto.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "packet-dcerpc.h"
 #include "packet-dcerpc-nt.h"
 #include "register.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-smb.c ethereal-0.10.7/epan/dissectors/packet-smb.c
--- ethereal-0.10.6/epan/dissectors/packet-smb.c	2004-08-12 17:42:12.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-smb.c	2004-10-20 17:34:49.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 1999, Richard Sharpe <rsharpe@ns.aus.com>
  * 2001  Rewrite by Ronnie Sahlberg and Guy Harris
  *
- * $Id: packet-smb.c 11592 2004-08-03 02:28:49Z guy $
+ * $Id: packet-smb.c 12356 2004-10-20 15:30:19Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,14 +36,13 @@
 #include <string.h>
 #include <glib.h>
 #include <ctype.h>
-#include <epan/int-64bit.h>
 #include <epan/packet.h>
 #include <epan/conversation.h>
 #include "smb.h"
 #include <epan/strutil.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "reassemble.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "packet-ipx.h"
 
 #include "packet-windows-common.h"
@@ -564,11 +563,19 @@
 static int hf_smb_device_char_virtual = -1;
 static int hf_smb_fs_attr_css = -1;
 static int hf_smb_fs_attr_cpn = -1;
+static int hf_smb_fs_attr_uod = -1;
 static int hf_smb_fs_attr_pacls = -1;
 static int hf_smb_fs_attr_fc = -1;
 static int hf_smb_fs_attr_vq = -1;
-static int hf_smb_fs_attr_dim = -1;
+static int hf_smb_fs_attr_ssf = -1;
+static int hf_smb_fs_attr_srp = -1;
+static int hf_smb_fs_attr_srs = -1;
+static int hf_smb_fs_attr_sla = -1;
 static int hf_smb_fs_attr_vic = -1;
+static int hf_smb_fs_attr_soids = -1;
+static int hf_smb_fs_attr_se = -1;
+static int hf_smb_fs_attr_ns = -1;
+static int hf_smb_fs_attr_rov = -1;
 static int hf_smb_quota_flags_enabled = -1;
 static int hf_smb_quota_flags_deny_disk = -1;
 static int hf_smb_quota_flags_log_limit = -1;
@@ -828,17 +835,6 @@
 	if (si->sip == NULL) {
 		/*
 		 * We don't have the frame number of the request.
-		 *
-		 * XXX - is there truly nothing we can do here?
-		 * Can we not separately keep track of the original
-		 * transaction and its continuations, as we did
-		 * at one time?
-		 *
-		 * It is probably not much point in even trying to do something here
-		 * if we have never seen the initial request. Without the initial
-		 * request we probably miss all parameters and the begining of data
-		 * so we cant even call a subdissector since we can not determine
-		 * which type of transaction call this is.
 		 */
 		return NULL;
 	}
@@ -851,6 +847,18 @@
 		fd_head = fragment_get(pinfo, si->sip->frame_req, smb_trans_fragment_table);
 	}
 
+	if (!fd_head || !(fd_head->flags&FD_DEFRAGMENTED)){
+		/* This is continued - mark it as such, so we recognize
+		   continuation responses.
+		*/
+		si->sip->flags |= SMB_SIF_IS_CONTINUED;
+	} else {
+		/* We've finished reassembling, so there are no more
+		   continuation responses.
+		*/
+		si->sip->flags &= ~SMB_SIF_IS_CONTINUED;
+	}
+
 	/* we only show the defragmented packet for the first fragment,
 	   or else we might end up with dissecting one HUGE transaction PDU
 	   a LOT of times. (first fragment is the only one containing the setup
@@ -1036,11 +1044,11 @@
 #endif
 
 #ifndef TIME_T_MIN
-#define TIME_T_MIN ((time_t)0 < (time_t) -1 ? (time_t) 0 \
-		    : ~ (time_t) 0 << (sizeof (time_t) * CHAR_BIT - 1))
+#define TIME_T_MIN ((time_t) ((time_t)0 < (time_t) -1 ? (time_t) 0 \
+		    : ~ (time_t) 0 << (sizeof (time_t) * CHAR_BIT - 1)))
 #endif
 #ifndef TIME_T_MAX
-#define TIME_T_MAX (~ (time_t) 0 - TIME_T_MIN)
+#define TIME_T_MAX ((time_t) (~ (time_t) 0 - TIME_T_MIN))
 #endif
 
 static int
@@ -2442,6 +2450,11 @@
 	COUNT_BYTES(1);
 
 	/* Service */
+	/*
+	 * XXX - the SNIA CIFS spec "Strings that are never passed in
+	 * Unicode are: ... The service name string in the
+	 * Tree_Connect_AndX SMB".  Is that claim false?
+	 */
 	an = get_unicode_or_ascii_string(tvb, &offset,
 		si->unicode, &an_len, FALSE, FALSE, &bc);
 	if (an == NULL)
@@ -4652,8 +4665,7 @@
 			proto_item *litem = NULL;
 			proto_tree *ltree = NULL;
 			if(lt&0x10){
-				guint8 buf[8];
-				guint32 val;
+				guint64 val;
 
 				/* large lock format */
 				litem = proto_tree_add_text(tr, tvb, offset, 20,
@@ -4672,32 +4684,16 @@
 
 				/* offset */
 				CHECK_BYTE_COUNT(8);
-				val=tvb_get_letohl(tvb, offset);
-				buf[3]=(val>>24)&0xff;
-				buf[2]=(val>>16)&0xff;
-				buf[1]=(val>> 8)&0xff;
-				buf[0]=(val    )&0xff;
-				val=tvb_get_letohl(tvb, offset+4);
-				buf[7]=(val>>24)&0xff;
-				buf[6]=(val>>16)&0xff;
-				buf[5]=(val>> 8)&0xff;
-				buf[4]=(val    )&0xff;
-				proto_tree_add_string(ltree, hf_smb_lock_long_offset, tvb, offset, 8, u64toa(buf));
+				val=((guint64)tvb_get_letohl(tvb, offset)) << 32
+				    | tvb_get_letohl(tvb, offset+4);
+				proto_tree_add_uint64(ltree, hf_smb_lock_long_offset, tvb, offset, 8, val);
 				COUNT_BYTES(8);
 
 				/* length */
 				CHECK_BYTE_COUNT(8);
-				val=tvb_get_letohl(tvb, offset);
-				buf[3]=(val>>24)&0xff;
-				buf[2]=(val>>16)&0xff;
-				buf[1]=(val>> 8)&0xff;
-				buf[0]=(val    )&0xff;
-				val=tvb_get_letohl(tvb, offset+4);
-				buf[7]=(val>>24)&0xff;
-				buf[6]=(val>>16)&0xff;
-				buf[5]=(val>> 8)&0xff;
-				buf[4]=(val    )&0xff;
-				proto_tree_add_string(ltree, hf_smb_lock_long_length, tvb, offset, 8, u64toa(buf));
+				val=((guint64)tvb_get_letohl(tvb, offset)) << 32
+				    | tvb_get_letohl(tvb, offset+4);
+				proto_tree_add_uint64(ltree, hf_smb_lock_long_length, tvb, offset, 8, val);
 				COUNT_BYTES(8);
 			} else {
 				/* normal lock format */
@@ -4736,8 +4732,7 @@
 			proto_item *litem = NULL;
 			proto_tree *ltree = NULL;
 			if(lt&0x10){
-				guint8 buf[8];
-				guint32 val;
+				guint64 val;
 
 				/* large lock format */
 				litem = proto_tree_add_text(tr, tvb, offset, 20,
@@ -4756,32 +4751,16 @@
 
 				/* offset */
 				CHECK_BYTE_COUNT(8);
-				val=tvb_get_letohl(tvb, offset);
-				buf[3]=(val    )&0xff;
-				buf[2]=(val>> 8)&0xff;
-				buf[1]=(val>>16)&0xff;
-				buf[0]=(val>>24)&0xff;
-				val=tvb_get_letohl(tvb, offset+4);
-				buf[7]=(val    )&0xff;
-				buf[6]=(val>> 8)&0xff;
-				buf[5]=(val>>16)&0xff;
-				buf[4]=(val>>24)&0xff;
-				proto_tree_add_string(ltree, hf_smb_lock_long_offset, tvb, offset, 8, u64toa(buf));
+				val=((guint64)tvb_get_letohl(tvb, offset)) << 32
+				    | tvb_get_letohl(tvb, offset+4);
+				proto_tree_add_uint64(ltree, hf_smb_lock_long_offset, tvb, offset, 8, val);
 				COUNT_BYTES(8);
 
 				/* length */
 				CHECK_BYTE_COUNT(8);
-				val=tvb_get_letohl(tvb, offset);
-				buf[3]=(val    )&0xff;
-				buf[2]=(val>> 8)&0xff;
-				buf[1]=(val>>16)&0xff;
-				buf[0]=(val>>24)&0xff;
-				val=tvb_get_letohl(tvb, offset+4);
-				buf[7]=(val    )&0xff;
-				buf[6]=(val>> 8)&0xff;
-				buf[5]=(val>>16)&0xff;
-				buf[4]=(val>>24)&0xff;
-				proto_tree_add_string(ltree, hf_smb_lock_long_length, tvb, offset, 8, u64toa(buf));
+				val=((guint64)tvb_get_letohl(tvb, offset)) << 32
+				    | tvb_get_letohl(tvb, offset+4);
+				proto_tree_add_uint64(ltree, hf_smb_lock_long_length, tvb, offset, 8, val);
 				COUNT_BYTES(8);
 			} else {
 				/* normal lock format */
@@ -4871,7 +4850,7 @@
 	{ 3,		"The file existed and was truncated"},
 	{ 0x8001,       "The file existed and was opened, and an OpLock was granted"}, 
 	{ 0x8002,       "The file did not exist but was created, and an OpLock was granted"},
-	{ 0x8002,       "The file existed and was truncated, and an OpLock was granted"},
+	{ 0x8003,       "The file existed and was truncated, and an OpLock was granted"},
 	{0,	NULL}
 };
 static const true_false_string tfs_oa_lock = {
@@ -9074,6 +9053,10 @@
 	"This FS supports CASE PRESERVED NAMES",
 	"This FS does NOT support case preserved names"
 };
+static const true_false_string tfs_fs_attr_uod = {
+	"This FS supports UNICODE NAMES",
+	"This FS does NOT support unicode names"
+};
 static const true_false_string tfs_fs_attr_pacls = {
 	"This FS supports PERSISTENT ACLs",
 	"This FS does NOT support persistent acls"
@@ -9086,13 +9069,41 @@
 	"This FS supports VOLUME QUOTAS",
 	"This FS does NOT support volume quotas"
 };
-static const true_false_string tfs_fs_attr_dim = {
-	"This FS is on a MOUNTED DEVICE",
-	"This FS is NOT on a mounted device"
+static const true_false_string tfs_fs_attr_srp = {
+	"This FS supports REPARSE POINTS",
+	"This FS does NOT support reparse points"
+};
+static const true_false_string tfs_fs_attr_srs = {
+	"This FS supports REMOTE STORAGE",
+	"This FS does NOT support remote storage"
+};
+static const true_false_string tfs_fs_attr_ssf = {
+	"This FS supports SPARSE FILES",
+	"This FS does NOT support sparse files"
+};
+static const true_false_string tfs_fs_attr_sla = {
+	"This FS supports LFN APIs",
+	"This FS does NOT support lfn apis"
 };
 static const true_false_string tfs_fs_attr_vic = {
-	"This FS is on a COMPRESSED VOLUME",
-	"This FS is NOT on a compressed volume"
+	"This FS VOLUME IS COMPRESSED",
+	"This FS volume is NOT compressed"
+};
+static const true_false_string tfs_fs_attr_soids = {
+	"This FS supports OIDs",
+	"This FS does NOT support OIDs"
+};
+static const true_false_string tfs_fs_attr_se = {
+	"This FS supports ENCRYPTION",
+	"This FS does NOT support encryption"
+};
+static const true_false_string tfs_fs_attr_ns = {
+	"This FS supports NAMED STREAMS",
+	"This FS does NOT support named streams"
+};
+static const true_false_string tfs_fs_attr_rov = {
+	"This is a READ ONLY VOLUME",
+	"This is a read/write volume"
 };
 
 #define FF2_RESUME	0x0004
@@ -9970,7 +9981,7 @@
 }
 
 
-/* this dissects the SMB_INFO_STANDARD and SMB_INFO_QUERY_EA_SIZE
+/* this dissects the SMB_INFO_STANDARD
    as described in 4.2.16.1
 */
 static int
@@ -10639,9 +10650,12 @@
 	si = (smb_info_t *)pinfo->private_data;
 	switch(si->info_level){
 	case 1:		/*Info Standard*/
+		offset = dissect_4_2_16_1(tvb, pinfo, tree, offset, bcp,
+		    &trunc);
+		break;
 		
 	case 2:		/*Info Query EA Size*/
-		offset = dissect_4_2_16_1(tvb, pinfo, tree, offset, bcp,
+		offset = dissect_4_2_16_2(tvb, pinfo, tree, offset, bcp,
 		    &trunc);
 		break;
 	case 3:		/*Info Query EAs From List*/
@@ -10726,11 +10740,13 @@
 	si = (smb_info_t *)pinfo->private_data;
 	switch(si->info_level){
 	case 1:		/*Info Standard*/
-		
-	case 2:		/*Info Query EA Size*/
 		offset = dissect_4_2_16_1(tvb, pinfo, tree, offset, bcp,
 		    &trunc);
 		break;
+	case 2:		/*Info Query EA Size*/
+		offset = dissect_4_2_16_2(tvb, pinfo, tree, offset, bcp,
+		    &trunc);
+		break;
 	case 4:		/*Info Query All EAs*/
 		offset = dissect_4_2_16_2(tvb, pinfo, tree, offset, bcp,
 		    &trunc);
@@ -12288,6 +12304,7 @@
 }
 
 
+/* is this one just wrong and should be dissect_fs0105_attributes above ? */
 static int
 dissect_fs_attributes(tvbuff_t *tvb, proto_tree *parent_tree, int offset)
 {
@@ -12303,20 +12320,52 @@
 		tree = proto_item_add_subtree(item, ett_smb_fs_attributes);
 	}
 
+	/* case sensitive search */
 	proto_tree_add_boolean(tree, hf_smb_fs_attr_css,
 		tvb, offset, 4, mask);
+	/* case preserved names */
 	proto_tree_add_boolean(tree, hf_smb_fs_attr_cpn,
 		tvb, offset, 4, mask);
+	/* unicode on disk */
+	proto_tree_add_boolean(tree, hf_smb_fs_attr_uod,
+		tvb, offset, 4, mask);
+	/* persistent acls */
 	proto_tree_add_boolean(tree, hf_smb_fs_attr_pacls,
 		tvb, offset, 4, mask);
+	/* file compression */
 	proto_tree_add_boolean(tree, hf_smb_fs_attr_fc,
 		tvb, offset, 4, mask);
+	/* volume quotas */
 	proto_tree_add_boolean(tree, hf_smb_fs_attr_vq,
 		tvb, offset, 4, mask);
-	proto_tree_add_boolean(tree, hf_smb_fs_attr_dim,
+	/* sparse files */
+	proto_tree_add_boolean(tree, hf_smb_fs_attr_ssf,
+		tvb, offset, 4, mask);
+	/* reparse points */
+	proto_tree_add_boolean(tree, hf_smb_fs_attr_srp,
+		tvb, offset, 4, mask);
+	/* remote storage */
+	proto_tree_add_boolean(tree, hf_smb_fs_attr_srs,
 		tvb, offset, 4, mask);
+	/* lfn apis */
+	proto_tree_add_boolean(tree, hf_smb_fs_attr_sla,
+		tvb, offset, 4, mask);
+	/* volume is compressed */
 	proto_tree_add_boolean(tree, hf_smb_fs_attr_vic,
 		tvb, offset, 4, mask);
+	/* support oids */
+	proto_tree_add_boolean(tree, hf_smb_fs_attr_soids,
+		tvb, offset, 4, mask);
+	/* encryption */
+	proto_tree_add_boolean(tree, hf_smb_fs_attr_se,
+		tvb, offset, 4, mask);
+	/* named streams */
+	proto_tree_add_boolean(tree, hf_smb_fs_attr_ns,
+		tvb, offset, 4, mask);
+	/* read only volume */
+	proto_tree_add_boolean(tree, hf_smb_fs_attr_rov,
+		tvb, offset, 4, mask);
+
 
 	offset += 4;
 	return offset;
@@ -14691,8 +14740,8 @@
 				}
 
 				if( (si->request) || (!cmd_match) ) {
-					/* If we are processing an SMB request but there was already
-					   another "identical" smb resuest we had not matched yet.
+					/* We are processing an SMB request but there was already
+					   another "identical" smb request we had not matched yet.
 					   This must mean that either we have a retransmission or that the
 					   response to the previous one was lost and the client has reused
 					   the MID for this conversation. In either case it's not much more
@@ -14708,12 +14757,21 @@
 					g_hash_table_remove(si->ct->unmatched, (void *)pid_mid);
 					sip=NULL; /* XXX should free it as well */
 				} else {
-					/* we have found a response to some request we have seen earlier.
-					   What we do now depends on whether this is the first response
-					   to that request we see (id frame_res==0) or not.
+					/* we have found a response to some
+					   request we have seen earlier.
+					   What we do now depends on whether
+					   this is the first response to that
+					   request we see (id frame_res==0) or
+					   if it's a response to a request
+					   for which we've seen an earlier
+					   response that's continued.
 					*/
-					if(sip->frame_res==0){
-						/* ok it is the first response we have seen to this packet */
+					if(sip->frame_res==0 ||
+					   sip->flags & SMB_SIF_IS_CONTINUED){
+						/* OK, it is the first response
+						   we have seen to this packet,
+						   or it's a continuation of
+						   a response we've seen. */
 						sip->frame_res = pinfo->fd->num;
 						new_key = g_mem_chunk_alloc(smb_saved_info_key_chunk);
 						new_key->frame = sip->frame_res;
@@ -15854,11 +15912,11 @@
 		NULL, 0, "Number of unlock requests in this request", HFILL }},
 
 	{ &hf_smb_lock_long_length,
-		{ "Length", "smb.lock.length", FT_STRING, BASE_DEC,
+		{ "Length", "smb.lock.length", FT_UINT64, BASE_DEC,
 		NULL, 0, "Length of lock/unlock region", HFILL }},
 
 	{ &hf_smb_lock_long_offset,
-		{ "Offset", "smb.lock.offset", FT_STRING, BASE_DEC,
+		{ "Offset", "smb.lock.offset", FT_UINT64, BASE_DEC,
 		NULL, 0, "Offset in the file of lock/unlock region", HFILL }},
 
 	{ &hf_smb_file_type,
@@ -16910,25 +16968,57 @@
 		{ "Case Preserving", "smb.fs_attr.cpn", FT_BOOLEAN, 32,
 		TFS(&tfs_fs_attr_cpn), 0x00000002, "Will this FS Preserve Name Case?", HFILL }},
 
+	{ &hf_smb_fs_attr_uod,
+		{ "Unicode On Disk", "smb.fs_attr.uod", FT_BOOLEAN, 32,
+		TFS(&tfs_fs_attr_uod), 0x00000004, "Does this FS support Unicode On Disk?", HFILL }},
+
 	{ &hf_smb_fs_attr_pacls,
 		{ "Persistent ACLs", "smb.fs_attr.pacls", FT_BOOLEAN, 32,
-		TFS(&tfs_fs_attr_pacls), 0x00000004, "Does this FS support Persistent ACLs?", HFILL }},
+		TFS(&tfs_fs_attr_pacls), 0x00000008, "Does this FS support Persistent ACLs?", HFILL }},
 
 	{ &hf_smb_fs_attr_fc,
 		{ "Compression", "smb.fs_attr.fc", FT_BOOLEAN, 32,
-		TFS(&tfs_fs_attr_fc), 0x00000008, "Does this FS support File Compression?", HFILL }},
+		TFS(&tfs_fs_attr_fc), 0x00000010, "Does this FS support File Compression?", HFILL }},
 
 	{ &hf_smb_fs_attr_vq,
 		{ "Volume Quotas", "smb.fs_attr.vq", FT_BOOLEAN, 32,
-		TFS(&tfs_fs_attr_vq), 0x00000010, "Does this FS support Volume Quotas?", HFILL }},
+		TFS(&tfs_fs_attr_vq), 0x00000020, "Does this FS support Volume Quotas?", HFILL }},
 
-	{ &hf_smb_fs_attr_dim,
-		{ "Mounted", "smb.fs_attr.dim", FT_BOOLEAN, 32,
-		TFS(&tfs_fs_attr_dim), 0x00000020, "Is this FS a Mounted Device?", HFILL }},
+	{ &hf_smb_fs_attr_ssf,
+		{ "Sparse Files", "smb.fs_attr.ssf", FT_BOOLEAN, 32,
+		TFS(&tfs_fs_attr_ssf), 0x00000040, "Does this FS support SPARSE FILES?", HFILL }},
+
+	{ &hf_smb_fs_attr_srp,
+		{ "Reparse Points", "smb.fs_attr.srp", FT_BOOLEAN, 32,
+		TFS(&tfs_fs_attr_srp), 0x00000080, "Does this FS support REPARSE POINTS?", HFILL }},
+
+	{ &hf_smb_fs_attr_srs,
+		{ "Remote Storage", "smb.fs_attr.srs", FT_BOOLEAN, 32,
+		TFS(&tfs_fs_attr_srs), 0x00000100, "Does this FS support REMOTE STORAGE?", HFILL }},
+
+	{ &hf_smb_fs_attr_sla,
+		{ "LFN APIs", "smb.fs_attr.sla", FT_BOOLEAN, 32,
+		TFS(&tfs_fs_attr_sla), 0x00004000, "Does this FS support LFN APIs?", HFILL }},
 
 	{ &hf_smb_fs_attr_vic,
-		{ "Compressed", "smb.fs_attr.vic", FT_BOOLEAN, 32,
-		TFS(&tfs_fs_attr_vic), 0x00008000, "Is this FS Compressed?", HFILL }},
+		{ "Volume Is Compressed", "smb.fs_attr.vis", FT_BOOLEAN, 32,
+		TFS(&tfs_fs_attr_vic), 0x00008000, "Is this FS on a compressed volume?", HFILL }},
+
+	{ &hf_smb_fs_attr_soids,
+		{ "Supports OIDs", "smb.fs_attr.soids", FT_BOOLEAN, 32,
+		TFS(&tfs_fs_attr_soids), 0x00010000, "Does this FS support OIDs?", HFILL }},
+
+	{ &hf_smb_fs_attr_se,
+		{ "Supports Encryption", "smb.fs_attr.se", FT_BOOLEAN, 32,
+		TFS(&tfs_fs_attr_se), 0x00020000, "Does this FS support encryption?", HFILL }},
+
+	{ &hf_smb_fs_attr_ns,
+		{ "Named Streams", "smb.fs_attr.ns", FT_BOOLEAN, 32,
+		TFS(&tfs_fs_attr_ns), 0x00040000, "Does this FS support named streams?", HFILL }},
+
+	{ &hf_smb_fs_attr_rov,
+		{ "Read Only Volume", "smb.fs_attr.rov", FT_BOOLEAN, 32,
+		TFS(&tfs_fs_attr_rov), 0x00080000, "Is this FS on a read only volume?", HFILL }},
 
 	{ &hf_smb_user_quota_offset,
 		{ "Next Offset", "smb.quota.user.offset", FT_UINT32, BASE_DEC,
diff -urN ethereal-0.10.6/epan/dissectors/packet-smpp.c ethereal-0.10.7/epan/dissectors/packet-smpp.c
--- ethereal-0.10.6/epan/dissectors/packet-smpp.c	2004-08-12 17:41:59.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-smpp.c	2004-10-20 17:34:40.000000000 -0500
@@ -8,7 +8,7 @@
  * Dissection of multiple SMPP PDUs within one packet
  * provided by Chris Wilson.
  *
- * $Id: packet-smpp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-smpp.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Refer to the AUTHORS file or the AUTHORS section in the man page
  * for contacting the author(s) of this file.
@@ -50,7 +50,7 @@
 
 #include <epan/packet.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-tcp.h"
 
 /* General-purpose debug logger.
@@ -2729,8 +2729,9 @@
     smpp_module = prefs_register_protocol (proto_smpp, NULL);
     prefs_register_bool_preference (smpp_module,
 	    "reassemble_smpp_over_tcp",
-	    "Reassemble SMPP over TCP",
-	    "Reassemble TCP segments that convey SMPP traffic.",
+	    "Reassemble SMPP over TCP messages spanning multiple TCP segments",
+	    "Whether the SMPP dissector should reassemble messages spanning multiple TCP segments."
+	    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 	    &reassemble_over_tcp);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-smtp.c ethereal-0.10.7/epan/dissectors/packet-smtp.c
--- ethereal-0.10.6/epan/dissectors/packet-smtp.c	2004-08-12 17:42:14.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-smtp.c	2004-10-20 17:34:50.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-smtp.c
  * Routines for SMTP packet disassembly
  *
- * $Id: packet-smtp.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-smtp.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Copyright (c) 2000 by Richard Sharpe <rsharpe@ns.aus.com>
  *
@@ -37,7 +37,7 @@
 #include <epan/packet.h>
 #include <epan/conversation.h>
 #include <epan/addr_resolv.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/strutil.h>
 
 #define TCP_PORT_SMTP 25
@@ -581,8 +581,9 @@
 
   smtp_module = prefs_register_protocol(proto_smtp, NULL);
   prefs_register_bool_preference(smtp_module, "desegment_lines",
-    "Desegment all SMTP command and response lines\nspanning multiple TCP segments",
-    "Whether the SMTP dissector should desegment all command and response lines spanning multiple TCP segments",
+    "Reassemble SMTP command and response lines\nspanning multiple TCP segments",
+    "Whether the SMTP dissector should reassemble command and response lines spanning multiple TCP segments."
+    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
     &smtp_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-sna.c ethereal-0.10.7/epan/dissectors/packet-sna.c
--- ethereal-0.10.6/epan/dissectors/packet-sna.c	2004-08-12 17:42:14.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-sna.c	2004-10-20 17:34:50.000000000 -0500
@@ -3,7 +3,7 @@
  * Gilbert Ramirez <gram@alumni.rice.edu>
  * Jochen Friedrich <jochen@scram.de>
  *
- * $Id: packet-sna.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-sna.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -33,9 +33,9 @@
 #include "llcsaps.h"
 #include "ppptypes.h"
 #include <epan/sna-utils.h>
-#include "prefs.h"
+#include <epan/charsets.h>
+#include <epan/prefs.h>
 #include "reassemble.h"
-#include "util.h"
 
 /*
  * http://www.wanresources.com/snacell.html
diff -urN ethereal-0.10.6/epan/dissectors/packet-snmp.c ethereal-0.10.7/epan/dissectors/packet-snmp.c
--- ethereal-0.10.6/epan/dissectors/packet-snmp.c	2004-08-12 17:41:57.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-snmp.c	2004-10-20 17:34:37.000000000 -0500
@@ -10,7 +10,7 @@
  *
  * See RFCs 2570-2576 for SNMPv3
  *
- * $Id: packet-snmp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-snmp.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -53,7 +53,7 @@
 #include <epan/strutil.h>
 #include <epan/conversation.h>
 #include "etypes.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-ipx.h"
 #include "packet-hpext.h"
 #include "packet-frame.h"
@@ -84,9 +84,9 @@
 # define netsnmp_ds_set_int ds_set_int
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 # include <epan/filesystem.h>
-#endif /* WIN32 */
+#endif /* _WIN32 */
 
    /*
     * Define values "sprint_realloc_value()" expects.
@@ -124,6 +124,9 @@
 static gchar *mib_modules = DEF_MIB_MODULES;
 static gboolean display_oid = TRUE;
 
+/* Subdissector tables */
+static dissector_table_t variable_oid_dissector_table;
+
 static gint ett_snmp = -1;
 static gint ett_parameters = -1;
 static gint ett_parameters_qos = -1;
@@ -768,9 +771,9 @@
 	_U_
 #endif
     ,
-    ASN1_SCK *asn1, int offset, guint *lengthp)
+    ASN1_SCK *asn1, int offset, guint *lengthp, tvbuff_t **out_tvb)
 {
-	int start;
+	int start, vb_value_start;
 	guint length;
 	gboolean def;
 	guint vb_length;
@@ -803,6 +806,7 @@
 	ret = asn1_header_decode (asn1, &cls, &con, &tag, &def, &vb_length);
 	if (ret != ASN1_ERR_NOERROR)
 		return ret;
+	vb_value_start = asn1->offset;
 	if (!def)
 		return ASN1_ERR_LENGTH_NOT_DEFINITE;
 
@@ -885,6 +889,9 @@
 		if (ret != ASN1_ERR_NOERROR)
 			return ret;
 		length = asn1->offset - start;
+		if (out_tvb) {
+			*out_tvb = tvb_new_subset(asn1->tvb, vb_value_start, asn1->offset - vb_value_start, vb_length);
+		}
 		if (snmp_tree) {
 #ifdef HAVE_SOME_SNMP
 			variable.val.string = vb_octet_string;
@@ -1008,7 +1015,7 @@
 
 static void
 dissect_common_pdu(tvbuff_t *tvb, int offset, packet_info *pinfo,
-    proto_tree *tree, ASN1_SCK asn1, guint pdu_type, int start)
+    proto_tree *tree, proto_tree *root_tree, ASN1_SCK asn1, guint pdu_type, int start)
 {
 	gboolean def;
 	guint length;
@@ -1038,6 +1045,9 @@
 	guint timestamp_length;
 
 	gchar *oid_string;
+	gchar *decoded_oid;
+	gchar *non_decoded_oid;
+
 
 	guint variable_bindings_length;
 
@@ -1045,6 +1055,7 @@
 	guint variable_length;
 	subid_t *variable_oid;
 	guint variable_oid_length;
+	tvbuff_t *next_tvb;
 
 	int ret;
 	guint cls, con, tag;
@@ -1340,8 +1351,18 @@
 		CLEANUP_PUSH(g_free, variable_oid);
 
 		/* Parse the variable's value */
+		next_tvb = NULL;
 		ret = snmp_variable_decode(tree, variable_oid,
-		    variable_oid_length, &asn1, offset, &length);
+		    variable_oid_length, &asn1, offset, &length, &next_tvb);
+		if (next_tvb) {
+			new_format_oid(variable_oid, variable_oid_length,
+			    &non_decoded_oid, &decoded_oid);
+			dissector_try_string(variable_oid_dissector_table,
+			    non_decoded_oid, next_tvb, pinfo, root_tree);
+			if (decoded_oid)
+				g_free(decoded_oid);
+			g_free(non_decoded_oid);
+		}
 
 		/*
 		 * We're done with variable_oid, so we can call the cleanup
@@ -2000,7 +2021,7 @@
 		    "PDU type", ASN1_ERR_WRONG_TYPE);
 		return message_length;
 	}
-	dissect_common_pdu(tvb, offset, pinfo, snmp_tree, asn1, pdu_type, start);
+	dissect_common_pdu(tvb, offset, pinfo, snmp_tree, tree, asn1, pdu_type, start);
 	return message_length;
 }
 
@@ -2268,7 +2289,7 @@
 		    "PDU type", ASN1_ERR_WRONG_TYPE);
 		return;
 	}
-	dissect_common_pdu(tvb, offset, pinfo, smux_tree, asn1, pdu_type, start);
+	dissect_common_pdu(tvb, offset, pinfo, smux_tree, tree, asn1, pdu_type, start);
 }
 
 static void
@@ -2358,17 +2379,17 @@
 	if (mib_modules != NULL) {
 		tmp_mib_modules = g_strconcat("MIBS=", mib_modules, NULL);
 
-#ifdef WIN32
+#ifdef _WIN32
 		_putenv(tmp_mib_modules);
 #else
 		putenv(tmp_mib_modules);
-#endif /*WIN32*/
+#endif /*_WIN32*/
 	} else {
-#ifdef WIN32
+#ifdef _WIN32
 		_putenv("MIBS");
 #else
 		putenv("MIBS");
-#endif  /* WIN32 */
+#endif  /* _WIN32 */
 	}
 
 	/*
@@ -2385,7 +2406,7 @@
 void
 proto_register_snmp(void)
 {
-#if defined(WIN32) && defined(HAVE_SOME_SNMP)
+#if defined(_WIN32) && defined(HAVE_SOME_SNMP)
 	char *mib_path;
 #define MIB_PATH_APPEND "snmp\\mibs"
 #endif
@@ -2450,7 +2471,7 @@
 
 #ifdef HAVE_SOME_SNMP
 
-#ifdef WIN32
+#ifdef _WIN32
 	/* Set MIBDIRS so that the SNMP library can find its mibs. */
 	/* XXX - Should we set MIBS or MIBFILES as well? */
 
@@ -2461,7 +2482,7 @@
 		_putenv(mib_path);
 	g_free(mib_path);
 
-#endif	/* WIN32 */
+#endif	/* _WIN32 */
 
 	/*
 	 * Suppress warnings about unknown tokens - we aren't initializing
@@ -2480,7 +2501,7 @@
 	    "SNMP", "snmp");
 	proto_register_field_array(proto_snmp, hf, array_length(hf));
 	proto_register_subtree_array(ett, array_length(ett));
-	snmp_handle = create_dissector_handle(dissect_snmp, proto_snmp);
+	register_dissector("snmp", dissect_snmp, proto_snmp);
 
 	/* Register configuration preferences */
 	snmp_module = prefs_register_protocol(proto_snmp, process_prefs);
@@ -2504,9 +2525,9 @@
 	    "List of MIB modules to load (the list is set to environment variable MIBS if the variable is not already set)",
 	    &mib_modules);
 	prefs_register_bool_preference(snmp_module, "desegment",
-	    "Desegment all SNMP-over-TCP messages\nspanning multiple TCP segments",
-	    "Whether the SNMP dissector should desegment all messages "
-	    "spanning multiple TCP segments",
+	    "Reassemble SNMP-over-TCP messages\nspanning multiple TCP segments",
+	    "Whether the SNMP dissector should reassemble messages spanning multiple TCP segments."
+	    " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 	    &snmp_desegment);
 }
 
@@ -2515,6 +2536,8 @@
 {
 	dissector_handle_t snmp_tcp_handle;
 
+	snmp_handle = find_dissector("snmp");
+
 	dissector_add("udp.port", UDP_PORT_SNMP, snmp_handle);
 	dissector_add("udp.port", UDP_PORT_SNMP_TRAP, snmp_handle);
 	dissector_add("ethertype", ETHERTYPE_SNMP, snmp_handle);
@@ -2557,6 +2580,10 @@
 	    "SMUX", "smux");
 	proto_register_field_array(proto_smux, hf, array_length(hf));
 	proto_register_subtree_array(ett, array_length(ett));
+
+	variable_oid_dissector_table =
+	    register_dissector_table("snmp.variable_oid",
+	      "SNMP Variable OID", FT_STRING, BASE_NONE);
 }
 
 void
diff -urN ethereal-0.10.6/epan/dissectors/packet-srvloc.c ethereal-0.10.7/epan/dissectors/packet-srvloc.c
--- ethereal-0.10.6/epan/dissectors/packet-srvloc.c	2004-08-12 17:42:25.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-srvloc.c	2004-10-20 17:34:54.000000000 -0500
@@ -9,7 +9,7 @@
  *       In particular I have not had an opportunity to see how it
  *       responds to SRVLOC over TCP.
  *
- * $Id: packet-srvloc.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-srvloc.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -47,7 +47,7 @@
 
 #include <epan/packet.h>
 #include <epan/strutil.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-tcp.h"
 #include "reassemble.h"
 
@@ -1682,8 +1682,9 @@
     proto_register_subtree_array(ett, array_length(ett));
 	srvloc_module = prefs_register_protocol(proto_srvloc, NULL);
 	prefs_register_bool_preference(srvloc_module, "desegment_tcp",
-	    "Desegment all SRVLOC messages spanning multiple TCP segments",
-	    "Whether the SRVLOC dissector should desegment all messages spanning multiple TCP segments",
+	    "Reassemble SRVLOC messages spanning multiple TCP segments",
+	    "Whether the SRVLOC dissector should reassemble messages spanning multiple TCP segments. "
+	    "To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 	    &srvloc_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-ssh.c ethereal-0.10.7/epan/dissectors/packet-ssh.c
--- ethereal-0.10.6/epan/dissectors/packet-ssh.c	2004-08-12 17:42:09.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ssh.c	2004-10-20 17:34:47.000000000 -0500
@@ -3,7 +3,7 @@
  *
  * Huagang XIE <huagang@intruvert.com>
  *
- * $Id: packet-ssh.c 11586 2004-08-02 23:21:45Z guy $
+ * $Id: packet-ssh.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -40,7 +40,7 @@
 
 #include "packet-tcp.h"
 #include "reassemble.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 /* get from openssh ssh2.h */
 #define SSH2_MSG_DISCONNECT				1
@@ -923,8 +923,9 @@
 
   	ssh_module = prefs_register_protocol(proto_ssh, NULL);
 	prefs_register_bool_preference(ssh_module, "desegment_buffers",
-		"Desegment all SSH buffers spanning multiple TCP segments",
-		"Whether the SSH dissector should desegment all SSH buffers spanning multiple TCP segments",
+		"Reassemble SSH buffers spanning multiple TCP segments",
+		"Whether the SSH dissector should reassemble SSH buffers spanning multiple TCP segments. "
+	    "To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 		&ssh_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-ssl.c ethereal-0.10.7/epan/dissectors/packet-ssl.c
--- ethereal-0.10.6/epan/dissectors/packet-ssl.c	2004-08-12 17:42:26.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ssl.c	2004-10-20 17:34:56.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for ssl dissection
  * Copyright (c) 2000-2001, Scott Renfro <scott@renfro.org>
  *
- * $Id: packet-ssl.c 11578 2004-08-02 08:57:40Z sahlberg $
+ * $Id: packet-ssl.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -95,7 +95,7 @@
 #include <glib.h>
 
 #include <epan/conversation.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/dissectors/packet-x509af.h>
 
 static gboolean ssl_desegment = TRUE;
@@ -3436,10 +3436,11 @@
     {
       module_t *ssl_module = prefs_register_protocol(proto_ssl, NULL);
       prefs_register_bool_preference(ssl_module,
-                                     "desegment_ssl_records",
-                                     "Desegment SSL records",
-                                     "When enabled, SSL records that span multiple TCP segments are desegmented",
-                                     &ssl_desegment);
+             "desegment_ssl_records",
+             "Reassemble SSL records spanning multiple TCP segments",
+             "Whether the SSL dissector should reassemble SSL records spanning multiple TCP segments. "
+             "To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
+             &ssl_desegment);
     }
 
     register_dissector("ssl", dissect_ssl, proto_ssl);
diff -urN ethereal-0.10.6/epan/dissectors/packet-sua.c ethereal-0.10.7/epan/dissectors/packet-sua.c
--- ethereal-0.10.6/epan/dissectors/packet-sua.c	2004-08-12 17:42:01.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-sua.c	2004-10-20 17:34:41.000000000 -0500
@@ -1,11 +1,12 @@
 /* packet-sua.c
  * Routines for SS7 SCCP-User Adaptation Layer (SUA) dissection
  * It is hopefully (needs testing) compilant to
- * http://www.ietf.org/internet-drafts/draft-ietf-sigtran-sua-15.txt
+ * http://www.ietf.org/internet-drafts/draft-ietf-sigtran-sua-08.txt
+ * http://www.ietf.org/rfc/rfc3838.txt
  *
- * Copyright 2002, 2003 Michael Tuexen <tuexen [AT] fh-muenster.de>
+ * Copyright 2002, 2003, 2004 Michael Tuexen <tuexen [AT] fh-muenster.de>
  *
- * $Id: packet-sua.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-sua.c 12138 2004-09-29 18:08:18Z tuexen $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -33,7 +34,7 @@
 #endif
 
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "sctpppids.h"
 
 #define NETWORK_BYTE_ORDER     FALSE
@@ -68,102 +69,6 @@
 #define PARAMETER_VALUE_OFFSET    (PARAMETER_LENGTH_OFFSET + PARAMETER_LENGTH_LENGTH)
 #define PARAMETER_HEADER_OFFSET   PARAMETER_TAG_OFFSET
 
-#define INFO_STRING_PARAMETER_TAG                  0x0004
-#define ROUTING_CONTEXT_PARAMETER_TAG              0x0006
-#define DIAGNOSTIC_INFO_PARAMETER_TAG              0x0007
-#define HEARTBEAT_DATA_PARAMETER_TAG               0x0009
-#define TRAFFIC_MODE_TYPE_PARAMETER_TAG            0x000b
-#define ERROR_CODE_PARAMETER_TAG                   0x000c
-#define STATUS_PARAMETER_TAG                       0x000d
-#define ASP_IDENTIFIER_PARAMETER_TAG               0x0011
-#define AFFECTED_POINT_CODE_PARAMETER_TAG          0x0012
-#define CORRELATION_ID_PARAMETER_TAG               0x0013
-#define REGISTRATION_RESULT_PARAMETER_TAG          0x0014
-#define DEREGISTRATION_RESULT_PARAMETER_TAG        0x0015
-#define REGISTRATION_STATUS_PARAMETER_TAG          0x0016
-#define DEREGISTRATION_STATUS_PARAMETER_TAG        0x0017
-#define LOCAL_ROUTING_KEY_IDENTIFIER_PARAMETER_TAG 0x0018
-
-#define SS7_HOP_COUNTER_PARAMETER_TAG              0x0101
-#define SOURCE_ADDRESS_PARAMETER_TAG               0x0102
-#define DESTINATION_ADDRESS_PARAMETER_TAG          0x0103
-#define SOURCE_REFERENCE_NUMBER_PARAMETER_TAG      0x0104
-#define DESTINATION_REFERENCE_NUMBER_PARAMETER_TAG 0x0105
-#define SCCP_CAUSE_PARAMETER_TAG                   0x0106
-#define SEQUENCE_NUMBER_PARAMETER_TAG              0x0107
-#define RECEIVE_SEQUENCE_NUMBER_PARAMETER_TAG      0x0108
-#define ASP_CAPABILITIES_PARAMETER_TAG             0x0109
-#define CREDIT_PARAMETER_TAG                       0x010a
-#define DATA_PARAMETER_TAG                         0x010b
-#define USER_CAUSE_PARAMETER_TAG                   0x010c
-#define NETWORK_APPEARANCE_PARAMETER_TAG           0x010d
-#define ROUTING_KEY_PARAMETER_TAG                  0x010e
-#define DRN_LABEL_PARAMETER_TAG                    0x010f
-#define TID_LABEL_PARAMETER_TAG                    0x0110
-#define ADDRESS_RANGE_PARAMETER_TAG                0x0111
-#define SMI_PARAMETER_TAG                          0x0112
-#define IMPORTANCE_PARAMETER_TAG                   0x0113
-#define MESSAGE_PRIORITY_PARAMETER_TAG             0x0114
-#define PROTOCOL_CLASS_PARAMETER_TAG               0x0115
-#define SEQUENCE_CONTROL_PARAMETER_TAG             0x0116
-#define SEGMENTATION_PARAMETER_TAG                 0x0117
-#define CONGESTION_LEVEL_PARAMETER_TAG             0x0118
-
-#define GLOBAL_TITLE_PARAMETER_TAG                 0x8001
-#define POINT_CODE_PARAMETER_TAG                   0x8002
-#define SUBSYSTEM_NUMBER_PARAMETER_TAG             0x8003
-#define IPV4_ADDRESS_PARAMETER_TAG                 0x8004
-#define HOSTNAME_PARAMETER_TAG                     0x8005
-#define IPV6_ADDRESS_PARAMETER_TAG                 0x8006
-
-static const value_string parameter_tag_values[] = {
-  { INFO_STRING_PARAMETER_TAG,                  "Info String" },
-  { ROUTING_CONTEXT_PARAMETER_TAG,              "Routing context" },
-  { DIAGNOSTIC_INFO_PARAMETER_TAG,              "Diagnostic info" },
-  { HEARTBEAT_DATA_PARAMETER_TAG,               "Heartbeat data" },
-  { TRAFFIC_MODE_TYPE_PARAMETER_TAG,            "Traffic mode type" },
-  { ERROR_CODE_PARAMETER_TAG,                   "Error code" },
-  { STATUS_PARAMETER_TAG,                       "Status" },
-  { ASP_IDENTIFIER_PARAMETER_TAG,               "ASP identifier" },
-  { AFFECTED_POINT_CODE_PARAMETER_TAG,          "Affected point code" },
-  { CORRELATION_ID_PARAMETER_TAG,               "Correlation ID" },
-  { REGISTRATION_RESULT_PARAMETER_TAG,          "Registration result" },
-  { DEREGISTRATION_RESULT_PARAMETER_TAG,        "Deregistration result" },
-  { REGISTRATION_STATUS_PARAMETER_TAG,          "Registration status" },
-  { DEREGISTRATION_STATUS_PARAMETER_TAG,        "Deregistration status" },
-  { LOCAL_ROUTING_KEY_IDENTIFIER_PARAMETER_TAG, "Local routing key identifier" },
-  { SS7_HOP_COUNTER_PARAMETER_TAG,              "SS7 hop counter" },
-  { SOURCE_ADDRESS_PARAMETER_TAG,               "Source address" },
-  { DESTINATION_ADDRESS_PARAMETER_TAG,          "Destination address" },
-  { SOURCE_REFERENCE_NUMBER_PARAMETER_TAG,      "Source reference number" },
-  { DESTINATION_REFERENCE_NUMBER_PARAMETER_TAG, "Destination reference number" },
-  { SCCP_CAUSE_PARAMETER_TAG,                   "SCCP cause" },
-  { SEQUENCE_NUMBER_PARAMETER_TAG,              "Sequence number" },
-  { RECEIVE_SEQUENCE_NUMBER_PARAMETER_TAG,      "Receive sequence number" },
-  { ASP_CAPABILITIES_PARAMETER_TAG,             "ASP capabilities" },
-  { CREDIT_PARAMETER_TAG,                       "Credit" },
-  { DATA_PARAMETER_TAG,                         "Data" },
-  { USER_CAUSE_PARAMETER_TAG,                   "User/Cause" },
-  { NETWORK_APPEARANCE_PARAMETER_TAG,           "Network appearance" },
-  { ROUTING_KEY_PARAMETER_TAG,                  "Routing key" },
-  { DRN_LABEL_PARAMETER_TAG,                    "DRN label" },
-  { TID_LABEL_PARAMETER_TAG,                    "TID label" },
-  { ADDRESS_RANGE_PARAMETER_TAG,                "Address range" },
-  { SMI_PARAMETER_TAG,                          "SMI" },
-  { IMPORTANCE_PARAMETER_TAG,                   "Importance" },
-  { MESSAGE_PRIORITY_PARAMETER_TAG,             "Message priority" },
-  { PROTOCOL_CLASS_PARAMETER_TAG,               "Protocol class" },
-  { SEQUENCE_CONTROL_PARAMETER_TAG,             "Sequence control" },
-  { SEGMENTATION_PARAMETER_TAG,                 "Segmentation" },
-  { CONGESTION_LEVEL_PARAMETER_TAG,             "Congestion level" },
-  { GLOBAL_TITLE_PARAMETER_TAG,                 "Global title" },
-  { POINT_CODE_PARAMETER_TAG,                   "Point code" },
-  { SUBSYSTEM_NUMBER_PARAMETER_TAG,             "Subsystem number" },
-  { IPV4_ADDRESS_PARAMETER_TAG,                 "IPv4 address" },
-  { HOSTNAME_PARAMETER_TAG,                     "Hostname" },
-  { IPV6_ADDRESS_PARAMETER_TAG,                 "IPv6 address" },
-  { 0,                                          NULL } };
-
 #define PROTOCOL_VERSION_RELEASE_1             1
 
 static const value_string protocol_version_values[] = {
@@ -316,6 +221,7 @@
 static int hf_message_type = -1;
 static int hf_message_length = -1;
 static int hf_parameter_tag = -1;
+static int hf_v8_parameter_tag = -1;
 static int hf_parameter_length = -1;
 static int hf_parameter_value = -1;
 static int hf_parameter_padding = -1;
@@ -325,6 +231,7 @@
 static int hf_heartbeat_data = -1;
 static int hf_traffic_mode_type = -1;
 static int hf_error_code = -1;
+static int hf_v8_error_code = -1;
 static int hf_status_type = -1;
 static int hf_status_info = -1;
 static int hf_congestion_level = -1;
@@ -422,6 +329,14 @@
 static dissector_handle_t data_handle;
 static dissector_table_t sua_ssn_dissector_table;
 
+/* stuff for supporting multiple versions */
+typedef enum {
+  SUA_V08,
+  SUA_RFC
+} Version_Type;
+
+static Version_Type version = SUA_RFC;
+
 static void
 dissect_parameters(tvbuff_t *tlv_tvb, proto_tree *tree, tvbuff_t **data_tvb, guint8 *source_ssn, guint8 *dest_ssn);
 
@@ -520,6 +435,35 @@
 #define ERROR_CODE_OFFSET PARAMETER_VALUE_OFFSET
 #define ERROR_CODE_LENGTH 4
 
+static const value_string v8_error_code_values[] = {
+  { 0x01, "Invalid version" },
+  { 0x02, "Invalid interface identifier" },
+  { 0x03, "Unsupported message class" },
+  { 0x04, "Unsupported message type" },
+  { 0x05, "Unsupported traffic handling mode" },
+  { 0x06, "Unexpected message" },
+  { 0x07, "Protocol error" },
+  { 0x09, "Invalid stream identifier" },
+  { 0x0d, "Refused - management blocking" },
+  { 0x0e, "ASP identifier required" },
+  { 0x0f, "Invalid ASP identifier" },
+  { 0x11, "Invalid parameter value" },
+  { 0x12, "Parameter field error" },
+  { 0x13, "Unexpected parameter" },
+  { 0x14, "Destination status unknown" },
+  { 0x15, "Invalid network appearance" },
+  { 0x16, "Missing parameter" },
+  { 0x17, "Routing key change refuesed" },
+  { 0x18, "Invalid loadsharing label" },
+  { 0,    NULL } };
+
+static void
+dissect_v8_error_code_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item)
+{
+  proto_tree_add_item(parameter_tree, hf_v8_error_code, parameter_tvb, ERROR_CODE_OFFSET, ERROR_CODE_LENGTH, NETWORK_BYTE_ORDER);
+  proto_item_append_text(parameter_item, " (%s)", val_to_str(tvb_get_ntohl(parameter_tvb, ERROR_CODE_OFFSET), v8_error_code_values, "unknown"));
+}
+
 static const value_string error_code_values[] = {
   { 0x01, "Invalid version" },
   { 0x03, "Unsupported message class" },
@@ -540,6 +484,7 @@
   { 0x19, "Invalid routing context" },
   { 0x1a, "No configured AS for ASP" },
   { 0x1b, "Subsystem status unknown" },
+  { 0x1c, "Invalid loadsharing label" },
   { 0,    NULL } };
 
 static void
@@ -1273,6 +1218,372 @@
   proto_item_append_text(parameter_item, "(tag %u and %u byte%s value)", tvb_get_ntohs(parameter_tvb, PARAMETER_TAG_OFFSET), parameter_value_length, plurality(parameter_value_length, "", "s"));
 }
 
+#define V8_DATA_PARAMETER_TAG                         0x0003
+#define V8_INFO_STRING_PARAMETER_TAG                  0x0004
+#define V8_ROUTING_CONTEXT_PARAMETER_TAG              0x0006
+#define V8_DIAGNOSTIC_INFO_PARAMETER_TAG              0x0007
+#define V8_HEARTBEAT_DATA_PARAMETER_TAG               0x0009
+#define V8_TRAFFIC_MODE_TYPE_PARAMETER_TAG            0x000b
+#define V8_ERROR_CODE_PARAMETER_TAG                   0x000c
+#define V8_STATUS_PARAMETER_TAG                       0x000d
+#define V8_CONGESTION_LEVEL_PARAMETER_TAG             0x000f
+#define V8_ASP_IDENTIFIER_PARAMETER_TAG               0x0011
+#define V8_AFFECTED_POINT_CODE_PARAMETER_TAG          0x0012
+
+#define V8_SS7_HOP_COUNTER_PARAMETER_TAG              0x0101
+#define V8_SOURCE_ADDRESS_PARAMETER_TAG               0x0102
+#define V8_DESTINATION_ADDRESS_PARAMETER_TAG          0x0103
+#define V8_SOURCE_REFERENCE_NUMBER_PARAMETER_TAG      0x0104
+#define V8_DESTINATION_REFERENCE_NUMBER_PARAMETER_TAG 0x0105
+#define V8_SCCP_CAUSE_PARAMETER_TAG                   0x0106
+#define V8_SEQUENCE_NUMBER_PARAMETER_TAG              0x0107
+#define V8_RECEIVE_SEQUENCE_NUMBER_PARAMETER_TAG      0x0108
+#define V8_ASP_CAPABILITIES_PARAMETER_TAG             0x0109
+#define V8_CREDIT_PARAMETER_TAG                       0x010a
+#define V8_USER_CAUSE_PARAMETER_TAG                   0x010c
+#define V8_NETWORK_APPEARANCE_PARAMETER_TAG           0x010d
+#define V8_ROUTING_KEY_PARAMETER_TAG                  0x010e
+#define V8_REGISTRATION_RESULT_PARAMETER_TAG          0x010f
+#define V8_DEREGISTRATION_RESULT_PARAMETER_TAG        0x0110
+#define V8_ADDRESS_RANGE_PARAMETER_TAG                0x0111
+#define V8_CORRELATION_ID_PARAMETER_TAG               0x0112
+#define V8_IMPORTANCE_PARAMETER_TAG                   0x0113
+#define V8_MESSAGE_PRIORITY_PARAMETER_TAG             0x0114
+#define V8_PROTOCOL_CLASS_PARAMETER_TAG               0x0115
+#define V8_SEQUENCE_CONTROL_PARAMETER_TAG             0x0116
+#define V8_SEGMENTATION_PARAMETER_TAG                 0x0117
+#define V8_SMI_PARAMETER_TAG                          0x0118
+#define V8_TID_LABEL_PARAMETER_TAG                    0x0119
+#define V8_DRN_LABEL_PARAMETER_TAG                    0x011a
+
+#define V8_GLOBAL_TITLE_PARAMETER_TAG                 0x8001
+#define V8_POINT_CODE_PARAMETER_TAG                   0x8002
+#define V8_SUBSYSTEM_NUMBER_PARAMETER_TAG             0x8003
+#define V8_IPV4_ADDRESS_PARAMETER_TAG                 0x8004
+#define V8_HOSTNAME_PARAMETER_TAG                     0x8005
+#define V8_IPV6_ADDRESS_PARAMETER_TAG                 0x8006
+
+static const value_string v8_parameter_tag_values[] = {
+  { V8_DATA_PARAMETER_TAG,                         "Data" },
+  { V8_INFO_STRING_PARAMETER_TAG,                  "Info String" },
+  { V8_ROUTING_CONTEXT_PARAMETER_TAG,              "Routing context" },
+  { V8_DIAGNOSTIC_INFO_PARAMETER_TAG,              "Diagnostic info" },
+  { V8_HEARTBEAT_DATA_PARAMETER_TAG,               "Heartbeat data" },
+  { V8_TRAFFIC_MODE_TYPE_PARAMETER_TAG,            "Traffic mode type" },
+  { V8_ERROR_CODE_PARAMETER_TAG,                   "Error code" },
+  { V8_STATUS_PARAMETER_TAG,                       "Status" },
+  { V8_CONGESTION_LEVEL_PARAMETER_TAG,             "Congestion level" },
+  { V8_ASP_IDENTIFIER_PARAMETER_TAG,               "ASP identifier" },
+  { V8_AFFECTED_POINT_CODE_PARAMETER_TAG,          "Affected point code" },
+  { V8_SS7_HOP_COUNTER_PARAMETER_TAG,              "SS7 hop counter" },
+  { V8_SOURCE_ADDRESS_PARAMETER_TAG,               "Source address" },
+  { V8_DESTINATION_ADDRESS_PARAMETER_TAG,          "Destination address" },
+  { V8_SOURCE_REFERENCE_NUMBER_PARAMETER_TAG,      "Source reference number" },
+  { V8_DESTINATION_REFERENCE_NUMBER_PARAMETER_TAG, "Destination reference number" },
+  { V8_SCCP_CAUSE_PARAMETER_TAG,                   "SCCP cause" },
+  { V8_SEQUENCE_NUMBER_PARAMETER_TAG,              "Sequence number" },
+  { V8_RECEIVE_SEQUENCE_NUMBER_PARAMETER_TAG,      "Receive sequence number" },
+  { V8_ASP_CAPABILITIES_PARAMETER_TAG,             "ASP capabilities" },
+  { V8_CREDIT_PARAMETER_TAG,                       "Credit" },
+  { V8_USER_CAUSE_PARAMETER_TAG,                   "User/Cause" },
+  { V8_NETWORK_APPEARANCE_PARAMETER_TAG,           "Network appearance" },
+  { V8_ROUTING_KEY_PARAMETER_TAG,                  "Routing key" },
+  { V8_REGISTRATION_RESULT_PARAMETER_TAG,          "Registration result" },
+  { V8_DEREGISTRATION_RESULT_PARAMETER_TAG,        "Deregistration result" },
+  { V8_ADDRESS_RANGE_PARAMETER_TAG,                "Address range" },
+  { V8_CORRELATION_ID_PARAMETER_TAG,               "Correlation ID" },
+  { V8_IMPORTANCE_PARAMETER_TAG,                   "Importance" },
+  { V8_MESSAGE_PRIORITY_PARAMETER_TAG,             "Message priority" },
+  { V8_PROTOCOL_CLASS_PARAMETER_TAG,               "Protocol class" },
+  { V8_SEQUENCE_CONTROL_PARAMETER_TAG,             "Sequence control" },
+  { V8_SEGMENTATION_PARAMETER_TAG,                 "Segmentation" },
+  { V8_SMI_PARAMETER_TAG,                          "SMI" },
+  { V8_TID_LABEL_PARAMETER_TAG,                    "TID label" },
+  { V8_DRN_LABEL_PARAMETER_TAG,                    "DRN label" },
+  { V8_GLOBAL_TITLE_PARAMETER_TAG,                 "Global title" },
+  { V8_POINT_CODE_PARAMETER_TAG,                   "Point code" },
+  { V8_SUBSYSTEM_NUMBER_PARAMETER_TAG,             "Subsystem number" },
+  { V8_IPV4_ADDRESS_PARAMETER_TAG,                 "IPv4 address" },
+  { V8_HOSTNAME_PARAMETER_TAG,                     "Hostname" },
+  { V8_IPV6_ADDRESS_PARAMETER_TAG,                 "IPv6 address" },
+  { 0,                                          NULL } };
+
+static void
+dissect_v8_parameter(tvbuff_t *parameter_tvb, proto_tree *tree, tvbuff_t **data_tvb, guint8 *source_ssn, guint8 *dest_ssn)
+{
+  guint16 tag, length, padding_length;
+  proto_item *parameter_item;
+  proto_tree *parameter_tree;
+  guint8 ssn = INVALID_SSN;
+
+  /* extract tag and length from the parameter */
+  tag            = tvb_get_ntohs(parameter_tvb, PARAMETER_TAG_OFFSET);
+  length         = tvb_get_ntohs(parameter_tvb, PARAMETER_LENGTH_OFFSET);
+  padding_length = tvb_length(parameter_tvb) - length;
+
+  if (tree) {
+    /* create proto_tree stuff */
+    parameter_item   = proto_tree_add_text(tree, parameter_tvb, PARAMETER_HEADER_OFFSET, tvb_length(parameter_tvb), val_to_str(tag, v8_parameter_tag_values, "Unknown parameter"));
+    parameter_tree   = proto_item_add_subtree(parameter_item, ett_sua_parameter);
+
+    /* add tag and length to the sua tree */
+    proto_tree_add_item(parameter_tree, hf_v8_parameter_tag,    parameter_tvb, PARAMETER_TAG_OFFSET,    PARAMETER_TAG_LENGTH,    NETWORK_BYTE_ORDER);
+    proto_tree_add_item(parameter_tree, hf_parameter_length, parameter_tvb, PARAMETER_LENGTH_OFFSET, PARAMETER_LENGTH_LENGTH, NETWORK_BYTE_ORDER);
+  } else {
+    parameter_tree = NULL;
+    parameter_item = NULL;
+  }
+
+  /*
+  ** If no tree, only the data and ssn parameters in the source and destination 
+  ** address need to be dissected. This in order to make dissection of the data
+  ** possible when there is no tree.
+  */
+  if (!tree && tag != V8_DATA_PARAMETER_TAG 
+            && tag != V8_SOURCE_ADDRESS_PARAMETER_TAG
+            && tag != V8_DESTINATION_ADDRESS_PARAMETER_TAG
+            && tag != V8_SUBSYSTEM_NUMBER_PARAMETER_TAG)
+    return;
+
+  switch(tag) {
+  case V8_DATA_PARAMETER_TAG:
+    dissect_data_parameter(parameter_tvb, parameter_tree, parameter_item, data_tvb);
+    break;
+  case V8_INFO_STRING_PARAMETER_TAG:
+    dissect_info_string_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_ROUTING_CONTEXT_PARAMETER_TAG:
+    dissect_routing_context_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_DIAGNOSTIC_INFO_PARAMETER_TAG:
+    dissect_diagnostic_information_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_HEARTBEAT_DATA_PARAMETER_TAG:
+    dissect_heartbeat_data_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_TRAFFIC_MODE_TYPE_PARAMETER_TAG:
+    dissect_traffic_mode_type_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_ERROR_CODE_PARAMETER_TAG:
+    dissect_v8_error_code_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_STATUS_PARAMETER_TAG:
+    dissect_status_type_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_CONGESTION_LEVEL_PARAMETER_TAG:
+    dissect_congestion_level_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_ASP_IDENTIFIER_PARAMETER_TAG:
+    dissect_asp_identifier_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_AFFECTED_POINT_CODE_PARAMETER_TAG:
+    dissect_affected_destinations_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;   
+  case V8_SS7_HOP_COUNTER_PARAMETER_TAG:
+    dissect_ss7_hop_counter_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_SOURCE_ADDRESS_PARAMETER_TAG:
+    dissect_source_address_parameter(parameter_tvb, parameter_tree, source_ssn);
+    break;
+  case V8_DESTINATION_ADDRESS_PARAMETER_TAG:
+    dissect_destination_address_parameter(parameter_tvb, parameter_tree, dest_ssn);
+    break;
+  case V8_SOURCE_REFERENCE_NUMBER_PARAMETER_TAG:
+    dissect_source_reference_number_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_DESTINATION_REFERENCE_NUMBER_PARAMETER_TAG:
+    dissect_destination_reference_number_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_SCCP_CAUSE_PARAMETER_TAG:
+    dissect_sccp_cause_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_SEQUENCE_NUMBER_PARAMETER_TAG:
+    dissect_sequence_number_parameter(parameter_tvb, parameter_tree);
+    break;
+  case V8_RECEIVE_SEQUENCE_NUMBER_PARAMETER_TAG:
+    dissect_receive_sequence_number_parameter(parameter_tvb, parameter_tree);
+    break;
+  case V8_ASP_CAPABILITIES_PARAMETER_TAG:
+    dissect_asp_capabilities_parameter(parameter_tvb, parameter_tree);
+    break;
+  case V8_CREDIT_PARAMETER_TAG:
+    dissect_credit_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_USER_CAUSE_PARAMETER_TAG:
+    dissect_user_cause_parameter(parameter_tvb, parameter_tree);
+    break;
+  case V8_NETWORK_APPEARANCE_PARAMETER_TAG:
+    dissect_network_appearance_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_ROUTING_KEY_PARAMETER_TAG:
+    dissect_routing_key_parameter(parameter_tvb, parameter_tree);
+    break;
+  case V8_REGISTRATION_RESULT_PARAMETER_TAG:
+    dissect_registration_result_parameter(parameter_tvb, parameter_tree);
+    break;
+  case V8_DEREGISTRATION_RESULT_PARAMETER_TAG:
+    dissect_deregistration_result_parameter(parameter_tvb, parameter_tree);
+    break;
+  case V8_ADDRESS_RANGE_PARAMETER_TAG:
+    dissect_address_range_parameter(parameter_tvb, parameter_tree);
+    break;
+  case V8_CORRELATION_ID_PARAMETER_TAG:
+    dissect_correlation_id_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_IMPORTANCE_PARAMETER_TAG:
+    dissect_importance_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_MESSAGE_PRIORITY_PARAMETER_TAG:
+    dissect_message_priority_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_PROTOCOL_CLASS_PARAMETER_TAG:
+    dissect_protocol_class_parameter(parameter_tvb, parameter_tree);
+    break;
+  case V8_SEQUENCE_CONTROL_PARAMETER_TAG:
+    dissect_sequence_control_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_SEGMENTATION_PARAMETER_TAG:
+    dissect_segmentation_parameter(parameter_tvb, parameter_tree);
+    break;
+  case V8_SMI_PARAMETER_TAG:
+    dissect_smi_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_TID_LABEL_PARAMETER_TAG:
+    dissect_tid_label_parameter(parameter_tvb, parameter_tree);
+    break;
+  case V8_DRN_LABEL_PARAMETER_TAG:
+    dissect_drn_label_parameter(parameter_tvb, parameter_tree);
+    break;
+  case V8_GLOBAL_TITLE_PARAMETER_TAG:
+    dissect_global_title_parameter(parameter_tvb, parameter_tree);
+    break;
+  case V8_POINT_CODE_PARAMETER_TAG:
+    dissect_point_code_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_SUBSYSTEM_NUMBER_PARAMETER_TAG:
+    dissect_ssn_parameter(parameter_tvb, parameter_tree, parameter_item, &ssn);
+    if(source_ssn)
+    {
+        *source_ssn = ssn;
+    }
+    if(dest_ssn)
+    {
+        *dest_ssn = ssn;
+    }
+    break;
+  case V8_IPV4_ADDRESS_PARAMETER_TAG:
+    dissect_ipv4_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_HOSTNAME_PARAMETER_TAG:
+    dissect_hostname_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  case V8_IPV6_ADDRESS_PARAMETER_TAG:
+    dissect_ipv6_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  default:
+    dissect_unknown_parameter(parameter_tvb, parameter_tree, parameter_item);
+    break;
+  };
+  if (parameter_tree && (padding_length > 0))
+    proto_tree_add_item(parameter_tree, hf_parameter_padding, parameter_tvb, PARAMETER_HEADER_OFFSET + length, padding_length, NETWORK_BYTE_ORDER);
+}
+
+#define INFO_STRING_PARAMETER_TAG                  0x0004
+#define ROUTING_CONTEXT_PARAMETER_TAG              0x0006
+#define DIAGNOSTIC_INFO_PARAMETER_TAG              0x0007
+#define HEARTBEAT_DATA_PARAMETER_TAG               0x0009
+#define TRAFFIC_MODE_TYPE_PARAMETER_TAG            0x000b
+#define ERROR_CODE_PARAMETER_TAG                   0x000c
+#define STATUS_PARAMETER_TAG                       0x000d
+#define ASP_IDENTIFIER_PARAMETER_TAG               0x0011
+#define AFFECTED_POINT_CODE_PARAMETER_TAG          0x0012
+#define CORRELATION_ID_PARAMETER_TAG               0x0013
+#define REGISTRATION_RESULT_PARAMETER_TAG          0x0014
+#define DEREGISTRATION_RESULT_PARAMETER_TAG        0x0015
+#define REGISTRATION_STATUS_PARAMETER_TAG          0x0016
+#define DEREGISTRATION_STATUS_PARAMETER_TAG        0x0017
+#define LOCAL_ROUTING_KEY_IDENTIFIER_PARAMETER_TAG 0x0018
+
+#define SS7_HOP_COUNTER_PARAMETER_TAG              0x0101
+#define SOURCE_ADDRESS_PARAMETER_TAG               0x0102
+#define DESTINATION_ADDRESS_PARAMETER_TAG          0x0103
+#define SOURCE_REFERENCE_NUMBER_PARAMETER_TAG      0x0104
+#define DESTINATION_REFERENCE_NUMBER_PARAMETER_TAG 0x0105
+#define SCCP_CAUSE_PARAMETER_TAG                   0x0106
+#define SEQUENCE_NUMBER_PARAMETER_TAG              0x0107
+#define RECEIVE_SEQUENCE_NUMBER_PARAMETER_TAG      0x0108
+#define ASP_CAPABILITIES_PARAMETER_TAG             0x0109
+#define CREDIT_PARAMETER_TAG                       0x010a
+#define DATA_PARAMETER_TAG                         0x010b
+#define USER_CAUSE_PARAMETER_TAG                   0x010c
+#define NETWORK_APPEARANCE_PARAMETER_TAG           0x010d
+#define ROUTING_KEY_PARAMETER_TAG                  0x010e
+#define DRN_LABEL_PARAMETER_TAG                    0x010f
+#define TID_LABEL_PARAMETER_TAG                    0x0110
+#define ADDRESS_RANGE_PARAMETER_TAG                0x0111
+#define SMI_PARAMETER_TAG                          0x0112
+#define IMPORTANCE_PARAMETER_TAG                   0x0113
+#define MESSAGE_PRIORITY_PARAMETER_TAG             0x0114
+#define PROTOCOL_CLASS_PARAMETER_TAG               0x0115
+#define SEQUENCE_CONTROL_PARAMETER_TAG             0x0116
+#define SEGMENTATION_PARAMETER_TAG                 0x0117
+#define CONGESTION_LEVEL_PARAMETER_TAG             0x0118
+
+#define GLOBAL_TITLE_PARAMETER_TAG                 0x8001
+#define POINT_CODE_PARAMETER_TAG                   0x8002
+#define SUBSYSTEM_NUMBER_PARAMETER_TAG             0x8003
+#define IPV4_ADDRESS_PARAMETER_TAG                 0x8004
+#define HOSTNAME_PARAMETER_TAG                     0x8005
+#define IPV6_ADDRESS_PARAMETER_TAG                 0x8006
+
+static const value_string parameter_tag_values[] = {
+  { INFO_STRING_PARAMETER_TAG,                  "Info String" },
+  { ROUTING_CONTEXT_PARAMETER_TAG,              "Routing context" },
+  { DIAGNOSTIC_INFO_PARAMETER_TAG,              "Diagnostic info" },
+  { HEARTBEAT_DATA_PARAMETER_TAG,               "Heartbeat data" },
+  { TRAFFIC_MODE_TYPE_PARAMETER_TAG,            "Traffic mode type" },
+  { ERROR_CODE_PARAMETER_TAG,                   "Error code" },
+  { STATUS_PARAMETER_TAG,                       "Status" },
+  { ASP_IDENTIFIER_PARAMETER_TAG,               "ASP identifier" },
+  { AFFECTED_POINT_CODE_PARAMETER_TAG,          "Affected point code" },
+  { CORRELATION_ID_PARAMETER_TAG,               "Correlation ID" },
+  { REGISTRATION_RESULT_PARAMETER_TAG,          "Registration result" },
+  { DEREGISTRATION_RESULT_PARAMETER_TAG,        "Deregistration result" },
+  { REGISTRATION_STATUS_PARAMETER_TAG,          "Registration status" },
+  { DEREGISTRATION_STATUS_PARAMETER_TAG,        "Deregistration status" },
+  { LOCAL_ROUTING_KEY_IDENTIFIER_PARAMETER_TAG, "Local routing key identifier" },
+  { SS7_HOP_COUNTER_PARAMETER_TAG,              "SS7 hop counter" },
+  { SOURCE_ADDRESS_PARAMETER_TAG,               "Source address" },
+  { DESTINATION_ADDRESS_PARAMETER_TAG,          "Destination address" },
+  { SOURCE_REFERENCE_NUMBER_PARAMETER_TAG,      "Source reference number" },
+  { DESTINATION_REFERENCE_NUMBER_PARAMETER_TAG, "Destination reference number" },
+  { SCCP_CAUSE_PARAMETER_TAG,                   "SCCP cause" },
+  { SEQUENCE_NUMBER_PARAMETER_TAG,              "Sequence number" },
+  { RECEIVE_SEQUENCE_NUMBER_PARAMETER_TAG,      "Receive sequence number" },
+  { ASP_CAPABILITIES_PARAMETER_TAG,             "ASP capabilities" },
+  { CREDIT_PARAMETER_TAG,                       "Credit" },
+  { DATA_PARAMETER_TAG,                         "Data" },
+  { USER_CAUSE_PARAMETER_TAG,                   "User/Cause" },
+  { NETWORK_APPEARANCE_PARAMETER_TAG,           "Network appearance" },
+  { ROUTING_KEY_PARAMETER_TAG,                  "Routing key" },
+  { DRN_LABEL_PARAMETER_TAG,                    "DRN label" },
+  { TID_LABEL_PARAMETER_TAG,                    "TID label" },
+  { ADDRESS_RANGE_PARAMETER_TAG,                "Address range" },
+  { SMI_PARAMETER_TAG,                          "SMI" },
+  { IMPORTANCE_PARAMETER_TAG,                   "Importance" },
+  { MESSAGE_PRIORITY_PARAMETER_TAG,             "Message priority" },
+  { PROTOCOL_CLASS_PARAMETER_TAG,               "Protocol class" },
+  { SEQUENCE_CONTROL_PARAMETER_TAG,             "Sequence control" },
+  { SEGMENTATION_PARAMETER_TAG,                 "Segmentation" },
+  { CONGESTION_LEVEL_PARAMETER_TAG,             "Congestion level" },
+  { GLOBAL_TITLE_PARAMETER_TAG,                 "Global title" },
+  { POINT_CODE_PARAMETER_TAG,                   "Point code" },
+  { SUBSYSTEM_NUMBER_PARAMETER_TAG,             "Subsystem number" },
+  { IPV4_ADDRESS_PARAMETER_TAG,                 "IPv4 address" },
+  { HOSTNAME_PARAMETER_TAG,                     "Hostname" },
+  { IPV6_ADDRESS_PARAMETER_TAG,                 "IPv6 address" },
+  { 0,                                          NULL } };
+
 static void
 dissect_parameter(tvbuff_t *parameter_tvb, proto_tree *tree, tvbuff_t **data_tvb, guint8 *source_ssn, guint8 *dest_ssn)
 {
@@ -1298,84 +1609,63 @@
     parameter_tree = NULL;
     parameter_item = NULL;
   }
-/*
-** If no tree, only the data and ssn parameters in the source and destination
-** address need to be dissected. This in order to make dissection of the data
-** possible when there is no tree.
-*/
+
+  /*
+  ** If no tree, only the data and ssn parameters in the source and destination 
+  ** address need to be dissected. This in order to make dissection of the data
+  ** possible when there is no tree.
+  */
+  if (!tree && tag != DATA_PARAMETER_TAG 
+            && tag != SOURCE_ADDRESS_PARAMETER_TAG
+            && tag != DESTINATION_ADDRESS_PARAMETER_TAG
+            && tag != SUBSYSTEM_NUMBER_PARAMETER_TAG)
+    return;	/* Nothing to do here */
+
   switch(tag) {
   case DATA_PARAMETER_TAG:
     dissect_data_parameter(parameter_tvb, parameter_tree, parameter_item, data_tvb);
     break;
   case INFO_STRING_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_info_string_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_info_string_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case ROUTING_CONTEXT_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_routing_context_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_routing_context_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case DIAGNOSTIC_INFO_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_diagnostic_information_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_diagnostic_information_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case HEARTBEAT_DATA_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_heartbeat_data_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_heartbeat_data_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case TRAFFIC_MODE_TYPE_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_traffic_mode_type_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_traffic_mode_type_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case ERROR_CODE_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_error_code_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_error_code_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case STATUS_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_status_type_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_status_type_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case CONGESTION_LEVEL_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_congestion_level_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_congestion_level_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case ASP_IDENTIFIER_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_asp_identifier_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_asp_identifier_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case AFFECTED_POINT_CODE_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_affected_destinations_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_affected_destinations_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case REGISTRATION_STATUS_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_registration_status_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_registration_status_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case DEREGISTRATION_STATUS_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_deregistration_status_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_deregistration_status_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case LOCAL_ROUTING_KEY_IDENTIFIER_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_local_routing_key_identifier_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_local_routing_key_identifier_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case SS7_HOP_COUNTER_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_ss7_hop_counter_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_ss7_hop_counter_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case SOURCE_ADDRESS_PARAMETER_TAG:
     dissect_source_address_parameter(parameter_tvb, parameter_tree, source_ssn);
@@ -1384,124 +1674,76 @@
     dissect_destination_address_parameter(parameter_tvb, parameter_tree, dest_ssn);
     break;
   case SOURCE_REFERENCE_NUMBER_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_source_reference_number_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_source_reference_number_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case DESTINATION_REFERENCE_NUMBER_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_destination_reference_number_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_destination_reference_number_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case SCCP_CAUSE_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_sccp_cause_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_sccp_cause_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case SEQUENCE_NUMBER_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_sequence_number_parameter(parameter_tvb, parameter_tree);
-    }
+    dissect_sequence_number_parameter(parameter_tvb, parameter_tree);
     break;
   case RECEIVE_SEQUENCE_NUMBER_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_receive_sequence_number_parameter(parameter_tvb, parameter_tree);
-    }
+    dissect_receive_sequence_number_parameter(parameter_tvb, parameter_tree);
     break;
   case ASP_CAPABILITIES_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_asp_capabilities_parameter(parameter_tvb, parameter_tree);
-    }
+    dissect_asp_capabilities_parameter(parameter_tvb, parameter_tree);
     break;
   case CREDIT_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_credit_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_credit_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case USER_CAUSE_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_user_cause_parameter(parameter_tvb, parameter_tree);
-    }
+    dissect_user_cause_parameter(parameter_tvb, parameter_tree);
     break;
   case NETWORK_APPEARANCE_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_network_appearance_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_network_appearance_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case ROUTING_KEY_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_routing_key_parameter(parameter_tvb, parameter_tree);
-    }
+    dissect_routing_key_parameter(parameter_tvb, parameter_tree);
     break;
   case REGISTRATION_RESULT_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_registration_result_parameter(parameter_tvb, parameter_tree);
-    }
+    dissect_registration_result_parameter(parameter_tvb, parameter_tree);
     break;
   case DEREGISTRATION_RESULT_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_deregistration_result_parameter(parameter_tvb, parameter_tree);
-    }
+    dissect_deregistration_result_parameter(parameter_tvb, parameter_tree);
     break;
   case ADDRESS_RANGE_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_address_range_parameter(parameter_tvb, parameter_tree);
-    }
+    dissect_address_range_parameter(parameter_tvb, parameter_tree);
     break;
   case CORRELATION_ID_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_correlation_id_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_correlation_id_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case IMPORTANCE_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_importance_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_importance_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case MESSAGE_PRIORITY_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_message_priority_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_message_priority_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case PROTOCOL_CLASS_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_protocol_class_parameter(parameter_tvb, parameter_tree);
-    }
+    dissect_protocol_class_parameter(parameter_tvb, parameter_tree);
     break;
   case SEQUENCE_CONTROL_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_sequence_control_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_sequence_control_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case SEGMENTATION_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_segmentation_parameter(parameter_tvb, parameter_tree);
-    }
+    dissect_segmentation_parameter(parameter_tvb, parameter_tree);
     break;
   case SMI_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_smi_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_smi_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case TID_LABEL_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_tid_label_parameter(parameter_tvb, parameter_tree);
-    }
+    dissect_tid_label_parameter(parameter_tvb, parameter_tree);
     break;
   case DRN_LABEL_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_drn_label_parameter(parameter_tvb, parameter_tree);
-    }
+    dissect_drn_label_parameter(parameter_tvb, parameter_tree);
     break;
   case GLOBAL_TITLE_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_global_title_parameter(parameter_tvb, parameter_tree);
-    }
+    dissect_global_title_parameter(parameter_tvb, parameter_tree);
     break;
   case POINT_CODE_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_point_code_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_point_code_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case SUBSYSTEM_NUMBER_PARAMETER_TAG:
     dissect_ssn_parameter(parameter_tvb, parameter_tree, parameter_item, &ssn);
@@ -1515,24 +1757,16 @@
     }
     break;
   case IPV4_ADDRESS_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_ipv4_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_ipv4_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case HOSTNAME_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_hostname_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_hostname_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   case IPV6_ADDRESS_PARAMETER_TAG:
-    if (parameter_tree) {
-      dissect_ipv6_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_ipv6_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   default:
-    if (parameter_tree) {
-      dissect_unknown_parameter(parameter_tvb, parameter_tree, parameter_item);
-    }
+    dissect_unknown_parameter(parameter_tvb, parameter_tree, parameter_item);
     break;
   };
   if (parameter_tree && (padding_length > 0))
@@ -1553,7 +1787,14 @@
       total_length = MIN(total_length, remaining_length);
     /* create a tvb for the parameter including the padding bytes */
     parameter_tvb  = tvb_new_subset(parameters_tvb, offset, total_length, total_length);
-    dissect_parameter(parameter_tvb, tree, data_tvb, source_ssn, dest_ssn);
+    switch(version) {
+      case SUA_V08:
+        dissect_v8_parameter(parameter_tvb, tree, data_tvb, source_ssn, dest_ssn);
+        break;
+      case SUA_RFC:
+        dissect_parameter(parameter_tvb, tree, data_tvb, source_ssn, dest_ssn);
+        break;
+    }
     /* get rid of the handled parameter */
     offset += total_length;
   }
@@ -1597,7 +1838,14 @@
 
   /* make entry in the Protocol column on summary display */
   if (check_col(pinfo->cinfo, COL_PROTOCOL))
-     col_set_str(pinfo->cinfo, COL_PROTOCOL, "SUA");
+    switch (version) {
+      case SUA_V08:
+        col_set_str(pinfo->cinfo, COL_PROTOCOL, "SUA (ID 08)");
+        break;
+      case SUA_RFC:
+        col_set_str(pinfo->cinfo, COL_PROTOCOL, "SUA (RFC 3868)");
+        break;
+    }
 
   /* Clear entries in Info column on summary display */
   if (check_col(pinfo->cinfo, COL_INFO))
@@ -1630,6 +1878,7 @@
     { &hf_message_type,                          { "Message Type",                 "sua.message_type",                              FT_UINT8,   BASE_DEC,  NULL,                               0x0,                      "", HFILL } },
     { &hf_message_length,                        { "Message Length",               "sua.message_length",                            FT_UINT32,  BASE_DEC,  NULL,                               0x0,                      "", HFILL } },
     { &hf_parameter_tag,                         { "Parameter Tag",                "sua.parameter_tag",                             FT_UINT16,  BASE_HEX,  VALS(parameter_tag_values),         0x0,                      "", HFILL } },
+    { &hf_v8_parameter_tag,                      { "Parameter Tag",                "sua.parameter_tag",                             FT_UINT16,  BASE_HEX,  VALS(v8_parameter_tag_values),      0x0,                      "", HFILL } },
     { &hf_parameter_length,                      { "Parameter Length",             "sua.parameter_length",                          FT_UINT16,  BASE_DEC,  NULL,                               0x0,                      "", HFILL } },
     { &hf_parameter_value,                       { "Parameter Value",              "sua.parameter_value",                           FT_BYTES,   BASE_NONE, NULL,                               0x0,                      "", HFILL } },
     { &hf_parameter_padding,                     { "Padding",                      "sua.parameter_padding",                         FT_BYTES,   BASE_NONE, NULL,                               0x0,                      "", HFILL } },
@@ -1639,6 +1888,7 @@
     { &hf_heartbeat_data,                        { "Heartbeat Data",               "sua.heartbeat_data",                            FT_BYTES,   BASE_NONE, NULL,                               0x0,                      "", HFILL } },
     { &hf_traffic_mode_type,                     { "Traffic mode Type",            "sua.traffic_mode_type",                         FT_UINT32,  BASE_DEC,  VALS(traffic_mode_type_values),     0x0,                      "", HFILL } },
     { &hf_error_code,                            { "Error code",                   "sua.error_code",                                FT_UINT32,  BASE_DEC,  VALS(error_code_values),            0x0,                      "", HFILL } },
+    { &hf_v8_error_code,                         { "Error code",                   "sua.error_code",                                FT_UINT32,  BASE_DEC,  VALS(v8_error_code_values),         0x0,                      "", HFILL } },
     { &hf_status_type,                           { "Status type",                  "sua.status_type",                               FT_UINT16,  BASE_DEC,  VALS(status_type_values),           0x0,                      "", HFILL } },
     { &hf_status_info,                           { "Status info",                  "sua.status_info",                               FT_UINT16,  BASE_DEC,  NULL,                               0x0,                      "", HFILL } },
     { &hf_congestion_level,                      { "Congestion Level",             "sua.congestion_level",                          FT_UINT32,  BASE_DEC,  NULL,                               0x0,                      "", HFILL } },
@@ -1735,8 +1985,15 @@
     &ett_sua_first_remaining,
     &ett_sua_return_on_error_bit_and_protocol_class
   };
+  
   module_t *sua_module;
 
+  static enum_val_t options[] = {
+    { "draft-08", "Internet Draft version 08", SUA_V08  },
+    { "rfc3868",  "RFC 3868",                  SUA_RFC  },
+    { NULL, NULL, 0 }
+  };
+
   /* Register the protocol name and description */
   proto_sua = proto_register_protocol("SS7 SCCP-User Adaptation Layer", "SUA", "sua");
 
@@ -1746,6 +2003,7 @@
 
   sua_module = prefs_register_protocol(proto_sua, NULL);
   prefs_register_obsolete_preference(sua_module, "sua_version");
+  prefs_register_enum_preference(sua_module, "version", "SUA Version", "Version used by Ethereal", (gint *)&version, options, FALSE);
 
   sua_ssn_dissector_table = register_dissector_table("sua.ssn", "SUA SSN", FT_UINT8, BASE_DEC);
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-t38.c ethereal-0.10.7/epan/dissectors/packet-t38.c
--- ethereal-0.10.6/epan/dissectors/packet-t38.c	2004-08-12 17:42:10.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-t38.c	2004-10-20 17:34:48.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for T.38 packet dissection
  * 2003  Hans Viens
  *
- * $Id: packet-t38.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-t38.c 12255 2004-10-11 06:51:19Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -54,10 +54,10 @@
 #include <stdio.h>
 #include <string.h>
 
-#include "prefs.h"
-#include "ipproto.h"
+#include <epan/prefs.h>
+#include <epan/ipproto.h>
 #include "packet-per.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-tpkt.h"
 
 #define PORT_T38 6004  
@@ -166,7 +166,7 @@
 	return offset;
 }
 
-static per_choice_t t30_indicator_choice[] = {
+static const per_choice_t t30_indicator_choice[] = {
 	{ 0, "no-signal", ASN1_EXTENSION_ROOT,
 		dissect_t38_NULL},
 	{ 1, "cng", ASN1_EXTENSION_ROOT,
@@ -257,7 +257,7 @@
 	return offset;
 }
 
-static per_choice_t data_choice[] = {
+static const per_choice_t data_choice[] = {
 	{ 0, "v21", ASN1_EXTENSION_ROOT,
 		dissect_t38_NULL},
 	{ 1, "v27-2400", ASN1_EXTENSION_ROOT,
@@ -324,7 +324,7 @@
 	return offset;
 }
 
-static per_choice_t Type_of_msg_choice[] = {
+static const per_choice_t Type_of_msg_choice[] = {
 	{ 0, "t30-indicator", ASN1_NO_EXTENSIONS,
 		dissect_t38_t30_indicator},
 	{ 1, "data", ASN1_NO_EXTENSIONS,
@@ -347,7 +347,7 @@
 	return offset;
 }
 
-static per_choice_t Data_Field_field_type_PreCorrigendum_choice[] = {
+static const per_choice_t Data_Field_field_type_PreCorrigendum_choice[] = {
 	{ 0, "hdlc-data", ASN1_NO_EXTENSIONS,
 		dissect_t38_NULL},
 	{ 1, "hdlc-sig-end", ASN1_NO_EXTENSIONS,
@@ -368,7 +368,7 @@
 };
 
 
-static per_choice_t Data_Field_field_type_choice[] = {
+static const per_choice_t Data_Field_field_type_choice[] = {
 	{ 0, "hdlc-data", ASN1_EXTENSION_ROOT,
 		dissect_t38_NULL},
 	{ 1, "hdlc-sig-end", ASN1_EXTENSION_ROOT,
@@ -458,7 +458,7 @@
 	return offset;
 }
 
-static per_sequence_t Data_Field_item_sequence[] = {
+static const per_sequence_t Data_Field_item_sequence[] = {
 	{ "field-type", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_t38_Data_Field_field_type },
 	{ "field-data", ASN1_NO_EXTENSIONS, ASN1_OPTIONAL,
@@ -484,7 +484,7 @@
 	return offset;
 }
 
-static per_sequence_t IFPPacket_sequence[] = {
+static const per_sequence_t IFPPacket_sequence[] = {
 	{ "type-of-msg", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_t38_Type_of_msg },
 	{ "data-field", ASN1_NO_EXTENSIONS, ASN1_OPTIONAL,
@@ -580,7 +580,7 @@
 	return offset;
 }
 
-static per_sequence_t fec_info_sequence[] = {
+static const per_sequence_t fec_info_sequence[] = {
 	{ "fec-npackets", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_t38_fec_npackets },
 	{ "fec-data", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -597,7 +597,7 @@
 	return offset;
 }
 
-static per_choice_t error_recovery_choice[] = {
+static const per_choice_t error_recovery_choice[] = {
 	{ 0, "secondary-ifp-packets", ASN1_NO_EXTENSIONS,
 		dissect_t38_secondary_ifp_packets},
 	{ 1, "fec-info", ASN1_NO_EXTENSIONS,
@@ -625,7 +625,7 @@
 	return offset;
 }
 
-static per_sequence_t UDPTLPacket_sequence[] = {
+static const per_sequence_t UDPTLPacket_sequence[] = {
 	{ "seq-number", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
 		dissect_t38_seq_number },
 	{ "primary-ifp-packet", ASN1_NO_EXTENSIONS, ASN1_NOT_OPTIONAL,
@@ -896,7 +896,8 @@
 	prefs_register_bool_preference(t38_module, "reassembly",
 		"Reassemble T.38 PDUs over TPKT over TCP",
 		"Whether the dissector should reassemble T.38 PDUs spanning multiple TCP segments "
-		"when TPKT is used over TCP",
+		"when TPKT is used over TCP. "
+        "To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 		&t38_tpkt_reassembly);
 	prefs_register_enum_preference(t38_module, "tpkt_usage",
 		"TPKT used over TCP",
diff -urN ethereal-0.10.6/epan/dissectors/packet-tacacs.c ethereal-0.10.7/epan/dissectors/packet-tacacs.c
--- ethereal-0.10.6/epan/dissectors/packet-tacacs.c	2004-08-12 17:42:00.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-tacacs.c	2004-10-20 17:34:40.000000000 -0500
@@ -5,7 +5,7 @@
  * Full Tacacs+ parsing with decryption by
  *   Emanuele Caratti <wiz@iol.it>
  *
- * $Id: packet-tacacs.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-tacacs.c 12116 2004-09-27 23:29:22Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -43,8 +43,8 @@
 #include <glib.h>
 #include <epan/packet.h>
 
-#include "prefs.h"
-#include "crypt-md5.h"
+#include <epan/prefs.h>
+#include <epan/crypt-md5.h>
 #include "packet-tacacs.h"
 
 static void md5_xor( guint8 *data, char *key, int data_len, guint8 *session_id, guint8 version, guint8 seq_no );
diff -urN ethereal-0.10.6/epan/dissectors/packet-tali.c ethereal-0.10.7/epan/dissectors/packet-tali.c
--- ethereal-0.10.6/epan/dissectors/packet-tali.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/dissectors/packet-tali.c	2004-10-20 17:34:37.000000000 -0500
@@ -0,0 +1,224 @@
+/* packet-tali.c
+ *
+ * Routines for Transport Adapter Layer Interface (TALI) version 1.0 dissection (RFC 3094)
+ *
+ * Copyright : 2004 Viorel Suman, <vsuman[AT]avmob.ro>
+ *             In association with Avalanche Mobile BV, http://www.avmob.com
+ *
+ * Dissector of a TALI (Transport Adapter Layer Interface) version 1.0, as defined by the
+ * Tekelec (www.tekelec.com) in RFC 3094, http://www.ietf.org/rfc/rfc3094.txt
+ *
+ * $Id: packet-tali.c 12115 2004-09-27 22:55:15Z guy $
+ *
+ * Refer to the AUTHORS file or the AUTHORS section in the man page
+ * for contacting the author(s) of this file.
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <string.h>
+#include <glib.h>
+
+#include <epan/packet.h>
+#include <epan/prefs.h>
+#include "packet-tcp.h"
+
+#define TALI_SYNC_LENGTH    4
+#define TALI_OPCODE_LENGTH  4
+#define TALI_MSU_LENGTH     2
+#define TALI_HEADER_LENGTH  TALI_SYNC_LENGTH + TALI_OPCODE_LENGTH + TALI_MSU_LENGTH
+
+#define TALI_SYNC "TALI"
+#define TALI_TEST "test"
+#define TALI_ALLO "allo"
+#define TALI_PROH "proh"
+#define TALI_PROA "proa"
+#define TALI_MONI "moni"
+#define TALI_MONA "mona"
+#define TALI_SCCP "sccp"
+#define TALI_ISOT "isot"
+#define TALI_MTP3 "mtp3"
+#define TALI_SAAL "saal"
+
+/* Initialize the subtree pointers */
+static gint ett_tali = -1;
+static gint ett_tali_sync = -1;
+static gint ett_tali_opcode = -1;
+static gint ett_tali_msu_length = -1;
+
+static int proto_tali  = -1;
+static dissector_handle_t tali_handle;
+static dissector_table_t tali_dissector_table;
+
+/* Initialize the protocol and registered fields */
+static int hf_tali_sync_indicator = -1;
+static int hf_tali_opcode_indicator = -1;
+static int hf_tali_length_indicator = -1;
+
+static dissector_handle_t data_handle;
+
+/* Desegment TALI messages */
+static gboolean tali_desegment = TRUE;
+
+/* Code to actually dissect the packets */
+static guint
+get_tali_pdu_len(tvbuff_t *tvb, int offset)
+{
+  guint16 length;
+
+  length = tvb_get_letohs(tvb, offset + TALI_SYNC_LENGTH + TALI_OPCODE_LENGTH);
+  return length+TALI_HEADER_LENGTH;
+}
+
+static void
+dissect_tali_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+  char opcode[TALI_OPCODE_LENGTH+1]; /* TALI opcode */
+  guint16 length; /* TALI length */
+  tvbuff_t *payload_tvb = NULL;
+  
+  /* Set up structures needed to add the protocol subtree and manage it */
+  proto_item *tali_item = NULL;
+  proto_tree *tali_tree = NULL;
+  
+  tvb_memcpy(tvb, opcode, TALI_SYNC_LENGTH, TALI_OPCODE_LENGTH);
+  opcode[TALI_OPCODE_LENGTH] = '\0';
+  length = tvb_get_letohs(tvb, TALI_SYNC_LENGTH + TALI_OPCODE_LENGTH);
+
+  /* Make entries in Protocol column on summary display */
+  if (check_col(pinfo->cinfo, COL_PROTOCOL))
+    col_set_str(pinfo->cinfo, COL_PROTOCOL, "TALI");
+  
+  if (check_col(pinfo->cinfo, COL_INFO)) {
+    col_set_str(pinfo->cinfo, COL_INFO, "");
+    col_append_fstr(pinfo->cinfo, COL_INFO, "[%s] packet, [%u] bytes in payload", opcode, length);
+  }
+
+  if (tree) {
+    /* create display subtree for the protocol */
+    tali_item = proto_tree_add_item(tree, proto_tali, tvb, 0, TALI_HEADER_LENGTH, TRUE);
+    tali_tree = proto_item_add_subtree(tali_item, ett_tali);
+    proto_tree_add_string(tali_tree, hf_tali_sync_indicator,   tvb, 0, TALI_SYNC_LENGTH, TALI_SYNC);
+    proto_tree_add_string(tali_tree, hf_tali_opcode_indicator, tvb, TALI_SYNC_LENGTH, TALI_OPCODE_LENGTH, opcode);
+    proto_tree_add_uint(tali_tree, hf_tali_length_indicator, tvb, TALI_SYNC_LENGTH + TALI_OPCODE_LENGTH, TALI_MSU_LENGTH, length);
+  }
+
+  if (length > 0) {
+    payload_tvb = tvb_new_subset(tvb, TALI_HEADER_LENGTH, -1, -1);
+    if (payload_tvb != NULL && !dissector_try_string(tali_dissector_table, opcode, payload_tvb, pinfo, tree)) {
+      call_dissector(data_handle, payload_tvb, pinfo, tree);
+    }
+  }
+}
+
+static void
+dissect_tali(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+  tcp_dissect_pdus(tvb, pinfo, tree, tali_desegment, TALI_HEADER_LENGTH,
+                   get_tali_pdu_len, dissect_tali_pdu);
+}
+
+/*
+ * A 'heuristic dissector' that attemtps to establish whether we have
+ * a TALI MSU here.
+ * Only works when:
+ *	the fixed header is there
+ *	it is a 'well-known' operation
+ */
+static gboolean
+dissect_tali_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+  char sync[TALI_SYNC_LENGTH];     /* TALI sync */
+  char opcode[TALI_OPCODE_LENGTH]; /* TALI opcode */
+
+  if (tvb_reported_length(tvb) < TALI_HEADER_LENGTH)	/* Mandatory header	*/
+    return FALSE;
+
+  tvb_memcpy(tvb, sync, 0, TALI_SYNC_LENGTH);
+  if (strncmp(sync, TALI_SYNC, TALI_SYNC_LENGTH) != 0)
+    return FALSE;
+
+  tvb_memcpy(tvb, opcode, TALI_SYNC_LENGTH, TALI_OPCODE_LENGTH);
+  if (strncmp(opcode, TALI_TEST, TALI_OPCODE_LENGTH) != 0 &&
+      strncmp(opcode, TALI_ALLO, TALI_OPCODE_LENGTH) != 0 &&
+      strncmp(opcode, TALI_PROH, TALI_OPCODE_LENGTH) != 0 &&
+      strncmp(opcode, TALI_PROA, TALI_OPCODE_LENGTH) != 0 &&
+      strncmp(opcode, TALI_MONI, TALI_OPCODE_LENGTH) != 0 &&
+      strncmp(opcode, TALI_MONA, TALI_OPCODE_LENGTH) != 0 &&
+      strncmp(opcode, TALI_SCCP, TALI_OPCODE_LENGTH) != 0 &&
+      strncmp(opcode, TALI_ISOT, TALI_OPCODE_LENGTH) != 0 &&
+      strncmp(opcode, TALI_MTP3, TALI_OPCODE_LENGTH) != 0 &&
+      strncmp(opcode, TALI_SAAL, TALI_OPCODE_LENGTH) != 0)
+    return FALSE;
+
+  dissect_tali(tvb, pinfo, tree);
+  return TRUE;
+}
+
+void
+proto_register_tali(void)
+{
+  static hf_register_info hf[] = {
+    { &hf_tali_sync_indicator,
+      { "Sync", "tali.sync", FT_STRING, BASE_NONE, NULL, 0x00, "TALI SYNC", HFILL }},
+    { &hf_tali_opcode_indicator,
+      { "Opcode", "tali.opcode", FT_STRING, BASE_NONE, NULL, 0x00, "TALI Operation Code", HFILL }},
+    { &hf_tali_length_indicator,
+      { "Length", "tali.msu_length", FT_UINT16, BASE_DEC, NULL, 0x00, "TALI MSU Length", HFILL }}
+  };
+
+  /* Setup protocol subtree array */
+  static gint *ett[] = {
+    &ett_tali,
+    &ett_tali_sync,
+    &ett_tali_opcode,
+    &ett_tali_msu_length
+  };
+  module_t *tali_module;
+
+  /* Register the protocol name and description */
+  proto_tali = proto_register_protocol("Transport Adapter Layer Interface v1.0, RFC 3094", "TALI", "tali");
+  register_dissector("tali", dissect_tali, proto_tali);
+  tali_handle = create_dissector_handle(dissect_tali, proto_tali);
+  
+  /* Required function calls to register the header fields and subtrees used */
+  proto_register_field_array(proto_tali, hf, array_length(hf));
+  proto_register_subtree_array(ett, array_length(ett));
+
+  tali_dissector_table = register_dissector_table("tali.opcode", "Tali OPCODE", FT_STRING, BASE_NONE);
+
+  tali_module = prefs_register_protocol(proto_tali, NULL);
+  prefs_register_bool_preference(tali_module, "reassemble",
+	"Reassemble TALI messages spanning multiple TCP segments",
+	"Whether the TALI dissector should reassemble messages spanning multiple TCP segments."
+	" To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
+    &tali_desegment);
+}
+
+void
+proto_reg_handoff_tali(void)
+{
+  heur_dissector_add("tcp", dissect_tali_heur, proto_tali);
+
+  data_handle = find_dissector("data");
+}
+
diff -urN ethereal-0.10.6/epan/dissectors/packet-tcap.c ethereal-0.10.7/epan/dissectors/packet-tcap.c
--- ethereal-0.10.6/epan/dissectors/packet-tcap.c	2004-08-12 17:42:24.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-tcap.c	2004-10-20 17:34:53.000000000 -0500
@@ -9,7 +9,7 @@
  *
  * (append your name here for newer version)
  *
- * $Id: packet-tcap.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-tcap.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -60,12 +60,18 @@
 #endif
 
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "asn1.h"
 #include "packet-tcap.h"
 
 Tcap_Standard_Type tcap_standard = ITU_TCAP_STANDARD;
 
+#define MAX_SSN 254
+static range_t *global_ssn_range;
+static range_t *ssn_range;
+
+static dissector_handle_t tcap_handle;
+
 /* saved pinfo */
 static packet_info *g_pinfo = NULL;
 static proto_tree *g_tcap_tree = NULL;
@@ -2722,29 +2728,27 @@
     if (check_col(pinfo->cinfo, COL_PROTOCOL))
 	col_set_str(pinfo->cinfo, COL_PROTOCOL, "TCAP");
 
-    /* In the interest of speed, if "tree" is NULL, don't do any
-     * work not necessary to generate protocol tree items.
-     */
-    if (tree)
-    {
-	ti = proto_tree_add_item(tree, proto_tcap, tvb, 0, -1, FALSE);
-	tcap_tree = proto_item_add_subtree(ti, ett_tcap);
-	g_tcap_tree = tree;
+    /* Dissect the packet (even if !tree so can call sub-dissectors and update
+     * the INFO column) */
+    ti = proto_tree_add_item(tree, proto_tcap, tvb, 0, -1, FALSE);
+    tcap_tree = proto_item_add_subtree(ti, ett_tcap);
+    g_tcap_tree = tree;
 
-	if (tcap_standard == ITU_TCAP_STANDARD)
-	{
-	    dissect_tcap_message(tvb, pinfo, tcap_tree);
-	}
-	else
-	{
-	    dissect_ansi_tcap_message(tvb, pinfo, tcap_tree);
-	}
+    if (tcap_standard == ITU_TCAP_STANDARD)
+    {
+	dissect_tcap_message(tvb, pinfo, tcap_tree);
+    }
+    else
+    {
+	dissect_ansi_tcap_message(tvb, pinfo, tcap_tree);
     }
 }
 
 
 /* Register the protocol with Ethereal */
 
+void proto_reg_handoff_tcap(void);
+
 /* this format is require because a script is used to build the C function
    that calls all the protocol registration.
 */
@@ -2850,7 +2854,7 @@
     proto_register_field_array(proto_tcap, hf, array_length(hf));
     proto_register_subtree_array(ett, array_length(ett));
 
-    tcap_module = prefs_register_protocol(proto_tcap, NULL);
+    tcap_module = prefs_register_protocol(proto_tcap, proto_reg_handoff_tcap);
 
     prefs_register_enum_preference(tcap_module, "standard", "TCAP standard",
 	"The SS7 standard used in TCAP packets",
@@ -2860,6 +2864,14 @@
 	"Always show TCAP in Info column",
 	&lock_info_col);
 
+    /* Set default SSNs */
+    range_convert_str(&global_ssn_range, "5-12", MAX_SSN);
+    ssn_range = range_empty();
+
+    prefs_register_range_preference(tcap_module, "ssn", "SCCP SSNs",
+	"SCCP (and SUA) SSNs to decode as TCAP",
+	&global_ssn_range, MAX_SSN);
+
     /* we will fake a ssn subfield which has the same value obtained from sccp */
     tcap_itu_ssn_dissector_table = register_dissector_table("tcap.itu_ssn", "ITU TCAP SSN", FT_UINT8, BASE_DEC);
     tcap_ansi_ssn_dissector_table = register_dissector_table("tcap.ansi_ssn", "ANSI TCAP SSN", FT_UINT8, BASE_DEC);
@@ -2870,31 +2882,43 @@
    This format is required because a script is used to find these routines and
    create the code that calls these routines.
 */
+
+static void range_delete_callback(guint32 ssn)
+{
+    if (ssn) {
+	dissector_delete("sccp.ssn", ssn, tcap_handle);
+	dissector_delete("sua.ssn", ssn, tcap_handle);
+    }
+}
+
+static void range_add_callback(guint32 ssn)
+{
+    if (ssn) {
+	dissector_add("sccp.ssn", ssn, tcap_handle);
+	dissector_add("sua.ssn", ssn, tcap_handle);
+    }
+}
+
 void
 proto_reg_handoff_tcap(void)
 {
-    dissector_handle_t tcap_handle;
+    static gboolean prefs_initialized = FALSE;
+
+    if (!prefs_initialized) {
+
+	tcap_handle = create_dissector_handle(dissect_tcap, proto_tcap);
+	data_handle = find_dissector("data");
+
+	prefs_initialized = TRUE;
+
+    } else {
+
+	range_foreach(ssn_range, range_delete_callback);
+    }
 
-    tcap_handle = create_dissector_handle(dissect_tcap,
-	proto_tcap);
+    g_free(ssn_range);
+    ssn_range = range_copy(global_ssn_range);
 
-    dissector_add("sccp.ssn", 5, tcap_handle); /* MAP*/
-    dissector_add("sccp.ssn", 6, tcap_handle); /* HLR*/
-    dissector_add("sccp.ssn", 7, tcap_handle); /* VLR */
-    dissector_add("sccp.ssn", 8, tcap_handle); /* MSC */
-    dissector_add("sccp.ssn", 9, tcap_handle); /* EIR */
-    dissector_add("sccp.ssn", 10, tcap_handle); /* EIR */
-    dissector_add("sccp.ssn", 11, tcap_handle); /* SMS/MC */
-    dissector_add("sccp.ssn", 12, tcap_handle); /* IS41 OTAF */
-
-    dissector_add("sua.ssn", 5, tcap_handle); /* MAP*/
-    dissector_add("sua.ssn", 6, tcap_handle); /* HLR*/
-    dissector_add("sua.ssn", 7, tcap_handle); /* VLR */
-    dissector_add("sua.ssn", 8, tcap_handle); /* MSC */
-    dissector_add("sua.ssn", 9, tcap_handle); /* EIR */
-    dissector_add("sua.ssn", 10, tcap_handle); /* EIR */
-    dissector_add("sua.ssn", 11, tcap_handle); /* SMS/MC */
-    dissector_add("sua.ssn", 12, tcap_handle); /* IS41 OTAF */
+    range_foreach(ssn_range, range_add_callback);
 
-    data_handle = find_dissector("data");
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-tcp.c ethereal-0.10.7/epan/dissectors/packet-tcp.c
--- ethereal-0.10.6/epan/dissectors/packet-tcp.c	2004-08-12 17:42:21.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-tcp.c	2004-10-20 17:34:51.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-tcp.c
  * Routines for TCP packet disassembly
  *
- * $Id: packet-tcp.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-tcp.c 12259 2004-10-11 08:12:34Z sahlberg $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -29,21 +29,21 @@
 #include <stdio.h>
 #include <string.h>
 #include <glib.h>
-#include "in_cksum.h"
+#include <epan/in_cksum.h>
 
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
-#include "ipproto.h"
+#include <epan/ipproto.h>
 #include "ip_opts.h"
 #include "follow.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-tcp.h"
 #include "packet-ip.h"
 #include "packet-frame.h"
 #include <epan/conversation.h>
 #include <epan/strutil.h>
 #include "reassemble.h"
-#include "tap.h"
+#include <epan/tap.h>
 
 static int tcp_tap = -1;
 
@@ -413,10 +413,10 @@
 				g_hash_table_insert(tcp_pdu_skipping_table, 
 					(void *)pinfo->fd->num, (void *)tnp->first_frame);
 				if (check_col(pinfo->cinfo, COL_INFO)){
-					col_prepend_fstr(pinfo->cinfo, COL_INFO, "[Continuation to #%u] ",pinfo->fd->num);
+					col_prepend_fstr(pinfo->cinfo, COL_INFO, "[Continuation to #%u] ", tnp->first_frame);
 				}
 				proto_tree_add_uint(tcp_tree, hf_tcp_continuation_to,
-					tvb, 0, 0, pinfo->fd->num);
+					tvb, 0, 0, tnp->first_frame);
 				return -1;
 			}			
 			if(seq<tnp->nxtpdu && nxtseq>tnp->nxtpdu){
@@ -487,6 +487,26 @@
 	*/
 }
 
+/* This is called for SYN+ACK packets and the purpose is to verify that we
+ * have seen window scaling in both directions.
+ * If we cant find window scaling being set in both directions
+ * that means it was present in the SYN but not in the SYN+ACK
+ * (or the SYN was missing) and then we disable the window scaling
+ * for this tcp session.
+ */
+static void verify_tcp_window_scaling(packet_info *pinfo)
+{
+	struct tcp_analysis *tcpd=NULL;
+
+	/* find(or create if needed) the conversation for this tcp session */
+	tcpd=get_tcp_conversation_data(pinfo);
+
+	if( (tcpd->win_scale1==-1) || (tcpd->win_scale2==-1) ){
+		tcpd->win_scale1=-1;
+		tcpd->win_scale2=-1;
+	}
+}
+
 /* if we saw a window scaling option, store it for future reference 
 */
 static void pdu_store_window_scale_option(packet_info *pinfo, guint8 ws)
@@ -1158,12 +1178,14 @@
 	if(ta->frame_acked){
 		item = proto_tree_add_uint(tree, hf_tcp_analysis_acks_frame,
 			tvb, 0, 0, ta->frame_acked);
-        PROTO_ITEM_SET_GENERATED(item);
-	}
-	if( ta->ts.secs || ta->ts.nsecs ){
-		item = proto_tree_add_time(tree, hf_tcp_analysis_ack_rtt,
-		tvb, 0, 0, &ta->ts);
-        PROTO_ITEM_SET_GENERATED(item);
+        	PROTO_ITEM_SET_GENERATED(item);
+
+		/* only display RTT if we actually have something we are acking */
+		if( ta->ts.secs || ta->ts.nsecs ){
+			item = proto_tree_add_time(tree, hf_tcp_analysis_ack_rtt,
+			tvb, 0, 0, &ta->ts);
+        		PROTO_ITEM_SET_GENERATED(item);
+		}
 	}
 
 	if(ta->flags){
@@ -1677,7 +1699,7 @@
 			tvb_set_child_real_data_tvbuff(tvb, next_tvb);
 
 			/* add desegmented data to the data source list */
-			add_new_data_source(pinfo, next_tvb, "Desegmented TCP");
+			add_new_data_source(pinfo, next_tvb, "Reassembled TCP");
 
 			/*
 			 * Supply the sequence number of the first of the
@@ -1902,7 +1924,7 @@
 				col_set_str(pinfo->cinfo, COL_PROTOCOL, "TCP");
 			}
 			if (check_col(pinfo->cinfo, COL_INFO)){
-				col_set_str(pinfo->cinfo, COL_INFO, "[Desegmented TCP]");
+				col_set_str(pinfo->cinfo, COL_INFO, "[TCP segment of a reassembled PDU]");
 			}
 		}
 
@@ -2530,6 +2552,7 @@
   vec_t      cksum_vec[4];
   guint32    phdr[2];
   guint16    computed_cksum;
+  guint16    real_window;
   guint      length_remaining;
   gboolean   desegment_ok;
   struct tcpinfo tcpinfo;
@@ -2588,6 +2611,7 @@
   th_off_x2 = tvb_get_guint8(tvb, offset + 12);
   tcph->th_flags = tvb_get_guint8(tvb, offset + 13);
   tcph->th_win = tvb_get_ntohs(tvb, offset + 14);
+  real_window = tcph->th_win;
   tcph->th_hlen = hi_nibble(th_off_x2) * 4;  /* TCP header length, in bytes */
 
   /*
@@ -2724,7 +2748,11 @@
     proto_tree_add_boolean(field_tree, hf_tcp_flags_reset, tvb, offset + 13, 1, tcph->th_flags);
     proto_tree_add_boolean(field_tree, hf_tcp_flags_syn, tvb, offset + 13, 1, tcph->th_flags);
     proto_tree_add_boolean(field_tree, hf_tcp_flags_fin, tvb, offset + 13, 1, tcph->th_flags);
-    proto_tree_add_uint(tcp_tree, hf_tcp_window_size, tvb, offset + 14, 2, tcph->th_win);
+    if(tcp_relative_seq && (tcph->th_win!=real_window)){
+      proto_tree_add_uint_format(tcp_tree, hf_tcp_window_size, tvb, offset + 14, 2, tcph->th_win, "Window size: %d  (scaled)", tcph->th_win);
+    } else {
+      proto_tree_add_uint(tcp_tree, hf_tcp_window_size, tvb, offset + 14, 2, tcph->th_win);
+    }
   }
 
   /* Supply the sequence number of the first byte and of the first byte
@@ -2863,6 +2891,17 @@
       tcpopts, N_TCP_OPTS, TCPOPT_EOL, pinfo, field_tree);
   }
 
+  /* If there was window scaling in the SYN packet byt none in the SYN+ACK
+   * then we should just forget about the windowscaling completely.
+   */
+  if(!pinfo->fd->flags.visited){
+    if(tcp_analyze_seq && tcp_relative_seq){
+      if((tcph->th_flags & (TH_SYN|TH_ACK))==(TH_SYN|TH_ACK)) {
+        verify_tcp_window_scaling(pinfo);
+      }
+    }
+  }
+
   /* Skip over header + options */
   offset += tcph->th_hlen;
 
@@ -3092,15 +3131,15 @@
 
 		{ &hf_tcp_segment_multiple_tails,
 		{ "Multiple tail segments found",	"tcp.segment.multipletails", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
-			"Several tails were found when desegmenting the pdu", HFILL }},
+			"Several tails were found when reassembling the pdu", HFILL }},
 
 		{ &hf_tcp_segment_too_long_fragment,
 		{ "Segment too long",	"tcp.segment.toolongfragment", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
 			"Segment contained data past end of the pdu", HFILL }},
 
 		{ &hf_tcp_segment_error,
-		{ "Desegmentation error", "tcp.segment.error", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
-			"Desegmentation error due to illegal segments", HFILL }},
+		{ "Reassembling error", "tcp.segment.error", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
+			"Reassembling error due to illegal segments", HFILL }},
 
 		{ &hf_tcp_segment,
 		{ "TCP Segment", "tcp.segment", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
@@ -3112,7 +3151,7 @@
 
 		{ &hf_tcp_reassembled_in,
 		{ "Reassembled PDU in frame", "tcp.reassembled_in", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
-			"The PDU that starts but doesn't end in this segment is reassembled in this frame", HFILL }},
+			"The PDU that doesn't end in this segment is reassembled in this frame", HFILL }},
 
 		{ &hf_tcp_option_mss,
 		  { "TCP MSS Option", "tcp.options.mss", FT_BOOLEAN, 
@@ -3212,8 +3251,8 @@
 	    "Whether to check the validity of the TCP checksum",
 	    &tcp_check_checksum);
 	prefs_register_bool_preference(tcp_module, "desegment_tcp_streams",
-	    "Allow subdissector to desegment TCP streams",
-	    "Whether subdissector can request TCP streams to be desegmented",
+	    "Allow subdissector to reassemble TCP streams",
+	    "Whether subdissector can request TCP streams to be reassembled",
 	    &tcp_desegment);
 	prefs_register_bool_preference(tcp_module, "analyze_sequence_numbers",
 	    "Analyze TCP sequence numbers",
diff -urN ethereal-0.10.6/epan/dissectors/packet-tds.c ethereal-0.10.7/epan/dissectors/packet-tds.c
--- ethereal-0.10.6/epan/dissectors/packet-tds.c	2004-08-12 17:42:30.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-tds.c	2004-10-20 17:35:01.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 2000-2002, Brian Bruns <camber@ais.org>
  * Copyright 2002, Steve Langasek <vorlon@netexpress.net>
  *
- * $Id: packet-tds.c 11616 2004-08-06 20:12:20Z guy $
+ * $Id: packet-tds.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -158,7 +158,7 @@
 
 #include "packet-frame.h"
 #include "reassemble.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #define TDS_QUERY_PKT        1
 #define TDS_LOGIN_PKT        2
@@ -414,7 +414,7 @@
         {5, "Unknown1"},
         {6, "Library Name"},
         {7, "Locale"},
-        {8, "Unknown2"},
+        {8, "Database Name"},
         {0, NULL},
 };
 
@@ -599,6 +599,9 @@
 		}
 	}
 
+	/*
+	 * XXX - what about the client MAC address, etc.?
+	 */
 	length_remaining = tvb_reported_length_remaining(tvb, offset2 + len);
 	if (length_remaining > 0) {
 		dissect_tds_ntlmssp(tvb, pinfo, login_tree, offset2 + len,
@@ -1754,12 +1757,13 @@
 
 	tds_module = prefs_register_protocol(proto_tds, NULL);
 	prefs_register_bool_preference(tds_module, "desegment_buffers",
-	    "Desegment all TDS buffers spanning multiple TCP segments",
-	    "Whether the TDS dissector should desegment all TDS buffers spanning multiple TCP segments",
+	    "Reassemble TDS buffers spanning multiple TCP segments",
+	    "Whether the TDS dissector should reassemble TDS buffers spanning multiple TCP segments. "
+	    "To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 	    &tds_desegment);
 	prefs_register_bool_preference(tds_module, "defragment",
-	    "Defragment all TDS messages with multiple buffers",
-	    "Whether the TDS dissector should defragment all messages spanning multiple Netlib buffers",
+	    "Reassemble fragmented TDS messages with multiple buffers",
+	    "Whether the TDS dissector should defragment messages spanning multiple Netlib buffers",
 	    &tds_defragment);
 
 	register_init_routine(tds_init);
diff -urN ethereal-0.10.6/epan/dissectors/packet-teredo.c ethereal-0.10.7/epan/dissectors/packet-teredo.c
--- ethereal-0.10.6/epan/dissectors/packet-teredo.c	2004-08-12 17:42:24.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-teredo.c	2004-10-20 17:34:53.000000000 -0500
@@ -1,12 +1,12 @@
 /* packet-teredo.c  v.1.0
- * Routines for TEREDO packet disassembly
- *   draft-huitema-v6ops-teredo-00.txt
- *   Windows XP Teredo
+ * Routines for Teredo packets disassembly
+ *   draft-huitema-v6ops-teredo-02.txt
  *
  * Copyright 2003, Ragi BEJJANI - 6WIND - <ragi.bejjani@6wind.com>
  * Copyright 2003, Vincent JARDIN - 6WIND - <vincent.jardin@6wind.com>
+ * Copyright 2004, Remi DENIS-COURMONT
  *
- * $Id: packet-teredo.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-teredo.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -38,23 +38,31 @@
 #include <glib.h>
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
-#include "ipproto.h"
-#include "prefs.h"
+#include <epan/ipproto.h>
+#include <epan/prefs.h>
 
 #include "packet-ip.h"
-#include "tap.h"
+#include <epan/tap.h>
 
-#define UDP_PORT_TERREDO 3544
+#define UDP_PORT_TEREDO 3544
 
 static int teredo_tap = -1;
 
 static int proto_teredo = -1;
-static int hf_teredo_orgheader = -1;
-static int hf_teredo_authheader = -1;
-static int hf_teredo_orgport = -1;
-static int hf_teredo_orgaddr = -1;
+
+static int hf_teredo_auth = -1;
+static int hf_teredo_auth_idlen = -1;
+static int hf_teredo_auth_aulen = -1;
+static int hf_teredo_auth_id = -1;
+static int hf_teredo_auth_value = -1;
+static int hf_teredo_auth_nonce = -1;
+static int hf_teredo_auth_conf = -1;
+static int hf_teredo_orig = -1;
+static int hf_teredo_orig_port = -1;
+static int hf_teredo_orig_addr = -1;
 
 static gint ett_teredo = -1;
+static gint ett_teredo_auth = -1, ett_teredo_orig = -1;
 
 typedef struct {
 	guint16 th_indtyp;
@@ -69,13 +77,116 @@
 	guint32 th_iporgaddr;
 } e_teredohdr;
 
-/* Place TEREDO summary in proto tree */
-static gboolean teredo_summary_in_tree = TRUE;
-
 static dissector_table_t teredo_dissector_table;
 /*static heur_dissector_list_t heur_subdissector_list;*/
 static dissector_handle_t data_handle;
 
+static gboolean global_teredo_heur = FALSE;
+
+
+static int
+parse_teredo_auth(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+			int offset, e_teredohdr *teredoh)
+{
+	unsigned idlen, aulen;
+
+	if (check_col(pinfo->cinfo, COL_INFO))
+		col_append_sep_str (pinfo->cinfo, COL_INFO, ", ",
+					"Authentication header");
+
+	teredoh->th_indtyp = 1;
+	offset += 2;
+
+	idlen = tvb_get_guint8(tvb, offset);
+	teredoh->th_cidlen = idlen;
+	offset++;
+
+	aulen = tvb_get_guint8(tvb, offset);
+	teredoh->th_authdlen = aulen;
+	offset++;
+
+	if (tree) {
+		proto_item *ti;
+
+		ti = proto_tree_add_item(tree, hf_teredo_auth, tvb, offset-4,
+						13 + idlen + aulen, FALSE);
+		tree = proto_item_add_subtree(ti, ett_teredo_auth);
+	
+		proto_tree_add_item(tree, hf_teredo_auth_idlen, tvb,
+					offset - 2, 1, FALSE);
+		proto_tree_add_item(tree, hf_teredo_auth_aulen, tvb,
+					offset - 1, 1, FALSE);
+
+		/* idlen is usually zero */
+		if (idlen) {
+			proto_tree_add_item(tree, hf_teredo_auth_id, tvb,
+						offset, idlen, FALSE);
+			offset += idlen;
+		}
+
+		/* aulen is usually zero */
+		if (aulen) {
+			proto_tree_add_item(tree, hf_teredo_auth_value, tvb,
+						offset, aulen, FALSE);
+			offset += aulen;
+		}
+
+		proto_tree_add_item(tree, hf_teredo_auth_nonce, tvb,
+					offset, 8, FALSE);
+		offset += 8;
+
+		proto_tree_add_item(tree, hf_teredo_auth_conf, tvb,
+					offset, 1, FALSE);
+		offset++;
+	}
+	else
+		offset += idlen + aulen + 9;
+
+	tvb_memcpy(tvb, teredoh->th_nonce, offset - 9, 8);
+	teredoh->th_conf = tvb_get_guint8(tvb, offset - 1);
+
+	return offset;
+}
+
+
+static int
+parse_teredo_orig(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+			int offset, e_teredohdr *teredoh)
+{
+	if (check_col(pinfo->cinfo, COL_INFO))
+		col_append_sep_str (pinfo->cinfo, COL_INFO, ", ",
+					"Origin indication");
+
+	if (tree) {
+		proto_item *ti;
+		guint16 port;
+		guint32 addr;
+
+		ti = proto_tree_add_item(tree, hf_teredo_orig, tvb, offset,
+						8, FALSE);
+		tree = proto_item_add_subtree(ti, ett_teredo_orig);
+		offset += 2;
+
+		port = ~tvb_get_ntohs(tvb, offset);
+		proto_tree_add_uint(tree, hf_teredo_orig_port, tvb,
+					offset, 2, port);
+		offset += 2;
+
+		tvb_memcpy(tvb, (guint8 *)&addr, offset, 4);
+		proto_tree_add_ipv4(tree, hf_teredo_orig_addr, tvb,
+					offset, 4, ~addr);
+		offset += 4;
+	}
+	else
+		offset += 8;
+
+	teredoh->th_orgport = tvb_get_ntohs(tvb, offset - 6);
+	tvb_memcpy(tvb, (guint8 *)&teredoh->th_iporgaddr, offset-4, 4);
+
+	return offset;
+}
+
+
 /* Determine if there is a sub-dissector and call it.  This has been */
 /* separated into a stand alone routine to other protocol dissectors */
 /* can call to it, ie. socks	*/
@@ -103,9 +214,6 @@
 	static e_teredohdr teredohstruct[4], *teredoh;
 	static int teredoh_count = 0;
 
-	proto_item *to;
-	proto_tree *teredo_origin_tree;
-
 	teredoh_count++;
 	if(teredoh_count>=4){
 		teredoh_count=0;
@@ -113,143 +221,190 @@
 	teredoh = &teredohstruct[teredoh_count];
 
 	if (check_col(pinfo->cinfo, COL_PROTOCOL))
-		col_set_str(pinfo->cinfo, COL_PROTOCOL, "TEREDO");
+		col_set_str(pinfo->cinfo, COL_PROTOCOL, "Teredo");
 	if (check_col(pinfo->cinfo, COL_INFO))
 		col_clear(pinfo->cinfo, COL_INFO);
 
+	if (tree) {
+		ti = proto_tree_add_item(tree, proto_teredo, tvb, 0, -1, FALSE);
+		teredo_tree = proto_item_add_subtree(ti, ett_teredo);
+	}
+	else
+		teredo_tree = NULL;
+
 	teredoh->th_header  = tvb_get_ntohs(tvb, offset);
+
+	if (teredoh->th_header == 1) {
+		offset = parse_teredo_auth(tvb, pinfo, teredo_tree,
+						offset, teredoh);
+		teredoh->th_header  = tvb_get_ntohs(tvb, offset);
+	}
+	else
+		teredoh->th_indtyp  = 0;
+
+	if ( teredoh->th_header == 0 ) {
+		offset = parse_teredo_orig(tvb, pinfo, teredo_tree,
+						offset, teredoh);
+	}
+
 	teredoh->th_ip_v_hl = tvb_get_guint8(tvb, offset);
-	teredoh->th_indtyp  = 0;
 
-	if ( (teredoh->th_header)== 1 ) {
-		teredoh->th_indtyp   = teredoh->th_header;
-		teredoh->th_cidlen   = tvb_get_guint8(tvb,offset+2);     /*Authentication header octet*/
-		teredoh->th_authdlen = tvb_get_guint8(tvb,offset+3);
-		tvb_memcpy(tvb,teredoh->th_nonce,offset+4,sizeof teredoh->th_nonce);
-		teredoh->th_conf     = tvb_get_guint8(tvb,offset+12);
+	decode_teredo_ports(tvb, offset, pinfo, tree, teredoh->th_header /* , teredoh->th_orgport*/);
+	tap_queue_packet(teredo_tap, pinfo, teredoh);    
+}
 
-		/*Skip over Authentication Header (fixed length-no authentication)*/
-		offset+=13;
-		teredoh->th_header  = tvb_get_ntohs(tvb, offset);
-		teredoh->th_ip_v_hl = tvb_get_guint8(tvb, offset);
 
-		if (check_col(pinfo->cinfo, COL_INFO))
-			col_set_str(pinfo->cinfo, COL_INFO,
-				"Teredo : Tunneling IPv6 over UDP through NATs");
+static gboolean
+dissect_teredo_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+	guint16 val;
+	int offset = 0;
 
-		proto_tree_add_uint_hidden(tree, hf_teredo_authheader, tvb, offset-13, 2, teredoh->th_indtyp);	
+	if (!global_teredo_heur)
+		return FALSE;
 
-		if (teredo_summary_in_tree) {
+	if (tvb_length_remaining(tvb, offset) < 40)
+		return FALSE;
 
-			if (teredoh->th_header!=0) {
-				ti = proto_tree_add_protocol_format(tree, proto_teredo, tvb, offset-13, 13,
-					"TEREDO with Authentication encapsulation"); 
-			}
+	val = tvb_get_ntohs(tvb, offset);
 
-        } else {
-			ti = proto_tree_add_item(tree, proto_teredo, tvb, offset, 13, FALSE);
-		}
+	if (val == 1) /* possible auth header */
+	{
+		guint8 idlen, aulen;
+
+		offset += 2;
+
+		idlen = tvb_get_guint8(tvb, offset);
+		offset++;
+
+		aulen = tvb_get_guint8(tvb, offset);
+		offset += 10;
+
+		if (tvb_length_remaining(tvb, offset) < idlen + aulen + 40)
+			return FALSE;
+
+		offset += idlen + aulen;
+
+		val = tvb_get_ntohs(tvb, offset);
 	}
 
-	if ( (teredoh->th_header)== 0 ) {
-		teredoh->th_orgport=tvb_get_ntohs(tvb, offset+2);
-		tvb_memcpy(tvb, (guint8 *)&teredoh->th_iporgaddr, offset + 4, 4);
-
-		if (check_col(pinfo->cinfo, COL_INFO))
-			col_set_str(pinfo->cinfo, COL_INFO,
-				"Teredo : Tunneling IPv6 over UDP through NATs");
-
-		if (tree) {
-			if (teredo_summary_in_tree) { 
-				if (teredoh->th_indtyp==1){
-					to = proto_tree_add_protocol_format(tree, proto_teredo, tvb, offset-13, 13+8,
-						"TEREDO with Authentication and Origin Indicator encapsulation");  
-					teredo_tree = proto_item_add_subtree(to, ett_teredo);
-					proto_tree_add_protocol_format(teredo_tree,proto_teredo, tvb,offset-13, 13,
-						"Authentication encapsulation");
-					ti = proto_tree_add_protocol_format(teredo_tree, proto_teredo, tvb, offset, 8,
-						"Origin indicator encapsulation")  ;
-				} else { 
-					ti = proto_tree_add_protocol_format(tree, proto_teredo, tvb, offset, 8,
-						"TEREDO with Origin indicator encapsulation");
-				}
-			} else {
-				ti = proto_tree_add_item(tree, proto_teredo, tvb, offset, 8, FALSE);
-			}
-
-			teredo_origin_tree = proto_item_add_subtree(ti, ett_teredo);
-
-			proto_tree_add_uint_format(teredo_origin_tree, hf_teredo_orgheader, tvb, offset, 2,
-				teredoh->th_header,
-				"Teredo Origin encapsulation header: 0x%04x",
-					(teredoh->th_header));
-			proto_tree_add_uint_format(teredo_origin_tree, hf_teredo_orgport, tvb, offset + 2, 2,
-				teredoh->th_orgport,
-				"Origin port:  %u",
-					((teredoh->th_orgport)^(0xFFFF)));
-			proto_tree_add_ipv4_format(teredo_origin_tree, hf_teredo_orgaddr, tvb, offset + 4, 4,
-				teredoh->th_iporgaddr,
-				"Origin address: %s",
-					get_hostname((teredoh->th_iporgaddr)^(0xFFFFFFFF)));
-
-			proto_tree_add_uint_hidden(teredo_origin_tree, hf_teredo_orgheader, tvb, offset, 2,
-				teredoh->th_header);
-			proto_tree_add_uint_hidden(teredo_origin_tree, hf_teredo_orgport, tvb, offset+2, 2,
-				((teredoh->th_orgport)^(0xFFFF)));
-			proto_tree_add_ipv4_hidden(teredo_origin_tree, hf_teredo_orgaddr, tvb, offset + 4, 4,
-				((teredoh->th_iporgaddr)^(0xFFFFFFFF)));
-		};
+	if (val == 0) /* origin indication */
+	{
+		offset += 8;
 
-		offset+=8; /*Skip over Origin Header*/ 
-	};
+		if (tvb_length_remaining(tvb, offset) < 40)
+			return FALSE;
+
+		val = tvb_get_ntohs(tvb, offset);
+	}
 
-	if ( (hi_nibble(teredoh->th_ip_v_hl) == 6)
-		&& ((teredoh->th_indtyp) != 1) ) { /* checking if the first 4 bits = 6 */
+	/* 
+	 * We have to check upper-layer packet a little bit otherwise we will
+	 * match -almost- *ANY* packet.
+	 * These checks are in the Teredo specification by the way.
+	 * Unfortunately, that will cause false-negative if the snaplen is too
+	 * short to get the packet entirely.
+	 */
+	if ((val >> 12) == 6) /* IPv6 header */
+	{
+		/* checks IPv6 payload length */
+		val = tvb_get_ntohs(tvb, offset + 4);
+		offset += 40;
 
-		if (tree) {
-			if (teredo_summary_in_tree) {
-				ti = proto_tree_add_protocol_format(tree, proto_teredo, tvb, offset, 0,"TEREDO simple encapsulation  ");
-			}
-		}
+		if (val > 65467)
+			return FALSE; /* length too big for Teredo */
 
-		offset+=0;
+		if (tvb_length_remaining(tvb, offset) != val)
+			return FALSE; /* length mismatch */
+
+		dissect_teredo (tvb, pinfo, tree);
+		return TRUE;
 	}
 
-	decode_teredo_ports(tvb, offset, pinfo, tree, teredoh->th_header /* , teredoh->th_orgport*/);
-	tap_queue_packet(teredo_tap, pinfo, teredoh);    
+	return FALSE; /* not an IPv6 packet */
 }
 
+
 void
 proto_register_teredo(void)
 {
 	static hf_register_info hf[] = {
-
-		{ &hf_teredo_authheader,
-		{ "Teredo Authentication packet Header","teredo.authheader", FT_UINT16, BASE_DEC, NULL, 0x0,"", HFILL }},
-
-		{ &hf_teredo_orgheader,
-		{ "Teredo Origin encapsulation header","teredo.orgheader", FT_UINT16, BASE_DEC, NULL, 0x0,"", HFILL }},
-
-		{ &hf_teredo_orgport,
-		{ "Origin Port",	"teredo.orgport", FT_UINT16, BASE_DEC, NULL, 0x0,"", HFILL }},
-
-		{ &hf_teredo_orgaddr,
-		{ "Origin IPv4 address","teredo.orgaddr", FT_IPv4, BASE_NONE, NULL, 0x0,"", HFILL }},
-
+		/* Authentication header */
+		{ &hf_teredo_auth,
+		{ "Teredo Authentication header", "teredo.auth",
+		  FT_NONE, BASE_NONE, NULL, 0x0,
+		  "Teredo Authentication header", HFILL }},
+  
+		{ &hf_teredo_auth_idlen,
+		{ "Client identifier length", "teredo.auth.idlen",
+		  FT_UINT8, BASE_DEC, NULL, 0x0,
+		  "Client identifier length (ID-len)", HFILL }},
+
+		{ &hf_teredo_auth_aulen,
+		{ "Authentication value length", "teredo.auth.aulen",
+		  FT_UINT8, BASE_DEC, NULL, 0x0,
+		  "Authentication value length (AU-len)", HFILL }},
+
+		{ &hf_teredo_auth_id,
+		{ "Client identifier", "teredo.auth.id",
+		  FT_BYTES, BASE_NONE, NULL, 0x0,
+		  "Client identifier (ID)", HFILL }},
+
+		{ &hf_teredo_auth_value,
+		{ "Authentication value", "teredo.auth.value",
+		  FT_BYTES, BASE_NONE, NULL, 0x0,
+		  "Authentication value (hash)", HFILL }},
+
+		{ &hf_teredo_auth_nonce,
+		{ "Nonce value", "teredo.auth.nonce",
+		  FT_BYTES, BASE_NONE, NULL, 0x0,
+		  "Nonce value prevents spoofing Teredo server.",
+		  HFILL }},
+
+		{ &hf_teredo_auth_conf,
+		{ "Confirmation byte", "teredo.auth.conf",
+		  FT_BYTES, BASE_NONE, NULL, 0x0,
+		  "Confirmation byte is zero upon successful authentication.",
+		  HFILL }},
+
+		/* Origin indication */
+		{ &hf_teredo_orig,
+		{ "Teredo Origin Indication header", "teredo.orig",
+		  FT_NONE, BASE_NONE, NULL, 0x0,
+		  "Teredo Origin Indication", HFILL }},
+
+		{ &hf_teredo_orig_port,
+		{ "Origin UDP port", "teredo.orig.port",
+		  FT_UINT16, BASE_DEC, NULL, 0x0,
+		  "Origin UDP port", HFILL }},
+
+		{ &hf_teredo_orig_addr,
+		{ "Origin IPv4 address", "teredo.orig.addr",
+		  FT_IPv4, BASE_NONE, NULL, 0x0,
+		  "Origin IPv4 address", HFILL }},
 	};
 
 	static gint *ett[] = {
-		&ett_teredo,
+		&ett_teredo, &ett_teredo_auth, &ett_teredo_orig
 	};
 
-	proto_teredo = proto_register_protocol("TEREDO Tunneling IPv6 over UDP through NATs",
-	    "TEREDO", "teredo");
+	module_t *teredo_module;
+
+	proto_teredo = proto_register_protocol(
+		"Teredo IPv6 over UDP tunneling", "Teredo", "teredo");
 	proto_register_field_array(proto_teredo, hf, array_length(hf));
 	proto_register_subtree_array(ett, array_length(ett));
 
 /* subdissector code */
-	teredo_dissector_table = register_dissector_table("teredo","TEREDO ", FT_UINT16, BASE_DEC);
-/*	register_heur_dissector_list("teredo.heur", &heur_subdissector_list); */
+	teredo_dissector_table = register_dissector_table("teredo","Teredo ", FT_UINT16, BASE_DEC);
+
+	teredo_module = prefs_register_protocol(proto_teredo, NULL);
+
+	prefs_register_bool_preference(teredo_module, "heuristic_teredo",
+		"Try to decode UDP packets as Teredo IPv6",
+		"Check this to decode IPv6 traffic between Teredo clients and "
+		"relays",
+		&global_teredo_heur);
 
 }
 
@@ -262,6 +417,7 @@
 	data_handle   = find_dissector("ipv6");
 	teredo_tap    = register_tap("teredo");
 
-	dissector_add("udp.port", UDP_PORT_TERREDO, teredo_handle);
+	dissector_add("udp.port", UDP_PORT_TEREDO, teredo_handle);
+	heur_dissector_add("udp", dissect_teredo_heur, proto_teredo);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-time.c ethereal-0.10.7/epan/dissectors/packet-time.c
--- ethereal-0.10.6/epan/dissectors/packet-time.c	2004-08-12 17:42:29.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-time.c	2004-10-20 17:35:00.000000000 -0500
@@ -3,7 +3,7 @@
  *
  * Richard Sharpe <rsharpe@ns.aus.com>
  *
- * $Id: packet-time.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-time.c 11876 2004-09-01 18:48:31Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -65,7 +65,7 @@
       guint32 delta_seconds = tvb_get_ntohl(tvb, 0);
       proto_tree_add_uint_format(time_tree, hf_time_time, tvb, 0, 4,
 				 delta_seconds, "%s",
-				 abs_time_secs_to_str(delta_seconds-(guint32)(70*365+18)*24*3600));
+				 abs_time_secs_to_str(delta_seconds-2208988800U));
     }
   }
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-tns.c ethereal-0.10.7/epan/dissectors/packet-tns.c
--- ethereal-0.10.6/epan/dissectors/packet-tns.c	2004-08-12 17:42:28.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-tns.c	2004-10-20 17:34:59.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-tns.c
  * Routines for Oracle TNS packet dissection
  *
- * $Id: packet-tns.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-tns.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,7 +36,7 @@
 #include "packet-tcp.h"
 #include "packet-tns.h"
 
-#include "prefs.h"
+#include <epan/prefs.h>
 
 /* desegmentation of TNS over TCP */
 static gboolean tns_desegment = TRUE;
@@ -1325,8 +1325,9 @@
 
 	tns_module = prefs_register_protocol(proto_tns, NULL);
 	prefs_register_bool_preference(tns_module, "desegment_tns_messages",
-	  "Desegment all TNS messages spanning multiple TCP segments",
-	  "Whether the TNS dissector should desegment all messages spanning multiple TCP segments",
+	  "Reassemble TNS messages spanning multiple TCP segments",
+	  "Whether the TNS dissector should reassemble messages spanning multiple TCP segments. "
+	  "To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 	  &tns_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-tpkt.c ethereal-0.10.7/epan/dissectors/packet-tpkt.c
--- ethereal-0.10.6/epan/dissectors/packet-tpkt.c	2004-08-12 17:42:10.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-tpkt.c	2004-10-20 17:34:48.000000000 -0500
@@ -7,7 +7,7 @@
  * Routine to dissect RFC 1006 TPKT packet containing OSI TP PDU
  * Copyright 2001, Martin Thomas <Martin_A_Thomas@yahoo.com>
  *
- * $Id: packet-tpkt.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-tpkt.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -40,7 +40,7 @@
 
 #include "packet-tpkt.h"
 #include "packet-frame.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 /* TPKT header fields             */
 static int proto_tpkt          = -1;
@@ -379,8 +379,9 @@
 
 	tpkt_module = prefs_register_protocol(proto_tpkt, NULL);
 	prefs_register_bool_preference(tpkt_module, "desegment",
-	    "Desegment all TPKT messages spanning multiple TCP segments",
-	    "Whether the TPKT dissector should desegment all messages spanning multiple TCP segments",
+	    "Reassemble TPKT messages spanning multiple TCP segments",
+	    "Whether the TPKT dissector should reassemble messages spanning multiple TCP segments. "
+	    "To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 	    &tpkt_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-tr.c ethereal-0.10.7/epan/dissectors/packet-tr.c
--- ethereal-0.10.6/epan/dissectors/packet-tr.c	2004-08-12 17:42:15.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-tr.c	2004-10-20 17:34:50.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for Token-Ring packet disassembly
  * Gilbert Ramirez <gram@alumni.rice.edu>
  *
- * $Id: packet-tr.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-tr.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -33,8 +33,8 @@
 #include <epan/packet.h>
 #include "packet-tr.h"
 #include "packet-llc.h"
-#include "prefs.h"
-#include "tap.h"
+#include <epan/prefs.h>
+#include <epan/tap.h>
 
 static int proto_tr = -1;
 static int hf_tr_dst = -1;
diff -urN ethereal-0.10.6/epan/dissectors/packet-udp.c ethereal-0.10.7/epan/dissectors/packet-udp.c
--- ethereal-0.10.6/epan/dissectors/packet-udp.c	2004-08-12 17:42:27.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-udp.c	2004-10-20 17:34:59.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-udp.c
  * Routines for UDP packet disassembly
  *
- * $Id: packet-udp.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-udp.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,15 +36,15 @@
 #include <glib.h>
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
-#include "ipproto.h"
-#include "in_cksum.h"
-#include "prefs.h"
+#include <epan/ipproto.h>
+#include <epan/in_cksum.h>
+#include <epan/prefs.h>
 
 #include "packet-udp.h"
 
 #include "packet-ip.h"
 #include <epan/conversation.h>
-#include "tap.h"
+#include <epan/tap.h>
 
 static int udp_tap = -1;
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-v120.c ethereal-0.10.7/epan/dissectors/packet-v120.c
--- ethereal-0.10.6/epan/dissectors/packet-v120.c	2004-08-12 17:41:59.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-v120.c	2004-10-20 17:34:39.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for v120 frame disassembly
  * Bert Driehuis <driehuis@playbeing.org>
  *
- * $Id: packet-v120.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-v120.c 12127 2004-09-28 23:48:02Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -31,7 +31,7 @@
 #include <glib.h>
 #include <string.h>
 #include <epan/packet.h>
-#include "xdlc.h"
+#include <epan/xdlc.h>
 
 static int proto_v120 = -1;
 static int hf_v120_address = -1;
diff -urN ethereal-0.10.6/epan/dissectors/packet-vines.c ethereal-0.10.7/epan/dissectors/packet-vines.c
--- ethereal-0.10.6/epan/dissectors/packet-vines.c	2004-08-12 17:42:02.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-vines.c	2004-10-20 17:34:41.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-vines.c
  * Routines for Banyan VINES protocol packet disassembly
  *
- * $Id: packet-vines.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-vines.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Don Lafontaine <lafont02@cn.ca>
  *
@@ -35,7 +35,7 @@
 #include "packet-vines.h"
 #include "etypes.h"
 #include "ppptypes.h"
-#include "ipproto.h"
+#include <epan/ipproto.h>
 #include "arcnet_pids.h"
 #include "llcsaps.h"
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-vj.c ethereal-0.10.7/epan/dissectors/packet-vj.c
--- ethereal-0.10.6/epan/dissectors/packet-vj.c	2004-08-12 17:42:01.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-vj.c	2004-10-20 17:34:41.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-vj.c
  * Routines for Van Jacobson header decompression.
  *
- * $Id: packet-vj.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-vj.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -66,11 +66,11 @@
 #include <glib.h>
 #include <string.h>
 #include <epan/packet.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-ppp.h"
 #include "ppptypes.h"
-#include "ipproto.h"
-#include "in_cksum.h"
+#include <epan/ipproto.h>
+#include <epan/in_cksum.h>
 
 /* Define relevant IP/TCP parameters */
 #define IP_FIELD_TOT_LEN      2 /* Total length field in IP hdr           */
diff -urN ethereal-0.10.6/epan/dissectors/packet-vrrp.c ethereal-0.10.7/epan/dissectors/packet-vrrp.c
--- ethereal-0.10.6/epan/dissectors/packet-vrrp.c	2004-08-12 17:42:09.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-vrrp.c	2004-10-20 17:34:47.000000000 -0500
@@ -4,7 +4,7 @@
  *
  * Heikki Vatiainen <hessu@cs.tut.fi>
  *
- * $Id: packet-vrrp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-vrrp.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -32,8 +32,8 @@
 #include <string.h>
 #include <glib.h>
 #include <epan/packet.h>
-#include "ipproto.h"
-#include "in_cksum.h"
+#include <epan/ipproto.h>
+#include <epan/in_cksum.h>
 
 static gint proto_vrrp = -1;
 static gint ett_vrrp = -1;
diff -urN ethereal-0.10.6/epan/dissectors/packet-wbxml.c ethereal-0.10.7/epan/dissectors/packet-wbxml.c
--- ethereal-0.10.6/epan/dissectors/packet-wbxml.c	2004-08-12 17:42:31.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-wbxml.c	2004-10-20 17:35:02.000000000 -0500
@@ -3,7 +3,7 @@
  * Routines for WAP Binary XML dissection
  * Copyright 2003, 2004, Olivier Biot.
  *
- * $Id: packet-wbxml.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-wbxml.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Refer to the AUTHORS file or the AUTHORS section in the man page
  * for contacting the author(s) of this file.
@@ -51,7 +51,7 @@
 
 #include <epan/packet.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 
 /* We need the function tvb_get_guintvar() */
 #include "packet-wap.h"
diff -urN ethereal-0.10.6/epan/dissectors/packet-windows-common.c ethereal-0.10.7/epan/dissectors/packet-windows-common.c
--- ethereal-0.10.6/epan/dissectors/packet-windows-common.c	2004-08-12 17:42:30.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-windows-common.c	2004-10-20 17:35:01.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-windows-common.c
  * Routines for dissecting various Windows data types
  *
- * $Id: packet-windows-common.c 11592 2004-08-03 02:28:49Z guy $
+ * $Id: packet-windows-common.c 11774 2004-08-19 09:00:20Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -1113,14 +1113,18 @@
 };
 
 #ifndef TIME_T_MIN
-#define TIME_T_MIN ((time_t)0 < (time_t) -1 ? (time_t) 0 \
-		    : ~ (time_t) 0 << (sizeof (time_t) * CHAR_BIT - 1))
+#define TIME_T_MIN ((time_t) ((time_t)0 < (time_t) -1 ? (time_t) 0 \
+		    : ~ (time_t) 0 << (sizeof (time_t) * CHAR_BIT - 1)))
 #endif
 #ifndef TIME_T_MAX
-#define TIME_T_MAX (~ (time_t) 0 - TIME_T_MIN)
+#define TIME_T_MAX ((time_t) (~ (time_t) 0 - TIME_T_MIN))
 #endif
 
-#define TIME_FIXUP_CONSTANT (369.0*365.25*24*60*60-(3.0*24*60*60+6.0*60*60))
+/*
+ * Number of seconds between the UN*X epoch (January 1, 1970, 00:00:00 GMT)
+ * and the Windows NT epoch (January 1, 1601, 00:00:00 "GMT").
+ */
+#define TIME_FIXUP_CONSTANT G_GINT64_CONSTANT(11644473600U)
 
 /*
  * Translate an 8-byte FILETIME value, given as the upper and lower 32 bits,
@@ -1145,7 +1149,9 @@
 static gboolean
 nt_time_to_nstime(guint32 filetime_high, guint32 filetime_low, nstime_t *tv)
 {
-	double d;
+	guint64 d;
+	gint64 secs;
+	int nsecs;
 	/* The next two lines are a fix needed for the
 	    broken SCO compiler. JRA. */
 	time_t l_time_min = TIME_T_MIN;
@@ -1154,24 +1160,23 @@
 	if (filetime_high == 0)
 		return FALSE;
 
-	/*
-	 * Get the time as a double, in seconds and fractional seconds.
-	 */
-	d = ((double)filetime_high)*4.0*(double)(1<<30);
-	d += filetime_low;
-	d *= 1.0e-7;
+	d = ((guint64)filetime_high << 32) | filetime_low;
+
+	/* Split into seconds and nanoseconds. */
+	secs = d / 10000000;
+	nsecs = (int)((d % 10000000)*100);
 
-	/* Now adjust by 369 years, to make the seconds since 1970. */
-	d -= TIME_FIXUP_CONSTANT;
+	/* Now adjust the seconds. */
+	secs -= TIME_FIXUP_CONSTANT;
 
-	if (!(l_time_min <= d && d <= l_time_max))
+	if (!(l_time_min <= secs && secs <= l_time_max))
 		return FALSE;
 
 	/*
 	 * Get the time as seconds and nanoseconds.
 	 */
-	tv->secs = (time_t) d;
-	tv->nsecs = (int) ((d - tv->secs)*1000000000);
+	tv->secs = (time_t) secs;
+	tv->nsecs = nsecs;
 
 	return TRUE;
 }
diff -urN ethereal-0.10.6/epan/dissectors/packet-wsp.c ethereal-0.10.7/epan/dissectors/packet-wsp.c
--- ethereal-0.10.6/epan/dissectors/packet-wsp.c	2004-08-12 17:42:10.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-wsp.c	2004-10-20 17:34:48.000000000 -0500
@@ -2,7 +2,7 @@
  *
  * Routines to dissect WSP component of WAP traffic.
  *
- * $Id: packet-wsp.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-wsp.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Refer to the AUTHORS file or the AUTHORS section in the man page
  * for contacting the author(s) of this file.
@@ -82,7 +82,7 @@
 #endif
 
 /* Statistics (see doc/README.tapping) */
-#include "tap.h"
+#include <epan/tap.h>
 static int wsp_tap = -1;
 
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-x11.c ethereal-0.10.7/epan/dissectors/packet-x11.c
--- ethereal-0.10.6/epan/dissectors/packet-x11.c	2004-08-12 17:42:05.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-x11.c	2004-10-20 17:34:43.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 2000, Christophe Tronche <ch.tronche@computer.org>
  * Copyright 2003, Michael Shuldman
  *
- * $Id: packet-x11.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-x11.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -64,7 +64,7 @@
 #include <epan/packet.h>
 #include <epan/conversation.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "packet-frame.h"
 #include "packet-x11-keysymdef.h"
 
@@ -1129,6 +1129,7 @@
 #define LISTofATOM(name, length) { listOfAtom(tvb, offsetp, t, hf_x11_##name, (length) / 4, little_endian); }
 #define LISTofBYTE(name, length) { listOfByte(tvb, offsetp, t, hf_x11_##name, (length), little_endian); }
 #define LISTofCARD8(name, length) { listOfByte(tvb, offsetp, t, hf_x11_##name, (length), little_endian); }
+#define LISTofIPADDRESS(name, length) { listOfByte(tvb, offsetp, t, hf_x11_##name, (length), FALSE); }
 #define LISTofCARD32(name, length) { listOfCard32(tvb, offsetp, t, hf_x11_##name, hf_x11_##name##_item, (length) / 4, little_endian); }
 #define LISTofCOLORITEM(name, length) { listOfColorItem(tvb, offsetp, t, hf_x11_##name, (length) / 12, little_endian); }
 #define LISTofKEYCODE(map, name, length) { listOfKeycode(tvb, offsetp, t, hf_x11_##name, map, (length), little_endian); }
@@ -3995,7 +3996,7 @@
 		   * XXX - what about IPv6?  Is that a family of
 		   * FAMILY_INTERNET (0) with a length of 16?
 		   */
-		  LISTofCARD8(ip_address, v16);
+		  LISTofIPADDRESS(ip_address, v16);
 	    } else
 		  LISTofCARD8(address, v16);
 	    break;
@@ -5363,8 +5364,9 @@
 
       x11_module = prefs_register_protocol(proto_x11, NULL);
       prefs_register_bool_preference(x11_module, "desegment",
-	    "Desegment all X11 messages spanning multiple TCP segments",
-	    "Whether the X11 dissector should desegment all messages spanning multiple TCP segments",
+	    "Reassemble X11 messages spanning multiple TCP segments",
+	    "Whether the X11 dissector should reassemble messages spanning multiple TCP segments. "
+	    "To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 	    &x11_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-x25.c ethereal-0.10.7/epan/dissectors/packet-x25.c
--- ethereal-0.10.6/epan/dissectors/packet-x25.c	2004-08-12 17:42:26.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-x25.c	2004-10-20 17:34:55.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for X.25 packet disassembly
  * Olivier Abad <oabad@noos.fr>
  *
- * $Id: packet-x25.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-x25.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -35,7 +35,7 @@
 #include <epan/packet.h>
 #include <epan/circuit.h>
 #include "reassemble.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "nlpid.h"
 #include "x264_prt_id.h"
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-x509af.c ethereal-0.10.7/epan/dissectors/packet-x509af.c
--- ethereal-0.10.6/epan/dissectors/packet-x509af.c	2004-08-12 17:42:26.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-x509af.c	2004-10-20 17:34:55.000000000 -0500
@@ -1,15 +1,14 @@
 /* Do not modify this file.                                                   */
 /* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509af.c                                                            */
+/* ./packet-x509af.c                                                          */
 /* ../../tools/asn2eth.py -X -b -e -p x509af -c x509af.cnf -s packet-x509af-template AuthenticationFramework.asn */
 
 /* Input file: packet-x509af-template.c */
-/* Include files: packet-x509af-hf.c, packet-x509af-ett.c, packet-x509af-fn.c, packet-x509af-hfarr.c, packet-x509af-ettarr.c, packet-x509af-val.h */
 
 /* packet-x509af.c
  * Routines for X.509 Authentication Framework packet dissection
  *
- * $Id: packet-x509af-template.c,v 1.2 2004/05/25 21:07:43 guy Exp $
+ * $Id: packet-x509af-template.c 12245 2004-10-08 20:28:04Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -56,21 +55,13 @@
 static int hf_x509af_algorithm_id = -1;
 static int hf_x509af_extension_id = -1;
 static int hf_x509af_critical = -1;               /* BOOLEAN */
-static int hf_x509af_id_at_userCertificate = -1;
-static int hf_x509af_id_at_cAcertificate = -1;
-static int hf_x509af_id_at_crossCertificatePair = -1;
-static int hf_x509af_id_at_authorityRevocationList = -1;
-static int hf_x509af_id_at_certificateRevocationList = -1;
-static int hf_x509af_id_at_attributeCertificate = -1;
-static int hf_x509af_id_at_attributeCertificateRevocationList = -1;
 
 /*--- Included file: packet-x509af-hf.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509af-hf.c                                                         */
-/* ../../tools/asn2eth.py -X -b -e -p x509af -c x509af.cnf -s packet-x509af-template AuthenticationFramework.asn */
-
+static int hf_x509af_Certificate_PDU = -1;        /* Certificate */
+static int hf_x509af_CertificatePair_PDU = -1;    /* CertificatePair */
+static int hf_x509af_CertificateList_PDU = -1;    /* CertificateList */
+static int hf_x509af_AttributeCertificate_PDU = -1;  /* AttributeCertificate */
 static int hf_x509af_signedCertificate = -1;      /* T_signedCertificate */
 static int hf_x509af_version = -1;                /* Version */
 static int hf_x509af_serialNumber = -1;           /* CertificateSerialNumber */
@@ -104,7 +95,7 @@
 static int hf_x509af_nextUpdate = -1;             /* Time */
 static int hf_x509af_revokedCertificates = -1;    /* T_revokedCertificates */
 static int hf_x509af_revokedCertificates_item = -1;  /* T_revokedCertificates_item */
-static int hf_x509af_userCertificate1 = -1;       /* CertificateSerialNumber */
+static int hf_x509af_revokedUserCertificate = -1;  /* CertificateSerialNumber */
 static int hf_x509af_revocationDate = -1;         /* Time */
 static int hf_x509af_crlEntryExtensions = -1;     /* Extensions */
 static int hf_x509af_crlExtensions = -1;          /* Extensions */
@@ -116,7 +107,7 @@
 static int hf_x509af_info_subject = -1;           /* InfoSubject */
 static int hf_x509af_baseCertificateID = -1;      /* IssuerSerial */
 static int hf_x509af_infoSubjectName = -1;        /* GeneralNames */
-static int hf_x509af_issuer1 = -1;                /* GeneralNames */
+static int hf_x509af_issuerName = -1;             /* GeneralNames */
 static int hf_x509af_attCertValidityPeriod = -1;  /* AttCertValidityPeriod */
 static int hf_x509af_attributes = -1;             /* SEQUNCE_OF_Attribute */
 static int hf_x509af_attributes_item = -1;        /* Attribute */
@@ -139,11 +130,6 @@
 
 /*--- Included file: packet-x509af-ett.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509af-ett.c                                                        */
-/* ../../tools/asn2eth.py -X -b -e -p x509af -c x509af.cnf -s packet-x509af-template AuthenticationFramework.asn */
-
 static gint ett_x509af_Certificate = -1;
 static gint ett_x509af_T_signedCertificate = -1;
 static gint ett_x509af_AlgorithmIdentifier = -1;
@@ -206,7 +192,7 @@
   return offset;
 }
 
-static ber_sequence Extension_sequence[] = {
+static const ber_sequence Extension_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_hf_x509af_extension_id },
   { BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_critical },
   { BER_CLASS_ANY, 0, 0, dissect_hf_x509af_extension_type },
@@ -239,7 +225,7 @@
 }
 
 /* Algorithm Identifier can not yet be handled by the compiler */
-static ber_sequence AlgorithmIdentifier_sequence[] = {
+static const ber_sequence AlgorithmIdentifier_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_hf_x509af_algorithm_id },
   { BER_CLASS_ANY, 0, 0, dissect_hf_x509af_algorithm_type },
   { 0, 0, 0, NULL }
@@ -256,11 +242,6 @@
 
 /*--- Included file: packet-x509af-fn.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509af-fn.c                                                         */
-/* ../../tools/asn2eth.py -X -b -e -p x509af -c x509af.cnf -s packet-x509af-template AuthenticationFramework.asn */
-
 /*--- Fields for imported types ---*/
 
 static int dissect_issuer(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -278,8 +259,8 @@
 static int dissect_infoSubjectName(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_x509ce_GeneralNames(FALSE, tvb, offset, pinfo, tree, hf_x509af_infoSubjectName);
 }
-static int dissect_issuer1(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509ce_GeneralNames(FALSE, tvb, offset, pinfo, tree, hf_x509af_issuer1);
+static int dissect_issuerName(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_x509ce_GeneralNames(FALSE, tvb, offset, pinfo, tree, hf_x509af_issuerName);
 }
 static int dissect_attributes_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_x509if_Attribute(FALSE, tvb, offset, pinfo, tree, hf_x509af_attributes_item);
@@ -330,8 +311,8 @@
 static int dissect_serialNumber(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_x509af_CertificateSerialNumber(FALSE, tvb, offset, pinfo, tree, hf_x509af_serialNumber);
 }
-static int dissect_userCertificate1(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509af_CertificateSerialNumber(FALSE, tvb, offset, pinfo, tree, hf_x509af_userCertificate1);
+static int dissect_revokedUserCertificate(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_x509af_CertificateSerialNumber(FALSE, tvb, offset, pinfo, tree, hf_x509af_revokedUserCertificate);
 }
 static int dissect_serial(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_x509af_CertificateSerialNumber(FALSE, tvb, offset, pinfo, tree, hf_x509af_serial);
@@ -387,7 +368,7 @@
   { 0, NULL }
 };
 
-static ber_choice Time_choice[] = {
+static const ber_choice Time_choice[] = {
   {   0, BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_utcTime },
   {   1, BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_NOOWNTAG, dissect_generalizedTime },
   { 0, 0, 0, 0, NULL }
@@ -416,7 +397,7 @@
   return dissect_x509af_Time(FALSE, tvb, offset, pinfo, tree, hf_x509af_revocationDate);
 }
 
-static ber_sequence Validity_sequence[] = {
+static const ber_sequence Validity_sequence[] = {
   { BER_CLASS_UNI, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_notBefore },
   { BER_CLASS_UNI, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_notAfter },
   { 0, 0, 0, NULL }
@@ -449,13 +430,13 @@
   return dissect_x509af_BIT_STRING(FALSE, tvb, offset, pinfo, tree, hf_x509af_subjectPublicKey);
 }
 
-static ber_sequence SubjectPublicKeyInfo_sequence[] = {
+static const ber_sequence SubjectPublicKeyInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithm },
   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_subjectPublicKey },
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_x509af_SubjectPublicKeyInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
                                 SubjectPublicKeyInfo_sequence, hf_index, ett_x509af_SubjectPublicKeyInfo);
@@ -470,7 +451,7 @@
   return dissect_x509af_Extension(FALSE, tvb, offset, pinfo, tree, hf_x509af_Extensions_item);
 }
 
-static ber_sequence Extensions_sequence_of[1] = {
+static const ber_sequence Extensions_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_Extensions_item },
 };
 
@@ -491,7 +472,7 @@
   return dissect_x509af_Extensions(FALSE, tvb, offset, pinfo, tree, hf_x509af_crlExtensions);
 }
 
-static ber_sequence T_signedCertificate_sequence[] = {
+static const ber_sequence T_signedCertificate_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_version },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_serialNumber },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signature },
@@ -516,7 +497,7 @@
   return dissect_x509af_T_signedCertificate(FALSE, tvb, offset, pinfo, tree, hf_x509af_signedCertificate);
 }
 
-static ber_sequence Certificate_sequence[] = {
+static const ber_sequence Certificate_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signedCertificate },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithmIdentifier },
   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
@@ -546,7 +527,7 @@
   return dissect_x509af_Certificate(FALSE, tvb, offset, pinfo, tree, hf_x509af_certificate);
 }
 
-static ber_sequence CrossCertificates_set_of[1] = {
+static const ber_sequence CrossCertificates_set_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_CrossCertificates_item },
 };
 
@@ -561,7 +542,7 @@
   return dissect_x509af_CrossCertificates(FALSE, tvb, offset, pinfo, tree, hf_x509af_ForwardCertificationPath_item);
 }
 
-static ber_sequence ForwardCertificationPath_sequence_of[1] = {
+static const ber_sequence ForwardCertificationPath_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_ForwardCertificationPath_item },
 };
 
@@ -576,7 +557,7 @@
   return dissect_x509af_ForwardCertificationPath(FALSE, tvb, offset, pinfo, tree, hf_x509af_certificationPath);
 }
 
-static ber_sequence Certificates_sequence[] = {
+static const ber_sequence Certificates_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_userCertificate },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_certificationPath },
   { 0, 0, 0, NULL }
@@ -590,7 +571,7 @@
   return offset;
 }
 
-static ber_sequence CertificatePair_sequence[] = {
+static const ber_sequence CertificatePair_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_issuedByThisCA },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_issuedToThisCA },
   { 0, 0, 0, NULL }
@@ -607,7 +588,7 @@
   return dissect_x509af_CertificatePair(FALSE, tvb, offset, pinfo, tree, hf_x509af_theCACertificates_item);
 }
 
-static ber_sequence SEQUNCE_OF_CertificatePair_sequence_of[1] = {
+static const ber_sequence SEQUNCE_OF_CertificatePair_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_theCACertificates_item },
 };
 
@@ -622,7 +603,7 @@
   return dissect_x509af_SEQUNCE_OF_CertificatePair(FALSE, tvb, offset, pinfo, tree, hf_x509af_theCACertificates);
 }
 
-static ber_sequence CertificationPath_sequence[] = {
+static const ber_sequence CertificationPath_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_userCertificate },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_theCACertificates },
   { 0, 0, 0, NULL }
@@ -636,8 +617,8 @@
   return offset;
 }
 
-static ber_sequence T_revokedCertificates_item_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_userCertificate1 },
+static const ber_sequence T_revokedCertificates_item_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_revokedUserCertificate },
   { BER_CLASS_UNI, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_revocationDate },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_crlEntryExtensions },
   { 0, 0, 0, NULL }
@@ -654,7 +635,7 @@
   return dissect_x509af_T_revokedCertificates_item(FALSE, tvb, offset, pinfo, tree, hf_x509af_revokedCertificates_item);
 }
 
-static ber_sequence T_revokedCertificates_sequence_of[1] = {
+static const ber_sequence T_revokedCertificates_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_revokedCertificates_item },
 };
 
@@ -669,7 +650,7 @@
   return dissect_x509af_T_revokedCertificates(FALSE, tvb, offset, pinfo, tree, hf_x509af_revokedCertificates);
 }
 
-static ber_sequence T_signedCertificateList_sequence[] = {
+static const ber_sequence T_signedCertificateList_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_version },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signature },
   { BER_CLASS_ANY, -1, BER_FLAGS_NOOWNTAG, dissect_issuer },
@@ -691,7 +672,7 @@
   return dissect_x509af_T_signedCertificateList(FALSE, tvb, offset, pinfo, tree, hf_x509af_signedCertificateList);
 }
 
-static ber_sequence CertificateList_sequence[] = {
+static const ber_sequence CertificateList_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signedCertificateList },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithmIdentifier },
   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
@@ -706,8 +687,8 @@
   return offset;
 }
 
-static ber_sequence IssuerSerial_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_issuer1 },
+static const ber_sequence IssuerSerial_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_issuerName },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_serial },
   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_issuerUID },
   { 0, 0, 0, NULL }
@@ -731,7 +712,7 @@
   { 0, NULL }
 };
 
-static ber_choice InfoSubject_choice[] = {
+static const ber_choice InfoSubject_choice[] = {
   {   0, BER_CLASS_CON, 0, 0, dissect_baseCertificateID },
   {   1, BER_CLASS_CON, 1, 0, dissect_infoSubjectName },
   { 0, 0, 0, 0, NULL }
@@ -748,7 +729,7 @@
   return dissect_x509af_InfoSubject(FALSE, tvb, offset, pinfo, tree, hf_x509af_info_subject);
 }
 
-static ber_sequence AttCertValidityPeriod_sequence[] = {
+static const ber_sequence AttCertValidityPeriod_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_NOOWNTAG, dissect_notBeforeTime },
   { BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_NOOWNTAG, dissect_notAfterTime },
   { 0, 0, 0, NULL }
@@ -765,7 +746,7 @@
   return dissect_x509af_AttCertValidityPeriod(FALSE, tvb, offset, pinfo, tree, hf_x509af_attCertValidityPeriod);
 }
 
-static ber_sequence SEQUNCE_OF_Attribute_sequence_of[1] = {
+static const ber_sequence SEQUNCE_OF_Attribute_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_attributes_item },
 };
 
@@ -780,10 +761,10 @@
   return dissect_x509af_SEQUNCE_OF_Attribute(FALSE, tvb, offset, pinfo, tree, hf_x509af_attributes);
 }
 
-static ber_sequence AttributeCertificateInfo_sequence[] = {
+static const ber_sequence AttributeCertificateInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_version },
   { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_info_subject },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_issuer1 },
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_issuerName },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signature },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_serialNumber },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_attCertValidityPeriod },
@@ -804,7 +785,7 @@
   return dissect_x509af_AttributeCertificateInfo(FALSE, tvb, offset, pinfo, tree, hf_x509af_signedAttributeCertificateInfo);
 }
 
-static ber_sequence AttributeCertificate_sequence[] = {
+static const ber_sequence AttributeCertificate_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signedAttributeCertificateInfo },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithmIdentifier },
   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
@@ -822,7 +803,7 @@
   return dissect_x509af_AttributeCertificate(FALSE, tvb, offset, pinfo, tree, hf_x509af_attributeCertificate);
 }
 
-static ber_sequence ACPathData_sequence[] = {
+static const ber_sequence ACPathData_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_certificate },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_attributeCertificate },
   { 0, 0, 0, NULL }
@@ -839,7 +820,7 @@
   return dissect_x509af_ACPathData(FALSE, tvb, offset, pinfo, tree, hf_x509af_acPath_item);
 }
 
-static ber_sequence SEQUNCE_OF_ACPathData_sequence_of[1] = {
+static const ber_sequence SEQUNCE_OF_ACPathData_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_acPath_item },
 };
 
@@ -854,7 +835,7 @@
   return dissect_x509af_SEQUNCE_OF_ACPathData(FALSE, tvb, offset, pinfo, tree, hf_x509af_acPath);
 }
 
-static ber_sequence AttributeCertificationPath_sequence[] = {
+static const ber_sequence AttributeCertificationPath_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_attributeCertificate },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_acPath },
   { 0, 0, 0, NULL }
@@ -875,7 +856,7 @@
   { 0, NULL }
 };
 
-static ber_choice AssertionSubject_choice[] = {
+static const ber_choice AssertionSubject_choice[] = {
   {   0, BER_CLASS_CON, 0, 0, dissect_baseCertificateID },
   {   1, BER_CLASS_CON, 1, 0, dissect_assertionSubjectName },
   { 0, 0, 0, 0, NULL }
@@ -892,7 +873,7 @@
   return dissect_x509af_AssertionSubject(FALSE, tvb, offset, pinfo, tree, hf_x509af_assertion_subject);
 }
 
-static ber_sequence SET_OF_AttributeType_set_of[1] = {
+static const ber_sequence SET_OF_AttributeType_set_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_attType_item },
 };
 
@@ -907,7 +888,7 @@
   return dissect_x509af_SET_OF_AttributeType(FALSE, tvb, offset, pinfo, tree, hf_x509af_attType);
 }
 
-static ber_sequence AttributeCertificateAssertion_sequence[] = {
+static const ber_sequence AttributeCertificateAssertion_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_assertion_subject },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_assertionIssuer },
   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_attCertValidity },
@@ -923,86 +904,31 @@
   return offset;
 }
 
+/*--- PDUs ---*/
 
-/*--- End of included file: packet-x509af-fn.c ---*/
-
-
-
-static void
-dissect_x509af_userCertificate_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509af_Certificate(FALSE, tvb, 0, pinfo, tree, hf_x509af_id_at_userCertificate);
+static void dissect_Certificate_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509af_Certificate(FALSE, tvb, 0, pinfo, tree, hf_x509af_Certificate_PDU);
 }
-
-static void
-dissect_x509af_cAcertificate_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509af_Certificate(FALSE, tvb, 0, pinfo, tree, hf_x509af_id_at_cAcertificate);
+static void dissect_CertificatePair_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509af_CertificatePair(FALSE, tvb, 0, pinfo, tree, hf_x509af_CertificatePair_PDU);
 }
-
-static void
-dissect_x509af_crossCertificatePair_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509af_CertificatePair(FALSE, tvb, 0, pinfo, tree, hf_x509af_id_at_crossCertificatePair);
+static void dissect_CertificateList_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509af_CertificateList(FALSE, tvb, 0, pinfo, tree, hf_x509af_CertificateList_PDU);
 }
-
-static void
-dissect_x509af_authorityRevocationList_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509af_CertificateList(FALSE, tvb, 0, pinfo, tree, hf_x509af_id_at_authorityRevocationList);
+static void dissect_AttributeCertificate_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509af_AttributeCertificate(FALSE, tvb, 0, pinfo, tree, hf_x509af_AttributeCertificate_PDU);
 }
 
-static void
-dissect_x509af_certificateRevocationList_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509af_CertificateList(FALSE, tvb, 0, pinfo, tree, hf_x509af_id_at_certificateRevocationList);
-}
 
-static void
-dissect_x509af_attributeCertificate_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509af_AttributeCertificate(FALSE, tvb, 0, pinfo, tree, hf_x509af_id_at_attributeCertificate);
-}
+/*--- End of included file: packet-x509af-fn.c ---*/
+
 
-static void
-dissect_x509af_attributeCertificateRevocationList_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509af_CertificateList(FALSE, tvb, 0, pinfo, tree, hf_x509af_id_at_attributeCertificateRevocationList);
-}
 
 /*--- proto_register_x509af ----------------------------------------------*/
 void proto_register_x509af(void) {
 
   /* List of fields */
   static hf_register_info hf[] = {
-    { &hf_x509af_id_at_attributeCertificateRevocationList,
-      { "attributeCertificateRevocationList", "x509af.id_at_attributeCertificateRevocationList",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "id-at-attributeCertificateRevocationList", HFILL }},
-    { &hf_x509af_id_at_attributeCertificate,
-      { "attributeCertificate", "x509af.id_at_attributeCertificate",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "id-at-attributeCertificate", HFILL }},
-    { &hf_x509af_id_at_authorityRevocationList,
-      { "authorityRevocationList", "x509af.id_at_authorityRevocationList",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "id-at-authorityRevocationList", HFILL }},
-    { &hf_x509af_id_at_certificateRevocationList,
-      { "certificateRevocationList", "x509af.id_at_certificateRevocationList",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "id-at-certificateRevocationList", HFILL }},
-    { &hf_x509af_id_at_crossCertificatePair,
-      { "crossCertificatePair", "x509af.id_at_crossCertificatePair",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "id-at-crossCertificatePair", HFILL }},
-    { &hf_x509af_id_at_userCertificate,
-      { "userCertificate", "x509af.id_at_userCertificate",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "id-at-userCertificate", HFILL }},
-    { &hf_x509af_id_at_cAcertificate,
-      { "cAcertificate", "x509af.id_at_cAcertificate",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "id-at-cAcertificate", HFILL }},
     { &hf_x509af_algorithm_id,
       { "Algorithm Id", "x509af.algorithm.id",
         FT_STRING, BASE_NONE, NULL, 0,
@@ -1018,11 +944,22 @@
 
 /*--- Included file: packet-x509af-hfarr.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509af-hfarr.c                                                      */
-/* ../../tools/asn2eth.py -X -b -e -p x509af -c x509af.cnf -s packet-x509af-template AuthenticationFramework.asn */
-
+    { &hf_x509af_Certificate_PDU,
+      { "Certificate", "x509af.Certificate",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Certificate", HFILL }},
+    { &hf_x509af_CertificatePair_PDU,
+      { "CertificatePair", "x509af.CertificatePair",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "CertificatePair", HFILL }},
+    { &hf_x509af_CertificateList_PDU,
+      { "CertificateList", "x509af.CertificateList",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "CertificateList", HFILL }},
+    { &hf_x509af_AttributeCertificate_PDU,
+      { "AttributeCertificate", "x509af.AttributeCertificate",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "AttributeCertificate", HFILL }},
     { &hf_x509af_signedCertificate,
       { "signedCertificate", "x509af.signedCertificate",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -1100,7 +1037,7 @@
         FT_STRING, BASE_NONE, NULL, 0,
         "Time/generalizedTime", HFILL }},
     { &hf_x509af_Extensions_item,
-      { "Item[##]", "x509af.Extensions_item",
+      { "Item", "x509af.Extensions_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "Extensions/_item", HFILL }},
     { &hf_x509af_userCertificate,
@@ -1112,11 +1049,11 @@
         FT_UINT32, BASE_DEC, NULL, 0,
         "Certificates/certificationPath", HFILL }},
     { &hf_x509af_ForwardCertificationPath_item,
-      { "Item[##]", "x509af.ForwardCertificationPath_item",
+      { "Item", "x509af.ForwardCertificationPath_item",
         FT_UINT32, BASE_DEC, NULL, 0,
         "ForwardCertificationPath/_item", HFILL }},
     { &hf_x509af_CrossCertificates_item,
-      { "Item(##)", "x509af.CrossCertificates_item",
+      { "Item", "x509af.CrossCertificates_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "CrossCertificates/_item", HFILL }},
     { &hf_x509af_theCACertificates,
@@ -1124,7 +1061,7 @@
         FT_UINT32, BASE_DEC, NULL, 0,
         "CertificationPath/theCACertificates", HFILL }},
     { &hf_x509af_theCACertificates_item,
-      { "Item[##]", "x509af.theCACertificates_item",
+      { "Item", "x509af.theCACertificates_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "CertificationPath/theCACertificates/_item", HFILL }},
     { &hf_x509af_issuedByThisCA,
@@ -1152,10 +1089,10 @@
         FT_UINT32, BASE_DEC, NULL, 0,
         "CertificateList/signedCertificateList/revokedCertificates", HFILL }},
     { &hf_x509af_revokedCertificates_item,
-      { "Item[##]", "x509af.revokedCertificates_item",
+      { "Item", "x509af.revokedCertificates_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "CertificateList/signedCertificateList/revokedCertificates/_item", HFILL }},
-    { &hf_x509af_userCertificate1,
+    { &hf_x509af_revokedUserCertificate,
       { "userCertificate", "x509af.userCertificate",
         FT_INT32, BASE_DEC, NULL, 0,
         "CertificateList/signedCertificateList/revokedCertificates/_item/userCertificate", HFILL }},
@@ -1180,7 +1117,7 @@
         FT_UINT32, BASE_DEC, NULL, 0,
         "AttributeCertificationPath/acPath", HFILL }},
     { &hf_x509af_acPath_item,
-      { "Item[##]", "x509af.acPath_item",
+      { "Item", "x509af.acPath_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "AttributeCertificationPath/acPath/_item", HFILL }},
     { &hf_x509af_certificate,
@@ -1203,7 +1140,7 @@
       { "subjectName", "x509af.subjectName",
         FT_NONE, BASE_NONE, NULL, 0,
         "AttributeCertificateInfo/subject/subjectName", HFILL }},
-    { &hf_x509af_issuer1,
+    { &hf_x509af_issuerName,
       { "issuer", "x509af.issuer",
         FT_NONE, BASE_NONE, NULL, 0,
         "", HFILL }},
@@ -1216,7 +1153,7 @@
         FT_UINT32, BASE_DEC, NULL, 0,
         "AttributeCertificateInfo/attributes", HFILL }},
     { &hf_x509af_attributes_item,
-      { "Item[##]", "x509af.attributes_item",
+      { "Item", "x509af.attributes_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "AttributeCertificateInfo/attributes/_item", HFILL }},
     { &hf_x509af_issuerUniqueID,
@@ -1260,7 +1197,7 @@
         FT_UINT32, BASE_DEC, NULL, 0,
         "AttributeCertificateAssertion/attType", HFILL }},
     { &hf_x509af_attType_item,
-      { "Item(##)", "x509af.attType_item",
+      { "Item", "x509af.attType_item",
         FT_STRING, BASE_NONE, NULL, 0,
         "AttributeCertificateAssertion/attType/_item", HFILL }},
 
@@ -1273,11 +1210,6 @@
 
 /*--- Included file: packet-x509af-ettarr.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509af-ettarr.c                                                     */
-/* ../../tools/asn2eth.py -X -b -e -p x509af -c x509af.cnf -s packet-x509af-template AuthenticationFramework.asn */
-
     &ett_x509af_Certificate,
     &ett_x509af_T_signedCertificate,
     &ett_x509af_AlgorithmIdentifier,
@@ -1325,13 +1257,13 @@
 
 /*--- proto_reg_handoff_x509af -------------------------------------------*/
 void proto_reg_handoff_x509af(void) {
-	register_ber_oid_dissector("2.5.4.36", dissect_x509af_userCertificate_callback, proto_x509af, "id-at-userCertificate");
-	register_ber_oid_dissector("2.5.4.37", dissect_x509af_cAcertificate_callback, proto_x509af, "id-at-cAcertificate");
-	register_ber_oid_dissector("2.5.4.38", dissect_x509af_authorityRevocationList_callback, proto_x509af, "id-at-authorityRevocationList");
-	register_ber_oid_dissector("2.5.4.39", dissect_x509af_certificateRevocationList_callback, proto_x509af, "id-at-certificateRevocationList");
-	register_ber_oid_dissector("2.5.4.40", dissect_x509af_crossCertificatePair_callback, proto_x509af, "id-at-crossCertificatePair");
-	register_ber_oid_dissector("2.5.4.58", dissect_x509af_attributeCertificate_callback, proto_x509af, "id-at-attributeCertificate");
-	register_ber_oid_dissector("2.5.4.59", dissect_x509af_attributeCertificateRevocationList_callback, proto_x509af, "id-at-attributeCertificateRevocationList");
+	register_ber_oid_dissector("2.5.4.36", dissect_Certificate_PDU, proto_x509af, "id-at-userCertificate");
+	register_ber_oid_dissector("2.5.4.37", dissect_Certificate_PDU, proto_x509af, "id-at-cAcertificate");
+	register_ber_oid_dissector("2.5.4.38", dissect_CertificateList_PDU, proto_x509af, "id-at-authorityRevocationList");
+	register_ber_oid_dissector("2.5.4.39", dissect_CertificateList_PDU, proto_x509af, "id-at-certificateRevocationList");
+	register_ber_oid_dissector("2.5.4.40", dissect_CertificatePair_PDU, proto_x509af, "id-at-crossCertificatePair");
+	register_ber_oid_dissector("2.5.4.58", dissect_AttributeCertificate_PDU, proto_x509af, "id-at-attributeCertificate");
+	register_ber_oid_dissector("2.5.4.59", dissect_CertificateList_PDU, proto_x509af, "id-at-attributeCertificateRevocationList");
 
 	/*XXX these should really go to a better place but since that
 	  I have not that ITU standard, ill put it here for the time
diff -urN ethereal-0.10.6/epan/dissectors/packet-x509af.h ethereal-0.10.7/epan/dissectors/packet-x509af.h
--- ethereal-0.10.6/epan/dissectors/packet-x509af.h	2004-08-12 17:42:26.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-x509af.h	2004-10-20 17:34:55.000000000 -0500
@@ -1,15 +1,14 @@
 /* Do not modify this file.                                                   */
 /* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509af.h                                                            */
+/* ./packet-x509af.h                                                          */
 /* ../../tools/asn2eth.py -X -b -e -p x509af -c x509af.cnf -s packet-x509af-template AuthenticationFramework.asn */
 
 /* Input file: packet-x509af-template.h */
-/* Include files: packet-x509af-exp.h, packet-x509af-valexp.h */
 
 /* packet-x509af.h
  * Routines for X.509 Authentication Framework packet dissection
  *
- * $Id: packet-x509af-template.h,v 1.1 2004/05/24 08:42:29 sahlberg Exp $
+ * $Id: packet-x509af-template.h 12203 2004-10-05 09:18:55Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -38,13 +37,9 @@
 
 /*--- Included file: packet-x509af-exp.h ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509af-exp.h                                                        */
-/* ../../tools/asn2eth.py -X -b -e -p x509af -c x509af.cnf -s packet-x509af-template AuthenticationFramework.asn */
-
 int dissect_x509af_Certificate(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
 int dissect_x509af_CertificateSerialNumber(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
+int dissect_x509af_SubjectPublicKeyInfo(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
 int dissect_x509af_Certificates(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
 int dissect_x509af_CertificationPath(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
 int dissect_x509af_CertificateList(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
diff -urN ethereal-0.10.6/epan/dissectors/packet-x509ce.c ethereal-0.10.7/epan/dissectors/packet-x509ce.c
--- ethereal-0.10.6/epan/dissectors/packet-x509ce.c	2004-08-12 17:42:29.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-x509ce.c	2004-10-20 17:34:59.000000000 -0500
@@ -1,15 +1,14 @@
 /* Do not modify this file.                                                   */
 /* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509ce.c                                                            */
+/* ./packet-x509ce.c                                                          */
 /* ../../tools/asn2eth.py -X -b -p x509ce -c x509ce.cnf -s packet-x509ce-template CertificateExtensions.asn */
 
 /* Input file: packet-x509ce-template.c */
-/* Include files: packet-x509ce-hf.c, packet-x509ce-ett.c, packet-x509ce-fn.c, packet-x509ce-hfarr.c, packet-x509ce-ettarr.c, packet-x509ce-val.h */
 
 /* packet-x509ce.c
  * Routines for X.509 Certificate Extensions packet dissection
  *
- * $Id: packet-x509ce-template.c,v 1.2 2004/05/25 21:07:43 guy Exp $
+ * $Id: packet-x509ce-template.c 12203 2004-10-05 09:18:55Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -45,6 +44,7 @@
 #include "packet-x509ce.h"
 #include "packet-x509af.h"
 #include "packet-x509if.h"
+#include "packet-x509sat.h"
 
 #define PNAME  "X.509 Certificate Extensions"
 #define PSNAME "X509CE"
@@ -52,43 +52,35 @@
 
 /* Initialize the protocol and registered fields */
 int proto_x509ce = -1;
-static int hf_x509ce_id_ce_subjectDirectoryAttributes = -1;
-static int hf_x509ce_id_ce_subjectKeyIdentifier = -1;
-static int hf_x509ce_id_ce_keyUsage = -1;
-static int hf_x509ce_id_ce_privateKeyUsagePeriod = -1;
-static int hf_x509ce_id_ce_subjectAltName = -1;
-static int hf_x509ce_id_ce_issuerAltName = -1;
-static int hf_x509ce_id_ce_basicConstraints = -1;
-static int hf_x509ce_id_ce_cRLNumber = -1;
-static int hf_x509ce_id_ce_reasonCode = -1;
-static int hf_x509ce_id_ce_instructionCode = -1;
 static int hf_x509ce_id_ce_invalidityDate = -1;
-static int hf_x509ce_id_ce_deltaCRLIndicator = -1;
-static int hf_x509ce_id_ce_issuingDistributionPoint = -1;
-static int hf_x509ce_id_ce_certificateIssuer = -1;
-static int hf_x509ce_id_ce_nameConstraints = -1;
-static int hf_x509ce_id_ce_cRLDistributionPoints = -1;
-static int hf_x509ce_id_ce_certificatePolicies = -1;
-static int hf_x509ce_id_ce_policyMappings = -1;
-static int hf_x509ce_id_ce_authorityKeyIdentifier = -1;
-static int hf_x509ce_id_ce_policyConstraints = -1;
-static int hf_x509ce_id_ce_extKeyUsage = -1;
-static int hf_x509ce_id_ce_cRLStreamIdentifier = -1;
-static int hf_x509ce_id_ce_cRLScope = -1;
-static int hf_x509ce_id_ce_statusReferrals = -1;
-static int hf_x509ce_id_ce_freshestCRL = -1;
-static int hf_x509ce_id_ce_orderedList = -1;
 static int hf_x509ce_id_ce_baseUpdateTime = -1;
-static int hf_x509ce_id_ce_deltaInfo = -1;
-static int hf_x509ce_id_ce_inhibitAnyPolicy = -1;
 
 /*--- Included file: packet-x509ce-hf.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509ce-hf.c                                                         */
-/* ../../tools/asn2eth.py -X -b -p x509ce -c x509ce.cnf -s packet-x509ce-template CertificateExtensions.asn */
-
+static int hf_x509ce_AuthorityKeyIdentifier_PDU = -1;  /* AuthorityKeyIdentifier */
+static int hf_x509ce_SubjectKeyIdentifier_PDU = -1;  /* SubjectKeyIdentifier */
+static int hf_x509ce_KeyUsage_PDU = -1;           /* KeyUsage */
+static int hf_x509ce_KeyPurposeIDs_PDU = -1;      /* KeyPurposeIDs */
+static int hf_x509ce_PrivateKeyUsagePeriod_PDU = -1;  /* PrivateKeyUsagePeriod */
+static int hf_x509ce_CertificatePoliciesSyntax_PDU = -1;  /* CertificatePoliciesSyntax */
+static int hf_x509ce_PolicyMappingsSyntax_PDU = -1;  /* PolicyMappingsSyntax */
+static int hf_x509ce_GeneralNames_PDU = -1;       /* GeneralNames */
+static int hf_x509ce_AttributesSyntax_PDU = -1;   /* AttributesSyntax */
+static int hf_x509ce_BasicConstraintsSyntax_PDU = -1;  /* BasicConstraintsSyntax */
+static int hf_x509ce_NameConstraintsSyntax_PDU = -1;  /* NameConstraintsSyntax */
+static int hf_x509ce_PolicyConstraintsSyntax_PDU = -1;  /* PolicyConstraintsSyntax */
+static int hf_x509ce_SkipCerts_PDU = -1;          /* SkipCerts */
+static int hf_x509ce_CRLNumber_PDU = -1;          /* CRLNumber */
+static int hf_x509ce_CRLReason_PDU = -1;          /* CRLReason */
+static int hf_x509ce_HoldInstruction_PDU = -1;    /* HoldInstruction */
+static int hf_x509ce_CRLScopeSyntax_PDU = -1;     /* CRLScopeSyntax */
+static int hf_x509ce_StatusReferrals_PDU = -1;    /* StatusReferrals */
+static int hf_x509ce_CRLStreamIdentifier_PDU = -1;  /* CRLStreamIdentifier */
+static int hf_x509ce_OrderedListSyntax_PDU = -1;  /* OrderedListSyntax */
+static int hf_x509ce_DeltaInformation_PDU = -1;   /* DeltaInformation */
+static int hf_x509ce_CRLDistPointsSyntax_PDU = -1;  /* CRLDistPointsSyntax */
+static int hf_x509ce_IssuingDistPointSyntax_PDU = -1;  /* IssuingDistPointSyntax */
+static int hf_x509ce_BaseCRLNumber_PDU = -1;      /* BaseCRLNumber */
 static int hf_x509ce_keyIdentifier = -1;          /* KeyIdentifier */
 static int hf_x509ce_authorityCertIssuer = -1;    /* GeneralNames */
 static int hf_x509ce_authorityCertSerialNumber = -1;  /* CertificateSerialNumber */
@@ -105,9 +97,13 @@
 static int hf_x509ce_GeneralNames_item = -1;      /* GeneralName */
 static int hf_x509ce_rfc822Name = -1;             /* IA5String */
 static int hf_x509ce_dNSName = -1;                /* IA5String */
+static int hf_x509ce_directoryName = -1;          /* Name */
+static int hf_x509ce_ediPartyName = -1;           /* EDIPartyName */
 static int hf_x509ce_uniformResourceIdentifier = -1;  /* IA5String */
 static int hf_x509ce_iPAddress = -1;              /* OCTET_STRING */
 static int hf_x509ce_registeredID = -1;           /* OBJECT_IDENTIFIER */
+static int hf_x509ce_nameAssigner = -1;           /* DirectoryString */
+static int hf_x509ce_partyName = -1;              /* DirectoryString */
 static int hf_x509ce_AttributesSyntax_item = -1;  /* Attribute */
 static int hf_x509ce_cA = -1;                     /* BOOLEAN */
 static int hf_x509ce_pathLenConstraint = -1;      /* INTEGER */
@@ -188,11 +184,6 @@
 
 /*--- Included file: packet-x509ce-ett.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509ce-ett.c                                                        */
-/* ../../tools/asn2eth.py -X -b -p x509ce -c x509ce.cnf -s packet-x509ce-template CertificateExtensions.asn */
-
 static gint ett_x509ce_AuthorityKeyIdentifier = -1;
 static gint ett_x509ce_KeyUsage = -1;
 static gint ett_x509ce_KeyPurposeIDs = -1;
@@ -205,6 +196,7 @@
 static gint ett_x509ce_PolicyMappingsSyntax_item = -1;
 static gint ett_x509ce_GeneralNames = -1;
 static gint ett_x509ce_GeneralName = -1;
+static gint ett_x509ce_EDIPartyName = -1;
 static gint ett_x509ce_AttributesSyntax = -1;
 static gint ett_x509ce_BasicConstraintsSyntax = -1;
 static gint ett_x509ce_NameConstraintsSyntax = -1;
@@ -233,16 +225,20 @@
 
 /*--- Included file: packet-x509ce-fn.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509ce-fn.c                                                         */
-/* ../../tools/asn2eth.py -X -b -p x509ce -c x509ce.cnf -s packet-x509ce-template CertificateExtensions.asn */
-
 /*--- Fields for imported types ---*/
 
 static int dissect_authorityCertSerialNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_x509af_CertificateSerialNumber(TRUE, tvb, offset, pinfo, tree, hf_x509ce_authorityCertSerialNumber);
 }
+static int dissect_directoryName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_x509if_Name(TRUE, tvb, offset, pinfo, tree, hf_x509ce_directoryName);
+}
+static int dissect_nameAssigner_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_x509sat_DirectoryString(TRUE, tvb, offset, pinfo, tree, hf_x509ce_nameAssigner);
+}
+static int dissect_partyName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_x509sat_DirectoryString(TRUE, tvb, offset, pinfo, tree, hf_x509ce_partyName);
+}
 static int dissect_AttributesSyntax_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_x509if_Attribute(FALSE, tvb, offset, pinfo, tree, hf_x509ce_AttributesSyntax_item);
 }
@@ -281,6 +277,23 @@
   return dissect_x509ce_IA5String(TRUE, tvb, offset, pinfo, tree, hf_x509ce_uniformResourceIdentifier);
 }
 
+static const ber_sequence EDIPartyName_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nameAssigner_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_partyName_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_x509ce_EDIPartyName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                EDIPartyName_sequence, hf_index, ett_x509ce_EDIPartyName);
+
+  return offset;
+}
+static int dissect_ediPartyName_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_x509ce_EDIPartyName(TRUE, tvb, offset, pinfo, tree, hf_x509ce_ediPartyName);
+}
+
 
 static int
 dissect_x509ce_OCTET_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
@@ -309,15 +322,19 @@
 static const value_string GeneralName_vals[] = {
   {   1, "rfc822Name" },
   {   2, "dNSName" },
+  {   4, "directoryName" },
+  {   5, "ediPartyName" },
   {   6, "uniformResourceIdentifier" },
   {   7, "iPAddress" },
   {   8, "registeredID" },
   { 0, NULL }
 };
 
-static ber_choice GeneralName_choice[] = {
+static const ber_choice GeneralName_choice[] = {
   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_rfc822Name_impl },
   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_dNSName_impl },
+  {   4, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_directoryName_impl },
+  {   5, BER_CLASS_CON, 5, BER_FLAGS_IMPLTAG, dissect_ediPartyName_impl },
   {   6, BER_CLASS_CON, 6, BER_FLAGS_IMPLTAG, dissect_uniformResourceIdentifier_impl },
   {   7, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_iPAddress_impl },
   {   8, BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_registeredID_impl },
@@ -350,7 +367,7 @@
   return dissect_x509ce_GeneralName(FALSE, tvb, offset, pinfo, tree, hf_x509ce_deltaLocation);
 }
 
-static ber_sequence GeneralNames_sequence_of[1] = {
+static const ber_sequence GeneralNames_sequence_of[1] = {
   { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_GeneralNames_item },
 };
 
@@ -374,7 +391,7 @@
   return dissect_x509ce_GeneralNames(TRUE, tvb, offset, pinfo, tree, hf_x509ce_fullName);
 }
 
-static ber_sequence AuthorityKeyIdentifier_sequence[] = {
+static const ber_sequence AuthorityKeyIdentifier_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_keyIdentifier_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authorityCertIssuer_impl },
   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_authorityCertSerialNumber_impl },
@@ -397,7 +414,7 @@
   return offset;
 }
 
-static asn_namedbit KeyUsage_bits[] = {
+static const asn_namedbit KeyUsage_bits[] = {
   {  0, &hf_x509ce_KeyUsage_digitalSignature, -1, -1, NULL, NULL },
   {  1, &hf_x509ce_KeyUsage_nonRepudiation, -1, -1, NULL, NULL },
   {  2, &hf_x509ce_KeyUsage_keyEncipherment, -1, -1, NULL, NULL },
@@ -431,7 +448,7 @@
   return dissect_x509ce_KeyPurposeId(FALSE, tvb, offset, pinfo, tree, hf_x509ce_KeyPurposeIDs_item);
 }
 
-static ber_sequence KeyPurposeIDs_sequence_of[1] = {
+static const ber_sequence KeyPurposeIDs_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_KeyPurposeIDs_item },
 };
 
@@ -472,7 +489,7 @@
   return dissect_x509ce_GeneralizedTime(FALSE, tvb, offset, pinfo, tree, hf_x509ce_nextDelta);
 }
 
-static ber_sequence PrivateKeyUsagePeriod_sequence[] = {
+static const ber_sequence PrivateKeyUsagePeriod_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_notBefore_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_notAfter_impl },
   { 0, 0, 0, NULL }
@@ -504,7 +521,7 @@
   return dissect_x509ce_CertPolicyId(FALSE, tvb, offset, pinfo, tree, hf_x509ce_subjectDomainPolicy);
 }
 
-static ber_sequence PolicyQualifierInfo_sequence[] = {
+static const ber_sequence PolicyQualifierInfo_sequence[] = {
   { 0, 0, 0, NULL }
 };
 
@@ -519,7 +536,7 @@
   return dissect_x509ce_PolicyQualifierInfo(FALSE, tvb, offset, pinfo, tree, hf_x509ce_policyQualifiers_item);
 }
 
-static ber_sequence SEQUNCE_OF_PolicyQualifierInfo_sequence_of[1] = {
+static const ber_sequence SEQUNCE_OF_PolicyQualifierInfo_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_policyQualifiers_item },
 };
 
@@ -534,7 +551,7 @@
   return dissect_x509ce_SEQUNCE_OF_PolicyQualifierInfo(FALSE, tvb, offset, pinfo, tree, hf_x509ce_policyQualifiers);
 }
 
-static ber_sequence PolicyInformation_sequence[] = {
+static const ber_sequence PolicyInformation_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_policyIdentifier },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_policyQualifiers },
   { 0, 0, 0, NULL }
@@ -551,7 +568,7 @@
   return dissect_x509ce_PolicyInformation(FALSE, tvb, offset, pinfo, tree, hf_x509ce_CertificatePoliciesSyntax_item);
 }
 
-static ber_sequence CertificatePoliciesSyntax_sequence_of[1] = {
+static const ber_sequence CertificatePoliciesSyntax_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_CertificatePoliciesSyntax_item },
 };
 
@@ -563,7 +580,7 @@
   return offset;
 }
 
-static ber_sequence PolicyMappingsSyntax_item_sequence[] = {
+static const ber_sequence PolicyMappingsSyntax_item_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_issuerDomainPolicy },
   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_subjectDomainPolicy },
   { 0, 0, 0, NULL }
@@ -580,7 +597,7 @@
   return dissect_x509ce_PolicyMappingsSyntax_item(FALSE, tvb, offset, pinfo, tree, hf_x509ce_PolicyMappingsSyntax_item);
 }
 
-static ber_sequence PolicyMappingsSyntax_sequence_of[1] = {
+static const ber_sequence PolicyMappingsSyntax_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_PolicyMappingsSyntax_item },
 };
 
@@ -592,7 +609,7 @@
   return offset;
 }
 
-static ber_sequence AttributesSyntax_sequence_of[1] = {
+static const ber_sequence AttributesSyntax_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_AttributesSyntax_item },
 };
 
@@ -654,7 +671,7 @@
   return dissect_x509ce_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_x509ce_modulus);
 }
 
-static ber_sequence BasicConstraintsSyntax_sequence[] = {
+static const ber_sequence BasicConstraintsSyntax_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_cA },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_pathLenConstraint },
   { 0, 0, 0, NULL }
@@ -683,7 +700,7 @@
   return dissect_x509ce_BaseDistance(TRUE, tvb, offset, pinfo, tree, hf_x509ce_maximum);
 }
 
-static ber_sequence GeneralSubtree_sequence[] = {
+static const ber_sequence GeneralSubtree_sequence[] = {
   { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_base },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_minimum_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_maximum_impl },
@@ -701,7 +718,7 @@
   return dissect_x509ce_GeneralSubtree(FALSE, tvb, offset, pinfo, tree, hf_x509ce_GeneralSubtrees_item);
 }
 
-static ber_sequence GeneralSubtrees_sequence_of[1] = {
+static const ber_sequence GeneralSubtrees_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_GeneralSubtrees_item },
 };
 
@@ -719,7 +736,7 @@
   return dissect_x509ce_GeneralSubtrees(TRUE, tvb, offset, pinfo, tree, hf_x509ce_excludedSubtrees);
 }
 
-static ber_sequence NameConstraintsSyntax_sequence[] = {
+static const ber_sequence NameConstraintsSyntax_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permittedSubtrees_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_excludedSubtrees_impl },
   { 0, 0, 0, NULL }
@@ -748,7 +765,7 @@
   return dissect_x509ce_SkipCerts(TRUE, tvb, offset, pinfo, tree, hf_x509ce_inhibitPolicyMapping);
 }
 
-static ber_sequence PolicyConstraintsSyntax_sequence[] = {
+static const ber_sequence PolicyConstraintsSyntax_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_requireExplicitPolicy_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_inhibitPolicyMapping_impl },
   { 0, 0, 0, NULL }
@@ -813,7 +830,7 @@
   { 0, NULL }
 };
 
-static ber_choice DistributionPointName_choice[] = {
+static const ber_choice DistributionPointName_choice[] = {
   {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_fullName_impl },
   {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_nameRelativeToCRLIssuer_impl },
   { 0, 0, 0, 0, NULL }
@@ -830,7 +847,7 @@
   return dissect_x509ce_DistributionPointName(TRUE, tvb, offset, pinfo, tree, hf_x509ce_distributionPoint);
 }
 
-static asn_namedbit OnlyCertificateTypes_bits[] = {
+static const asn_namedbit OnlyCertificateTypes_bits[] = {
   {  0, &hf_x509ce_OnlyCertificateTypes_userPublicKey, -1, -1, NULL, NULL },
   {  1, &hf_x509ce_OnlyCertificateTypes_cA, -1, -1, NULL, NULL },
   {  2, &hf_x509ce_OnlyCertificateTypes_userAttribute, -1, -1, NULL, NULL },
@@ -851,7 +868,7 @@
   return dissect_x509ce_OnlyCertificateTypes(TRUE, tvb, offset, pinfo, tree, hf_x509ce_onlyContains);
 }
 
-static asn_namedbit ReasonFlags_bits[] = {
+static const asn_namedbit ReasonFlags_bits[] = {
   {  0, &hf_x509ce_ReasonFlags_unused, -1, -1, NULL, NULL },
   {  1, &hf_x509ce_ReasonFlags_keyCompromise, -1, -1, NULL, NULL },
   {  2, &hf_x509ce_ReasonFlags_cACompromise, -1, -1, NULL, NULL },
@@ -879,7 +896,7 @@
   return dissect_x509ce_ReasonFlags(TRUE, tvb, offset, pinfo, tree, hf_x509ce_reasons);
 }
 
-static ber_sequence NumberRange_sequence[] = {
+static const ber_sequence NumberRange_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_startingNumber_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_endingNumber_impl },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_modulus },
@@ -912,7 +929,7 @@
   return dissect_x509ce_CRLStreamIdentifier(TRUE, tvb, offset, pinfo, tree, hf_x509ce_cRLStreamIdentifier);
 }
 
-static ber_sequence BaseRevocationInfo_sequence[] = {
+static const ber_sequence BaseRevocationInfo_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cRLStreamIdentifier_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_cRLNumber_impl },
   { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_baseThisUpdate_impl },
@@ -930,7 +947,7 @@
   return dissect_x509ce_BaseRevocationInfo(TRUE, tvb, offset, pinfo, tree, hf_x509ce_baseRevocationInfo);
 }
 
-static ber_sequence PerAuthorityScope_sequence[] = {
+static const ber_sequence PerAuthorityScope_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_authorityName_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_distributionPoint_impl },
   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_onlyContains_impl },
@@ -953,7 +970,7 @@
   return dissect_x509ce_PerAuthorityScope(FALSE, tvb, offset, pinfo, tree, hf_x509ce_CRLScopeSyntax_item);
 }
 
-static ber_sequence CRLScopeSyntax_sequence_of[1] = {
+static const ber_sequence CRLScopeSyntax_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_CRLScopeSyntax_item },
 };
 
@@ -968,7 +985,7 @@
   return dissect_x509ce_CRLScopeSyntax(FALSE, tvb, offset, pinfo, tree, hf_x509ce_cRLScope);
 }
 
-static ber_sequence DeltaRefInfo_sequence[] = {
+static const ber_sequence DeltaRefInfo_sequence[] = {
   { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_deltaLocation },
   { BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_lastDelta },
   { 0, 0, 0, NULL }
@@ -985,7 +1002,7 @@
   return dissect_x509ce_DeltaRefInfo(TRUE, tvb, offset, pinfo, tree, hf_x509ce_deltaRefInfo);
 }
 
-static ber_sequence CRLReferral_sequence[] = {
+static const ber_sequence CRLReferral_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_issuer_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_location_impl },
   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_deltaRefInfo_impl },
@@ -1012,7 +1029,7 @@
   { 0, NULL }
 };
 
-static ber_choice StatusReferral_choice[] = {
+static const ber_choice StatusReferral_choice[] = {
   {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_cRLReferral_impl },
   { 0, 0, 0, 0, NULL }
 };
@@ -1028,7 +1045,7 @@
   return dissect_x509ce_StatusReferral(FALSE, tvb, offset, pinfo, tree, hf_x509ce_StatusReferrals_item);
 }
 
-static ber_sequence StatusReferrals_sequence_of[1] = {
+static const ber_sequence StatusReferrals_sequence_of[1] = {
   { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_StatusReferrals_item },
 };
 
@@ -1055,7 +1072,7 @@
   return offset;
 }
 
-static ber_sequence DeltaInformation_sequence[] = {
+static const ber_sequence DeltaInformation_sequence[] = {
   { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_deltaLocation },
   { BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_nextDelta },
   { 0, 0, 0, NULL }
@@ -1069,7 +1086,7 @@
   return offset;
 }
 
-static ber_sequence DistributionPoint_sequence[] = {
+static const ber_sequence DistributionPoint_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_distributionPoint_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_reasons_impl },
   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cRLIssuer_impl },
@@ -1087,7 +1104,7 @@
   return dissect_x509ce_DistributionPoint(FALSE, tvb, offset, pinfo, tree, hf_x509ce_CRLDistPointsSyntax_item);
 }
 
-static ber_sequence CRLDistPointsSyntax_sequence_of[1] = {
+static const ber_sequence CRLDistPointsSyntax_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_CRLDistPointsSyntax_item },
 };
 
@@ -1099,7 +1116,7 @@
   return offset;
 }
 
-static ber_sequence IssuingDistPointSyntax_sequence[] = {
+static const ber_sequence IssuingDistPointSyntax_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_distributionPoint_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_containsUserPublicKeyCerts_impl },
   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_containsCACerts_impl },
@@ -1127,183 +1144,96 @@
   return offset;
 }
 
+/*--- PDUs ---*/
 
-/*--- End of included file: packet-x509ce-fn.c ---*/
-
-
-
-static void
-dissect_x509ce_subjectDirectoryAttributes_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_AttributesSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_subjectDirectoryAttributes);
+static void dissect_AuthorityKeyIdentifier_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_AuthorityKeyIdentifier(FALSE, tvb, 0, pinfo, tree, hf_x509ce_AuthorityKeyIdentifier_PDU);
 }
-
-static void
-dissect_x509ce_subjectKeyIdentifier_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_SubjectKeyIdentifier(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_subjectKeyIdentifier);
+static void dissect_SubjectKeyIdentifier_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_SubjectKeyIdentifier(FALSE, tvb, 0, pinfo, tree, hf_x509ce_SubjectKeyIdentifier_PDU);
 }
-
-static void
-dissect_x509ce_keyUsage_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_KeyUsage(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_keyUsage);
+static void dissect_KeyUsage_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_KeyUsage(FALSE, tvb, 0, pinfo, tree, hf_x509ce_KeyUsage_PDU);
 }
-
-static void
-dissect_x509ce_privateKeyUsagePeriod_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_PrivateKeyUsagePeriod(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_privateKeyUsagePeriod);
+static void dissect_KeyPurposeIDs_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_KeyPurposeIDs(FALSE, tvb, 0, pinfo, tree, hf_x509ce_KeyPurposeIDs_PDU);
 }
-
-static void
-dissect_x509ce_subjectAltName_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_GeneralNames(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_subjectAltName);
+static void dissect_PrivateKeyUsagePeriod_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_PrivateKeyUsagePeriod(FALSE, tvb, 0, pinfo, tree, hf_x509ce_PrivateKeyUsagePeriod_PDU);
 }
-
-static void
-dissect_x509ce_issuerAltName_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_GeneralNames(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_issuerAltName);
+static void dissect_CertificatePoliciesSyntax_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_CertificatePoliciesSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_CertificatePoliciesSyntax_PDU);
 }
-
-static void
-dissect_x509ce_basicConstraints_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_BasicConstraintsSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_basicConstraints);
+static void dissect_PolicyMappingsSyntax_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_PolicyMappingsSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_PolicyMappingsSyntax_PDU);
 }
-
-static void
-dissect_x509ce_cRLNumber_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_CRLNumber(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_cRLNumber);
+static void dissect_GeneralNames_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_GeneralNames(FALSE, tvb, 0, pinfo, tree, hf_x509ce_GeneralNames_PDU);
 }
-
-static void
-dissect_x509ce_reasonCode_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_CRLReason(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_reasonCode);
+static void dissect_AttributesSyntax_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_AttributesSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_AttributesSyntax_PDU);
 }
-
-static void
-dissect_x509ce_instructionCode_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_HoldInstruction(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_instructionCode);
+static void dissect_BasicConstraintsSyntax_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_BasicConstraintsSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_BasicConstraintsSyntax_PDU);
 }
-
-static void
-dissect_x509ce_invalidityDate_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_GeneralizedTime(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_invalidityDate);
+static void dissect_NameConstraintsSyntax_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_NameConstraintsSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_NameConstraintsSyntax_PDU);
 }
-
-static void
-dissect_x509ce_deltaCRLIndicator_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_BaseCRLNumber(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_deltaCRLIndicator);
+static void dissect_PolicyConstraintsSyntax_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_PolicyConstraintsSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_PolicyConstraintsSyntax_PDU);
 }
-
-static void
-dissect_x509ce_issuingDistributionPoint_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_IssuingDistPointSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_issuingDistributionPoint);
+static void dissect_SkipCerts_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_SkipCerts(FALSE, tvb, 0, pinfo, tree, hf_x509ce_SkipCerts_PDU);
 }
-
-static void
-dissect_x509ce_certificateIssuer_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_GeneralNames(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_certificateIssuer);
+static void dissect_CRLNumber_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_CRLNumber(FALSE, tvb, 0, pinfo, tree, hf_x509ce_CRLNumber_PDU);
 }
-
-static void
-dissect_x509ce_nameConstraints_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_NameConstraintsSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_nameConstraints);
+static void dissect_CRLReason_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_CRLReason(FALSE, tvb, 0, pinfo, tree, hf_x509ce_CRLReason_PDU);
 }
-
-static void
-dissect_x509ce_cRLDistributionPoints_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_CRLDistPointsSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_cRLDistributionPoints);
+static void dissect_HoldInstruction_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_HoldInstruction(FALSE, tvb, 0, pinfo, tree, hf_x509ce_HoldInstruction_PDU);
 }
-
-static void
-dissect_x509ce_certificatePolicies_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_CertificatePoliciesSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_certificatePolicies);
+static void dissect_CRLScopeSyntax_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_CRLScopeSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_CRLScopeSyntax_PDU);
 }
-
-static void
-dissect_x509ce_policyMappings_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_PolicyMappingsSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_policyMappings);
+static void dissect_StatusReferrals_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_StatusReferrals(FALSE, tvb, 0, pinfo, tree, hf_x509ce_StatusReferrals_PDU);
 }
-
-static void
-dissect_x509ce_authorityKeyIdentifier_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_AuthorityKeyIdentifier(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_authorityKeyIdentifier);
+static void dissect_CRLStreamIdentifier_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_CRLStreamIdentifier(FALSE, tvb, 0, pinfo, tree, hf_x509ce_CRLStreamIdentifier_PDU);
 }
-
-static void
-dissect_x509ce_policyConstraints_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_PolicyConstraintsSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_policyConstraints);
+static void dissect_OrderedListSyntax_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_OrderedListSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_OrderedListSyntax_PDU);
 }
-
-static void
-dissect_x509ce_extKeyUsage_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_KeyPurposeIDs(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_extKeyUsage);
+static void dissect_DeltaInformation_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_DeltaInformation(FALSE, tvb, 0, pinfo, tree, hf_x509ce_DeltaInformation_PDU);
 }
-
-static void
-dissect_x509ce_cRLStreamIdentifier_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_CRLStreamIdentifier(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_cRLStreamIdentifier);
+static void dissect_CRLDistPointsSyntax_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_CRLDistPointsSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_CRLDistPointsSyntax_PDU);
 }
-
-static void
-dissect_x509ce_cRLScope_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_CRLScopeSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_cRLScope);
+static void dissect_IssuingDistPointSyntax_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_IssuingDistPointSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_IssuingDistPointSyntax_PDU);
 }
-
-static void
-dissect_x509ce_statusReferrals_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_StatusReferrals(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_statusReferrals);
+static void dissect_BaseCRLNumber_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_x509ce_BaseCRLNumber(FALSE, tvb, 0, pinfo, tree, hf_x509ce_BaseCRLNumber_PDU);
 }
 
-static void
-dissect_x509ce_freshestCRL_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_CRLDistPointsSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_freshestCRL);
-}
 
-static void
-dissect_x509ce_orderedList_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_OrderedListSyntax(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_orderedList);
-}
+/*--- End of included file: packet-x509ce-fn.c ---*/
+
 
-static void
-dissect_x509ce_baseUpdateTime_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-	dissect_x509ce_GeneralizedTime(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_baseUpdateTime);
-}
 
 static void
-dissect_x509ce_deltaInfo_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+dissect_x509ce_invalidityDate_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
-	dissect_x509ce_DeltaInformation(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_deltaInfo);
+	dissect_x509ce_GeneralizedTime(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_invalidityDate);
 }
 
 static void
-dissect_x509ce_inhibitAnyPolicy_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+dissect_x509ce_baseUpdateTime_callback(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
-	dissect_x509ce_SkipCerts(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_inhibitAnyPolicy);
+	dissect_x509ce_GeneralizedTime(FALSE, tvb, 0, pinfo, tree, hf_x509ce_id_ce_baseUpdateTime);
 }
 
 /*--- proto_register_x509ce ----------------------------------------------*/
@@ -1311,130 +1241,113 @@
 
   /* List of fields */
   static hf_register_info hf[] = {
-    { &hf_x509ce_id_ce_inhibitAnyPolicy,
-      { "inhibitAnyPolicy", "x509ce.id_ce_inhibitAnyPolicy",
-        FT_UINT32, BASE_DEC, NULL, 0,
-        "inhibitAnyPolicy", HFILL }},
-    { &hf_x509ce_id_ce_deltaInfo,
-      { "deltaInfo", "x509ce.id_ce_deltaInfo",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "deltaInfo", HFILL }},
     { &hf_x509ce_id_ce_baseUpdateTime,
       { "baseUpdateTime", "x509ce.id_ce_baseUpdateTime",
         FT_STRING, BASE_NONE, NULL, 0,
         "baseUpdateTime", HFILL }},
-    { &hf_x509ce_id_ce_orderedList,
-      { "orderedList", "x509ce.id_ce_orderedList",
-        FT_UINT32, BASE_DEC, VALS(OrderedListSyntax_vals), 0,
-        "orderedList", HFILL }},
-    { &hf_x509ce_id_ce_freshestCRL,
-      { "freshestCRL", "x509ce.id_ce_freshestCRL",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "freshestCRL", HFILL }},
-    { &hf_x509ce_id_ce_statusReferrals,
-      { "statusReferrals", "x509ce.id_ce_statusReferrals",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "statusReferrals", HFILL }},
-    { &hf_x509ce_id_ce_cRLScope,
-      { "cRLScope", "x509ce.id_ce_cRLScope",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "cRLScope", HFILL }},
-    { &hf_x509ce_id_ce_cRLStreamIdentifier,
-      { "cRLStreamIdentifier", "x509ce.id_ce_cRLStreamIdentifier",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "cRLStreamIdentifier", HFILL }},
-    { &hf_x509ce_id_ce_extKeyUsage,
-      { "extKeyUsage", "x509ce.id_ce_extKeyUsage",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "extKeyUsage", HFILL }},
-    { &hf_x509ce_id_ce_policyConstraints,
-      { "policyConstraints", "x509ce.id_ce_policyConstraints",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "policyConstraints", HFILL }},
-    { &hf_x509ce_id_ce_authorityKeyIdentifier,
-      { "authorityKeyIdentifier", "x509ce.id_ce_authorityKeyIdentifier",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "authorityKeyIdentifier", HFILL }},
-    { &hf_x509ce_id_ce_policyMappings,
-      { "policyMappings", "x509ce.id_ce_policyMappings",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "policyMappings", HFILL }},
-    { &hf_x509ce_id_ce_certificatePolicies,
-      { "certificatePolicies", "x509ce.id_ce_certificatePolicies",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "certificatePolicies", HFILL }},
-    { &hf_x509ce_id_ce_cRLDistributionPoints,
-      { "cRLDistributionPoints", "x509ce.id_ce_cRLDistributionPoints",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "cRLDistributionPoints", HFILL }},
-    { &hf_x509ce_id_ce_nameConstraints,
-      { "nameConstraints", "x509ce.id_ce_nameConstraints",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "nameConstraints", HFILL }},
-    { &hf_x509ce_id_ce_certificateIssuer,
-      { "certificateIssuer", "x509ce.id_ce_certificateIssuer",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "certificateIssuer", HFILL }},
-    { &hf_x509ce_id_ce_issuingDistributionPoint,
-      { "issuingDistributionPoint", "x509ce.id_ce_issuingDistributionPoint",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "issuingDistributionPoint", HFILL }},
-    { &hf_x509ce_id_ce_deltaCRLIndicator,
-      { "deltaCRLIndicator", "x509ce.id_ce_deltaCRLIndicator",
-        FT_UINT32, BASE_DEC, VALS(CRLReason_vals), 0,
-        "deltaCRLIndicator", HFILL }},
     { &hf_x509ce_id_ce_invalidityDate,
       { "invalidityDate", "x509ce.id_ce_invalidityDate",
         FT_STRING, BASE_NONE, NULL, 0,
         "invalidityDate", HFILL }},
-    { &hf_x509ce_id_ce_instructionCode,
-      { "instructionCode", "x509ce.id_ce_instructionCode",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "instructionCode", HFILL }},
-    { &hf_x509ce_id_ce_reasonCode,
-      { "reasonCode", "x509ce.id_ce_reasonCode",
-        FT_UINT32, BASE_DEC, VALS(CRLReason_vals), 0,
-        "reasonCode", HFILL }},
-    { &hf_x509ce_id_ce_cRLNumber,
-      { "cRLNumber", "x509ce.id_ce_cRLNumber",
-        FT_UINT32, BASE_DEC, NULL, 0,
-        "cRLNumber", HFILL }},
-    { &hf_x509ce_id_ce_basicConstraints,
-      { "basicConstraints", "x509ce.id_ce_basicConstraints",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "basicConstraints", HFILL }},
-    { &hf_x509ce_id_ce_issuerAltName,
-      { "issuerAltName", "x509ce.id_ce_issuerAltName",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "issuerAltName", HFILL }},
-    { &hf_x509ce_id_ce_subjectAltName,
-      { "subjectAltName", "x509ce.id_ce_subjectAltName",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "subjectAltName", HFILL }},
-    { &hf_x509ce_id_ce_privateKeyUsagePeriod,
-      { "privateKeyUsagePeriod", "x509ce.id_ce_privateKeyUsagePeriod",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "privateKeyUsagePeriod", HFILL }},
-    { &hf_x509ce_id_ce_subjectDirectoryAttributes,
-      { "subjectDirectoryAttributes", "x509ce.id_ce_subjectDirectoryAttributes",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "subjectDirectoryAttributes", HFILL }},
-    { &hf_x509ce_id_ce_subjectKeyIdentifier,
-      { "subjectKeyIdentifier", "x509ce.id_ce_subjectKeyIdentifier",
-        FT_BYTES, BASE_HEX, NULL, 0,
-        "subjectKeyIdentifier", HFILL }},
-    { &hf_x509ce_id_ce_keyUsage,
-      { "keyUsage", "x509ce.id_ce_keyUsage",
-        FT_BYTES, BASE_HEX, NULL, 0,
-        "keyUsage", HFILL }},
 
 /*--- Included file: packet-x509ce-hfarr.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509ce-hfarr.c                                                      */
-/* ../../tools/asn2eth.py -X -b -p x509ce -c x509ce.cnf -s packet-x509ce-template CertificateExtensions.asn */
-
+    { &hf_x509ce_AuthorityKeyIdentifier_PDU,
+      { "AuthorityKeyIdentifier", "x509ce.AuthorityKeyIdentifier",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "AuthorityKeyIdentifier", HFILL }},
+    { &hf_x509ce_SubjectKeyIdentifier_PDU,
+      { "SubjectKeyIdentifier", "x509ce.SubjectKeyIdentifier",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "SubjectKeyIdentifier", HFILL }},
+    { &hf_x509ce_KeyUsage_PDU,
+      { "KeyUsage", "x509ce.KeyUsage",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "KeyUsage", HFILL }},
+    { &hf_x509ce_KeyPurposeIDs_PDU,
+      { "KeyPurposeIDs", "x509ce.KeyPurposeIDs",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "KeyPurposeIDs", HFILL }},
+    { &hf_x509ce_PrivateKeyUsagePeriod_PDU,
+      { "PrivateKeyUsagePeriod", "x509ce.PrivateKeyUsagePeriod",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "PrivateKeyUsagePeriod", HFILL }},
+    { &hf_x509ce_CertificatePoliciesSyntax_PDU,
+      { "CertificatePoliciesSyntax", "x509ce.CertificatePoliciesSyntax",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "CertificatePoliciesSyntax", HFILL }},
+    { &hf_x509ce_PolicyMappingsSyntax_PDU,
+      { "PolicyMappingsSyntax", "x509ce.PolicyMappingsSyntax",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "PolicyMappingsSyntax", HFILL }},
+    { &hf_x509ce_GeneralNames_PDU,
+      { "GeneralNames", "x509ce.GeneralNames",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "GeneralNames", HFILL }},
+    { &hf_x509ce_AttributesSyntax_PDU,
+      { "AttributesSyntax", "x509ce.AttributesSyntax",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "AttributesSyntax", HFILL }},
+    { &hf_x509ce_BasicConstraintsSyntax_PDU,
+      { "BasicConstraintsSyntax", "x509ce.BasicConstraintsSyntax",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "BasicConstraintsSyntax", HFILL }},
+    { &hf_x509ce_NameConstraintsSyntax_PDU,
+      { "NameConstraintsSyntax", "x509ce.NameConstraintsSyntax",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "NameConstraintsSyntax", HFILL }},
+    { &hf_x509ce_PolicyConstraintsSyntax_PDU,
+      { "PolicyConstraintsSyntax", "x509ce.PolicyConstraintsSyntax",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "PolicyConstraintsSyntax", HFILL }},
+    { &hf_x509ce_SkipCerts_PDU,
+      { "SkipCerts", "x509ce.SkipCerts",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "SkipCerts", HFILL }},
+    { &hf_x509ce_CRLNumber_PDU,
+      { "CRLNumber", "x509ce.CRLNumber",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "CRLNumber", HFILL }},
+    { &hf_x509ce_CRLReason_PDU,
+      { "CRLReason", "x509ce.CRLReason",
+        FT_UINT32, BASE_DEC, VALS(CRLReason_vals), 0,
+        "CRLReason", HFILL }},
+    { &hf_x509ce_HoldInstruction_PDU,
+      { "HoldInstruction", "x509ce.HoldInstruction",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "HoldInstruction", HFILL }},
+    { &hf_x509ce_CRLScopeSyntax_PDU,
+      { "CRLScopeSyntax", "x509ce.CRLScopeSyntax",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "CRLScopeSyntax", HFILL }},
+    { &hf_x509ce_StatusReferrals_PDU,
+      { "StatusReferrals", "x509ce.StatusReferrals",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "StatusReferrals", HFILL }},
+    { &hf_x509ce_CRLStreamIdentifier_PDU,
+      { "CRLStreamIdentifier", "x509ce.CRLStreamIdentifier",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "CRLStreamIdentifier", HFILL }},
+    { &hf_x509ce_OrderedListSyntax_PDU,
+      { "OrderedListSyntax", "x509ce.OrderedListSyntax",
+        FT_UINT32, BASE_DEC, VALS(OrderedListSyntax_vals), 0,
+        "OrderedListSyntax", HFILL }},
+    { &hf_x509ce_DeltaInformation_PDU,
+      { "DeltaInformation", "x509ce.DeltaInformation",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "DeltaInformation", HFILL }},
+    { &hf_x509ce_CRLDistPointsSyntax_PDU,
+      { "CRLDistPointsSyntax", "x509ce.CRLDistPointsSyntax",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "CRLDistPointsSyntax", HFILL }},
+    { &hf_x509ce_IssuingDistPointSyntax_PDU,
+      { "IssuingDistPointSyntax", "x509ce.IssuingDistPointSyntax",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "IssuingDistPointSyntax", HFILL }},
+    { &hf_x509ce_BaseCRLNumber_PDU,
+      { "BaseCRLNumber", "x509ce.BaseCRLNumber",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "BaseCRLNumber", HFILL }},
     { &hf_x509ce_keyIdentifier,
       { "keyIdentifier", "x509ce.keyIdentifier",
         FT_BYTES, BASE_HEX, NULL, 0,
@@ -1448,7 +1361,7 @@
         FT_INT32, BASE_DEC, NULL, 0,
         "AuthorityKeyIdentifier/authorityCertSerialNumber", HFILL }},
     { &hf_x509ce_KeyPurposeIDs_item,
-      { "Item[##]", "x509ce.KeyPurposeIDs_item",
+      { "Item", "x509ce.KeyPurposeIDs_item",
         FT_STRING, BASE_NONE, NULL, 0,
         "KeyPurposeIDs/_item", HFILL }},
     { &hf_x509ce_notBefore,
@@ -1460,7 +1373,7 @@
         FT_STRING, BASE_NONE, NULL, 0,
         "PrivateKeyUsagePeriod/notAfter", HFILL }},
     { &hf_x509ce_CertificatePoliciesSyntax_item,
-      { "Item[##]", "x509ce.CertificatePoliciesSyntax_item",
+      { "Item", "x509ce.CertificatePoliciesSyntax_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "CertificatePoliciesSyntax/_item", HFILL }},
     { &hf_x509ce_policyIdentifier,
@@ -1472,11 +1385,11 @@
         FT_UINT32, BASE_DEC, NULL, 0,
         "PolicyInformation/policyQualifiers", HFILL }},
     { &hf_x509ce_policyQualifiers_item,
-      { "Item[##]", "x509ce.policyQualifiers_item",
+      { "Item", "x509ce.policyQualifiers_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "PolicyInformation/policyQualifiers/_item", HFILL }},
     { &hf_x509ce_PolicyMappingsSyntax_item,
-      { "Item[##]", "x509ce.PolicyMappingsSyntax_item",
+      { "Item", "x509ce.PolicyMappingsSyntax_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "PolicyMappingsSyntax/_item", HFILL }},
     { &hf_x509ce_issuerDomainPolicy,
@@ -1488,7 +1401,7 @@
         FT_STRING, BASE_NONE, NULL, 0,
         "PolicyMappingsSyntax/_item/subjectDomainPolicy", HFILL }},
     { &hf_x509ce_GeneralNames_item,
-      { "Item[##]", "x509ce.GeneralNames_item",
+      { "Item", "x509ce.GeneralNames_item",
         FT_UINT32, BASE_DEC, VALS(GeneralName_vals), 0,
         "GeneralNames/_item", HFILL }},
     { &hf_x509ce_rfc822Name,
@@ -1499,6 +1412,14 @@
       { "dNSName", "x509ce.dNSName",
         FT_STRING, BASE_NONE, NULL, 0,
         "GeneralName/dNSName", HFILL }},
+    { &hf_x509ce_directoryName,
+      { "directoryName", "x509ce.directoryName",
+        FT_UINT32, BASE_DEC, VALS(Name_vals), 0,
+        "GeneralName/directoryName", HFILL }},
+    { &hf_x509ce_ediPartyName,
+      { "ediPartyName", "x509ce.ediPartyName",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "GeneralName/ediPartyName", HFILL }},
     { &hf_x509ce_uniformResourceIdentifier,
       { "uniformResourceIdentifier", "x509ce.uniformResourceIdentifier",
         FT_STRING, BASE_NONE, NULL, 0,
@@ -1511,8 +1432,16 @@
       { "registeredID", "x509ce.registeredID",
         FT_STRING, BASE_NONE, NULL, 0,
         "GeneralName/registeredID", HFILL }},
+    { &hf_x509ce_nameAssigner,
+      { "nameAssigner", "x509ce.nameAssigner",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "EDIPartyName/nameAssigner", HFILL }},
+    { &hf_x509ce_partyName,
+      { "partyName", "x509ce.partyName",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "EDIPartyName/partyName", HFILL }},
     { &hf_x509ce_AttributesSyntax_item,
-      { "Item[##]", "x509ce.AttributesSyntax_item",
+      { "Item", "x509ce.AttributesSyntax_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "AttributesSyntax/_item", HFILL }},
     { &hf_x509ce_cA,
@@ -1532,7 +1461,7 @@
         FT_UINT32, BASE_DEC, NULL, 0,
         "NameConstraintsSyntax/excludedSubtrees", HFILL }},
     { &hf_x509ce_GeneralSubtrees_item,
-      { "Item[##]", "x509ce.GeneralSubtrees_item",
+      { "Item", "x509ce.GeneralSubtrees_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "GeneralSubtrees/_item", HFILL }},
     { &hf_x509ce_base,
@@ -1556,7 +1485,7 @@
         FT_UINT32, BASE_DEC, NULL, 0,
         "PolicyConstraintsSyntax/inhibitPolicyMapping", HFILL }},
     { &hf_x509ce_CRLScopeSyntax_item,
-      { "Item[##]", "x509ce.CRLScopeSyntax_item",
+      { "Item", "x509ce.CRLScopeSyntax_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "CRLScopeSyntax/_item", HFILL }},
     { &hf_x509ce_authorityName,
@@ -1616,7 +1545,7 @@
         FT_STRING, BASE_NONE, NULL, 0,
         "BaseRevocationInfo/baseThisUpdate", HFILL }},
     { &hf_x509ce_StatusReferrals_item,
-      { "Item[##]", "x509ce.StatusReferrals_item",
+      { "Item", "x509ce.StatusReferrals_item",
         FT_UINT32, BASE_DEC, VALS(StatusReferral_vals), 0,
         "StatusReferrals/_item", HFILL }},
     { &hf_x509ce_cRLReferral,
@@ -1660,7 +1589,7 @@
         FT_STRING, BASE_NONE, NULL, 0,
         "DeltaInformation/nextDelta", HFILL }},
     { &hf_x509ce_CRLDistPointsSyntax_item,
-      { "Item[##]", "x509ce.CRLDistPointsSyntax_item",
+      { "Item", "x509ce.CRLDistPointsSyntax_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "CRLDistPointsSyntax/_item", HFILL }},
     { &hf_x509ce_reasons,
@@ -1805,11 +1734,6 @@
 
 /*--- Included file: packet-x509ce-ettarr.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509ce-ettarr.c                                                     */
-/* ../../tools/asn2eth.py -X -b -p x509ce -c x509ce.cnf -s packet-x509ce-template CertificateExtensions.asn */
-
     &ett_x509ce_AuthorityKeyIdentifier,
     &ett_x509ce_KeyUsage,
     &ett_x509ce_KeyPurposeIDs,
@@ -1822,6 +1746,7 @@
     &ett_x509ce_PolicyMappingsSyntax_item,
     &ett_x509ce_GeneralNames,
     &ett_x509ce_GeneralName,
+    &ett_x509ce_EDIPartyName,
     &ett_x509ce_AttributesSyntax,
     &ett_x509ce_BasicConstraintsSyntax,
     &ett_x509ce_NameConstraintsSyntax,
@@ -1860,34 +1785,34 @@
 
 /*--- proto_reg_handoff_x509ce -------------------------------------------*/
 void proto_reg_handoff_x509ce(void) {
-	register_ber_oid_dissector("2.5.29.9", dissect_x509ce_subjectDirectoryAttributes_callback, proto_x509ce, "id-ce-subjectDirectoryAttributes");
-	register_ber_oid_dissector("2.5.29.14", dissect_x509ce_subjectKeyIdentifier_callback, proto_x509ce, "id-ce-subjectKeyIdentifier");
-	register_ber_oid_dissector("2.5.29.15", dissect_x509ce_keyUsage_callback, proto_x509ce, "id-ce-keyUsage");
-	register_ber_oid_dissector("2.5.29.16", dissect_x509ce_privateKeyUsagePeriod_callback, proto_x509ce, "id-ce-privateKeyUsagePeriod");
-	register_ber_oid_dissector("2.5.29.17", dissect_x509ce_subjectAltName_callback, proto_x509ce, "id-ce-subjectAltName");
-	register_ber_oid_dissector("2.5.29.18", dissect_x509ce_issuerAltName_callback, proto_x509ce, "id-ce-issuerAltName");
-	register_ber_oid_dissector("2.5.29.19", dissect_x509ce_basicConstraints_callback, proto_x509ce, "id-ce-basicConstraints");
-	register_ber_oid_dissector("2.5.29.20", dissect_x509ce_cRLNumber_callback, proto_x509ce, "id-ce-cRLNumber");
-	register_ber_oid_dissector("2.5.29.21", dissect_x509ce_reasonCode_callback, proto_x509ce, "id-ce-reasonCode");
-	register_ber_oid_dissector("2.5.29.23", dissect_x509ce_instructionCode_callback, proto_x509ce, "id-ce-instructionCode");
+	register_ber_oid_dissector("2.5.29.9", dissect_AttributesSyntax_PDU, proto_x509ce, "id-ce-subjectDirectoryAttributes");
+	register_ber_oid_dissector("2.5.29.14", dissect_SubjectKeyIdentifier_PDU, proto_x509ce, "id-ce-subjectKeyIdentifier");
+	register_ber_oid_dissector("2.5.29.15", dissect_KeyUsage_PDU, proto_x509ce, "id-ce-keyUsage");
+	register_ber_oid_dissector("2.5.29.16", dissect_PrivateKeyUsagePeriod_PDU, proto_x509ce, "id-ce-privateKeyUsagePeriod");
+	register_ber_oid_dissector("2.5.29.17", dissect_GeneralNames_PDU, proto_x509ce, "id-ce-subjectAltName");
+	register_ber_oid_dissector("2.5.29.18", dissect_GeneralNames_PDU, proto_x509ce, "id-ce-issuerAltName");
+	register_ber_oid_dissector("2.5.29.19", dissect_BasicConstraintsSyntax_PDU, proto_x509ce, "id-ce-basicConstraints");
+	register_ber_oid_dissector("2.5.29.20", dissect_CRLNumber_PDU, proto_x509ce, "id-ce-cRLNumber");
+	register_ber_oid_dissector("2.5.29.21", dissect_CRLReason_PDU, proto_x509ce, "id-ce-reasonCode");
+	register_ber_oid_dissector("2.5.29.23", dissect_HoldInstruction_PDU, proto_x509ce, "id-ce-instructionCode");
 	register_ber_oid_dissector("2.5.29.24", dissect_x509ce_invalidityDate_callback, proto_x509ce, "id-ce-invalidityDate");
-	register_ber_oid_dissector("2.5.29.27", dissect_x509ce_deltaCRLIndicator_callback, proto_x509ce, "id-ce-deltaCRLIndicator");
-	register_ber_oid_dissector("2.5.29.28", dissect_x509ce_issuingDistributionPoint_callback, proto_x509ce, "id-ce-issuingDistributionPoint");
-	register_ber_oid_dissector("2.5.29.29", dissect_x509ce_certificateIssuer_callback, proto_x509ce, "id-ce-certificateIssuer");
-	register_ber_oid_dissector("2.5.29.30", dissect_x509ce_nameConstraints_callback, proto_x509ce, "id-ce-nameConstraints");
-	register_ber_oid_dissector("2.5.29.31", dissect_x509ce_cRLDistributionPoints_callback, proto_x509ce, "id-ce-cRLDistributionPoints");
-	register_ber_oid_dissector("2.5.29.32", dissect_x509ce_certificatePolicies_callback, proto_x509ce, "id-ce-certificatePolicies");
-	register_ber_oid_dissector("2.5.29.33", dissect_x509ce_policyMappings_callback, proto_x509ce, "id-ce-policyMappings");
-	register_ber_oid_dissector("2.5.29.35", dissect_x509ce_authorityKeyIdentifier_callback, proto_x509ce, "id-ce-authorityKeyIdentifier");
-	register_ber_oid_dissector("2.5.29.36", dissect_x509ce_policyConstraints_callback, proto_x509ce, "id-ce-policyConstraints");
-	register_ber_oid_dissector("2.5.29.37", dissect_x509ce_extKeyUsage_callback, proto_x509ce, "id-ce-extKeyUsage");
-	register_ber_oid_dissector("2.5.29.40", dissect_x509ce_cRLStreamIdentifier_callback, proto_x509ce, "id-ce-cRLStreamIdentifier");
-	register_ber_oid_dissector("2.5.29.44", dissect_x509ce_cRLScope_callback, proto_x509ce, "id-ce-cRLScope");
-	register_ber_oid_dissector("2.5.29.45", dissect_x509ce_statusReferrals_callback, proto_x509ce, "id-ce-statusReferrals");
-	register_ber_oid_dissector("2.5.29.46", dissect_x509ce_freshestCRL_callback, proto_x509ce, "id-ce-freshestCRL");
-	register_ber_oid_dissector("2.5.29.47", dissect_x509ce_orderedList_callback, proto_x509ce, "id-ce-orderedList");
+	register_ber_oid_dissector("2.5.29.27", dissect_BaseCRLNumber_PDU, proto_x509ce, "id-ce-deltaCRLIndicator");
+	register_ber_oid_dissector("2.5.29.28", dissect_IssuingDistPointSyntax_PDU, proto_x509ce, "id-ce-issuingDistributionPoint");
+	register_ber_oid_dissector("2.5.29.29", dissect_GeneralNames_PDU, proto_x509ce, "id-ce-certificateIssuer");
+	register_ber_oid_dissector("2.5.29.30", dissect_NameConstraintsSyntax_PDU, proto_x509ce, "id-ce-nameConstraints");
+	register_ber_oid_dissector("2.5.29.31", dissect_CRLDistPointsSyntax_PDU, proto_x509ce, "id-ce-cRLDistributionPoints");
+	register_ber_oid_dissector("2.5.29.32", dissect_CertificatePoliciesSyntax_PDU, proto_x509ce, "id-ce-certificatePolicies");
+	register_ber_oid_dissector("2.5.29.33", dissect_PolicyMappingsSyntax_PDU, proto_x509ce, "id-ce-policyMappings");
+	register_ber_oid_dissector("2.5.29.35", dissect_AuthorityKeyIdentifier_PDU, proto_x509ce, "id-ce-authorityKeyIdentifier");
+	register_ber_oid_dissector("2.5.29.36", dissect_PolicyConstraintsSyntax_PDU, proto_x509ce, "id-ce-policyConstraints");
+	register_ber_oid_dissector("2.5.29.37", dissect_KeyPurposeIDs_PDU, proto_x509ce, "id-ce-extKeyUsage");
+	register_ber_oid_dissector("2.5.29.40", dissect_CRLStreamIdentifier_PDU, proto_x509ce, "id-ce-cRLStreamIdentifier");
+	register_ber_oid_dissector("2.5.29.44", dissect_CRLScopeSyntax_PDU, proto_x509ce, "id-ce-cRLScope");
+	register_ber_oid_dissector("2.5.29.45", dissect_StatusReferrals_PDU, proto_x509ce, "id-ce-statusReferrals");
+	register_ber_oid_dissector("2.5.29.46", dissect_CRLDistPointsSyntax_PDU, proto_x509ce, "id-ce-freshestCRL");
+	register_ber_oid_dissector("2.5.29.47", dissect_OrderedListSyntax_PDU, proto_x509ce, "id-ce-orderedList");
 	register_ber_oid_dissector("2.5.29.51", dissect_x509ce_baseUpdateTime_callback, proto_x509ce, "id-ce-baseUpdateTime");
-	register_ber_oid_dissector("2.5.29.53", dissect_x509ce_deltaInfo_callback, proto_x509ce, "id-ce-deltaInfo");
-	register_ber_oid_dissector("2.5.29.54", dissect_x509ce_inhibitAnyPolicy_callback, proto_x509ce, "id-ce-inhibitAnyPolicy");
+	register_ber_oid_dissector("2.5.29.53", dissect_DeltaInformation_PDU, proto_x509ce, "id-ce-deltaInfo");
+	register_ber_oid_dissector("2.5.29.54", dissect_SkipCerts_PDU, proto_x509ce, "id-ce-inhibitAnyPolicy");
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-x509ce.h ethereal-0.10.7/epan/dissectors/packet-x509ce.h
--- ethereal-0.10.6/epan/dissectors/packet-x509ce.h	2004-08-12 17:42:29.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-x509ce.h	2004-10-20 17:35:00.000000000 -0500
@@ -1,15 +1,14 @@
 /* Do not modify this file.                                                   */
 /* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509ce.h                                                            */
+/* ./packet-x509ce.h                                                          */
 /* ../../tools/asn2eth.py -X -b -p x509ce -c x509ce.cnf -s packet-x509ce-template CertificateExtensions.asn */
 
 /* Input file: packet-x509ce-template.h */
-/* Include files: packet-x509ce-exp.h, packet-x509ce-valexp.h */
 
 /* packet-x509ce.h
  * Routines for X.509 Certificate Extensions packet dissection
  *
- * $Id: packet-x509ce-template.h,v 1.1 2004/05/24 08:42:29 sahlberg Exp $
+ * $Id: packet-x509ce-template.h 12203 2004-10-05 09:18:55Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,11 +35,6 @@
 
 /*--- Included file: packet-x509ce-exp.h ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509ce-exp.h                                                        */
-/* ../../tools/asn2eth.py -X -b -p x509ce -c x509ce.cnf -s packet-x509ce-template CertificateExtensions.asn */
-
 int dissect_x509ce_GeneralNames(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
 
 /*--- End of included file: packet-x509ce-exp.h ---*/
diff -urN ethereal-0.10.6/epan/dissectors/packet-x509if.c ethereal-0.10.7/epan/dissectors/packet-x509if.c
--- ethereal-0.10.6/epan/dissectors/packet-x509if.c	2004-08-12 17:42:09.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-x509if.c	2004-10-20 17:34:46.000000000 -0500
@@ -1,15 +1,14 @@
 /* Do not modify this file.                                                   */
 /* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509if.c                                                            */
+/* ./packet-x509if.c                                                          */
 /* ../../tools/asn2eth.py -X -b -e -p x509if -c x509if.cnf -s packet-x509if-template InformationFramework.asn */
 
 /* Input file: packet-x509if-template.c */
-/* Include files: packet-x509if-hf.c, packet-x509if-ett.c, packet-x509if-fn.c, packet-x509if-hfarr.c, packet-x509if-ettarr.c, packet-x509if-val.h */
 
 /* packet-x509if.c
  * Routines for X.509 Information Framework packet dissection
  *
- * $Id: packet-x509if-template.c,v 1.2 2004/05/25 21:07:43 guy Exp $
+ * $Id: packet-x509if-template.c 12245 2004-10-08 20:28:04Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -54,11 +53,6 @@
 
 /*--- Included file: packet-x509if-hf.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509if-hf.c                                                         */
-/* ../../tools/asn2eth.py -X -b -e -p x509if -c x509if.cnf -s packet-x509if-template InformationFramework.asn */
-
 static int hf_x509if_rdnSequence = -1;            /* RDNSequence */
 static int hf_x509if_RDNSequence_item = -1;       /* RelativeDistinguishedName */
 static int hf_x509if_RelativeDistinguishedName_item = -1;  /* AttributeTypeAndDistinguishedValue */
@@ -75,11 +69,6 @@
 
 /*--- Included file: packet-x509if-ett.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509if-ett.c                                                        */
-/* ../../tools/asn2eth.py -X -b -e -p x509if -c x509if.cnf -s packet-x509if-template InformationFramework.asn */
-
 static gint ett_x509if_Name = -1;
 static gint ett_x509if_RDNSequence = -1;
 static gint ett_x509if_RelativeDistinguishedName = -1;
@@ -90,7 +79,7 @@
 
 
 
-static ber_sequence Attribute_sequence[] = {
+static const ber_sequence Attribute_sequence[] = {
   /*  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_hf_x509if_type },*/
   /*XXX  missing stuff here */
   { 0, 0, 0, NULL }
@@ -121,7 +110,7 @@
   return offset;
 }
 
-static ber_sequence AttributeTypeAndDistinguishedValue_sequence[] = {
+static const ber_sequence AttributeTypeAndDistinguishedValue_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_hf_x509if_ATADV_attribute_id },
   { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_hf_x509if_ATADV_attribute_value },
   /*XXX  missing stuff here */
@@ -139,10 +128,8 @@
 
 /*--- Included file: packet-x509if-fn.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509if-fn.c                                                         */
-/* ../../tools/asn2eth.py -X -b -e -p x509if -c x509if.cnf -s packet-x509if-template InformationFramework.asn */
+/*--- Fields for imported types ---*/
+
 
 
 static int
@@ -165,7 +152,7 @@
   return dissect_x509if_AttributeTypeAndDistinguishedValue(FALSE, tvb, offset, pinfo, tree, hf_x509if_RelativeDistinguishedName_item);
 }
 
-static ber_sequence RelativeDistinguishedName_set_of[1] = {
+static const ber_sequence RelativeDistinguishedName_set_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_RelativeDistinguishedName_item },
 };
 
@@ -180,7 +167,7 @@
   return dissect_x509if_RelativeDistinguishedName(FALSE, tvb, offset, pinfo, tree, hf_x509if_RDNSequence_item);
 }
 
-static ber_sequence RDNSequence_sequence_of[1] = {
+static const ber_sequence RDNSequence_sequence_of[1] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_RDNSequence_item },
 };
 
@@ -201,7 +188,7 @@
   { 0, NULL }
 };
 
-static ber_choice Name_choice[] = {
+static const ber_choice Name_choice[] = {
   {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_rdnSequence },
   { 0, 0, 0, 0, NULL }
 };
@@ -238,7 +225,7 @@
   return offset;
 }
 
-static asn_namedbit AllowedSubset_bits[] = {
+static const asn_namedbit AllowedSubset_bits[] = {
   {  0, &hf_x509if_AllowedSubset_baseObject, -1, -1, NULL, NULL },
   {  1, &hf_x509if_AllowedSubset_oneLevel, -1, -1, NULL, NULL },
   {  2, &hf_x509if_AllowedSubset_wholeSubtree, -1, -1, NULL, NULL },
@@ -287,21 +274,16 @@
 
 /*--- Included file: packet-x509if-hfarr.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509if-hfarr.c                                                      */
-/* ../../tools/asn2eth.py -X -b -e -p x509if -c x509if.cnf -s packet-x509if-template InformationFramework.asn */
-
     { &hf_x509if_rdnSequence,
       { "rdnSequence", "x509if.rdnSequence",
         FT_UINT32, BASE_DEC, NULL, 0,
         "Name/rdnSequence", HFILL }},
     { &hf_x509if_RDNSequence_item,
-      { "Item[##]", "x509if.RDNSequence_item",
+      { "Item", "x509if.RDNSequence_item",
         FT_UINT32, BASE_DEC, NULL, 0,
         "RDNSequence/_item", HFILL }},
     { &hf_x509if_RelativeDistinguishedName_item,
-      { "Item(##)", "x509if.RelativeDistinguishedName_item",
+      { "Item", "x509if.RelativeDistinguishedName_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "RelativeDistinguishedName/_item", HFILL }},
     { &hf_x509if_AllowedSubset_baseObject,
@@ -327,11 +309,6 @@
 
 /*--- Included file: packet-x509if-ettarr.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509if-ettarr.c                                                     */
-/* ../../tools/asn2eth.py -X -b -e -p x509if -c x509if.cnf -s packet-x509if-template InformationFramework.asn */
-
     &ett_x509if_Name,
     &ett_x509if_RDNSequence,
     &ett_x509if_RelativeDistinguishedName,
diff -urN ethereal-0.10.6/epan/dissectors/packet-x509if.h ethereal-0.10.7/epan/dissectors/packet-x509if.h
--- ethereal-0.10.6/epan/dissectors/packet-x509if.h	2004-08-12 17:42:09.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-x509if.h	2004-10-20 17:34:47.000000000 -0500
@@ -1,15 +1,14 @@
 /* Do not modify this file.                                                   */
 /* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509if.h                                                            */
+/* ./packet-x509if.h                                                          */
 /* ../../tools/asn2eth.py -X -b -e -p x509if -c x509if.cnf -s packet-x509if-template InformationFramework.asn */
 
 /* Input file: packet-x509if-template.h */
-/* Include files: packet-x509if-exp.h, packet-x509if-valexp.h */
 
 /* packet-x509if.h
  * Routines for X.509 Information Framework packet dissection
  *
- * $Id: packet-x509if-template.h,v 1.1 2004/05/24 08:42:29 sahlberg Exp $
+ * $Id: packet-x509if-template.h 12203 2004-10-05 09:18:55Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,11 +35,6 @@
 
 /*--- Included file: packet-x509if-exp.h ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509if-exp.h                                                        */
-/* ../../tools/asn2eth.py -X -b -e -p x509if -c x509if.cnf -s packet-x509if-template InformationFramework.asn */
-
 extern const value_string Name_vals[];
 int dissect_x509if_AttributeType(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
 int dissect_x509if_Name(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
diff -urN ethereal-0.10.6/epan/dissectors/packet-x509sat.c ethereal-0.10.7/epan/dissectors/packet-x509sat.c
--- ethereal-0.10.6/epan/dissectors/packet-x509sat.c	2004-08-12 17:42:31.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-x509sat.c	2004-10-20 17:35:02.000000000 -0500
@@ -1,15 +1,14 @@
 /* Do not modify this file.                                                   */
 /* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509sat.c                                                           */
+/* ./packet-x509sat.c                                                         */
 /* ../../tools/asn2eth.py -X -b -p x509sat -c x509sat.cnf -s packet-x509sat-template SelectedAttributeTypes.asn */
 
 /* Input file: packet-x509sat-template.c */
-/* Include files: packet-x509sat-hf.c, packet-x509sat-ett.c, packet-x509sat-fn.c, packet-x509sat-hfarr.c, packet-x509sat-ettarr.c, packet-x509sat-val.h */
 
 /* packet-x509sat.c
  * Routines for X.509 Selected Attribute Types packet dissection
  *
- * $Id: packet-x509sat-template.c,v 1.2 2004/05/25 21:07:43 guy Exp $
+ * $Id: packet-x509sat-template.c 12203 2004-10-05 09:18:55Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -89,11 +88,6 @@
 
 /*--- Included file: packet-x509sat-hf.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509sat-hf.c                                                        */
-/* ../../tools/asn2eth.py -X -b -p x509sat -c x509sat.cnf -s packet-x509sat-template SelectedAttributeTypes.asn */
-
 static int hf_x509sat_equality = -1;              /* AttributeType */
 static int hf_x509sat_substrings = -1;            /* AttributeType */
 static int hf_x509sat_greaterOrEqual = -1;        /* AttributeType */
@@ -111,11 +105,6 @@
 
 /*--- Included file: packet-x509sat-ett.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509sat-ett.c                                                       */
-/* ../../tools/asn2eth.py -X -b -p x509sat -c x509sat.cnf -s packet-x509sat-template SelectedAttributeTypes.asn */
-
 static gint ett_x509sat_CriteriaItem = -1;
 static gint ett_x509sat_TelexNumber = -1;
 
@@ -125,10 +114,7 @@
 
 /*--- Included file: packet-x509sat-fn.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509sat-fn.c                                                        */
-/* ../../tools/asn2eth.py -X -b -p x509sat -c x509sat.cnf -s packet-x509sat-template SelectedAttributeTypes.asn */
+/*--- Fields for imported types ---*/
 
 static int dissect_equality(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_x509if_AttributeType(FALSE, tvb, offset, pinfo, tree, hf_x509sat_equality);
@@ -146,6 +132,7 @@
   return dissect_x509if_AttributeType(FALSE, tvb, offset, pinfo, tree, hf_x509sat_approximateMatch);
 }
 
+
 int
 dissect_x509sat_UniqueIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
@@ -175,7 +162,7 @@
   { 0, NULL }
 };
 
-static ber_choice CriteriaItem_choice[] = {
+static const ber_choice CriteriaItem_choice[] = {
   {   0, BER_CLASS_CON, 0, 0, dissect_equality },
   {   1, BER_CLASS_CON, 1, 0, dissect_substrings },
   {   2, BER_CLASS_CON, 2, 0, dissect_greaterOrEqual },
@@ -221,7 +208,7 @@
   return dissect_x509sat_PrintableString(FALSE, tvb, offset, pinfo, tree, hf_x509sat_answerback);
 }
 
-static ber_sequence TelexNumber_sequence[] = {
+static const ber_sequence TelexNumber_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_telexNumber },
   { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_countryCode },
   { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_answerback },
@@ -246,6 +233,11 @@
 static int DirectoryString_hf_index;
 
 static int
+dissect_teletextString(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_ber_restricted_string(FALSE, BER_UNI_TAG_TeletextString, 
+              pinfo, tree, tvb, offset, DirectoryString_hf_index, NULL);
+}
+static int
 dissect_printableString(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_ber_restricted_string(FALSE, BER_UNI_TAG_PrintableString, 
               pinfo, tree, tvb, offset, DirectoryString_hf_index, NULL);
@@ -267,23 +259,24 @@
 }
 
 static const value_string DirectoryString_vals[] = {
-  {   0, "printableString" },
-  {   1, "universalString" },
-  {   2, "bmpString" },
-  {   3, "uTF8String" },
+  {   0, "teletextString" },
+  {   1, "printableString" },
+  {   2, "universalString" },
+  {   3, "bmpString" },
+  {   4, "uTF8String" },
   { 0, NULL }
 };
 
 static ber_choice DirectoryString_choice[] = {
-/*XXX needs to add TeletexString */
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_printableString },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_UniversalString, BER_FLAGS_NOOWNTAG, dissect_universalString },
-  {   2, BER_CLASS_UNI, BER_UNI_TAG_BMPString, BER_FLAGS_NOOWNTAG, dissect_bmpString },
-  {   3, BER_CLASS_UNI, BER_UNI_TAG_UTF8String, BER_FLAGS_NOOWNTAG, dissect_uTF8String },
+  {   0, BER_CLASS_UNI, BER_UNI_TAG_TeletextString, BER_FLAGS_NOOWNTAG, dissect_teletextString },
+  {   1, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_printableString },
+  {   2, BER_CLASS_UNI, BER_UNI_TAG_UniversalString, BER_FLAGS_NOOWNTAG, dissect_universalString },
+  {   3, BER_CLASS_UNI, BER_UNI_TAG_BMPString, BER_FLAGS_NOOWNTAG, dissect_bmpString },
+  {   4, BER_CLASS_UNI, BER_UNI_TAG_UTF8String, BER_FLAGS_NOOWNTAG, dissect_uTF8String },
   { 0, 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_x509sat_DirectoryString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index) {
   DirectoryString_hf_index = hf_index;
   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
@@ -646,11 +639,6 @@
 
 /*--- Included file: packet-x509sat-hfarr.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509sat-hfarr.c                                                     */
-/* ../../tools/asn2eth.py -X -b -p x509sat -c x509sat.cnf -s packet-x509sat-template SelectedAttributeTypes.asn */
-
     { &hf_x509sat_equality,
       { "equality", "x509sat.equality",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -694,11 +682,6 @@
 
 /*--- Included file: packet-x509sat-ettarr.c ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509sat-ettarr.c                                                    */
-/* ../../tools/asn2eth.py -X -b -p x509sat -c x509sat.cnf -s packet-x509sat-template SelectedAttributeTypes.asn */
-
     &ett_x509sat_CriteriaItem,
     &ett_x509sat_TelexNumber,
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-x509sat.h ethereal-0.10.7/epan/dissectors/packet-x509sat.h
--- ethereal-0.10.6/epan/dissectors/packet-x509sat.h	2004-08-12 17:42:31.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-x509sat.h	2004-10-20 17:35:02.000000000 -0500
@@ -1,15 +1,14 @@
 /* Do not modify this file.                                                   */
 /* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509sat.h                                                           */
+/* ./packet-x509sat.h                                                         */
 /* ../../tools/asn2eth.py -X -b -p x509sat -c x509sat.cnf -s packet-x509sat-template SelectedAttributeTypes.asn */
 
 /* Input file: packet-x509sat-template.h */
-/* Include files: packet-x509sat-exp.h, packet-x509sat-valexp.h */
 
 /* packet-x509sat.h
  * Routines for X.509 Selected Attribute Types packet dissection
  *
- * $Id: packet-x509sat-template.h,v 1.1 2004/05/24 08:42:29 sahlberg Exp $
+ * $Id: packet-x509sat-template.h 12203 2004-10-05 09:18:55Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,15 +35,12 @@
 
 /*--- Included file: packet-x509sat-exp.h ---*/
 
-/* Do not modify this file.                                                   */
-/* It is created automatically by the ASN.1 to Ethereal dissector compiler    */
-/* packet-x509sat-exp.h                                                       */
-/* ../../tools/asn2eth.py -X -b -p x509sat -c x509sat.cnf -s packet-x509sat-template SelectedAttributeTypes.asn */
-
 int dissect_x509sat_UniqueIdentifier(gboolean implicit_tag, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
 
 /*--- End of included file: packet-x509sat-exp.h ---*/
 
 
+int dissect_x509sat_DirectoryString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, int hf_index);
+
 #endif  /* PACKET_X509SAT_H */
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-xot.c ethereal-0.10.7/epan/dissectors/packet-xot.c
--- ethereal-0.10.6/epan/dissectors/packet-xot.c	2004-08-12 17:42:10.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-xot.c	2004-10-20 17:34:48.000000000 -0500
@@ -3,7 +3,7 @@
  *
  * Copyright 2000, Paul Ionescu	<paul@acorp.ro>
  *
- * $Id: packet-xot.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-xot.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,7 +36,7 @@
 #include <glib.h>
 #include <epan/packet.h>
 #include "packet-tcp.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #define TCP_PORT_XOT 1998
 
@@ -154,8 +154,9 @@
 
 	xot_module = prefs_register_protocol(proto_xot, NULL);
 	prefs_register_bool_preference(xot_module, "desegment",
-	    "Desegment all X.25-over-TCP messages spanning multiple TCP segments",
-	    "Whether the X.25-over-TCP dissector should desegment all messages spanning multiple TCP segments",
+	    "Reassemble X.25-over-TCP messages spanning multiple TCP segments",
+	    "Whether the X.25-over-TCP dissector should reassemble messages spanning multiple TCP segments. "
+	    "To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 	    &xot_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/packet-ymsg.c ethereal-0.10.7/epan/dissectors/packet-ymsg.c
--- ethereal-0.10.6/epan/dissectors/packet-ymsg.c	2004-08-12 17:42:29.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/packet-ymsg.c	2004-10-20 17:34:59.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 2003, Wayne Parrott <wayne_p@pacific.net.au>
  * Copied from packet-yhoo.c and updated
  *
- * $Id: packet-ymsg.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-ymsg.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -35,7 +35,7 @@
 #include <epan/packet.h>
 
 #include "packet-tcp.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 static int proto_ymsg = -1;
 static int hf_ymsg_version = -1;
@@ -411,8 +411,9 @@
 
 	ymsg_module = prefs_register_protocol(proto_ymsg, NULL);
 	prefs_register_bool_preference(ymsg_module, "desegment",
-				       "Desegment all YMSG messages spanning multiple TCP segments",
-				       "Whether the YMSG dissector should desegment all messages spanning multiple TCP segments",
+				       "Reasssemble YMSG messages spanning multiple TCP segments",
+				       "Whether the YMSG dissector should reasssemble messages spanning multiple TCP segments. "
+				       "To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
 				       &ymsg_desegment);
 }
 
diff -urN ethereal-0.10.6/epan/dissectors/register.c ethereal-0.10.7/epan/dissectors/register.c
--- ethereal-0.10.6/epan/dissectors/register.c	2004-08-12 17:51:27.000000000 -0500
+++ ethereal-0.10.7/epan/dissectors/register.c	2004-10-20 17:39:15.000000000 -0500
@@ -2,6 +2,9 @@
 /* It is created automatically by the Makefile.  */
 #include "register.h"
 void register_all_protocols(void) {
+  {extern void proto_register_IRemUnknown (void); proto_register_IRemUnknown ();}
+  {extern void proto_register_IRemUnknown2 (void); proto_register_IRemUnknown2 ();}
+  {extern void proto_register_ISystemActivator (void); proto_register_ISystemActivator ();}
   {extern void proto_register_a11 (void); proto_register_a11 ();}
   {extern void proto_register_aarp (void); proto_register_aarp ();}
   {extern void proto_register_acap (void); proto_register_acap ();}
@@ -17,6 +20,7 @@
   {extern void proto_register_aim_chat (void); proto_register_aim_chat ();}
   {extern void proto_register_aim_chatnav (void); proto_register_aim_chatnav ();}
   {extern void proto_register_aim_directory (void); proto_register_aim_directory ();}
+  {extern void proto_register_aim_email (void); proto_register_aim_email ();}
   {extern void proto_register_aim_generic (void); proto_register_aim_generic ();}
   {extern void proto_register_aim_icq (void); proto_register_aim_icq ();}
   {extern void proto_register_aim_invitation (void); proto_register_aim_invitation ();}
@@ -26,6 +30,7 @@
   {extern void proto_register_aim_popup (void); proto_register_aim_popup ();}
   {extern void proto_register_aim_signon (void); proto_register_aim_signon ();}
   {extern void proto_register_aim_ssi (void); proto_register_aim_ssi ();}
+  {extern void proto_register_aim_sst (void); proto_register_aim_sst ();}
   {extern void proto_register_aim_stats (void); proto_register_aim_stats ();}
   {extern void proto_register_aim_translate (void); proto_register_aim_translate ();}
   {extern void proto_register_aim_userlookup (void); proto_register_aim_userlookup ();}
@@ -79,7 +84,7 @@
   {extern void proto_register_cgmp (void); proto_register_cgmp ();}
   {extern void proto_register_chap (void); proto_register_chap ();}
   {extern void proto_register_chdlc (void); proto_register_chdlc ();}
-  {extern void proto_register_cipencap (void); proto_register_cipencap ();}
+  {extern void proto_register_cip (void); proto_register_cip ();}
   {extern void proto_register_cisco_oui (void); proto_register_cisco_oui ();}
   {extern void proto_register_clearcase (void); proto_register_clearcase ();}
   {extern void proto_register_clip (void); proto_register_clip ();}
@@ -95,6 +100,7 @@
   {extern void proto_register_cpha (void); proto_register_cpha ();}
   {extern void proto_register_cprpc_server (void); proto_register_cprpc_server ();}
   {extern void proto_register_cups (void); proto_register_cups ();}
+  {extern void proto_register_daap (void); proto_register_daap ();}
   {extern void proto_register_data (void); proto_register_data ();}
   {extern void proto_register_dccp (void); proto_register_dccp ();}
   {extern void proto_register_dce_update (void); proto_register_dce_update ();}
@@ -144,11 +150,13 @@
   {extern void proto_register_edonkey (void); proto_register_edonkey ();}
   {extern void proto_register_eigrp (void); proto_register_eigrp ();}
   {extern void proto_register_enc (void); proto_register_enc ();}
+  {extern void proto_register_enip (void); proto_register_enip ();}
   {extern void proto_register_enrp (void); proto_register_enrp ();}
   {extern void proto_register_epm (void); proto_register_epm ();}
   {extern void proto_register_epm4 (void); proto_register_epm4 ();}
   {extern void proto_register_esis (void); proto_register_esis ();}
   {extern void proto_register_eth (void); proto_register_eth ();}
+  {extern void proto_register_etheric (void); proto_register_etheric ();}
   {extern void proto_register_etherip (void); proto_register_etherip ();}
   {extern void proto_register_ethertype (void); proto_register_ethertype ();}
   {extern void proto_register_fc (void); proto_register_fc ();}
@@ -188,6 +196,7 @@
   {extern void proto_register_h225 (void); proto_register_h225 ();}
   {extern void proto_register_h235 (void); proto_register_h235 ();}
   {extern void proto_register_h245 (void); proto_register_h245 ();}
+  {extern void proto_register_h248 (void); proto_register_h248 ();}
   {extern void proto_register_h261 (void); proto_register_h261 ();}
   {extern void proto_register_h263 (void); proto_register_h263 ();}
   {extern void proto_register_h4501 (void); proto_register_h4501 ();}
@@ -200,6 +209,7 @@
   {extern void proto_register_iax2 (void); proto_register_iax2 ();}
   {extern void proto_register_ib (void); proto_register_ib ();}
   {extern void proto_register_icap (void); proto_register_icap ();}
+  {extern void proto_register_icep (void); proto_register_icep ();}
   {extern void proto_register_icl_rpc (void); proto_register_icl_rpc ();}
   {extern void proto_register_icmp (void); proto_register_icmp ();}
   {extern void proto_register_icmpv6 (void); proto_register_icmpv6 ();}
@@ -238,6 +248,7 @@
   {extern void proto_register_kerberos (void); proto_register_kerberos ();}
   {extern void proto_register_klm (void); proto_register_klm ();}
   {extern void proto_register_kpasswd (void); proto_register_kpasswd ();}
+  {extern void proto_register_krb4 (void); proto_register_krb4 ();}
   {extern void proto_register_krb5rpc (void); proto_register_krb5rpc ();}
   {extern void proto_register_l2tp (void); proto_register_l2tp ();}
   {extern void proto_register_lacpdu (void); proto_register_lacpdu ();}
@@ -253,12 +264,14 @@
   {extern void proto_register_llcgprs (void); proto_register_llcgprs ();}
   {extern void proto_register_lmi (void); proto_register_lmi ();}
   {extern void proto_register_lmp (void); proto_register_lmp ();}
+  {extern void proto_register_loop (void); proto_register_loop ();}
   {extern void proto_register_lpd (void); proto_register_lpd ();}
   {extern void proto_register_lwapp (void); proto_register_lwapp ();}
   {extern void proto_register_m2pa (void); proto_register_m2pa ();}
   {extern void proto_register_m2tp (void); proto_register_m2tp ();}
   {extern void proto_register_m2ua (void); proto_register_m2ua ();}
   {extern void proto_register_m3ua (void); proto_register_m3ua ();}
+  {extern void proto_register_macctrl (void); proto_register_macctrl ();}
   {extern void proto_register_manolito (void); proto_register_manolito ();}
   {extern void proto_register_map (void); proto_register_map ();}
   {extern void proto_register_mdshdr (void); proto_register_mdshdr ();}
@@ -307,6 +320,7 @@
   {extern void proto_register_nmpi (void); proto_register_nmpi ();}
   {extern void proto_register_nntp (void); proto_register_nntp ();}
   {extern void proto_register_nortel_oui (void); proto_register_nortel_oui ();}
+  {extern void proto_register_ns_cert_exts (void); proto_register_ns_cert_exts ();}
   {extern void proto_register_nspi (void); proto_register_nspi ();}
   {extern void proto_register_ntlmssp (void); proto_register_ntlmssp ();}
   {extern void proto_register_ntp (void); proto_register_ntp ();}
@@ -318,6 +332,7 @@
   {extern void proto_register_osicp (void); proto_register_osicp ();}
   {extern void proto_register_ospf (void); proto_register_ospf ();}
   {extern void proto_register_oxid (void); proto_register_oxid ();}
+  {extern void proto_register_pagp (void); proto_register_pagp ();}
   {extern void proto_register_pap (void); proto_register_pap ();}
   {extern void proto_register_pcnfsd (void); proto_register_pcnfsd ();}
   {extern void proto_register_per (void); proto_register_per ();}
@@ -327,6 +342,9 @@
   {extern void proto_register_pipe_dcerpc (void); proto_register_pipe_dcerpc ();}
   {extern void proto_register_pipe_lanman (void); proto_register_pipe_lanman ();}
   {extern void proto_register_pkcs1 (void); proto_register_pkcs1 ();}
+  {extern void proto_register_pkinit (void); proto_register_pkinit ();}
+  {extern void proto_register_pkix1explicit (void); proto_register_pkix1explicit ();}
+  {extern void proto_register_pkix1implicit (void); proto_register_pkix1implicit ();}
   {extern void proto_register_pktc (void); proto_register_pktc ();}
   {extern void proto_register_pktc_mtafqdn (void); proto_register_pktc_mtafqdn ();}
   {extern void proto_register_pop (void); proto_register_pop ();}
@@ -446,6 +464,7 @@
   {extern void proto_register_t38 (void); proto_register_t38 ();}
   {extern void proto_register_tacacs (void); proto_register_tacacs ();}
   {extern void proto_register_tacplus (void); proto_register_tacplus ();}
+  {extern void proto_register_tali (void); proto_register_tali ();}
   {extern void proto_register_tcap (void); proto_register_tcap ();}
   {extern void proto_register_tcp (void); proto_register_tcp ();}
   {extern void proto_register_teimanagement (void); proto_register_teimanagement ();}
@@ -510,6 +529,9 @@
   {extern void proto_register_zebra (void); proto_register_zebra ();}
 }
 void register_all_protocol_handoffs(void) {
+  {extern void proto_reg_handoff_IRemUnknown (void); proto_reg_handoff_IRemUnknown ();}
+  {extern void proto_reg_handoff_IRemUnknown2 (void); proto_reg_handoff_IRemUnknown2 ();}
+  {extern void proto_reg_handoff_ISystemActivator (void); proto_reg_handoff_ISystemActivator ();}
   {extern void proto_reg_handoff_a11 (void); proto_reg_handoff_a11 ();}
   {extern void proto_reg_handoff_aarp (void); proto_reg_handoff_aarp ();}
   {extern void proto_reg_handoff_acap (void); proto_reg_handoff_acap ();}
@@ -524,6 +546,7 @@
   {extern void proto_reg_handoff_aim_chat (void); proto_reg_handoff_aim_chat ();}
   {extern void proto_reg_handoff_aim_chatnav (void); proto_reg_handoff_aim_chatnav ();}
   {extern void proto_reg_handoff_aim_directory (void); proto_reg_handoff_aim_directory ();}
+  {extern void proto_reg_handoff_aim_email (void); proto_reg_handoff_aim_email ();}
   {extern void proto_reg_handoff_aim_generic (void); proto_reg_handoff_aim_generic ();}
   {extern void proto_reg_handoff_aim_icq (void); proto_reg_handoff_aim_icq ();}
   {extern void proto_reg_handoff_aim_invitation (void); proto_reg_handoff_aim_invitation ();}
@@ -533,6 +556,7 @@
   {extern void proto_reg_handoff_aim_popup (void); proto_reg_handoff_aim_popup ();}
   {extern void proto_reg_handoff_aim_signon (void); proto_reg_handoff_aim_signon ();}
   {extern void proto_reg_handoff_aim_ssi (void); proto_reg_handoff_aim_ssi ();}
+  {extern void proto_reg_handoff_aim_sst (void); proto_reg_handoff_aim_sst ();}
   {extern void proto_reg_handoff_aim_stats (void); proto_reg_handoff_aim_stats ();}
   {extern void proto_reg_handoff_aim_translate (void); proto_reg_handoff_aim_translate ();}
   {extern void proto_reg_handoff_aim_userlookup (void); proto_reg_handoff_aim_userlookup ();}
@@ -586,7 +610,7 @@
   {extern void proto_reg_handoff_cgmp (void); proto_reg_handoff_cgmp ();}
   {extern void proto_reg_handoff_chap (void); proto_reg_handoff_chap ();}
   {extern void proto_reg_handoff_chdlc (void); proto_reg_handoff_chdlc ();}
-  {extern void proto_reg_handoff_cipencap (void); proto_reg_handoff_cipencap ();}
+  {extern void proto_reg_handoff_cip (void); proto_reg_handoff_cip ();}
   {extern void proto_reg_handoff_clearcase (void); proto_reg_handoff_clearcase ();}
   {extern void proto_reg_handoff_clip (void); proto_reg_handoff_clip ();}
   {extern void proto_reg_handoff_clnp (void); proto_reg_handoff_clnp ();}
@@ -600,6 +624,7 @@
   {extern void proto_reg_handoff_cpha (void); proto_reg_handoff_cpha ();}
   {extern void proto_reg_handoff_cprpc_server (void); proto_reg_handoff_cprpc_server ();}
   {extern void proto_reg_handoff_cups (void); proto_reg_handoff_cups ();}
+  {extern void proto_reg_handoff_daap (void); proto_reg_handoff_daap ();}
   {extern void proto_reg_handoff_dccp (void); proto_reg_handoff_dccp ();}
   {extern void proto_reg_handoff_dce_update (void); proto_reg_handoff_dce_update ();}
   {extern void proto_reg_handoff_dcerpc (void); proto_reg_handoff_dcerpc ();}
@@ -646,11 +671,13 @@
   {extern void proto_reg_handoff_edonkey (void); proto_reg_handoff_edonkey ();}
   {extern void proto_reg_handoff_eigrp (void); proto_reg_handoff_eigrp ();}
   {extern void proto_reg_handoff_enc (void); proto_reg_handoff_enc ();}
+  {extern void proto_reg_handoff_enip (void); proto_reg_handoff_enip ();}
   {extern void proto_reg_handoff_enrp (void); proto_reg_handoff_enrp ();}
   {extern void proto_reg_handoff_epm (void); proto_reg_handoff_epm ();}
   {extern void proto_reg_handoff_epm4 (void); proto_reg_handoff_epm4 ();}
   {extern void proto_reg_handoff_esis (void); proto_reg_handoff_esis ();}
   {extern void proto_reg_handoff_eth (void); proto_reg_handoff_eth ();}
+  {extern void proto_reg_handoff_etheric (void); proto_reg_handoff_etheric ();}
   {extern void proto_reg_handoff_etherip (void); proto_reg_handoff_etherip ();}
   {extern void proto_reg_handoff_ethertype (void); proto_reg_handoff_ethertype ();}
   {extern void proto_reg_handoff_fc (void); proto_reg_handoff_fc ();}
@@ -690,6 +717,7 @@
   {extern void proto_reg_handoff_h225 (void); proto_reg_handoff_h225 ();}
   {extern void proto_reg_handoff_h235 (void); proto_reg_handoff_h235 ();}
   {extern void proto_reg_handoff_h245 (void); proto_reg_handoff_h245 ();}
+  {extern void proto_reg_handoff_h248 (void); proto_reg_handoff_h248 ();}
   {extern void proto_reg_handoff_h261 (void); proto_reg_handoff_h261 ();}
   {extern void proto_reg_handoff_h263 (void); proto_reg_handoff_h263 ();}
   {extern void proto_reg_handoff_h4501 (void); proto_reg_handoff_h4501 ();}
@@ -702,6 +730,7 @@
   {extern void proto_reg_handoff_iax2 (void); proto_reg_handoff_iax2 ();}
   {extern void proto_reg_handoff_ib (void); proto_reg_handoff_ib ();}
   {extern void proto_reg_handoff_icap (void); proto_reg_handoff_icap ();}
+  {extern void proto_reg_handoff_icep (void); proto_reg_handoff_icep ();}
   {extern void proto_reg_handoff_icl_rpc (void); proto_reg_handoff_icl_rpc ();}
   {extern void proto_reg_handoff_icmp (void); proto_reg_handoff_icmp ();}
   {extern void proto_reg_handoff_icmpv6 (void); proto_reg_handoff_icmpv6 ();}
@@ -740,6 +769,7 @@
   {extern void proto_reg_handoff_kerberos (void); proto_reg_handoff_kerberos ();}
   {extern void proto_reg_handoff_klm (void); proto_reg_handoff_klm ();}
   {extern void proto_reg_handoff_kpasswd (void); proto_reg_handoff_kpasswd ();}
+  {extern void proto_reg_handoff_krb4 (void); proto_reg_handoff_krb4 ();}
   {extern void proto_reg_handoff_krb5rpc (void); proto_reg_handoff_krb5rpc ();}
   {extern void proto_reg_handoff_l2tp (void); proto_reg_handoff_l2tp ();}
   {extern void proto_reg_handoff_lacpdu (void); proto_reg_handoff_lacpdu ();}
@@ -755,12 +785,14 @@
   {extern void proto_reg_handoff_llcgprs (void); proto_reg_handoff_llcgprs ();}
   {extern void proto_reg_handoff_lmi (void); proto_reg_handoff_lmi ();}
   {extern void proto_reg_handoff_lmp (void); proto_reg_handoff_lmp ();}
+  {extern void proto_reg_handoff_loop (void); proto_reg_handoff_loop ();}
   {extern void proto_reg_handoff_lpd (void); proto_reg_handoff_lpd ();}
   {extern void proto_reg_handoff_lwapp (void); proto_reg_handoff_lwapp ();}
   {extern void proto_reg_handoff_m2pa (void); proto_reg_handoff_m2pa ();}
   {extern void proto_reg_handoff_m2tp (void); proto_reg_handoff_m2tp ();}
   {extern void proto_reg_handoff_m2ua (void); proto_reg_handoff_m2ua ();}
   {extern void proto_reg_handoff_m3ua (void); proto_reg_handoff_m3ua ();}
+  {extern void proto_reg_handoff_macctrl (void); proto_reg_handoff_macctrl ();}
   {extern void proto_reg_handoff_manolito (void); proto_reg_handoff_manolito ();}
   {extern void proto_reg_handoff_map (void); proto_reg_handoff_map ();}
   {extern void proto_reg_handoff_mbtcp (void); proto_reg_handoff_mbtcp ();}
@@ -802,6 +834,7 @@
   {extern void proto_reg_handoff_nlsp (void); proto_reg_handoff_nlsp ();}
   {extern void proto_reg_handoff_nmpi (void); proto_reg_handoff_nmpi ();}
   {extern void proto_reg_handoff_nntp (void); proto_reg_handoff_nntp ();}
+  {extern void proto_reg_handoff_ns_cert_exts (void); proto_reg_handoff_ns_cert_exts ();}
   {extern void proto_reg_handoff_nspi (void); proto_reg_handoff_nspi ();}
   {extern void proto_reg_handoff_ntlmssp (void); proto_reg_handoff_ntlmssp ();}
   {extern void proto_reg_handoff_ntp (void); proto_reg_handoff_ntp ();}
@@ -812,6 +845,7 @@
   {extern void proto_reg_handoff_osicp (void); proto_reg_handoff_osicp ();}
   {extern void proto_reg_handoff_ospf (void); proto_reg_handoff_ospf ();}
   {extern void proto_reg_handoff_oxid (void); proto_reg_handoff_oxid ();}
+  {extern void proto_reg_handoff_pagp (void); proto_reg_handoff_pagp ();}
   {extern void proto_reg_handoff_pap (void); proto_reg_handoff_pap ();}
   {extern void proto_reg_handoff_pcnfsd (void); proto_reg_handoff_pcnfsd ();}
   {extern void proto_reg_handoff_per (void); proto_reg_handoff_per ();}
@@ -819,6 +853,9 @@
   {extern void proto_reg_handoff_pgm (void); proto_reg_handoff_pgm ();}
   {extern void proto_reg_handoff_pim (void); proto_reg_handoff_pim ();}
   {extern void proto_reg_handoff_pkcs1 (void); proto_reg_handoff_pkcs1 ();}
+  {extern void proto_reg_handoff_pkinit (void); proto_reg_handoff_pkinit ();}
+  {extern void proto_reg_handoff_pkix1explicit (void); proto_reg_handoff_pkix1explicit ();}
+  {extern void proto_reg_handoff_pkix1implicit (void); proto_reg_handoff_pkix1implicit ();}
   {extern void proto_reg_handoff_pktc (void); proto_reg_handoff_pktc ();}
   {extern void proto_reg_handoff_pktc_mtafqdn (void); proto_reg_handoff_pktc_mtafqdn ();}
   {extern void proto_reg_handoff_pop (void); proto_reg_handoff_pop ();}
@@ -934,6 +971,7 @@
   {extern void proto_reg_handoff_t38 (void); proto_reg_handoff_t38 ();}
   {extern void proto_reg_handoff_tacacs (void); proto_reg_handoff_tacacs ();}
   {extern void proto_reg_handoff_tacplus (void); proto_reg_handoff_tacplus ();}
+  {extern void proto_reg_handoff_tali (void); proto_reg_handoff_tali ();}
   {extern void proto_reg_handoff_tcap (void); proto_reg_handoff_tcap ();}
   {extern void proto_reg_handoff_tcp (void); proto_reg_handoff_tcp ();}
   {extern void proto_reg_handoff_tds (void); proto_reg_handoff_tds ();}
diff -urN ethereal-0.10.6/epan/epan.c ethereal-0.10.7/epan/epan.c
--- ethereal-0.10.6/epan/epan.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/epan.c	2004-10-20 17:35:04.000000000 -0500
@@ -1,6 +1,6 @@
 /* epan.h
  *
- * $Id: epan.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: epan.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal Protocol Analyzer Library
  */
@@ -19,7 +19,7 @@
 #include "except.h"
 #include "packet.h"
 #include "column-utils.h"
-#include "../tap.h"
+#include "tap.h"
 #include "addr_resolv.h"
 
 static void (*report_failure_func)(const char *, va_list);
diff -urN ethereal-0.10.6/epan/filesystem.c ethereal-0.10.7/epan/filesystem.c
--- ethereal-0.10.6/epan/filesystem.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/filesystem.c	2004-10-20 17:35:04.000000000 -0500
@@ -1,7 +1,7 @@
 /* filesystem.c
  * Filesystem utility routines
  *
- * $Id: filesystem.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: filesystem.c 11972 2004-09-11 23:03:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -49,7 +49,7 @@
 #include <direct.h>		/* to declare "mkdir()" on Windows */
 #endif
 
-#ifndef WIN32
+#ifndef _WIN32
 #include <pwd.h>
 #endif
 
@@ -65,7 +65,7 @@
 {
 	char *separator;
 
-#ifdef WIN32
+#ifdef _WIN32
 	char c;
 
 	/*
@@ -235,7 +235,7 @@
 const char *
 get_datafile_dir(void)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	char prog_pathname[_MAX_PATH+2];
 	char *dir_end;
 	size_t datafile_dir_len;
@@ -316,7 +316,7 @@
 const char *
 get_systemfile_dir(void)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	return get_datafile_dir();
 #else
 	return "/etc";
@@ -327,7 +327,7 @@
  * Name of directory, under the user's home directory, in which
  * personal configuration files are stored.
  */
-#ifdef WIN32
+#ifdef _WIN32
 #define PF_DIR "Ethereal"
 #else
 /*
@@ -347,7 +347,7 @@
 static const char *
 get_persconffile_dir(void)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	char *appdatadir;
 	char *userprofiledir;
 #else
@@ -360,7 +360,7 @@
 	if (pf_dir != NULL)
 		return pf_dir;
 
-#ifdef WIN32
+#ifdef _WIN32
 	/*
 	 * Use %APPDATA% or %USERPROFILE%, so that configuration files are
 	 * stored in the user profile, rather than in the home directory.
@@ -436,7 +436,7 @@
 create_persconffile_dir(char **pf_dir_path_return)
 {
 	const char *pf_dir_path;
-#ifdef WIN32
+#ifdef _WIN32
 	char *pf_dir_path_copy, *pf_dir_parent_path;
 	size_t pf_dir_parent_path_len;
 #endif
@@ -445,7 +445,7 @@
 
 	pf_dir_path = get_persconffile_dir();
 	if (stat(pf_dir_path, &s_buf) != 0 && errno == ENOENT) {
-#ifdef WIN32
+#ifdef _WIN32
 		/*
 		 * Does the parent directory of that directory
 		 * exist?  %APPDATA% may not exist even though
@@ -491,7 +491,7 @@
 	return ret;
 }
 
-#ifdef WIN32
+#ifdef _WIN32
 /*
  * Returns the user's home directory on Win32.
  */
@@ -562,13 +562,13 @@
  */
 char *
 get_persconffile_path(const char *filename, gboolean for_writing
-#ifndef WIN32
+#ifndef _WIN32
 	_U_
 #endif
 )
 {
 	char *path;
-#ifdef WIN32
+#ifdef _WIN32
 	struct stat s_buf;
 	char *old_path;
 #endif
@@ -577,7 +577,7 @@
 	    strlen(filename) + 2);
 	sprintf(path, "%s" G_DIR_SEPARATOR_S "%s", get_persconffile_dir(),
 	    filename);
-#ifdef WIN32
+#ifdef _WIN32
 	if (!for_writing) {
 		if (stat(path, &s_buf) != 0 && errno == ENOENT) {
 			/*
diff -urN ethereal-0.10.6/epan/ftypes/Makefile.in ethereal-0.10.7/epan/ftypes/Makefile.in
--- ethereal-0.10.6/epan/ftypes/Makefile.in	2004-08-12 21:04:20.000000000 -0500
+++ ethereal-0.10.7/epan/ftypes/Makefile.in	2004-10-20 21:50:16.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -97,6 +97,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -108,10 +111,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -192,8 +198,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -488,7 +494,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -510,7 +516,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -535,7 +540,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/epan/ftypes/ftype-bytes.c ethereal-0.10.7/epan/ftypes/ftype-bytes.c
--- ethereal-0.10.6/epan/ftypes/ftype-bytes.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/ftypes/ftype-bytes.c	2004-10-20 17:35:04.000000000 -0500
@@ -1,5 +1,5 @@
 /*
- * $Id: ftype-bytes.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: ftype-bytes.c 11796 2004-08-22 00:31:58Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -29,7 +29,6 @@
 #include <ctype.h>
 #include <epan/addr_resolv.h>
 #include <epan/strutil.h>
-#include <epan/int-64bit.h>
 
 #ifdef HAVE_LIBPCRE
 #include <pcre.h>
@@ -40,7 +39,6 @@
 
 #define ETHER_LEN	6
 #define IPv6_LEN	16
-#define U64_LEN		8
 
 static void
 bytes_fvalue_new(fvalue_t *fv)
@@ -123,13 +121,6 @@
 	common_fvalue_set(fv, value, IPv6_LEN);
 }
 
-static void
-u64_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied)
-{
-	g_assert(!already_copied);
-	common_fvalue_set(fv, value, U64_LEN);
-}
-
 static gpointer
 value_get(fvalue_t *fv)
 {
@@ -227,34 +218,6 @@
 	return TRUE;
 }
 
-static gboolean
-u64_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc)
-{
-	guint8	buffer[8];
-
-	if (atou64(s, buffer) == NULL) {
-		logfunc("\"%s\" is not a valid integer", s);
-		return FALSE;
-	}
-
-	u64_fvalue_set(fv, buffer, FALSE);
-	return TRUE;
-}
-
-static gboolean
-i64_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc)
-{
-	guint8	buffer[8];
-
-	if (atoi64(s, buffer) == NULL) {
-		logfunc("\"%s\" is not a valid integer", s);
-		return FALSE;
-	}
-
-	u64_fvalue_set(fv, buffer, FALSE);
-	return TRUE;
-}
-
 static guint
 len(fvalue_t *fv)
 {
@@ -368,178 +331,6 @@
 	return (memcmp(a->data, b->data, a->len) <= 0);
 }
 
-static gboolean
-cmp_gt_i64(fvalue_t *fv_a, fvalue_t *fv_b)
-{
-	GByteArray	*a = fv_a->value.bytes;
-	GByteArray	*b = fv_b->value.bytes;
-
-	if (a->len > b->len) {
-		return TRUE;
-	}
-
-	if (a->len < b->len) {
-		return FALSE;
-	}
-
-	if ((a->data[0] & 0x80) == 0) {
-		/*
-		 * "a" is positive.
-		 */
-		if (b->data[0] & 0x80) {
-			/*
-			 * "b" is negative, so a > b.
-			 */
-			return TRUE;
-		}
-	} else {
-		/*
-		 * "a" is negative.
-		 */
-		if ((b->data[0] & 0x80) == 0) {
-			/*
-			 * "b" is positive, so a < b.
-			 */
-			return FALSE;
-		}
-	}
-
-	/*
-	 * "a" and "b" have the same sign, so "memcmp()" should
-	 * give the right answer.
-	 */
-	return (memcmp(a->data, b->data, a->len) > 0);
-}
-
-static gboolean
-cmp_ge_i64(fvalue_t *fv_a, fvalue_t *fv_b)
-{
-	GByteArray	*a = fv_a->value.bytes;
-	GByteArray	*b = fv_b->value.bytes;
-
-	if (a->len > b->len) {
-		return TRUE;
-	}
-
-	if (a->len < b->len) {
-		return FALSE;
-	}
-
-	if ((a->data[0] & 0x80) == 0) {
-		/*
-		 * "a" is positive.
-		 */
-		if (b->data[0] & 0x80) {
-			/*
-			 * "b" is negative, so a > b.
-			 */
-			return TRUE;
-		}
-	} else {
-		/*
-		 * "a" is negative.
-		 */
-		if ((b->data[0] & 0x80) == 0) {
-			/*
-			 * "b" is positive, so a < b.
-			 */
-			return FALSE;
-		}
-	}
-
-	/*
-	 * "a" and "b" have the same sign, so "memcmp()" should
-	 * give the right answer.
-	 */
-	return (memcmp(a->data, b->data, a->len) >= 0);
-}
-
-static gboolean
-cmp_lt_i64(fvalue_t *fv_a, fvalue_t *fv_b)
-{
-	GByteArray	*a = fv_a->value.bytes;
-	GByteArray	*b = fv_b->value.bytes;
-
-	if (a->len < b->len) {
-		return TRUE;
-	}
-
-	if (a->len > b->len) {
-		return FALSE;
-	}
-
-	if (a->data[0] & 0x80) {
-		/*
-		 * "a" is negative.
-		 */
-		if ((b->data[0] & 0x80) == 0) {
-			/*
-			 * "b" is positive, so a < b.
-			 */
-			return TRUE;
-		}
-	} else {
-		/*
-		 * "a" is positive.
-		 */
-		if (b->data[0] & 0x80) {
-			/*
-			 * "b" is negative, so a > b.
-			 */
-			return FALSE;
-		}
-	}
-
-	/*
-	 * "a" and "b" have the same sign, so "memcmp()" should
-	 * give the right answer.
-	 */
-	return (memcmp(a->data, b->data, a->len) < 0);
-}
-
-static gboolean
-cmp_le_i64(fvalue_t *fv_a, fvalue_t *fv_b)
-{
-	GByteArray	*a = fv_a->value.bytes;
-	GByteArray	*b = fv_b->value.bytes;
-
-	if (a->len < b->len) {
-		return TRUE;
-	}
-
-	if (a->len > b->len) {
-		return FALSE;
-	}
-
-	if (a->data[0] & 0x80) {
-		/*
-		 * "a" is negative.
-		 */
-		if ((b->data[0] & 0x80) == 0) {
-			/*
-			 * "b" is positive, so a < b.
-			 */
-			return TRUE;
-		}
-	} else {
-		/*
-		 * "a" is positive.
-		 */
-		if (b->data[0] & 0x80) {
-			/*
-			 * "b" is negative, so a > b.
-			 */
-			return FALSE;
-		}
-	}
-
-	/*
-	 * "a" and "b" have the same sign, so "memcmp()" should
-	 * give the right answer.
-	 */
-	return (memcmp(a->data, b->data, a->len) <= 0);
-}
-
 static gboolean cmp_bytes_bitwise_and(fvalue_t *fv_a, fvalue_t *fv_b)
 {
 	GByteArray	*a = fv_a->value.bytes;
@@ -629,10 +420,12 @@
 
 		bytes_fvalue_set,		/* set_value */
 		NULL,				/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		value_get,			/* get_value */
 		NULL,				/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */
 
 		cmp_eq,
@@ -662,10 +455,12 @@
 
 		bytes_fvalue_set,		/* set_value */
 		NULL,				/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		value_get,			/* get_value */
 		NULL,				/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */
 
 		cmp_eq,
@@ -695,10 +490,12 @@
 
 		ether_fvalue_set,		/* set_value */
 		NULL,				/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		value_get,			/* get_value */
 		NULL,				/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */
 
 		cmp_eq,
@@ -728,10 +525,12 @@
 
 		ipv6_fvalue_set,		/* set_value */
 		NULL,				/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		value_get,			/* get_value */
 		NULL,				/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */
 
 		cmp_eq,
@@ -748,76 +547,8 @@
 		slice,
 	};
 
-	static ftype_t u64_type = {
-		"FT_UINT64",			/* name */
-		"Unsigned 64-bit integer",	/* pretty_name */
-		U64_LEN,			/* wire_size */
-		bytes_fvalue_new,		/* new_value */
-		bytes_fvalue_free,		/* free_value */
-		u64_from_unparsed,		/* val_from_unparsed */
-		NULL,				/* val_from_string */
-		NULL,				/* val_to_string_repr */
-		NULL,				/* len_string_repr */
-
-		u64_fvalue_set,			/* set_value */
-		NULL,				/* set_value_integer */
-		NULL,				/* set_value_floating */
-
-		value_get,			/* get_value */
-		NULL,				/* get_value_integer */
-		NULL,				/* get_value_floating */
-
-		cmp_eq,
-		cmp_ne,
-		cmp_gt,
-		cmp_ge,
-		cmp_lt,
-		cmp_le,
-		cmp_bytes_bitwise_and,
-		NULL,				/* cmp_contains */
-		NULL,				/* cmp_matches */
-
-		len,
-		slice,
-	};
-
-	static ftype_t i64_type = {
-		"FT_INT64",			/* name */
-		"Signed 64-bit integer",	/* pretty_name */
-		U64_LEN,			/* wire_size */
-		bytes_fvalue_new,		/* new_value */
-		bytes_fvalue_free,		/* free_value */
-		i64_from_unparsed,		/* val_from_unparsed */
-		NULL,				/* val_from_string */
-		NULL,				/* val_to_string_repr */
-		NULL,				/* len_string_repr */
-
-		u64_fvalue_set,			/* set_value */
-		NULL,				/* set_value_integer */
-		NULL,				/* set_value_floating */
-
-		value_get,			/* get_value */
-		NULL,				/* get_value_integer */
-		NULL,				/* get_value_floating */
-
-		cmp_eq,
-		cmp_ne,
-		cmp_gt_i64,
-		cmp_ge_i64,
-		cmp_lt_i64,
-		cmp_le_i64,
-		cmp_bytes_bitwise_and,
-		NULL,				/* cmp_contains */
-		NULL,				/* cmp_matches */
-
-		len,
-		slice,
-	};
-
 	ftype_register(FT_BYTES, &bytes_type);
 	ftype_register(FT_UINT_BYTES, &uint_bytes_type);
 	ftype_register(FT_ETHER, &ether_type);
 	ftype_register(FT_IPv6, &ipv6_type);
-	ftype_register(FT_UINT64, &u64_type);
-	ftype_register(FT_INT64, &i64_type);
 }
diff -urN ethereal-0.10.6/epan/ftypes/ftype-double.c ethereal-0.10.7/epan/ftypes/ftype-double.c
--- ethereal-0.10.6/epan/ftypes/ftype-double.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/ftypes/ftype-double.c	2004-10-20 17:35:03.000000000 -0500
@@ -1,5 +1,5 @@
 /*
- * $Id: ftype-double.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: ftype-double.c 11796 2004-08-22 00:31:58Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -157,23 +157,25 @@
 {
 
 	static ftype_t float_type = {
-		"FT_FLOAT",
-		"floating point (single-precision)",
-		0,
-		double_fvalue_new,
-		NULL,
+		"FT_FLOAT",			/* name */
+		"floating point (single-precision)", /* pretty_name */
+		0,				/* wire_size */
+		double_fvalue_new,		/* new_value */
+		NULL,				/* free_value */
 		val_from_unparsed,		/* val_from_unparsed */
 		NULL,				/* val_from_string */
 		float_val_to_repr,		/* val_to_string_repr */
 		float_val_repr_len,		/* len_string_repr */
 
-		NULL,
-		NULL,
-		double_fvalue_set_floating,
-
-		NULL,
-		NULL,
-		value_get_floating,
+		NULL,				/* set_value */
+		NULL,				/* set_value_integer */
+		NULL,				/* set_value_integer64 */
+		double_fvalue_set_floating,	/* set_value_floating */
+
+		NULL,				/* get_value */
+		NULL,				/* get_value_integer */
+		NULL,				/* get_value_integer64 */
+		value_get_floating,		/* get_value_floating */
 
 		cmp_eq,
 		cmp_ne,
@@ -190,23 +192,25 @@
 	};
 
 	static ftype_t double_type = {
-		"FT_DOUBLE",
-		"floating point (double-precision)",
-		0,
-		double_fvalue_new,
-		NULL,
+		"FT_DOUBLE",			/* name */
+		"floating point (double-precision)", /* pretty_name */
+		0,				/* wire_size */
+		double_fvalue_new,		/* new_value */
+		NULL,				/* free_value */
 		val_from_unparsed,		/* val_from_unparsed */
 		NULL,				/* val_from_string */
 		double_val_to_repr,		/* val_to_string_repr */
 		double_val_repr_len,		/* len_string_repr */
 
-		NULL,
-		NULL,
-		double_fvalue_set_floating,
-
-		NULL,
-		NULL,
-		value_get_floating,
+		NULL,				/* set_value */
+		NULL,				/* set_value_integer */
+		NULL,				/* set_value_integer64 */
+		double_fvalue_set_floating,	/* set_value_floating */
+
+		NULL,				/* get_value */
+		NULL,				/* get_value_integer */
+		NULL,				/* get_value_integer64 */
+		value_get_floating,		/* get_value_floating */
 
 		cmp_eq,
 		cmp_ne,
diff -urN ethereal-0.10.6/epan/ftypes/ftype-integer.c ethereal-0.10.7/epan/ftypes/ftype-integer.c
--- ethereal-0.10.6/epan/ftypes/ftype-integer.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/ftypes/ftype-integer.c	2004-10-20 17:35:03.000000000 -0500
@@ -1,5 +1,5 @@
 /*
- * $Id: ftype-integer.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: ftype-integer.c 11889 2004-09-03 18:14:00Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -29,12 +29,20 @@
 #include "ftypes-int.h"
 #include <epan/addr_resolv.h>
 
+#ifdef NEED_G_ASCII_STRTOULL_H
+#include "g_ascii_strtoull.h"
+#endif
+
 /*
- * GLib 1.2[.x] doesn't define G_MAXUINT32; if it's not defined, we define
- * it as the maximum 32-bit unsigned number.
+ * GLib 1.2[.x] doesn't define G_MAXUINT32 or G_MAXUINT64; if they're
+ * not defined, we define them as the maximum 32-bit and 32-bit
+ * unsigned numbers.
  */
 #ifndef G_MAXUINT32
-#define G_MAXUINT32	((guint32)0xFFFFFFFF)
+#define G_MAXUINT32	((guint32)0xFFFFFFFFU)
+#endif
+#ifndef G_MAXUINT64
+#define G_MAXUINT64	((guint64)G_GINT64_CONSTANT(0xFFFFFFFFFFFFFFFFU))
 #endif
 
 static void
@@ -188,7 +196,136 @@
 static gboolean
 cmp_bitwise_and(fvalue_t *a, fvalue_t *b)
 {
-	return (a->value.integer & b->value.integer);
+	return ((a->value.integer & b->value.integer) != 0);
+}
+
+static void
+int64_fvalue_new(fvalue_t *fv)
+{
+	fv->value.integer64 = 0;
+}
+
+static void
+set_integer64(fvalue_t *fv, guint64 value)
+{
+	fv->value.integer64 = value;
+}
+
+static guint64
+get_integer64(fvalue_t *fv)
+{
+	return fv->value.integer64;
+}
+
+static gboolean
+val64_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, LogFunc logfunc)
+{
+	guint64 value;
+	char    *endptr;
+
+	errno = 0;
+	value = g_ascii_strtoull(s, &endptr, 0);
+
+	if (errno == EINVAL || endptr == s || *endptr != '\0') {
+		/* This isn't a valid number. */
+		if (logfunc != NULL)
+			logfunc("\"%s\" is not a valid number.", s);
+		return FALSE;
+	}
+	if (errno == ERANGE) {
+		if (logfunc != NULL) {
+			if (value == ULONG_MAX) {
+				logfunc("\"%s\" causes an integer overflow.",
+				    s);
+			}
+			else {
+				/*
+				 * XXX - can "strtoul()" set errno to
+				 * ERANGE without returning ULONG_MAX?
+				 */
+				logfunc("\"%s\" is not an integer.", s);
+			}
+		}
+		return FALSE;
+	}
+	if (value > G_MAXUINT64) {
+		/*
+		 * Fits in an unsigned long, but not in a guint64
+		 * (unlikely, but not impossible).
+		 */
+		if (logfunc != NULL)
+			logfunc("\"%s\" causes an integer overflow.", s);
+		return FALSE;
+	}
+
+	fv->value.integer64 = value;
+	return TRUE;
+}
+
+static gboolean
+cmp_eq64(fvalue_t *a, fvalue_t *b)
+{
+	return a->value.integer64 == b->value.integer64;
+}
+
+static gboolean
+cmp_ne64(fvalue_t *a, fvalue_t *b)
+{
+	return a->value.integer64 != b->value.integer64;
+}
+
+static gboolean
+u_cmp_gt64(fvalue_t *a, fvalue_t *b)
+{
+	return (gint64)a->value.integer64 > (gint64)b->value.integer64;
+}
+
+static gboolean
+u_cmp_ge64(fvalue_t *a, fvalue_t *b)
+{
+	return (gint64)a->value.integer64 >= (gint64)b->value.integer64;
+}
+
+static gboolean
+u_cmp_lt64(fvalue_t *a, fvalue_t *b)
+{
+	return (gint64)a->value.integer64 < (gint64)b->value.integer64;
+}
+
+static gboolean
+u_cmp_le64(fvalue_t *a, fvalue_t *b)
+{
+	return (gint64)a->value.integer64 <= (gint64)b->value.integer64;
+}
+
+static gboolean
+s_cmp_gt64(fvalue_t *a, fvalue_t *b)
+{
+	return a->value.integer64 > b->value.integer64;
+}
+
+static gboolean
+s_cmp_ge64(fvalue_t *a, fvalue_t *b)
+{
+	return a->value.integer64 >= b->value.integer64;
+}
+
+static gboolean
+s_cmp_lt64(fvalue_t *a, fvalue_t *b)
+{
+	return a->value.integer64 < b->value.integer64;
+}
+
+static gboolean
+s_cmp_le64(fvalue_t *a, fvalue_t *b)
+{
+	return a->value.integer64 <= b->value.integer64;
+}
+
+static gboolean
+cmp_bitwise_and64(fvalue_t *a, fvalue_t *b)
+{
+	return ((a->value.integer64 & b->value.integer64) != 0);
 }
 
 /* BOOLEAN-specific */
@@ -259,10 +396,12 @@
 
 		NULL,				/* set_value */
 		set_integer,			/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		NULL,				/* get_value */
 		get_integer,			/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */
 
 		cmp_eq,
@@ -291,10 +430,12 @@
 
 		NULL,				/* set_value */
 		set_integer,			/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		NULL,				/* get_value */
 		get_integer,			/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */
 
 		cmp_eq,
@@ -323,10 +464,12 @@
 
 		NULL,				/* set_value */
 		set_integer,			/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		NULL,				/* get_value */
 		get_integer,			/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */
 
 		cmp_eq,
@@ -355,10 +498,12 @@
 
 		NULL,				/* set_value */
 		set_integer,			/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		NULL,				/* get_value */
 		get_integer,			/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */
 
 		cmp_eq,
@@ -374,6 +519,40 @@
 		NULL,				/* len */
 		NULL,				/* slice */
 	};
+	static ftype_t uint64_type = {
+		"FT_UINT64",			/* name */
+		"unsigned, 8 bytes",		/* pretty_name */
+		8,				/* wire_size */
+		int64_fvalue_new,		/* new_value */
+		NULL,				/* free_value */
+		val64_from_unparsed,		/* val_from_unparsed */
+		NULL,				/* val_from_string */
+		NULL,				/* val_to_string_repr */
+		NULL,				/* len_string_repr */
+
+		NULL,				/* set_value */
+		NULL,				/* set_value_integer */
+		set_integer64,			/* set_value_integer64 */
+		NULL,				/* set_value_floating */
+
+		NULL,				/* get_value */
+		NULL,				/* get_value_integer */
+		get_integer64,			/* get_value_integer64 */
+		NULL,				/* get_value_floating */
+
+		cmp_eq64,
+		cmp_ne64,
+		u_cmp_gt64,
+		u_cmp_ge64,
+		u_cmp_lt64,
+		u_cmp_le64,
+		cmp_bitwise_and64,
+		NULL,				/* cmp_contains */
+		NULL,				/* cmp_matches */
+
+		NULL,
+		NULL,
+	};
 	static ftype_t int8_type = {
 		"FT_INT8",			/* name */
 		"signed, 1 byte",		/* pretty_name */
@@ -387,10 +566,12 @@
 
 		NULL,				/* set_value */
 		set_integer,			/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		NULL,				/* get_value */
 		get_integer,			/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */
 
 		cmp_eq,
@@ -419,10 +600,12 @@
 
 		NULL,				/* set_value */
 		set_integer,			/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		NULL,				/* get_value */
 		get_integer,			/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */
 
 		cmp_eq,
@@ -451,10 +634,12 @@
 
 		NULL,				/* set_value */
 		set_integer,			/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		NULL,				/* get_value */
 		get_integer,			/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */
 
 		cmp_eq,
@@ -483,10 +668,12 @@
 
 		NULL,				/* set_value */
 		set_integer,			/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		NULL,				/* get_value */
 		get_integer,			/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */
 
 		cmp_eq,
@@ -502,6 +689,40 @@
 		NULL,				/* len */
 		NULL,				/* slice */
 	};
+	static ftype_t int64_type = {
+		"FT_INT64",			/* name */
+		"signed, 8 bytes",		/* pretty_name */
+		8,				/* wire_size */
+		int64_fvalue_new,		/* new_value */
+		NULL,				/* free_value */
+		val64_from_unparsed,		/* val_from_unparsed */
+		NULL,				/* val_from_string */
+		NULL,				/* val_to_string_repr */
+		NULL,				/* len_string_repr */
+
+		NULL,				/* set_value */
+		NULL,				/* set_value_integer */
+		set_integer64,			/* set_value_integer64 */
+		NULL,				/* set_value_floating */
+
+		NULL,				/* get_value */
+		NULL,				/* get_value_integer */
+		get_integer64,			/* get_value_integer64 */
+		NULL,				/* get_value_floating */
+
+		cmp_eq64,
+		cmp_ne64,
+		s_cmp_gt64,
+		s_cmp_ge64,
+		s_cmp_lt64,
+		s_cmp_le64,
+		cmp_bitwise_and64,
+		NULL,				/* cmp_contains */
+		NULL,				/* cmp_matches */
+
+		NULL,
+		NULL,
+	};
 	static ftype_t boolean_type = {
 		"FT_BOOLEAN",			/* name */
 		"Boolean",			/* pretty_name */
@@ -515,10 +736,12 @@
 
 		NULL,				/* set_value */
 		set_integer,			/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		NULL,				/* get_value */
 		get_integer,			/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */
 
 		bool_eq,			/* cmp_eq */
@@ -548,10 +771,12 @@
 
 		NULL,				/* set_value */
 		set_integer,			/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		NULL,				/* get_value */
 		get_integer,			/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */
 
 		cmp_eq,
@@ -581,10 +806,12 @@
 
 		NULL,				/* set_value */
 		set_integer,			/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		NULL,				/* get_value */
 		get_integer,			/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */
 
 		cmp_eq,
@@ -605,10 +832,12 @@
 	ftype_register(FT_UINT16, &uint16_type);
 	ftype_register(FT_UINT24, &uint24_type);
 	ftype_register(FT_UINT32, &uint32_type);
+	ftype_register(FT_UINT64, &uint64_type);
 	ftype_register(FT_INT8, &int8_type);
 	ftype_register(FT_INT16, &int16_type);
 	ftype_register(FT_INT24, &int24_type);
 	ftype_register(FT_INT32, &int32_type);
+	ftype_register(FT_INT64, &int64_type);
 	ftype_register(FT_BOOLEAN, &boolean_type);
 	ftype_register(FT_IPXNET, &ipxnet_type);
 	ftype_register(FT_FRAMENUM, &framenum_type);
diff -urN ethereal-0.10.6/epan/ftypes/ftype-ipv4.c ethereal-0.10.7/epan/ftypes/ftype-ipv4.c
--- ethereal-0.10.6/epan/ftypes/ftype-ipv4.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/ftypes/ftype-ipv4.c	2004-10-20 17:35:04.000000000 -0500
@@ -1,5 +1,5 @@
 /*
- * $Id: ftype-ipv4.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: ftype-ipv4.c 11796 2004-08-22 00:31:58Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -199,23 +199,25 @@
 {
 
 	static ftype_t ipv4_type = {
-		"FT_IPv4",
-		"IPv4 address",
-		4,
-		NULL,
-		NULL,
+		"FT_IPv4",			/* name */
+		"IPv4 address",			/* pretty_name */
+		4,				/* wire_size */
+		NULL,				/* new_value */
+		NULL,				/* free_value */
 		val_from_unparsed,		/* val_from_unparsed */
 		NULL,				/* val_from_string */
 		val_to_repr,			/* val_to_string_repr */
 		val_repr_len,			/* len_string_repr */
 
-		NULL,
-		set_integer,
-		NULL,
-
-		value_get,
-		NULL,
-		NULL,
+		NULL,				/* set_value */
+		set_integer,			/* set_value_integer */
+		NULL,				/* set_value_integer64 */
+		NULL,				/* set_value_floating */
+
+		value_get,			/* get_value */
+		NULL,				/* get_value_integer */
+		NULL,				/* get_value_integer64 */
+		NULL,				/* get_value_floating */
 
 		cmp_eq,
 		cmp_ne,
diff -urN ethereal-0.10.6/epan/ftypes/ftype-none.c ethereal-0.10.7/epan/ftypes/ftype-none.c
--- ethereal-0.10.6/epan/ftypes/ftype-none.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/ftypes/ftype-none.c	2004-10-20 17:35:03.000000000 -0500
@@ -1,11 +1,10 @@
 /*
- * $Id: ftype-none.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: ftype-none.c 11796 2004-08-22 00:31:58Z guy $
  *
  * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@zing.org>
+ * By Gerald Combs <gerald@ethereal.com>
  * Copyright 2001 Gerald Combs
  *
- *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
@@ -33,23 +32,25 @@
 {
 
 	static ftype_t none_type = {
-		"FT_NONE",
-		"label",
-		0,
-		NULL,
-		NULL,
-		NULL,
-		NULL,
+		"FT_NONE",			/* name */
+		"label",			/* pretty_name */
+		0,				/* wire_size */
+		NULL,				/* new_value */
+		NULL,				/* free_value */
+		NULL,				/* val_from_unparsed */
+		NULL,				/* val_from_string */
 		NULL,				/* val_to_string_repr */
 		NULL,				/* len_string_repr */
 
-		NULL,
-		NULL,
-		NULL,
-
-		NULL,
-		NULL,
-		NULL,
+		NULL,				/* set_value */
+		NULL,				/* set_value_integer */
+		NULL,				/* set_value_integer64 */
+		NULL,				/* set_value_floating */
+
+		NULL,				/* get_value */
+		NULL,				/* get_value_integer */
+		NULL,				/* get_value_integer64 */
+		NULL,				/* get_value_floating */
 
 		NULL,				/* cmp_eq */
 		NULL,				/* cmp_ne */
diff -urN ethereal-0.10.6/epan/ftypes/ftype-pcre.c ethereal-0.10.7/epan/ftypes/ftype-pcre.c
--- ethereal-0.10.6/epan/ftypes/ftype-pcre.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/ftypes/ftype-pcre.c	2004-10-20 17:35:03.000000000 -0500
@@ -1,5 +1,5 @@
 /*
- * $Id: ftype-pcre.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: ftype-pcre.c 11869 2004-09-01 07:07:23Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -160,36 +160,38 @@
 ftype_register_pcre(void)
 {
 	static ftype_t pcre_type = {
-		"FT_PCRE",
-		"Compiled Perl-Compatible Regular Expression object",
-		0,					/* wire_size */
+		"FT_PCRE",		/* name */
+		"Compiled Perl-Compatible Regular Expression object", /* pretty_name */
+		0,			/* wire_size */
 		pcre_fvalue_new,	/* new_value */
 		pcre_fvalue_free,	/* free_value */
 		val_from_unparsed,	/* val_from_unparsed */
 		val_from_string,	/* val_from_string */
-		NULL,				/* val_to_string_repr */
-		NULL,				/* len_string_repr */
+		NULL,			/* val_to_string_repr */
+		NULL,			/* len_string_repr */
 
 		pcre_fvalue_set,	/* set_value */
-		NULL,				/* set_value_integer */
-		NULL,				/* set_value_floating */
+		NULL,			/* set_value_integer */
+		NULL,			/* set_value_integer64 */
+		NULL,			/* set_value_floating */
 
 		pcre_fvalue_get,	/* get_value */
-		NULL,				/* get_value_integer */
-		NULL,				/* get_value_floating */
+		NULL,			/* get_value_integer */
+		NULL,			/* get_value_integer64 */
+		NULL,			/* get_value_floating */
+
+		NULL,			/* cmp_eq */
+		NULL,			/* cmp_ne */
+		NULL,			/* cmp_gt */
+		NULL,			/* cmp_ge */
+		NULL,			/* cmp_lt */
+		NULL,			/* cmp_le */
+		NULL,			/* cmp_bitwise_and */
+		NULL,			/* cmp_contains */
+		NULL,			/* cmp_matches */
 
-		NULL,				/* cmp_eq */
-		NULL,				/* cmp_ne */
-		NULL,				/* cmp_gt */
-		NULL,				/* cmp_ge */
-		NULL,				/* cmp_lt */
-		NULL,				/* cmp_le */
-		NULL,				/* cmp_bitwise_and */
-		NULL,				/* cmp_contains */
-		NULL,				/* cmp_matches */
-
-		NULL,				/* len */
-		NULL,				/* slice */
+		NULL,			/* len */
+		NULL,			/* slice */
 	};
 	ftype_register(FT_PCRE, &pcre_type);
 }
@@ -200,9 +202,9 @@
 ftype_register_pcre(void)
 {
 	static ftype_t pcre_type = {
-		"FT_PCRE",
-		"Compiled Perl-Compatible Regular Expression object",
-		0,					/* wire_size */
+		"FT_PCRE",			/* name */
+		"Compiled Perl-Compatible Regular Expression object", /* pretty_name */
+		0,				/* wire_size */
 		NULL,				/* new_value */
 		NULL,				/* free_value */
 		NULL,				/* val_from_unparsed */
@@ -212,10 +214,12 @@
 
 		NULL,				/* set_value */
 		NULL,				/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		NULL,				/* get_value */
 		NULL,				/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */ 
 
 		NULL,				/* cmp_eq */
diff -urN ethereal-0.10.6/epan/ftypes/ftype-string.c ethereal-0.10.7/epan/ftypes/ftype-string.c
--- ethereal-0.10.6/epan/ftypes/ftype-string.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/ftypes/ftype-string.c	2004-10-20 17:35:04.000000000 -0500
@@ -1,5 +1,5 @@
 /*
- * $Id: ftype-string.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: ftype-string.c 11796 2004-08-22 00:31:58Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -312,10 +312,12 @@
 
 		string_fvalue_set,		/* set_value */
 		NULL,				/* set_value_integer */
+		NULL,				/* set_value_integer64 */
 		NULL,				/* set_value_floating */
 
 		value_get,			/* get_value */
 		NULL,				/* get_value_integer */
+		NULL,				/* get_value_integer64 */
 		NULL,				/* get_value_floating */
 
 		cmp_eq,
@@ -332,23 +334,25 @@
 		slice,
 	};
 	static ftype_t stringz_type = {
-		"FT_STRINGZ",
-		"character string",
-		0,
-		string_fvalue_new,
-		string_fvalue_free,
+		"FT_STRINGZ",			/* name */
+		"character string",		/* pretty name */
+		0,				/* wire_size */
+		string_fvalue_new,		/* new_value */
+		string_fvalue_free,		/* free_value */
 		val_from_unparsed,		/* val_from_unparsed */
 		val_from_string,		/* val_from_string */
 		NULL,				/* val_to_string_repr */
 		NULL,				/* len_string_repr */
 
-		string_fvalue_set,
-		NULL,
-		NULL,
-
-		value_get,
-		NULL,
-		NULL,
+		string_fvalue_set,		/* set_value */
+		NULL,				/* set_value_integer */
+		NULL,				/* set_value_integer64 */
+		NULL,				/* set_value_floating */
+
+		value_get,			/* get_value */
+		NULL,				/* get_value_integer */
+		NULL,				/* get_value_integer64 */
+		NULL,				/* get_value_floating */
 
 		cmp_eq,
 		cmp_ne,
@@ -364,23 +368,25 @@
 		slice,
 	};
 	static ftype_t uint_string_type = {
-		"FT_UINT_STRING",
-		"character string",
-		0,
-		string_fvalue_new,
-		string_fvalue_free,
+		"FT_UINT_STRING",		/* name */
+		"character string",		/* pretty_name */
+		0,				/* wire_size */
+		string_fvalue_new,		/* new_value */
+		string_fvalue_free,		/* free_value */
 		val_from_unparsed,		/* val_from_unparsed */
 		val_from_string,		/* val_from_string */
 		NULL,				/* val_to_string_repr */
 		NULL,				/* len_string_repr */
 
-		string_fvalue_set,
-		NULL,
-		NULL,
-
-		value_get,
-		NULL,
-		NULL,
+		string_fvalue_set,		/* set_value */
+		NULL,				/* set_value_integer */
+		NULL,				/* set_value_integer64 */
+		NULL,				/* set_value_floating */
+
+		value_get,			/* get_value */
+		NULL,				/* get_value_integer */
+		NULL,				/* get_value_integer64 */
+		NULL,				/* get_value_floating */
 
 		cmp_eq,
 		cmp_ne,
diff -urN ethereal-0.10.6/epan/ftypes/ftype-time.c ethereal-0.10.7/epan/ftypes/ftype-time.c
--- ethereal-0.10.6/epan/ftypes/ftype-time.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/ftypes/ftype-time.c	2004-10-20 17:35:03.000000000 -0500
@@ -1,5 +1,5 @@
 /*
- * $Id: ftype-time.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: ftype-time.c 11796 2004-08-22 00:31:58Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -338,23 +338,25 @@
 {
 
 	static ftype_t abstime_type = {
-		"FT_ABSOLUTE_TIME",
-		"date/time",
-		0,
-		time_fvalue_new,
-		NULL,
+		"FT_ABSOLUTE_TIME",		/* name */
+		"date/time",			/* pretty_name */
+		0,				/* wire_size */
+		time_fvalue_new,		/* new_value */
+		NULL,				/* free_value */
 		absolute_val_from_unparsed,	/* val_from_unparsed */
 		absolute_val_from_string,	/* val_from_string */
 		absolute_val_to_repr,		/* val_to_string_repr */
 		absolute_val_repr_len,		/* len_string_repr */
 
-		time_fvalue_set,
-		NULL,
-		NULL,
-
-		value_get,
-		NULL,
-		NULL,
+		time_fvalue_set,		/* set_value */
+		NULL,				/* set_value_integer */
+		NULL,				/* set_value_integer64 */
+		NULL,				/* set_value_floating */
+
+		value_get,			/* get_value */
+		NULL,				/* get_value_integer */
+		NULL,				/* get_value_integer64 */
+		NULL,				/* get_value_floating */
 
 		cmp_eq,
 		cmp_ne,
@@ -370,23 +372,25 @@
 		NULL
 	};
 	static ftype_t reltime_type = {
-		"FT_RELATIVE_TIME",
-		"time offset",
-		0,
-		time_fvalue_new,
-		NULL,
+		"FT_RELATIVE_TIME",		/* name */
+		"time offset",			/* pretty_name */
+		0,				/* wire_size */
+		time_fvalue_new,		/* new_value */
+		NULL,				/* free_value */
 		relative_val_from_unparsed,	/* val_from_unparsed */
 		NULL,				/* val_from_string */
 		relative_val_to_repr,		/* val_to_string_repr */
 		relative_val_repr_len,		/* len_string_repr */
 
-		time_fvalue_set,
-		NULL,
-		NULL,
-
-		value_get,
-		NULL,
-		NULL,
+		time_fvalue_set,		/* set_value */
+		NULL,				/* set_value_integer */
+		NULL,				/* set_value_integer64 */
+		NULL,				/* set_value_floating */
+
+		value_get,			/* get_value */
+		NULL,				/* get_value_integer */
+		NULL,				/* get_value_integer64 */
+		NULL,				/* get_value_floating */
 
 		cmp_eq,
 		cmp_ne,
diff -urN ethereal-0.10.6/epan/ftypes/ftype-tvbuff.c ethereal-0.10.7/epan/ftypes/ftype-tvbuff.c
--- ethereal-0.10.6/epan/ftypes/ftype-tvbuff.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/ftypes/ftype-tvbuff.c	2004-10-20 17:35:03.000000000 -0500
@@ -1,5 +1,5 @@
 /*
- * $Id: ftype-tvbuff.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: ftype-tvbuff.c 11796 2004-08-22 00:31:58Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -234,13 +234,15 @@
 		NULL,				/* val_to_string_repr */
 		NULL,				/* len_string_repr */
 
-		value_set,
-		NULL,
-		NULL,
-
-		value_get,
-		NULL,
-		NULL,
+		value_set,			/* set_value */
+		NULL,				/* set_value_integer */
+		NULL,				/* set_value_integer64 */
+		NULL,				/* set_value_floating */
+
+		value_get,			/* get_value */
+		NULL,				/* get_value_integer */
+		NULL,				/* get_value_integer64 */
+		NULL,				/* get_value_floating */
 
 
 		/* TODO - tvb's *can* do 'eq', etc. */
diff -urN ethereal-0.10.6/epan/ftypes/ftypes.c ethereal-0.10.7/epan/ftypes/ftypes.c
--- ethereal-0.10.6/epan/ftypes/ftypes.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/ftypes/ftypes.c	2004-10-20 17:35:04.000000000 -0500
@@ -1,5 +1,5 @@
 /*
- * $Id: ftypes.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: ftypes.c 11796 2004-08-22 00:31:58Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -428,6 +428,13 @@
 }
 
 void
+fvalue_set_integer64(fvalue_t *fv, guint64 value)
+{
+	g_assert(fv->ftype->set_value_integer64);
+	fv->ftype->set_value_integer64(fv, value);
+}
+
+void
 fvalue_set_floating(fvalue_t *fv, gdouble value)
 {
 	g_assert(fv->ftype->set_value_floating);
@@ -449,6 +456,13 @@
 	return fv->ftype->get_value_integer(fv);
 }
 
+guint64
+fvalue_get_integer64(fvalue_t *fv)
+{
+	g_assert(fv->ftype->get_value_integer64);
+	return fv->ftype->get_value_integer64(fv);
+}
+
 double
 fvalue_get_floating(fvalue_t *fv)
 {
diff -urN ethereal-0.10.6/epan/ftypes/ftypes.h ethereal-0.10.7/epan/ftypes/ftypes.h
--- ethereal-0.10.6/epan/ftypes/ftypes.h	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/ftypes/ftypes.h	2004-10-20 17:35:03.000000000 -0500
@@ -1,7 +1,7 @@
 /* ftypes.h
  * Definitions for field types
  *
- * $Id: ftypes.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: ftypes.h 12171 2004-10-01 12:31:52Z jmayer $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -147,6 +147,7 @@
 		/* Put a few basic types in here */
 		gpointer	pointer;
 		guint32		integer;
+		guint64		integer64;
 		gdouble		floating;
 		gchar		*string;
 		guchar		*ustring;
@@ -177,10 +178,12 @@
 
 typedef void (*FvalueSetFunc)(fvalue_t*, gpointer, gboolean);
 typedef void (*FvalueSetIntegerFunc)(fvalue_t*, guint32);
+typedef void (*FvalueSetInteger64Func)(fvalue_t*, guint64);
 typedef void (*FvalueSetFloatingFunc)(fvalue_t*, gdouble);
 
 typedef gpointer (*FvalueGetFunc)(fvalue_t*);
 typedef guint32 (*FvalueGetIntegerFunc)(fvalue_t*);
+typedef guint64 (*FvalueGetInteger64Func)(fvalue_t*);
 typedef double (*FvalueGetFloatingFunc)(fvalue_t*);
 
 typedef gboolean (*FvalueCmp)(fvalue_t*, fvalue_t*);
@@ -202,11 +205,13 @@
 	/* could be union */
 	FvalueSetFunc		set_value;
 	FvalueSetIntegerFunc	set_value_integer;
+	FvalueSetInteger64Func	set_value_integer64;
 	FvalueSetFloatingFunc	set_value_floating;
 
 	/* could be union */
 	FvalueGetFunc		get_value;
 	FvalueGetIntegerFunc	get_value_integer;
+	FvalueGetInteger64Func	get_value_integer64;
 	FvalueGetFloatingFunc	get_value_floating;
 
 	FvalueCmp		cmp_eq;
@@ -289,6 +294,9 @@
 fvalue_set_integer(fvalue_t *fv, guint32 value);
 
 void
+fvalue_set_integer64(fvalue_t *fv, guint64 value);
+
+void
 fvalue_set_floating(fvalue_t *fv, gdouble value);
 
 gpointer
@@ -297,6 +305,9 @@
 guint32
 fvalue_get_integer(fvalue_t *fv);
 
+guint64
+fvalue_get_integer64(fvalue_t *fv);
+
 double
 fvalue_get_floating(fvalue_t *fv);
 
@@ -331,6 +342,6 @@
 fvalue_length(fvalue_t *fv);
 
 fvalue_t*
-fvalue_slice(fvalue_t *fv, drange *drange);
+fvalue_slice(fvalue_t *fv, drange *dr);
 
 #endif /* ftypes.h */
diff -urN ethereal-0.10.6/epan/g_ascii_strtoull.c ethereal-0.10.7/epan/g_ascii_strtoull.c
--- ethereal-0.10.6/epan/g_ascii_strtoull.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/g_ascii_strtoull.c	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,197 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+
+/*
+ * $Id: g_ascii_strtoull.c 11889 2004-09-03 18:14:00Z guy $
+ *
+ * "g_ascii_strtoull()" extracted from GLib 2.4.5, for use with GLibs
+ * that don't have it (e.g., GLib 1.2[.x]).
+ */
+
+/*
+ * MT safe
+ */
+
+#include <errno.h>
+
+#include <glib.h>
+
+#include "g_ascii_strtoull.h"
+
+#ifndef G_MAXUINT64
+#define G_MAXUINT64	((guint64)G_GINT64_CONSTANT(0xFFFFFFFFFFFFFFFFU))
+#endif
+
+/**
+ * g_ascii_strtoull:
+ * @nptr:    the string to convert to a numeric value.
+ * @endptr:  if non-%NULL, it returns the character after
+ *           the last character used in the conversion.
+ * @base:    to be used for the conversion, 2..36 or 0
+ *
+ * Converts a string to a #guint64 value.
+ * This function behaves like the standard strtoull() function
+ * does in the C locale. It does this without actually
+ * changing the current locale, since that would not be
+ * thread-safe.
+ *
+ * This function is typically used when reading configuration
+ * files or other non-user input that should be locale independent.
+ * To handle input from the user you should normally use the
+ * locale-sensitive system strtoull() function.
+ *
+ * If the correct value would cause overflow, %G_MAXUINT64
+ * is returned, and %ERANGE is stored in %errno.
+ *
+ * Return value: the #guint64 value.
+ *
+ * Since: 2.2
+ **/
+guint64
+g_ascii_strtoull (const gchar *nptr,
+		  gchar      **endptr,
+		  guint        base)
+{
+  /* this code is based on on the strtol(3) code from GNU libc released under
+   * the GNU Lesser General Public License.
+   *
+   * Copyright (C) 1991,92,94,95,96,97,98,99,2000,01,02
+   *        Free Software Foundation, Inc.
+   */
+#define ISSPACE(c)		((c) == ' ' || (c) == '\f' || (c) == '\n' || \
+				 (c) == '\r' || (c) == '\t' || (c) == '\v')
+#define ISUPPER(c)		((c) >= 'A' && (c) <= 'Z')
+#define ISLOWER(c)		((c) >= 'a' && (c) <= 'z')
+#define ISALPHA(c)		(ISUPPER (c) || ISLOWER (c))
+#define	TOUPPER(c)		(ISLOWER (c) ? (c) - 'a' + 'A' : (c))
+#define	TOLOWER(c)		(ISUPPER (c) ? (c) - 'A' + 'a' : (c))
+  gboolean negative, overflow;
+  guint64 cutoff;
+  guint64 cutlim;
+  guint64 ui64;
+  const gchar *s, *save;
+  guchar c;
+  
+  if (base == 1 || base > 36)
+    {
+      errno = EINVAL;
+      return 0;
+    }
+  
+  save = s = nptr;
+  
+  /* Skip white space.  */
+  while (ISSPACE (*s))
+    ++s;
+  if (!*s)
+    goto noconv;
+  
+  /* Check for a sign.  */
+  negative = FALSE;
+  if (*s == '-')
+    {
+      negative = TRUE;
+      ++s;
+    }
+  else if (*s == '+')
+    ++s;
+  
+  /* Recognize number prefix and if BASE is zero, figure it out ourselves.  */
+  if (*s == '0')
+    {
+      if ((base == 0 || base == 16) && TOUPPER (s[1]) == 'X')
+	{
+	  s += 2;
+	  base = 16;
+	}
+      else if (base == 0)
+	base = 8;
+    }
+  else if (base == 0)
+    base = 10;
+  
+  /* Save the pointer so we can check later if anything happened.  */
+  save = s;
+  cutoff = G_MAXUINT64 / base;
+  cutlim = G_MAXUINT64 % base;
+  
+  overflow = FALSE;
+  ui64 = 0;
+  c = *s;
+  for (; c; c = *++s)
+    {
+      if (c >= '0' && c <= '9')
+	c -= '0';
+      else if (ISALPHA (c))
+	c = TOUPPER (c) - 'A' + 10;
+      else
+	break;
+      if (c >= base)
+	break;
+      /* Check for overflow.  */
+      if (ui64 > cutoff || (ui64 == cutoff && c > cutlim))
+	overflow = TRUE;
+      else
+	{
+	  ui64 *= base;
+	  ui64 += c;
+	}
+    }
+  
+  /* Check if anything actually happened.  */
+  if (s == save)
+    goto noconv;
+  
+  /* Store in ENDPTR the address of one character
+     past the last character we converted.  */
+  if (endptr)
+    *endptr = (gchar*) s;
+  
+  if (overflow)
+    {
+      errno = ERANGE;
+      return G_MAXUINT64;
+    }
+  
+  /* Return the result of the appropriate sign.  */
+  return negative ? -ui64 : ui64;
+  
+ noconv:
+  /* We must handle a special case here: the base is 0 or 16 and the
+     first two characters are '0' and 'x', but the rest are no
+     hexadecimal digits.  This is no error case.  We return 0 and
+     ENDPTR points to the `x`.  */
+  if (endptr)
+    {
+      if (save - nptr >= 2 && TOUPPER (save[-1]) == 'X'
+	  && save[-2] == '0')
+	*endptr = (gchar*) &save[-1];
+      else
+	/*  There was no number to convert.  */
+	*endptr = (gchar*) nptr;
+    }
+  return 0;
+}
diff -urN ethereal-0.10.6/epan/g_ascii_strtoull.h ethereal-0.10.7/epan/g_ascii_strtoull.h
--- ethereal-0.10.6/epan/g_ascii_strtoull.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/g_ascii_strtoull.h	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,15 @@
+/*
+ * $Id: g_ascii_strtoull.h 11889 2004-09-03 18:14:00Z guy $
+ *
+ * "g_ascii_strtoull()" extracted from GLib 2.4.5, for use with GLibs
+ * that don't have it (e.g., GLib 1.2[.x]).
+ */
+
+#ifndef __ETHEREAL_G_ASCII_STRTOULL_H__
+#define __ETHEREAL_G_ASCII_STRTOULL_H__
+
+extern guint64 g_ascii_strtoull (const gchar *nptr,
+				 gchar      **endptr,
+				 guint        base);
+
+#endif
diff -urN ethereal-0.10.6/epan/in_cksum.c ethereal-0.10.7/epan/in_cksum.c
--- ethereal-0.10.6/epan/in_cksum.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/in_cksum.c	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,201 @@
+/* in_cksum.c
+ * 4.4-Lite-2 Internet checksum routine, modified to take a vector of
+ * pointers/lengths giving the pieces to be checksummed.
+ *
+ * $Id: in_cksum.c 12117 2004-09-28 00:06:32Z guy $
+ */
+
+/*
+ * Copyright (c) 1988, 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)in_cksum.c	8.1 (Berkeley) 6/10/93
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include <epan/in_cksum.h>
+
+/*
+ * Checksum routine for Internet Protocol family headers (Portable Version).
+ *
+ * This routine is very heavily used in the network
+ * code and should be modified for each CPU to be as fast as possible.
+ */
+
+#define ADDCARRY(x)  (x > 65535 ? x -= 65535 : x)
+#define REDUCE {l_util.l = sum; sum = l_util.s[0] + l_util.s[1]; ADDCARRY(sum);}
+
+int
+in_cksum(const vec_t *vec, int veclen)
+{
+	register const guint16 *w;
+	register int sum = 0;
+	register int mlen = 0;
+	int byte_swapped = 0;
+
+	union {
+		guint8	c[2];
+		guint16	s;
+	} s_util;
+	union {
+		guint16 s[2];
+		guint32	l;
+	} l_util;
+
+	for (; veclen != 0; vec++, veclen--) {
+		if (vec->len == 0)
+			continue;
+		w = (const guint16 *)vec->ptr;
+		if (mlen == -1) {
+			/*
+			 * The first byte of this chunk is the continuation
+			 * of a word spanning between this chunk and the
+			 * last chunk.
+			 *
+			 * s_util.c[0] is already saved when scanning previous
+			 * chunk.
+			 */
+			s_util.c[1] = *(const guint8 *)w;
+			sum += s_util.s;
+			w = (const guint16 *)((const guint8 *)w + 1);
+			mlen = vec->len - 1;
+		} else
+			mlen = vec->len;
+		/*
+		 * Force to even boundary.
+		 */
+		if ((1 & (unsigned long) w) && (mlen > 0)) {
+			REDUCE;
+			sum <<= 8;
+			s_util.c[0] = *(const guint8 *)w;
+			w = (const guint16 *)((const guint8 *)w + 1);
+			mlen--;
+			byte_swapped = 1;
+		}
+		/*
+		 * Unroll the loop to make overhead from
+		 * branches &c small.
+		 */
+		while ((mlen -= 32) >= 0) {
+			sum += w[0]; sum += w[1]; sum += w[2]; sum += w[3];
+			sum += w[4]; sum += w[5]; sum += w[6]; sum += w[7];
+			sum += w[8]; sum += w[9]; sum += w[10]; sum += w[11];
+			sum += w[12]; sum += w[13]; sum += w[14]; sum += w[15];
+			w += 16;
+		}
+		mlen += 32;
+		while ((mlen -= 8) >= 0) {
+			sum += w[0]; sum += w[1]; sum += w[2]; sum += w[3];
+			w += 4;
+		}
+		mlen += 8;
+		if (mlen == 0 && byte_swapped == 0)
+			continue;
+		REDUCE;
+		while ((mlen -= 2) >= 0) {
+			sum += *w++;
+		}
+		if (byte_swapped) {
+			REDUCE;
+			sum <<= 8;
+			byte_swapped = 0;
+			if (mlen == -1) {
+				s_util.c[1] = *(const guint8 *)w;
+				sum += s_util.s;
+				mlen = 0;
+			} else
+				mlen = -1;
+		} else if (mlen == -1)
+			s_util.c[0] = *(const guint8 *)w;
+	}
+	if (mlen == -1) {
+		/* The last mbuf has odd # of bytes. Follow the
+		   standard (the odd byte may be shifted left by 8 bits
+		   or not as determined by endian-ness of the machine) */
+		s_util.c[1] = 0;
+		sum += s_util.s;
+	}
+	REDUCE;
+	return (~sum & 0xffff);
+}
+
+/*
+ * Given the host-byte-order value of the checksum field in a packet
+ * header, and the network-byte-order computed checksum of the data
+ * that the checksum covers (including the checksum itself), compute
+ * what the checksum field *should* have been.
+ */
+guint16
+in_cksum_shouldbe(guint16 sum, guint16 computed_sum)
+{
+	guint32 shouldbe;
+
+	/*
+	 * The value that should have gone into the checksum field
+	 * is the negative of the value gotten by summing up everything
+	 * *but* the checksum field.
+	 *
+	 * We can compute that by subtracting the value of the checksum
+	 * field from the sum of all the data in the packet, and then
+	 * computing the negative of that value.
+	 *
+	 * "sum" is the value of the checksum field, and "computed_sum"
+	 * is the negative of the sum of all the data in the packets,
+	 * so that's -(-computed_sum - sum), or (sum + computed_sum).
+	 *
+	 * All the arithmetic in question is one's complement, so the
+	 * addition must include an end-around carry; we do this by
+	 * doing the arithmetic in 32 bits (with no sign-extension),
+	 * and then adding the upper 16 bits of the sum, which contain
+	 * the carry, to the lower 16 bits of the sum, and then do it
+	 * again in case *that* sum produced a carry.
+	 *
+	 * As RFC 1071 notes, the checksum can be computed without
+	 * byte-swapping the 16-bit words; summing 16-bit words
+	 * on a big-endian machine gives a big-endian checksum, which
+	 * can be directly stuffed into the big-endian checksum fields
+	 * in protocol headers, and summing words on a little-endian
+	 * machine gives a little-endian checksum, which must be
+	 * byte-swapped before being stuffed into a big-endian checksum
+	 * field.
+	 *
+	 * "computed_sum" is a network-byte-order value, so we must put
+	 * it in host byte order before subtracting it from the
+	 * host-byte-order value from the header; the adjusted checksum
+	 * will be in host byte order, which is what we'll return.
+	 */
+	shouldbe = sum;
+	shouldbe += g_ntohs(computed_sum);
+	shouldbe = (shouldbe & 0xFFFF) + (shouldbe >> 16);
+	shouldbe = (shouldbe & 0xFFFF) + (shouldbe >> 16);
+	return shouldbe;
+}
diff -urN ethereal-0.10.6/epan/in_cksum.h ethereal-0.10.7/epan/in_cksum.h
--- ethereal-0.10.6/epan/in_cksum.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/in_cksum.h	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,14 @@
+/* in_cksum.h
+ * Declaration of  Internet checksum routine.
+ *
+ * $Id: in_cksum.h 12117 2004-09-28 00:06:32Z guy $
+ */
+
+typedef struct {
+	const guint8 *ptr;
+	int	len;
+} vec_t;
+
+extern int in_cksum(const vec_t *vec, int veclen);
+
+extern guint16 in_cksum_shouldbe(guint16 sum, guint16 computed_sum);
diff -urN ethereal-0.10.6/epan/int-64bit.c ethereal-0.10.7/epan/int-64bit.c
--- ethereal-0.10.6/epan/int-64bit.c	2004-08-12 17:41:55.000000000 -0500
+++ ethereal-0.10.7/epan/int-64bit.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,551 +0,0 @@
-/* int-64bit.c
- * Routines for handling of 64-bit integers
- * 2001 Ronnie Sahlberg
- *
- * $Id: int-64bit.c 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <string.h>
-#include "int-64bit.h"
-
-/* all functions take the 64bit integer parameter as a
-   pointer to a 64bit integer in network order.
-   that is ptr[0] is the most significant byte and
-   ptr[7] is the least significant byte.
-*/
-
-#define U64STRLEN	21
-
-
-/* this must be signed. if it is not clear why, please dont
-   modify the functions in this file. it will break.
-*/
-static const signed char u64val[64][U64STRLEN] =
-{
-/* 1  */	{ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 2  */	{ 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 3  */	{ 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 4  */	{ 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 5  */	{ 6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 6  */	{ 2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 7  */	{ 4,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 8  */	{ 8,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 9  */	{ 6,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 10 */	{ 2,1,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 11 */	{ 4,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 12 */	{ 8,4,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 13 */	{ 6,9,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 14 */	{ 2,9,1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 15 */	{ 4,8,3,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 16 */	{ 8,6,7,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 17 */	{ 6,3,5,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 18 */	{ 2,7,0,1,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 19 */	{ 4,4,1,2,6,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 20 */	{ 8,8,2,4,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 21 */	{ 6,7,5,8,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 22 */	{ 2,5,1,7,9,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 23 */	{ 4,0,3,4,9,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 24 */	{ 8,0,6,8,8,3,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 25 */	{ 6,1,2,7,7,7,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 26 */	{ 2,3,4,4,5,5,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 27 */	{ 4,6,8,8,0,1,7,6,0,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 28 */	{ 8,2,7,7,1,2,4,3,1,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 29 */	{ 6,5,4,5,3,4,8,6,2,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 30 */	{ 2,1,9,0,7,8,6,3,5,0,0,0,0,0,0,0,0,0,0,0,0 },
-/* 31 */	{ 4,2,8,1,4,7,3,7,0,1,0,0,0,0,0,0,0,0,0,0,0 },
-/* 32 */	{ 8,4,6,3,8,4,7,4,1,2,0,0,0,0,0,0,0,0,0,0,0 },
-/* 33 */	{ 6,9,2,7,6,9,4,9,2,4,0,0,0,0,0,0,0,0,0,0,0 },
-/* 34 */	{ 2,9,5,4,3,9,9,8,5,8,0,0,0,0,0,0,0,0,0,0,0 },
-/* 35 */	{ 4,8,1,9,6,8,9,7,1,7,1,0,0,0,0,0,0,0,0,0,0 },
-/* 36 */	{ 8,6,3,8,3,7,9,5,3,4,3,0,0,0,0,0,0,0,0,0,0 },
-/* 37 */	{ 6,3,7,6,7,4,9,1,7,8,6,0,0,0,0,0,0,0,0,0,0 },
-/* 38 */	{ 2,7,4,3,5,9,8,3,4,7,3,1,0,0,0,0,0,0,0,0,0 },
-/* 39 */	{ 4,4,9,6,0,9,7,7,8,4,7,2,0,0,0,0,0,0,0,0,0 },
-/* 40 */	{ 8,8,8,3,1,8,5,5,7,9,4,5,0,0,0,0,0,0,0,0,0 },
-/* 41 */	{ 6,7,7,7,2,6,1,1,5,9,9,0,1,0,0,0,0,0,0,0,0 },
-/* 42 */	{ 2,5,5,5,5,2,3,2,0,9,9,1,2,0,0,0,0,0,0,0,0 },
-/* 43 */	{ 4,0,1,1,1,5,6,4,0,8,9,3,4,0,0,0,0,0,0,0,0 },
-/* 44 */	{ 8,0,2,2,2,0,3,9,0,6,9,7,8,0,0,0,0,0,0,0,0 },
-/* 45 */	{ 6,1,4,4,4,0,6,8,1,2,9,5,7,1,0,0,0,0,0,0,0 },
-/* 46 */	{ 2,3,8,8,8,0,2,7,3,4,8,1,5,3,0,0,0,0,0,0,0 },
-/* 47 */	{ 4,6,6,7,7,1,4,4,7,8,6,3,0,7,0,0,0,0,0,0,0 },
-/* 48 */	{ 8,2,3,5,5,3,8,8,4,7,3,7,0,4,1,0,0,0,0,0,0 },
-/* 49 */	{ 6,5,6,0,1,7,6,7,9,4,7,4,1,8,2,0,0,0,0,0,0 },
-/* 50 */	{ 2,1,3,1,2,4,3,5,9,9,4,9,2,6,5,0,0,0,0,0,0 },
-/* 51 */	{ 4,2,6,2,4,8,6,0,9,9,9,8,5,2,1,1,0,0,0,0,0 },
-/* 52 */	{ 8,4,2,5,8,6,3,1,8,9,9,7,1,5,2,2,0,0,0,0,0 },
-/* 53 */	{ 6,9,4,0,7,3,7,2,6,9,9,5,3,0,5,4,0,0,0,0,0 },
-/* 54 */	{ 2,9,9,0,4,7,4,5,2,9,9,1,7,0,0,9,0,0,0,0,0 },
-/* 55 */	{ 4,8,9,1,8,4,9,0,5,8,9,3,4,1,0,8,1,0,0,0,0 },
-/* 56 */	{ 8,6,9,3,6,9,8,1,0,7,9,7,8,2,0,6,3,0,0,0,0 },
-/* 57 */	{ 6,3,9,7,2,9,7,3,0,4,9,5,7,5,0,2,7,0,0,0,0 },
-/* 58 */	{ 2,7,8,5,5,8,5,7,0,8,8,1,5,1,1,4,4,1,0,0,0 },
-/* 59 */	{ 4,4,7,1,1,7,1,5,1,6,7,3,0,3,2,8,8,2,0,0,0 },
-/* 60 */	{ 8,8,4,3,2,4,3,0,3,2,5,7,0,6,4,6,7,5,0,0,0 },
-/* 61 */	{ 6,7,9,6,4,8,6,0,6,4,0,5,1,2,9,2,5,1,1,0,0 },
-/* 62 */	{ 2,5,9,3,9,6,3,1,2,9,0,0,3,4,8,5,0,3,2,0,0 },
-/* 63 */	{ 4,0,9,7,8,3,7,2,4,8,1,0,6,8,6,1,1,6,4,0,0 },
-/* 64 */	{ 8,0,8,5,7,7,4,5,8,6,3,0,2,7,3,3,2,2,9,0,0 }
-};
-
-
-/* convert an unsigned  64 bit integer into a string
-   it is important that this function is efficient
-   since it will be used for every 64bit integer in
-   any capture.
-   It is much less important that the inverse: atou64
-   be efficient since it is only called when
-   diplayfilters are entered.
-
-   "neg" should be 1 if the number should have a "-" put in
-   front of it.
-*/
-static char *
-n64toa(const unsigned char *u64ptr, int neg)
-{
-	unsigned char acc[U64STRLEN]; /* accumulator */
-	int i,j,k,pos;
-	static char str[U64STRLEN+1]; /* 1 extra for the sign */
-
-	/* clear out the accumulator */
-	for(i=0;i<U64STRLEN-1;i++){
-		acc[i]=0;
-	}
-
-	pos=0;
-	/* loop over the 8 bytes of the 64bit integer,
-	   lsb to msb */
-	for(i=7;i>=0;i--){
-		/* optimize, most of these bytes will be 0 ?*/
-		if(u64ptr[i]==0){
-			pos+=8;
-		} else {
-			for(j=0;j<8;j++,pos++){
-				if(u64ptr[i]&(1<<j)){
-					for(k=0;k<U64STRLEN-1;k++){
-						acc[k]+=u64val[pos][k];
-					}
-				}
-			}
-		}
-		/* we must handle carries inside this loop
-		   since othevise the signed char in acc will
-		   owerflow/wrap, but we dont need to do it
-		   for every iteration. its enough if we
-		   do it halfway through and at the end
-		   and we will prevent any overflow.
-		*/
-		if((i%4)==0){
-			/* handle carries */
-			for(j=0;j<U64STRLEN-1;j++){
-				if(acc[j]>9){
-					int x;
-					x=acc[j]/10;
-					acc[j+1]+=x;
-					acc[j]-=x*10;
-				}
-			}
-		}
-	}
-
-	/* convert to a string */
-	str[U64STRLEN-1+neg]=0;
-	for(i=0;i<U64STRLEN-1;i++){
-		str[U64STRLEN-2-i+neg]='0'+acc[i];
-	}
-
-	/* skip the initial zeros */
-	for(i=0;i<U64STRLEN-2;i++){
-		if(str[i+neg]>'0'){
-			break;
-		}
-	}
-
-	/* insert the sign */
-	if (neg)
-		str[i] = '-';
-
-	return str+i;
-}
-
-/*
- * Convert an unsigned 64-bit integer into a string, in decimal.
- */
-char *
-u64toa(const unsigned char *u64ptr)
-{
-	/*
-	 * Just use "n64toa()".
-	 */
-	return n64toa(u64ptr, 0);
-}
-
-/*
- * Convert a signed 64-bit integer into a string, in decimal.
- */
-char *
-i64toa(const unsigned char *i64ptr)
-{
-	unsigned char neg[8];
-	int i;
-	int carry;
-	int byte;
-
-	/*
-	 * The bytes of the integer go from msb to lsb, so the
-	 * msb is "i64ptr[0]".
-	 *
-	 * The sign bit, therefore, is "i64ptr[0] & 0x80".
-	 */
-	if (i64ptr[0] & 0x80) {
-		/*
-		 * It's negative - compute the absolute value,
-		 * by taking the two's complement; take the
-		 * one's complement of the low-order byte, add
-		 * 1, take the one's complement of the next byte
-		 * up, add the carry from the previous addition,
-		 * etc.
-		 *
-		 * If it's the maximum negative value, which is
-		 * 0x8000000000000000, this will turn it back
-		 * into 0x8000000000000000, which "n64toa()"
-		 * will handle correctly, reporting the absolute
-		 * value of the maximum negative value;
-		 * thus, we don't have to worry about it.
-		 */
-		carry = 1;
-		for (i = 7; i >= 0; i--) {
-			byte = ((unsigned char)~i64ptr[i]) + carry;
-			neg[i] = byte;
-			if (byte & 0x100)
-				carry = 1;
-			else
-				carry = 0;
-		}
-
-		/*
-		 * Use "n64toa()" on the negative, and tell it to insert
-		 * a "-".
-		 */
-		return n64toa(neg, 1);
-	} else {
-		/*
-		 * It's positive, so just use "n64toa()".
-		 */
-		return n64toa(i64ptr, 0);
-	}
-}
-
-/* like memcmp but compares in reverse */
-static int
-revcmp(const signed char *s1, const signed char *s2, int len)
-{
-	int i;
-
-	for(i=len-1;i>=0;i--){
-		if(s1[i]==s2[i]){
-			continue;
-		}
-		if(s1[i]>s2[i]){
-			return 1;
-		} else {
-			return -1;
-		}
-	}
-	return 0;
-}
-
-/*
- * Convert a string to an unsigned 64-bit integer.
- */
-unsigned char *
-atou64(const char *u64str, unsigned char *u64int)
-{
-	signed char res[U64STRLEN]; /* residual */
-	int i,j,len;
-	const char *strp;
-
-	if(!u64str){
-		return NULL;
-	}
-
-	/* if it is a hex string */
-	if( (u64str[0]=='0')
-	&&  (u64str[1]=='x') ){
-		return htou64(u64str, u64int);
-	}
-
-	/* verify that the string is ok */
-	for(strp=u64str;*strp;strp++){
-		if((*strp>='0')&&(*strp<='9')){
-			continue;
-		}
-		return NULL;
-	}
-
-	/* clear the result vector */
-	for(i=0;i<8;i++){
-		u64int[i]=0;
-	}
-
-	/* clear the residual string and copy the
-	   original to it (subtracting '0')
-	*/
-	for(i=0;i<U64STRLEN;i++){
-		res[i]=0;
-	}
-	while(*u64str=='0'){ /* skip initial blanks */
-		u64str++;
-	}
-	len=strlen(u64str)-1;
-	for(i=0;len>=0;i++,len--){
-		res[i]=u64str[len]-'0';
-	}
-
-	/* go through all bits and subtract their
-	   value */
-	for(i=63;i>=0;i--){
-		if(revcmp(u64val[i], res, U64STRLEN)<=0){
-			u64int[7-(i>>3)]|=(1<<(i&0x07));
-			for(j=0;j<U64STRLEN;j++){
-				res[j]-=u64val[i][j];
-				/*underflow*/
-				if(res[j]<0){
-					res[j]+=10;
-					res[j+1]-=1;
-				}
-			}
-		}
-	}
-
-	return u64int;
-}
-
-/*
- * Convert a string to a signed 64-bit integer.
- */
-unsigned char *
-atoi64(const char *i64str, unsigned char *i64int)
-{
-	int i;
-	int carry;
-	int byte;
-
-	if(!i64str){
-		return NULL;
-	}
-
-	/*
-	 * Does it begin with a minus sign?
-	 */
-	if (i64str[0] == '-') {
-		/*
-		 * Yes - convert the rest of the string to a number...
-		 */
-		if (atou64(&i64str[1], i64int) == NULL) {
-			/*
-			 * We failed.
-			 */
-			return NULL;
-		}
-
-		/*
-		 * ...and then take its negative.
-		 */
-		carry = 1;
-		for (i = 7; i >= 0; i--) {
-			byte = ((unsigned char)~i64int[i]) + carry;
-			i64int[i] = byte;
-			if (byte & 0x100)
-				carry = 1;
-			else
-				carry = 0;
-		}
-		return i64int;
-	} else {
-		/*
-		 * No - just let "atou64()" handle it.
-		 */
-		return atou64(i64str, i64int);
-	}
-}
-
-/*
- * Convert an unsigned 64-bit integer to a string, in hex.
- */
-char *
-u64toh(const unsigned char *u64ptr)
-{
-	static char str[19], *strp;
-	static char ntoh[] = {'0','1','2','3','4','5','6','7',
-		'8','9','a','b','c','d','e','f'};
-	int i;
-
-	str[0]='0';
-	str[1]='x';
-	strp=str+2;
-	for(i=0;i<8;i++){
-		*strp++ = ntoh[u64ptr[i]>>4];
-		*strp++ = ntoh[u64ptr[i]&0x0f];
-	}
-	*strp=0;
-
-	return str;
-}
-
-static unsigned int
-ntoh(unsigned char h)
-{
-	if((h>='0')&&(h<='9')){
-		return h-'0';
-	}
-
-	if((h>='A')&&(h<='F')){
-		return h+10-'A';
-	}
-
-	if((h>='a')&&(h<='f')){
-		return h+10-'a';
-	}
-
-	return 0;
-}
-
-/*
- * Convert a hex string to an unsigned 64-bit integer.
- */
-unsigned char *
-htou64(const char *u64str, unsigned char *u64int)
-{
-	int i,len;
-	char str[16];
-	const char *strp;
-
-	if(!u64str){
-		return NULL;
-	}
-
-	/* verify that the string is ok */
-	if( (u64str[0]!='0')
-	||  (u64str[1]!='x') ){
-		return NULL;
-	}
-
-	for(strp=u64str+2;*strp;strp++){
-		if((*strp>='0')&&(*strp<='9')){
-			continue;
-		}
-		if((*strp>='A')&&(*strp<='F')){
-			continue;
-		}
-		if((*strp>='a')&&(*strp<='f')){
-			continue;
-		}
-		return NULL;
-	}
-
-	/* clear the result vector */
-	for(i=0;i<8;i++){
-		u64int[i]=0;
-	}
-
-	/* get len of input string */
-	for(len=0,strp=u64str+2;len<16;len++,strp++){
-		if((*strp>='0')&&(*strp<='9')){
-			continue;
-		}
-		if((*strp>='A')&&(*strp<='F')){
-			continue;
-		}
-		if((*strp>='a')&&(*strp<='f')){
-			continue;
-		}
-		break;
-	}
-	for(i=0;i<16;i++){
-		str[i]='0';
-	}
-	for(i=0;i<len;i++){
-		str[15-i]=u64str[len+1-i];
-	}
-
-
-	for(i=0;i<8;i++){
-		u64int[i]=(ntoh(str[i*2])<<4)
-			| ntoh(str[1+i*2]);
-	}
-
-	return u64int;
-}
-
-#ifdef TEST_DEBUG
-#include <stdio.h>
-
-int main(void)
-{
-	char i998877665544331[8] =
-	    {0x0, 0x23, 0x7c, 0xbd, 0x4c, 0x49, 0xd5, 0x6f};
-	char iminus9988776655443311[8] =
-	    {0xff, 0xdc, 0x83, 0x42, 0xb3, 0xb6, 0x2a, 0x91};
-	char i9223372036854775807[8] =
-	    {0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-	char iminus1[8] =
-	    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-	char iminus9223372036854775808[8] =
-	    {0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
-	char u9223372036854775808[8] =
-	    {0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
-	char u18446744073709551615[8] =
-	    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-	char u0xaabbccdd00112233[8] =
-	    {0xaa, 0xbb, 0xcc, 0xdd, 0x0, 0x11, 0x22, 0x33};
-	char t[8];
-
-	printf("%s (9988776655443311)\n",i64toa(i998877665544331));
-	printf("%s (-9988776655443311)\n",i64toa(iminus9988776655443311));
-	printf("%s (9223372036854775807)\n",i64toa(i9223372036854775807));
-	printf("%s (-1)\n",i64toa(iminus1));
-	printf("%s (-9223372036854775808)\n",i64toa(iminus9223372036854775808));
-
-	printf("%s (9988776655443311)\n",u64toa(i998877665544331));
-	printf("%s (9223372036854775807)\n",u64toa(i9223372036854775807));
-	printf("%s (9223372036854775808)\n",u64toa(u9223372036854775808));
-	printf("%s (18446744073709551615)\n",u64toa(u18446744073709551615));
-
-	printf("%s (0xaabbccdd00112233)\n",u64toh(u0xaabbccdd00112233));
-
-	printf("%s (55443311)\n",i64toa(atoi64("55443311",t)));
-	printf("%s (-55443311)\n",i64toa(atoi64("-55443311",t)));
-	printf("%s (9988776655443311)\n",i64toa(atoi64("9988776655443311",t)));
-	printf("%s (-9988776655443311)\n",i64toa(atoi64("-9988776655443311",t)));
-	printf("%s (9223372036854775807)\n",i64toa(atoi64("9223372036854775807",t)));
-	printf("%s (-1)\n",i64toa(atoi64("-1",t)));
-	printf("%s (-9223372036854775808)\n",i64toa(atoi64("-9223372036854775808",t)));
-
-	printf("%s (55443311)\n",u64toa(atou64("55443311",t)));
-	printf("%s (0x55443311)\n",u64toh(htou64("0x55443311",t)));
-	return 0;
-}
-#endif
diff -urN ethereal-0.10.6/epan/int-64bit.h ethereal-0.10.7/epan/int-64bit.h
--- ethereal-0.10.6/epan/int-64bit.h	2004-08-12 17:41:55.000000000 -0500
+++ ethereal-0.10.7/epan/int-64bit.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,61 +0,0 @@
-/* int-64bit.h
- * Handling of 64-bit integers
- *
- * $Id: int-64bit.h 11400 2004-07-18 00:24:25Z guy $
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifndef _INT_64BIT_H_
-#define _INT_64BIT_H_
-
-/*
- * Routines to convert between 64-bit integers, represented as
- * arrays of 8 bytes in network byte order (bit-endian), and ASCII strings
- * giving integer values in decimal or hexadecimal.
- */
-
-/*
- * Convert an unsigned 64-bit integer into a string, in decimal.
- */
-extern char *u64toa(const unsigned char *u64ptr);
-
-/*
- * Convert a signed 64-bit integer into a string, in decimal.
- */
-extern char *i64toa(const unsigned char *i64ptr);
-
-/*
- * Convert a string to an unsigned 64-bit integer.
- */
-unsigned char *atou64(const char *u64str, unsigned char *u64int);
-
-/*
- * Convert a string to a signed 64-bit integer.
- */
-unsigned char *atoi64(const char *i64str, unsigned char *i64int);
-
-/*
- * Convert an unsigned 64-bit integer to a string, in hex.
- */
-char *u64toh(const unsigned char *u64ptr);
-
-/*
- * Convert a hex string to an unsigned 64-bit integer.
- */
-unsigned char *htou64(const char *u64str, unsigned char *u64int);
-
-#endif
-
diff -urN ethereal-0.10.6/epan/ipproto.c ethereal-0.10.7/epan/ipproto.c
--- ethereal-0.10.6/epan/ipproto.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/ipproto.c	2004-10-20 17:35:04.000000000 -0500
@@ -0,0 +1,215 @@
+/* ipproto.c
+ * Routines for converting IPv4 protocol/v6 nxthdr field into string
+ *
+ * $Id: ipproto.c 12130 2004-09-29 00:52:45Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#ifdef HAVE_NETDB_H
+# include <netdb.h>
+#endif
+
+#include <glib.h>
+
+#include <epan/ipproto.h>
+#include <epan/packet.h>
+#include <epan/addr_resolv.h>
+#include <epan/dissectors/packet-ip.h>
+
+#ifdef NEED_SNPRINTF_H
+# include "snprintf.h"
+#endif
+
+static const value_string ipproto_val[] = {
+#if 0
+    { IP_PROTO_IP,	"IPv4" },
+#endif
+    { IP_PROTO_HOPOPTS,	"IPv6 hop-by-hop option" },
+    { IP_PROTO_ICMP,	"ICMP" },
+    { IP_PROTO_IGMP,	"IGMP" },
+    { IP_PROTO_GGP,	"GGP" },
+    { IP_PROTO_IPIP,	"IPIP" },
+#if 0
+    { IP_PROTO_IPV4,	"IPv4" },
+#endif
+    { IP_PROTO_STREAM,  "Stream" },
+    { IP_PROTO_TCP,	"TCP" },
+    { IP_PROTO_CBT,     "CBT" },
+    { IP_PROTO_EGP,	"EGP" },
+    { IP_PROTO_IGP,	"IGRP" },
+    { IP_PROTO_BBN_RCC, "BBN RCC" },
+    { IP_PROTO_NVPII,   "Network Voice" },
+    { IP_PROTO_PUP,	"PUP" },
+    { IP_PROTO_ARGUS,   "ARGUS" },
+    { IP_PROTO_EMCON,   "EMCON" },
+    { IP_PROTO_XNET,    "XNET" },
+    { IP_PROTO_CHAOS,   "CHAOS" },
+    { IP_PROTO_UDP,	"UDP" },
+    { IP_PROTO_MUX,     "Multiplex" },
+    { IP_PROTO_DCNMEAS, "DCN Measurement" },
+    { IP_PROTO_HMP,     "Host Monitoring" },
+    { IP_PROTO_PRM,     "Packet radio" },
+    { IP_PROTO_IDP,	"IDP" },
+    { IP_PROTO_TRUNK1,  "Trunk-1" },
+    { IP_PROTO_TRUNK2,  "Trunk-2" },
+    { IP_PROTO_LEAF1,   "Leaf-1" },
+    { IP_PROTO_LEAF2,   "Leaf-2" },
+    { IP_PROTO_RDP,     "Reliable Data" },
+    { IP_PROTO_IRT,     "IRT" },
+    { IP_PROTO_TP,	"ISO TP4" },
+    { IP_PROTO_BULK,    "Bulk Data" },
+    { IP_PROTO_MFE_NSP, "MFE NSP" },
+    { IP_PROTO_MERIT,   "Merit Internodal" },
+    { IP_PROTO_SEP,     "Sequential Exchange" },
+    { IP_PROTO_3PC,     "3rd Party Connect" },
+    { IP_PROTO_IDPR,    "Interdomain routing" },
+    { IP_PROTO_XTP,     "XTP" },
+    { IP_PROTO_DDP,     "Datagram delivery"},
+    { IP_PROTO_CMTP,    "Control Message" },
+    { IP_PROTO_TPPP,    "TP++" },
+    { IP_PROTO_IL,      "IL" },
+    { IP_PROTO_IPV6,	"IPv6" },
+    { IP_PROTO_SDRP,    "Source demand routing" },
+    { IP_PROTO_ROUTING,	"IPv6 routing" },
+    { IP_PROTO_FRAGMENT,"IPv6 fragment" },
+    { IP_PROTO_IDRP,    "IDRP" },
+    { IP_PROTO_RSVP,	"RSVP" },
+    { IP_PROTO_GRE,	"GRE" },
+    { IP_PROTO_MHRP,    "MHRP" },
+    { IP_PROTO_BNA,     "BNA" },
+    { IP_PROTO_ESP,	"ESP" },
+    { IP_PROTO_AH,	"AH" },
+    { IP_PROTO_INSLP,   "INSLP" },
+    { IP_PROTO_SWIPE,   "SWIPE" },
+    { IP_PROTO_NARP,    "NBMA ARP"},
+    { IP_PROTO_TLSP,    "TLSP Kryptonet" },
+    { IP_PROTO_SKIP,    "SKIP" },
+    { IP_PROTO_ICMPV6,	"ICMPv6" },
+    { IP_PROTO_NONE,	"IPv6 no next header" },
+    { IP_PROTO_DSTOPTS,	"IPv6 destination option" },
+    { IP_PROTO_MIPV6_OLD, "Mobile IPv6 (old)" },
+    { IP_PROTO_SATEXPAK,"SATNET EXPAK" },
+    { IP_PROTO_KRYPTOLAN, "Kryptolan" },
+    { IP_PROTO_RVD,     "Remote Virtual Disk" },
+    { IP_PROTO_IPPC,    "IPPC" },
+    { IP_PROTO_SATMON,  "SATNET Monitoring" },
+    { IP_PROTO_VISA,    "VISA" },
+    { IP_PROTO_IPCV,    "IPCV" },
+    { IP_PROTO_CPNX,    "CPNX" },
+    { IP_PROTO_CPHB,    "CPHB" },
+    { IP_PROTO_WSN,     "Wang Span" },
+    { IP_PROTO_PVP,     "Packet Video" },
+    { IP_PROTO_BRSATMON,"Backroom SATNET Mon" },
+    { IP_PROTO_SUNND,   "Sun ND Protocol" },
+    { IP_PROTO_WBMON,   "Wideband Mon" },
+    { IP_PROTO_WBEXPAK, "Wideband Expak" },
+    { IP_PROTO_EON,	"EON" },
+    { IP_PROTO_VMTP,    "VMTP" },
+    { IP_PROTO_SVMTP,   "Secure VMTP" },
+    { IP_PROTO_VINES,	"VINES" },
+    { IP_PROTO_TTP,     "TTP" },
+    { IP_PROTO_NSFNETIGP,"NSFNET IGP" },
+    { IP_PROTO_DGP,     "Dissimilar Gateway" },
+    { IP_PROTO_TCF,     "TCF" },
+    { IP_PROTO_EIGRP,	"EIGRP" },
+    { IP_PROTO_OSPF,	"OSPF IGP" },
+    { IP_PROTO_SPRITE,  "Sprite RPC" },
+    { IP_PROTO_LARP,    "Locus ARP" },
+    { IP_PROTO_MTP,     "Multicast Transport" },
+    { IP_PROTO_AX25,    "AX.25 Frames" },
+    { IP_PROTO_IPINIP,  "IP in IP" },
+    { IP_PROTO_MICP,    "MICP" },
+    { IP_PROTO_SCCCP,   "Semaphore" },
+    { IP_PROTO_ETHERIP, "Ether in IP" },
+    { IP_PROTO_ENCAP,	"ENCAP" },
+    { IP_PROTO_GMTP,    "GMTP" },
+    { IP_PROTO_IFMP,    "Ipsilon Flow" },
+    { IP_PROTO_PNNI,    "PNNI over IP" },
+    { IP_PROTO_PIM,	"PIM" },
+    { IP_PROTO_ARIS,    "ARIS" },
+    { IP_PROTO_SCPS,    "SCPS" },
+    { IP_PROTO_QNX,     "QNX" },
+    { IP_PROTO_AN,      "Active Networks" },
+    { IP_PROTO_IPCOMP,	"IPComp" },
+    { IP_PROTO_SNP,     "Sitara Networks" },
+    { IP_PROTO_COMPAQ,  "Compaq Peer" },
+    { IP_PROTO_IPX,     "IPX IN IP" },
+    { IP_PROTO_VRRP,	"VRRP" },
+    { IP_PROTO_PGM,     "PGM" },
+    { IP_PROTO_L2TP,    "Layer 2 Tunneling" },
+    { IP_PROTO_DDX,     "DDX" },
+    { IP_PROTO_IATP,    "IATP" },
+    { IP_PROTO_STP,     "STP" },
+    { IP_PROTO_SRP,     "SpectraLink" },
+    { IP_PROTO_UTI,     "UTI" },
+    { IP_PROTO_SMP,     "SMP" },
+    { IP_PROTO_SM,      "SM" },
+    { IP_PROTO_PTP,     "PTP" },
+    { IP_PROTO_ISIS,    "ISIS over IP" },
+    { IP_PROTO_FIRE,    "FIRE" },
+    { IP_PROTO_CRTP,    "CRTP" },
+    { IP_PROTO_CRUDP,   "CRUDP" },
+    { IP_PROTO_SSCOPMCE,"SSCOPMCE" },
+    { IP_PROTO_IPLT,    "IPLT" },
+    { IP_PROTO_SPS,     "Secure Packet" },
+    { IP_PROTO_PIPE,    "PIPE" },
+    { IP_PROTO_SCTP,    "SCTP" },
+    { IP_PROTO_FC,      "Fibre Channel" },
+    { IP_PROTO_RSVPE2EI,"RSVP E2EI" },
+    { IP_PROTO_MIPV6,	"Mobile IPv6" },
+    { IP_PROTO_AX4000,	"AX/4000 Testframe" },
+    { IP_PROTO_NCS_HEARTBEAT,"Novell NCS Heartbeat" },
+    { 0,		NULL },
+};
+
+const char *ipprotostr(int proto) {
+    static char buf[128];
+    const char *s;
+#ifdef HAVE_GETPROTOBYNUMBER
+    struct protoent *pe;
+#endif
+
+    if ((s = match_strval(proto, ipproto_val)) != NULL)
+	goto ok;
+
+#ifdef HAVE_GETPROTOBYNUMBER
+    /*
+     * XXX - have another flag for resolving network-layer
+     * protocol names?
+     */
+    if (g_resolv_flags != 0) {
+	pe = getprotobynumber(proto);
+	if (pe) {
+	    s = pe->p_name;
+	    goto ok;
+	}
+    }
+#endif
+
+    s = "Unknown";
+
+ok:
+    snprintf(buf, sizeof(buf), "%s", s);
+    return buf;
+}
diff -urN ethereal-0.10.6/epan/ipproto.h ethereal-0.10.7/epan/ipproto.h
--- ethereal-0.10.6/epan/ipproto.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/ipproto.h	2004-10-20 17:35:04.000000000 -0500
@@ -0,0 +1,187 @@
+/* ipproto.h
+ * Declarations of IP protocol numbers, and of routines for converting
+ * IP protocol numbers into strings.
+ *
+ * $Id: ipproto.h 12130 2004-09-29 00:52:45Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef __IPPROTO_H__
+#define __IPPROTO_H__
+
+/*
+ * IP protocol numbers.
+ */
+#define IP_PROTO_IP		0		/* dummy for IP */
+#define IP_PROTO_HOPOPTS	0		/* IP6 hop-by-hop options - RFC1883 */
+#define IP_PROTO_ICMP		1		/* control message protocol - RFC792 */
+#define IP_PROTO_IGMP		2		/* group mgmt protocol - RFC1112 */
+#define IP_PROTO_GGP		3		/* gateway^2 (deprecated) - RFC823*/
+#define IP_PROTO_IPIP		4		/* IP inside IP - RFC2003*/
+#define IP_PROTO_IPV4		4		/* IP header */
+#define IP_PROTO_STREAM         5               /* Stream - RFC1190, RFC1819 */
+#define IP_PROTO_TCP		6		/* TCP - RFC792 */
+#define IP_PROTO_CBT            7               /* CBT - <A.Ballardie@cs.ucl.ac.uk> */
+#define IP_PROTO_EGP		8		/* exterior gateway protocol - RFC888 */
+#define IP_PROTO_IGP		9               /* any private interior gateway protocol ... */
+#define IP_PROTO_IGRP		9               /* ... and used by Cisco for IGRP */
+#define IP_PROTO_BBN_RCC        10              /* BBN RCC Monitoring */
+#define IP_PROTO_NVPII          11              /* Network Voice Protocol - RFC741 */
+#define IP_PROTO_PUP		12		/* pup */
+#define IP_PROTO_ARGUS          13              /* ARGUS */
+#define IP_PROTO_EMCON          14              /* EMCON */
+#define IP_PROTO_XNET           15              /* Cross net debugger - IEN158 */
+#define IP_PROTO_CHAOS          16              /* CHAOS */
+#define IP_PROTO_UDP		17		/* user datagram protocol - RFC768 */
+#define IP_PROTO_MUX            18              /* multiplexing - IEN90 */
+#define IP_PROTO_DCNMEAS        19              /* DCN Measurement Subsystems */
+#define IP_PROTO_HMP            20              /* Host Monitoring - RFC869 */
+#define IP_PROTO_PRM            21              /* Packet radio measurement */
+#define IP_PROTO_IDP		22		/* xns idp */
+#define IP_PROTO_TRUNK1         23
+#define IP_PROTO_TRUNK2         24
+#define IP_PROTO_LEAF1          25
+#define IP_PROTO_LEAF2          26
+#define IP_PROTO_RDP            27              /* Reliable Data Protocol - RFC908 */
+#define IP_PROTO_IRT            28              /* Internet Reliable Transation - RFC938 */
+#define IP_PROTO_TP		29 		/* tp-4 w/ class negotiation - RFC905 */
+#define IP_PROTO_BULK           30              /* Bulk Data Transfer Protocol - RFC969 */
+#define IP_PROTO_MFE_NSP        31              /* MFE Network Services Protocol */
+#define IP_PROTO_MERIT          32              /* MERIT Internodal Protocol */
+#define IP_PROTO_SEP            33              /* Sequential Exchange Protocol */
+#define IP_PROTO_3PC            34              /* Third party connect protocol */
+#define IP_PROTO_IDPR           35              /* Interdomain policy routing protocol */
+#define IP_PROTO_XTP            36              /* XTP */
+#define IP_PROTO_DDP            37              /* Datagram Delivery Protocol */
+#define IP_PROTO_CMTP           38              /* Control Message Transport Protocol */
+#define IP_PROTO_TPPP           39              /* TP++ Transport Protocol */
+#define IP_PROTO_IL             40              /* IL Transport Protocol */
+#define IP_PROTO_IPV6		41		/* IP6 header */
+#define IP_PROTO_SDRP           42              /* Source demand routing protocol */
+#define IP_PROTO_ROUTING	43		/* IP6 routing header */
+#define IP_PROTO_FRAGMENT	44		/* IP6 fragmentation header */
+#define IP_PROTO_IDRP           45              /* Inter-Domain Routing Protocol */
+#define IP_PROTO_RSVP           46              /* Resource ReSerVation protocol */
+#define IP_PROTO_GRE		47		/* General Routing Encapsulation */
+#define IP_PROTO_MHRP           48              /* Mobile Host Routing Protocol */
+#define IP_PROTO_BNA            49              /* BNA */
+#define IP_PROTO_ESP		50		/* Encap Security Payload for IPv6 - RFC2406 */
+#define IP_PROTO_AH		51		/* Authentication Header for IPv6 - RFC2402*/
+#define IP_PROTO_INSLP          52              /* Integrated Net Layer Security */
+#define IP_PROTO_SWIPE          53              /* IP with Encryption */
+#define IP_PROTO_NARP           54              /* NBMA Address resolution protocol - RFC1735 */
+#define IP_PROTO_MOBILE         55              /* IP Mobility */
+#define IP_PROTO_TLSP           56              /* Transport Layer Security Protocol using */
+                                                /* Kryptonet key management */
+#define IP_PROTO_SKIP           57              /* SKIP */
+#define IP_PROTO_ICMPV6		58		/* ICMP6  - RFC1883*/
+#define IP_PROTO_NONE		59		/* IP6 no next header - RFC1883 */
+#define IP_PROTO_DSTOPTS	60		/* IP6 destination options - RFC1883 */
+/* 61 is reserved by IANA for any host internal protocol */
+/*
+ * The current Protocol Numbers list says that the IP protocol number for
+ * mobility headers is 135; it cites draft-ietf-mobileip-ipv6-24, but
+ * that draft doesn't actually give a number.
+ *
+ * It appears that 62 used to be used, even though that's assigned to
+ * a protocol called CFTP; however, the only reference for CFTP is a
+ * Network Message from BBN back in 1982, so, for now, we support 62,
+ * as well as 135, as a protocol number for mobility headers.
+ */
+#define IP_PROTO_MIPV6_OLD	62		/* Mobile IPv6  */
+/* 63 is reserved by IANA for any local network */
+#define IP_PROTO_SATEXPAK       64
+#define IP_PROTO_KRYPTOLAN      65
+#define IP_PROTO_RVD            66              /* MIT Remote virtual disk protocol */
+#define IP_PROTO_IPPC           67              /* Internet Pluribus Packet Core */
+/* 68 is reserved by IANA for any distributed file system */
+#define IP_PROTO_SATMON         69              /* SATNET Monitoring */
+#define IP_PROTO_VISA           70              /* VISA Protocol */
+#define IP_PROTO_IPCV           71              /* Internet Packet Core Utility */
+#define IP_PROTO_CPNX           72              /* Computer Protocol Network Executive */
+#define IP_PROTO_CPHB           73              /* Computer Protocol Heart Beat */
+#define IP_PROTO_WSN            74              /* WANG Span Network */
+#define IP_PROTO_PVP            75              /* Packet Video Protocol */
+#define IP_PROTO_BRSATMON       76              /* Backroon SATNET Monitoring */
+#define IP_PROTO_SUNND          77              /* SUN ND Protocol - Temporary */
+#define IP_PROTO_WBMON          78              /* Wideband Monitoring */
+#define IP_PROTO_WBEXPAK        79              /* Wideband EXPAK */
+#define IP_PROTO_EON		80		/* ISO cnlp */
+#define IP_PROTO_VMTP           81
+#define IP_PROTO_SVMTP          82              /* Secure VMTP */
+#define IP_PROTO_VINES		83		/* Vines over raw IP */
+#define IP_PROTO_TTP            84
+#define IP_PROTO_NSFNETIGP      85              /* NSFNET IGP */
+#define IP_PROTO_DGP            86              /* Dissimilar Gateway Protocol */
+#define IP_PROTO_TCF            87        
+#define IP_PROTO_EIGRP		88
+#define IP_PROTO_OSPF		89              /* OSPF Interior Gateway Protocol - RFC1583 */
+#define IP_PROTO_SPRITE         90              /* SPRITE RPC protocol */
+#define IP_PROTO_LARP           91              /* Locus Address Resolution Protocol */
+#define IP_PROTO_MTP            92              /* Multicast Transport Protocol */
+#define IP_PROTO_AX25           93              /* AX.25 frames */
+#define IP_PROTO_IPINIP         94              /* IP within IP Encapsulation protocol */
+#define IP_PROTO_MICP           95              /* Mobile Internetworking Control Protocol */
+#define IP_PROTO_SCCCP          96              /* Semaphore communications security protocol */
+#define IP_PROTO_ETHERIP	97		/* Ethernet-within-IP - RFC 3378 */
+#define IP_PROTO_ENCAP		98		/* encapsulation header - RFC1241*/
+/* 99 is reserved by IANA for any private encryption scheme */
+#define IP_PROTO_GMTP           100
+#define IP_PROTO_IFMP           101             /* Ipsilon flow management protocol */
+#define IP_PROTO_PNNI           102             /* PNNI over IP */
+#define IP_PROTO_PIM		103		/* Protocol Independent Mcast */
+#define IP_PROTO_ARIS           104
+#define IP_PROTO_SCPS           105
+#define IP_PROTO_QNX            106
+#define IP_PROTO_AN             107             /* Active Networks */
+#define IP_PROTO_IPCOMP		108		/* IP payload compression - RFC2393 */
+#define IP_PROTO_SNP            109             /* Sitara Networks Protocol */
+#define IP_PROTO_COMPAQ         110             /* Compaq Peer Protocol */
+#define IP_PROTO_IPX            111             /* IPX over IP */
+#define IP_PROTO_VRRP		112		/* Virtual Router Redundancy Protocol */
+#define IP_PROTO_PGM		113		/* Pragmatic General Multicast */
+/* 114 is reserved by IANA for any zero hop protocol */
+#define IP_PROTO_L2TP           115             /* Layer Two Tunnelling Protocol */
+#define IP_PROTO_DDX            116             /* D-II Data Exchange */
+#define IP_PROTO_IATP           117             /* Interactive Agent Transfer Protocol */
+#define IP_PROTO_STP            118             /* Schedule Transfer Protocol */
+#define IP_PROTO_SRP            119             /* Spectralink Radio Protocol */
+#define IP_PROTO_UTI            120
+#define IP_PROTO_SMP            121             /* Simple Message Protocol */
+#define IP_PROTO_SM             122
+#define IP_PROTO_PTP            123             /* Performance Transparency Protocol */
+#define IP_PROTO_ISIS           124             /* ISIS over IPv4 */
+#define IP_PROTO_FIRE           125
+#define IP_PROTO_CRTP           126             /* Combat Radio Transport Protocol */
+#define IP_PROTO_CRUDP          127             /* Combat Radio User Datagram */
+#define IP_PROTO_SSCOPMCE       128
+#define IP_PROTO_IPLT           129
+#define IP_PROTO_SPS            130             /* Secure Packet Shield */
+#define IP_PROTO_PIPE           131             /* Private IP Encapsulation within IP */
+#define IP_PROTO_SCTP		132		/* Stream Control Transmission Protocol */
+#define IP_PROTO_FC             133             /* Fibre Channel */
+#define IP_PROTO_RSVPE2EI       134             /* RSVP E2E Ignore - RFC3175 */
+#define IP_PROTO_MIPV6          135             /* Mobile IPv6  */
+#define IP_PROTO_AX4000		173		/* AX/4000 Testblock - non IANA */
+#define IP_PROTO_NCS_HEARTBEAT  224             /* Novell NCS Heartbeat - http://support.novell.com/cgi-bin/search/searchtid.cgi?/10071158.htm */
+
+extern const char *ipprotostr(int proto);
+
+#endif /* ipproto.h */
diff -urN ethereal-0.10.6/epan/libethereal.def ethereal-0.10.7/epan/libethereal.def
--- ethereal-0.10.6/epan/libethereal.def	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/libethereal.def	2004-10-20 17:35:04.000000000 -0500
@@ -33,6 +33,7 @@
 asn1_uint32_value_decode
 BandRejectReason_vals           DATA
 build_follow_filter
+bytes_to_str_punct
 call_dissector
 capture_ap1394
 capture_arcnet
@@ -65,21 +66,24 @@
 col_set_fence
 col_set_str
 col_set_writable
-compute_timestamp_diff
 conversation_add_proto_data
 conversation_delete_proto_data
 conversation_get_proto_data
 conversation_new
 conversation_set_dissector
+convert_string_case
+convert_string_to_hex
 copy_prefs
 crc16_ccitt_tvb
 create_dissector_handle
 create_persconffile_dir
-create_tempfile
 data_out_file                   DATA
+dcerpc_add_conv_to_bind_table
 dcerpc_get_proto_hf_opnum
 dcerpc_get_proto_name
 dcerpc_get_proto_sub_dissector
+dcerpc_get_transport_salt
+dcerpc_hooks_init_protos        DATA
 dcerpc_uuids                    DATA
 decode_boolean_bitfield
 decode_enumerated_bitfield
@@ -168,6 +172,7 @@
 epan_dissect_prime_dfilter
 epan_dissect_run
 epan_init
+ether_to_str
 except_alloc
 except_deinit
 except_free
@@ -218,7 +223,6 @@
 fvalue_get
 fvalue_get_integer
 GatekeeperRejectReason_vals     DATA
-get_args_as_string
 get_basename
 get_ber_identifier
 get_ber_last_created_item
@@ -249,7 +253,6 @@
 get_column_format_matches
 get_column_longest_string
 get_column_title
-get_conn_cfilter
 get_datafile_path
 get_datafile_dir
 get_dirname
@@ -286,6 +289,7 @@
 hf_frame_number                 DATA
 hf_frame_packet_len             DATA
 hf_text_only                    DATA
+host_ip_af
 host_name_lookup_process
 incomplete_tcp_stream           DATA
 InfoRequestNakReason_vals       DATA
@@ -299,6 +303,7 @@
 is_tpkt
 LocationRejectReason_vals       DATA
 match_strval
+mkstemp
 mtp3_addr_to_str_buf
 mtp3_service_indicator_code_short_vals DATA
 new_create_dissector_handle
@@ -320,6 +325,7 @@
 prefs_register_modules
 prefs_register_obsolete_preference
 prefs_register_protocol
+prefs_register_range_preference
 prefs_register_string_preference
 prefs_register_uint_preference
 prefs_set_pref
@@ -356,6 +362,7 @@
 proto_register_subtree_array
 proto_registrar_dump_fields
 proto_registrar_dump_protocols
+proto_registrar_dump_values
 proto_registrar_get_abbrev
 proto_registrar_get_byname
 proto_registrar_get_ftype
@@ -371,12 +378,16 @@
 proto_tree_add_bytes
 proto_tree_add_bytes_format
 proto_tree_add_bytes_hidden
+proto_tree_add_debug_text
 proto_tree_add_double
 proto_tree_add_double_format
 proto_tree_add_double_hidden
 proto_tree_add_ether
 proto_tree_add_ether_format
 proto_tree_add_ether_hidden
+proto_tree_add_float
+proto_tree_add_float_format
+proto_tree_add_float_hidden
 proto_tree_add_int
 proto_tree_add_int_format
 proto_tree_add_int_hidden
@@ -407,6 +418,12 @@
 proto_tree_get_parent
 p_add_proto_data
 p_get_proto_data
+range_convert_range
+range_convert_str
+range_copy
+range_empty
+range_foreach
+ranges_are_equal
 RasMessage_vals                 DATA
 read_prefs
 read_prefs_file
@@ -438,6 +455,8 @@
 rpc_prog_hf
 rpc_prog_name
 rpc_roundup
+rtcp_add_address
+rtp_add_address
 rtp_payload_type_vals           DATA
 set_actual_length
 set_timestamp_setting
@@ -446,6 +465,7 @@
 sid_name_snooping               DATA
 sid_name_table                  DATA
 smb_cmd_vals                    DATA
+sminmpec_values                 DATA
 string_to_name_resolve
 tap_push_tapped_queue
 tap_queue_init
@@ -465,11 +485,17 @@
 tvb_format_text
 tvb_get_guint8
 tvb_get_letoh24
+tvb_get_letoh64
 tvb_get_letohl
 tvb_get_letohs
+tvb_get_letohieee_double
+tvb_get_letohieee_float
 tvb_get_nstringz
 tvb_get_nstringz0
 tvb_get_ntoh24
+tvb_get_ntoh64
+tvb_get_ntohieee_double
+tvb_get_ntohieee_float
 tvb_get_ntohl
 tvb_get_ntohs
 tvb_get_ptr
@@ -496,8 +522,6 @@
 vals_pdu_type                   DATA
 vals_status                     DATA
 val_to_str
+value_is_in_range
 write_prefs
 xml_escape
-
-
-
diff -urN ethereal-0.10.6/epan/packet.c ethereal-0.10.7/epan/packet.c
--- ethereal-0.10.6/epan/packet.c	2004-08-12 17:42:31.000000000 -0500
+++ ethereal-0.10.7/epan/packet.c	2004-10-20 17:35:03.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet.c
  * Routines for packet disassembly
  *
- * $Id: packet.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet.c 11894 2004-09-04 11:35:26Z ulfl $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -297,6 +297,8 @@
         edt->pi.src_idx = 0;
         edt->pi.dst_idx = 0;
         edt->pi.vsan = 0;
+        edt->pi.dcectxid = 0;
+        edt->pi.dcetransporttype = -1;
 
 	TRY {
 		edt->tvb = tvb_new_real_data(pd, fd->cap_len, fd->pkt_len);
diff -urN ethereal-0.10.6/epan/packet_info.h ethereal-0.10.7/epan/packet_info.h
--- ethereal-0.10.6/epan/packet_info.h	2004-08-12 17:41:55.000000000 -0500
+++ ethereal-0.10.7/epan/packet_info.h	2004-10-20 17:34:36.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet_info.h
  * Definitions for packet info structures and routines
  *
- * $Id: packet_info.h 11427 2004-07-19 02:27:17Z guy $
+ * $Id: packet_info.h 11912 2004-09-06 15:04:27Z tuexen $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -37,6 +37,7 @@
 #define PINFO_SOF_SOFF          0x2
 #define PINFO_EOF_LAST_FRAME    0x80
 #define PINFO_EOF_INVALID       0x40
+#define MAX_NUMBER_OF_PPIDS     2
 
 typedef struct _packet_info {
   const char *current_proto;	/* name of protocol currently being dissected */
@@ -122,6 +123,13 @@
   guint16 src_idx;              /* Source port index (Cisco MDS-specific) */
   guint16 dst_idx;              /* Dest port index (Cisco MDS-specific) */
   guint16 vsan;                 /* Fibre channel/Cisco MDS-specific */
+  guint16 dcectxid;             /* Context ID (DCERPC-specific) */
+  int     dcetransporttype;     /* Transport type, tag for private_data (DCERPC-specific)
+                                 * Value -1 means "not a DCERPC packet"
+                                 */
+  guint32 ppid[MAX_NUMBER_OF_PPIDS]; /* The first NUMBER_OF_PPIDS PPIDS which are present
+                                      * in the SCTP packet
+                                      */
   void    *private_data;	/* pointer to data passed from one dissector to another */
 } packet_info;
 
diff -urN ethereal-0.10.6/epan/pint.h ethereal-0.10.7/epan/pint.h
--- ethereal-0.10.6/epan/pint.h	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/pint.h	2004-10-20 17:35:03.000000000 -0500
@@ -2,7 +2,7 @@
  * Definitions for extracting and translating integers safely and portably
  * via pointers.
  *
- * $Id: pint.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: pint.h 11796 2004-08-22 00:31:58Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@zing.org>
@@ -46,6 +46,14 @@
                      (guint32)*((const guint8 *)(p)+1)<<16|  \
                      (guint32)*((const guint8 *)(p)+2)<<8|   \
                      (guint32)*((const guint8 *)(p)+3)<<0)
+#define pntoh64(p)  ((guint64)*((const guint8 *)(p)+0)<<56|  \
+                     (guint64)*((const guint8 *)(p)+1)<<48|  \
+                     (guint64)*((const guint8 *)(p)+2)<<40|  \
+                     (guint64)*((const guint8 *)(p)+3)<<32|  \
+                     (guint64)*((const guint8 *)(p)+4)<<24|  \
+                     (guint64)*((const guint8 *)(p)+5)<<16|  \
+                     (guint64)*((const guint8 *)(p)+6)<<8|   \
+                     (guint64)*((const guint8 *)(p)+7)<<0)
 
 
 #define pletohs(p)  ((guint16)                       \
@@ -60,6 +68,14 @@
                      (guint32)*((const guint8 *)(p)+2)<<16|  \
                      (guint32)*((const guint8 *)(p)+1)<<8|   \
                      (guint32)*((const guint8 *)(p)+0)<<0)
+#define pletoh64(p) ((guint64)*((const guint8 *)(p)+7)<<56|  \
+                     (guint64)*((const guint8 *)(p)+6)<<48|  \
+                     (guint64)*((const guint8 *)(p)+5)<<40|  \
+                     (guint64)*((const guint8 *)(p)+4)<<32|  \
+                     (guint64)*((const guint8 *)(p)+3)<<24|  \
+                     (guint64)*((const guint8 *)(p)+2)<<16|  \
+                     (guint64)*((const guint8 *)(p)+1)<<8|   \
+                     (guint64)*((const guint8 *)(p)+0)<<0)
 
 
 
diff -urN ethereal-0.10.6/epan/plugins.c ethereal-0.10.7/epan/plugins.c
--- ethereal-0.10.6/epan/plugins.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/plugins.c	2004-10-20 17:35:04.000000000 -0500
@@ -1,7 +1,7 @@
 /* plugins.c
  * plugin routines
  *
- * $Id: plugins.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: plugins.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -61,17 +61,19 @@
 #ifdef PLUGINS_NEED_ADDRESS_TABLE
 #include "conversation.h"
 #include "reassemble.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/dissectors/packet-giop.h>
 #include <epan/dissectors/packet-tpkt.h>
 #include <epan/dissectors/packet-tcp.h>
 #include <epan/dissectors/packet-rpc.h>
-#include "tap.h"
+#include <epan/tap.h>
 #include "asn1.h"
 #include <epan/dissectors/packet-per.h>
 #include <epan/dissectors/packet-ber.h>
-#include "xdlc.h"
-#include "crc16.h"
+#include <epan/dissectors/packet-rtp.h>
+#include <epan/dissectors/packet-rtcp.h>
+#include <epan/xdlc.h>
+#include <epan/crc16.h>
 #include "report_err.h"
 #include "plugins/plugin_table.h"
 static plugin_address_table_t	patable = {
@@ -313,7 +315,7 @@
 /* Return value is malloced so the caller should g_free() it. */
 const char *get_plugins_global_dir(const char *plugin_dir)
 {
-#ifdef WIN32
+#ifdef _WIN32
 	char *install_plugin_dir;
 
 	/*
diff -urN ethereal-0.10.6/epan/prefs-int.h ethereal-0.10.7/epan/prefs-int.h
--- ethereal-0.10.6/epan/prefs-int.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/prefs-int.h	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,107 @@
+/* prefs-int.h
+ * Definitions for implementation of preference handling routines;
+ * used by "friends" of the preferences type.
+ *
+ * $Id: prefs-int.h 12341 2004-10-18 15:14:13Z gerald $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef __PREFS_INT_H__
+#define __PREFS_INT_H__
+
+struct pref_module {
+	const char *name;	/* name of module */
+	const char *title;	/* title of module (displayed in preferences notebook) */
+	gboolean is_subtree;	/* if TRUE, this has other modules, not preferences, under it */
+	void (*apply_cb)(void);	/* routine to call when preferences applied */
+	GList	*prefs;		/* list of its preferences or submodules */
+	int	numprefs;	/* number of non-obsolete preferences */
+	gboolean prefs_changed;	/* if TRUE, a preference has changed since we last checked */
+	gboolean obsolete;	/* if TRUE, this is a module that used to
+				   exist but no longer does */
+};
+
+/*
+ * Module used for protocol preferences. With MSVC and a 
+ * libethereal.dll, we need a special declaration.
+ */
+ETH_VAR_IMPORT module_t *protocols_module;
+
+/*
+ * PREF_OBSOLETE is used for preferences that a module used to support
+ * but no longer supports; we give different error messages for them.
+ */
+typedef enum {
+	PREF_UINT,
+	PREF_BOOL,
+	PREF_ENUM,
+	PREF_STRING,
+	PREF_RANGE,
+	PREF_OBSOLETE
+} pref_type_t;
+
+struct preference {
+	const char *name;	/* name of preference */
+	const char *title;	/* title to use in GUI */
+	const char *description; /* human-readable description of preference */
+	int	ordinal;	/* ordinal number of this preference */
+	pref_type_t type;	/* type of that preference */
+	union {
+		guint *uint;
+		gboolean *boolp;
+		gint *enump;
+		char **string;
+		range_t **range;
+	} varp;			/* pointer to variable storing the value */
+	union {
+		guint uint;
+		gboolean boolval;
+		gint enumval;
+		char *string;
+		range_t *range;
+	} saved_val;		/* original value, when editing from the GUI */
+	union {
+	  guint base;			/* input/output base, for PREF_UINT */
+	  guint32 max_value;		/* maximum value of a range */
+	  struct {
+	    const enum_val_t *enumvals;	/* list of name & values */
+	    gboolean radio_buttons;	/* TRUE if it should be shown as
+					   radio buttons rather than as an
+					   option menu or combo box in
+					   the preferences tab */
+	  } enum_info;			/* for PREF_ENUM */
+	} info;			/* display/text file information */
+	void	*control;	/* handle for GUI control for this preference */
+};
+
+gint find_val_for_string(const char *needle, const enum_val_t *haystack,
+    gint default_value);
+
+
+/* read_prefs_file: read in a generic config file and do a callback to */
+/* pref_set_pair_fct() for every key/value pair found */
+typedef int (*pref_set_pair_cb) (gchar *key, gchar *value);
+
+int
+read_prefs_file(const char *pf_path, FILE *pf, pref_set_pair_cb pref_set_pair_fct);
+
+
+
+#endif /* prefs-int.h */
diff -urN ethereal-0.10.6/epan/prefs.c ethereal-0.10.7/epan/prefs.c
--- ethereal-0.10.6/epan/prefs.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/prefs.c	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,2581 @@
+/* prefs.c
+ * Routines for handling preferences
+ *
+ * $Id: prefs.c 12341 2004-10-18 15:14:13Z gerald $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <glib.h>
+
+#include <epan/filesystem.h>
+#include <epan/addr_resolv.h>
+#include <epan/packet.h>
+#include <epan/prefs.h>
+#include <epan/proto.h>
+#include <epan/column.h>
+#include "print.h"
+
+#include <epan/prefs-int.h>
+
+/* Internal functions */
+static module_t *find_module(const char *name);
+static module_t *prefs_register_module_or_subtree(module_t *parent,
+    const char *name, const char *title, gboolean is_subtree,
+    void (*apply_cb)(void));
+static struct preference *find_preference(module_t *, const char *);
+static int    set_pref(gchar*, gchar*);
+static GList *get_string_list(gchar *);
+static gchar *put_string_list(GList *);
+static void   clear_string_list(GList *);
+static void   free_col_info(e_prefs *);
+
+#define GPF_NAME	"ethereal.conf"
+#define PF_NAME		"preferences"
+
+static gboolean init_prefs = TRUE;
+static gchar *gpf_path = NULL;
+
+/*
+ * XXX - variables to allow us to attempt to interpret the first
+ * "mgcp.{tcp,udp}.port" in a preferences file as
+ * "mgcp.{tcp,udp}.gateway_port" and the second as
+ * "mgcp.{tcp,udp}.callagent_port".
+ */
+static int mgcp_tcp_port_count;
+static int mgcp_udp_port_count;
+
+e_prefs prefs;
+
+static gchar	*gui_ptree_line_style_text[] =
+	{ "NONE", "SOLID", "DOTTED", "TABBED", NULL };
+
+static gchar	*gui_ptree_expander_style_text[] =
+	{ "NONE", "SQUARE", "TRIANGLE", "CIRCULAR", NULL };
+
+static gchar	*gui_hex_dump_highlight_style_text[] =
+	{ "BOLD", "INVERSE", NULL };
+
+static gchar	*gui_console_open_text[] =
+	{ "NEVER", "AUTOMATIC", "ALWAYS", NULL };
+
+static gchar	*gui_fileopen_style_text[] =
+	{ "LAST_OPENED", "SPECIFIED", NULL };
+
+/* GTK knows of two ways representing "both", vertical and horizontal aligned.
+ * as this may not work on other guis, we use only "both" in general here */
+static gchar	*gui_toolbar_style_text[] =
+	{ "ICONS", "TEXT", "BOTH", NULL };
+
+static gchar	*gui_layout_content_text[] =
+	{ "NONE", "PLIST", "PDETAILS", "PBYTES", NULL };
+
+/*
+ * List of all modules with preference settings.
+ */
+static GList *modules;
+
+/*
+ * List of all modules that should show up at the top level of the
+ * tree in the preference dialog box.
+ */
+static GList *top_level_modules;
+
+static gint
+module_compare_name(gconstpointer p1_arg, gconstpointer p2_arg)
+{
+	const module_t *p1 = p1_arg;
+	const module_t *p2 = p2_arg;
+
+	return g_strcasecmp(p1->name, p2->name);
+}
+
+static gint
+module_compare_title(gconstpointer p1_arg, gconstpointer p2_arg)
+{
+	const module_t *p1 = p1_arg;
+	const module_t *p2 = p2_arg;
+
+	return g_strcasecmp(p1->title, p2->title);
+}
+
+/*
+ * Register a module that will have preferences.
+ * Specify the module under which to register it or NULL to register it
+ * at the top level, the name used for the module in the preferences file,
+ * the title used in the tab for it in a preferences dialog box, and a
+ * routine to call back when we apply the preferences.
+ */
+module_t *
+prefs_register_module(module_t *parent, const char *name, const char *title,
+    void (*apply_cb)(void))
+{
+	return prefs_register_module_or_subtree(parent, name, title, FALSE,
+	    apply_cb);
+}
+
+/*
+ * Register a subtree that will have modules under it.
+ * Specify the module under which to register it or NULL to register it
+ * at the top level and the title used in the tab for it in a preferences
+ * dialog box.
+ */
+module_t *
+prefs_register_subtree(module_t *parent, const char *title)
+{
+	return prefs_register_module_or_subtree(parent, NULL, title, TRUE,
+	    NULL);
+}
+
+static module_t *
+prefs_register_module_or_subtree(module_t *parent, const char *name,
+    const char *title, gboolean is_subtree, void (*apply_cb)(void))
+{
+	module_t *module;
+	const guchar *p;
+
+	module = g_malloc(sizeof (module_t));
+	module->name = name;
+	module->title = title;
+	module->is_subtree = is_subtree;
+	module->apply_cb = apply_cb;
+	module->prefs = NULL;	/* no preferences, to start */
+	module->numprefs = 0;
+	module->prefs_changed = FALSE;
+	module->obsolete = FALSE;
+
+	/*
+	 * Do we have a module name?
+	 */
+	if (name != NULL) {
+		/*
+		 * Yes.
+		 * Make sure that only lower-case ASCII letters, numbers,
+		 * underscores, hyphens, and dots appear in the name.
+		 *
+		 * Crash if there is, as that's an error in the code;
+		 * you can make the title a nice string with capitalization,
+		 * white space, punctuation, etc., but the name can be used
+		 * on the command line, and shouldn't require quoting,
+		 * shifting, etc.
+		 */
+		for (p = name; *p != '\0'; p++)
+			g_assert(isascii(*p) &&
+			    (islower(*p) || isdigit(*p) || *p == '_' ||
+			     *p == '-' || *p == '.'));
+
+		/*
+		 * Make sure there's not already a module with that
+		 * name.  Crash if there is, as that's an error in the
+		 * code, and the code has to be fixed not to register
+		 * more than one module with the same name.
+		 *
+		 * We search the list of all modules; the subtree stuff
+		 * doesn't require preferences in subtrees to have names
+		 * that reflect the subtree they're in (that would require
+		 * protocol preferences to have a bogus "protocol.", or
+		 * something such as that, to be added to all their names).
+		 */
+		g_assert(find_module(name) == NULL);
+
+		/*
+		 * Insert this module in the list of all modules.
+		 */
+		modules = g_list_insert_sorted(modules, module,
+		    module_compare_name);
+	} else {
+		/*
+		 * This has no name, just a title; check to make sure it's a
+		 * subtree, and crash if it's not.
+		 */
+		g_assert(is_subtree);
+	}
+
+	/*
+	 * Insert this module into the appropriate place in the display
+	 * tree.
+	 */
+	if (parent == NULL) {
+		/*
+		 * It goes at the top.
+		 */
+		top_level_modules = g_list_insert_sorted(top_level_modules,
+		    module, module_compare_title);
+	} else {
+		/*
+		 * It goes into the list for this module.
+		 */
+		parent->prefs = g_list_insert_sorted(parent->prefs, module,
+		    module_compare_title);
+	}
+
+	return module;
+}
+
+/*
+ * Register that a protocol has preferences.
+ */
+module_t *protocols_module;
+
+module_t *
+prefs_register_protocol(int id, void (*apply_cb)(void))
+{
+	protocol_t *protocol;
+
+	/*
+	 * Have we yet created the "Protocols" subtree?
+	 */
+	if (protocols_module == NULL) {
+		/*
+		 * No.  Do so.
+		 */
+		protocols_module = prefs_register_subtree(NULL, "Protocols");
+	}
+	protocol = find_protocol_by_id(id);
+	return prefs_register_module(protocols_module,
+	    proto_get_protocol_filter_name(id),
+	    proto_get_protocol_short_name(protocol), apply_cb);
+}
+
+/*
+ * Register that a protocol used to have preferences but no longer does,
+ * by creating an "obsolete" module for it.
+ */
+module_t *
+prefs_register_protocol_obsolete(int id)
+{
+	module_t *module;
+	protocol_t *protocol;
+
+	/*
+	 * Have we yet created the "Protocols" subtree?
+	 */
+	if (protocols_module == NULL) {
+		/*
+		 * No.  Do so.
+		 */
+		protocols_module = prefs_register_subtree(NULL, "Protocols");
+	}
+	protocol = find_protocol_by_id(id);
+	module = prefs_register_module(protocols_module,
+	    proto_get_protocol_filter_name(id),
+	    proto_get_protocol_short_name(protocol), NULL);
+	module->obsolete = TRUE;
+	return module;
+}
+
+/*
+ * Find a module, given its name.
+ */
+static gint
+module_match(gconstpointer a, gconstpointer b)
+{
+	const module_t *module = a;
+	const char *name = b;
+
+	return strcmp(name, module->name);
+}
+
+static module_t *
+find_module(const char *name)
+{
+	GList *list_entry;
+
+	list_entry = g_list_find_custom(modules, (gpointer)name, module_match);
+	if (list_entry == NULL)
+		return NULL;	/* no such module */
+	return (module_t *) list_entry->data;
+}
+
+/*
+ * Call a callback function, with a specified argument, for each module
+ * in a list of modules.  If the list is NULL, searches the top-level
+ * list in the display tree of modules.  If any callback returns a
+ * non-zero value, we stop and return that value, otherwise we
+ * return 0.
+ *
+ * Ignores "obsolete" modules; their sole purpose is to allow old
+ * preferences for dissectors that no longer have preferences to be
+ * silently ignored in preference files.  Does not ignore subtrees,
+ * as this can be used when walking the display tree of modules.
+ */
+guint
+prefs_module_list_foreach(GList *module_list, module_cb callback,
+    gpointer user_data)
+{
+	GList *elem;
+	module_t *module;
+	guint ret;
+
+	if (module_list == NULL)
+		module_list = top_level_modules;
+
+	for (elem = g_list_first(module_list); elem != NULL;
+	    elem = g_list_next(elem)) {
+		module = elem->data;
+		if (!module->obsolete) {
+			ret = (*callback)(module, user_data);
+			if (ret != 0)
+				return ret;
+		}
+	}
+	return 0;
+}
+
+/*
+ * Call a callback function, with a specified argument, for each module
+ * in the list of all modules.  (This list does not include subtrees.)
+ *
+ * Ignores "obsolete" modules; their sole purpose is to allow old
+ * preferences for dissectors that no longer have preferences to be
+ * silently ignored in preference files.
+ */
+guint
+prefs_modules_foreach(module_cb callback, gpointer user_data)
+{
+	return prefs_module_list_foreach(modules, callback, user_data);
+}
+
+static void
+call_apply_cb(gpointer data, gpointer user_data _U_)
+{
+	module_t *module = data;
+
+	if (module->obsolete)
+		return;
+	if (module->prefs_changed) {
+		if (module->apply_cb != NULL)
+			(*module->apply_cb)();
+		module->prefs_changed = FALSE;
+	}
+}
+
+/*
+ * Call the "apply" callback function for each module if any of its
+ * preferences have changed, and then clear the flag saying its
+ * preferences have changed, as the module has been notified of that
+ * fact.
+ */
+void
+prefs_apply_all(void)
+{
+	g_list_foreach(modules, call_apply_cb, NULL);
+}
+
+/*
+ * Register a preference in a module's list of preferences.
+ * If it has a title, give it an ordinal number; otherwise, it's a
+ * preference that won't show up in the UI, so it shouldn't get an
+ * ordinal number (the ordinal should be the ordinal in the set of
+ * *visible* preferences).
+ */
+static pref_t *
+register_preference(module_t *module, const char *name, const char *title,
+    const char *description, pref_type_t type)
+{
+	pref_t *preference;
+	const guchar *p;
+
+	preference = g_malloc(sizeof (pref_t));
+	preference->name = name;
+	preference->title = title;
+	preference->description = description;
+	preference->type = type;
+	if (title != NULL)
+		preference->ordinal = module->numprefs;
+	else
+		preference->ordinal = -1;	/* no ordinal for you */
+
+	/*
+	 * Make sure that only lower-case ASCII letters, numbers,
+	 * underscores, and dots appear in the preference name.
+	 *
+	 * Crash if there is, as that's an error in the code;
+	 * you can make the title and description nice strings
+	 * with capitalization, white space, punctuation, etc.,
+	 * but the name can be used on the command line,
+	 * and shouldn't require quoting, shifting, etc.
+	 */
+	for (p = name; *p != '\0'; p++)
+		g_assert(isascii(*p) &&
+		    (islower(*p) || isdigit(*p) || *p == '_' || *p == '.'));
+
+	/*
+	 * Make sure there's not already a preference with that
+	 * name.  Crash if there is, as that's an error in the
+	 * code, and the code has to be fixed not to register
+	 * more than one preference with the same name.
+	 */
+	g_assert(find_preference(module, name) == NULL);
+
+	if (type != PREF_OBSOLETE) {
+		/*
+		 * Make sure the preference name doesn't begin with the
+		 * module name, as that's redundant and Just Silly.
+		 */
+		g_assert((strncmp(name, module->name, strlen(module->name)) != 0) ||
+			(((name[strlen(module->name)]) != '.') && ((name[strlen(module->name)]) != '_')));
+	}
+
+	/*
+	 * There isn't already one with that name, so add the
+	 * preference.
+	 */
+	module->prefs = g_list_append(module->prefs, preference);
+	if (title != NULL)
+		module->numprefs++;
+
+	return preference;
+}
+
+/*
+ * Find a preference in a module's list of preferences, given the module
+ * and the preference's name.
+ */
+static gint
+preference_match(gconstpointer a, gconstpointer b)
+{
+	const pref_t *pref = a;
+	const char *name = b;
+
+	return strcmp(name, pref->name);
+}
+
+static struct preference *
+find_preference(module_t *module, const char *name)
+{
+	GList *list_entry;
+
+	list_entry = g_list_find_custom(module->prefs, (gpointer)name,
+	    preference_match);
+	if (list_entry == NULL)
+		return NULL;	/* no such preference */
+	return (struct preference *) list_entry->data;
+}
+
+/*
+ * Returns TRUE if the given protocol has registered preferences
+ */
+gboolean
+prefs_is_registered_protocol(char *name)
+{
+	module_t *m = find_module(name);
+
+	return (m != NULL && !m->obsolete);
+}
+
+/*
+ * Returns the module title of a registered protocol
+ */
+const char *
+prefs_get_title_by_name(char *name)
+{
+	module_t *m = find_module(name);
+
+	return (m != NULL && !m->obsolete) ? m->title : NULL;
+}
+
+/*
+ * Register a preference with an unsigned integral value.
+ */
+void
+prefs_register_uint_preference(module_t *module, const char *name,
+    const char *title, const char *description, guint base, guint *var)
+{
+	pref_t *preference;
+
+	preference = register_preference(module, name, title, description,
+	    PREF_UINT);
+	preference->varp.uint = var;
+	preference->info.base = base;
+}
+
+/*
+ * Register a preference with an Boolean value.
+ */
+void
+prefs_register_bool_preference(module_t *module, const char *name,
+    const char *title, const char *description, gboolean *var)
+{
+	pref_t *preference;
+
+	preference = register_preference(module, name, title, description,
+	    PREF_BOOL);
+	preference->varp.boolp = var;
+}
+
+/*
+ * Register a preference with an enumerated value.
+ */
+void
+prefs_register_enum_preference(module_t *module, const char *name,
+    const char *title, const char *description, gint *var,
+    const enum_val_t *enumvals, gboolean radio_buttons)
+{
+	pref_t *preference;
+
+	preference = register_preference(module, name, title, description,
+	    PREF_ENUM);
+	preference->varp.enump = var;
+	preference->info.enum_info.enumvals = enumvals;
+	preference->info.enum_info.radio_buttons = radio_buttons;
+}
+
+/*
+ * Register a preference with a character-string value.
+ */
+void
+prefs_register_string_preference(module_t *module, const char *name,
+    const char *title, const char *description, char **var)
+{
+	pref_t *preference;
+
+	preference = register_preference(module, name, title, description,
+	    PREF_STRING);
+
+	/*
+	 * String preference values should be non-null (as you can't
+	 * keep them null after using the preferences GUI, you can at best
+	 * have them be null strings) and freeable (as we free them
+	 * if we change them).
+	 *
+	 * If the value is a null pointer, make it a copy of a null
+	 * string, otherwise make it a copy of the value.
+	 */
+	if (*var == NULL)
+		*var = g_strdup("");
+	else
+		*var = g_strdup(*var);
+	preference->varp.string = var;
+	preference->saved_val.string = NULL;
+}
+
+/*
+ * Register a preference with a ranged value.
+ */
+void
+prefs_register_range_preference(module_t *module, const char *name,
+    const char *title, const char *description, range_t **var,
+    guint32 max_value)
+{
+	pref_t *preference;
+
+	preference = register_preference(module, name, title, description,
+					 PREF_RANGE);
+	preference->info.max_value = max_value;
+
+
+	/*
+	 * Range preference values should be non-null (as you can't
+	 * keep them null after using the preferences GUI, you can at best
+	 * have them be empty ranges) and freeable (as we free them
+	 * if we change them).
+	 *
+	 * If the value is a null pointer, make it an empty range.
+	 */
+	if (*var == NULL)
+		*var = range_empty();
+	preference->varp.range = var;
+	preference->saved_val.range = NULL;
+}
+
+/*
+ * Register a preference that used to be supported but no longer is.
+ */
+void
+prefs_register_obsolete_preference(module_t *module, const char *name)
+{
+	register_preference(module, name, NULL, NULL, PREF_OBSOLETE);
+}
+
+/*
+ * Call a callback function, with a specified argument, for each preference
+ * in a given module.
+ *
+ * If any of the callbacks return a non-zero value, stop and return that
+ * value, otherwise return 0.
+ */
+guint
+prefs_pref_foreach(module_t *module, pref_cb callback, gpointer user_data)
+{
+	GList *elem;
+	pref_t *pref;
+	guint ret;
+
+	for (elem = g_list_first(module->prefs); elem != NULL;
+	    elem = g_list_next(elem)) {
+		pref = elem->data;
+		if (pref->type == PREF_OBSOLETE) {
+			/*
+			 * This preference is no longer supported; it's
+			 * not a real preference, so we don't call the
+			 * callback for it (i.e., we treat it as if it
+			 * weren't found in the list of preferences,
+			 * and we weren't called in the first place).
+			 */
+			continue;
+		}
+
+		ret = (*callback)(pref, user_data);
+		if (ret != 0)
+			return ret;
+	}
+	return 0;
+}
+
+/*
+ * Register all non-dissector modules' preferences.
+ */
+void
+prefs_register_modules(void)
+{
+}
+
+/* Parse through a list of comma-separated, possibly quoted strings.
+   Return a list of the string data. */
+static GList *
+get_string_list(gchar *str)
+{
+  enum { PRE_STRING, IN_QUOT, NOT_IN_QUOT };
+
+  gint      state = PRE_STRING, i = 0, j = 0;
+  gboolean  backslash = FALSE;
+  guchar    cur_c;
+  gchar    *slstr = NULL;
+  GList    *sl = NULL;
+
+  /* Allocate a buffer for the first string.   */
+  slstr = (gchar *) g_malloc(sizeof(gchar) * COL_MAX_LEN);
+  j = 0;
+
+  for (;;) {
+    cur_c = str[i];
+    if (cur_c == '\0') {
+      /* It's the end of the input, so it's the end of the string we
+         were working on, and there's no more input. */
+      if (state == IN_QUOT || backslash) {
+        /* We were in the middle of a quoted string or backslash escape,
+           and ran out of characters; that's an error.  */
+        g_free(slstr);
+        clear_string_list(sl);
+        return NULL;
+      }
+      slstr[j] = '\0';
+      sl = g_list_append(sl, slstr);
+      break;
+    }
+    if (cur_c == '"' && ! backslash) {
+      switch (state) {
+        case PRE_STRING:
+          /* We hadn't yet started processing a string; this starts the
+             string, and we're now quoting.  */
+          state = IN_QUOT;
+          break;
+        case IN_QUOT:
+          /* We're in the middle of a quoted string, and we saw a quotation
+             mark; we're no longer quoting.   */
+          state = NOT_IN_QUOT;
+          break;
+        case NOT_IN_QUOT:
+          /* We're working on a string, but haven't seen a quote; we're
+             now quoting.  */
+          state = IN_QUOT;
+          break;
+        default:
+          break;
+      }
+    } else if (cur_c == '\\' && ! backslash) {
+      /* We saw a backslash, and the previous character wasn't a
+         backslash; escape the next character.
+
+         This also means we've started a new string. */
+      backslash = TRUE;
+      if (state == PRE_STRING)
+        state = NOT_IN_QUOT;
+    } else if (cur_c == ',' && state != IN_QUOT && ! backslash) {
+      /* We saw a comma, and we're not in the middle of a quoted string
+         and it wasn't preceded by a backslash; it's the end of
+         the string we were working on...  */
+      slstr[j] = '\0';
+      sl = g_list_append(sl, slstr);
+
+      /* ...and the beginning of a new string.  */
+      state = PRE_STRING;
+      slstr = (gchar *) g_malloc(sizeof(gchar) * COL_MAX_LEN);
+      j = 0;
+    } else if (!isspace(cur_c) || state != PRE_STRING) {
+      /* Either this isn't a white-space character, or we've started a
+         string (i.e., already seen a non-white-space character for that
+         string and put it into the string).
+
+         The character is to be put into the string; do so if there's
+         room.  */
+      if (j < COL_MAX_LEN) {
+        slstr[j] = cur_c;
+        j++;
+      }
+
+      /* If it was backslash-escaped, we're done with the backslash escape.  */
+      backslash = FALSE;
+    }
+    i++;
+  }
+  return(sl);
+}
+
+#define MAX_FMT_PREF_LEN      1024
+#define MAX_FMT_PREF_LINE_LEN   60
+static gchar *
+put_string_list(GList *sl)
+{
+  static gchar  pref_str[MAX_FMT_PREF_LEN] = "";
+  GList        *clp = g_list_first(sl);
+  gchar        *str;
+  int           cur_pos = 0, cur_len = 0;
+  gchar        *quoted_str;
+  int           str_len;
+  gchar        *strp, *quoted_strp, c;
+  int           fmt_len;
+
+  while (clp) {
+    str = clp->data;
+
+    /* Allocate a buffer big enough to hold the entire string, with each
+       character quoted (that's the worst case).  */
+    str_len = strlen(str);
+    quoted_str = g_malloc(str_len*2 + 1);
+
+    /* Now quote any " or \ characters in it. */
+    strp = str;
+    quoted_strp = quoted_str;
+    while ((c = *strp++) != '\0') {
+      if (c == '"' || c == '\\') {
+        /* It has to be backslash-quoted.  */
+        *quoted_strp++ = '\\';
+      }
+      *quoted_strp++ = c;
+    }
+    *quoted_strp = '\0';
+
+    fmt_len = strlen(quoted_str) + 4;
+    if ((fmt_len + cur_len) < (MAX_FMT_PREF_LEN - 1)) {
+      if ((fmt_len + cur_pos) > MAX_FMT_PREF_LINE_LEN) {
+        /* Wrap the line.  */
+        cur_len--;
+        cur_pos = 0;
+        pref_str[cur_len] = '\n'; cur_len++;
+        pref_str[cur_len] = '\t'; cur_len++;
+      }
+      sprintf(&pref_str[cur_len], "\"%s\", ", quoted_str);
+      cur_pos += fmt_len;
+      cur_len += fmt_len;
+    }
+    g_free(quoted_str);
+    clp = clp->next;
+  }
+
+  /* If the string is at least two characters long, the last two characters
+     are ", ", and should be discarded, as there are no more items in the
+     string.  */
+  if (cur_len >= 2)
+    pref_str[cur_len - 2] = '\0';
+
+  return(pref_str);
+}
+
+static void
+clear_string_list(GList *sl)
+{
+  GList *l = sl;
+
+  while (l) {
+    g_free(l->data);
+    l = g_list_remove_link(l, l);
+  }
+}
+
+/*
+ * Takes a string, a pointer to an array of "enum_val_t"s, and a default gint
+ * value.
+ * The array must be terminated by an entry with a null "name" string.
+ *
+ * If the string matches a "name" string in an entry, the value from that
+ * entry is returned.
+ *
+ * Otherwise, if a string matches a "desctiption" string in an entry, the
+ * value from that entry is returned; we do that for backwards compatibility,
+ * as we used to have only a "name" string that was used both for command-line
+ * and configuration-file values and in the GUI (which meant either that
+ * the GUI had what might be somewhat cryptic values to select from or that
+ * the "-o" flag took long strings, often with spaces in them).
+ *
+ * Otherwise, the default value that was passed as the third argument is
+ * returned.
+ */
+gint
+find_val_for_string(const char *needle, const enum_val_t *haystack,
+    gint default_value)
+{
+	int i;
+
+	for (i = 0; haystack[i].name != NULL; i++) {
+		if (strcasecmp(needle, haystack[i].name) == 0) {
+			return haystack[i].value;
+		}
+	}
+	for (i = 0; haystack[i].name != NULL; i++) {
+		if (strcasecmp(needle, haystack[i].description) == 0) {
+			return haystack[i].value;
+		}
+	}
+	return default_value;
+}
+
+/* Takes an string and a pointer to an array of strings, and a default int value.
+ * The array must be terminated by a NULL string. If the string is found in the array
+ * of strings, the index of that string in the array is returned. Otherwise, the
+ * default value that was passed as the third argument is returned.
+ */
+static int
+find_index_from_string_array(char *needle, char **haystack, int default_value)
+{
+	int i = 0;
+
+	while (haystack[i] != NULL) {
+		if (strcmp(needle, haystack[i]) == 0) {
+			return i;
+		}
+		i++;
+	}
+	return default_value;
+}
+
+/* Preferences file format:
+ * - Configuration directives start at the beginning of the line, and
+ *   are terminated with a colon.
+ * - Directives can be continued on the next line by preceding them with
+ *   whitespace.
+ *
+ * Example:
+
+# This is a comment line
+print.command: lpr
+print.file: /a/very/long/path/
+	to/ethereal-out.ps
+ *
+ */
+
+#define MAX_VAR_LEN    48
+
+#define DEF_NUM_COLS    6
+
+
+/* Read the preferences file, fill in "prefs", and return a pointer to it.
+
+   If we got an error (other than "it doesn't exist") trying to read
+   the global preferences file, stuff the errno into "*gpf_errno_return"
+   and a pointer to the path of the file into "*gpf_path_return", and
+   return NULL.
+
+   If we got an error (other than "it doesn't exist") trying to read
+   the user's preferences file, stuff the errno into "*pf_errno_return"
+   and a pointer to the path of the file into "*pf_path_return", and
+   return NULL. */
+e_prefs *
+read_prefs(int *gpf_errno_return, int *gpf_read_errno_return,
+	   char **gpf_path_return, int *pf_errno_return,
+	   int *pf_read_errno_return, char **pf_path_return)
+{
+  int         i;
+  int         err;
+  char       *pf_path;
+  FILE       *pf;
+  fmt_data   *cfmt;
+  gchar      *col_fmt[] = {"No.",      "%m", "Time",        "%t",
+                           "Source",   "%s", "Destination", "%d",
+                           "Protocol", "%p", "Info",        "%i"};
+
+  if (init_prefs) {
+    /* Initialize preferences to wired-in default values.
+       They may be overridden by the global preferences file or the
+       user's preferences file. */
+    init_prefs       = FALSE;
+    prefs.pr_format  = PR_FMT_TEXT;
+    prefs.pr_dest    = PR_DEST_CMD;
+    prefs.pr_file    = g_strdup("ethereal.out");
+    prefs.pr_cmd     = g_strdup("lpr");
+    prefs.col_list = NULL;
+    for (i = 0; i < DEF_NUM_COLS; i++) {
+      cfmt = (fmt_data *) g_malloc(sizeof(fmt_data));
+      cfmt->title = g_strdup(col_fmt[i * 2]);
+      cfmt->fmt   = g_strdup(col_fmt[(i * 2) + 1]);
+      prefs.col_list = g_list_append(prefs.col_list, cfmt);
+    }
+    prefs.num_cols  = DEF_NUM_COLS;
+    prefs.st_client_fg.pixel =     0;
+    prefs.st_client_fg.red   = 32767;
+    prefs.st_client_fg.green =     0;
+    prefs.st_client_fg.blue  =     0;
+    prefs.st_client_bg.pixel =     0;
+    prefs.st_client_bg.red   = 64507;
+    prefs.st_client_bg.green = 60909;
+    prefs.st_client_bg.blue  = 60909;
+    prefs.st_server_fg.pixel =     0;
+    prefs.st_server_fg.red   =     0;
+    prefs.st_server_fg.green =     0;
+    prefs.st_server_fg.blue  = 32767;
+    prefs.st_server_bg.pixel =     0;
+    prefs.st_server_bg.red   = 60909;
+    prefs.st_server_bg.green = 60909;
+    prefs.st_server_bg.blue  = 64507;
+    prefs.gui_scrollbar_on_right = TRUE;
+    prefs.gui_plist_sel_browse = FALSE;
+    prefs.gui_ptree_sel_browse = FALSE;
+    prefs.gui_altern_colors = FALSE;
+    prefs.gui_ptree_line_style = 0;
+    prefs.gui_ptree_expander_style = 1;
+    prefs.gui_hex_dump_highlight_style = 1;
+    prefs.filter_toolbar_show_in_statusbar = FALSE;
+    prefs.gui_toolbar_main_style = TB_STYLE_ICONS;
+#ifdef _WIN32
+    /* XXX - not sure, if it must be "Lucida Console" or "lucida console"
+     * for gui_font_name1. Maybe it's dependant on the windows version running?!
+     * verified on XP: "Lucida Console"
+     * unknown for other windows versions.
+     *
+     * Problem: if we have no preferences file, and the default font name is unknown, 
+     * we cannot save Preferences as an error dialog pops up "You have not selected a font".
+     */
+    prefs.gui_font_name1 = g_strdup("-*-Lucida Console-medium-r-*-*-*-100-*-*-*-*-*-*");
+    prefs.gui_font_name2 = g_strdup("Lucida Console 10");
+#else
+    /*
+     * XXX - for now, we make the initial font name a pattern that matches
+     * only ISO 8859/1 fonts, so that we don't match 2-byte fonts such
+     * as ISO 10646 fonts.
+     *
+     * Users in locales using other one-byte fonts will have to choose
+     * a different font from the preferences dialog - or put the font
+     * selection in the global preferences file to make that font the
+     * default for all users who don't explicitly specify a different
+     * font.
+     *
+     * Making this a font set rather than a font has two problems:
+     *
+     *	1) as far as I know, you can't select font sets with the
+     *	   font selection dialog;
+     *
+     *  2) if you use a font set, the text to be drawn must be a
+     *	   multi-byte string in the appropriate locale, but
+     *	   Ethereal does *NOT* guarantee that's the case - in
+     *	   the hex-dump window, each character in the text portion
+     *	   of the display must be a *single* byte, and in the
+     *	   packet-list and protocol-tree windows, text extracted
+     *	   from the packet is not necessarily in the right format.
+     *
+     * "Doing this right" may, for the packet-list and protocol-tree
+     * windows, require that dissectors know what the locale is
+     * *AND* know what locale and text representation is used in
+     * the packets they're dissecting, and may be impossible in
+     * the hex-dump window (except by punting and displaying only
+     * ASCII characters).
+     *
+     * GTK+ 2.0 may simplify part of the problem, as it will, as I
+     * understand it, use UTF-8-encoded Unicode as its internal
+     * character set; however, we'd still have to know whatever
+     * character set and encoding is used in the packet (which
+     * may differ for different protocols, e.g. SMB might use
+     * PC code pages for some strings and Unicode for others, whilst
+     * NFS might use some UNIX character set encoding, e.g. ISO 8859/x,
+     * or one of the EUC character sets for Asian languages, or one
+     * of the other multi-byte character sets, or UTF-8, or...).
+     *
+     * I.e., as far as I can tell, "internationalizing" the packet-list,
+     * protocol-tree, and hex-dump windows involves a lot more than, say,
+     * just using font sets rather than fonts.
+     */
+    prefs.gui_font_name1 = g_strdup("-misc-fixed-medium-r-semicondensed-*-*-120-*-*-*-*-iso8859-1");
+    /* XXX- is this the correct default font name for GTK2 none win32? */
+    prefs.gui_font_name2 = g_strdup("fixed medium 12");
+#endif
+    prefs.gui_marked_fg.pixel        =     65535;
+    prefs.gui_marked_fg.red          =     65535;
+    prefs.gui_marked_fg.green        =     65535;
+    prefs.gui_marked_fg.blue         =     65535;
+    prefs.gui_marked_bg.pixel        =         0;
+    prefs.gui_marked_bg.red          =         0;
+    prefs.gui_marked_bg.green        =         0;
+    prefs.gui_marked_bg.blue         =         0;
+    prefs.gui_geometry_save_position =         0;
+    prefs.gui_geometry_save_size     =         1;
+    prefs.gui_geometry_save_maximized=         1;
+    prefs.gui_console_open           = console_open_never;
+    prefs.gui_fileopen_style         = FO_STYLE_LAST_OPENED;
+    prefs.gui_recent_files_count_max = 10;
+    prefs.gui_fileopen_dir           = g_strdup("");
+    prefs.gui_fileopen_preview       = 3;
+    prefs.gui_ask_unsaved            = TRUE;
+    prefs.gui_find_wrap              = TRUE;
+    prefs.gui_webbrowser             = g_strdup("mozilla %s");
+    prefs.gui_layout_type            = layout_type_5;
+    prefs.gui_layout_content_1       = layout_pane_content_plist;
+    prefs.gui_layout_content_2       = layout_pane_content_pdetails;
+    prefs.gui_layout_content_3       = layout_pane_content_pbytes;
+
+/* set the default values for the capture dialog box */
+    prefs.capture_device           = NULL;
+    prefs.capture_devices_descr    = NULL;
+    prefs.capture_devices_hide     = NULL;
+    prefs.capture_prom_mode        = TRUE;
+    prefs.capture_real_time        = FALSE;
+    prefs.capture_auto_scroll      = FALSE;
+    prefs.capture_show_info        = TRUE;
+    prefs.name_resolve             = RESOLV_ALL ^ RESOLV_NETWORK;
+    prefs.name_resolve_concurrency = 500;
+  }
+
+  /* Construct the pathname of the global preferences file. */
+  if (! gpf_path)
+    gpf_path = get_datafile_path(GPF_NAME);
+
+  /* Read the global preferences file, if it exists. */
+  *gpf_path_return = NULL;
+  if ((pf = fopen(gpf_path, "r")) != NULL) {
+    /*
+     * Start out the counters of "mgcp.{tcp,udp}.port" entries we've
+     * seen.
+     */
+    mgcp_tcp_port_count = 0;
+    mgcp_udp_port_count = 0;
+
+    /* We succeeded in opening it; read it. */
+    err = read_prefs_file(gpf_path, pf, set_pref);
+    if (err != 0) {
+      /* We had an error reading the file; return the errno and the
+         pathname, so our caller can report the error. */
+      *gpf_errno_return = 0;
+      *gpf_read_errno_return = err;
+      *gpf_path_return = gpf_path;
+    }
+    fclose(pf);
+  } else {
+    /* We failed to open it.  If we failed for some reason other than
+       "it doesn't exist", return the errno and the pathname, so our
+       caller can report the error. */
+    if (errno != ENOENT) {
+      *gpf_errno_return = errno;
+      *gpf_read_errno_return = 0;
+      *gpf_path_return = gpf_path;
+    }
+  }
+
+  /* Construct the pathname of the user's preferences file. */
+  pf_path = get_persconffile_path(PF_NAME, FALSE);
+
+  /* Read the user's preferences file, if it exists. */
+  *pf_path_return = NULL;
+  if ((pf = fopen(pf_path, "r")) != NULL) {
+    /*
+     * Start out the counters of "mgcp.{tcp,udp}.port" entries we've
+     * seen.
+     */
+    mgcp_tcp_port_count = 0;
+    mgcp_udp_port_count = 0;
+
+    /* We succeeded in opening it; read it. */
+    err = read_prefs_file(pf_path, pf, set_pref);
+    if (err != 0) {
+      /* We had an error reading the file; return the errno and the
+         pathname, so our caller can report the error. */
+      *pf_errno_return = 0;
+      *pf_read_errno_return = err;
+      *pf_path_return = pf_path;
+    } else
+      g_free(pf_path);
+    fclose(pf);
+  } else {
+    /* We failed to open it.  If we failed for some reason other than
+       "it doesn't exist", return the errno and the pathname, so our
+       caller can report the error. */
+    if (errno != ENOENT) {
+      *pf_errno_return = errno;
+      *pf_read_errno_return = 0;
+      *pf_path_return = pf_path;
+    }
+  }
+
+  return &prefs;
+}
+
+/* read the preferences file (or similiar) and call the callback 
+ * function to set each key/value pair found */
+int
+read_prefs_file(const char *pf_path, FILE *pf, pref_set_pair_cb pref_set_pair_fct)
+{
+  enum { START, IN_VAR, PRE_VAL, IN_VAL, IN_SKIP };
+  gchar     cur_var[MAX_VAR_LEN], cur_val[MAX_VAL_LEN];
+  int       got_c, state = START;
+  gboolean  got_val = FALSE;
+  gint      var_len = 0, val_len = 0, fline = 1, pline = 1;
+  gchar     hint[] = "(saving your preferences once should remove this warning)";
+
+
+  while ((got_c = getc(pf)) != EOF) {
+    if (got_c == '\n') {
+      state = START;
+      fline++;
+      continue;
+    }
+    if (var_len >= MAX_VAR_LEN) {
+      g_warning ("%s line %d: Variable too long %s", pf_path, fline, hint);
+      state = IN_SKIP;
+      var_len = 0;
+      continue;
+    }
+    if (val_len >= MAX_VAL_LEN) {
+      g_warning ("%s line %d: Value too long %s", pf_path, fline, hint);
+      state = IN_SKIP;
+      var_len = 0;
+      continue;
+    }
+
+    switch (state) {
+      case START:
+        if (isalnum(got_c)) {
+          if (var_len > 0) {
+            if (got_val) {
+              cur_var[var_len] = '\0';
+              cur_val[val_len] = '\0';
+              switch (pref_set_pair_fct(cur_var, cur_val)) {
+
+	      case PREFS_SET_SYNTAX_ERR:
+                g_warning ("%s line %d: Syntax error %s", pf_path, pline, hint);
+                break;
+
+	      case PREFS_SET_NO_SUCH_PREF:
+                g_warning ("%s line %d: No such preference \"%s\" %s", pf_path,
+				pline, cur_var, hint);
+                break;
+
+	      case PREFS_SET_OBSOLETE:
+	        /* We silently ignore attempts to set these; it's
+	           probably not the user's fault that it's in there -
+	           they may have saved preferences with a release that
+	           supported them. */
+                break;
+              }
+            } else {
+              g_warning ("%s line %d: Incomplete preference %s", pf_path, pline, hint);
+            }
+          }
+          state      = IN_VAR;
+          got_val    = FALSE;
+          cur_var[0] = got_c;
+          var_len    = 1;
+          pline = fline;
+        } else if (isspace(got_c) && var_len > 0 && got_val) {
+          state = PRE_VAL;
+        } else if (got_c == '#') {
+          state = IN_SKIP;
+        } else {
+          g_warning ("%s line %d: Malformed line %s", pf_path, fline, hint);
+        }
+        break;
+      case IN_VAR:
+        if (got_c != ':') {
+          cur_var[var_len] = got_c;
+          var_len++;
+        } else {
+          state   = PRE_VAL;
+          val_len = 0;
+          got_val = TRUE;
+        }
+        break;
+      case PRE_VAL:
+        if (!isspace(got_c)) {
+          state = IN_VAL;
+          cur_val[val_len] = got_c;
+          val_len++;
+        }
+        break;
+      case IN_VAL:
+        if (got_c != '#')  {
+          cur_val[val_len] = got_c;
+          val_len++;
+        } else {
+          while (isspace((guchar)cur_val[val_len]) && val_len > 0)
+            val_len--;
+          state = IN_SKIP;
+        }
+        break;
+    }
+  }
+  if (var_len > 0) {
+    if (got_val) {
+      cur_var[var_len] = '\0';
+      cur_val[val_len] = '\0';
+      switch (pref_set_pair_fct(cur_var, cur_val)) {
+
+      case PREFS_SET_SYNTAX_ERR:
+        g_warning ("%s line %d: Syntax error %s", pf_path, pline, hint);
+        break;
+
+      case PREFS_SET_NO_SUCH_PREF:
+        g_warning ("%s line %d: No such preference \"%s\" %s", pf_path,
+			pline, cur_var, hint);
+        break;
+
+      case PREFS_SET_OBSOLETE:
+	/* We silently ignore attempts to set these; it's probably not
+	   the user's fault that it's in there - they may have saved
+	   preferences with a release that supported it. */
+        break;
+      }
+    } else {
+      g_warning ("%s line %d: Incomplete preference %s", pf_path, pline, hint);
+    }
+  }
+  if (ferror(pf))
+    return errno;
+  else
+    return 0;
+}
+
+/*
+ * Given a string of the form "<pref name>:<pref value>", as might appear
+ * as an argument to a "-o" option, parse it and set the preference in
+ * question.  Return an indication of whether it succeeded or failed
+ * in some fashion.
+ */
+int
+prefs_set_pref(char *prefarg)
+{
+	guchar *p, *colonp;
+	int ret;
+
+	/*
+	 * Set the counters of "mgcp.{tcp,udp}.port" entries we've
+	 * seen to values that keep us from trying to interpret tham
+	 * as "mgcp.{tcp,udp}.gateway_port" or "mgcp.{tcp,udp}.callagent_port",
+	 * as, from the command line, we have no way of guessing which
+	 * the user had in mind.
+	 */
+	mgcp_tcp_port_count = -1;
+	mgcp_udp_port_count = -1;
+
+	colonp = strchr(prefarg, ':');
+	if (colonp == NULL)
+		return PREFS_SET_SYNTAX_ERR;
+
+	p = colonp;
+	*p++ = '\0';
+
+	/*
+	 * Skip over any white space (there probably won't be any, but
+	 * as we allow it in the preferences file, we might as well
+	 * allow it here).
+	 */
+	while (isspace(*p))
+		p++;
+	if (*p == '\0') {
+		/*
+		 * Put the colon back, so if our caller uses, in an
+		 * error message, the string they passed us, the message
+		 * looks correct.
+		 */
+		*colonp = ':';
+		return PREFS_SET_SYNTAX_ERR;
+	}
+
+	ret = set_pref(prefarg, p);
+	*colonp = ':';	/* put the colon back */
+	return ret;
+}
+
+#define PRS_PRINT_FMT                    "print.format"
+#define PRS_PRINT_DEST                   "print.destination"
+#define PRS_PRINT_FILE                   "print.file"
+#define PRS_PRINT_CMD                    "print.command"
+#define PRS_COL_FMT                      "column.format"
+#define PRS_STREAM_CL_FG                 "stream.client.fg"
+#define PRS_STREAM_CL_BG                 "stream.client.bg"
+#define PRS_STREAM_SR_FG                 "stream.server.fg"
+#define PRS_STREAM_SR_BG                 "stream.server.bg"
+#define PRS_GUI_SCROLLBAR_ON_RIGHT       "gui.scrollbar_on_right"
+#define PRS_GUI_PLIST_SEL_BROWSE         "gui.packet_list_sel_browse"
+#define PRS_GUI_PTREE_SEL_BROWSE         "gui.protocol_tree_sel_browse"
+#define PRS_GUI_ALTERN_COLORS            "gui.tree_view_altern_colors"
+#define PRS_GUI_FILTER_TOOLBAR_IN_STATUSBAR "gui.filter_toolbar_show_in_statusbar"
+#define PRS_GUI_PTREE_LINE_STYLE         "gui.protocol_tree_line_style"
+#define PRS_GUI_PTREE_EXPANDER_STYLE     "gui.protocol_tree_expander_style"
+#define PRS_GUI_HEX_DUMP_HIGHLIGHT_STYLE "gui.hex_dump_highlight_style"
+#define PRS_GUI_FONT_NAME_1              "gui.font_name"
+#define PRS_GUI_FONT_NAME_2              "gui.gtk2.font_name"
+#define PRS_GUI_MARKED_FG                "gui.marked_frame.fg"
+#define PRS_GUI_MARKED_BG                "gui.marked_frame.bg"
+#define PRS_GUI_CONSOLE_OPEN             "gui.console_open"
+#define PRS_GUI_FILEOPEN_STYLE           "gui.fileopen.style"
+#define PRS_GUI_RECENT_COUNT_MAX         "gui.recent_files_count.max"
+#define PRS_GUI_FILEOPEN_DIR             "gui.fileopen.dir"
+#define PRS_GUI_FILEOPEN_REMEMBERED_DIR  "gui.fileopen.remembered_dir"
+#define PRS_GUI_FILEOPEN_PREVIEW         "gui.fileopen.preview"
+#define PRS_GUI_ASK_UNSAVED              "gui.ask_unsaved"
+#define PRS_GUI_FIND_WRAP                "gui.find_wrap"
+#define PRS_GUI_GEOMETRY_SAVE_POSITION   "gui.geometry.save.position"
+#define PRS_GUI_GEOMETRY_SAVE_SIZE       "gui.geometry.save.size"
+#define PRS_GUI_GEOMETRY_SAVE_MAXIMIZED  "gui.geometry.save.maximized"
+#define PRS_GUI_GEOMETRY_MAIN_X          "gui.geometry.main.x"
+#define PRS_GUI_GEOMETRY_MAIN_Y          "gui.geometry.main.y"
+#define PRS_GUI_GEOMETRY_MAIN_WIDTH      "gui.geometry.main.width"
+#define PRS_GUI_GEOMETRY_MAIN_HEIGHT     "gui.geometry.main.height"
+#define PRS_GUI_TOOLBAR_MAIN_SHOW        "gui.toolbar_main_show"
+#define PRS_GUI_TOOLBAR_MAIN_STYLE       "gui.toolbar_main_style"
+#define PRS_GUI_WEBBROWSER               "gui.webbrowser"
+#define PRS_GUI_LAYOUT_TYPE              "gui.layout_type"
+#define PRS_GUI_LAYOUT_CONTENT_1         "gui.layout_content_1"
+#define PRS_GUI_LAYOUT_CONTENT_2         "gui.layout_content_2"
+#define PRS_GUI_LAYOUT_CONTENT_3         "gui.layout_content_3"
+
+/*
+ * This applies to more than just captures, so it's not "capture.name_resolve";
+ * "capture.name_resolve" is supported on input for backwards compatibility.
+ *
+ * It's not a preference for a particular part of Ethereal, it's used all
+ * over the place, so its name doesn't have two components.
+ */
+#define PRS_NAME_RESOLVE "name_resolve"
+#define PRS_NAME_RESOLVE_CONCURRENCY "name_resolve_concurrency"
+#define PRS_CAP_NAME_RESOLVE "capture.name_resolve"
+
+/*  values for the capture dialog box */
+#define PRS_CAP_DEVICE        "capture.device"
+#define PRS_CAP_DEVICES_DESCR "capture.devices_descr"
+#define PRS_CAP_DEVICES_HIDE  "capture.devices_hide"
+#define PRS_CAP_PROM_MODE     "capture.prom_mode"
+#define PRS_CAP_REAL_TIME     "capture.real_time_update"
+#define PRS_CAP_AUTO_SCROLL   "capture.auto_scroll"
+#define PRS_CAP_SHOW_INFO     "capture.show_info"
+
+#define RED_COMPONENT(x)   (guint16) (((((x) >> 16) & 0xff) * 65535 / 255))
+#define GREEN_COMPONENT(x) (guint16) (((((x) >>  8) & 0xff) * 65535 / 255))
+#define BLUE_COMPONENT(x)  (guint16) ( (((x)        & 0xff) * 65535 / 255))
+
+static gchar *pr_formats[] = { "text", "postscript" };
+static gchar *pr_dests[]   = { "command", "file" };
+
+typedef struct {
+  char    letter;
+  guint32 value;
+} name_resolve_opt_t;
+
+static name_resolve_opt_t name_resolve_opt[] = {
+  { 'm', RESOLV_MAC },
+  { 'n', RESOLV_NETWORK },
+  { 't', RESOLV_TRANSPORT },
+  { 'C', RESOLV_CONCURRENT },
+};
+
+#define N_NAME_RESOLVE_OPT	(sizeof name_resolve_opt / sizeof name_resolve_opt[0])
+
+static char *
+name_resolve_to_string(guint32 name_resolve)
+{
+  static char string[N_NAME_RESOLVE_OPT+1];
+  char *p;
+  unsigned int i;
+  gboolean all_opts_set = TRUE;
+
+  if (name_resolve == RESOLV_NONE)
+    return "FALSE";
+  p = &string[0];
+  for (i = 0; i < N_NAME_RESOLVE_OPT; i++) {
+    if (name_resolve & name_resolve_opt[i].value)
+      *p++ =  name_resolve_opt[i].letter;
+    else
+      all_opts_set = FALSE;
+  }
+  *p = '\0';
+  if (all_opts_set)
+    return "TRUE";
+  return string;
+}
+
+char
+string_to_name_resolve(char *string, guint32 *name_resolve)
+{
+  char c;
+  unsigned int i;
+
+  *name_resolve = 0;
+  while ((c = *string++) != '\0') {
+    for (i = 0; i < N_NAME_RESOLVE_OPT; i++) {
+      if (c == name_resolve_opt[i].letter) {
+        *name_resolve |= name_resolve_opt[i].value;
+        break;
+      }
+    }
+    if (i == N_NAME_RESOLVE_OPT) {
+      /*
+       * Unrecognized letter.
+       */
+      return c;
+    }
+  }
+  return '\0';
+}
+
+static int
+set_pref(gchar *pref_name, gchar *value)
+{
+  GList    *col_l, *col_l_elt;
+  gint      llen;
+  fmt_data *cfmt;
+  unsigned long int cval;
+  guint    uval;
+  gboolean bval;
+  gint     enum_val;
+  char     *p;
+  gchar    *dotp, *last_dotp;
+  module_t *module;
+  pref_t   *pref;
+  gboolean had_a_dot;
+
+  if (strcmp(pref_name, PRS_PRINT_FMT) == 0) {
+    if (strcmp(value, pr_formats[PR_FMT_TEXT]) == 0) {
+      prefs.pr_format = PR_FMT_TEXT;
+    } else if (strcmp(value, pr_formats[PR_FMT_PS]) == 0) {
+      prefs.pr_format = PR_FMT_PS;
+    } else {
+      return PREFS_SET_SYNTAX_ERR;
+    }
+  } else if (strcmp(pref_name, PRS_PRINT_DEST) == 0) {
+    if (strcmp(value, pr_dests[PR_DEST_CMD]) == 0) {
+      prefs.pr_dest = PR_DEST_CMD;
+    } else if (strcmp(value, pr_dests[PR_DEST_FILE]) == 0) {
+      prefs.pr_dest = PR_DEST_FILE;
+    } else {
+      return PREFS_SET_SYNTAX_ERR;
+    }
+  } else if (strcmp(pref_name, PRS_PRINT_FILE) == 0) {
+    if (prefs.pr_file) g_free(prefs.pr_file);
+    prefs.pr_file = g_strdup(value);
+  } else if (strcmp(pref_name, PRS_PRINT_CMD) == 0) {
+    if (prefs.pr_cmd) g_free(prefs.pr_cmd);
+    prefs.pr_cmd = g_strdup(value);
+  } else if (strcmp(pref_name, PRS_COL_FMT) == 0) {
+    col_l = get_string_list(value);
+    if (col_l == NULL)
+      return PREFS_SET_SYNTAX_ERR;
+    if ((g_list_length(col_l) % 2) != 0) {
+      /* A title didn't have a matching format.  */
+      clear_string_list(col_l);
+      return PREFS_SET_SYNTAX_ERR;
+    }
+    /* Check to make sure all column formats are valid.  */
+    col_l_elt = g_list_first(col_l);
+    while(col_l_elt) {
+      /* Make sure the title isn't empty.  */
+      if (strcmp(col_l_elt->data, "") == 0) {
+      	/* It is.  */
+        clear_string_list(col_l);
+        return PREFS_SET_SYNTAX_ERR;
+      }
+
+      /* Go past the title.  */
+      col_l_elt = col_l_elt->next;
+
+      /* Check the format.  */
+      if (get_column_format_from_str(col_l_elt->data) == -1) {
+        /* It's not a valid column format.  */
+        clear_string_list(col_l);
+        return PREFS_SET_SYNTAX_ERR;
+      }
+
+      /* Go past the format.  */
+      col_l_elt = col_l_elt->next;
+    }
+    free_col_info(&prefs);
+    prefs.col_list = NULL;
+    llen             = g_list_length(col_l);
+    prefs.num_cols   = llen / 2;
+    col_l_elt = g_list_first(col_l);
+    while(col_l_elt) {
+      cfmt = (fmt_data *) g_malloc(sizeof(fmt_data));
+      cfmt->title    = g_strdup(col_l_elt->data);
+      col_l_elt      = col_l_elt->next;
+      cfmt->fmt      = g_strdup(col_l_elt->data);
+      col_l_elt      = col_l_elt->next;
+      prefs.col_list = g_list_append(prefs.col_list, cfmt);
+    }
+    clear_string_list(col_l);
+  } else if (strcmp(pref_name, PRS_STREAM_CL_FG) == 0) {
+    cval = strtoul(value, NULL, 16);
+    prefs.st_client_fg.pixel = 0;
+    prefs.st_client_fg.red   = RED_COMPONENT(cval);
+    prefs.st_client_fg.green = GREEN_COMPONENT(cval);
+    prefs.st_client_fg.blue  = BLUE_COMPONENT(cval);
+  } else if (strcmp(pref_name, PRS_STREAM_CL_BG) == 0) {
+    cval = strtoul(value, NULL, 16);
+    prefs.st_client_bg.pixel = 0;
+    prefs.st_client_bg.red   = RED_COMPONENT(cval);
+    prefs.st_client_bg.green = GREEN_COMPONENT(cval);
+    prefs.st_client_bg.blue  = BLUE_COMPONENT(cval);
+  } else if (strcmp(pref_name, PRS_STREAM_SR_FG) == 0) {
+    cval = strtoul(value, NULL, 16);
+    prefs.st_server_fg.pixel = 0;
+    prefs.st_server_fg.red   = RED_COMPONENT(cval);
+    prefs.st_server_fg.green = GREEN_COMPONENT(cval);
+    prefs.st_server_fg.blue  = BLUE_COMPONENT(cval);
+  } else if (strcmp(pref_name, PRS_STREAM_SR_BG) == 0) {
+    cval = strtoul(value, NULL, 16);
+    prefs.st_server_bg.pixel = 0;
+    prefs.st_server_bg.red   = RED_COMPONENT(cval);
+    prefs.st_server_bg.green = GREEN_COMPONENT(cval);
+    prefs.st_server_bg.blue  = BLUE_COMPONENT(cval);
+  } else if (strcmp(pref_name, PRS_GUI_SCROLLBAR_ON_RIGHT) == 0) {
+    if (strcasecmp(value, "true") == 0) {
+	    prefs.gui_scrollbar_on_right = TRUE;
+    }
+    else {
+	    prefs.gui_scrollbar_on_right = FALSE;
+    }
+  } else if (strcmp(pref_name, PRS_GUI_PLIST_SEL_BROWSE) == 0) {
+    if (strcasecmp(value, "true") == 0) {
+	    prefs.gui_plist_sel_browse = TRUE;
+    }
+    else {
+	    prefs.gui_plist_sel_browse = FALSE;
+    }
+  } else if (strcmp(pref_name, PRS_GUI_PTREE_SEL_BROWSE) == 0) {
+    if (strcasecmp(value, "true") == 0) {
+	    prefs.gui_ptree_sel_browse = TRUE;
+    }
+    else {
+	    prefs.gui_ptree_sel_browse = FALSE;
+    }
+  } else if (strcmp(pref_name, PRS_GUI_ALTERN_COLORS) == 0) {
+    if (strcasecmp(value, "true") == 0) {
+            prefs.gui_altern_colors = TRUE;
+    }
+    else {
+            prefs.gui_altern_colors = FALSE;
+    }
+  } else if (strcmp(pref_name, PRS_GUI_PTREE_LINE_STYLE) == 0) {
+    prefs.gui_ptree_line_style =
+	find_index_from_string_array(value, gui_ptree_line_style_text, 0);
+  } else if (strcmp(pref_name, PRS_GUI_PTREE_EXPANDER_STYLE) == 0) {
+    prefs.gui_ptree_expander_style =
+	find_index_from_string_array(value, gui_ptree_expander_style_text, 1);
+  } else if (strcmp(pref_name, PRS_GUI_HEX_DUMP_HIGHLIGHT_STYLE) == 0) {
+    prefs.gui_hex_dump_highlight_style =
+	find_index_from_string_array(value, gui_hex_dump_highlight_style_text, 1);
+  } else if (strcmp(pref_name, PRS_GUI_FILTER_TOOLBAR_IN_STATUSBAR) == 0) {
+    if (strcasecmp(value, "true") == 0) {
+            prefs.filter_toolbar_show_in_statusbar = TRUE;
+    }
+    else {
+            prefs.filter_toolbar_show_in_statusbar = FALSE;
+    }
+  } else if (strcmp(pref_name, PRS_GUI_TOOLBAR_MAIN_SHOW) == 0) {
+    /* obsoleted by recent setting */
+  } else if (strcmp(pref_name, PRS_GUI_TOOLBAR_MAIN_STYLE) == 0) {
+    /* see toolbar.c for details, "icons only" is default */
+	prefs.gui_toolbar_main_style =
+	    find_index_from_string_array(value, gui_toolbar_style_text,
+				     TB_STYLE_ICONS);
+  } else if (strcmp(pref_name, PRS_GUI_FONT_NAME_1) == 0) {
+    if (prefs.gui_font_name1 != NULL)
+      g_free(prefs.gui_font_name1);
+    prefs.gui_font_name1 = g_strdup(value);
+  } else if (strcmp(pref_name, PRS_GUI_FONT_NAME_2) == 0) {
+    if (prefs.gui_font_name2 != NULL)
+      g_free(prefs.gui_font_name2);
+    prefs.gui_font_name2 = g_strdup(value);
+  } else if (strcmp(pref_name, PRS_GUI_MARKED_FG) == 0) {
+    cval = strtoul(value, NULL, 16);
+    prefs.gui_marked_fg.pixel = 0;
+    prefs.gui_marked_fg.red   = RED_COMPONENT(cval);
+    prefs.gui_marked_fg.green = GREEN_COMPONENT(cval);
+    prefs.gui_marked_fg.blue  = BLUE_COMPONENT(cval);
+  } else if (strcmp(pref_name, PRS_GUI_MARKED_BG) == 0) {
+    cval = strtoul(value, NULL, 16);
+    prefs.gui_marked_bg.pixel = 0;
+    prefs.gui_marked_bg.red   = RED_COMPONENT(cval);
+    prefs.gui_marked_bg.green = GREEN_COMPONENT(cval);
+    prefs.gui_marked_bg.blue  = BLUE_COMPONENT(cval);
+  } else if (strcmp(pref_name, PRS_GUI_GEOMETRY_SAVE_POSITION) == 0) {
+    if (strcasecmp(value, "true") == 0) {
+	    prefs.gui_geometry_save_position = TRUE;
+    }
+    else {
+	    prefs.gui_geometry_save_position = FALSE;
+    }
+  } else if (strcmp(pref_name, PRS_GUI_GEOMETRY_SAVE_SIZE) == 0) {
+    if (strcasecmp(value, "true") == 0) {
+	    prefs.gui_geometry_save_size = TRUE;
+    }
+    else {
+	    prefs.gui_geometry_save_size = FALSE;
+    }
+  } else if (strcmp(pref_name, PRS_GUI_GEOMETRY_SAVE_MAXIMIZED) == 0) {
+    if (strcasecmp(value, "true") == 0) {
+	    prefs.gui_geometry_save_maximized = TRUE;
+    }
+    else {
+	    prefs.gui_geometry_save_maximized = FALSE;
+    }
+  } else if (strcmp(pref_name, PRS_GUI_GEOMETRY_MAIN_X) == 0) {         /* deprecated */
+  } else if (strcmp(pref_name, PRS_GUI_GEOMETRY_MAIN_Y) == 0) {         /* deprecated */
+  } else if (strcmp(pref_name, PRS_GUI_GEOMETRY_MAIN_WIDTH) == 0) {     /* deprecated */
+  } else if (strcmp(pref_name, PRS_GUI_GEOMETRY_MAIN_HEIGHT) == 0) {    /* deprecated */
+  } else if (strcmp(pref_name, PRS_GUI_CONSOLE_OPEN) == 0) {
+    prefs.gui_console_open =
+	find_index_from_string_array(value, gui_console_open_text,
+				     console_open_never);
+  } else if (strcmp(pref_name, PRS_GUI_RECENT_COUNT_MAX) == 0) {
+    prefs.gui_recent_files_count_max = strtoul(value, NULL, 10);
+    if (prefs.gui_recent_files_count_max == 0) {
+      /* We really should put up a dialog box here ... */
+      prefs.gui_recent_files_count_max = 10;
+    }
+  } else if (strcmp(pref_name, PRS_GUI_FILEOPEN_STYLE) == 0) {
+    prefs.gui_fileopen_style =
+	find_index_from_string_array(value, gui_fileopen_style_text,
+				     FO_STYLE_LAST_OPENED);
+  } else if (strcmp(pref_name, PRS_GUI_FILEOPEN_DIR) == 0) {
+    if (prefs.gui_fileopen_dir != NULL)
+      g_free(prefs.gui_fileopen_dir);
+    prefs.gui_fileopen_dir = g_strdup(value);
+  } else if (strcmp(pref_name, PRS_GUI_FILEOPEN_REMEMBERED_DIR) == 0) { /* deprecated */
+  } else if (strcmp(pref_name, PRS_GUI_FILEOPEN_PREVIEW) == 0) {
+    prefs.gui_fileopen_preview = strtoul(value, NULL, 10);
+  } else if (strcmp(pref_name, PRS_GUI_ASK_UNSAVED) == 0) {
+    if (strcasecmp(value, "true") == 0) {
+	    prefs.gui_ask_unsaved = TRUE;
+    }
+    else {
+	    prefs.gui_ask_unsaved = FALSE;
+    }
+  } else if (strcmp(pref_name, PRS_GUI_FIND_WRAP) == 0) {
+    if (strcasecmp(value, "true") == 0) {
+	    prefs.gui_find_wrap = TRUE;
+    }
+    else {
+	    prefs.gui_find_wrap = FALSE;
+    }
+  } else if (strcmp(pref_name, PRS_GUI_WEBBROWSER) == 0) {
+    g_free(prefs.gui_webbrowser);
+    prefs.gui_webbrowser = g_strdup(value);
+  } else if (strcmp(pref_name, PRS_GUI_LAYOUT_TYPE) == 0) {
+    prefs.gui_layout_type = strtoul(value, NULL, 10);
+    if (prefs.gui_layout_type == layout_unused ||
+        prefs.gui_layout_type >= layout_type_max) {
+      /* XXX - report an error?  It's not a syntax error - we'd need to
+         add a way of reporting a *semantic* error. */
+      prefs.gui_layout_type = layout_type_5;
+    }
+  } else if (strcmp(pref_name, PRS_GUI_LAYOUT_CONTENT_1) == 0) {
+    prefs.gui_layout_content_1 =
+	find_index_from_string_array(value, gui_layout_content_text, 0);
+  } else if (strcmp(pref_name, PRS_GUI_LAYOUT_CONTENT_2) == 0) {
+    prefs.gui_layout_content_2 =
+	find_index_from_string_array(value, gui_layout_content_text, 0);
+  } else if (strcmp(pref_name, PRS_GUI_LAYOUT_CONTENT_3) == 0) {
+    prefs.gui_layout_content_3 =
+	find_index_from_string_array(value, gui_layout_content_text, 0);
+
+/* handle the capture options */
+  } else if (strcmp(pref_name, PRS_CAP_DEVICE) == 0) {
+    if (prefs.capture_device != NULL)
+      g_free(prefs.capture_device);
+    prefs.capture_device = g_strdup(value);
+  } else if (strcmp(pref_name, PRS_CAP_DEVICES_DESCR) == 0) {
+    if (prefs.capture_devices_descr != NULL)
+      g_free(prefs.capture_devices_descr);
+    prefs.capture_devices_descr = g_strdup(value);
+  } else if (strcmp(pref_name, PRS_CAP_DEVICES_HIDE) == 0) {
+    if (prefs.capture_devices_hide != NULL)
+      g_free(prefs.capture_devices_hide);
+    prefs.capture_devices_hide = g_strdup(value);
+  } else if (strcmp(pref_name, PRS_CAP_PROM_MODE) == 0) {
+    prefs.capture_prom_mode = ((strcasecmp(value, "true") == 0)?TRUE:FALSE);
+  } else if (strcmp(pref_name, PRS_CAP_REAL_TIME) == 0) {
+    prefs.capture_real_time = ((strcasecmp(value, "true") == 0)?TRUE:FALSE);
+  } else if (strcmp(pref_name, PRS_CAP_AUTO_SCROLL) == 0) {
+    prefs.capture_auto_scroll = ((strcasecmp(value, "true") == 0)?TRUE:FALSE);
+  } else if (strcmp(pref_name, PRS_CAP_SHOW_INFO) == 0) {
+    prefs.capture_show_info = ((strcasecmp(value, "true") == 0)?TRUE:FALSE);
+
+/* handle the global options */
+  } else if (strcmp(pref_name, PRS_NAME_RESOLVE) == 0 ||
+	     strcmp(pref_name, PRS_CAP_NAME_RESOLVE) == 0) {
+    /*
+     * "TRUE" and "FALSE", for backwards compatibility, are synonyms for
+     * RESOLV_ALL and RESOLV_NONE.
+     *
+     * Otherwise, we treat it as a list of name types we want to resolve.
+     */
+    if (strcasecmp(value, "true") == 0)
+      prefs.name_resolve = RESOLV_ALL;
+    else if (strcasecmp(value, "false") == 0)
+      prefs.name_resolve = RESOLV_NONE;
+    else {
+      prefs.name_resolve = RESOLV_NONE;	/* start out with none set */
+      if (string_to_name_resolve(value, &prefs.name_resolve) != '\0')
+        return PREFS_SET_SYNTAX_ERR;
+    }
+  } else if (strcmp(pref_name, PRS_NAME_RESOLVE_CONCURRENCY) == 0) {
+    prefs.name_resolve_concurrency = strtol(value, NULL, 10);
+  } else {
+    /* To which module does this preference belong? */
+    module = NULL;
+    last_dotp = pref_name;
+    had_a_dot = FALSE;
+    while (!module) {
+        dotp = strchr(last_dotp, '.');
+        if (dotp == NULL) {
+            if (had_a_dot) {
+              /* no such module */
+              return PREFS_SET_NO_SUCH_PREF;
+            }
+            else {
+              /* no ".", so no module/name separator */
+              return PREFS_SET_SYNTAX_ERR;
+            }
+        }
+        else {
+            had_a_dot = TRUE;
+        }
+        *dotp = '\0';		/* separate module and preference name */
+        module = find_module(pref_name);
+
+        /*
+         * XXX - "Diameter" rather than "diameter" was used in earlier
+         * versions of Ethereal; if we didn't find the module, and its name
+         * was "Diameter", look for "diameter" instead.
+         *
+         * In addition, the BEEP protocol used to be the BXXP protocol,
+         * so if we didn't find the module, and its name was "bxxp",
+         * look for "beep" instead.
+         *
+         * Also, the preferences for GTP v0 and v1 were combined under
+         * a single "gtp" heading, and the preferences for SMPP were
+         * moved to "smpp-gsm-sms" and then moved to "gsm-sms-ud".
+         * However, SMPP now has its own preferences, so we just map
+         * "smpp-gsm-sms" to "gsm-sms-ud", and then handle SMPP below.
+         */
+        if (module == NULL) {
+          if (strcmp(pref_name, "Diameter") == 0)
+            module = find_module("diameter");
+          else if (strcmp(pref_name, "bxxp") == 0)
+            module = find_module("beep");
+          else if (strcmp(pref_name, "gtpv0") == 0 ||
+                   strcmp(pref_name, "gtpv1") == 0)
+            module = find_module("gtp");
+          else if (strcmp(pref_name, "smpp-gsm-sms") == 0)
+            module = find_module("gsm-sms-ud");
+        }
+        *dotp = '.';		/* put the preference string back */
+        dotp++;			/* skip past separator to preference name */
+        last_dotp = dotp;
+    }
+
+    pref = find_preference(module, dotp);
+
+    if (pref == NULL) {
+      if (strcmp(module->name, "mgcp") == 0) {
+        /*
+         * XXX - "mgcp.display raw text toggle" and "mgcp.display dissect tree"
+         * rather than "mgcp.display_raw_text" and "mgcp.display_dissect_tree"
+         * were used in earlier versions of Ethereal; if we didn't find the
+         * preference, it was an MGCP preference, and its name was
+         * "display raw text toggle" or "display dissect tree", look for
+         * "display_raw_text" or "display_dissect_tree" instead.
+         *
+         * "mgcp.tcp.port" and "mgcp.udp.port" are harder to handle, as both
+         * the gateway and callagent ports were given those names; we interpret
+         * the first as "mgcp.{tcp,udp}.gateway_port" and the second as
+         * "mgcp.{tcp,udp}.callagent_port", as that's the order in which
+         * they were registered by the MCCP dissector and thus that's the
+         * order in which they were written to the preferences file.  (If
+         * we're not reading the preferences file, but are handling stuff
+         * from a "-o" command-line option, we have no clue which the user
+         * had in mind - they should have used "mgcp.{tcp,udp}.gateway_port"
+         * or "mgcp.{tcp,udp}.callagent_port" instead.)
+         */
+        if (strcmp(dotp, "display raw text toggle") == 0)
+          pref = find_preference(module, "display_raw_text");
+        else if (strcmp(dotp, "display dissect tree") == 0)
+          pref = find_preference(module, "display_dissect_tree");
+        else if (strcmp(dotp, "tcp.port") == 0) {
+          mgcp_tcp_port_count++;
+          if (mgcp_tcp_port_count == 1) {
+            /* It's the first one */
+            pref = find_preference(module, "tcp.gateway_port");
+ 	  } else if (mgcp_tcp_port_count == 2) {
+            /* It's the second one */
+            pref = find_preference(module, "tcp.callagent_port");
+	  }
+          /* Otherwise it's from the command line, and we don't bother
+             mapping it. */
+	} else if (strcmp(dotp, "udp.port") == 0) {
+          mgcp_udp_port_count++;
+          if (mgcp_udp_port_count == 1) {
+            /* It's the first one */
+            pref = find_preference(module, "udp.gateway_port");
+	  } else if (mgcp_udp_port_count == 2) {
+            /* It's the second one */
+            pref = find_preference(module, "udp.callagent_port");
+	  }
+          /* Otherwise it's from the command line, and we don't bother
+             mapping it. */
+	}
+      } else if (strcmp(module->name, "smb") == 0) {
+        /* Handle old names for SMB preferences. */
+        if (strcmp(dotp, "smb.trans.reassembly") == 0)
+          pref = find_preference(module, "trans_reassembly");
+        else if (strcmp(dotp, "smb.dcerpc.reassembly") == 0)
+          pref = find_preference(module, "dcerpc_reassembly");
+      } else if (strcmp(module->name, "ndmp") == 0) {
+        /* Handle old names for NDMP preferences. */
+        if (strcmp(dotp, "ndmp.desegment") == 0)
+          pref = find_preference(module, "desegment");
+      } else if (strcmp(module->name, "diameter") == 0) {
+        /* Handle old names for Diameter preferences. */
+        if (strcmp(dotp, "diameter.desegment") == 0)
+          pref = find_preference(module, "desegment");
+      } else if (strcmp(module->name, "pcli") == 0) {
+        /* Handle old names for PCLI preferences. */
+        if (strcmp(dotp, "pcli.udp_port") == 0)
+          pref = find_preference(module, "udp_port");
+      } else if (strcmp(module->name, "artnet") == 0) {
+        /* Handle old names for ARTNET preferences. */
+        if (strcmp(dotp, "artnet.udp_port") == 0)
+          pref = find_preference(module, "udp_port");
+      } else if (strcmp(module->name, "mapi") == 0) {
+        /* Handle old names for MAPI preferences. */
+        if (strcmp(dotp, "mapi_decrypt") == 0)
+          pref = find_preference(module, "decrypt");
+      } else if (strcmp(module->name, "fc") == 0) {
+        /* Handle old names for Fibre Channel preferences. */
+        if (strcmp(dotp, "reassemble_fc") == 0)
+          pref = find_preference(module, "reassemble");
+        else if (strcmp(dotp, "fc_max_frame_size") == 0)
+          pref = find_preference(module, "max_frame_size");
+      } else if (strcmp(module->name, "fcip") == 0) {
+        /* Handle old names for Fibre Channel-over-IP preferences. */
+        if (strcmp(dotp, "desegment_fcip_messages") == 0)
+          pref = find_preference(module, "desegment");
+        else if (strcmp(dotp, "fcip_port") == 0)
+          pref = find_preference(module, "target_port");
+      } else if (strcmp(module->name, "gtp") == 0) {
+        /* Handle old names for GTP preferences. */
+        if (strcmp(dotp, "gtpv0_port") == 0)
+          pref = find_preference(module, "v0_port");
+        else if (strcmp(dotp, "gtpv1c_port") == 0)
+          pref = find_preference(module, "v1c_port");
+        else if (strcmp(dotp, "gtpv1u_port") == 0)
+          pref = find_preference(module, "v1u_port");
+        else if (strcmp(dotp, "gtp_dissect_tpdu") == 0)
+          pref = find_preference(module, "dissect_tpdu");
+        else if (strcmp(dotp, "gtpv0_dissect_cdr_as") == 0)
+          pref = find_preference(module, "v0_dissect_cdr_as");
+        else if (strcmp(dotp, "gtpv0_check_etsi") == 0)
+          pref = find_preference(module, "v0_check_etsi");
+        else if (strcmp(dotp, "gtpv1_check_etsi") == 0)
+          pref = find_preference(module, "v1_check_etsi");
+      } else if (strcmp(module->name, "ip") == 0) {
+        /* Handle old names for IP preferences. */
+        if (strcmp(dotp, "ip_summary_in_tree") == 0)
+          pref = find_preference(module, "summary_in_tree");
+      } else if (strcmp(module->name, "iscsi") == 0) {
+        /* Handle old names for iSCSI preferences. */
+        if (strcmp(dotp, "iscsi_port") == 0)
+          pref = find_preference(module, "target_port");
+      } else if (strcmp(module->name, "lmp") == 0) {
+        /* Handle old names for LMP preferences. */
+        if (strcmp(dotp, "lmp_version") == 0)
+          pref = find_preference(module, "version");
+      } else if (strcmp(module->name, "mtp3") == 0) {
+        /* Handle old names for MTP3 preferences. */
+        if (strcmp(dotp, "mtp3_standard") == 0)
+          pref = find_preference(module, "standard");
+      } else if (strcmp(module->name, "nlm") == 0) {
+        /* Handle old names for NLM preferences. */
+        if (strcmp(dotp, "nlm_msg_res_matching") == 0)
+          pref = find_preference(module, "msg_res_matching");
+      } else if (strcmp(module->name, "ppp") == 0) {
+        /* Handle old names for PPP preferences. */
+        if (strcmp(dotp, "ppp_fcs") == 0)
+          pref = find_preference(module, "fcs_type");
+        else if (strcmp(dotp, "ppp_vj") == 0)
+          pref = find_preference(module, "decompress_vj");
+      } else if (strcmp(module->name, "rsvp") == 0) {
+        /* Handle old names for RSVP preferences. */
+        if (strcmp(dotp, "rsvp_process_bundle") == 0)
+          pref = find_preference(module, "process_bundle");
+      } else if (strcmp(module->name, "tcp") == 0) {
+        /* Handle old names for TCP preferences. */
+        if (strcmp(dotp, "tcp_summary_in_tree") == 0)
+          pref = find_preference(module, "summary_in_tree");
+        else if (strcmp(dotp, "tcp_analyze_sequence_numbers") == 0)
+          pref = find_preference(module, "analyze_sequence_numbers");
+        else if (strcmp(dotp, "tcp_relative_sequence_numbers") == 0)
+          pref = find_preference(module, "relative_sequence_numbers");
+      } else if (strcmp(module->name, "udp") == 0) {
+        /* Handle old names for UDP preferences. */
+        if (strcmp(dotp, "udp_summary_in_tree") == 0)
+          pref = find_preference(module, "summary_in_tree");
+      } else if (strcmp(module->name, "ndps") == 0) {
+        /* Handle old names for NDPS preferences. */
+        if (strcmp(dotp, "desegment_ndps") == 0)
+          pref = find_preference(module, "desegment_tcp");
+      } else if (strcmp(module->name, "http") == 0) {
+        /* Handle old names for HTTP preferences. */
+        if (strcmp(dotp, "desegment_http_headers") == 0)
+          pref = find_preference(module, "desegment_headers");
+        else if (strcmp(dotp, "desegment_http_body") == 0)
+          pref = find_preference(module, "desegment_body");
+      } else if (strcmp(module->name, "smpp") == 0) {
+        /* Handle preferences that moved from SMPP. */
+        module_t *new_module = find_module("gsm-sms-ud");
+        if (strcmp(dotp, "port_number_udh_means_wsp") == 0)
+          pref = find_preference(new_module, "port_number_udh_means_wsp");
+        else if (strcmp(dotp, "try_dissect_1st_fragment") == 0)
+          pref = find_preference(new_module, "try_dissect_1st_fragment");
+      } else if (strcmp(module->name, "asn1") == 0) {
+        /* Handle old generic ASN.1 preferences (it's not really a
+           rename, as the new preferences support multiple ports,
+           but we might as well copy them over). */
+        if (strcmp(dotp, "tcp_port") == 0)
+          pref = find_preference(module, "tcp_ports");
+        else if (strcmp(dotp, "udp_port") == 0)
+          pref = find_preference(module, "udp_ports");
+        else if (strcmp(dotp, "sctp_port") == 0)
+          pref = find_preference(module, "sctp_ports");
+      }
+    }
+    if (pref == NULL)
+      return PREFS_SET_NO_SUCH_PREF;	/* no such preference */
+
+    switch (pref->type) {
+
+    case PREF_UINT:
+      uval = strtoul(value, &p, pref->info.base);
+      if (p == value || *p != '\0')
+        return PREFS_SET_SYNTAX_ERR;	/* number was bad */
+      if (*pref->varp.uint != uval) {
+        module->prefs_changed = TRUE;
+        *pref->varp.uint = uval;
+      }
+      break;
+
+    case PREF_BOOL:
+      /* XXX - give an error if it's neither "true" nor "false"? */
+      if (strcasecmp(value, "true") == 0)
+        bval = TRUE;
+      else
+        bval = FALSE;
+      if (*pref->varp.boolp != bval) {
+	module->prefs_changed = TRUE;
+	*pref->varp.boolp = bval;
+      }
+      break;
+
+    case PREF_ENUM:
+      /* XXX - give an error if it doesn't match? */
+      enum_val = find_val_for_string(value,
+					pref->info.enum_info.enumvals, 1);
+      if (*pref->varp.enump != enum_val) {
+	module->prefs_changed = TRUE;
+	*pref->varp.enump = enum_val;
+      }
+      break;
+
+    case PREF_STRING:
+      if (strcmp(*pref->varp.string, value) != 0) {
+        module->prefs_changed = TRUE;
+        g_free(*pref->varp.string);
+        *pref->varp.string = g_strdup(value);
+      }
+      break;
+
+    case PREF_RANGE:
+    {
+      range_t *newrange;
+
+      if (range_convert_str(&newrange, value, pref->info.max_value) !=
+          CVT_NO_ERROR) {
+        /* XXX - distinguish between CVT_SYNTAX_ERROR and
+           CVT_NUMBER_TOO_BIG */
+        return PREFS_SET_SYNTAX_ERR;	/* number was bad */
+      }
+
+      if (!ranges_are_equal(*pref->varp.range, newrange)) {
+	module->prefs_changed = TRUE;
+	g_free(*pref->varp.range);
+	*pref->varp.range = newrange;
+      }
+      break;
+    }
+
+    case PREF_OBSOLETE:
+      return PREFS_SET_OBSOLETE;	/* no such preference any more */
+    }
+  }
+
+  return PREFS_SET_OK;
+}
+
+typedef struct {
+	module_t *module;
+	FILE	*pf;
+} write_pref_arg_t;
+
+/*
+ * Write out a single preference.
+ */
+static void
+write_pref(gpointer data, gpointer user_data)
+{
+	pref_t *pref = data;
+	write_pref_arg_t *arg = user_data;
+	const enum_val_t *enum_valp;
+	const char *val_string;
+
+	if (pref->type == PREF_OBSOLETE) {
+		/*
+		 * This preference is no longer supported; it's not a
+		 * real preference, so we don't write it out (i.e., we
+		 * treat it as if it weren't found in the list of
+		 * preferences, and we weren't called in the first place).
+		 */
+		return;
+	}
+
+	fprintf(arg->pf, "\n# %s\n", pref->description);
+
+	switch (pref->type) {
+
+	case PREF_UINT:
+		switch (pref->info.base) {
+
+		case 10:
+			fprintf(arg->pf, "# A decimal number.\n");
+			fprintf(arg->pf, "%s.%s: %u\n", arg->module->name,
+			    pref->name, *pref->varp.uint);
+			break;
+
+		case 8:
+			fprintf(arg->pf, "# An octal number.\n");
+			fprintf(arg->pf, "%s.%s: %#o\n", arg->module->name,
+			    pref->name, *pref->varp.uint);
+			break;
+
+		case 16:
+			fprintf(arg->pf, "# A hexadecimal number.\n");
+			fprintf(arg->pf, "%s.%s: %#x\n", arg->module->name,
+			    pref->name, *pref->varp.uint);
+			break;
+		}
+		break;
+
+	case PREF_BOOL:
+		fprintf(arg->pf, "# TRUE or FALSE (case-insensitive).\n");
+		fprintf(arg->pf, "%s.%s: %s\n", arg->module->name, pref->name,
+		    *pref->varp.boolp ? "TRUE" : "FALSE");
+		break;
+
+	case PREF_ENUM:
+		/*
+		 * For now, we save the "description" value, so that if we
+		 * save the preferences older versions of Ethereal can at
+		 * least read preferences that they supported; we support
+		 * either the short name or the description when reading
+		 * the preferences file or a "-o" option.
+		 */
+		fprintf(arg->pf, "# One of: ");
+		enum_valp = pref->info.enum_info.enumvals;
+		val_string = NULL;
+		while (enum_valp->name != NULL) {
+			if (enum_valp->value == *pref->varp.enump)
+				val_string = enum_valp->description;
+			fprintf(arg->pf, "%s", enum_valp->description);
+			enum_valp++;
+			if (enum_valp->name == NULL)
+				fprintf(arg->pf, "\n");
+			else
+				fprintf(arg->pf, ", ");
+		}
+		fprintf(arg->pf, "# (case-insensitive).\n");
+		fprintf(arg->pf, "%s.%s: %s\n", arg->module->name,
+		    pref->name, val_string);
+		break;
+
+	case PREF_STRING:
+		fprintf(arg->pf, "# A string.\n");
+		fprintf(arg->pf, "%s.%s: %s\n", arg->module->name, pref->name,
+		    *pref->varp.string);
+		break;
+
+	case PREF_RANGE:
+	{
+		char *range_string;
+
+		range_string = range_convert_range(*pref->varp.range);
+		fprintf(arg->pf, "# A string denoting an positive integer range (e.g., \"1-20,30-40\").\n");
+		fprintf(arg->pf, "%s.%s: %s\n", arg->module->name, pref->name,
+			range_string);
+		g_free(range_string);
+		break;
+	}
+
+	case PREF_OBSOLETE:
+		g_assert_not_reached();
+		break;
+	}
+}
+
+static void
+write_module_prefs(gpointer data, gpointer user_data)
+{
+	write_pref_arg_t arg;
+
+	arg.module = data;
+	arg.pf = user_data;
+	g_list_foreach(arg.module->prefs, write_pref, &arg);
+}
+
+/* Write out "prefs" to the user's preferences file, and return 0.
+
+   If we got an error, stuff a pointer to the path of the preferences file
+   into "*pf_path_return", and return the errno. */
+int
+write_prefs(char **pf_path_return)
+{
+  char        *pf_path;
+  FILE        *pf;
+  GList       *clp, *col_l;
+  fmt_data    *cfmt;
+
+  /* To do:
+   * - Split output lines longer than MAX_VAL_LEN
+   * - Create a function for the preference directory check/creation
+   *   so that duplication can be avoided with filter.c
+   */
+
+  pf_path = get_persconffile_path(PF_NAME, TRUE);
+  if ((pf = fopen(pf_path, "w")) == NULL) {
+    *pf_path_return = pf_path;
+    return errno;
+  }
+
+  fputs("# Configuration file for Ethereal " VERSION ".\n"
+    "#\n"
+    "# This file is regenerated each time preferences are saved within\n"
+    "# Ethereal.  Making manual changes should be safe, however.\n", pf);
+
+  fprintf (pf, "\n######## User Interface ########\n");
+  
+  fprintf(pf, "\n# Vertical scrollbars should be on right side?\n");
+  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
+  fprintf(pf, PRS_GUI_SCROLLBAR_ON_RIGHT ": %s\n",
+		  prefs.gui_scrollbar_on_right == TRUE ? "TRUE" : "FALSE");
+
+  fprintf(pf, "\n# Packet-list selection bar can be used to browse w/o selecting?\n");
+  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
+  fprintf(pf, PRS_GUI_PLIST_SEL_BROWSE ": %s\n",
+		  prefs.gui_plist_sel_browse == TRUE ? "TRUE" : "FALSE");
+
+  fprintf(pf, "\n# Protocol-tree selection bar can be used to browse w/o selecting?\n");
+  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
+  fprintf(pf, PRS_GUI_PTREE_SEL_BROWSE ": %s\n",
+		  prefs.gui_ptree_sel_browse == TRUE ? "TRUE" : "FALSE");
+
+  fprintf(pf, "\n# Alternating colors in TreeViews?\n");
+  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
+  fprintf(pf, PRS_GUI_ALTERN_COLORS ": %s\n",
+		  prefs.gui_altern_colors == TRUE ? "TRUE" : "FALSE");
+
+  fprintf(pf, "\n# Place filter toolbar inside the statusbar?\n");
+  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
+  fprintf(pf, PRS_GUI_FILTER_TOOLBAR_IN_STATUSBAR ": %s\n",
+                 prefs.filter_toolbar_show_in_statusbar == TRUE ? "TRUE" : "FALSE");
+
+  fprintf(pf, "\n# Protocol-tree line style.\n");
+  fprintf(pf, "# One of: NONE, SOLID, DOTTED, TABBED\n");
+  fprintf(pf, PRS_GUI_PTREE_LINE_STYLE ": %s\n",
+          gui_ptree_line_style_text[prefs.gui_ptree_line_style]);
+
+  fprintf(pf, "\n# Protocol-tree expander style.\n");
+  fprintf(pf, "# One of: NONE, SQUARE, TRIANGLE, CIRCULAR\n");
+  fprintf(pf, PRS_GUI_PTREE_EXPANDER_STYLE ": %s\n",
+		  gui_ptree_expander_style_text[prefs.gui_ptree_expander_style]);
+
+  fprintf(pf, "\n# Hex dump highlight style.\n");
+  fprintf(pf, "# One of: BOLD, INVERSE\n");
+  fprintf(pf, PRS_GUI_HEX_DUMP_HIGHLIGHT_STYLE ": %s\n",
+		  gui_hex_dump_highlight_style_text[prefs.gui_hex_dump_highlight_style]);
+
+  fprintf(pf, "\n# Main Toolbar style.\n");
+  fprintf(pf, "# One of: ICONS, TEXT, BOTH\n");
+  fprintf(pf, PRS_GUI_TOOLBAR_MAIN_STYLE ": %s\n",
+		  gui_toolbar_style_text[prefs.gui_toolbar_main_style]);
+
+  fprintf(pf, "\n# Save window position at exit?\n");
+  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
+  fprintf(pf, PRS_GUI_GEOMETRY_SAVE_POSITION ": %s\n",
+		  prefs.gui_geometry_save_position == TRUE ? "TRUE" : "FALSE");
+
+  fprintf(pf, "\n# Save window size at exit?\n");
+  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
+  fprintf(pf, PRS_GUI_GEOMETRY_SAVE_SIZE ": %s\n",
+		  prefs.gui_geometry_save_size == TRUE ? "TRUE" : "FALSE");
+                  
+  fprintf(pf, "\n# Save window maximized state at exit (GTK2 only)?\n");
+  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
+  fprintf(pf, PRS_GUI_GEOMETRY_SAVE_MAXIMIZED ": %s\n",
+		  prefs.gui_geometry_save_maximized == TRUE ? "TRUE" : "FALSE");
+                  
+  fprintf(pf, "\n# Open a console window (WIN32 only)?\n");
+  fprintf(pf, "# One of: NEVER, AUTOMATIC, ALWAYS\n");
+  fprintf(pf, PRS_GUI_CONSOLE_OPEN ": %s\n",
+		  gui_console_open_text[prefs.gui_console_open]);
+
+  fprintf(pf, "\n# The max. number of items in the open recent files list.\n");
+  fprintf(pf, "# A decimal number.\n");
+  fprintf(pf, PRS_GUI_RECENT_COUNT_MAX ": %d\n",
+	          prefs.gui_recent_files_count_max);
+
+  fprintf(pf, "\n# Where to start the File Open dialog box.\n");
+  fprintf(pf, "# One of: LAST_OPENED, SPECIFIED\n");
+  fprintf(pf, PRS_GUI_FILEOPEN_STYLE ": %s\n",
+		  gui_fileopen_style_text[prefs.gui_fileopen_style]);
+
+  if (prefs.gui_fileopen_dir != NULL) {
+    fprintf(pf, "\n# Directory to start in when opening File Open dialog.\n");
+    fprintf(pf, PRS_GUI_FILEOPEN_DIR ": %s\n",
+                  prefs.gui_fileopen_dir);
+  }
+
+  fprintf(pf, "\n# The preview timeout in the File Open dialog.\n");
+  fprintf(pf, "# A decimal number (in seconds).\n");
+  fprintf(pf, PRS_GUI_FILEOPEN_PREVIEW ": %d\n",
+	          prefs.gui_fileopen_preview);
+  
+  fprintf(pf, "\n# Ask to save unsaved capture files?\n");
+  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
+  fprintf(pf, PRS_GUI_ASK_UNSAVED ": %s\n",
+		  prefs.gui_ask_unsaved == TRUE ? "TRUE" : "FALSE");                  
+
+  fprintf(pf, "\n# Wrap to beginning/end of file during search?\n");
+  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
+  fprintf(pf, PRS_GUI_FIND_WRAP ": %s\n",
+		  prefs.gui_find_wrap == TRUE ? "TRUE" : "FALSE");                  
+
+  fprintf(pf, "\n# The path to the webbrowser.\n");
+  fprintf(pf, "# Ex: mozilla %%s\n");
+  fprintf(pf, PRS_GUI_WEBBROWSER ": %s\n", prefs.gui_webbrowser);
+
+  fprintf (pf, "\n######## User Interface: Layout ########\n");
+
+  fprintf(pf, "\n# Layout type (1-6).\n");
+  fprintf(pf, PRS_GUI_LAYOUT_TYPE ": %d\n",
+	          prefs.gui_layout_type);
+
+  fprintf(pf, "\n# Layout content of the panes (1-3).\n");
+  fprintf(pf, "# One of: NONE, PLIST, PDETAILS, PBYTES\n");
+  fprintf(pf, PRS_GUI_LAYOUT_CONTENT_1 ": %s\n",
+	          gui_layout_content_text[prefs.gui_layout_content_1]);
+  fprintf(pf, PRS_GUI_LAYOUT_CONTENT_2 ": %s\n",
+	          gui_layout_content_text[prefs.gui_layout_content_2]);
+  fprintf(pf, PRS_GUI_LAYOUT_CONTENT_3 ": %s\n",
+	          gui_layout_content_text[prefs.gui_layout_content_3]);
+
+  fprintf (pf, "\n######## User Interface: Columns ########\n");
+  
+  clp = prefs.col_list;
+  col_l = NULL;
+  while (clp) {
+    cfmt = (fmt_data *) clp->data;
+    col_l = g_list_append(col_l, cfmt->title);
+    col_l = g_list_append(col_l, cfmt->fmt);
+    clp = clp->next;
+  }
+  fprintf (pf, "\n# Packet list column format.\n");
+  fprintf (pf, "# Each pair of strings consists of a column title and its format.\n");
+  fprintf (pf, "%s: %s\n", PRS_COL_FMT, put_string_list(col_l));
+  /* This frees the list of strings, but not the strings to which it
+     refers; that's what we want, as we haven't copied those strings,
+     we just referred to them.  */
+  g_list_free(col_l);
+
+  fprintf (pf, "\n######## User Interface: Font ########\n");
+
+  fprintf(pf, "\n# Font name for packet list, protocol tree, and hex dump panes (GTK version 1).\n");
+  fprintf(pf, PRS_GUI_FONT_NAME_1 ": %s\n", prefs.gui_font_name1);
+
+  fprintf(pf, "\n# Font name for packet list, protocol tree, and hex dump panes (GTK version 2).\n");
+  fprintf(pf, PRS_GUI_FONT_NAME_2 ": %s\n", prefs.gui_font_name2);
+
+  fprintf (pf, "\n######## User Interface: Colors ########\n");
+
+  fprintf (pf, "\n# Color preferences for a marked frame.\n");
+  fprintf (pf, "# Each value is a six digit hexadecimal color value in the form rrggbb.\n");
+  fprintf (pf, "%s: %02x%02x%02x\n", PRS_GUI_MARKED_FG,
+    (prefs.gui_marked_fg.red * 255 / 65535),
+    (prefs.gui_marked_fg.green * 255 / 65535),
+    (prefs.gui_marked_fg.blue * 255 / 65535));
+  fprintf (pf, "%s: %02x%02x%02x\n", PRS_GUI_MARKED_BG,
+    (prefs.gui_marked_bg.red * 255 / 65535),
+    (prefs.gui_marked_bg.green * 255 / 65535),
+    (prefs.gui_marked_bg.blue * 255 / 65535));
+
+  fprintf (pf, "\n# TCP stream window color preferences.\n");
+  fprintf (pf, "# Each value is a six digit hexadecimal color value in the form rrggbb.\n");
+  fprintf (pf, "%s: %02x%02x%02x\n", PRS_STREAM_CL_FG,
+    (prefs.st_client_fg.red * 255 / 65535),
+    (prefs.st_client_fg.green * 255 / 65535),
+    (prefs.st_client_fg.blue * 255 / 65535));
+  fprintf (pf, "%s: %02x%02x%02x\n", PRS_STREAM_CL_BG,
+    (prefs.st_client_bg.red * 255 / 65535),
+    (prefs.st_client_bg.green * 255 / 65535),
+    (prefs.st_client_bg.blue * 255 / 65535));
+  fprintf (pf, "%s: %02x%02x%02x\n", PRS_STREAM_SR_FG,
+    (prefs.st_server_fg.red * 255 / 65535),
+    (prefs.st_server_fg.green * 255 / 65535),
+    (prefs.st_server_fg.blue * 255 / 65535));
+  fprintf (pf, "%s: %02x%02x%02x\n", PRS_STREAM_SR_BG,
+    (prefs.st_server_bg.red * 255 / 65535),
+    (prefs.st_server_bg.green * 255 / 65535),
+    (prefs.st_server_bg.blue * 255 / 65535));
+
+  fprintf(pf, "\n####### Capture ########\n");
+  
+  if (prefs.capture_device != NULL) {
+    fprintf(pf, "\n# Default capture device\n");
+    fprintf(pf, PRS_CAP_DEVICE ": %s\n", prefs.capture_device);
+  }
+
+  if (prefs.capture_devices_descr != NULL) {
+    fprintf(pf, "\n# Interface descriptions.\n");
+    fprintf(pf, "# Ex: eth0(eth0 descr),eth1(eth1 descr),...\n");
+    fprintf(pf, PRS_CAP_DEVICES_DESCR ": %s\n", prefs.capture_devices_descr);
+  }
+
+  if (prefs.capture_devices_hide != NULL) {
+    fprintf(pf, "\n# Hide interface?\n");
+    fprintf(pf, "# Ex: eth0,eth3,...\n");
+    fprintf(pf, PRS_CAP_DEVICES_HIDE ": %s\n", prefs.capture_devices_hide);
+  }
+
+  fprintf(pf, "\n# Capture in promiscuous mode?\n");
+  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
+  fprintf(pf, PRS_CAP_PROM_MODE ": %s\n",
+		  prefs.capture_prom_mode == TRUE ? "TRUE" : "FALSE");
+
+  fprintf(pf, "\n# Update packet list in real time during capture?\n");
+  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
+  fprintf(pf, PRS_CAP_REAL_TIME ": %s\n",
+		  prefs.capture_real_time == TRUE ? "TRUE" : "FALSE");
+
+  fprintf(pf, "\n# Scroll packet list during capture?\n");
+  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
+  fprintf(pf, PRS_CAP_AUTO_SCROLL ": %s\n",
+		  prefs.capture_auto_scroll == TRUE ? "TRUE" : "FALSE");
+
+  fprintf(pf, "\n# Show capture info dialog while capturing?\n");
+  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
+  fprintf(pf, PRS_CAP_SHOW_INFO ": %s\n",
+		  prefs.capture_show_info == TRUE ? "TRUE" : "FALSE");
+
+  fprintf (pf, "\n######## Printing ########\n");
+
+  fprintf (pf, "\n# Can be one of \"text\" or \"postscript\".\n"
+    "print.format: %s\n", pr_formats[prefs.pr_format]);
+
+  fprintf (pf, "\n# Can be one of \"command\" or \"file\".\n"
+    "print.destination: %s\n", pr_dests[prefs.pr_dest]);
+
+  fprintf (pf, "\n# This is the file that gets written to when the "
+    "destination is set to \"file\"\n"
+    "%s: %s\n", PRS_PRINT_FILE, prefs.pr_file);
+
+  fprintf (pf, "\n# Output gets piped to this command when the destination "
+    "is set to \"command\"\n"
+    "%s: %s\n", PRS_PRINT_CMD, prefs.pr_cmd);
+
+  fprintf(pf, "\n####### Name Resolution ########\n");
+  
+  fprintf(pf, "\n# Resolve addresses to names?\n");
+  fprintf(pf, "# TRUE or FALSE (case-insensitive), or a list of address types to resolve.\n");
+  fprintf(pf, PRS_NAME_RESOLVE ": %s\n",
+		  name_resolve_to_string(prefs.name_resolve));
+
+  fprintf(pf, "\n# Name resolution concurrency.\n");
+  fprintf(pf, "# A decimal number.\n");
+  fprintf(pf, PRS_NAME_RESOLVE_CONCURRENCY ": %d\n",
+		  prefs.name_resolve_concurrency);
+
+  fprintf(pf, "\n####### Protocols ########\n");
+
+  g_list_foreach(modules, write_module_prefs, pf);
+
+  fclose(pf);
+
+  /* XXX - catch I/O errors (e.g. "ran out of disk space") and return
+     an error indication, or maybe write to a new preferences file and
+     rename that file on top of the old one only if there are not I/O
+     errors. */
+  return 0;
+}
+
+/* Copy a set of preferences. */
+void
+copy_prefs(e_prefs *dest, e_prefs *src)
+{
+  fmt_data *src_cfmt, *dest_cfmt;
+  GList *entry;
+
+  dest->pr_format = src->pr_format;
+  dest->pr_dest = src->pr_dest;
+  dest->pr_file = g_strdup(src->pr_file);
+  dest->pr_cmd = g_strdup(src->pr_cmd);
+  dest->col_list = NULL;
+  for (entry = src->col_list; entry != NULL; entry = g_list_next(entry)) {
+    src_cfmt = entry->data;
+    dest_cfmt = (fmt_data *) g_malloc(sizeof(fmt_data));
+    dest_cfmt->title = g_strdup(src_cfmt->title);
+    dest_cfmt->fmt = g_strdup(src_cfmt->fmt);
+    dest->col_list = g_list_append(dest->col_list, dest_cfmt);
+  }
+  dest->num_cols = src->num_cols;
+  dest->st_client_fg = src->st_client_fg;
+  dest->st_client_bg = src->st_client_bg;
+  dest->st_server_fg = src->st_server_fg;
+  dest->st_server_bg = src->st_server_bg;
+  dest->gui_scrollbar_on_right = src->gui_scrollbar_on_right;
+  dest->gui_plist_sel_browse = src->gui_plist_sel_browse;
+  dest->gui_ptree_sel_browse = src->gui_ptree_sel_browse;
+  dest->gui_altern_colors = src->gui_altern_colors;
+  dest->filter_toolbar_show_in_statusbar = src->filter_toolbar_show_in_statusbar;
+  dest->gui_ptree_line_style = src->gui_ptree_line_style;
+  dest->gui_ptree_expander_style = src->gui_ptree_expander_style;
+  dest->gui_hex_dump_highlight_style = src->gui_hex_dump_highlight_style;
+  dest->gui_toolbar_main_style = src->gui_toolbar_main_style;
+  dest->gui_fileopen_dir = g_strdup(src->gui_fileopen_dir);
+  dest->gui_console_open = src->gui_console_open;
+  dest->gui_fileopen_style = src->gui_fileopen_style;
+  dest->gui_fileopen_preview = src->gui_fileopen_preview;
+  dest->gui_ask_unsaved = src->gui_ask_unsaved;
+  dest->gui_find_wrap = src->gui_find_wrap;
+  dest->gui_layout_type = src->gui_layout_type;
+  dest->gui_layout_content_1 = src->gui_layout_content_1;
+  dest->gui_layout_content_2 = src->gui_layout_content_2;
+  dest->gui_layout_content_3 = src->gui_layout_content_3;
+  dest->gui_font_name1 = g_strdup(src->gui_font_name1);
+  dest->gui_font_name2 = g_strdup(src->gui_font_name2);
+  dest->gui_marked_fg = src->gui_marked_fg;
+  dest->gui_marked_bg = src->gui_marked_bg;
+  dest->gui_geometry_save_position = src->gui_geometry_save_position;
+  dest->gui_geometry_save_size = src->gui_geometry_save_size;
+  dest->gui_geometry_save_maximized = src->gui_geometry_save_maximized;
+  dest->gui_webbrowser = g_strdup(src->gui_webbrowser);
+/*  values for the capture dialog box */
+  dest->capture_device = g_strdup(src->capture_device);
+  dest->capture_devices_descr = g_strdup(src->capture_devices_descr);
+  dest->capture_devices_hide = g_strdup(src->capture_devices_hide);
+  dest->capture_prom_mode = src->capture_prom_mode;
+  dest->capture_real_time = src->capture_real_time;
+  dest->capture_auto_scroll = src->capture_auto_scroll;
+  dest->capture_show_info = src->capture_show_info;
+  dest->name_resolve = src->name_resolve;
+  dest->name_resolve_concurrency = src->name_resolve_concurrency;
+
+}
+
+/* Free a set of preferences. */
+void
+free_prefs(e_prefs *pr)
+{
+  if (pr->pr_file != NULL) {
+    g_free(pr->pr_file);
+    pr->pr_file = NULL;
+  }
+  if (pr->pr_cmd != NULL) {
+    g_free(pr->pr_cmd);
+    pr->pr_cmd = NULL;
+  }
+  free_col_info(pr);
+  if (pr->gui_font_name1 != NULL) {
+    g_free(pr->gui_font_name1);
+    pr->gui_font_name1 = NULL;
+  }
+  if (pr->gui_font_name2 != NULL) {
+    g_free(pr->gui_font_name2);
+    pr->gui_font_name2 = NULL;
+  }
+  if (pr->gui_fileopen_dir != NULL) {
+    g_free(pr->gui_fileopen_dir);
+    pr->gui_fileopen_dir = NULL;
+  }
+  g_free(pr->gui_webbrowser);
+  pr->gui_webbrowser = NULL;
+  if (pr->capture_device != NULL) {
+    g_free(pr->capture_device);
+    pr->capture_device = NULL;
+  }
+  if (pr->capture_devices_descr != NULL) {
+    g_free(pr->capture_devices_descr);
+    pr->capture_devices_descr = NULL;
+  }
+  if (pr->capture_devices_hide != NULL) {
+    g_free(pr->capture_devices_hide);
+    pr->capture_devices_hide = NULL;
+  }
+}
+
+static void
+free_col_info(e_prefs *pr)
+{
+  fmt_data *cfmt;
+
+  while (pr->col_list != NULL) {
+    cfmt = pr->col_list->data;
+    g_free(cfmt->title);
+    g_free(cfmt->fmt);
+    g_free(cfmt);
+    pr->col_list = g_list_remove_link(pr->col_list, pr->col_list);
+  }
+  g_list_free(pr->col_list);
+  pr->col_list = NULL;
+}
diff -urN ethereal-0.10.6/epan/prefs.h ethereal-0.10.7/epan/prefs.h
--- ethereal-0.10.6/epan/prefs.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/prefs.h	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,352 @@
+/* prefs.h
+ * Definitions for preference handling routines
+ *
+ * $Id: prefs.h 12341 2004-10-18 15:14:13Z gerald $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef __PREFS_H__
+#define __PREFS_H__
+
+#include <glib.h>
+
+#include "color.h"
+
+#include <epan/range.h>
+
+#define PR_DEST_CMD  0
+#define PR_DEST_FILE 1
+
+#define DEF_WIDTH 750
+#define DEF_HEIGHT 550
+
+#define MAX_VAL_LEN  1024
+
+/* only GTK1 *or* GTK2 font_name should be used */
+#if GTK_MAJOR_VERSION < 2
+#define PREFS_GUI_FONT_NAME gui_font_name1
+#else
+#define PREFS_GUI_FONT_NAME gui_font_name2
+#endif
+
+/*
+ * Convert a string listing name resolution types to a bitmask of
+ * those types.
+ *
+ * Set "*name_resolve" to the bitmask, and return '\0', on success;
+ * return the bad character in the string on error.
+ */
+char string_to_name_resolve(char *string, guint32 *name_resolve);
+
+/*
+ * Modes for the starting directory in File Open dialogs.
+ */
+#define FO_STYLE_LAST_OPENED	0	/* start in last directory we looked at */
+#define FO_STYLE_SPECIFIED	1	/* start in specified directory */
+
+/*
+ * Toolbar styles.
+ */
+#define TB_STYLE_ICONS		0
+#define TB_STYLE_TEXT		1
+#define TB_STYLE_BOTH		2
+
+/*
+ * Types of layout of summary/details/hex panes.
+ */
+typedef enum {
+    layout_unused,  /* entry currently unused */
+    layout_type_5,
+    layout_type_2,
+    layout_type_1,
+    layout_type_4,
+    layout_type_3,
+    layout_type_6,
+    layout_type_max
+} layout_type_e;
+
+/*
+ * Types of pane.
+ */
+typedef enum {
+    layout_pane_content_none,
+    layout_pane_content_plist,
+    layout_pane_content_pdetails,
+    layout_pane_content_pbytes
+} layout_pane_content_e;
+
+/*
+ * open console behaviour (win32 only)
+ */
+typedef enum {
+    console_open_never,
+    console_open_auto,
+    console_open_always
+} console_open_e;
+
+
+typedef struct _e_prefs {
+  gint     pr_format;
+  gint     pr_dest;
+  gchar   *pr_file;
+  gchar   *pr_cmd;
+  GList   *col_list;
+  gint     num_cols;
+  color_t  st_client_fg, st_client_bg, st_server_fg, st_server_bg;
+  gboolean gui_scrollbar_on_right;
+  gboolean gui_plist_sel_browse;
+  gboolean gui_ptree_sel_browse;
+  gboolean gui_altern_colors;
+  gboolean filter_toolbar_show_in_statusbar;
+  gint     gui_ptree_line_style;
+  gint     gui_ptree_expander_style;
+  gboolean gui_hex_dump_highlight_style;
+  gint     gui_toolbar_main_style;
+  gchar   *gui_font_name1;
+  gchar   *gui_font_name2;
+  color_t  gui_marked_fg;
+  color_t  gui_marked_bg;
+  gboolean gui_geometry_save_position;
+  gboolean gui_geometry_save_size;
+  gboolean gui_geometry_save_maximized;
+  console_open_e gui_console_open;
+  guint    gui_recent_files_count_max;
+  guint    gui_fileopen_style;
+  gchar	   *gui_fileopen_dir;
+  guint    gui_fileopen_preview;
+  gboolean gui_ask_unsaved;
+  gboolean gui_find_wrap;
+  gchar   *gui_webbrowser;
+  layout_type_e gui_layout_type;
+  layout_pane_content_e gui_layout_content_1;
+  layout_pane_content_e gui_layout_content_2;
+  layout_pane_content_e gui_layout_content_3;
+  guint32  name_resolve;
+  gint     name_resolve_concurrency;
+  gchar   *capture_device;
+  gchar   *capture_devices_descr;
+  gchar   *capture_devices_hide;
+  gboolean capture_prom_mode;
+  gboolean capture_real_time;
+  gboolean capture_auto_scroll;
+  gboolean capture_show_info;
+} e_prefs;
+
+ETH_VAR_IMPORT e_prefs prefs;
+
+/*
+ * Routines to let modules that have preference settings register
+ * themselves by name, and to let them register preference settings
+ * by name.
+ */
+struct pref_module;
+
+typedef struct pref_module module_t;
+
+/*
+ * Register a module that will have preferences.
+ * Specify the module under which to register it or NULL to register it
+ * at the top level, the name used for the module in the preferences file,
+ * the title used in the tab for it in a preferences dialog box, and a
+ * routine to call back when we apply the preferences.
+ *
+ * This should not be used for dissector preferences;
+ * "prefs_register_protocol()" should be used for that, so that the
+ * preferences go under the "Protocols" subtree, and so that the
+ * name is the protocol name specified at the "proto_register_protocol()"
+ * call so that the "Protocol Properties..." menu item works.
+ */
+extern module_t *prefs_register_module(module_t *parent, const char *name,
+    const char *title, void (*apply_cb)(void));
+
+/*
+ * Register a subtree that will have modules under it.
+ * Specify the module under which to register it or NULL to register it
+ * at the top level and the title used in the tab for it in a preferences
+ * dialog box.
+ */
+extern module_t *prefs_register_subtree(module_t *parent, const char *title);
+
+/*
+ * Register that a protocol has preferences.
+ */
+extern module_t *prefs_register_protocol(int id, void (*apply_cb)(void));
+
+/*
+ * Register that a protocol used to have preferences but no longer does,
+ * by creating an "obsolete" module for it.
+ */
+extern module_t *prefs_register_protocol_obsolete(int id);
+
+/*
+ * Callback function for module list scanners.
+ */
+typedef guint (*module_cb)(module_t *module, gpointer user_data);
+
+/*
+ * Call a callback function, with a specified argument, for each module
+ * in a list of modules.  If the list is NULL, searches the top-level
+ * list in the display tree of modules.
+ *
+ * Ignores "obsolete" modules; their sole purpose is to allow old
+ * preferences for dissectors that no longer have preferences to be
+ * silently ignored in preference files.  Does not ignore subtrees,
+ * as this can be used when walking the display tree of modules.
+ */
+extern guint prefs_module_list_foreach(GList *module_list, module_cb callback,
+    gpointer user_data);
+
+/*
+ * Call a callback function, with a specified argument, for each module
+ * in the list of all modules.  (This list does not include subtrees.)
+ *
+ * Ignores "obsolete" modules; their sole purpose is to allow old
+ * preferences for dissectors that no longer have preferences to be
+ * silently ignored in preference files.
+ */
+extern guint prefs_modules_foreach(module_cb callback, gpointer user_data);
+
+/*
+ * Call the "apply" callback function for each module if any of its
+ * preferences have changed, and then clear the flag saying its
+ * preferences have changed, as the module has been notified of that
+ * fact.
+ */
+extern void prefs_apply_all(void);
+
+struct preference;
+
+typedef struct preference pref_t;
+
+/*
+ * Returns TRUE if the given protocol has registered preferences.
+ */
+extern gboolean prefs_is_registered_protocol(char *name);
+
+/*
+ * Returns the module title of a registered protocol (or NULL if unknown).
+ */
+extern const char *prefs_get_title_by_name(char *name);
+
+/*
+ * Register a preference with an unsigned integral value.
+ */
+extern void prefs_register_uint_preference(module_t *module, const char *name,
+    const char *title, const char *description, guint base, guint *var);
+
+/*
+ * Register a preference with an Boolean value.
+ */
+extern void prefs_register_bool_preference(module_t *module, const char *name,
+    const char *title, const char *description, gboolean *var);
+
+/*
+ * Register a preference with an enumerated value.
+ */
+typedef struct {
+	char	*name;
+	char	*description;
+	gint	value;
+} enum_val_t;
+
+extern void prefs_register_enum_preference(module_t *module, const char *name,
+    const char *title, const char *description, gint *var,
+    const enum_val_t *enumvals, gboolean radio_buttons);
+
+/*
+ * Register a preference with a character-string value.
+ */
+extern void prefs_register_string_preference(module_t *module, const char *name,
+    const char *title, const char *description, char **var);
+
+/*
+ * Register a preference with a ranged value.
+ */
+extern void prefs_register_range_preference(module_t *module, const char *name,
+    const char *title, const char *description, range_t **var,
+    guint32 max_value);
+
+/*
+ * Register a preference that used to be supported but no longer is.
+ */
+extern void prefs_register_obsolete_preference(module_t *module,
+    const char *name);
+
+typedef guint (*pref_cb)(pref_t *pref, gpointer user_data);
+
+/*
+ * Call a callback function, with a specified argument, for each preference
+ * in a given module.
+ *
+ * If any of the callbacks return a non-zero value, stop and return that
+ * value, otherwise return 0.
+ */
+extern guint prefs_pref_foreach(module_t *module, pref_cb callback,
+    gpointer user_data);
+
+/*
+ * Register all non-dissector modules' preferences.
+ */
+extern void prefs_register_modules(void);
+
+/* Read the preferences file, fill in "prefs", and return a pointer to it.
+
+   If we got an error (other than "it doesn't exist") trying to read
+   the global preferences file, stuff the errno into "*gpf_errno_return"
+   on an open error and into "*gpf_read_errno_return" on a read error,
+   stuff a pointer to the path of the file into "*gpf_path_return", and
+   return NULL.
+
+   If we got an error (other than "it doesn't exist") trying to read
+   the user's preferences file, stuff the errno into "*pf_errno_return"
+   on an open error and into "*pf_read_errno_return" on a read error,
+   stuff a pointer to the path of the file into "*pf_path_return", and
+   return NULL. */
+extern e_prefs *read_prefs(int *, int *, char **, int *, int *, char **);
+
+/* Write out "prefs" to the user's preferences file, and return 0.
+
+   If we got an error, stuff a pointer to the path of the preferences file
+   into "*pf_path_return", and return the errno. */
+extern int write_prefs(char **);
+
+/* Copy a set of preferences. */
+extern void copy_prefs(e_prefs *dest, e_prefs *src);
+
+/* Free a set of preferences. */
+extern void free_prefs(e_prefs *pr);
+
+/*
+ * Given a string of the form "<pref name>:<pref value>", as might appear
+ * as an argument to a "-o" option, parse it and set the preference in
+ * question.  Return an indication of whether it succeeded or failed
+ * in some fashion.
+ *
+ * XXX - should supply, for syntax errors, a detailed explanation of
+ * the syntax error.
+ */
+#define PREFS_SET_OK		0	/* succeeded */
+#define PREFS_SET_SYNTAX_ERR	1	/* syntax error in string */
+#define PREFS_SET_NO_SUCH_PREF	2	/* no such preference */
+#define PREFS_SET_OBSOLETE	3	/* preference used to exist but no longer does */
+
+extern int prefs_set_pref(char *prefarg);
+
+#endif /* prefs.h */
diff -urN ethereal-0.10.6/epan/proto.c ethereal-0.10.7/epan/proto.c
--- ethereal-0.10.6/epan/proto.c	2004-08-12 17:41:54.000000000 -0500
+++ ethereal-0.10.7/epan/proto.c	2004-10-20 17:34:36.000000000 -0500
@@ -1,7 +1,7 @@
 /* proto.c
  * Routines for protocol tree
  *
- * $Id: proto.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: proto.c 12062 2004-09-21 23:15:59Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -42,7 +42,6 @@
 #include "plugins.h"
 #include "ipv6-utils.h"
 #include "proto.h"
-#include "int-64bit.h"
 #include "epan_dissect.h"
 #include "slab.h"
 #include "tvbuff.h"
@@ -55,18 +54,20 @@
 static void fill_label_boolean(field_info *fi, gchar *label_str);
 static void fill_label_uint(field_info *fi, gchar *label_str);
 static void fill_label_uint64(field_info *fi, gchar *label_str);
-static void fill_label_int64(field_info *fi, gchar *label_str);
 static void fill_label_enumerated_uint(field_info *fi, gchar *label_str);
 static void fill_label_enumerated_bitfield(field_info *fi, gchar *label_str);
 static void fill_label_numeric_bitfield(field_info *fi, gchar *label_str);
 static void fill_label_int(field_info *fi, gchar *label_str);
+static void fill_label_int64(field_info *fi, gchar *label_str);
 static void fill_label_enumerated_int(field_info *fi, gchar *label_str);
 
 int hfinfo_bitwidth(header_field_info *hfinfo);
 static char* hfinfo_uint_vals_format(header_field_info *hfinfo);
 static char* hfinfo_uint_format(header_field_info *hfinfo);
+static char* hfinfo_uint64_format(header_field_info *hfinfo);
 static char* hfinfo_int_vals_format(header_field_info *hfinfo);
 static char* hfinfo_int_format(header_field_info *hfinfo);
+static char* hfinfo_int64_format(header_field_info *hfinfo);
 
 static proto_item*
 proto_tree_add_node(proto_tree *tree, field_info *fi);
@@ -85,10 +86,6 @@
 static void
 proto_tree_set_protocol_tvb(field_info *fi, tvbuff_t *tvb);
 static void
-proto_tree_set_uint64(field_info *fi, const guint8 *value_ptr, gboolean little_endian);
-static void
-proto_tree_set_uint64_tvb(field_info *fi, tvbuff_t *tvb, gint start, gboolean little_endian);
-static void
 proto_tree_set_bytes(field_info *fi, const guint8* start_ptr, gint length);
 static void
 proto_tree_set_bytes_tvb(field_info *fi, tvbuff_t *tvb, gint offset, gint length);
@@ -120,6 +117,10 @@
 proto_tree_set_uint(field_info *fi, guint32 value);
 static void
 proto_tree_set_int(field_info *fi, gint32 value);
+static void
+proto_tree_set_uint64(field_info *fi, guint64 value);
+static void
+proto_tree_set_uint64_tvb(field_info *fi, tvbuff_t *tvb, gint start, gboolean little_endian);
 
 static int proto_register_field_init(header_field_info *hfinfo, int parent);
 
@@ -634,6 +635,8 @@
 	field_info	*new_fi;
 	proto_item	*pi;
 	guint32		value, n;
+	float		floatval;
+	double		doubleval;
 	char		*string;
 	GHashTable	*hash;
 	GPtrArray	*ptrs;
@@ -722,7 +725,7 @@
 		case FT_IPv4:
 			g_assert(length == 4);
 			tvb_memcpy(tvb, (guint8 *)&value, start, 4);
-			proto_tree_set_ipv4(new_fi, value);
+			proto_tree_set_ipv4(new_fi, little_endian ? GUINT32_SWAP_LE_BE(value) : value);
 			break;
 
 		case FT_IPXNET:
@@ -741,6 +744,24 @@
 			proto_tree_set_ether_tvb(new_fi, tvb, start);
 			break;
 
+		case FT_FLOAT:
+			g_assert(length == 4);
+			if (little_endian)
+				floatval = tvb_get_letohieee_float(tvb, start);
+			else
+				floatval = tvb_get_ntohieee_float(tvb, start);
+			proto_tree_set_float(new_fi, floatval);
+			break;
+
+		case FT_DOUBLE:
+			g_assert(length == 8);
+			if (little_endian)
+				doubleval = tvb_get_letohieee_double(tvb, start);
+			else
+				doubleval = tvb_get_ntohieee_double(tvb, start);
+			proto_tree_set_double(new_fi, doubleval);
+			break;
+
 		case FT_STRING:
 			/* This g_strdup'ed memory is freed in proto_tree_free_node() */
 			proto_tree_set_string_tvb(new_fi, tvb, start, length);
@@ -1261,25 +1282,20 @@
 }
 
 static void
-proto_tree_set_uint64(field_info *fi, const guint8 *value_ptr, gboolean little_endian)
+proto_tree_set_uint64(field_info *fi, guint64 value)
 {
-	if(little_endian){
-		unsigned char buffer[8];
-		int i;
-
-		for(i=0;i<8;i++){
-			buffer[i]=value_ptr[7-i];
-		}
-		fvalue_set(&fi->value, (gpointer)buffer, FALSE);
-	} else {
-		fvalue_set(&fi->value, (gpointer)value_ptr, FALSE);
-	}
+	fvalue_set_integer64(&fi->value, value);
 }
 
 static void
 proto_tree_set_uint64_tvb(field_info *fi, tvbuff_t *tvb, gint start, gboolean little_endian)
 {
-	proto_tree_set_uint64(fi, tvb_get_ptr(tvb, start, 8), little_endian);
+	guint64 value;
+
+	value = little_endian ? tvb_get_letoh64(tvb, start)
+			      : tvb_get_ntoh64(tvb, start);
+
+	proto_tree_set_uint64(fi, value);
 }
 
 /* Add a FT_STRING or FT_STRINGZ to a proto_tree. Creates own copy of string,
@@ -1634,7 +1650,7 @@
 	fvalue_set_floating(&fi->value, value);
 }
 
-/* Add any FT_UINT* to a proto_tree */
+/* Add FT_UINT{8,16,24,32} to a proto_tree */
 proto_item *
 proto_tree_add_uint(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, gint length,
 		guint32 value)
@@ -1698,7 +1714,7 @@
 	return pi;
 }
 
-/* Set the FT_UINT* value */
+/* Set the FT_UINT{8,16,24,32} value */
 static void
 proto_tree_set_uint(field_info *fi, guint32 value)
 {
@@ -1720,7 +1736,46 @@
 	fvalue_set_integer(&fi->value, integer);
 }
 
-/* Add any FT_INT* to a proto_tree */
+/* Add FT_UINT64 to a proto_tree */
+proto_item *
+proto_tree_add_uint64(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, gint length,
+		guint64 value)
+{
+	proto_item		*pi = NULL;
+	field_info		*new_fi;
+	header_field_info	*hfinfo;
+
+	if (!tree)
+		return (NULL);
+
+	PROTO_REGISTRAR_GET_NTH(hfindex, hfinfo);
+	g_assert(hfinfo->type == FT_UINT64);
+
+	pi = proto_tree_add_pi(tree, hfindex, tvb, start, &length, &new_fi);
+	proto_tree_set_uint64(new_fi, value);
+
+	return pi;
+}
+
+proto_item *
+proto_tree_add_uint64_format(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, gint length,
+		guint64 value, const char *format, ...)
+{
+	proto_item		*pi;
+	va_list			ap;
+
+	pi = proto_tree_add_uint64(tree, hfindex, tvb, start, length, value);
+	if (pi == NULL)
+		return (NULL);
+
+	va_start(ap, format);
+	proto_tree_set_representation(pi, format, ap);
+	va_end(ap);
+
+	return pi;
+}
+
+/* Add FT_INT{8,16,24,32} to a proto_tree */
 proto_item *
 proto_tree_add_int(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, gint length,
 		gint32 value)
@@ -1783,7 +1838,7 @@
 	return pi;
 }
 
-/* Set the FT_INT* value */
+/* Set the FT_INT{8,16,24,32} value */
 static void
 proto_tree_set_int(field_info *fi, gint32 value)
 {
@@ -1805,6 +1860,45 @@
 	fvalue_set_integer(&fi->value, integer);
 }
 
+/* Add FT_INT64 to a proto_tree */
+proto_item *
+proto_tree_add_int64(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, gint length,
+		gint64 value)
+{
+	proto_item		*pi = NULL;
+	field_info		*new_fi;
+	header_field_info	*hfinfo;
+
+	if (!tree)
+		return (NULL);
+
+	PROTO_REGISTRAR_GET_NTH(hfindex, hfinfo);
+	g_assert(hfinfo->type == FT_INT64);
+
+	pi = proto_tree_add_pi(tree, hfindex, tvb, start, &length, &new_fi);
+	proto_tree_set_uint64(new_fi, (guint64)value);
+
+	return pi;
+}
+
+proto_item *
+proto_tree_add_int64_format(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start, gint length,
+		gint64 value, const char *format, ...)
+{
+	proto_item		*pi;
+	va_list			ap;
+
+	pi = proto_tree_add_int64(tree, hfindex, tvb, start, length, value);
+	if (pi == NULL)
+		return (NULL);
+
+	va_start(ap, format);
+	proto_tree_set_representation(pi, format, ap);
+	va_end(ap);
+
+	return pi;
+}
+
 
 /* Add a field_info struct to the proto_tree, encapsulating it in a proto_node */
 static proto_item *
@@ -2459,7 +2553,7 @@
 	proto = find_protocol_by_id(parent);
 	for (i = 0; i < num_records; i++, ptr++) {
 		/*
-		 * Make sure we haven't registed this yet.
+		 * Make sure we haven't registered this yet.
 		 * Most fields have variables associated with them
 		 * that are initialized to -1; some have array elements,
 		 * or possibly uninitialized variables, so we also allow
@@ -2806,64 +2900,6 @@
 }
 
 static void
-fill_label_uint64(field_info *fi, gchar *label_str)
-{
-	unsigned char *bytes;
-	header_field_info *hfinfo = fi->hfinfo;
-	int					ret;	/*tmp return value */
-
-	bytes=fvalue_get(&fi->value);
-	switch(hfinfo->display){
-	case BASE_DEC:
-		ret = snprintf(label_str, ITEM_LABEL_LENGTH,
-			"%s: %s", hfinfo->name,
-			u64toa(bytes));
-		if ((ret == -1) || (ret >= ITEM_LABEL_LENGTH))
-			label_str[ITEM_LABEL_LENGTH - 1] = '\0';
-		break;
-	case BASE_HEX:
-		ret = snprintf(label_str, ITEM_LABEL_LENGTH,
-			"%s: %s", hfinfo->name,
-			u64toh(bytes));
-		if ((ret == -1) || (ret >= ITEM_LABEL_LENGTH))
-			label_str[ITEM_LABEL_LENGTH - 1] = '\0';
-		break;
-	default:
-		g_assert_not_reached();
-		;
-	}
-}
-
-static void
-fill_label_int64(field_info *fi, gchar *label_str)
-{
-	unsigned char *bytes;
-	header_field_info *hfinfo = fi->hfinfo;
-	int					ret;	/*tmp return value */
-
-	bytes=fvalue_get(&fi->value);
-	switch(hfinfo->display){
-	case BASE_DEC:
-		ret = snprintf(label_str, ITEM_LABEL_LENGTH,
-			"%s: %s", hfinfo->name,
-			i64toa(bytes));
-		if ((ret == -1) || (ret >= ITEM_LABEL_LENGTH))
-			label_str[ITEM_LABEL_LENGTH - 1] = '\0';
-		break;
-	case BASE_HEX:
-		ret = snprintf(label_str, ITEM_LABEL_LENGTH,
-			"%s: %s", hfinfo->name,
-			u64toh(bytes));
-		if ((ret == -1) || (ret >= ITEM_LABEL_LENGTH))
-			label_str[ITEM_LABEL_LENGTH - 1] = '\0';
-		break;
-	default:
-		g_assert_not_reached();
-		;
-	}
-}
-
-static void
 fill_label_boolean(field_info *fi, gchar *label_str)
 {
 	char	*p = label_str;
@@ -3019,6 +3055,25 @@
 }
 
 static void
+fill_label_uint64(field_info *fi, gchar *label_str)
+{
+	char *format = NULL;
+	header_field_info	*hfinfo = fi->hfinfo;
+	guint64 value;
+	int					ret;	/*tmp return value */
+
+	/* Pick the proper format string */
+	format = hfinfo_uint64_format(hfinfo);
+	value = fvalue_get_integer64(&fi->value);
+
+	/* Fill in the textual info */
+	ret = snprintf(label_str, ITEM_LABEL_LENGTH,
+			format,  hfinfo->name, value);
+	if ((ret == -1) || (ret >= ITEM_LABEL_LENGTH))
+		label_str[ITEM_LABEL_LENGTH - 1] = '\0';
+}
+
+static void
 fill_label_enumerated_int(field_info *fi, gchar *label_str)
 {
 	char *format = NULL;
@@ -3057,6 +3112,25 @@
 		label_str[ITEM_LABEL_LENGTH - 1] = '\0';
 }
 
+static void
+fill_label_int64(field_info *fi, gchar *label_str)
+{
+	char *format = NULL;
+	header_field_info	*hfinfo = fi->hfinfo;
+	guint64 value;
+	int					ret;	/*tmp return value */
+
+	/* Pick the proper format string */
+	format = hfinfo_int64_format(hfinfo);
+	value = fvalue_get_integer64(&fi->value);
+
+	/* Fill in the textual info */
+	ret = snprintf(label_str, ITEM_LABEL_LENGTH,
+			format,  hfinfo->name, value);
+	if ((ret == -1) || (ret >= ITEM_LABEL_LENGTH))
+		label_str[ITEM_LABEL_LENGTH - 1] = '\0';
+}
+
 int
 hfinfo_bitwidth(header_field_info *hfinfo)
 {
@@ -3216,6 +3290,29 @@
 }
 
 static char*
+hfinfo_uint64_format(header_field_info *hfinfo)
+{
+	char *format = NULL;
+
+	/* Pick the proper format string */
+	switch(hfinfo->display) {
+		case BASE_DEC:
+			format = "%s: %" PRIu64;
+			break;
+		case BASE_OCT: /* I'm lazy */
+			format = "%s: %" PRIo64;
+			break;
+		case BASE_HEX:
+			format = "%s: 0x%016" PRIx64;
+			break;
+		default:
+			g_assert_not_reached();
+			;
+	}
+	return format;
+}
+
+static char*
 hfinfo_int_format(header_field_info *hfinfo)
 {
 	char *format = NULL;
@@ -3254,6 +3351,29 @@
 	return format;
 }
 
+static char*
+hfinfo_int64_format(header_field_info *hfinfo)
+{
+	char *format = NULL;
+
+	/* Pick the proper format string */
+	switch(hfinfo->display) {
+		case BASE_DEC:
+			format = "%s: %" PRId64;
+			break;
+		case BASE_OCT: /* I'm lazy */
+			format = "%s: %" PRIo64;
+			break;
+		case BASE_HEX:
+			format = "%s: 0x%016" PRIx64;
+			break;
+		default:
+			g_assert_not_reached();
+			;
+	}
+	return format;
+}
+
 
 
 int
@@ -3464,6 +3584,115 @@
 	}
 }
 
+/* Dumps the value_string and true/false strings for fields that have
+ * them. There is one record per line. Fields are tab-delimited.
+ * There are two types of records, Value String records and True/False
+ * String records. The first field, 'V' or 'T', indicates the type
+ * of record.
+ *
+ * Value Strings
+ * -------------
+ * Field 1 = 'V'
+ * Field 2 = field abbreviation to which this value string corresponds
+ * Field 3 = Integer value
+ * Field 4 = String
+ *
+ * True/False Strings
+ * ------------------
+ * Field 1 = 'T'
+ * Field 2 = field abbreviation to which this true/false string corresponds
+ * Field 3 = True String
+ * Field 4 = False String
+ */
+void
+proto_registrar_dump_values(void)
+{
+	header_field_info	*hfinfo, *parent_hfinfo;
+	int			i, len, vi;
+	const value_string	*vals;
+	const true_false_string	*tfs;
+
+	len = gpa_hfinfo.len;
+	for (i = 0; i < len ; i++) {
+		PROTO_REGISTRAR_GET_NTH(i, hfinfo);
+
+		 if (hfinfo->id == hf_text_only) {
+			 continue;
+		 }
+
+		/* ignore protocols */
+		if (proto_registrar_is_protocol(i)) {
+			continue;
+		}
+		/* process header fields */
+		else {
+			/*
+			 * If this field isn't at the head of the list of
+			 * fields with this name, skip this field - all
+			 * fields with the same name are really just versions
+			 * of the same field stored in different bits, and
+			 * should have the same type/radix/value list, and
+			 * just differ in their bit masks.  (If a field isn't
+			 * a bitfield, but can be, say, 1 or 2 bytes long,
+			 * it can just be made FT_UINT16, meaning the
+			 * *maximum* length is 2 bytes, and be used
+			 * for all lengths.)
+			 */
+			if (hfinfo->same_name_prev != NULL)
+				continue;
+
+			PROTO_REGISTRAR_GET_NTH(hfinfo->parent, parent_hfinfo);
+
+			vals = NULL;
+			tfs = NULL;
+
+			if (hfinfo->type == FT_UINT8 ||
+				hfinfo->type == FT_UINT16 ||
+				hfinfo->type == FT_UINT24 ||
+				hfinfo->type == FT_UINT32 ||
+				hfinfo->type == FT_UINT64 ||
+				hfinfo->type == FT_INT8 ||
+				hfinfo->type == FT_INT16 ||
+				hfinfo->type == FT_INT24 ||
+				hfinfo->type == FT_INT32 ||
+				hfinfo->type == FT_INT64) {
+
+				vals = hfinfo->strings;
+			}
+			else if (hfinfo->type == FT_BOOLEAN) {
+				tfs = hfinfo->strings;
+			}
+
+			/* Print value strings? */
+			if (vals) {
+				vi = 0;
+				while (vals[vi].strptr) {
+					/* Print in the proper base */
+					if (hfinfo->display == BASE_HEX) {
+						printf("V\t%s\t0x%x\t%s\n",
+								hfinfo->abbrev,
+								vals[vi].value,
+								vals[vi].strptr);
+					}
+					else {
+						printf("V\t%s\t%u\t%s\n",
+								hfinfo->abbrev,
+								vals[vi].value,
+								vals[vi].strptr);
+					}
+					vi++;
+				}
+			}
+
+			/* Print true/false strings? */
+			else if (tfs) {
+				printf("T\t%s\t%s\t%s\n", hfinfo->abbrev,
+						tfs->true_string, tfs->false_string);
+			}
+		}
+	}
+}
+
 /* Dumps the contents of the registration database to stdout. An indepedent
  * program can take this output and format it into nice tables or HTML or
  * whatever.
@@ -3474,23 +3703,29 @@
  * Protocols
  * ---------
  * Field 1 = 'P'
- * Field 2 = protocol name
+ * Field 2 = descriptive protocol name
  * Field 3 = protocol abbreviation
  *
  * Header Fields
  * -------------
+ * (format 1)
  * Field 1 = 'F'
- * Field 2 = field name
+ * Field 2 = descriptive field name
  * Field 3 = field abbreviation
  * Field 4 = type ( textual representation of the the ftenum type )
  * Field 5 = parent protocol abbreviation
+ *
+ * (format 2 adds these fields:)
+ * Field 6 = base for display (for integer types)
+ * Field 7 = blurb describing field
  */
 void
-proto_registrar_dump_fields(void)
+proto_registrar_dump_fields(int format)
 {
 	header_field_info	*hfinfo, *parent_hfinfo;
 	int			i, len;
 	const char 		*enum_name;
+	const char		*base_name;
 
 	len = gpa_hfinfo.len;
 	for (i = 0; i < len ; i++) {
@@ -3513,6 +3748,9 @@
 		 * with no pseudo-field being used, but that might also
 		 * require special checks for -1 to be added.
 		 */
+		/* XXX - we could just skip the special text
+		 * pseudo-field by testing: if (hfinfo->id == hf_text_only)
+		 * */
 		if (hfinfo->name[0] == 0 || hfinfo->abbrev[0] == 0)
 			continue;
 
@@ -3540,8 +3778,48 @@
 			PROTO_REGISTRAR_GET_NTH(hfinfo->parent, parent_hfinfo);
 
 			enum_name = ftype_name(hfinfo->type);
-			printf("F\t%s\t%s\t%s\t%s\t%s\n", hfinfo->name, hfinfo->abbrev,
-				enum_name,parent_hfinfo->abbrev, hfinfo->blurb);
+			base_name = "";
+
+			if (format > 1) {
+				if (hfinfo->type == FT_UINT8 ||
+					hfinfo->type == FT_UINT16 ||
+					hfinfo->type == FT_UINT24 ||
+					hfinfo->type == FT_UINT32 ||
+					hfinfo->type == FT_UINT64 ||
+					hfinfo->type == FT_INT8 ||
+					hfinfo->type == FT_INT16 ||
+					hfinfo->type == FT_INT24 ||
+					hfinfo->type == FT_INT32 ||
+					hfinfo->type == FT_INT64) {
+
+					
+					switch(hfinfo->display) {
+						case BASE_NONE:
+							base_name = "BASE_NONE";
+							break;
+						case BASE_DEC:
+							base_name = "BASE_DEC";
+							break;
+						case BASE_HEX:
+							base_name = "BASE_HEX";
+							break;
+						case BASE_OCT:
+							base_name = "BASE_OCT";
+							break;
+					}
+				}
+			}
+
+			if (format == 1) {
+				printf("F\t%s\t%s\t%s\t%s\t%s\n", hfinfo->name, hfinfo->abbrev,
+					enum_name,parent_hfinfo->abbrev, hfinfo->blurb);
+			}
+			else if (format == 2) {
+				printf("F\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",
+					hfinfo->name, hfinfo->abbrev,
+					enum_name,parent_hfinfo->abbrev, hfinfo->blurb,
+					base_name, hfinfo->blurb);
+			}
 		}
 	}
 }
@@ -3569,12 +3847,18 @@
 					case FT_UINT32:
 						format = "%s == %u";
 						break;
+					case FT_UINT64:
+						format = "%s == %" PRIu64;
+						break;
 					case FT_INT8:
 					case FT_INT16:
 					case FT_INT24:
 					case FT_INT32:
 						format = "%s == %d";
 						break;
+					case FT_INT64:
+						format = "%s == %" PRId64;
+						break;
 					default:
 						g_assert_not_reached();
 						;
@@ -3594,6 +3878,9 @@
 					case FT_UINT32:
 						format = "%s == 0x%08x";
 						break;
+					case FT_UINT64:
+						format = "%s == 0x%016" PRIx64;
+						break;
 					default:
 						g_assert_not_reached();
 						;
@@ -3769,30 +4056,28 @@
 			snprintf(buf, dfilter_len, format, hfinfo->abbrev, fvalue_get_integer(&finfo->value));
 			break;
 
-		case FT_UINT64:
-			/*
-			 * 4 bytes for " == ".
-			 * N bytes for the string for the number.
-			 * 1 byte for the trailing '\0'.
-			 */
-			stringified = u64toa(fvalue_get(&finfo->value));
-			dfilter_len = abbrev_len + 4 + strlen(stringified) +1;
-			buf = g_malloc0(dfilter_len);
-			snprintf(buf, dfilter_len, "%s == %s", hfinfo->abbrev,
-					stringified);
-			break;
-
 		case FT_INT64:
+		case FT_UINT64:
 			/*
 			 * 4 bytes for " == ".
-			 * N bytes for the string for the number.
+			 * 22 bytes for:
+			 *
+			 *	a sign + up to 20 digits of 32-bit integer,
+			 *	in decimal;
+			 *
+			 *	"0x" + 16 digits of 32-bit integer, in hex;
+			 *
+			 *	22 digits of 32-bit integer, in octal.
+			 *	(No, we don't do octal, but this way,
+			 *	we know that if we do, this will still
+			 *	work.)
+			 *
 			 * 1 byte for the trailing '\0'.
 			 */
-			stringified = i64toa(fvalue_get(&finfo->value));
-			dfilter_len = abbrev_len + 4 + strlen(stringified) +1;
+			dfilter_len = abbrev_len + 4 + 22 + 1;
 			buf = g_malloc0(dfilter_len);
-			snprintf(buf, dfilter_len, "%s == %s", hfinfo->abbrev,
-					stringified);
+			format = hfinfo_numeric_format(hfinfo);
+			snprintf(buf, dfilter_len, format, hfinfo->abbrev, fvalue_get_integer64(&finfo->value));
 			break;
 
 		case FT_IPXNET:
diff -urN ethereal-0.10.6/epan/proto.h ethereal-0.10.7/epan/proto.h
--- ethereal-0.10.6/epan/proto.h	2004-08-12 17:41:54.000000000 -0500
+++ ethereal-0.10.7/epan/proto.h	2004-10-20 17:34:36.000000000 -0500
@@ -1,7 +1,7 @@
 /* proto.h
  * Definitions for protocol display
  *
- * $Id: proto.h 11559 2004-07-29 00:11:14Z obiot $
+ * $Id: proto.h 11954 2004-09-10 15:21:20Z gram $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -747,6 +747,32 @@
 proto_tree_add_uint_format(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start,
 	gint length, guint32 value, const char *format, ...) GNUC_FORMAT_CHECK(printf,7,8);
 
+/** Add an FT_UINT64 to a proto_tree.
+ @param tree the tree to append this item to
+ @param hfindex field index
+ @param tvb the tv buffer of the current data
+ @param start start of data in tvb
+ @param length length of data in tvb
+ @param value data to display
+ @return the newly created item */
+extern proto_item *
+proto_tree_add_uint64(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start,
+	gint length, guint64 value);
+
+/** Add a formatted FT_UINT64 to a proto_tree.
+ @param tree the tree to append this item to
+ @param hfindex field index
+ @param tvb the tv buffer of the current data
+ @param start start of data in tvb
+ @param length length of data in tvb
+ @param value data to display
+ @param format printf like format string
+ @param ... printf like parameters
+ @return the newly created item */
+extern proto_item *
+proto_tree_add_uint64_format(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start,
+	gint length, guint64 value, const char *format, ...) GNUC_FORMAT_CHECK(printf,7,8);
+
 /** Add one of FT_INT8, FT_INT16, FT_INT24 or FT_INT32 to a proto_tree.
  @param tree the tree to append this item to
  @param hfindex field index
@@ -779,6 +805,32 @@
 proto_tree_add_int_format(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start,
 	gint length, gint32 value, const char *format, ...) GNUC_FORMAT_CHECK(printf,7,8);
 
+/** Add an FT_INT64 to a proto_tree.
+ @param tree the tree to append this item to
+ @param hfindex field index
+ @param tvb the tv buffer of the current data
+ @param start start of data in tvb
+ @param length length of data in tvb
+ @param value data to display
+ @return the newly created item */
+extern proto_item *
+proto_tree_add_int64(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start,
+	gint length, gint64 value);
+
+/** Add a formatted FT_INT64 to a proto_tree.
+ @param tree the tree to append this item to
+ @param hfindex field index
+ @param tvb the tv buffer of the current data
+ @param start start of data in tvb
+ @param length length of data in tvb
+ @param value data to display
+ @param format printf like format string
+ @param ... printf like parameters
+ @return the newly created item */
+extern proto_item *
+proto_tree_add_int64_format(proto_tree *tree, int hfindex, tvbuff_t *tvb, gint start,
+	gint length, gint64 value, const char *format, ...) GNUC_FORMAT_CHECK(printf,7,8);
+
 /** Useful for quick debugging. Also sends string to STDOUT, so don't
  * leave call to this function in production code.
  @param tree the tree to append the text to
@@ -946,8 +998,13 @@
 /** Dumps a glossary of the protocol registrations to STDOUT */
 extern void proto_registrar_dump_protocols(void);
 
-/** Dumps a glossary of the protocol and field registrations to STDOUT */
-extern void proto_registrar_dump_fields(void);
+/** Dumps a glossary of the field value strings or true/false strings to STDOUT */
+extern void proto_registrar_dump_values(void);
+
+/** Dumps a glossary of the protocol and field registrations to STDOUT.
+ * Format 1 is the original format. Format 2 includes the base (for integers)
+ * and the blurb. */
+extern void proto_registrar_dump_fields(int format);
 
 
 
diff -urN ethereal-0.10.6/epan/range.c ethereal-0.10.7/epan/range.c
--- ethereal-0.10.6/epan/range.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/range.c	2004-10-20 17:35:04.000000000 -0500
@@ -0,0 +1,352 @@
+/* range.c
+ * Range routines
+ *
+ * $Id: range.c 12341 2004-10-18 15:14:13Z gerald $
+ *
+ * Dick Gooris <gooris@lucent.com>
+ * Ulf Lamping <ulf.lamping@web.de>
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include <glib.h>
+
+#include <epan/frame_data.h>
+
+#include <epan/range.h>
+#include <stdio.h>
+
+/*
+ * GLib 1.2[.x] doesn't define G_MAXUINT32; if it's not defined, we define
+ * it as the maximum 32-bit unsigned number.
+ */
+#ifndef G_MAXUINT32
+#define G_MAXUINT32	((guint32)0xFFFFFFFFU)
+#endif
+
+/*
+ * Size of the header of a range_t.
+ */
+#define RANGE_HDR_SIZE (sizeof (range_t) - sizeof (range_admin_t))
+
+/* Allocate an empty range. */
+range_t *range_empty(void)
+{
+   range_t *range;
+
+   range = g_malloc(RANGE_HDR_SIZE);
+   range->nranges = 0;
+   return range;
+}
+
+/******************** Range Entry Parser *********************************/
+
+/* Converts a range string to a fast comparable array of ranges.
+ * The parameter 'es' points to the string to be converted.
+ * The parameter 'max_value' specifies the maximum value in a
+ * range.
+ *
+ * This function allocates a range_t large enough to hold the number
+ * of ranges specified, and fills the array range->ranges containing
+ * low and high values with the number of ranges being range->nranges.
+ * After having called this function, the function value_is_in_range()
+ * determines whether a given number is within the range or not. 
+ *
+ * In case of a single number, we make a range where low is equal to high. 
+ * We take care on wrongly entered ranges; opposite order will be taken
+ * care of.
+ * 
+ * The following syntax is accepted :
+ *
+ *   1-20,30-40     Range from 1 to 20, and packets 30 to 40
+ *   -20,30         Range from 1 to 20, and packet 30
+ *   20,30,40-      20, 30, and the range from 40 to the end
+ *   20-10,30-25    Range from 10 to 20, and from 25 to 30
+ *   -              All values
+ */
+
+convert_ret_t range_convert_str(range_t **rangep, const gchar *es,
+				guint32 max_value)
+{
+   range_t       *range;
+   guint         nranges;
+   const gchar   *p;
+   char          *endp;
+   gchar         c;
+   guint         i;
+   guint32       tmp;
+   unsigned long val;
+
+   /* Allocate a range; this has room for one subrange. */
+   range = g_malloc(RANGE_HDR_SIZE + sizeof (range_admin_t));
+   range->nranges = 0;
+   nranges = 1;
+
+   /* Process the ranges separately until we get a comma or end of string.
+    *
+    * We build a structure array called ranges of high and low values. After the
+    * following loop, we have the nranges variable which tells how many ranges
+    * were found. The number of individual ranges is limited to 'MaxRanges'
+    */
+
+   p = es;
+   for (;;) {
+      /* Skip white space. */
+      while ((c = *p) == ' ' || c == '\t')
+	 p++;
+      if (c == '\0')
+	 break;
+
+      /* This must be a subrange.  Make sure we have room for it. */
+      if (range->nranges >= nranges) {
+	 /* Grow the structure.
+	  * 4 is an arbitrarily chosen number.
+	  * We start with 1, under the assumption that people
+	  * will often give a single number or range, and then
+	  * proceed to keep it a multiple of 4.
+	  */
+	 if (nranges == 1)
+	    nranges = 4;
+	 else
+	    nranges += 4;
+	 range = g_realloc(range, RANGE_HDR_SIZE +
+			   nranges*sizeof (range_admin_t));
+      }
+
+      if (c == '-') {
+	 /* Subrange starts with 1. */
+	 range->ranges[range->nranges].low = 1;
+      } else if (isdigit((unsigned char)c)) {
+	 /* Subrange starts with the specified number */
+	 errno = 0;
+	 val = strtoul(p, &endp, 10);
+	 if (p == endp) {
+	    /* That wasn't a valid number. */
+	    g_free(range);
+	    return CVT_SYNTAX_ERROR;
+	 }
+	 if (errno == ERANGE || val > G_MAXUINT32) {
+	    /* That was valid, but it's too big. */
+	    g_free(range);
+	    return CVT_NUMBER_TOO_BIG;
+	 } 
+	 p = endp;
+	 range->ranges[range->nranges].low = val;
+
+	 /* Skip white space. */
+	 while ((c = *p) == ' ' || c == '\t')
+	    p++;
+      } else {
+	 /* Neither empty nor a number. */
+	 g_free(range);
+	 return CVT_SYNTAX_ERROR;
+      }
+
+      if (c == '-') {
+	 /* There's a hyphen in the range.  Skip past it. */
+	 p++;
+
+	 /* Skip white space. */
+	 while ((c = *p) == ' ' || c == '\t')
+	    p++;
+
+	 if (c == ',' || c == '\0') {
+	   /* End of subrange string; that means the subrange ends
+	    * with max_value.
+	    */
+	   range->ranges[range->nranges].high = max_value;
+	 } else if (isdigit((unsigned char)c)) {
+	    /* Subrange ends with the specified number. */
+	    errno = 0;
+	    val = strtoul(p, &endp, 10);
+	    if (p == endp) {
+	       /* That wasn't a valid number. */
+	       g_free(range);
+	       return CVT_SYNTAX_ERROR;
+	    }
+	    if (errno == ERANGE || val > G_MAXUINT32) {
+	       /* That was valid, but it's too big. */
+	       g_free(range);
+	       return CVT_NUMBER_TOO_BIG;
+	    } 
+	    p = endp;
+	    range->ranges[range->nranges].high = val;
+
+	    /* Skip white space. */
+	    while ((c = *p) == ' ' || c == '\t')
+	       p++;
+	 } else {
+	    /* Neither empty nor a number. */
+	    g_free(range);
+	    return CVT_SYNTAX_ERROR;
+	 }
+      } else if (c == ',' || c == '\0') {
+	 /* End of subrange string; that means there's no hyphen
+	  * in the subrange, so the start and the end are the same.
+	  */
+	 range->ranges[range->nranges].high = range->ranges[range->nranges].low;
+      } else {
+	 /* Invalid character. */ 
+	 g_free(range);
+	 return CVT_SYNTAX_ERROR;
+      }
+      range->nranges++;
+
+      if (c == ',') {
+	 /* Subrange is followed by a comma; skip it. */
+	 p++;
+      }
+   }
+
+   /* Now we are going through the low and high values, and check
+    * whether they are in a proper order. Low should be equal or lower
+    * than high. So, go through the loop and swap if needed.
+    */
+   for (i=0; i < range->nranges; i++) {
+      if (range->ranges[i].low > range->ranges[i].high) {
+	 tmp = range->ranges[i].low;
+	 range->ranges[i].low  = range->ranges[i].high;
+	 range->ranges[i].high = tmp;
+      }
+   }
+
+   /* In case we want to know what the result ranges are :
+    *
+    * for (i=0; i < range->nranges; i++) {
+    *  printf("Function : range_convert_str L=%u \t H=%u\n",range->ranges[i].low,range->ranges[i].high);
+    * }
+    *
+    */
+   *rangep = range;
+   return CVT_NO_ERROR;
+} /* range_convert_str */
+
+/* This function returns TRUE if a given value is within one of the ranges
+ * stored in the ranges array.
+ */
+gboolean value_is_in_range(range_t *range, guint32 val)
+{
+   guint i;
+
+   for (i=0; i < range->nranges; i++) {
+      if (val >= range->ranges[i].low && val <= range->ranges[i].high)
+	 return TRUE;
+   }
+   return(FALSE);
+}
+
+/* This function returns TRUE if the two given range_t's are equal.
+ */
+gboolean ranges_are_equal(range_t *a, range_t *b)
+{
+   guint i;
+
+   if (a->nranges != b->nranges)
+      return FALSE;
+
+   for (i=0; i < a->nranges; i++) {
+      if (a->ranges[i].low != b->ranges[i].low)
+	 return FALSE;
+
+      if (a->ranges[i].high != b->ranges[i].high)
+	 return FALSE;
+   }
+
+   return TRUE;
+
+}
+
+/* This function calls the provided callback function for each value in
+ * in the range.
+ */
+void
+range_foreach(range_t *range, void (*callback)(guint32 val))
+{
+   guint32 i, j;
+
+   for (i=0; i < range->nranges; i++) {
+      for (j = range->ranges[i].low; j <= range->ranges[i].high; j++)
+	 callback(j);
+   }
+}
+
+/* This function converts a range_t to a (g_malloc()-allocated) string.  */
+char *
+range_convert_range(range_t *range)
+{
+   GString *str;
+   guint32 i;
+   gboolean prepend_comma = FALSE;
+   char *string;
+
+   str = g_string_new("");
+
+   for (i=0; i < range->nranges; i++) {
+      if (prepend_comma)
+	 g_string_append_c(str, ',');
+
+      if (range->ranges[i].low == range->ranges[i].high)
+	 g_string_sprintfa(str, "%u", range->ranges[i].low);
+      else
+	 g_string_sprintfa(str, "%u-%u", range->ranges[i].low,
+			   range->ranges[i].high);
+      prepend_comma = TRUE;
+   }
+
+   string = str->str;
+   g_string_free(str, FALSE);
+   return string;
+}
+
+/* Create a copy of a range. */
+range_t *range_copy(range_t *src)
+{
+   range_t *dst;
+   size_t range_size;
+
+   range_size = RANGE_HDR_SIZE + src->nranges*sizeof (range_admin_t);
+   dst = g_malloc(range_size);
+   memcpy(dst, src, range_size);
+   return dst;
+}
+
+#if 0
+/* This is a debug function to check the range functionality */
+static void value_is_in_range_check(range_t *range, guint32 val)
+{
+
+  /* Print the result for a given value */
+  printf("Function : value_is_in_range_check Number %u\t",val);
+
+  if (value_is_in_range(range, val)) {
+     printf("is in range\n");
+  } else {
+     printf("is not in range\n");
+  }
+}
+#endif
+
diff -urN ethereal-0.10.6/epan/range.h ethereal-0.10.7/epan/range.h
--- ethereal-0.10.6/epan/range.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/range.h	2004-10-20 17:35:04.000000000 -0500
@@ -0,0 +1,68 @@
+/* range.h
+ * Range routines
+ *
+ * $Id: range.h 12341 2004-10-18 15:14:13Z gerald $
+ *
+ * Dick Gooris <gooris@lucent.com>
+ * Ulf Lamping <ulf.lamping@web.de>
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef __RANGE_H__
+#define __RANGE_H__
+
+#include <glib.h>
+
+typedef struct range_admin_tag {
+    guint32 low;
+    guint32 high;
+} range_admin_t;
+
+typedef struct range {
+    /* user specified range(s) */
+    guint           nranges;   /* number of entries in ranges */
+    range_admin_t   ranges[1]; /* variable-length array */
+} range_t;
+
+/*
+ * Return value from range_convert_str().
+ */
+typedef enum {
+    CVT_NO_ERROR,
+    CVT_SYNTAX_ERROR,
+    CVT_NUMBER_TOO_BIG
+} convert_ret_t;	
+
+extern range_t *range_empty(void);
+
+extern convert_ret_t range_convert_str(range_t **range, const gchar *es,
+    guint32 max_value);
+
+extern gboolean value_is_in_range(range_t *range, guint32 val);
+
+extern gboolean ranges_are_equal(range_t *a, range_t *b);
+
+extern void range_foreach(range_t *range, void (*callback)(guint32 val));
+
+extern char *range_convert_range(range_t *range);
+
+extern range_t *range_copy(range_t *src);
+
+#endif /* __RANGE_H__ */
diff -urN ethereal-0.10.6/epan/req_resp_hdrs.c ethereal-0.10.7/epan/req_resp_hdrs.c
--- ethereal-0.10.6/epan/req_resp_hdrs.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/req_resp_hdrs.c	2004-10-20 17:35:04.000000000 -0500
@@ -0,0 +1,339 @@
+/* req_resp_hdrs.c
+ * Routines handling protocols with a request/response line, headers,
+ * a blank line, and an optional body.
+ *
+ * $Id: req_resp_hdrs.c 12129 2004-09-29 00:25:05Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib.h>
+#include <epan/packet.h>
+#include <epan/strutil.h>
+#include <string.h>
+
+#include <epan/req_resp_hdrs.h>
+
+/*
+ * Optionally do reassembly of the request/response line, headers, and body.
+ */
+gboolean
+req_resp_hdrs_do_reassembly(tvbuff_t *tvb, packet_info *pinfo,
+    gboolean desegment_headers, gboolean desegment_body)
+{
+	gint		offset = 0;
+	gint		next_offset;
+	gint		next_offset_sav;
+	gint		length_remaining, reported_length_remaining;
+	int		linelen;
+	gchar		*header_val;
+	long int	content_length;
+	gboolean	content_length_found = FALSE;
+	gboolean	chunked_encoding = FALSE;
+
+	/*
+	 * Do header desegmentation if we've been told to.
+	 *
+	 * RFC 2616 defines HTTP messages as being either of the
+	 * Request or the Response type
+	 * (HTTP-message = Request | Response).
+	 * Request and Response are defined as:
+	 *     Request = Request-Line
+	 *         *(( general-header
+	 *         | request-header
+	 *         | entity-header ) CRLF)
+	 *         CRLF
+	 *         [ message-body ]
+	 *     Response = Status-Line
+	 *         *(( general-header
+	 *         | response-header
+	 *         | entity-header ) CRLF)
+	 *         CRLF
+	 *         [ message-body ]
+	 * that's why we can always assume two consecutive line
+	 * endings (we allow CR, LF, or CRLF, as some clients
+	 * or servers might not use a full CRLF) to mark the end
+	 * of the headers.  The worst thing that would happen
+	 * otherwise would be the packet not being desegmented
+	 * or being interpreted as only headers.
+	 *
+	 * RFC 2326 says RTSP works the same way; RFC 3261 says SIP
+	 * works the same way.
+	 */
+
+	/*
+	 * If header desegmentation is activated, check that all
+	 * headers are in this tvbuff (search for an empty line
+	 * marking end of headers) or request one more byte (we
+	 * don't know how many bytes we'll need, so we just ask
+	 * for one).
+	 */
+	if (desegment_headers && pinfo->can_desegment) {
+		next_offset = offset;
+		for (;;) {
+			next_offset_sav = next_offset;
+
+			length_remaining = tvb_length_remaining(tvb,
+			    next_offset);
+			reported_length_remaining =
+			    tvb_reported_length_remaining(tvb, next_offset);
+
+			/*
+			 * Request one more byte if there're no
+			 * bytes left in the reported data (if there're
+			 * bytes left in the reported data, but not in
+			 * the available data, requesting more bytes
+			 * won't help, as those bytes weren't captured).
+			 */
+			if (reported_length_remaining < 1) {
+				pinfo->desegment_offset = offset;
+				pinfo->desegment_len = 1;
+				return FALSE;
+			}
+
+			/*
+			 * Request one more byte if we cannot find a
+			 * header (i.e. a line end).
+			 */
+			linelen = tvb_find_line_end(tvb, next_offset,
+			    -1, &next_offset, TRUE);
+			if (linelen == -1 &&
+			    length_remaining >= reported_length_remaining) {
+				/*
+				 * Not enough data; ask for one more
+				 * byte.
+				 */
+				pinfo->desegment_offset = offset;
+				pinfo->desegment_len = 1;
+				return FALSE;
+			} else if (linelen == 0) {
+				/*
+				 * We found the end of the headers.
+				 */
+				break;
+			}
+
+			/*
+			 * Is this a Content-Length or Transfer-Encoding
+			 * header?  If not, it either means that we are in
+			 * a different header line, or that we are
+			 * at the end of the headers, or that there
+			 * isn't enough data; the two latter cases
+			 * have already been handled above.
+			 */
+			if (desegment_body) {
+				/*
+				 * Check if we've found Content-Length.
+				 */
+				if (tvb_strncaseeql(tvb, next_offset_sav,
+				    "Content-Length:", 15) == 0) {
+					header_val = tvb_get_string(tvb,
+					    next_offset_sav + 15,
+					    linelen - 15);
+					if (sscanf(header_val,
+					    "%li", &content_length)
+					    == 1)
+						content_length_found = TRUE;
+					g_free(header_val);
+				} else if (tvb_strncaseeql(tvb,
+					    next_offset_sav,
+					    "Transfer-Encoding:", 18) == 0) {
+					/*
+					 * Find out if this Transfer-Encoding is
+					 * chunked.  It should be, since there
+					 * really aren't any other types, but
+					 * RFC 2616 allows for them.
+					 */
+					gchar *p;
+					gint len;
+
+					header_val = tvb_get_string(tvb,
+					    next_offset_sav + 18, linelen - 18);
+					p = header_val;
+					len = strlen(header_val);
+					/* Skip white space */
+					while (p < header_val + len &&
+					    (*p == ' ' || *p == '\t'))
+						p++;
+					if (p <= header_val + len) {
+						if (strncasecmp(p, "chunked", 7)
+						    == 0) {
+							/*
+							 * Don't bother looking
+							 * for extensions;
+							 * since we don't
+							 * understand them,
+							 * they should be
+							 * ignored.
+							 */
+							chunked_encoding = TRUE;
+						}
+					}
+					g_free(header_val);
+				}
+			}
+		}
+	}
+
+	/*
+	 * The above loop ends when we reached the end of the headers, so
+	 * there should be content_length bytes after the 4 terminating bytes
+	 * and next_offset points to after the end of the headers.
+	 */
+	if (desegment_body) {
+		if (content_length_found) {
+			/* next_offset has been set to the end of the headers */
+			if (!tvb_bytes_exist(tvb, next_offset, content_length)) {
+				length_remaining = tvb_length_remaining(tvb,
+				    next_offset);
+				reported_length_remaining =
+				    tvb_reported_length_remaining(tvb, next_offset);
+				if (length_remaining < reported_length_remaining) {
+					/*
+					 * It's a waste of time asking for more
+					 * data, because that data wasn't captured.
+					 */
+					return TRUE;
+				}
+				if (length_remaining == -1)
+					length_remaining = 0;
+				pinfo->desegment_offset = offset;
+				pinfo->desegment_len =
+				    content_length - length_remaining;
+				return FALSE;
+			}
+		} else if (chunked_encoding) {
+			/*
+			 * This data is chunked, so we need to keep pulling
+			 * data until we reach the end of the stream, or a
+			 * zero sized chunk.
+			 *
+			 * XXX
+			 * This doesn't bother with trailing headers; I don't
+			 * think they are really used, and we'd have to use
+			 * is_http_request_or_reply() to determine if it was
+			 * a trailing header, or the start of a new response.
+			 */
+			gboolean done_chunking = FALSE;
+
+			while (!done_chunking) {
+				gint chunk_size = 0;
+				gint chunk_offset = 0;
+				gchar *chunk_string = NULL;
+				gchar *c = NULL;
+
+				length_remaining = tvb_length_remaining(tvb,
+				    next_offset);
+				reported_length_remaining =
+				    tvb_reported_length_remaining(tvb,
+				    next_offset);
+
+				if (reported_length_remaining < 1) {
+					pinfo->desegment_offset = offset;
+					pinfo->desegment_len = 1;
+					return FALSE;
+				}
+
+				linelen = tvb_find_line_end(tvb, next_offset,
+						-1, &chunk_offset, TRUE);
+
+				if (linelen == -1 &&
+				    length_remaining >=
+				    reported_length_remaining) {
+					 pinfo->desegment_offset = offset;
+					 pinfo->desegment_len = 2;
+					 return FALSE;
+				}
+				
+				/* We have a line with the chunk size in it.*/
+				chunk_string = tvb_get_string(tvb, next_offset,
+				    linelen);
+				c = chunk_string;
+
+				/*
+				 * We don't care about the extensions.
+				 */
+				if ((c = strchr(c, ';'))) {
+					*c = '\0';
+				}
+
+				if ((sscanf(chunk_string, "%x",
+				    &chunk_size) < 0) || chunk_size < 0) {
+					/* We couldn't get the chunk size,
+					 * so stop trying.
+					 */
+					return TRUE;
+				}
+
+				if (chunk_size == 0) {
+					/*
+					 * This is the last chunk.  Let's pull in the
+					 * trailing CRLF.
+					 */
+					linelen = tvb_find_line_end(tvb,
+					    chunk_offset, -1, &chunk_offset, TRUE);
+						
+					if (linelen == -1 &&
+					    length_remaining >=
+					    reported_length_remaining) {
+						pinfo->desegment_offset = offset;
+						pinfo->desegment_len = 1;
+						return FALSE;
+					}
+
+					pinfo->desegment_offset = chunk_offset;
+					pinfo->desegment_len = 0;
+					done_chunking = TRUE;
+				} else {
+					/* 
+					 * Skip to the next chunk if we
+					 * already have it 
+					 */
+					if (reported_length_remaining >
+					        chunk_size) {
+						
+						next_offset = chunk_offset 
+						    + chunk_size + 2;
+					} else {
+						/* 
+						 * Fetch this chunk, plus the
+						 * trailing CRLF.
+						 */ 
+						pinfo->desegment_offset = offset;
+						pinfo->desegment_len =
+						    chunk_size + 1 -
+						    reported_length_remaining;
+						return FALSE;
+					}
+				}
+
+			}
+		}
+
+	}
+
+	/*
+	 * No further desegmentation needed.
+	 */
+	return TRUE;
+}
diff -urN ethereal-0.10.6/epan/req_resp_hdrs.h ethereal-0.10.7/epan/req_resp_hdrs.h
--- ethereal-0.10.6/epan/req_resp_hdrs.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/req_resp_hdrs.h	2004-10-20 17:35:04.000000000 -0500
@@ -0,0 +1,36 @@
+/* req_resp_hdrs.h
+ * Declarations of routines handling protocols with a request/response line,
+ * headers, a blank line, and an optional body.
+ *
+ * $Id: req_resp_hdrs.h 12129 2004-09-29 00:25:05Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef __REQ_RESP_HDRS_H__
+#define __REQ_RESP_HDRS_H__
+
+/*
+ * Optionally do reassembly of the request/response line, headers, and body.
+ */
+extern gboolean
+req_resp_hdrs_do_reassembly(tvbuff_t *tvb, packet_info *pinfo,
+    gboolean desegment_headers, gboolean desegment_body);
+
+#endif
diff -urN ethereal-0.10.6/epan/sha1.c ethereal-0.10.7/epan/sha1.c
--- ethereal-0.10.6/epan/sha1.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/sha1.c	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,394 @@
+/*
+ *  FIPS-180-1 compliant SHA-1 implementation
+ *
+ *  $Id: sha1.c 12125 2004-09-28 23:20:14Z guy $
+ *
+ *  Copyright (C) 2001-2003  Christophe Devine
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Changed to use guint instead of uint 2004 by Anders Broman
+ *	Original code found at http://www.cr0.net:8040/code/crypto/sha1/
+ *  References: http://www.ietf.org/rfc/rfc3174.txt?number=3174
+ */
+
+#include <string.h>
+#include <glib.h>
+
+#include <epan/sha1.h>
+
+#define GET_UINT32(n,b,i)                       \
+{                                               \
+    (n) = ( (guint32) (b)[(i)    ] << 24 )       \
+        | ( (guint32) (b)[(i) + 1] << 16 )       \
+        | ( (guint32) (b)[(i) + 2] <<  8 )       \
+        | ( (guint32) (b)[(i) + 3]       );      \
+}
+
+#define PUT_UINT32(n,b,i)                       \
+{                                               \
+    (b)[(i)    ] = (guint8) ( (n) >> 24 );       \
+    (b)[(i) + 1] = (guint8) ( (n) >> 16 );       \
+    (b)[(i) + 2] = (guint8) ( (n) >>  8 );       \
+    (b)[(i) + 3] = (guint8) ( (n)       );       \
+}
+
+void sha1_starts( sha1_context *ctx )
+{
+    ctx->total[0] = 0;
+    ctx->total[1] = 0;
+
+    ctx->state[0] = 0x67452301;
+    ctx->state[1] = 0xEFCDAB89;
+    ctx->state[2] = 0x98BADCFE;
+    ctx->state[3] = 0x10325476;
+    ctx->state[4] = 0xC3D2E1F0;
+}
+
+void sha1_process( sha1_context *ctx, guint8 data[64] )
+{
+    guint32 temp, W[16], A, B, C, D, E;
+
+    GET_UINT32( W[0],  data,  0 );
+    GET_UINT32( W[1],  data,  4 );
+    GET_UINT32( W[2],  data,  8 );
+    GET_UINT32( W[3],  data, 12 );
+    GET_UINT32( W[4],  data, 16 );
+    GET_UINT32( W[5],  data, 20 );
+    GET_UINT32( W[6],  data, 24 );
+    GET_UINT32( W[7],  data, 28 );
+    GET_UINT32( W[8],  data, 32 );
+    GET_UINT32( W[9],  data, 36 );
+    GET_UINT32( W[10], data, 40 );
+    GET_UINT32( W[11], data, 44 );
+    GET_UINT32( W[12], data, 48 );
+    GET_UINT32( W[13], data, 52 );
+    GET_UINT32( W[14], data, 56 );
+    GET_UINT32( W[15], data, 60 );
+
+#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
+
+#define R(t)                                            \
+(                                                       \
+    temp = W[(t -  3) & 0x0F] ^ W[(t - 8) & 0x0F] ^     \
+           W[(t - 14) & 0x0F] ^ W[ t      & 0x0F],      \
+    ( W[t & 0x0F] = S(temp,1) )                         \
+)
+
+#define P(a,b,c,d,e,x)                                  \
+{                                                       \
+    e += S(a,5) + F(b,c,d) + K + x; b = S(b,30);        \
+}
+
+    A = ctx->state[0];
+    B = ctx->state[1];
+    C = ctx->state[2];
+    D = ctx->state[3];
+    E = ctx->state[4];
+
+#define F(x,y,z) (z ^ (x & (y ^ z)))
+#define K 0x5A827999
+
+    P( A, B, C, D, E, W[0]  );
+    P( E, A, B, C, D, W[1]  );
+    P( D, E, A, B, C, W[2]  );
+    P( C, D, E, A, B, W[3]  );
+    P( B, C, D, E, A, W[4]  );
+    P( A, B, C, D, E, W[5]  );
+    P( E, A, B, C, D, W[6]  );
+    P( D, E, A, B, C, W[7]  );
+    P( C, D, E, A, B, W[8]  );
+    P( B, C, D, E, A, W[9]  );
+    P( A, B, C, D, E, W[10] );
+    P( E, A, B, C, D, W[11] );
+    P( D, E, A, B, C, W[12] );
+    P( C, D, E, A, B, W[13] );
+    P( B, C, D, E, A, W[14] );
+    P( A, B, C, D, E, W[15] );
+    P( E, A, B, C, D, R(16) );
+    P( D, E, A, B, C, R(17) );
+    P( C, D, E, A, B, R(18) );
+    P( B, C, D, E, A, R(19) );
+
+#undef K
+#undef F
+
+#define F(x,y,z) (x ^ y ^ z)
+#define K 0x6ED9EBA1
+
+    P( A, B, C, D, E, R(20) );
+    P( E, A, B, C, D, R(21) );
+    P( D, E, A, B, C, R(22) );
+    P( C, D, E, A, B, R(23) );
+    P( B, C, D, E, A, R(24) );
+    P( A, B, C, D, E, R(25) );
+    P( E, A, B, C, D, R(26) );
+    P( D, E, A, B, C, R(27) );
+    P( C, D, E, A, B, R(28) );
+    P( B, C, D, E, A, R(29) );
+    P( A, B, C, D, E, R(30) );
+    P( E, A, B, C, D, R(31) );
+    P( D, E, A, B, C, R(32) );
+    P( C, D, E, A, B, R(33) );
+    P( B, C, D, E, A, R(34) );
+    P( A, B, C, D, E, R(35) );
+    P( E, A, B, C, D, R(36) );
+    P( D, E, A, B, C, R(37) );
+    P( C, D, E, A, B, R(38) );
+    P( B, C, D, E, A, R(39) );
+
+#undef K
+#undef F
+
+#define F(x,y,z) ((x & y) | (z & (x | y)))
+#define K 0x8F1BBCDC
+
+    P( A, B, C, D, E, R(40) );
+    P( E, A, B, C, D, R(41) );
+    P( D, E, A, B, C, R(42) );
+    P( C, D, E, A, B, R(43) );
+    P( B, C, D, E, A, R(44) );
+    P( A, B, C, D, E, R(45) );
+    P( E, A, B, C, D, R(46) );
+    P( D, E, A, B, C, R(47) );
+    P( C, D, E, A, B, R(48) );
+    P( B, C, D, E, A, R(49) );
+    P( A, B, C, D, E, R(50) );
+    P( E, A, B, C, D, R(51) );
+    P( D, E, A, B, C, R(52) );
+    P( C, D, E, A, B, R(53) );
+    P( B, C, D, E, A, R(54) );
+    P( A, B, C, D, E, R(55) );
+    P( E, A, B, C, D, R(56) );
+    P( D, E, A, B, C, R(57) );
+    P( C, D, E, A, B, R(58) );
+    P( B, C, D, E, A, R(59) );
+
+#undef K
+#undef F
+
+#define F(x,y,z) (x ^ y ^ z)
+#define K 0xCA62C1D6
+
+    P( A, B, C, D, E, R(60) );
+    P( E, A, B, C, D, R(61) );
+    P( D, E, A, B, C, R(62) );
+    P( C, D, E, A, B, R(63) );
+    P( B, C, D, E, A, R(64) );
+    P( A, B, C, D, E, R(65) );
+    P( E, A, B, C, D, R(66) );
+    P( D, E, A, B, C, R(67) );
+    P( C, D, E, A, B, R(68) );
+    P( B, C, D, E, A, R(69) );
+    P( A, B, C, D, E, R(70) );
+    P( E, A, B, C, D, R(71) );
+    P( D, E, A, B, C, R(72) );
+    P( C, D, E, A, B, R(73) );
+    P( B, C, D, E, A, R(74) );
+    P( A, B, C, D, E, R(75) );
+    P( E, A, B, C, D, R(76) );
+    P( D, E, A, B, C, R(77) );
+    P( C, D, E, A, B, R(78) );
+    P( B, C, D, E, A, R(79) );
+
+#undef K
+#undef F
+
+    ctx->state[0] += A;
+    ctx->state[1] += B;
+    ctx->state[2] += C;
+    ctx->state[3] += D;
+    ctx->state[4] += E;
+}
+
+void sha1_update( sha1_context *ctx, guint8 *input, guint32 length )
+{
+    guint32 left, fill;
+
+    if( ! length ) return;
+
+    left = ctx->total[0] & 0x3F;
+    fill = 64 - left;
+
+    ctx->total[0] += length;
+    ctx->total[0] &= 0xFFFFFFFF;
+
+    if( ctx->total[0] < length )
+        ctx->total[1]++;
+
+    if( left && length >= fill )
+    {
+        memcpy( (void *) (ctx->buffer + left),
+                (void *) input, fill );
+        sha1_process( ctx, ctx->buffer );
+        length -= fill;
+        input  += fill;
+        left = 0;
+    }
+
+    while( length >= 64 )
+    {
+        sha1_process( ctx, input );
+        length -= 64;
+        input  += 64;
+    }
+
+    if( length )
+    {
+        memcpy( (void *) (ctx->buffer + left),
+                (void *) input, length );
+    }
+}
+
+static guint8 sha1_padding[64] =
+{
+ 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+void sha1_finish( sha1_context *ctx, guint8 digest[20] )
+{
+    guint32 last, padn;
+    guint32 high, low;
+    guint8 msglen[8];
+
+    high = ( ctx->total[0] >> 29 )
+         | ( ctx->total[1] <<  3 );
+    low  = ( ctx->total[0] <<  3 );
+
+    PUT_UINT32( high, msglen, 0 );
+    PUT_UINT32( low,  msglen, 4 );
+
+    last = ctx->total[0] & 0x3F;
+    padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
+
+    sha1_update( ctx, sha1_padding, padn );
+    sha1_update( ctx, msglen, 8 );
+
+    PUT_UINT32( ctx->state[0], digest,  0 );
+    PUT_UINT32( ctx->state[1], digest,  4 );
+    PUT_UINT32( ctx->state[2], digest,  8 );
+    PUT_UINT32( ctx->state[3], digest, 12 );
+    PUT_UINT32( ctx->state[4], digest, 16 );
+}
+
+#ifdef TEST
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <glib.h>
+
+/*
+ * those are the standard FIPS-180-1 test vectors
+ */
+
+static char *msg[] = 
+{
+    "abc",
+    "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
+    NULL
+};
+
+static char *val[] =
+{
+    "a9993e364706816aba3e25717850c26c9cd0d89d",
+    "84983e441c3bd26ebaae4aa1f95129e5e54670f1",
+    "34aa973cd4c4daa4f61eeb2bdbad27316534016f"
+};
+
+int main( int argc, char *argv[] )
+{
+    FILE *f;
+    int i, j;
+    char output[41];
+    sha1_context ctx;
+    unsigned char buf[1000];
+    unsigned char sha1sum[20];
+
+    if( argc < 2 )
+    {
+        printf( "\n SHA-1 Validation Tests:\n\n" );
+
+        for( i = 0; i < 3; i++ )
+        {
+            printf( " Test %d ", i + 1 );
+
+            sha1_starts( &ctx );
+
+            if( i < 2 )
+            {
+                sha1_update( &ctx, (uint8 *) msg[i],
+                             strlen( msg[i] ) );
+            }
+            else
+            {
+                memset( buf, 'a', 1000 );
+
+                for( j = 0; j < 1000; j++ )
+                {
+                    sha1_update( &ctx, (uint8 *) buf, 1000 );
+                }
+            }
+
+            sha1_finish( &ctx, sha1sum );
+
+            for( j = 0; j < 20; j++ )
+            {
+                sprintf( output + j * 2, "%02x", sha1sum[j] );
+            }
+
+            if( memcmp( output, val[i], 40 ) )
+            {
+                printf( "failed!\n" );
+                return( 1 );
+            }
+
+            printf( "passed.\n" );
+        }
+
+        printf( "\n" );
+    }
+    else
+    {
+        if( ! ( f = fopen( argv[1], "rb" ) ) )
+        {
+            perror( "fopen" );
+            return( 1 );
+        }
+
+        sha1_starts( &ctx );
+
+        while( ( i = fread( buf, 1, sizeof( buf ), f ) ) > 0 )
+        {
+            sha1_update( &ctx, buf, i );
+        }
+
+        sha1_finish( &ctx, sha1sum );
+
+        for( j = 0; j < 20; j++ )
+        {
+            printf( "%02x", sha1sum[j] );
+        }
+
+        printf( "  %s\n", argv[1] );
+    }
+
+    return( 0 );
+}
+
+#endif
+
diff -urN ethereal-0.10.6/epan/sha1.h ethereal-0.10.7/epan/sha1.h
--- ethereal-0.10.6/epan/sha1.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/sha1.h	2004-10-20 17:35:03.000000000 -0500
@@ -0,0 +1,43 @@
+/*
+ *  FIPS-180-1 compliant SHA-1 implementation
+ *
+ *  $Id: sha1.h 12125 2004-09-28 23:20:14Z guy $
+ *
+ *  Copyright (C) 2001-2003  Christophe Devine
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Changed to use guint instead of uint 2004 by Anders Broman
+ *	Original code found at http://www.cr0.net:8040/code/crypto/sha1/
+ *  References: http://www.ietf.org/rfc/rfc3174.txt?number=3174
+ */
+
+#ifndef _SHA1_H
+#define _SHA1_H
+
+
+typedef struct
+{
+    guint32 total[2];
+    guint32 state[5];
+    guint8 buffer[64];
+}
+sha1_context;
+
+void sha1_starts( sha1_context *ctx );
+void sha1_update( sha1_context *ctx, guint8 *input, guint32 length );
+void sha1_finish( sha1_context *ctx, guint8 digest[20] );
+
+#endif /* sha1.h */
diff -urN ethereal-0.10.6/epan/sigcomp-udvm.c ethereal-0.10.7/epan/sigcomp-udvm.c
--- ethereal-0.10.6/epan/sigcomp-udvm.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/sigcomp-udvm.c	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,2948 @@
+/* sigcomp-udvm.c
+ * Routines making up the Universal Decompressor Virtual Machine (UDVM) used for
+ * Signaling Compression (SigComp) dissection.
+ * Copyright 2004, Anders Broman <anders.broman@ericsson.com>
+ *
+ * $Id: udvm.c 11445 2004-07-20 19:04:48Z etxrab $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * References:
+ * http://www.ietf.org/rfc/rfc3320.txt?number=3320
+ * http://www.ietf.org/rfc/rfc3321.txt?number=3321
+ * Useful links :
+ * http://www.ietf.org/internet-drafts/draft-ietf-rohc-sigcomp-impl-guide-03.txt
+ * http://www.ietf.org/internet-drafts/draft-ietf-rohc-sigcomp-sip-01.txt
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <glib.h>
+
+#ifdef NEED_SNPRINTF_H
+# include "snprintf.h"
+#endif
+
+#include "packet.h"
+#include "sigcomp-udvm.h"
+#include "sigcomp_state_hdlr.h"
+#include "sha1.h"
+
+#define	SIGCOMP_INSTR_DECOMPRESSION_FAILURE     0
+#define SIGCOMP_INSTR_AND                       1
+#define SIGCOMP_INSTR_OR                        2
+#define SIGCOMP_INSTR_NOT                       3
+#define SIGCOMP_INSTR_LSHIFT                    4
+#define SIGCOMP_INSTR_RSHIFT                    5
+#define SIGCOMP_INSTR_ADD                       6
+#define SIGCOMP_INSTR_SUBTRACT                  7
+#define SIGCOMP_INSTR_MULTIPLY                  8
+#define SIGCOMP_INSTR_DIVIDE                    9
+#define SIGCOMP_INSTR_REMAINDER                 10
+#define SIGCOMP_INSTR_SORT_ASCENDING            11
+#define SIGCOMP_INSTR_SORT_DESCENDING           12
+#define SIGCOMP_INSTR_SHA_1                     13
+#define SIGCOMP_INSTR_LOAD                      14
+#define SIGCOMP_INSTR_MULTILOAD                 15
+#define SIGCOMP_INSTR_PUSH                      16
+#define SIGCOMP_INSTR_POP                       17
+#define SIGCOMP_INSTR_COPY                      18
+#define SIGCOMP_INSTR_COPY_LITERAL              19
+#define SIGCOMP_INSTR_COPY_OFFSET               20
+#define SIGCOMP_INSTR_MEMSET                    21
+#define SIGCOMP_INSTR_JUMP                      22
+#define SIGCOMP_INSTR_COMPARE                   23
+#define SIGCOMP_INSTR_CALL                      24
+#define SIGCOMP_INSTR_RETURN                    25
+#define SIGCOMP_INSTR_SWITCH                    26
+#define SIGCOMP_INSTR_CRC                       27
+#define SIGCOMP_INSTR_INPUT_BYTES               28
+#define SIGCOMP_INSTR_INPUT_BITS                29
+#define SIGCOMP_INSTR_INPUT_HUFFMAN             30
+#define SIGCOMP_INSTR_STATE_ACCESS              31
+#define SIGCOMP_INSTR_STATE_CREATE              32
+#define SIGCOMP_INSTR_STATE_FREE                33
+#define SIGCOMP_INSTR_OUTPUT                    34
+#define SIGCOMP_INSTR_END_MESSAGE               35
+
+#define UDVM_MEMORY_SIZE						65536
+
+static gboolean print_level_1;
+static gboolean print_level_2;
+static gboolean print_level_3;
+
+/* Internal result code values of decompression failures */
+static const value_string result_code_vals[] = {
+	{ 0,	"No decomprssion failure" },
+	{ 1,	"Partial state length less than 6 or greater than 20 bytes long" },
+	{ 2,	"No state match" },
+	{ 3,	"state_begin + state_length > size of state" },
+	{ 4,	"Operand_2 is Zero" },
+	{ 5,	"Switch statement failed j >= n" },
+	{ 6,	"Atempt to jump outside of UDVM memory" },
+	{ 7,	"L in input-bits > 16" },
+	{ 8,	"input_bit_order > 7" },
+	{ 9,	"Instruction Decompression failure encounterd" },
+	{10,	"Input huffman failed j > n" },
+	{11,	"Input bits requested beond end of message" },
+	{12,	"more than four state creation requests are made before the END-MESSAGE instruction" },
+	{13,	"state_retention_priority is 65535" },
+	{14,	"Input bytes requested beond end of message" },
+	{15,	"Maximum number of UDVM cycles reached" },
+	{ 255,	"This branch isn't coded yet" },
+	{ 0,    NULL }
+};
+
+static int decode_udvm_literal_operand(guint8 buff[],guint operand_address, guint16 *value);
+static int dissect_udvm_reference_operand(guint8 buff[],guint operand_address, guint16 *value, guint *result_dest);
+static int decode_udvm_multitype_operand(guint8 buff[],guint operand_address,guint16 *value);
+static int decode_udvm_address_operand(guint8 buff[],guint operand_address, guint16 *value,guint current_address);
+static int decomp_dispatch_get_bits(tvbuff_t *message_tvb,proto_tree *udvm_tree,guint8 bit_order, 
+			guint8 buff[],guint16 *old_input_bit_order, guint16 *remaining_bits,
+			guint16	*input_bits, guint *input_address, guint16 length, guint16 *result_code,guint msg_end);
+
+
+tvbuff_t*
+decompress_sigcomp_message(tvbuff_t *bytecode_tvb, tvbuff_t *message_tvb, packet_info *pinfo,
+						   proto_tree *udvm_tree, gint udvm_mem_dest, gint print_flags)
+{
+	tvbuff_t	*decomp_tvb;
+	guint8		buff[UDVM_MEMORY_SIZE];
+	char		string[2];
+	guint8		out_buff[65536];		/* Largest allowed size for a message is 65535  */
+	guint32		i = 0;
+	guint16		n = 0;
+	guint16		m = 0;
+	guint16		x;
+	guint		k = 0;
+	guint16		H;
+	guint16		oldH;
+	guint		offset = 0;
+	guint		result_dest;
+	guint		code_length =0;
+	guint8		current_instruction;
+	guint		current_address;
+	guint		operand_address;
+	guint		input_address;
+	guint16		output_address = 0;
+	guint		next_operand_address;
+	guint8		octet;
+	guint8		msb;
+	guint8		lsb;
+	guint16		byte_copy_right;
+	guint16		byte_copy_left;
+	guint16		input_bit_order;
+	guint16		result;
+	guint 		msg_end = tvb_reported_length_remaining(message_tvb, 0);
+	guint16		result_code;
+	guint16		old_input_bit_order = 0;
+	guint16		remaining_bits = 0;
+	guint16		input_bits = 0;
+	guint8		bit_order = 0;
+	gboolean	outside_huffman_boundaries = TRUE;
+	gboolean	print_in_loop = FALSE;
+	guint16		instruction_address;
+	guint8		no_of_state_create = 0;
+	guint16		state_length_buff[5];
+	guint16		state_address_buff[5];
+	guint16		state_instruction_buff[5];
+	guint16		state_minimum_access_length_buff[5];
+	guint16		state_state_retention_priority_buff[5];
+	guint32		used_udvm_cycles = 0;
+	guint16		cycles_per_bit;
+	guint16		maximum_UDVM_cycles;
+	guint8		*sha1buff;
+	unsigned char sha1_digest_buf[20];
+	sha1_context ctx;
+
+
+	/* UDVM operand variables */
+	guint16 length;
+	guint16 at_address;
+	guint16 destination;
+	guint16 address;
+	guint16 value;
+	guint16 p_id_start;
+	guint16 p_id_length;
+	guint16 state_begin;
+	guint16 state_length;
+	guint16 state_address;
+	guint16 state_instruction;
+	guint16 operand_1;
+	guint16 operand_2;
+	guint16 value_1;
+	guint16 value_2;
+	guint16 at_address_1;
+	guint16 at_address_2;
+	guint16 at_address_3;
+	guint16 j;
+	guint16 bits_n;
+	guint16 lower_bound_n;
+	guint16 upper_bound_n;
+	guint16 uncompressed_n;
+	guint16 position;
+	guint16 ref_destination; /* could I have used $destination ? */
+	guint16 multy_offset;
+	guint16 output_start;
+	guint16 output_length;
+	guint16 minimum_access_length;
+	guint16 state_retention_priority;
+	guint16 requested_feedback_location;
+	guint16 returned_parameters_location;
+	guint16 start_value;
+
+	/* Set print parameters */
+	print_level_1 = FALSE;
+	print_level_2 = FALSE;
+	print_level_3 = FALSE;
+	switch( print_flags ) {
+		case 0:
+			break;
+
+		case 1:
+			print_level_1 = TRUE;
+			break;
+		case 2:
+			print_level_1 = TRUE;
+			print_level_2 = TRUE;
+			break;
+		case 3:
+			print_level_1 = TRUE;
+			print_level_2 = TRUE;
+			print_level_3 = TRUE;
+			break;
+		default:
+			print_level_1 = TRUE;
+			break;
+	}
+
+
+
+
+
+
+	/* UDVM memory must be initialised to zero */
+	while ( i < UDVM_MEMORY_SIZE ) {
+		buff[i] = 0;
+		i++;
+	}
+	/* Set initial UDVM data 
+	 *  The first 32 bytes of UDVM memory are then initialized to special
+	 *  values as illustrated in Figure 5.
+	 *
+	 *                      0             7 8            15
+	 *                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+	 *                     |       UDVM_memory_size        |  0 - 1
+	 *                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+	 *                     |        cycles_per_bit         |  2 - 3
+	 *                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+	 *                     |        SigComp_version        |  4 - 5
+	 *                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+	 *                     |    partial_state_ID_length    |  6 - 7
+	 *                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+	 *                     |         state_length          |  8 - 9
+	 *                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+	 *                     |                               |
+	 *                     :           reserved            :  10 - 31
+	 *                     |                               |
+	 *                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+	 *
+	 *            Figure 5: Initializing Useful Values in UDVM memory
+	 */
+	/* UDVM_memory_size  */
+	buff[0] = 0;
+	buff[1] = 0;
+	/* cycles_per_bit */
+	buff[2] = 0;
+	buff[3] = 16;
+	/* SigComp_version */
+	buff[4] = 0;
+	buff[5] = 1;
+	/* partial_state_ID_length */
+	buff[6] = 0;
+	buff[7] = 0;
+	/* state_length  */
+	buff[8] = 0;
+	buff[9] = 0;
+	code_length = tvb_reported_length_remaining(bytecode_tvb, 0);
+
+	/* Load bytecode into UDVM starting at "udvm_mem_dest" */
+	i = udvm_mem_dest;
+	while ( code_length > offset ) {
+		buff[i] = tvb_get_guint8(bytecode_tvb, offset);
+		i++;
+		offset++;
+
+	}
+	cycles_per_bit = buff[2] << 8;
+	cycles_per_bit = cycles_per_bit | buff[3];
+	/* 
+	 * maximum_UDVM_cycles = (8 * n + 1000) * cycles_per_bit
+	 */
+	maximum_UDVM_cycles = (( 8 * msg_end ) + 1000) * cycles_per_bit;
+	/* Start executing code */
+	current_address = udvm_mem_dest;
+	input_address = 0;
+	operand_address = 0;
+	
+	proto_tree_add_text(udvm_tree, bytecode_tvb, offset, 1,"UDVM EXECUTION STARTED at Address: %u Message size %u",
+		udvm_mem_dest,msg_end);
+
+execute_next_instruction:
+
+	if ( used_udvm_cycles > maximum_UDVM_cycles ){
+		result_code = 15;
+		goto decompression_failure;
+	}
+	current_instruction = buff[current_address];
+	switch ( current_instruction ) {
+	case SIGCOMP_INSTR_DECOMPRESSION_FAILURE:
+		used_udvm_cycles++;
+		if ( result_code == 0 )
+			result_code = 9;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## DECOMPRESSION-FAILURE(0)",
+				current_address);
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Ethereal UDVM diagnostic: %s.",
+					    val_to_str(result_code, result_code_vals,"Unknown (%u)"));
+		}
+		if ( output_address > 0 ){
+			/* At least something got decompressed, show it */
+			decomp_tvb = tvb_new_real_data(out_buff,output_address,output_address);
+			tvb_set_child_real_data_tvbuff(message_tvb,decomp_tvb);
+			add_new_data_source(pinfo, decomp_tvb, "Decompressed SigComp message(Incomplete)");
+			proto_tree_add_text(udvm_tree, decomp_tvb, 0, -1,"SigComp message Decompression failure");
+		return decomp_tvb;
+		}
+
+		return NULL;
+		break;
+
+	case SIGCOMP_INSTR_AND: /* 1 AND ($operand_1, %operand_2) */
+		used_udvm_cycles++;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## AND(1) (operand_1, operand_2)",
+				current_address);
+		}
+		/* $operand_1*/
+		operand_address = current_address + 1;
+		next_operand_address = dissect_udvm_reference_operand(buff, operand_address, &operand_1, &result_dest);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_1 %u",
+				operand_address, operand_1);
+		}
+		operand_address = next_operand_address; 
+		/* %operand_2*/
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &operand_2);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_2 %u",
+				operand_address, operand_2);
+		}
+		/* execute the instruction */
+		result = operand_1 & operand_2;
+		lsb = result & 0xff;
+		msb = result >> 8;		
+		buff[result_dest] = msb;
+		buff[result_dest+1] = lsb;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"     Loading result %u at %u",
+				result, result_dest);
+		}
+		current_address = next_operand_address; 
+		goto execute_next_instruction;
+
+		break;
+
+	case SIGCOMP_INSTR_OR: /* 2 OR ($operand_1, %operand_2) */
+		used_udvm_cycles++;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## OR(2) (operand_1, operand_2)",
+				current_address);
+		}
+		/* $operand_1*/
+		operand_address = current_address + 1;
+		next_operand_address = dissect_udvm_reference_operand(buff, operand_address, &operand_1, &result_dest);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_1 %u",
+				operand_address, operand_1);
+		}
+		operand_address = next_operand_address; 
+		/* %operand_2*/
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &operand_2);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_2 %u",
+				operand_address, operand_2);
+		}
+		/* execute the instruction */
+		result = operand_1 | operand_2;
+		lsb = result & 0xff;
+		msb = result >> 8;		
+		buff[result_dest] = msb;
+		buff[result_dest+1] = lsb;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"     Loading result %u at %u",
+				result, result_dest);
+		}
+		current_address = next_operand_address; 
+		goto execute_next_instruction;
+
+		break;
+
+	case SIGCOMP_INSTR_NOT: /* 3 NOT ($operand_1) */
+		used_udvm_cycles++;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## NOT(3) ($operand_1)",
+				current_address);
+		}
+		/* $operand_1*/
+		operand_address = current_address + 1;
+		next_operand_address = dissect_udvm_reference_operand(buff, operand_address, &operand_1, &result_dest);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_1 %u",
+				operand_address, operand_1);
+		}
+		/* execute the instruction */
+		result = operand_1 ^ 0xffff;
+		lsb = result & 0xff;
+		msb = result >> 8;		
+		buff[result_dest] = msb;
+		buff[result_dest+1] = lsb;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"     Loading result %u at %u",
+				result, result_dest);
+		}
+		current_address = next_operand_address; 
+		goto execute_next_instruction;
+		break;
+
+	case SIGCOMP_INSTR_LSHIFT: /* 4 LSHIFT ($operand_1, %operand_2) */
+		used_udvm_cycles++;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## LSHIFT(4) ($operand_1, operand_2)",
+				current_address);
+		}
+		/* $operand_1*/
+		operand_address = current_address + 1;
+		next_operand_address = dissect_udvm_reference_operand(buff, operand_address, &operand_1, &result_dest);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_1 %u",
+				operand_address, operand_1);
+		}
+		operand_address = next_operand_address; 
+		/* %operand_2*/
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &operand_2);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_2 %u",
+				operand_address, operand_2);
+		}
+		/* execute the instruction */
+		result = operand_1 << operand_2;
+		lsb = result & 0xff;
+		msb = result >> 8;		
+		buff[result_dest] = msb;
+		buff[result_dest+1] = lsb;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"     Loading result %u at %u",
+				result, result_dest);
+		}
+		current_address = next_operand_address; 
+		goto execute_next_instruction;
+
+		break;
+		case SIGCOMP_INSTR_RSHIFT: /* 5 RSHIFT ($operand_1, %operand_2) */
+		used_udvm_cycles++;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## RSHIFT(5) (operand_1, operand_2)",
+				current_address);
+		}
+		/* $operand_1*/
+		operand_address = current_address + 1;
+		next_operand_address = dissect_udvm_reference_operand(buff, operand_address, &operand_1, &result_dest);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_1 %u",
+				operand_address, operand_1);
+		}
+		operand_address = next_operand_address; 
+		/* %operand_2*/
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &operand_2);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_2 %u",
+				operand_address, operand_2);
+		}
+		/* execute the instruction */
+		result = operand_1 >> operand_2;
+		lsb = result & 0xff;
+		msb = result >> 8;		
+		buff[result_dest] = msb;
+		buff[result_dest+1] = lsb;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"     Loading result %u at %u",
+				result, result_dest);
+		}
+		current_address = next_operand_address; 
+		goto execute_next_instruction;
+		break;
+		case SIGCOMP_INSTR_ADD: /* 6 ADD ($operand_1, %operand_2) */
+		used_udvm_cycles++;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## ADD(6) (operand_1, operand_2)",
+				current_address);
+		}
+		/* $operand_1*/
+		operand_address = current_address + 1;
+		next_operand_address = dissect_udvm_reference_operand(buff, operand_address, &operand_1, &result_dest);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_1 %u",
+				operand_address, operand_1);
+		}
+		operand_address = next_operand_address; 
+		/* %operand_2*/
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &operand_2);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_2 %u",
+				operand_address, operand_2);
+		}
+		/* execute the instruction */
+		result = operand_1 + operand_2;
+		lsb = result & 0xff;
+		msb = result >> 8;		
+		buff[result_dest] = msb;
+		buff[result_dest+1] = lsb;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"               Loading result %u at %u",
+				result, result_dest);
+		}
+		current_address = next_operand_address; 
+		goto execute_next_instruction;
+
+		case SIGCOMP_INSTR_SUBTRACT: /* 7 SUBTRACT ($operand_1, %operand_2) */
+		used_udvm_cycles++;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## SUBTRACT(7) (operand_1, operand_2)",
+				current_address);
+		}
+		/* $operand_1*/
+		operand_address = current_address + 1;
+		next_operand_address = dissect_udvm_reference_operand(buff, operand_address, &operand_1, &result_dest);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_1 %u",
+				operand_address, operand_1);
+		}
+		operand_address = next_operand_address; 
+		/* %operand_2*/
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &operand_2);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_2 %u",
+				operand_address, operand_2);
+		}
+		/* execute the instruction */
+		result = operand_1 - operand_2;
+		lsb = result & 0xff;
+		msb = result >> 8;		
+		buff[result_dest] = msb;
+		buff[result_dest+1] = lsb;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"               Loading result %u at %u",
+				result, result_dest);
+		}
+		current_address = next_operand_address; 
+		goto execute_next_instruction;
+		break;
+
+	case SIGCOMP_INSTR_MULTIPLY: /* 8 MULTIPLY ($operand_1, %operand_2) */
+		used_udvm_cycles++;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ##MULTIPLY(8) (operand_1, operand_2)",
+				current_address);
+		}
+		/* $operand_1*/
+		operand_address = current_address + 1;
+		next_operand_address = dissect_udvm_reference_operand(buff, operand_address, &operand_1, &result_dest);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_1 %u",
+				operand_address, operand_1);
+		}
+		operand_address = next_operand_address; 
+		/* %operand_2*/
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &operand_2);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_2 %u",
+				operand_address, operand_2);
+		}
+		/* 
+		 * execute the instruction
+		 * MULTIPLY (m, n)  := m * n (modulo 2^16)
+		 */
+		if ( operand_2 == 0){
+			result_code = 4;
+			goto decompression_failure;
+		}
+		result = operand_1 * operand_2;
+		lsb = result & 0xff;
+		msb = result >> 8;		
+		buff[result_dest] = msb;
+		buff[result_dest+1] = lsb;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"     Loading result %u at %u",
+				result, result_dest);
+		}
+		current_address = next_operand_address; 
+		goto execute_next_instruction;
+		break;
+
+	case SIGCOMP_INSTR_DIVIDE: /* 9 DIVIDE ($operand_1, %operand_2) */
+		used_udvm_cycles++;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## DIVIDE(9) (operand_1, operand_2)",
+				current_address);
+		}
+		/* $operand_1*/
+		operand_address = current_address + 1;
+		next_operand_address = dissect_udvm_reference_operand(buff, operand_address, &operand_1, &result_dest);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_1 %u",
+				operand_address, operand_1);
+		}
+		operand_address = next_operand_address; 
+		/* %operand_2*/
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &operand_2);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_2 %u",
+				operand_address, operand_2);
+		}
+		/* 
+		 * execute the instruction
+		 * DIVIDE (m, n)    := floor(m / n)
+		 * Decompression failure occurs if a DIVIDE or REMAINDER instruction
+ 		 * encounters an operand_2 that is zero.
+		 */
+		if ( operand_2 == 0){
+			result_code = 4;
+			goto decompression_failure;
+		}
+		result = (guint16)floor(operand_1/operand_2);
+		lsb = result & 0xff;
+		msb = result >> 8;		
+		buff[result_dest] = msb;
+		buff[result_dest+1] = lsb;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"     Loading result %u at %u",
+				result, result_dest);
+		}
+		current_address = next_operand_address; 
+		goto execute_next_instruction;
+		break;
+
+	case SIGCOMP_INSTR_REMAINDER: /* 10 REMAINDER ($operand_1, %operand_2) */
+		used_udvm_cycles++;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## REMAINDER(10) (operand_1, operand_2)",
+				current_address);
+		}
+		/* $operand_1*/
+		operand_address = current_address + 1;
+		next_operand_address = dissect_udvm_reference_operand(buff, operand_address, &operand_1, &result_dest);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_1 %u",
+				operand_address, operand_1);
+		}
+		operand_address = next_operand_address; 
+		/* %operand_2*/
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &operand_2);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      operand_2 %u",
+				operand_address, operand_2);
+		}
+		/* 
+		 * execute the instruction
+		 * REMAINDER (m, n) := m - n * floor(m / n)
+		 * Decompression failure occurs if a DIVIDE or REMAINDER instruction
+ 		 * encounters an operand_2 that is zero.
+		 */
+		if ( operand_2 == 0){
+			result_code = 4;
+			goto decompression_failure;
+		}
+		result = operand_1 - operand_2 * (guint16)floor(operand_1/operand_2);
+		lsb = result & 0xff;
+		msb = result >> 8;		
+		buff[result_dest] = msb;
+		buff[result_dest+1] = lsb;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"     Loading result %u at %u",
+				result, result_dest);
+		}
+		current_address = next_operand_address; 
+		goto execute_next_instruction;
+		break;
+	case SIGCOMP_INSTR_SORT_ASCENDING: /* 11 SORT-ASCENDING (%start, %n, %k) */
+		/*
+		 * 	used_udvm_cycles =  1 + k * (ceiling(log2(k)) + n)
+		 */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## SORT-ASCENDING(11) (start, n, k))",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Execution of this instruction is NOT implemented");
+		/*
+		 * 	used_udvm_cycles =  1 + k * (ceiling(log2(k)) + n)
+		 */
+		break;
+
+	case SIGCOMP_INSTR_SORT_DESCENDING: /* 12 SORT-DESCENDING (%start, %n, %k) */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## SORT-DESCENDING(12) (start, n, k))",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Execution of this instruction is NOT implemented");
+		/*
+		 * 	used_udvm_cycles =  1 + k * (ceiling(log2(k)) + n)
+		 */
+		break;
+	case SIGCOMP_INSTR_SHA_1: /* 13 SHA-1 (%position, %length, %destination) */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## SHA-1(13) (position, length, destination)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		/* %position */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &position);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      position %u",
+				operand_address, position);
+		}
+		operand_address = next_operand_address; 
+
+		/* %length */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &length);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Length %u",
+				operand_address, length);
+		}
+		operand_address = next_operand_address;
+
+		/* $destination */
+		next_operand_address = dissect_udvm_reference_operand(buff, operand_address, &ref_destination, &result_dest);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      $destination %u",
+				operand_address, ref_destination);
+		}
+		current_address = next_operand_address; 
+		used_udvm_cycles = used_udvm_cycles + 1 + length;
+		proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Execution of this instruction is NOT implemented");
+		break;
+
+	case SIGCOMP_INSTR_LOAD: /* 14 LOAD (%address, %value) */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## LOAD(14) (%%address, %%value)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		/* %address */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &address);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Address %u",
+				operand_address, address);
+		}
+		operand_address = next_operand_address; 
+		/* %value */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &value);
+		lsb = value & 0xff;
+		msb = value >> 8;
+
+		buff[address] = msb;
+		buff[address + 1] = lsb;
+
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Value %u",
+				operand_address, value);
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"     Loading bytes at %u Value %u 0x%x",
+					address, value, value);
+		}
+		used_udvm_cycles++;
+		current_address = next_operand_address;
+		goto execute_next_instruction;
+		break;
+
+	case SIGCOMP_INSTR_MULTILOAD: /* 15 MULTILOAD (%address, #n, %value_0, ..., %value_n-1) */
+		/* RFC 3320:
+		 * The MULTILOAD instruction sets a contiguous block of 2-byte words in
+		 * the UDVM memory to specified values.
+		 * Hmm what if the value to load only takes one byte ? Chose to always load two bytes.
+		 */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## MULTILOAD(15) (%%address, #n, value_0, ..., value_n-1)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		/* %address */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &address);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Address %u",
+				operand_address, address);
+		}
+		operand_address = next_operand_address; 
+
+		/* #n */
+		next_operand_address = decode_udvm_literal_operand(buff,operand_address, &n);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      n %u",
+				operand_address, n);
+		}
+		operand_address = next_operand_address; 
+		used_udvm_cycles = used_udvm_cycles + n;
+		while ( n > 0) {
+			n = n - 1;
+			/* %value */
+			next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &value);
+			lsb = value & 0xff;
+			msb = value >> 8;
+
+			buff[address] = msb;
+			buff[address + 1] = lsb;
+			/* debug
+			*/
+			length = next_operand_address - operand_address;
+
+			if (print_level_1 ){
+				proto_tree_add_text(udvm_tree, bytecode_tvb, operand_address - 128, length,"Addr: %u      Value %5u      - Loading bytes at %5u Value %5u 0x%x",
+					operand_address, value, address, value, value);
+			}
+			address = address + 2;
+			operand_address = next_operand_address; 
+		}
+		current_address = next_operand_address;
+		goto execute_next_instruction;
+
+		break;
+			 
+	case SIGCOMP_INSTR_PUSH: /* 16 PUSH (%value) */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## PUSH(16) (value)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		/* %value */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &value);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Value %u",
+				operand_address, value);
+		}
+		used_udvm_cycles++;
+		proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Execution of this instruction is NOT implemented");
+		break;
+
+	case SIGCOMP_INSTR_POP: /* 17 POP (%address) */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## POP(17) (address)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		/* %address */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &address);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Address %u",
+				operand_address, address);
+		}
+		operand_address = next_operand_address; 
+		used_udvm_cycles++;
+		proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Execution of this instruction is NOT implemented");
+		break;
+
+	case SIGCOMP_INSTR_COPY: /* 18 COPY (%position, %length, %destination) */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## COPY(18) (position, length, destination)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		/* %position */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &position);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      position %u",
+				operand_address, position);
+		}
+		operand_address = next_operand_address; 
+
+		/* %length */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &length);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Length %u",
+				operand_address, length);
+		}
+		operand_address = next_operand_address;
+
+		/* %destination */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &destination);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Destination %u",
+				operand_address, destination);
+		}
+		current_address = next_operand_address;
+		/*
+		 * 8.4.  Byte copying
+		 * :
+		 * The string of bytes is copied in ascending order of memory address,
+		 * respecting the bounds set by byte_copy_left and byte_copy_right.
+		 * More precisely, if a byte is copied from/to Address m then the next
+		 * byte is copied from/to Address n where n is calculated as follows:
+		 *
+		 * Set k := m + 1 (modulo 2^16)
+		 * If k = byte_copy_right then set n := byte_copy_left, else set n := k
+		 *
+		 */ 
+
+		n = 0;
+		k = destination; 
+		byte_copy_right = buff[66] << 8;
+		byte_copy_right = byte_copy_right | buff[67];
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, message_tvb, input_address, 1,
+						"               byte_copy_right = %u", byte_copy_right);
+		}
+
+		while ( n < length ){
+
+			if (print_level_1 ){
+				proto_tree_add_text(udvm_tree, message_tvb, input_address, 1,
+						"               byte_copy_right = %u", byte_copy_right);
+			}
+			if ( k == byte_copy_right ){
+				byte_copy_left = buff[64] << 8;
+				byte_copy_left = byte_copy_left | buff[65];
+				k = byte_copy_left;
+			}
+			buff[k] = buff[position + n];
+			if (print_level_1 ){
+				proto_tree_add_text(udvm_tree, message_tvb, input_address, 1,
+					"               Copying value: %u (0x%x) to Addr: %u", buff[position + n], buff[position + n], k);
+			}
+			k = ( k + 1 ) & 0xffff;
+			n++;
+		}
+		used_udvm_cycles = used_udvm_cycles + 1 + length;
+		goto execute_next_instruction;
+		break;
+
+	case SIGCOMP_INSTR_COPY_LITERAL: /* 19 COPY-LITERAL (%position, %length, $destination) */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## COPY-LITERAL(19) (position, length, $destination)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		/* %position */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &position);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      position %u",
+				operand_address, address);
+		}
+		operand_address = next_operand_address; 
+
+		/* %length */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &length);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Length %u",
+				operand_address, length);
+		}
+		operand_address = next_operand_address;
+
+
+		/* $destination */
+		next_operand_address = dissect_udvm_reference_operand(buff, operand_address, &ref_destination, &result_dest);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      destination %u",
+				operand_address, ref_destination);
+		}
+		current_address = next_operand_address; 
+
+
+		/*
+		 * 8.4.  Byte copying
+		 * :
+		 * The string of bytes is copied in ascending order of memory address,
+		 * respecting the bounds set by byte_copy_left and byte_copy_right.
+		 * More precisely, if a byte is copied from/to Address m then the next
+		 * byte is copied from/to Address n where n is calculated as follows:
+		 *
+		 * Set k := m + 1 (modulo 2^16)
+		 * If k = byte_copy_right then set n := byte_copy_left, else set n := k
+		 *
+		 */ 
+
+		n = 0;
+		k = ref_destination; 
+		byte_copy_right = buff[66] << 8;
+		byte_copy_right = byte_copy_right | buff[67];
+		while ( n < length ){
+
+			if (print_level_1 ){
+				proto_tree_add_text(udvm_tree, message_tvb, input_address, 1,
+						"               byte_copy_right = %u", byte_copy_right);
+			}
+			if ( k == byte_copy_right ){
+				byte_copy_left = buff[64] << 8;
+				byte_copy_left = byte_copy_left | buff[65];
+				k = byte_copy_left;
+			}
+			buff[k] = buff[position + n];
+			if (print_level_1 ){
+				proto_tree_add_text(udvm_tree, message_tvb, input_address, 1,
+					"               Copying value: %u (0x%x) to Addr: %u", buff[position + n], buff[position + n], k);
+			}
+			k = ( k + 1 ) & 0xffff;
+			n++;
+		}
+		buff[result_dest] = k >> 8;
+		buff[result_dest + 1] = k & 0x00ff;
+
+		used_udvm_cycles = used_udvm_cycles + 1 + length;
+		goto execute_next_instruction;
+		break;
+ 
+	case SIGCOMP_INSTR_COPY_OFFSET: /* 20 COPY-OFFSET (%offset, %length, $destination) */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## COPY-OFFSET(20) (offset, length, $destination)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		/* %offset */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &multy_offset);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      offset %u",
+				operand_address, multy_offset);
+		}
+		operand_address = next_operand_address; 
+
+		/* %length */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &length);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Length %u",
+				operand_address, length);
+		}
+		operand_address = next_operand_address;
+
+
+		/* $destination */
+		next_operand_address = dissect_udvm_reference_operand(buff, operand_address, &ref_destination, &result_dest);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      $destination %u",
+				operand_address, ref_destination);
+		}
+		current_address = next_operand_address; 
+
+		/* Execute the instruction:
+		 * To derive the value of the position operand, starting at the memory
+		 * address specified by destination, the UDVM counts backwards a total
+		 * of offset memory addresses.
+		 * 
+		 * If the memory address specified in byte_copy_left is reached, the
+		 * next memory address is taken to be (byte_copy_right - 1) modulo 2^16.
+		 */
+		byte_copy_left = buff[64] << 8;
+		byte_copy_left = byte_copy_left | buff[65];
+		byte_copy_right = buff[66] << 8;
+		byte_copy_right = byte_copy_right | buff[67];
+
+		if ( (byte_copy_left + multy_offset) > ( ref_destination )){
+			/* wrap around */
+			position = byte_copy_right - ( multy_offset - ( ref_destination - byte_copy_left )); 
+		}else{
+			position = ref_destination - multy_offset;
+		}
+
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, message_tvb, input_address, 1,
+					"               byte_copy_left = %u byte_copy_right = %u position= %u",
+					byte_copy_left, byte_copy_right, position);
+			}
+		/* The COPY-OFFSET instruction then behaves as a COPY-LITERAL
+		 * instruction, taking the value of the position operand to be the last
+		 * memory address reached in the above step.
+		 */
+
+		/*
+		 * 8.4.  Byte copying
+		 * :
+		 * The string of bytes is copied in ascending order of memory address,
+		 * respecting the bounds set by byte_copy_left and byte_copy_right.
+		 * More precisely, if a byte is copied from/to Address m then the next
+		 * byte is copied from/to Address n where n is calculated as follows:
+		 *
+		 * Set k := m + 1 (modulo 2^16)
+		 * If k = byte_copy_right then set n := byte_copy_left, else set n := k
+		 *
+		 */ 
+
+		n = 0;
+		k = ref_destination; 
+		byte_copy_right = buff[66] << 8;
+		byte_copy_right = byte_copy_right | buff[67];
+		while ( n < length ){
+			if ( k == byte_copy_right ){
+				byte_copy_left = buff[64] << 8;
+				byte_copy_left = byte_copy_left | buff[65];
+				k = byte_copy_left;
+				if (print_level_2 ){
+					proto_tree_add_text(udvm_tree, message_tvb, input_address, 1,
+							"               byte_copy_left = %u byte_copy_right = %u", byte_copy_left, byte_copy_right);
+				}
+			}
+			if ( position == byte_copy_right ){
+				byte_copy_left = buff[64] << 8;
+				byte_copy_left = byte_copy_left | buff[65];
+				position = byte_copy_left;
+				if (print_level_2 ){
+					proto_tree_add_text(udvm_tree, message_tvb, input_address, 1,
+							"               byte_copy_left = %u byte_copy_right = %u", byte_copy_left, byte_copy_right);
+				}
+			}
+			buff[k] = buff[position];
+			if (print_level_1 ){
+				proto_tree_add_text(udvm_tree, message_tvb, input_address, 1,
+					"               Copying value: %5u (0x%x) from Addr: %u to Addr: %u",
+					buff[position + n], buff[position + n],(position + n), k);
+			}
+			k = ( k + 1 ) & 0xffff;
+			n++;
+			position++;
+		}
+		buff[result_dest] = k >> 8;
+		buff[result_dest + 1] = k & 0x00ff;
+		used_udvm_cycles = used_udvm_cycles + 1 + length;
+		goto execute_next_instruction;
+
+		break;
+	case SIGCOMP_INSTR_MEMSET: /* 21 MEMSET (%address, %length, %start_value, %offset) */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## MEMSET(21) (address, length, start_value, offset)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+
+		/* %address */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &address);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Address %u",
+				operand_address, address);
+		}
+		operand_address = next_operand_address; 
+
+		/*  %length, */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &length);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Length %u",
+				operand_address, length);
+		}
+		operand_address = next_operand_address;
+		/* %start_value */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &start_value);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      start_value %u",
+				operand_address, start_value);
+		}
+		operand_address = next_operand_address; 
+
+		/* %offset */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &multy_offset);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      offset %u",
+				operand_address, multy_offset);
+		}
+		current_address = next_operand_address; 
+		/* exetute the instruction
+		 * The sequence of values used by the MEMSET instruction is specified by
+		 * the following formula:
+		 * 
+		 * Seq[n] := (start_value + n * offset) modulo 256
+		 */
+		n = 0;
+		k = address; 
+		byte_copy_right = buff[66] << 8;
+		byte_copy_right = byte_copy_right | buff[67];
+		while ( n < length ){
+			if ( k == byte_copy_right ){
+				byte_copy_left = buff[64] << 8;
+				byte_copy_left = byte_copy_left | buff[65];
+				k = byte_copy_left;
+				if (print_level_2 ){
+					proto_tree_add_text(udvm_tree, message_tvb, input_address, 1,
+							"               byte_copy_left = %u byte_copy_right = %u", byte_copy_left, byte_copy_right);
+				}
+			}
+			buff[k] = (start_value + ( n * multy_offset)) & 0xff;
+			if (print_level_2 ){
+				proto_tree_add_text(udvm_tree, message_tvb, input_address, 1,
+					"     Storing value: %u (0x%x) at Addr: %u",
+					buff[k], buff[k], k);
+			}
+			k = ( k + 1 ) & 0xffff;
+			n++;
+		}/* end while */
+		used_udvm_cycles = used_udvm_cycles + 1 + length;
+		goto execute_next_instruction;
+		break;
+
+
+	case SIGCOMP_INSTR_JUMP: /* 22 JUMP (@address) */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## JUMP(22) (@address)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		/* @address */
+		 /* operand_value = (memory_address_of_instruction + D) modulo 2^16 */
+		next_operand_address = decode_udvm_address_operand(buff,operand_address, &at_address, current_address);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      @Address %u",
+				operand_address, at_address);
+		}
+		current_address = at_address;
+		used_udvm_cycles++;
+		goto execute_next_instruction;
+		break;
+
+	case SIGCOMP_INSTR_COMPARE: /* 23 */
+		/* COMPARE (%value_1, %value_2, @address_1, @address_2, @address_3)
+		 */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## COMPARE(23) (value_1, value_2, @address_1, @address_2, @address_3)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+
+		/* %value_1 */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &value_1);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Value %u",
+					operand_address, value_1);
+		}
+		operand_address = next_operand_address;
+
+		/* %value_2 */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &value_2);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Value %u",
+					operand_address, value_2);
+		}
+		operand_address = next_operand_address;
+
+		/* @address_1 */
+		 /* operand_value = (memory_address_of_instruction + D) modulo 2^16 */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &at_address_1);
+		at_address_1 = ( current_address + at_address_1) & 0xffff;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      @Address %u",
+				operand_address, at_address_1);
+		}
+		operand_address = next_operand_address;
+
+
+		/* @address_2 */
+		 /* operand_value = (memory_address_of_instruction + D) modulo 2^16 */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &at_address_2);
+		at_address_2 = ( current_address + at_address_2) & 0xffff;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      @Address %u",
+				operand_address, at_address_2);
+		}
+		operand_address = next_operand_address;
+
+		/* @address_3 */
+		 /* operand_value = (memory_address_of_instruction + D) modulo 2^16 */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &at_address_3);
+		at_address_3 = ( current_address + at_address_3) & 0xffff;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      @Address %u",
+				operand_address, at_address_3);
+		}
+		/* execute the instruction
+		 * If value_1 < value_2 then the UDVM continues instruction execution at
+		 * the memory address specified by address 1. If value_1 = value_2 then
+		 * it jumps to the address specified by address_2. If value_1 > value_2
+		 * then it jumps to the address specified by address_3.
+		 */
+		if ( value_1 < value_2 )
+			current_address = at_address_1;
+		if ( value_1 == value_2 )
+			current_address = at_address_2;
+		if ( value_1 > value_2 )
+			current_address = at_address_3;
+		used_udvm_cycles++;
+		goto execute_next_instruction;
+		break;
+
+	case SIGCOMP_INSTR_CALL: /* 24 CALL (@address) (PUSH addr )*/
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## CALL(24) (@address) (PUSH addr )",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		/* @address */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &at_address);
+		at_address = ( current_address + at_address) & 0xffff;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      @Address %u",
+				operand_address, at_address);
+		 /* operand_value = (memory_address_of_instruction + D) modulo 2^16 */
+		}
+		used_udvm_cycles++;
+		proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Execution of this instruction is NOT implemented");
+		break;
+
+	case SIGCOMP_INSTR_RETURN: /* 25 POP and return */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## POP(25) and return",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Execution of this instruction is NOT implemented");
+		used_udvm_cycles++;
+		break;
+
+	case SIGCOMP_INSTR_SWITCH: /* 26 SWITCH (#n, %j, @address_0, @address_1, ... , @address_n-1) */
+		/*
+		 * When a SWITCH instruction is encountered the UDVM reads the value of
+		 * j. It then continues instruction execution at the address specified
+		 * by address j.
+		 * 
+		 * Decompression failure occurs if j specifies a value of n or more, or
+		 * if the address lies beyond the overall UDVM memory size.
+		 */
+		instruction_address = current_address;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## SWITCH (#n, j, @address_0, @address_1, ... , @address_n-1))",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		/* #n 
+		 * Number of addresses in the instruction
+		 */
+		next_operand_address = decode_udvm_literal_operand(buff,operand_address, &n);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      n %u",
+				operand_address, n);
+		}
+		operand_address = next_operand_address; 
+		/* %j */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &j);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      j %u",
+					operand_address, j);
+		}
+		operand_address = next_operand_address;
+		m = 0;
+		while ( m < n ){
+			/* @address_n-1 */
+			/* operand_value = (memory_address_of_instruction + D) modulo 2^16 */
+			next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &at_address_1);
+			at_address_1 = ( instruction_address + at_address_1) & 0xffff;
+			if (print_level_1 ){
+				proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      @Address %u",
+					operand_address, at_address_1);
+			}
+			if ( j == m ){
+				current_address = at_address_1;
+			}
+			operand_address = next_operand_address;
+			m++;
+		}
+		/* Check decompression failure */
+		if ( ( j == n ) || ( j > n )){
+			result_code = 5;
+			goto decompression_failure;
+		}
+		if ( current_address > UDVM_MEMORY_SIZE ){
+			result_code = 6;
+			goto decompression_failure;
+		}
+		used_udvm_cycles = used_udvm_cycles + 1 + n;
+;
+		goto execute_next_instruction;
+
+		break;
+	case SIGCOMP_INSTR_CRC: /* 27 CRC (%value, %position, %length, @address) */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## CRC (value, position, length, @address)",
+				current_address);
+		}
+		/* %value */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &value);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Value %u",
+				operand_address, value);
+		}
+		/* %position */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &position);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      position %u",
+				operand_address, position);
+		}
+		operand_address = next_operand_address; 
+
+		/* %length */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &length);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Length %u",
+				operand_address, length);
+		}
+		operand_address = next_operand_address;
+
+		/* @address */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &at_address);
+		at_address = ( current_address + at_address) & 0xffff;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      @Address %u",
+				operand_address, at_address);
+		}
+		 /* operand_value = (memory_address_of_instruction + D) modulo 2^16 */
+		used_udvm_cycles = used_udvm_cycles + 1 + length;
+
+		proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Execution of this instruction is NOT implemented");
+		break;
+
+
+	case SIGCOMP_INSTR_INPUT_BYTES: /* 28 INPUT-BYTES (%length, %destination, @address) */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u ## INPUT-BYTES(28) length, destination, @address)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		/* %length */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &length);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Length %u",
+				operand_address, length);
+		}
+		operand_address = next_operand_address;
+
+		/* %destination */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &destination);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Destination %u",
+				operand_address, destination);
+		}
+		operand_address = next_operand_address;
+
+		/* @address */
+		 /* operand_value = (memory_address_of_instruction + D) modulo 2^16 */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &at_address);
+		at_address = ( current_address + at_address) & 0xffff;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      @Address %u",
+				operand_address, at_address);
+		}
+		/* execute the instruction TODO insert checks 
+		 * RFC 3320 :
+		 *
+         *    0             7 8            15
+         *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+         *   |        byte_copy_left         |  64 - 65
+         *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+         *   |        byte_copy_right        |  66 - 67
+         *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+         *   |        input_bit_order        |  68 - 69
+         *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+         *   |        stack_location         |  70 - 71
+         *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+		 * 
+		 * Figure 7: Memory addresses of the UDVM registers
+		 * :
+		 * 8.4.  Byte copying
+		 * :
+		 * The string of bytes is copied in ascending order of memory address,
+		 * respecting the bounds set by byte_copy_left and byte_copy_right.
+		 * More precisely, if a byte is copied from/to Address m then the next
+		 * byte is copied from/to Address n where n is calculated as follows:
+		 *
+		 * Set k := m + 1 (modulo 2^16)
+		 * If k = byte_copy_right then set n := byte_copy_left, else set n := k
+		 *
+		 */ 
+
+		n = 0;
+		k = destination; 
+		byte_copy_right = buff[66] << 8;
+		byte_copy_right = byte_copy_right | buff[67];
+		/* clear out remaining bits if any */
+		remaining_bits = 0;
+		input_bits=0;
+		/* operand_address used as dummy */
+		while ( n < length ){
+			if (input_address > ( msg_end - 1)){
+				current_address = at_address;
+				result_code = 14;
+				goto execute_next_instruction;
+			}
+
+			if (print_level_1 ){
+				proto_tree_add_text(udvm_tree, message_tvb, input_address, 1,
+						"               byte_copy_right = %u", byte_copy_right);
+			}
+			if ( k == byte_copy_right ){
+				byte_copy_left = buff[64] << 8;
+				byte_copy_left = byte_copy_left | buff[65];
+				k = byte_copy_left;
+			}
+			octet = tvb_get_guint8(message_tvb, input_address);
+			buff[k] = octet;
+			if (print_level_1 ){
+				proto_tree_add_text(udvm_tree, message_tvb, input_address, 1,
+					"               Loading value: %u (0x%x) at Addr: %u", octet, octet, k);
+			}
+			input_address++;
+			/*
+			 * If the instruction requests data that lies beyond the end of the
+			 * SigComp message, no data is returned.  Instead the UDVM moves program
+			 * execution to the address specified by the address operand.
+			 */
+
+			
+			k = ( k + 1 ) & 0xffff;
+			n++;
+		}
+		used_udvm_cycles = used_udvm_cycles + 1 + length;
+		current_address = next_operand_address;
+		goto execute_next_instruction;
+		break;
+	case SIGCOMP_INSTR_INPUT_BITS:/* 29   INPUT-BITS (%length, %destination, @address) */
+		/*
+		 * The length operand indicates the requested number of bits.
+		 * Decompression failure occurs if this operand does not lie between 0
+		 * and 16 inclusive.
+		 * 
+		 * The destination operand specifies the memory address to which the
+		 * compressed data should be copied.  Note that the requested bits are
+		 * interpreted as a 2-byte integer ranging from 0 to 2^length - 1, as
+		 * explained in Section 8.2.
+		 *
+		 * If the instruction requests data that lies beyond the end of the
+		 * SigComp message, no data is returned.  Instead the UDVM moves program
+		 * execution to the address specified by the address operand.
+		 */
+
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## INPUT-BITS(29) (length, destination, @address)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+
+		/* %length */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &length);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      length %u",
+				operand_address, length);
+		}
+		operand_address = next_operand_address;
+		/* %destination */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &destination);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Destination %u",
+				operand_address, destination);
+		}
+		operand_address = next_operand_address;
+
+		/* @address */
+		 /* operand_value = (memory_address_of_instruction + D) modulo 2^16 */
+		next_operand_address = decode_udvm_address_operand(buff,operand_address, &at_address, current_address);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      @Address %u",
+				operand_address, at_address);
+		}
+		current_address = next_operand_address;
+
+		/*
+		 * Execute actual instr.
+		 * The input_bit_order register contains the following three flags:
+		 * 
+		 *            0             7 8            15
+		 *           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+		 *           |         reserved        |F|H|P|  68 - 69
+		 *           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+		 */
+		input_bit_order = buff[68] << 8;
+		input_bit_order = input_bit_order | buff[69];
+		/*
+		 * If the instruction requests data that lies beyond the end of the
+		 * SigComp message, no data is returned.  Instead the UDVM moves program
+		 * execution to the address specified by the address operand.
+		 */
+
+		if ((input_address > ( msg_end -1)) && (remaining_bits == 0 )){
+			result_code = 11;
+			current_address = at_address;
+			goto execute_next_instruction;
+		}
+
+		if ( length > 16 ){
+			result_code = 7;
+			goto decompression_failure;
+		}
+		if ( input_bit_order > 7 ){
+			result_code = 8;
+			goto decompression_failure;
+		}
+		/* Transfer F bit to bit_order to tell decomp dispatcher which bit order to use */
+		bit_order = ( input_bit_order & 0x0004 ) >> 2;
+		value = decomp_dispatch_get_bits( message_tvb, udvm_tree, bit_order, 
+				buff, &old_input_bit_order, &remaining_bits,
+				&input_bits, &input_address, length, &result_code, msg_end);
+		if ( result_code == 11 ){
+			current_address = at_address;
+			goto execute_next_instruction;
+		}
+		msb = value >> 8;
+		lsb = value & 0x00ff;
+		buff[destination] = msb;
+		buff[destination + 1]=lsb;
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, message_tvb, input_address, 1,
+			"               Loading value: %u (0x%x) at Addr: %u, remaining_bits: %u", value, value, destination, remaining_bits);
+		}
+
+		used_udvm_cycles = used_udvm_cycles + 1 + length;
+		goto execute_next_instruction;
+		break;
+	case SIGCOMP_INSTR_INPUT_HUFFMAN: /* 30 */
+		/*
+		 * INPUT-HUFFMAN (%destination, @address, #n, %bits_1, %lower_bound_1,
+		 *  %upper_bound_1, %uncompressed_1, ... , %bits_n, %lower_bound_n,
+		 *  %upper_bound_n, %uncompressed_n)
+		 */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## INPUT-HUFFMAN (destination, @address, #n, bits_1, lower_bound_1,upper_bound_1, uncompressed_1, ... , bits_n, lower_bound_n,upper_bound_n, uncompressed_n)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+
+		/* %destination */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &destination);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      Destination %u",
+				operand_address, destination);
+		}
+		operand_address = next_operand_address;
+
+		/* @address */
+		 /* operand_value = (memory_address_of_instruction + D) modulo 2^16 */
+		next_operand_address = decode_udvm_address_operand(buff,operand_address, &at_address, current_address);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      @Address %u",
+				operand_address, at_address);
+		}
+		operand_address = next_operand_address;
+
+		/* #n */
+		next_operand_address = decode_udvm_literal_operand(buff,operand_address, &n);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      n %u",
+				operand_address, n);
+		}
+		operand_address = next_operand_address; 
+		/*
+		 * Note that if n = 0 then the INPUT-HUFFMAN instruction is ignored and
+		 * program execution resumes at the following instruction.
+		 * Decompression failure occurs if (bits_1 + ... + bits_n) > 16.
+		 * 
+		 * In all other cases, the behavior of the INPUT-HUFFMAN instruction is
+		 * defined below:
+		 * 
+		 * 1. Set j := 1 and set H := 0.
+		 * 
+		 * 2. Request bits_j compressed bits.  Interpret the returned bits as an
+		 * integer k from 0 to 2^bits_j - 1, as explained in Section 8.2.
+		 * 
+		 * 3. Set H := H * 2^bits_j + k.
+		 * 
+		 * 4. If data is requested that lies beyond the end of the SigComp
+		 * message, terminate the INPUT-HUFFMAN instruction and move program
+		 * execution to the memory address specified by the address operand.
+		 * 
+		 * 5. If (H < lower_bound_j) or (H > upper_bound_j) then set j := j + 1.
+		 * Then go back to Step 2, unless j > n in which case decompression
+		 * failure occurs.
+		 * 
+		 * 6. Copy (H + uncompressed_j - lower_bound_j) modulo 2^16 to the
+		 * memory address specified by the destination operand.
+		 * 
+		 */
+		/*
+		 * The input_bit_order register contains the following three flags:
+		 * 
+		 *            0             7 8            15
+		 *           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+		 *           |         reserved        |F|H|P|  68 - 69
+		 *           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+		 *
+		 * Transfer H bit to bit_order to tell decomp dispatcher which bit order to use 
+		 */
+		input_bit_order = buff[68] << 8;
+		input_bit_order = input_bit_order | buff[69];
+		bit_order = ( input_bit_order & 0x0002 ) >> 1;
+
+		j = 1;
+		H = 0;
+		m = n;
+		outside_huffman_boundaries = TRUE;
+		print_in_loop = print_level_1;
+		while ( m > 0 ){
+			/* %bits_n */
+			next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &bits_n);
+			if (print_in_loop ){
+				proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      bits_n %u",
+					operand_address, bits_n);
+			}
+			operand_address = next_operand_address; 
+
+			/* %lower_bound_n */
+			next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &lower_bound_n);
+			if (print_in_loop ){
+				proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      lower_bound_n %u",
+					operand_address, lower_bound_n);
+			}
+			operand_address = next_operand_address; 
+			/* %upper_bound_n */
+			next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &upper_bound_n);
+			if (print_in_loop ){
+				proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      upper_bound_n %u",
+					operand_address, upper_bound_n);
+			}
+			operand_address = next_operand_address; 
+			/* %uncompressed_n */
+			next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &uncompressed_n);
+			if (print_in_loop ){
+				proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      uncompressed_n %u",
+					operand_address, uncompressed_n);
+			}
+			operand_address = next_operand_address;
+			/* execute instruction */
+			if ( outside_huffman_boundaries ) {
+				/*
+				 * 3. Set H := H * 2^bits_j + k.
+				 */
+				k = decomp_dispatch_get_bits( message_tvb, udvm_tree, bit_order, 
+						buff, &old_input_bit_order, &remaining_bits,
+						&input_bits, &input_address, bits_n, &result_code, msg_end);
+				if ( result_code == 11 ){
+					current_address = at_address;
+					goto execute_next_instruction;
+				}
+				/* ldexp Returns x multiplied by 2 raised to the power of exponent.
+				 * x*2^exponent
+				 */
+				oldH = H;
+				H = ( (guint16)ldexp( H, bits_n) + k );
+				if (print_level_3 ){
+					proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"               Set H(%u) := H(%u) * 2^bits_j(%u) + k(%u)",
+						 H ,oldH,((guint16)pow(2,bits_n)),k);
+				}
+
+				/*
+				 * 4. If data is requested that lies beyond the end of the SigComp
+				 * message, terminate the INPUT-HUFFMAN instruction and move program
+				 * execution to the memory address specified by the address operand.
+				 */
+				if ( input_address > msg_end ){
+					current_address = at_address;
+					goto execute_next_instruction;
+				}
+				/*
+				 * 5. If (H < lower_bound_j) or (H > upper_bound_j) then set j := j + 1.
+				 * Then go back to Step 2, unless j > n in which case decompression
+				 * failure occurs.
+				 */
+				if ((H < lower_bound_n) || (H > upper_bound_n)){
+					outside_huffman_boundaries = TRUE;
+				}else{
+					outside_huffman_boundaries = FALSE;
+					print_in_loop = FALSE;
+					/*
+					 * 6. Copy (H + uncompressed_j - lower_bound_j) modulo 2^16 to the
+					 * memory address specified by the destination operand.
+					 */
+					if (print_level_2 ){
+						proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+							"               H(%u) = H(%u) + uncompressed_n(%u) - lower_bound_n(%u)",
+						(H + uncompressed_n - lower_bound_n ),H, uncompressed_n, lower_bound_n);
+					}
+					H = H + uncompressed_n - lower_bound_n;
+					msb = H >> 8;
+					lsb = H & 0x00ff;
+					buff[destination] = msb;
+					buff[destination + 1]=lsb;
+					if (print_level_1 ){
+						proto_tree_add_text(udvm_tree, message_tvb, input_address, 1,
+					"               Loading H: %u (0x%x) at Addr: %u,j = %u remaining_bits: %u", 
+						H, H, destination,( n - m + 1 ), remaining_bits);
+					}
+					
+				}
+
+
+			}
+			m = m - 1;
+		}
+		if ( outside_huffman_boundaries ) {
+			result_code = 10;
+			goto decompression_failure;
+		}
+
+		current_address = next_operand_address;
+		used_udvm_cycles = used_udvm_cycles + 1 + n;
+		goto execute_next_instruction;
+		break;
+
+	case SIGCOMP_INSTR_STATE_ACCESS: /* 31 */
+		/*   STATE-ACCESS (%partial_identifier_start, %partial_identifier_length,
+		 * %state_begin, %state_length, %state_address, %state_instruction)
+		 */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## STATE-ACCESS(31) (partial_identifier_start, partial_identifier_length,state_begin, state_length, state_address, state_instruction)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+
+		/* 
+		 * %partial_identifier_start
+		 */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &p_id_start);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u       partial_identifier_start %u",
+				operand_address, p_id_start);
+		}
+		operand_address = next_operand_address;
+
+		/*
+		 * %partial_identifier_length
+		 */
+		operand_address = next_operand_address;
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &p_id_length);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u       partial_identifier_length %u",
+				operand_address, p_id_length);
+		}
+		/*
+		 * %state_begin
+		 */
+		operand_address = next_operand_address;
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &state_begin);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u       state_begin %u",
+				operand_address, state_begin);
+		}
+		/*
+		 * %state_length
+		 */
+		operand_address = next_operand_address;
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &state_length);		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u       state_length %u",
+				operand_address, state_length);
+		}
+		/*
+		 * %state_address
+		 */
+		operand_address = next_operand_address;
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &state_address);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u       state_address %u",
+				operand_address, state_address);
+		}
+		/*
+		 * %state_instruction
+		 */
+		operand_address = next_operand_address;
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &state_instruction);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u       state_instruction %u",
+				operand_address, state_instruction);
+		}
+		current_address = next_operand_address;
+		byte_copy_right = buff[66] << 8;
+		byte_copy_right = byte_copy_right | buff[67];
+		byte_copy_left = buff[64] << 8;
+		byte_copy_left = byte_copy_left | buff[65];
+		if (print_level_2 ){
+			proto_tree_add_text(udvm_tree, message_tvb, input_address, 1,
+					"               byte_copy_right = %u, byte_copy_left = %u", byte_copy_right,byte_copy_left);
+		}
+
+		result_code = udvm_state_access(buff, p_id_start, p_id_length, state_begin, state_length, 
+			state_address, state_instruction);
+		if ( result_code != 0 ){
+			goto decompression_failure; 
+		}
+		used_udvm_cycles = used_udvm_cycles + 1 + state_length;
+		goto execute_next_instruction;
+		break;
+	case SIGCOMP_INSTR_STATE_CREATE: /* 32 */
+		/*
+		 * STATE-CREATE (%state_length, %state_address, %state_instruction,
+		 * %minimum_access_length, %state_retention_priority)
+		 */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## STATE-CREATE(32) (state_length, state_address, state_instruction,minimum_access_length, state_retention_priority)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+
+		/*
+		 * %state_length
+		 */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &state_length);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u       state_length %u",
+				operand_address, state_length);
+		}
+		/*
+		 * %state_address
+		 */
+		operand_address = next_operand_address;
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &state_address);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u       state_address %u",
+				operand_address, state_address);
+		}
+		/*
+		 * %state_instruction
+		 */
+		operand_address = next_operand_address;
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &state_instruction);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u       state_instruction %u",
+				operand_address, state_instruction);
+		}
+		operand_address = next_operand_address;
+		/*
+		 * %minimum_access_length
+		 */
+		operand_address = next_operand_address;
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &minimum_access_length);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u       minimum_access_length %u",
+				operand_address, minimum_access_length);
+		}
+		operand_address = next_operand_address;
+		/*
+		 * %state_retention_priority
+		 */
+		operand_address = next_operand_address;
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &state_retention_priority);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u       state_retention_priority %u",
+				operand_address, state_retention_priority);
+		}
+		current_address = next_operand_address;
+		/* Execute the instruction
+		 * TODO Implement the instruction
+		 * RFC3320:
+		 *    Note that the new state item cannot be created until a valid
+		 *    compartment identifier has been returned by the application.
+		 *    Consequently, when a STATE-CREATE instruction is encountered the UDVM
+		 *    simply buffers the five supplied operands until the END-MESSAGE
+		 *    instruction is reached.  The steps taken at this point are described
+		 *    in Section 9.4.9.
+		 *
+		 *   Decompression failure MUST occur if more than four state creation
+		 *   requests are made before the END-MESSAGE instruction is encountered.
+		 *   Decompression failure also occurs if the minimum_access_length does
+		 *   not lie between 6 and 20 inclusive, or if the
+		 *   state_retention_priority is 65535.
+		 */
+		no_of_state_create++;
+		if ( no_of_state_create > 4 ){
+			result_code = 12;
+			goto decompression_failure; 
+		}
+		if (( minimum_access_length < 6 ) || ( minimum_access_length > 20 )){
+			result_code = 1;
+			goto decompression_failure; 
+		}
+		if ( state_retention_priority == 65535 ){
+			result_code = 13;
+			goto decompression_failure; 
+		}
+		state_length_buff[no_of_state_create] = state_length;
+		state_address_buff[no_of_state_create] = state_address;
+		state_instruction_buff[no_of_state_create] = state_instruction;
+		state_minimum_access_length_buff[no_of_state_create] = minimum_access_length;
+		state_state_retention_priority_buff[no_of_state_create] = state_retention_priority;
+		used_udvm_cycles = used_udvm_cycles + 1 + state_length;
+		/* Debug */
+		byte_copy_right = buff[66] << 8;
+		byte_copy_right = byte_copy_right | buff[67];
+		n = 0;
+		k = state_address;
+		while ( n < state_length ){
+			if ( k == byte_copy_right ){
+				byte_copy_left = buff[64] << 8;
+				byte_copy_left = byte_copy_left | buff[65];
+				k = byte_copy_left;
+			}
+			string[0]= buff[k];
+			string[1]= '\0';
+			if (print_level_3 ){
+				proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+					"               Addr: %5u State value: %u (0x%x) ASCII(%s)",
+					k,buff[k],buff[k],string);
+			}
+			k = ( k + 1 ) & 0xffff;
+			n++;
+		}
+		/* End debug */
+
+		goto execute_next_instruction;
+		break;
+	case SIGCOMP_INSTR_STATE_FREE: /* 33 */
+		/*
+		 * STATE-FREE (%partial_identifier_start, %partial_identifier_length)
+		 */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## STATE-FREE (partial_identifier_start, partial_identifier_length)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		/* 
+		 * %partial_identifier_start
+		 */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &p_id_start);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u       partial_identifier_start %u",
+				operand_address, p_id_start);
+		}
+		operand_address = next_operand_address;
+
+		/*
+		 * %partial_identifier_length
+		 */
+		operand_address = next_operand_address;
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &p_id_length);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u       partial_identifier_length %u",
+				operand_address, p_id_length);
+		}
+		/* Execute the instruction:
+		 * TODO implement it
+		 */
+		used_udvm_cycles++;
+		proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Execution of this instruction is NOT implemented");
+		break;
+	case SIGCOMP_INSTR_OUTPUT: /* 34 OUTPUT (%output_start, %output_length) */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## OUTPUT(34) (output_start, output_length)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+		/* 
+		 * %output_start
+		 */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &output_start);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      output_start %u",
+				operand_address, output_start);
+		}
+		operand_address = next_operand_address;
+		/* 
+		 * %output_length
+		 */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &output_length);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      output_length %u",
+				operand_address, output_length);
+		}
+		current_address = next_operand_address;
+
+		/* 
+		 * Execute instruction 
+		 * 8.4.  Byte copying
+		 * :
+		 * The string of bytes is copied in ascending order of memory address,
+		 * respecting the bounds set by byte_copy_left and byte_copy_right.
+		 * More precisely, if a byte is copied from/to Address m then the next
+		 * byte is copied from/to Address n where n is calculated as follows:
+		 *
+		 * Set k := m + 1 (modulo 2^16)
+		 * If k = byte_copy_right then set n := byte_copy_left, else set n := k
+		 *
+		 */ 
+
+		n = 0;
+		k = output_start; 
+		byte_copy_right = buff[66] << 8;
+		byte_copy_right = byte_copy_right | buff[67];
+		if (print_level_3 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+					"               byte_copy_right = %u", byte_copy_right);
+		}
+		while ( n < output_length ){
+
+			if ( k == byte_copy_right ){
+				byte_copy_left = buff[64] << 8;
+				byte_copy_left = byte_copy_left | buff[65];
+				k = byte_copy_left;
+				if (print_level_3 ){
+					proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+							"               byte_copy_right = %u", byte_copy_right);
+				}
+			}
+			out_buff[output_address] = buff[k];
+			string[0]= buff[k];
+			string[1]= '\0';
+			if (print_level_3 ){
+				proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+					"               Output value: %u (0x%x) ASCII(%s) from Addr: %u ,output to dispatcher position %u",
+					buff[k],buff[k],string, k,output_address);
+			}
+			k = ( k + 1 ) & 0xffff;
+			output_address ++;
+			n++;
+		}
+		used_udvm_cycles = used_udvm_cycles + 1 + output_length;
+		goto execute_next_instruction;
+		break;
+	case SIGCOMP_INSTR_END_MESSAGE: /* 35 */
+		/*
+		 * END-MESSAGE (%requested_feedback_location,
+		 * %returned_parameters_location, %state_length, %state_address,
+		 * %state_instruction, %minimum_access_length,
+		 * %state_retention_priority)
+		 */
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,
+				"Addr: %u ## END-MESSAGE (requested_feedback_location,state_instruction, minimum_access_length,state_retention_priority)",
+				current_address);
+		}
+		operand_address = current_address + 1;
+
+		/* %requested_feedback_location */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &requested_feedback_location);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      requested_feedback_location %u",
+				operand_address, requested_feedback_location);
+		}
+		operand_address = next_operand_address;
+		/* returned_parameters_location */
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &returned_parameters_location);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      returned_parameters_location %u",
+				operand_address, returned_parameters_location);
+		}
+		operand_address = next_operand_address;
+		/*
+		 * %state_length
+		 */
+		operand_address = next_operand_address;
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &state_length);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      state_length %u",
+				operand_address, state_length);
+		}
+		/*
+		 * %state_address
+		 */
+		operand_address = next_operand_address;
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &state_address);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      state_address %u",
+				operand_address, state_address);
+		}
+		/*
+		 * %state_instruction
+		 */
+		operand_address = next_operand_address;
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &state_instruction);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      state_instruction %u",
+				operand_address, state_instruction);
+		}
+		operand_address = next_operand_address;
+		/*
+		 * %minimum_access_length
+		 */
+		operand_address = next_operand_address;
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &minimum_access_length);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      minimum_access_length %u",
+				operand_address, minimum_access_length);
+		}
+		operand_address = next_operand_address;
+
+		/*
+		 * %state_retention_priority
+		 */
+		operand_address = next_operand_address;
+		next_operand_address = decode_udvm_multitype_operand(buff, operand_address, &state_retention_priority);
+		if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Addr: %u      state_retention_priority %u",
+				operand_address, state_retention_priority);
+		}
+		current_address = next_operand_address;
+		proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"Execution of this instruction is NOT FULLY implemented( STATES NOT SAVED)");
+		/* TODO: This isn't currently totaly correct as END_INSTRUCTION might not create state */
+		no_of_state_create++;
+		if ( no_of_state_create > 4 ){
+			result_code = 12;
+			goto decompression_failure; 
+		}
+		state_length_buff[no_of_state_create] = state_length;
+		state_address_buff[no_of_state_create] = state_address;
+		state_instruction_buff[no_of_state_create] = state_instruction;
+		/* Not used ? */
+		state_minimum_access_length_buff[no_of_state_create] = minimum_access_length;
+		state_state_retention_priority_buff[no_of_state_create] = state_retention_priority;
+		
+		/* Execute the instruction
+		 * TODO Implement the instruction
+		 */
+		proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"no_of_state_create %u",no_of_state_create);
+		if ( no_of_state_create != 0 ){
+			for( x=0; x < 20; x++){
+				sha1_digest_buf[x]=0;
+			}
+			n = 1;
+			byte_copy_right = buff[66] << 8;
+			byte_copy_right = byte_copy_right | buff[67];
+			while ( n < no_of_state_create + 1 ){
+				sha1buff = g_malloc(state_length_buff[n]+8);
+				sha1buff[0] = state_length_buff[n] >> 8;
+				sha1buff[1] = state_length_buff[n] & 0xff;
+				sha1buff[2] = state_address_buff[n] >> 8;
+				sha1buff[3] = state_address_buff[n] & 0xff;
+				sha1buff[4] = state_instruction_buff[n] >> 8;
+				sha1buff[5] = state_instruction_buff[n] & 0xff;	
+				sha1buff[6] = state_minimum_access_length_buff[n] >> 8;
+				sha1buff[7] = state_minimum_access_length_buff[n] & 0xff;
+				if (print_level_3 ){
+					for( x=0; x < 8; x++){
+						proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"sha1buff %u 0x%x",
+							x,sha1buff[x]);
+					}
+				}
+				k = state_address_buff[n];
+				for( x=0; x < state_length_buff[n]; x++)
+					{
+					if ( k == byte_copy_right ){
+						byte_copy_left = buff[64] << 8;
+						byte_copy_left = byte_copy_left | buff[65];
+						k = byte_copy_left;
+					}
+					sha1buff[8+x] = buff[k];
+					k = ( k + 1 ) & 0xffff;
+					}
+
+				sha1_starts( &ctx );
+				sha1_update( &ctx, (guint8 *) sha1buff, state_length_buff[n] + 8);
+				sha1_finish( &ctx, sha1_digest_buf );
+				if (print_level_3 ){
+				for( x=0; x < 20; x++){
+						proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"SHA1 digest byte %u 0x%x",
+							x,sha1_digest_buf[x]);
+					}
+				}
+				udvm_state_create(sha1buff, sha1_digest_buf);
+				n++;
+
+			}
+		}
+
+
+
+		/* At least something got decompressed, show it */
+		decomp_tvb = tvb_new_real_data(out_buff,output_address,output_address);
+		tvb_set_child_real_data_tvbuff(message_tvb,decomp_tvb);
+		add_new_data_source(pinfo, decomp_tvb, "Decompressed SigComp message");
+		/*
+		proto_tree_add_text(udvm_tree, decomp_tvb, 0, -1,"SigComp message Decompressed");
+		*/	
+		used_udvm_cycles = used_udvm_cycles + 1 + state_length;
+		proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"maximum_UDVM_cycles %u used_udvm_cycles %u",
+			maximum_UDVM_cycles, used_udvm_cycles);
+		return decomp_tvb;
+		break;
+
+	default:
+		break;
+		}
+	return NULL;
+decompression_failure:
+		
+	if (print_level_1 ){
+			proto_tree_add_text(udvm_tree, bytecode_tvb, 0, -1,"DECOMPRESSION FAILURE: %s",
+					    val_to_str(result_code, result_code_vals,"Unknown (%u)"));
+		}
+	return NULL;
+
+
+
+}
+	
+ /*  The simplest operand type is the literal (#), which encodes a
+  * constant integer from 0 to 65535 inclusive.  A literal operand may
+  * require between 1 and 3 bytes depending on its value.
+  * Bytecode:                       Operand value:      Range:
+  * 0nnnnnnn                        N                   0 - 127
+  * 10nnnnnn nnnnnnnn               N                   0 - 16383
+  * 11000000 nnnnnnnn nnnnnnnn      N                   0 - 65535
+  *
+  *            Figure 8: Bytecode for a literal (#) operand
+  *
+  */
+static int
+decode_udvm_literal_operand(guint8 buff[],guint operand_address, guint16 *value) 
+{
+	guint	bytecode;
+	guint16 operand;
+	guint	test_bits;
+	guint	offset = operand_address;
+	guint8	temp_data;
+
+	bytecode = buff[operand_address];
+	test_bits = bytecode >> 7;
+	if (test_bits == 1){
+		test_bits = bytecode >> 6;
+		if (test_bits == 2){
+			/*
+			 * 10nnnnnn nnnnnnnn               N                   0 - 16383
+			 */
+			temp_data = buff[operand_address] & 0x1f;
+			operand = temp_data << 8;
+			temp_data = buff[operand_address + 1];
+			operand = operand | temp_data;
+			*value = operand;
+			offset = offset + 2;
+
+		}else{
+			/*
+			 * 111000000 nnnnnnnn nnnnnnnn      N                   0 - 65535
+			 */
+			offset ++;
+			temp_data = buff[operand_address] & 0x1f;
+			operand = temp_data << 8;
+			temp_data = buff[operand_address + 1];
+			operand = operand | temp_data;
+			*value = operand;
+			offset = offset + 2;
+
+		}
+	}else{
+		/*
+		 * 0nnnnnnn                        N                   0 - 127
+		 */
+		operand = ( bytecode & 0x7f);
+		*value = operand;
+		offset ++;
+	}
+
+	return offset;
+
+}
+
+/*
+ * The second operand type is the reference ($), which is always used to
+ * access a 2-byte value located elsewhere in the UDVM memory.  The
+ * bytecode for a reference operand is decoded to be a constant integer
+ * from 0 to 65535 inclusive, which is interpreted as the memory address
+ * containing the actual value of the operand.
+ * Bytecode:                       Operand value:      Range:
+ *
+ * 0nnnnnnn                        memory[2 * N]       0 - 65535
+ * 10nnnnnn nnnnnnnn               memory[2 * N]       0 - 65535
+ * 11000000 nnnnnnnn nnnnnnnn      memory[N]           0 - 65535
+ *
+ *            Figure 9: Bytecode for a reference ($) operand
+ */
+static int
+dissect_udvm_reference_operand(guint8 buff[],guint operand_address, guint16 *value,guint *result_dest) 
+{
+	guint bytecode;
+	guint16 operand;
+	guint	offset = operand_address;
+	guint test_bits;
+	guint8	temp_data;
+	guint16 temp_data16;
+
+	bytecode = buff[operand_address];
+	test_bits = bytecode >> 7;
+	if (test_bits == 1){
+		test_bits = bytecode >> 6;
+		if (test_bits == 2){
+			/*
+			 * 10nnnnnn nnnnnnnn               memory[2 * N]       0 - 65535
+			 */
+			temp_data = buff[operand_address] & 0x3f;
+			operand = temp_data << 8;
+			temp_data = buff[operand_address + 1];
+			operand = operand | temp_data;
+			operand = (operand * 2);
+			*result_dest = operand;
+			temp_data16 = buff[operand] << 8;
+			temp_data16 = temp_data16 | buff[operand+1];
+			*value = temp_data16;
+			offset = offset + 2;
+
+		}else{
+			/*
+			 * 11000000 nnnnnnnn nnnnnnnn      memory[N]           0 - 65535
+			 */
+			operand_address++;
+			operand = buff[operand_address] << 8;
+			operand = operand | buff[operand_address + 1];
+			*result_dest = operand;
+			temp_data16 = buff[operand] << 8;
+			temp_data16 = temp_data16 | buff[operand+1];
+			*value = temp_data16;
+			offset = offset + 3;
+
+		}
+	}else{
+		/*
+		 * 0nnnnnnn                        memory[2 * N]       0 - 65535
+		 */
+		operand = ( bytecode & 0x7f);
+		operand = (operand * 2);
+		*result_dest = operand;
+		temp_data16 = buff[operand] << 8;
+		temp_data16 = temp_data16 | buff[operand+1];
+		*value = temp_data16;
+		offset ++;
+	}
+
+	return offset;
+}
+
+	/* RFC3320
+	 * Figure 10: Bytecode for a multitype (%) operand
+	 * Bytecode:                       Operand value:      Range:               HEX val
+	 * 00nnnnnn                        N                   0 - 63				0x00
+	 * 01nnnnnn                        memory[2 * N]       0 - 65535			0x40
+	 * 1000011n                        2 ^ (N + 6)        64 , 128				0x86	
+	 * 10001nnn                        2 ^ (N + 8)    256 , ... , 32768			0x88
+	 * 111nnnnn                        N + 65504       65504 - 65535			0xe0
+	 * 1001nnnn nnnnnnnn               N + 61440       61440 - 65535			0x90
+	 * 101nnnnn nnnnnnnn               N                   0 - 8191				0xa0
+	 * 110nnnnn nnnnnnnn               memory[N]           0 - 65535			0xc0
+	 * 10000000 nnnnnnnn nnnnnnnn      N                   0 - 65535			0x80
+	 * 10000001 nnnnnnnn nnnnnnnn      memory[N]           0 - 65535			0x81
+	 */
+static int
+decode_udvm_multitype_operand(guint8 buff[],guint operand_address, guint16 *value)
+{
+	guint test_bits;
+	guint bytecode;
+	guint offset = operand_address;
+	guint16 operand;
+	guint32 result;
+	guint8 temp_data;
+	guint16 temp_data16;
+	guint16 memmory_addr = 0;
+
+	bytecode = buff[operand_address];
+	test_bits = ( bytecode & 0xc0 ) >> 6;
+	switch (test_bits ){
+	case 0:
+		/*  
+		 * 00nnnnnn                        N                   0 - 63
+		 */
+		operand =  buff[operand_address];
+		/* debug
+		 *g_warning("Reading 0x%x From address %u",operand,offset);
+		 */
+		*value = operand;
+		offset ++;
+		break;
+	case 1:
+		/*  
+		 * 01nnnnnn                        memory[2 * N]       0 - 65535
+		 */
+		memmory_addr = ( bytecode & 0x3f) * 2;
+		temp_data16 = buff[memmory_addr] << 8;
+		temp_data16 = temp_data16 | buff[memmory_addr+1];
+		*value = temp_data16;
+		offset ++;
+		break;
+	case 2:
+		/* Check tree most significant bits */
+		test_bits = ( bytecode & 0xe0 ) >> 5;
+		if ( test_bits == 5 ){
+		/*
+		 * 101nnnnn nnnnnnnn               N                   0 - 8191
+		 */
+			temp_data = buff[operand_address] & 0x1f;
+			operand = temp_data << 8;
+			temp_data = buff[operand_address + 1];
+			operand = operand | temp_data;
+			*value = operand;
+			offset = offset + 2;
+		}else{
+			test_bits = ( bytecode & 0xf0 ) >> 4;
+			if ( test_bits == 9 ){
+		/*
+		 * 1001nnnn nnnnnnnn               N + 61440       61440 - 65535
+		 */
+				temp_data = buff[operand_address] & 0x0f;
+				operand = temp_data << 8;
+				temp_data = buff[operand_address + 1];
+				operand = operand | temp_data;
+				operand = operand + 61440;
+				*value = operand;
+				offset = offset + 2;
+			}else{
+				test_bits = ( bytecode & 0x08 ) >> 3;
+				if ( test_bits == 1){
+		/*
+		 * 10001nnn                        2 ^ (N + 8)    256 , ... , 32768
+		 */
+
+					result = (guint32)pow(2,( buff[operand_address] & 0x07) + 8);
+					operand = result & 0xffff;
+					*value = operand;
+					offset ++;
+				}else{
+					test_bits = ( bytecode & 0x0e ) >> 1;
+					if ( test_bits == 3 ){
+						/*
+						 * 1000 011n                        2 ^ (N + 6)        64 , 128
+						 */
+						result = (guint32)pow(2,( buff[operand_address] & 0x01) + 6);
+						operand = result & 0xffff;
+						*value = operand;
+						offset ++;
+					}else{
+					/*
+					 * 1000 0000 nnnnnnnn nnnnnnnn      N                   0 - 65535
+					 * 1000 0001 nnnnnnnn nnnnnnnn      memory[N]           0 - 65535
+					 */
+						offset ++;
+						temp_data16 = buff[operand_address + 1] << 8;
+						temp_data16 = temp_data16 | buff[operand_address + 2];
+						/*  debug
+						 * g_warning("Reading 0x%x From address %u",temp_data16,operand_address);
+						 */
+						if ( (bytecode & 0x01) == 1 ){
+							memmory_addr = temp_data16;
+							temp_data16 = buff[memmory_addr] << 8;
+							temp_data16 = temp_data16 | buff[memmory_addr+1];
+						}
+						*value = temp_data16;
+						offset = offset +2;
+					}
+
+
+				}
+			}
+		}
+		break;
+
+	case 3:
+		test_bits = ( bytecode & 0x20 ) >> 5;
+		if ( test_bits == 1 ){
+		/*
+		 * 111nnnnn                        N + 65504       65504 - 65535
+		 */
+			operand = ( buff[operand_address] & 0x1f) + 65504;
+			*value = operand;
+			offset ++;
+		}else{
+		/*
+		 * 110nnnnn nnnnnnnn               memory[N]           0 - 65535
+		 */
+			memmory_addr = buff[operand_address] & 0x1f;
+			memmory_addr = memmory_addr << 8;
+			memmory_addr = memmory_addr | buff[operand_address + 1];
+			temp_data16 = buff[memmory_addr] << 8;
+			temp_data16 = temp_data16 | buff[memmory_addr+1];
+			*value = temp_data16;
+			/*  debug 
+			 * g_warning("Reading 0x%x From address %u",temp_data16,memmory_addr);
+			 */
+			offset = offset +2;
+		}
+			
+	default :
+		break;
+	}
+	return offset;
+}
+	/*
+	 *
+	 * The fourth operand type is the address (@).  This operand is decoded
+	 * as a multitype operand followed by a further step: the memory address
+	 * of the UDVM instruction containing the address operand is added to
+	 * obtain the correct operand value.  So if the operand value from
+	 * Figure 10 is D then the actual operand value of an address is
+	 * calculated as follows:
+	 *
+	 * operand_value = (memory_address_of_instruction + D) modulo 2^16
+	 *
+	 * Address operands are always used in instructions that control program
+	 * flow, because they ensure that the UDVM bytecode is position-
+	 * independent code (i.e., it will run independently of where it is
+	 * placed in the UDVM memory).
+	 */
+static int
+decode_udvm_address_operand(guint8 buff[],guint operand_address, guint16 *value,guint current_address)
+{
+	guint32 result;
+	guint16 value1;
+	guint next_opreand_address;
+
+	next_opreand_address = decode_udvm_multitype_operand(buff, operand_address, &value1);
+	result = value1 & 0xffff;
+	result = result + current_address;
+	*value = result & 0xffff;
+	return next_opreand_address;
+}
+
+static int
+decomp_dispatch_get_bits(tvbuff_t *message_tvb,proto_tree *udvm_tree,guint8 bit_order, 
+			guint8 buff[],guint16 *old_input_bit_order, guint16 *remaining_bits,
+			guint16	*input_bits, guint *input_address, guint16 length, 
+			guint16 *result_code,guint msg_end){
+
+guint16 input_bit_order;
+guint16 value;
+guint16 mask;
+guint8	octet;
+guint8	n;
+guint8	i;
+
+
+
+		input_bit_order = buff[68] << 8;
+		input_bit_order = input_bit_order | buff[69];
+		*result_code = 0;
+
+		/*
+		 * Note that after one or more INPUT instructions the dispatcher may
+		 * hold a fraction of a byte (what used to be the LSBs if P = 0, or, the
+		 * MSBs, if P = 1).  If an INPUT instruction is encountered and the P-
+		 * bit has changed since the last INPUT instruction, any fraction of a
+		 * byte still held by the dispatcher MUST be discarded (even if the
+		 * INPUT instruction requests zero bits).  The first bit passed to the
+		 * INPUT instruction is taken from the subsequent byte.
+		 */
+		if (print_level_1 ){
+			if ( *input_address > ( msg_end - 1)){
+				proto_tree_add_text(udvm_tree, message_tvb, (msg_end - 1), 1,
+					"               input_bit_order = 0x%x, old_input_bit_order = 0x%x MSG BUFFER END", input_bit_order, *old_input_bit_order);
+			}else{
+				proto_tree_add_text(udvm_tree, message_tvb, *input_address, 1,
+					"               input_bit_order = 0x%x, old_input_bit_order = 0x%x", input_bit_order,*old_input_bit_order);
+			}
+		}
+
+		if ( (*old_input_bit_order & 0x0001 ) != ( input_bit_order & 0x0001 )){
+			/* clear out remaining bits TODO check this further */
+			*remaining_bits = 0;
+			*old_input_bit_order = input_bit_order;
+		}
+
+		/*
+		 * Do we hold a fraction of a byte ?
+		 */
+		if ( *remaining_bits != 0 ){
+			if ( *remaining_bits < length ){
+				if (*remaining_bits > 8 ){
+					proto_tree_add_text(udvm_tree, message_tvb, *input_address, 1,
+					"               Yikes!! haven't coded this case yet!!remaining_bits %u > 8 ", *remaining_bits);
+					return 0xfbad;
+				}
+				if ( *input_address > ( msg_end -1 ) ){
+					*result_code = 11;
+					return 0xfbad;
+				}
+
+				octet = tvb_get_guint8(message_tvb, *input_address);
+				if (print_level_1 ){
+					proto_tree_add_text(udvm_tree, message_tvb, *input_address , 1,
+					"               Geting value: %u (0x%x) From Addr: %u", octet, octet, *input_address);
+				}
+				*input_address = *input_address + 1;
+
+				if ( ( bit_order ) == 0 ){
+					/* 
+					 * F/H bit = 0
+					 */
+					/* borrow value */
+					value = octet & 0x00ff;
+					value = value << ( 8 - (*remaining_bits));
+					*remaining_bits = *remaining_bits + 8;
+				}else{
+					/*
+					 * F/H bit = 1
+					 */
+					/* borrow value */
+					value =  ( octet << 7) & 0x80;
+					value = value | (( octet << 5) & 0x40 ); 
+					value = value | (( octet << 3) & 0x20 ); 
+					value = value | (( octet << 1) & 0x10 ); 
+
+					value = value | (( octet >> 1) & 0x08 ); 
+					value = value | (( octet >> 3) & 0x04 ); 
+					value = value | (( octet >> 5) & 0x02 ); 
+					value = value | (( octet >> 7) & 0x01 );
+
+					value = value << ( 8 - (*remaining_bits));
+					*remaining_bits = *remaining_bits + 8;
+				}
+
+				if (print_level_1 ){
+					proto_tree_add_text(udvm_tree, message_tvb, *input_address - 1 , 1,
+					"               Or value 0x%x with 0x%x remaining bits %u, Result 0x%x",
+					value, *input_bits, *remaining_bits, (*input_bits | value));
+				}
+				*input_bits = *input_bits | value;
+			}/* Bits remain */
+			if ( ( bit_order ) == 0 ){
+				/* 
+				 * F/H bit = 0
+				 */
+				mask = (0xffff >> length)^0xffff;
+				value = *input_bits & mask;
+				value = value >> ( 16 - length);
+				*input_bits = *input_bits << length;
+				*remaining_bits = *remaining_bits - length;
+				if (print_level_1 ){
+					proto_tree_add_text(udvm_tree, message_tvb, *input_address, 1,
+					"               Remaining input_bits 0x%x remaining_bits %u", *input_bits, *remaining_bits);
+				}
+				return value;
+			}
+			else{
+				/* 
+				 * F/H bit = 1
+				 */
+				n = 15;
+				i = 0;
+				value = 0;
+				while ( i < length ){
+					value =  value | (( *input_bits & 0x8000 ) >> n) ;
+					*input_bits = *input_bits << 1;
+					n--;
+					i++;
+				}
+				*remaining_bits = *remaining_bits - length;
+				if (print_level_1 ){
+					proto_tree_add_text(udvm_tree, message_tvb, *input_address, 1,
+					"               Remaining input_bits 0x%x", *input_bits);
+				}
+				return value;
+			}
+
+		}
+		else
+		{
+			/*
+			 * Do we need one or two bytes ?
+			 */
+			if ( *input_address > ( msg_end -1 ) ){
+				*result_code = 11;
+				return 0xfbad;
+			}
+
+			if ( length < 9 ){
+				octet = tvb_get_guint8(message_tvb, *input_address);
+				if (print_level_1 ){
+					proto_tree_add_text(udvm_tree, message_tvb, *input_address , 1,
+					"               Geting value: %u (0x%x) From Addr: %u", octet, octet, *input_address);
+				}
+				*input_address = *input_address + 1;
+				if (print_level_1 ){
+					proto_tree_add_text(udvm_tree, message_tvb, *input_address , 1,
+					"               Next input from Addr: %u", *input_address);
+				}
+
+				if ( ( input_bit_order & 0x0001 ) == 0 ){
+					/*
+					 * P bit = Zero
+					 */
+					*input_bits = octet & 0xff;
+					*input_bits = *input_bits << 8;
+					*remaining_bits = 8;
+				}else{
+					/*
+					 * P bit = One
+					 */
+					*input_bits =  ( octet << 7) & 0x80;
+					*input_bits = *input_bits | (( octet << 5) & 0x40 ); 
+					*input_bits = *input_bits | (( octet << 3) & 0x20 ); 
+					*input_bits = *input_bits | (( octet << 1) & 0x10 ); 
+
+					*input_bits = *input_bits | (( octet >> 1) & 0x08 ); 
+					*input_bits = *input_bits | (( octet >> 3) & 0x04 ); 
+					*input_bits = *input_bits | (( octet >> 5) & 0x02 ); 
+					*input_bits = *input_bits | (( octet >> 7) & 0x01 ); 
+
+					*input_bits = *input_bits << 8;
+					*remaining_bits = 8;
+					proto_tree_add_text(udvm_tree, message_tvb, *input_address -1, 1,
+					"               P bit = 1, input_bits = 0x%x",*input_bits);
+
+				}
+
+			}
+			else{
+				/* Length > 9, we need two bytes */
+				octet = tvb_get_guint8(message_tvb, *input_address);
+				if (print_level_1 ){
+					proto_tree_add_text(udvm_tree, message_tvb, *input_address, 1,
+					"              Geting first value: %u (0x%x) From Addr: %u", octet, octet, *input_address);
+				}
+				if ( ( input_bit_order & 0x0001 ) == 0 ){
+					*input_bits = octet & 0xff;
+					*input_bits = *input_bits << 8;
+					*input_address = *input_address + 1;
+				}else{
+					/*
+					 * P bit = One
+					 */
+					*input_bits =  ( octet << 7) & 0x80;
+					*input_bits = *input_bits | (( octet << 5) & 0x40 ); 
+					*input_bits = *input_bits | (( octet << 3) & 0x20 ); 
+					*input_bits = *input_bits | (( octet << 1) & 0x10 ); 
+
+					*input_bits = *input_bits | (( octet >> 1) & 0x08 ); 
+					*input_bits = *input_bits | (( octet >> 3) & 0x04 ); 
+					*input_bits = *input_bits | (( octet >> 5) & 0x02 ); 
+					*input_bits = *input_bits | (( octet >> 7) & 0x01 ); 
+
+					*input_bits = *input_bits << 8;
+					*input_address = *input_address + 1;
+					proto_tree_add_text(udvm_tree, message_tvb, *input_address -1, 1,
+					"               P bit = 1, input_bits = 0x%x",*input_bits);
+
+				}
+
+				if ( *input_address > ( msg_end - 1)){
+					*result_code = 11;
+					return 0xfbad;
+				}
+
+				octet = tvb_get_guint8(message_tvb, *input_address);
+				*input_address = *input_address + 1;
+				if (print_level_1 ){
+					proto_tree_add_text(udvm_tree, message_tvb, *input_address - 2, 2,
+					"               Geting second value: %u (0x%x) From Addr: %u", octet, octet, *input_address);
+				}
+				if ( ( input_bit_order & 0x0001 ) == 0 ){
+				/*
+				 * P bit = zero
+				 */
+				*input_bits = *input_bits | octet;
+				*remaining_bits = 16;
+				}else{
+					/*
+					 * P bit = One
+					 */
+					*input_bits =  ( octet << 7) & 0x80;
+					*input_bits = *input_bits | (( octet << 5) & 0x40 ); 
+					*input_bits = *input_bits | (( octet << 3) & 0x20 ); 
+					*input_bits = *input_bits | (( octet << 1) & 0x10 ); 
+
+					*input_bits = *input_bits | (( octet >> 1) & 0x08 ); 
+					*input_bits = *input_bits | (( octet >> 3) & 0x04 ); 
+					*input_bits = *input_bits | (( octet >> 5) & 0x02 ); 
+					*input_bits = *input_bits | (( octet >> 7) & 0x01 ); 
+
+					*input_bits = *input_bits << 8;
+					*input_address = *input_address + 1;
+					proto_tree_add_text(udvm_tree, message_tvb, *input_address -1, 1,
+					"               P bit = 1, input_bits = 0x%x",*input_bits);
+
+				*remaining_bits = 16;
+				}
+
+			}
+			if ( ( bit_order ) == 0 ){
+				/* 
+				 * F/H bit = 0
+				 */
+				mask = (0xffff >> length)^0xffff;
+				value = *input_bits & mask;
+				value = value >> ( 16 - length);
+				*input_bits = *input_bits << length;
+				*remaining_bits = *remaining_bits - length;
+				if (print_level_1 ){
+					proto_tree_add_text(udvm_tree, message_tvb, *input_address, 1,
+					"               Remaining input_bits 0x%x", *input_bits);
+				}
+				return value;
+			}
+			else{
+				/* 
+				 * F/H bit = 1
+				 */
+				n = 15;
+				i = 0;
+				value = 0;
+				while ( i < length ){
+					value =  value | ( *input_bits & 0x8000 ) >> n ;
+					*input_bits = *input_bits << 1;
+					n--;
+					i++;
+				}
+				*remaining_bits = *remaining_bits - length;
+				if (print_level_1 ){
+					proto_tree_add_text(udvm_tree, message_tvb, *input_address, 1,
+					"               Remaining input_bits 0x%x", *input_bits);
+				}
+				return value;
+			}
+
+		}
+}
+/* end udvm */
diff -urN ethereal-0.10.6/epan/sigcomp-udvm.h ethereal-0.10.7/epan/sigcomp-udvm.h
--- ethereal-0.10.6/epan/sigcomp-udvm.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/sigcomp-udvm.h	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,41 @@
+/* udvm.h
+ * Routines making up the Univerasl Decompressor Virtual Machine (UDVM) used for
+ * Signaling Compression (SigComp) dissection.
+ * Copyright 2004, Anders Broman <anders.broman@ericsson.com>
+ *
+ * $Id: udvm.c 11445 2004-07-20 19:04:48Z etxrab $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * References:
+ * http://www.ietf.org/rfc/rfc3320.txt?number=3320
+ * http://www.ietf.org/rfc/rfc3321.txt?number=3321
+ * Useful links :
+ * http://www.ietf.org/internet-drafts/draft-ietf-rohc-sigcomp-impl-guide-02.txt
+ * http://www.ietf.org/internet-drafts/draft-ietf-rohc-sigcomp-sip-01.txt
+ */
+
+#ifndef SIGCOMP_UDVM_H
+#define SIGCOMP_UDVM_H
+
+extern tvbuff_t* decompress_sigcomp_message(tvbuff_t *bytecode_tvb, tvbuff_t *message_tvb, packet_info *pinfo,
+						   proto_tree *tree, gint destination, gint print_flags);
+
+/* example: extern const value_string q931_cause_location_vals[]; */
+#endif 
+/* SIGCOMP_UDVM_H */
\ No newline at end of file
diff -urN ethereal-0.10.6/epan/sigcomp_state_hdlr.c ethereal-0.10.7/epan/sigcomp_state_hdlr.c
--- ethereal-0.10.6/epan/sigcomp_state_hdlr.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/sigcomp_state_hdlr.c	2004-10-20 17:35:03.000000000 -0500
@@ -0,0 +1,468 @@
+/* sigcomp_state_hdlr.c
+ * Routines making up the State handler of the Univerasl Decompressor Virtual Machine (UDVM) 
+ * used for Signaling Compression (SigComp) dissection.
+ * Copyright 2004, Anders Broman <anders.broman@ericsson.com>
+ *
+ * $Id: udvm.c 11445 2004-07-20 19:04:48Z etxrab $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * References:
+ * The Session Initiation Protocol (SIP) and Session Description Protocol
+ *    (SDP) Static Dictionary for Signaling Compression (SigComp)
+ * http://www.ietf.org/rfc/rfc3485.txt?number=3485 
+ *
+ * http://www.ietf.org/rfc/rfc3320.txt?number=3320
+ * http://www.ietf.org/rfc/rfc3321.txt?number=3321
+ * Useful links :
+ * http://www.ietf.org/internet-drafts/draft-ietf-rohc-sigcomp-impl-guide-03.txt
+ * http://www.ietf.org/internet-drafts/draft-ietf-rohc-sigcomp-sip-01.txt
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <glib.h>
+
+#ifdef NEED_SNPRINTF_H
+# include "snprintf.h"
+#endif
+
+#include "packet.h"
+#include "sigcomp_state_hdlr.h"
+/*
+ * Defenitions for:
+ * The Session Initiation Protocol (SIP) and Session Description Protocol
+ *    (SDP) Static Dictionary for Signaling Compression (SigComp)
+ * http://www.ietf.org/rfc/rfc3485.txt?number=3485 
+ */
+guint16 sip_sdp_state_length = 0x12e4;
+
+static const guint8 sip_sdp_state_identifier[20] =
+{
+   /* -0000, */  0xfb, 0xe5, 0x07, 0xdf, 0xe5, 0xe6, 0xaa, 0x5a, 0xf2, 0xab, 0xb9, 0x14, 0xce, 0xaa, 0x05, 0xf9,
+   /* -0010, */  0x9c, 0xe6, 0x1b, 0xa5
+};
+
+static const guint8 sip_sdp_static_dictionaty_for_sigcomp[0x12e4] =
+{
+				 
+   /* -0000, */  0x0d, 0x0a, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x2d, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 
+   /* -0010, */  0x3a, 0x20, 0x0d, 0x0a, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2d, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x20,        
+   /* -0020, */  0x0d, 0x0a, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x3a, 0x20, 0x0d, 0x0a, 0x43, 
+   /* -0030, */  0x61, 0x6c, 0x6c, 0x2d, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x20, 0x0d, 0x0a, 0x52, 0x65, 0x70, 0x6c, 
+   /* -0040, */  0x79, 0x2d, 0x54, 0x6f, 0x3a, 0x20, 0x0d, 0x0a, 0x57, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x3a, 
+   /* -0050, */  0x20, 0x0d, 0x0a, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x20, 0x3b, 0x68, 0x61, 0x6e,
+   /* -0060, */  0x64, 0x6c, 0x69, 0x6e, 0x67, 0x3d, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x3b, 0x70, 0x75, 0x72, 0x70,        
+   /* -0070, */  0x6f, 0x73, 0x65, 0x3d, 0x3b, 0x63, 0x61, 0x75, 0x73, 0x65, 0x3d, 0x3b, 0x74, 0x65, 0x78, 0x74, 
+   /* -0080, */  0x3d, 0x63, 0x61, 0x72, 0x64, 0x33, 0x30, 0x30, 0x20, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 
+   /* -0090, */  0x65, 0x20, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x73, 0x6d, 0x69, 0x6d, 0x65, 0x73, 0x73, 0x61, 
+   /* -00A0, */  0x67, 0x65, 0x2f, 0x73, 0x69, 0x70, 0x66, 0x72, 0x61, 0x67, 0x34, 0x30, 0x37, 0x20, 0x50, 0x72, 
+   /* -00B0, */  0x6f, 0x78, 0x79, 0x20, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 
+   /* -00C0, */  0x6f, 0x6e, 0x20, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 
+   /* -00D0, */  0x2d, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x69, 0x74, 0x79, 0x34, 0x38, 0x34, 0x20, 0x41, 0x64, 
+   /* -00E0, */  0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 
+   /* -00F0, */  0x6c, 0x65, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x2d, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x34, 0x39, 
+   /* -0100, */  0x34, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x20, 0x41, 0x67, 0x72, 0x65, 0x65, 
+   /* -0110, */  0x6d, 0x65, 0x6e, 0x74, 0x20, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x65, 0x61, 0x63, 
+   /* -0120, */  0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x34, 0x38, 0x31, 0x20, 0x43, 0x61, 0x6c, 0x6c, 0x2f, 
+   /* -0130, */  0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x44, 0x6f, 0x65, 0x73, 
+   /* -0140, */  0x20, 0x4e, 0x6f, 0x74, 0x20, 0x45, 0x78, 0x69, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x3d, 0x35, 0x30,       
+   /* -0150, */  0x30, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
+   /* -0160, */  0x6c, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x6f, 0x62, 0x75, 0x73, 0x74, 0x2d, 0x73, 0x6f, 0x72, 
+   /* -0170, */  0x74, 0x69, 0x6e, 0x67, 0x3d, 0x34, 0x31, 0x36, 0x20, 0x55, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f,
+   /* -0180, */  0x72, 0x74, 0x65, 0x64, 0x20, 0x55, 0x52, 0x49, 0x20, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x72,
+   /* -0190, */  0x67, 0x65, 0x6e, 0x63, 0x79, 0x34, 0x31, 0x35, 0x20, 0x55, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 
+   /* -01A0, */  0x72, 0x74, 0x65, 0x64, 0x20, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x20, 0x54, 0x79, 0x70, 0x65, 0x6e, 
+   /* -01B0, */  0x64, 0x69, 0x6e, 0x67, 0x34, 0x38, 0x38, 0x20, 0x4e, 0x6f, 0x74, 0x20, 0x41, 0x63, 0x63, 0x65, 
+   /* -01C0, */  0x70, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x48, 0x65, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 
+   /* -01D0, */  0x64, 0x34, 0x32, 0x33, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x20, 0x54, 0x6f, 
+   /* -01E0, */  0x6f, 0x20, 0x42, 0x72, 0x69, 0x65, 0x66, 0x72, 0x6f, 0x6d, 0x2d, 0x74, 0x61, 0x67, 0x51, 0x2e, 
+   /* -01F0, */  0x38, 0x35, 0x30, 0x35, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x4e, 0x6f, 0x74, 
+   /* -0200, */  0x20, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x34, 0x30, 0x33, 0x20, 0x46, 0x6f,
+   /* -0210, */  0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x6f, 0x6e, 0x2d, 0x75, 0x72, 0x67, 0x65, 0x6e, 0x74, 
+   /* -0220, */  0x34, 0x32, 0x39, 0x20, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x20, 0x52, 0x65, 0x66, 0x65, 
+   /* -0230, */  0x72, 0x72, 0x6f, 0x72, 0x20, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x34, 0x32, 0x30,         
+   /* -0240, */  0x20, 0x42, 0x61, 0x64, 0x20, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x6f, 0x72,
+   /* -0250, */  0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x0d, 0x0a, 0x61, 0x3d, 0x6b, 0x65, 0x79, 0x2d, 0x6d, 
+   /* -0260, */  0x67, 0x6d, 0x74, 0x3a, 0x6d, 0x69, 0x6b, 0x65, 0x79, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 
+   /* -0270, */  0x20, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, 0x20, 0x35, 0x30, 0x34, 0x20, 0x53,
+   /* -0280, */  0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x2d, 0x6f, 0x75, 0x74, 0x6f, 0x2d, 
+   /* -0290, */  0x74, 0x61, 0x67, 0x0d, 0x0a, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 
+   /* -02A0, */  0x69, 0x6f, 0x6e, 0x2d, 0x49, 0x6e, 0x66, 0x6f, 0x3a, 0x20, 0x44, 0x65, 0x63, 0x20, 0x33, 0x38, 
+   /* -02B0, */  0x30, 0x20, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x53, 0x65, 
+   /* -02C0, */  0x72, 0x76, 0x69, 0x63, 0x65, 0x35, 0x30, 0x33, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 
+   /* -02D0, */  0x20, 0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x34, 0x32, 0x31, 0x20,       
+   /* -02E0, */  0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 
+   /* -02F0, */  0x65, 0x64, 0x34, 0x30, 0x35, 0x20, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x20, 0x4e, 0x6f, 0x74, 
+   /* -0300, */  0x20, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x34, 0x38, 0x37, 0x20, 0x52, 0x65, 0x71, 0x75,
+   /* -0310, */  0x65, 0x73, 0x74, 0x20, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x61, 0x75, 
+   /* -0320, */  0x74, 0x68, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6c, 0x65, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x3d, 
+   /* -0330, */  0x0d, 0x0a, 0x6d, 0x3d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,        
+   /* -0340, */  0x41, 0x75, 0x67, 0x20, 0x35, 0x31, 0x33, 0x20, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x20,        
+   /* -0350, */  0x54, 0x6f, 0x6f, 0x20, 0x4c, 0x61, 0x72, 0x67, 0x65, 0x36, 0x38, 0x37, 0x20, 0x44, 0x69, 0x61, 
+   /* -0360, */  0x6c, 0x6f, 0x67, 0x20, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x33, 0x30,         
+   /* -0370, */  0x32, 0x20, 0x4d, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72,
+   /* -0380, */  0x69, 0x6c, 0x79, 0x33, 0x30, 0x31, 0x20, 0x4d, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x50, 0x65, 0x72, 
+   /* -0390, */  0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 
+   /* -03A0, */  0x74, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x0d, 0x0a, 0x52, 0x65, 0x74, 0x72, 0x79, 0x2d, 
+   /* -03B0, */  0x41, 0x66, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x47, 0x4d, 0x54, 0x68, 0x75, 0x2c, 0x20, 0x34, 0x30,        
+   /* -03C0, */  0x32, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 
+   /* -03D0, */  0x65, 0x64, 0x0d, 0x0a, 0x61, 0x3d, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x3a, 0x6c, 0x61, 0x6e, 
+   /* -03E0, */  0x64, 0x73, 0x63, 0x61, 0x70, 0x65, 0x34, 0x30, 0x30, 0x20, 0x42, 0x61, 0x64, 0x20, 0x52, 0x65, 
+   /* -03F0, */  0x71, 0x75, 0x65, 0x73, 0x74, 0x72, 0x75, 0x65, 0x34, 0x39, 0x31, 0x20, 0x52, 0x65, 0x71, 0x75, 
+   /* -0400, */  0x65, 0x73, 0x74, 0x20, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x35, 0x30, 0x31, 0x20, 0x4e, 
+   /* -0410, */  0x6f, 0x74, 0x20, 0x49, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x34, 0x30,        
+   /* -0420, */  0x36, 0x20, 0x4e, 0x6f, 0x74, 0x20, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x62, 0x6c, 0x65, 
+   /* -0430, */  0x36, 0x30, 0x36, 0x20, 0x4e, 0x6f, 0x74, 0x20, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x61, 0x62, 
+   /* -0440, */  0x6c, 0x65, 0x0d, 0x0a, 0x61, 0x3d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x62, 0x72, 0x6f, 0x61, 0x64, 
+   /* -0450, */  0x63, 0x61, 0x73, 0x74, 0x6f, 0x6e, 0x65, 0x34, 0x39, 0x33, 0x20, 0x55, 0x6e, 0x64, 0x65, 0x63, 
+   /* -0460, */  0x69, 0x70, 0x68, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x0d, 0x0a, 0x4d, 0x49, 0x4d, 0x45, 0x2d, 
+   /* -0470, */  0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x4d, 0x61, 0x79, 0x20, 0x34, 0x38, 0x32, 
+   /* -0480, */  0x20, 0x4c, 0x6f, 0x6f, 0x70, 0x20, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x0d, 0x0a,
+   /* -0490, */  0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x4a, 0x75, 
+   /* -04A0, */  0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2d, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2d, 0x6e, 0x65, 
+   /* -04B0, */  0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x3d, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x65, 
+   /* -04C0, */  0x72, 0x74, 0x63, 0x70, 0x2d, 0x66, 0x62, 0x34, 0x38, 0x39, 0x20, 0x42, 0x61, 0x64, 0x20, 0x45, 
+   /* -04D0, */  0x76, 0x65, 0x6e, 0x74, 0x6c, 0x73, 0x0d, 0x0a, 0x55, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 
+   /* -04E0, */  0x74, 0x65, 0x64, 0x3a, 0x20, 0x4a, 0x61, 0x6e, 0x20, 0x35, 0x30, 0x32, 0x20, 0x42, 0x61, 0x64, 
+   /* -04F0, */  0x20, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x6d, 0x6f, 0x64, 0x65, 0x2d, 0x63, 0x68, 0x61, 
+   /* -0500, */  0x6e, 0x67, 0x65, 0x2d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x3d, 0x0d, 0x0a, 0x61, 0x3d, 0x6f, 
+   /* -0510, */  0x72, 0x69, 0x65, 0x6e, 0x74, 0x3a, 0x73, 0x65, 0x61, 0x73, 0x63, 0x61, 0x70, 0x65, 0x0d, 0x0a, 
+   /* -0520, */  0x61, 0x3d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x6d, 0x6f, 0x64, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 
+   /* -0530, */  0x34, 0x30, 0x34, 0x20, 0x4e, 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x33, 0x30, 0x35, 
+   /* -0540, */  0x20, 0x55, 0x73, 0x65, 0x20, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x0d, 0x0a, 0x61, 0x3d, 0x74, 0x79,
+   /* -0550, */  0x70, 0x65, 0x3a, 0x72, 0x65, 0x63, 0x76, 0x6f, 0x6e, 0x6c, 0x79, 0x0d, 0x0a, 0x61, 0x3d, 0x74, 
+   /* -0560, */  0x79, 0x70, 0x65, 0x3a, 0x6d, 0x65, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x0d, 0x0a, 0x6b, 0x3d, 0x70,       
+   /* -0570, */  0x72, 0x6f, 0x6d, 0x70, 0x74, 0x3a, 0x0d, 0x0a, 0x52, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 
+   /* -0580, */  0x2d, 0x42, 0x79, 0x3a, 0x20, 0x0d, 0x0a, 0x49, 0x6e, 0x2d, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2d, 
+   /* -0590, */  0x54, 0x6f, 0x3a, 0x20, 0x54, 0x52, 0x55, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, 
+   /* -05A0, */  0x20, 0x31, 0x38, 0x32, 0x20, 0x51, 0x75, 0x65, 0x75, 0x65, 0x64, 0x41, 0x75, 0x74, 0x68, 0x65, 
+   /* -05B0, */  0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x0d, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x2d, 
+   /* -05C0, */  0x41, 0x67, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x0d, 0x0a, 0x61, 0x3d, 0x66, 0x72, 0x61, 0x6d, 0x65, 
+   /* -05D0, */  0x72, 0x61, 0x74, 0x65, 0x3a, 0x0d, 0x0a, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x2d, 0x49, 0x6e, 0x66, 
+   /* -05E0, */  0x6f, 0x3a, 0x20, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x20, 0x0d, 0x0a, 0x61, 0x3d, 0x6d, 0x61, 
+   /* -05F0, */  0x78, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x3a, 0x3b, 0x72, 0x65, 0x74, 0x72, 0x79, 0x2d, 0x61, 0x66, 
+   /* -0600, */  0x74, 0x65, 0x72, 0x3d, 0x75, 0x61, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x3d, 0x34, 
+   /* -0610, */  0x31, 0x30, 0x20, 0x47, 0x6f, 0x6e, 0x65, 0x0d, 0x0a, 0x52, 0x65, 0x66, 0x65, 0x72, 0x2d, 0x54, 
+   /* -0620, */  0x6f, 0x3a, 0x20, 0x0d, 0x0a, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x20, 0x0d, 
+   /* -0630, */  0x0a, 0x6d, 0x3d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x0d, 0x0a, 0x61, 0x3d, 0x71, 
+   /* -0640, */  0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x3a, 0x0d, 0x0a, 0x61, 0x3d, 0x73, 0x64, 0x70, 0x6c, 0x61, 
+   /* -0650, */  0x6e, 0x67, 0x3a, 0x0d, 0x0a, 0x61, 0x3d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3a, 0x0d, 
+   /* -0660, */  0x0a, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x20, 0x52, 0x45, 0x46, 0x45, 0x52, 
+   /* -0670, */  0x20, 0x69, 0x70, 0x73, 0x65, 0x63, 0x2d, 0x69, 0x6b, 0x65, 0x3b, 0x74, 0x72, 0x61, 0x6e, 0x73,
+   /* -0680, */  0x70, 0x6f, 0x72, 0x74, 0x3d, 0x0d, 0x0a, 0x61, 0x3d, 0x6b, 0x65, 0x79, 0x77, 0x64, 0x73, 0x3a, 
+   /* -0690, */  0x0d, 0x0a, 0x6b, 0x3d, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x3a, 0x3b, 0x72, 0x65, 0x66, 0x72, 
+   /* -06A0, */  0x65, 0x73, 0x68, 0x65, 0x72, 0x3d, 0x0d, 0x0a, 0x61, 0x3d, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x3a, 
+   /* -06B0, */  0x0d, 0x0a, 0x6b, 0x3d, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a, 0x3b, 0x72, 0x65, 0x63, 0x65, 0x69, 
+   /* -06C0, */  0x76, 0x65, 0x64, 0x3d, 0x3b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x0d, 0x0a, 
+   /* -06D0, */  0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x0d, 0x0a, 0x61, 0x3d, 0x67, 0x72, 0x6f, 0x75, 
+   /* -06E0, */  0x70, 0x3a, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x3a, 0x20, 0x49, 0x4e, 0x46, 0x4f, 0x20, 0x0d, 0x0a, 
+   /* -06F0, */  0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x0d, 0x0a, 0x61, 0x3d, 0x6c, 0x61, 0x6e, 0x67, 0x3a, 
+   /* -0700, */  0x0d, 0x0a, 0x6d, 0x3d, 0x64, 0x61, 0x74, 0x61, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2d, 0x73, 0x65, 
+   /* -0710, */  0x74, 0x3d, 0x0d, 0x0a, 0x61, 0x3d, 0x74, 0x6f, 0x6f, 0x6c, 0x3a, 0x54, 0x4c, 0x53, 0x75, 0x6e, 
+   /* -0720, */  0x2c, 0x20, 0x0d, 0x0a, 0x44, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x0d, 0x0a, 0x61, 0x3d, 0x63, 0x61, 
+   /* -0730, */  0x74, 0x3a, 0x0d, 0x0a, 0x6b, 0x3d, 0x75, 0x72, 0x69, 0x3a, 0x0d, 0x0a, 0x50, 0x72, 0x6f, 0x78, 
+   /* -0740, */  0x79, 0x2d, 0x3b, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x3d, 0x3b, 0x6d, 0x65, 0x74, 0x68, 0x6f, 
+   /* -0750, */  0x64, 0x3d, 0x0d, 0x0a, 0x61, 0x3d, 0x6d, 0x69, 0x64, 0x3a, 0x3b, 0x6d, 0x61, 0x64, 0x64, 0x72, 
+   /* -0760, */  0x3d, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x3d, 0x0d, 0x0a, 0x4d, 0x69, 0x6e, 0x2d, 0x3b, 0x61, 
+   /* -0770, */  0x6c, 0x67, 0x3d, 0x4d, 0x6f, 0x6e, 0x2c, 0x20, 0x54, 0x75, 0x65, 0x2c, 0x20, 0x57, 0x65, 0x64, 
+   /* -0780, */  0x2c, 0x20, 0x46, 0x72, 0x69, 0x2c, 0x20, 0x53, 0x61, 0x74, 0x2c, 0x20, 0x3b, 0x74, 0x74, 0x6c, 
+   /* -0790, */  0x3d, 0x61, 0x75, 0x74, 0x73, 0x3d, 0x0d, 0x0a, 0x72, 0x3d, 0x0d, 0x0a, 0x7a, 0x3d, 0x0d, 0x0a, 
+   /* -07A0, */  0x65, 0x3d, 0x3b, 0x69, 0x64, 0x3d, 0x0d, 0x0a, 0x69, 0x3d, 0x63, 0x72, 0x63, 0x3d, 0x0d, 0x0a, 
+   /* -07B0, */  0x75, 0x3d, 0x3b, 0x71, 0x3d, 0x75, 0x61, 0x73, 0x34, 0x31, 0x34, 0x20, 0x52, 0x65, 0x71, 0x75, 
+   /* -07C0, */  0x65, 0x73, 0x74, 0x2d, 0x55, 0x52, 0x49, 0x20, 0x54, 0x6f, 0x6f, 0x20, 0x4c, 0x6f, 0x6e, 0x67, 
+   /* -07D0, */  0x69, 0x76, 0x65, 0x75, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x75, 0x64, 0x70, 0x72, 0x65, 
+   /* -07E0, */  0x66, 0x65, 0x72, 0x36, 0x30, 0x30, 0x20, 0x42, 0x75, 0x73, 0x79, 0x20, 0x45, 0x76, 0x65, 0x72, 
+   /* -07F0, */  0x79, 0x77, 0x68, 0x65, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x34, 0x38, 0x30, 0x20,       
+   /* -0800, */  0x54, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, 0x72, 0x69, 0x6c, 0x79, 0x20, 0x55, 0x6e, 0x61, 0x76, 
+   /* -0810, */  0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x0d, 0x0a, 0x61, 0x3d, 0x74, 0x79, 0x70, 0x65, 0x3a, 
+   /* -0820, */  0x48, 0x2e, 0x33, 0x33, 0x32, 0x30, 0x32, 0x20, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 
+   /* -0830, */  0x0d, 0x0a, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2d, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 
+   /* -0840, */  0x73, 0x3a, 0x20, 0x0d, 0x0a, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 
+   /* -0850, */  0x6e, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x4e, 0x6f, 0x76, 0x20, 0x0d, 0x0a, 0x53, 
+   /* -0860, */  0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x3a, 0x20, 0x53, 0x65, 
+   /* -0870, */  0x70, 0x20, 0x0d, 0x0a, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x2d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 
+   /* -0880, */  0x3a, 0x20, 0x46, 0x65, 0x62, 0x20, 0x0d, 0x0a, 0x61, 0x3d, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 
+   /* -0890, */  0x76, 0x65, 0x52, 0x54, 0x50, 0x2f, 0x53, 0x41, 0x56, 0x50, 0x20, 0x52, 0x54, 0x50, 0x2f, 0x41, 
+   /* -08A0, */  0x56, 0x50, 0x46, 0x20, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x69, 0x70, 0x73, 
+   /* -08B0, */  0x3a, 0x0d, 0x0a, 0x61, 0x3d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x74, 0x65, 0x73, 0x74, 0x65, 0x6c, 
+   /* -08C0, */  0x3a, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x20, 0x0d, 0x0a, 0x61, 0x3d, 0x72, 0x65, 0x63, 
+   /* -08D0, */  0x76, 0x6f, 0x6e, 0x6c, 0x79, 0x0d, 0x0a, 0x61, 0x3d, 0x73, 0x65, 0x6e, 0x64, 0x6f, 0x6e, 0x6c, 
+   /* -08E0, */  0x79, 0x0d, 0x0a, 0x63, 0x3d, 0x49, 0x4e, 0x20, 0x49, 0x50, 0x34, 0x20, 0x0d, 0x0a, 0x52, 0x65, 
+   /* -08F0, */  0x61, 0x73, 0x6f, 0x6e, 0x3a, 0x20, 0x0d, 0x0a, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x3a, 0x20, 0x0d, 
+   /* -0900, */  0x0a, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x0d, 0x0a, 0x50, 0x61, 0x74, 0x68, 0x3a, 0x20,        
+   /* -0910, */  0x3b, 0x75, 0x73, 0x65, 0x72, 0x3d, 0x0d, 0x0a, 0x62, 0x3d, 0x41, 0x53, 0x20, 0x43, 0x54, 0x20,       
+   /* -0920, */  0x0d, 0x0a, 0x57, 0x57, 0x57, 0x2d, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 
+   /* -0930, */  0x74, 0x65, 0x3a, 0x20, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x20, 0x0d, 0x0a, 0x61, 0x3d, 0x73, 
+   /* -0940, */  0x65, 0x6e, 0x64, 0x72, 0x65, 0x63, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 
+   /* -0950, */  0x61, 0x6c, 0x69, 0x67, 0x6e, 0x3d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 
+   /* -0960, */  0x6e, 0x2f, 0x73, 0x64, 0x70, 0x61, 0x74, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x70, 0x61, 
+   /* -0970, */  0x75, 0x74, 0x68, 0x3d, 0x0d, 0x0a, 0x61, 0x3d, 0x6f, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x3a, 0x70,        
+   /* -0980, */  0x6f, 0x72, 0x74, 0x72, 0x61, 0x69, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x74, 0x72, 0x2d, 
+   /* -0990, */  0x69, 0x6e, 0x74, 0x69, 0x63, 0x6f, 0x6e, 0x63, 0x3d, 0x34, 0x38, 0x33, 0x20, 0x54, 0x6f, 0x6f, 
+   /* -09A0, */  0x20, 0x4d, 0x61, 0x6e, 0x79, 0x20, 0x48, 0x6f, 0x70, 0x73, 0x6c, 0x69, 0x6e, 0x66, 0x6f, 0x70,         
+   /* -09B0, */  0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x3d, 0x36, 0x30,        
+   /* -09C0, */  0x34, 0x20, 0x44, 0x6f, 0x65, 0x73, 0x20, 0x4e, 0x6f, 0x74, 0x20, 0x45, 0x78, 0x69, 0x73, 0x74, 
+   /* -09D0, */  0x20, 0x41, 0x6e, 0x79, 0x77, 0x68, 0x65, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x3d, 
+   /* -09E0, */  0x0d, 0x0a, 0x0d, 0x0a, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2d, 0x44, 0x69, 0x73, 0x70,       
+   /* -09F0, */  0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x4d, 0x44, 0x35, 0x38, 0x30, 0x20, 0x50,         
+   /* -0A00, */  0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x46, 0x61, 0x69, 0x6c, 
+   /* -0A10, */  0x75, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x34, 0x32, 0x32, 0x20, 0x53, 0x65, 0x73, 
+   /* -0A20, */  0x73, 0x69, 0x6f, 0x6e, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x20, 0x54, 0x6f, 
+   /* -0A30, */  0x6f, 0x20, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x31, 0x38, 0x31, 0x20, 0x43, 
+   /* -0A40, */  0x61, 0x6c, 0x6c, 0x20, 0x49, 0x73, 0x20, 0x42, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x46, 0x6f, 0x72, 
+   /* -0A50, */  0x77, 0x61, 0x72, 0x64, 0x65, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x3d, 0x66, 0x61, 0x69, 0x6c, 
+   /* -0A60, */  0x75, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x3d, 0x53, 0x55, 0x42, 0x53, 
+   /* -0A70, */  0x43, 0x52, 0x49, 0x42, 0x45, 0x20, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 
+   /* -0A80, */  0x6f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x70, 0x73, 0x65, 0x63, 0x2d, 0x6d, 0x61, 0x6e, 
+   /* -0A90, */  0x64, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x34, 0x31, 0x33, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 
+   /* -0AA0, */  0x74, 0x20, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x54, 0x6f, 0x6f, 0x20, 0x4c, 0x61, 0x72, 
+   /* -0AB0, */  0x67, 0x65, 0x32, 0x65, 0x31, 0x38, 0x33, 0x20, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20,        
+   /* -0AC0, */  0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x63, 0x74, 0x70, 0x34, 0x38, 0x36, 0x20, 0x42, 
+   /* -0AD0, */  0x75, 0x73, 0x79, 0x20, 0x48, 0x65, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 
+   /* -0AE0, */  0x61, 0x74, 0x65, 0x64, 0x41, 0x4b, 0x41, 0x76, 0x31, 0x2d, 0x4d, 0x44, 0x35, 0x2d, 0x73, 0x65, 
+   /* -0AF0, */  0x73, 0x73, 0x69, 0x6f, 0x6e, 0x6f, 0x6e, 0x65, 0x0d, 0x0a, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 
+   /* -0B00, */  0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x36, 0x30, 0x33, 0x20, 0x44, 0x65, 0x63, 
+   /* -0B10, */  0x6c, 0x69, 0x6e, 0x65, 0x78, 0x74, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x3d, 0x34, 0x38, 0x35, 0x20,         
+   /* -0B20, */  0x41, 0x6d, 0x62, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 
+   /* -0B30, */  0x61, 0x75, 0x64, 0x69, 0x6f, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x54, 
+   /* -0B40, */  0x79, 0x70, 0x65, 0x3a, 0x20, 0x4d, 0x61, 0x72, 0x20, 0x0d, 0x0a, 0x52, 0x65, 0x63, 0x6f, 0x72, 
+   /* -0B50, */  0x64, 0x2d, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x3a, 0x20, 0x4a, 0x75, 0x6c, 0x20, 0x34, 0x30, 0x31,
+   /* -0B60, */  0x20, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x0d, 0x0a, 0x52,
+   /* -0B70, */  0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x3a, 0x20, 0x0d, 0x0a, 0x74, 0x3d, 0x30, 0x20, 0x30, 0x2e, 
+   /* -0B80, */  0x30, 0x2e, 0x30, 0x2e, 0x30, 0x0d, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x20, 0x52, 
+   /* -0B90, */  0x45, 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x20, 0x0d, 0x0a, 0x63, 0x3d, 0x49, 0x4e, 0x20, 0x49, 
+   /* -0BA0, */  0x50, 0x36, 0x20, 0x31, 0x38, 0x30, 0x20, 0x52, 0x69, 0x6e, 0x67, 0x69, 0x6e, 0x67, 0x31, 0x30,    
+   /* -0BB0, */  0x30, 0x20, 0x54, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x76, 0x3d, 0x30, 0x0d, 0x0a, 0x6f, 0x3d, 0x55, 
+   /* -0BC0, */  0x50, 0x44, 0x41, 0x54, 0x45, 0x20, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x59, 0x20, 0x0d, 0x0a, 0x53, 
+   /* -0BD0, */  0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x3a, 0x20, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 
+   /* -0BE0, */  0x6e, 0x41, 0x4d, 0x52, 0x54, 0x50, 0x2f, 0x41, 0x56, 0x50, 0x20, 0x0d, 0x0a, 0x50, 0x72, 0x69, 
+   /* -0BF0, */  0x76, 0x61, 0x63, 0x79, 0x3a, 0x20, 0x0d, 0x0a, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 
+   /* -0C00, */  0x2d, 0x0d, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x3a, 0x20, 0x0d, 0x0a, 0x61, 0x3d, 
+   /* -0C10, */  0x72, 0x74, 0x70, 0x6d, 0x61, 0x70, 0x3a, 0x0d, 0x0a, 0x6d, 0x3d, 0x76, 0x69, 0x64, 0x65, 0x6f, 
+   /* -0C20, */  0x20, 0x0d, 0x0a, 0x6d, 0x3d, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x20, 0x0d, 0x0a, 0x73, 0x3d, 0x20,         
+   /* -0C30, */  0x66, 0x61, 0x6c, 0x73, 0x65, 0x0d, 0x0a, 0x61, 0x3d, 0x63, 0x6f, 0x6e, 0x66, 0x3a, 0x3b, 0x65, 
+   /* -0C40, */  0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x3d, 0x0d, 0x0a, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x3a, 0x20,
+   /* -0C50, */  0x0d, 0x0a, 0x61, 0x3d, 0x66, 0x6d, 0x74, 0x70, 0x3a, 0x0d, 0x0a, 0x61, 0x3d, 0x63, 0x75, 0x72, 
+   /* -0C60, */  0x72, 0x3a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 
+   /* -0C70, */  0x3a, 0x20, 0x0d, 0x0a, 0x61, 0x3d, 0x64, 0x65, 0x73, 0x3a, 0x0d, 0x0a, 0x52, 0x41, 0x63, 0x6b, 
+   /* -0C80, */  0x3a, 0x20, 0x0d, 0x0a, 0x52, 0x53, 0x65, 0x71, 0x3a, 0x20, 0x42, 0x59, 0x45, 0x20, 0x63, 0x6e, 
+   /* -0C90, */  0x6f, 0x6e, 0x63, 0x65, 0x3d, 0x31, 0x30, 0x30, 0x72, 0x65, 0x6c, 0x75, 0x72, 0x69, 0x3d, 0x71, 
+   /* -0CA0, */  0x6f, 0x70, 0x3d, 0x54, 0x43, 0x50, 0x55, 0x44, 0x50, 0x71, 0x6f, 0x73, 0x78, 0x6d, 0x6c, 0x3b, 
+   /* -0CB0, */  0x6c, 0x72, 0x0d, 0x0a, 0x56, 0x69, 0x61, 0x3a, 0x20, 0x53, 0x49, 0x50, 0x2f, 0x32, 0x2e, 0x30,      
+   /* -0CC0, */  0x2f, 0x54, 0x43, 0x50, 0x20, 0x34, 0x30, 0x38, 0x20, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 
+   /* -0CD0, */  0x20, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x70, 0x73, 0x69, 0x70,        
+   /* -0CE0, */  0x3a, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74,
+   /* -0CF0, */  0x68, 0x3a, 0x20, 0x4f, 0x63, 0x74, 0x20, 0x0d, 0x0a, 0x56, 0x69, 0x61, 0x3a, 0x20, 0x53, 0x49, 
+   /* -0D00, */  0x50, 0x2f, 0x32, 0x2e, 0x30, 0x2f, 0x55, 0x44, 0x50, 0x20, 0x3b, 0x63, 0x6f, 0x6d, 0x70, 0x3d, 
+   /* -0D10, */  0x73, 0x69, 0x67, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x6f, 0x62, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 
+   /* -0D20, */  0x63, 0x6b, 0x3b, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x3d, 0x7a, 0x39, 0x68, 0x47, 0x34, 0x62, 
+   /* -0D30, */  0x4b, 0x0d, 0x0a, 0x4d, 0x61, 0x78, 0x2d, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x73, 0x3a, 
+   /* -0D40, */  0x20, 0x41, 0x70, 0x72, 0x20, 0x53, 0x43, 0x54, 0x50, 0x52, 0x41, 0x43, 0x4b, 0x20, 0x49, 0x4e, 
+   /* -0D50, */  0x56, 0x49, 0x54, 0x45, 0x20, 0x0d, 0x0a, 0x43, 0x61, 0x6c, 0x6c, 0x2d, 0x49, 0x44, 0x3a, 0x20,         
+   /* -0D60, */  0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x3a, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4f, 
+   /* -0D70, */  0x4b, 0x0d, 0x0a, 0x46, 0x72, 0x6f, 0x6d, 0x3a, 0x20, 0x0d, 0x0a, 0x43, 0x53, 0x65, 0x71, 0x3a, 
+   /* -0D80, */  0x20, 0x0d, 0x0a, 0x54, 0x6f, 0x3a, 0x20, 0x3b, 0x74, 0x61, 0x67, 0x3d, 0x04, 0x10, 0xdd, 0x10,        
+   /* -0D90, */  0x11, 0x31, 0x0d, 0x11, 0x0a, 0x07, 0x10, 0xb9, 0x0c, 0x10, 0xfe, 0x12, 0x10, 0xe1, 0x06, 0x11,
+   /* -0DA0, */  0x4e, 0x07, 0x11, 0x4e, 0x03, 0x11, 0x4a, 0x04, 0x11, 0x4a, 0x07, 0x10, 0xb2, 0x08, 0x11, 0x79, 
+   /* -0DB0, */  0x06, 0x11, 0x81, 0x0f, 0x11, 0x22, 0x0b, 0x11, 0x55, 0x06, 0x11, 0x6b, 0x0b, 0x11, 0x60, 0x13, 
+   /* -0DC0, */  0x10, 0xb2, 0x08, 0x11, 0x71, 0x05, 0x11, 0x87, 0x13, 0x10, 0xf7, 0x09, 0x0e, 0x8d, 0x08, 0x0d, 
+   /* -0DD0, */  0xae, 0x0c, 0x10, 0xb9, 0x07, 0x10, 0x8e, 0x03, 0x0d, 0x96, 0x03, 0x10, 0x8a, 0x04, 0x10, 0x8a, 
+   /* -0DE0, */  0x09, 0x0d, 0xd7, 0x0a, 0x0f, 0x12, 0x08, 0x0f, 0x8f, 0x09, 0x0f, 0x8f, 0x08, 0x0d, 0x6c, 0x06, 
+   /* -0DF0, */  0x0e, 0x66, 0x09, 0x0e, 0x6c, 0x0a, 0x0e, 0x6c, 0x06, 0x0f, 0xc6, 0x07, 0x0f, 0xc6, 0x05, 0x11, 
+   /* -0E00, */  0x48, 0x06, 0x11, 0x48, 0x06, 0x0f, 0xbf, 0x07, 0x0f, 0xbf, 0x07, 0x0e, 0x55, 0x06, 0x0f, 0x16, 
+   /* -0E10, */  0x04, 0x0e, 0xf4, 0x03, 0x0e, 0xb1, 0x03, 0x10, 0xa6, 0x09, 0x10, 0x50, 0x03, 0x10, 0xa3, 0x0a, 
+   /* -0E20, */  0x0d, 0xb4, 0x05, 0x0e, 0x36, 0x06, 0x0e, 0xd6, 0x03, 0x0d, 0xf9, 0x11, 0x0e, 0xf8, 0x04, 0x0c,
+   /* -0E30, */  0xd9, 0x08, 0x0e, 0xea, 0x04, 0x09, 0x53, 0x03, 0x0a, 0x4b, 0x04, 0x0e, 0xe4, 0x10, 0x0f, 0x35, 
+   /* -0E40, */  0x09, 0x0e, 0xe4, 0x08, 0x0d, 0x3f, 0x03, 0x0f, 0xe1, 0x0b, 0x10, 0x01, 0x03, 0x10, 0xac, 0x06,
+   /* -0E50, */  0x10, 0x95, 0x0c, 0x0e, 0x76, 0x0b, 0x0f, 0xeb, 0x0a, 0x0f, 0xae, 0x05, 0x10, 0x2b, 0x04, 0x10, 
+   /* -0E60, */  0x2b, 0x08, 0x10, 0x7a, 0x10, 0x0f, 0x49, 0x07, 0x0f, 0xb8, 0x09, 0x10, 0x3e, 0x0b, 0x10, 0x0c, 
+   /* -0E70, */  0x07, 0x0f, 0x78, 0x0b, 0x0f, 0x6d, 0x09, 0x10, 0x47, 0x08, 0x10, 0x82, 0x0b, 0x0f, 0xf6, 0x08, 
+   /* -0E80, */  0x10, 0x62, 0x08, 0x0f, 0x87, 0x08, 0x10, 0x6a, 0x04, 0x0f, 0x78, 0x0d, 0x0f, 0xcd, 0x08, 0x0d, 
+   /* -0E90, */  0xae, 0x10, 0x0f, 0x5d, 0x0b, 0x0f, 0x98, 0x14, 0x0d, 0x20, 0x1b, 0x0d, 0x20, 0x04, 0x0d, 0xe0,        
+   /* -0EA0, */  0x14, 0x0e, 0xb4, 0x0b, 0x0f, 0xa3, 0x0b, 0x07, 0x34, 0x0f, 0x0d, 0x56, 0x04, 0x0e, 0xf4, 0x03, 
+   /* -0EB0, */  0x10, 0xaf, 0x07, 0x0d, 0x34, 0x09, 0x0f, 0x27, 0x04, 0x10, 0x9b, 0x04, 0x10, 0x9f, 0x09, 0x10,       
+   /* -0EC0, */  0x59, 0x08, 0x10, 0x72, 0x09, 0x10, 0x35, 0x0a, 0x10, 0x21, 0x0a, 0x10, 0x17, 0x08, 0x0f, 0xe3, 
+   /* -0ED0, */  0x03, 0x10, 0xa9, 0x05, 0x0c, 0xac, 0x04, 0x0c, 0xbd, 0x07, 0x0c, 0xc1, 0x08, 0x0c, 0xc1, 0x09, 
+   /* -0EE0, */  0x0c, 0xf6, 0x10, 0x0c, 0x72, 0x0c, 0x0c, 0x86, 0x04, 0x0d, 0x64, 0x0c, 0x0c, 0xd5, 0x09, 0x0c, 
+   /* -0EF0, */  0xff, 0x1b, 0x0b, 0xfc, 0x11, 0x0c, 0x5d, 0x13, 0x0c, 0x30, 0x09, 0x0c, 0xa4, 0x0c, 0x0c, 0x24, 
+   /* -0F00, */  0x0c, 0x0d, 0x3b, 0x03, 0x0d, 0x1a, 0x03, 0x0d, 0x1d, 0x16, 0x0c, 0x43, 0x09, 0x0c, 0x92, 0x09, 
+   /* -0F10, */  0x0c, 0x9b, 0x0d, 0x0e, 0xcb, 0x04, 0x0d, 0x16, 0x06, 0x0d, 0x10, 0x05, 0x04, 0xf2, 0x0b, 0x0c, 
+   /* -0F20, */  0xe1, 0x05, 0x0b, 0xde, 0x0a, 0x0c, 0xec, 0x13, 0x0b, 0xe3, 0x07, 0x0b, 0xd4, 0x08, 0x0d, 0x08, 
+   /* -0F30, */  0x0c, 0x0c, 0xc9, 0x09, 0x0c, 0x3a, 0x04, 0x0a, 0xe5, 0x0c, 0x0a, 0x23, 0x08, 0x0b, 0x3a, 0x0e, 
+   /* -0F40, */  0x09, 0xab, 0x0f, 0x0e, 0xfa, 0x09, 0x0f, 0x6f, 0x0c, 0x0a, 0x17, 0x0f, 0x09, 0x76, 0x0c, 0x0a, 
+   /* -0F50, */  0x5f, 0x17, 0x0d, 0xe2, 0x0f, 0x07, 0xa8, 0x0a, 0x0f, 0x85, 0x0f, 0x08, 0xd6, 0x0e, 0x09, 0xb9, 
+   /* -0F60, */  0x0b, 0x0a, 0x7a, 0x03, 0x0b, 0xdb, 0x03, 0x08, 0xc1, 0x04, 0x0e, 0xc7, 0x03, 0x08, 0xd3, 0x02, 
+   /* -0F70, */  0x04, 0x8d, 0x08, 0x0b, 0x4a, 0x05, 0x0b, 0x8c, 0x07, 0x0b, 0x61, 0x06, 0x05, 0x48, 0x04, 0x07, 
+   /* -0F80, */  0xf4, 0x05, 0x10, 0x30, 0x04, 0x07, 0x1e, 0x08, 0x07, 0x1e, 0x05, 0x0b, 0x91, 0x10, 0x04, 0xca, 
+   /* -0F90, */  0x09, 0x0a, 0x71, 0x09, 0x0e, 0x87, 0x05, 0x04, 0x98, 0x05, 0x0b, 0x6e, 0x0b, 0x04, 0x9b, 0x0f, 
+   /* -0FA0, */  0x04, 0x9b, 0x07, 0x04, 0x9b, 0x03, 0x04, 0xa3, 0x07, 0x04, 0xa3, 0x10, 0x07, 0x98, 0x09, 0x07, 
+   /* -0FB0, */  0x98, 0x05, 0x0b, 0x73, 0x05, 0x0b, 0x78, 0x05, 0x0b, 0x7d, 0x05, 0x07, 0xb9, 0x05, 0x0b, 0x82, 
+   /* -0FC0, */  0x05, 0x0b, 0x87, 0x05, 0x0b, 0x1d, 0x05, 0x08, 0xe4, 0x05, 0x0c, 0x81, 0x05, 0x0f, 0x44, 0x05, 
+   /* -0FD0, */  0x11, 0x40, 0x05, 0x08, 0x78, 0x05, 0x08, 0x9d, 0x05, 0x0f, 0x58, 0x05, 0x07, 0x3f, 0x05, 0x0c, 
+   /* -0FE0, */  0x6d, 0x05, 0x10, 0xf2, 0x05, 0x0c, 0x58, 0x05, 0x06, 0xa9, 0x04, 0x07, 0xb6, 0x09, 0x05, 0x8c, 
+   /* -0FF0, */  0x06, 0x06, 0x1a, 0x06, 0x0e, 0x81, 0x0a, 0x06, 0x16, 0x0a, 0x0a, 0xc4, 0x07, 0x0b, 0x5a, 0x0a, 
+   /* -1000, */  0x0a, 0xba, 0x03, 0x0b, 0x1b, 0x04, 0x11, 0x45, 0x06, 0x0c, 0x8c, 0x07, 0x05, 0xad, 0x0a, 0x0e, 
+   /* -1010, */  0xda, 0x08, 0x0b, 0x42, 0x0d, 0x09, 0xf7, 0x0b, 0x05, 0x1c, 0x09, 0x11, 0x16, 0x08, 0x05, 0xc9, 
+   /* -1020, */  0x07, 0x0d, 0x86, 0x06, 0x0b, 0xcf, 0x0a, 0x06, 0x4d, 0x04, 0x0b, 0xa2, 0x06, 0x06, 0x8d, 0x08, 
+   /* -1030, */  0x05, 0xe6, 0x08, 0x0e, 0x11, 0x0b, 0x0a, 0x9b, 0x03, 0x0a, 0x04, 0x03, 0x0b, 0xb5, 0x05, 0x10,      
+   /* -1040, */  0xd7, 0x04, 0x09, 0x94, 0x05, 0x0a, 0xe2, 0x03, 0x0b, 0xb2, 0x06, 0x0d, 0x67, 0x04, 0x0d, 0x11, 
+   /* -1050, */  0x08, 0x08, 0xb7, 0x1b, 0x0e, 0x3b, 0x0a, 0x09, 0xa1, 0x14, 0x04, 0x85, 0x15, 0x07, 0x83, 0x15, 
+   /* -1060, */  0x07, 0x6e, 0x0d, 0x09, 0x3d, 0x17, 0x06, 0xae, 0x0f, 0x07, 0xe6, 0x14, 0x07, 0xbe, 0x0d, 0x06, 
+   /* -1070, */  0x0a, 0x0d, 0x09, 0x30, 0x16, 0x06, 0xf2, 0x12, 0x08, 0x1e, 0x21, 0x04, 0xaa, 0x13, 0x10, 0xc5, 
+   /* -1080, */  0x08, 0x0a, 0x0f, 0x1c, 0x0e, 0x96, 0x18, 0x0b, 0xb8, 0x1a, 0x05, 0x95, 0x1a, 0x05, 0x75, 0x11, 
+   /* -1090, */  0x06, 0x3d, 0x16, 0x06, 0xdc, 0x1e, 0x0e, 0x19, 0x16, 0x05, 0xd1, 0x1d, 0x06, 0x20, 0x23, 0x05, 
+   /* -10A0, */  0x27, 0x11, 0x08, 0x7d, 0x11, 0x0d, 0x99, 0x16, 0x04, 0xda, 0x0d, 0x0f, 0x1c, 0x16, 0x07, 0x08, 
+   /* -10B0, */  0x17, 0x05, 0xb4, 0x0d, 0x08, 0xc7, 0x13, 0x07, 0xf8, 0x12, 0x08, 0x57, 0x1f, 0x04, 0xfe, 0x19, 
+   /* -10C0, */  0x05, 0x4e, 0x13, 0x08, 0x0b, 0x0f, 0x08, 0xe9, 0x17, 0x06, 0xc5, 0x13, 0x06, 0x7b, 0x19, 0x05, 
+   /* -10D0, */  0xf1, 0x15, 0x07, 0x44, 0x18, 0x0d, 0xfb, 0x0b, 0x0f, 0x09, 0x1b, 0x0d, 0xbe, 0x12, 0x08, 0x30,        
+   /* -10E0, */  0x15, 0x07, 0x59, 0x04, 0x0b, 0xa6, 0x04, 0x0b, 0xae, 0x04, 0x0b, 0x9e, 0x04, 0x0b, 0x96, 0x04, 
+   /* -10F0, */  0x0b, 0x9a, 0x0a, 0x0a, 0xb0, 0x0b, 0x0a, 0x90, 0x08, 0x0b, 0x32, 0x0b, 0x09, 0x6b, 0x08, 0x0b, 
+   /* -1100, */  0x2a, 0x0b, 0x0a, 0x85, 0x09, 0x0b, 0x12, 0x0a, 0x0a, 0xa6, 0x0d, 0x09, 0xea, 0x13, 0x0d, 0x74, 
+   /* -1110, */  0x14, 0x07, 0xd2, 0x13, 0x09, 0x0b, 0x12, 0x08, 0x42, 0x10, 0x09, 0x5b, 0x12, 0x09, 0x1e, 0x0d, 
+   /* -1120, */  0x0c, 0xb1, 0x0e, 0x0c, 0x17, 0x11, 0x09, 0x4a, 0x0c, 0x0a, 0x53, 0x0c, 0x0a, 0x47, 0x09, 0x0a, 
+   /* -1130, */  0xf7, 0x0e, 0x09, 0xc7, 0x0c, 0x0a, 0x3b, 0x07, 0x06, 0x69, 0x08, 0x06, 0x69, 0x06, 0x09, 0xe3, 
+   /* -1140, */  0x08, 0x0b, 0x52, 0x0a, 0x0a, 0xd8, 0x12, 0x06, 0x57, 0x0d, 0x06, 0x57, 0x07, 0x09, 0xe3, 0x04, 
+   /* -1150, */  0x0a, 0xe9, 0x10, 0x07, 0x30, 0x09, 0x0b, 0x00, 0x0c, 0x0a, 0x2f, 0x05, 0x0a, 0xe9, 0x05, 0x0a, 
+   /* -1160, */  0x6b, 0x06, 0x0a, 0x6b, 0x0a, 0x0a, 0xce, 0x09, 0x0a, 0xee, 0x03, 0x0b, 0xdb, 0x07, 0x0f, 0x7e, 
+   /* -1170, */  0x0a, 0x09, 0x97, 0x0a, 0x06, 0x71, 0x0e, 0x09, 0xd5, 0x17, 0x06, 0x93, 0x07, 0x0e, 0x5c, 0x07, 
+   /* -1180, */  0x0f, 0xda, 0x0a, 0x0f, 0x35, 0x0d, 0x0d, 0xec, 0x0a, 0x09, 0x97, 0x0a, 0x06, 0x71, 0x08, 0x0b, 
+   /* -1190, */  0x22, 0x0f, 0x09, 0x85, 0x06, 0x0b, 0x68, 0x0c, 0x0d, 0x4a, 0x09, 0x0b, 0x09, 0x13, 0x08, 0xf8, 
+   /* -11A0, */  0x15, 0x08, 0xa2, 0x04, 0x0b, 0xaa, 0x0f, 0x05, 0x66, 0x0d, 0x07, 0x23, 0x09, 0x0a, 0x06, 0x0b, 
+   /* -11B0, */  0x0d, 0x4a, 0x0f, 0x04, 0xee, 0x06, 0x04, 0xf8, 0x04, 0x09, 0x2b, 0x04, 0x08, 0x53, 0x07, 0x08, 
+   /* -11C0, */  0xc0, 0x03, 0x11, 0x1f, 0x04, 0x11, 0x1e, 0x07, 0x0d, 0x8c, 0x03, 0x07, 0x34, 0x04, 0x10, 0xdb, 
+   /* -11D0, */  0x03, 0x07, 0x36, 0x03, 0x0d, 0xa9, 0x0d, 0x04, 0x20, 0x0b, 0x04, 0x51, 0x0c, 0x04, 0x3a, 0x04, 
+   /* -11E0, */  0x0b, 0xb8, 0x04, 0x0c, 0x24, 0x04, 0x05, 0x95, 0x04, 0x04, 0x7c, 0x04, 0x05, 0x75, 0x04, 0x04, 
+   /* -11F0, */  0x85, 0x04, 0x09, 0x6b, 0x04, 0x06, 0x3d, 0x06, 0x04, 0x7b, 0x04, 0x06, 0xdc, 0x04, 0x07, 0x83,
+   /* -1200, */  0x04, 0x0e, 0x19, 0x12, 0x04, 0x00, 0x10, 0x08, 0x8e, 0x10, 0x08, 0x69, 0x0e, 0x04, 0x12, 0x0d,
+   /* -1210, */  0x04, 0x2d, 0x03, 0x10, 0xb9, 0x04, 0x05, 0xd1, 0x04, 0x07, 0x6e, 0x04, 0x06, 0x20, 0x07, 0x04, 
+   /* -1220, */  0x74, 0x04, 0x0b, 0xfc, 0x0a, 0x04, 0x5c, 0x04, 0x05, 0x27, 0x04, 0x09, 0x3d, 0x04, 0x08, 0x7d, 
+   /* -1230, */  0x04, 0x0f, 0xae, 0x04, 0x0d, 0x99, 0x04, 0x06, 0xae, 0x04, 0x04, 0xda, 0x09, 0x04, 0x09, 0x08, 
+   /* -1240, */  0x11, 0x22, 0x04, 0x0f, 0x1c, 0x04, 0x07, 0xe6, 0x04, 0x0e, 0xcb, 0x05, 0x08, 0xbd, 0x04, 0x07,
+   /* -1250, */  0x08, 0x04, 0x0f, 0xa3, 0x04, 0x06, 0x57, 0x04, 0x05, 0xb4, 0x04, 0x0f, 0x5d, 0x04, 0x08, 0xc7,
+   /* -1260, */  0x08, 0x0b, 0xf4, 0x04, 0x07, 0xf8, 0x04, 0x07, 0x30, 0x04, 0x07, 0xbe, 0x04, 0x08, 0x57, 0x05, 
+   /* -1270, */  0x0d, 0x46, 0x04, 0x04, 0xfe, 0x04, 0x06, 0x0a, 0x04, 0x05, 0x4e, 0x04, 0x0e, 0x3b, 0x04, 0x08,
+   /* -1280, */  0x0b, 0x04, 0x09, 0x30, 0x04, 0x08, 0xe9, 0x05, 0x05, 0xee, 0x04, 0x06, 0xc5, 0x04, 0x06, 0xf2, 
+   /* -1290, */  0x04, 0x06, 0x7b, 0x04, 0x09, 0xa1, 0x04, 0x05, 0xf1, 0x04, 0x08, 0x1e, 0x04, 0x07, 0x44, 0x04, 
+   /* -12A0, */  0x0b, 0xdd, 0x04, 0x0d, 0xfb, 0x04, 0x04, 0xaa, 0x04, 0x0b, 0xe3, 0x07, 0x0e, 0xee, 0x04, 0x0f, 
+   /* -12B0, */  0x09, 0x04, 0x0e, 0xb4, 0x04, 0x0d, 0xbe, 0x04, 0x10, 0xc5, 0x04, 0x08, 0x30, 0x05, 0x0f, 0x30,     
+   /* -12C0, */  0x04, 0x07, 0x59, 0x04, 0x0a, 0x0f, 0x06, 0x0e, 0x61, 0x04, 0x04, 0x81, 0x04, 0x0d, 0xab, 0x04, 
+   /* -12D0, */  0x0d, 0x93, 0x04, 0x11, 0x6b, 0x04, 0x0e, 0x96, 0x05, 0x04, 0x66, 0x09, 0x04, 0x6b, 0x0b, 0x04,
+   /* -12E0, */  0x46, 0x04, 0x0c, 0xe1
+
+}; 
+                          
+int udvm_state_access(guint8 buff[],guint16 p_id_start, guint16 p_id_length, guint16 state_begin, guint16 state_length, 
+					   guint16 state_address, guint16 state_instruction)
+{
+	int			result_code = 0;
+	guint		n;
+	guint16		k;
+	guint16		byte_copy_right;
+	guint16		byte_copy_left;
+
+	/* 
+	 * Perform initial checks on validity of data
+	 * RFC 3320 :
+	 * 9.4.5.  STATE-ACCESS
+	 * :
+	 * Decompression failure occurs if partial_identifier_length does not
+	 * lie between 6 and 20 inclusive.  Decompression failure also occurs if
+	 * no state item matching the partial state identifier can be found, if
+	 * more than one state item matches the partial identifier, or if
+	 * partial_identifier_length is less than the minimum_access_length of
+	 * the matched state item. Otherwise, a state item is returned from the
+	 * state handler.
+	 */
+
+	if (( p_id_length < 6 ) || ( p_id_length > 20 )){
+		result_code = 1;
+		return result_code;
+	}
+	/* 
+	 * Is this a static library known to us ?
+	 */
+	n = 0;
+	while (n < p_id_length ) {
+		if ( buff[p_id_start + n] != sip_sdp_state_identifier[n] )
+			goto not_static_dictionary;
+		n++;
+	}
+	/* 
+	 * sip_sdp_static_dictionaty
+	 *
+	 * 8.4.  Byte copying
+	 * :
+	 * The string of bytes is copied in ascending order of memory address,
+	 * respecting the bounds set by byte_copy_left and byte_copy_right.
+	 * More precisely, if a byte is copied from/to Address m then the next
+	 * byte is copied from/to Address n where n is calculated as follows:
+	 *
+	 * Set k := m + 1 (modulo 2^16)
+	 * If k = byte_copy_right then set n := byte_copy_left, else set n := k
+	 *
+	 */ 
+	if ( ( state_begin + state_length ) > sip_sdp_state_length )
+		return 3;
+
+	n = state_begin;
+	k = state_address; 
+	byte_copy_right = buff[66] << 8;
+	byte_copy_right = byte_copy_right ^ buff[67];
+	byte_copy_left = buff[64] << 8;
+	byte_copy_left = byte_copy_left ^ buff[65];
+	/* debug 
+	 *g_warning(" state_begin %u state_address %u",state_begin , state_address);
+	 */
+	while ( n < state_length ){
+		buff[k] = sip_sdp_static_dictionaty_for_sigcomp[n];
+		/*  debug 
+		 *	g_warning(" Loading 0x%x at address %u",buff[k] , k);
+		 */
+		k = ( k + 1 ) & 0xffff;
+		if ( k == byte_copy_right ){
+			byte_copy_left = buff[64] << 8;
+			byte_copy_left = byte_copy_left ^ buff[65];
+			k = byte_copy_left;
+		}
+		n++;
+	}
+
+	return 0;
+	/*
+	 * End SIP
+	 */
+not_static_dictionary:
+	return 255;
+}
+
+void udvm_state_create(guint8 state_buff[],guint8 state_identifier[]){
+	/*
+	 * Debug
+	g_warning("Received items of state,state_length_buff[0]= %u, state_length_buff[1]= %u",
+		state_length_buff[0],state_length_buff[1]);
+
+	 */
+
+}
diff -urN ethereal-0.10.6/epan/sigcomp_state_hdlr.h ethereal-0.10.7/epan/sigcomp_state_hdlr.h
--- ethereal-0.10.6/epan/sigcomp_state_hdlr.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/sigcomp_state_hdlr.h	2004-10-20 17:35:03.000000000 -0500
@@ -0,0 +1,42 @@
+/* sigcomp_state_hdlr.c
+ * Routines making up the State handler of the Univerasl Decompressor Virtual Machine (UDVM) 
+ * used for Signaling Compression (SigComp) dissection.
+ * Copyright 2004, Anders Broman <anders.broman@ericsson.com>
+ *
+ * $Id: udvm.c 11445 2004-07-20 19:04:48Z etxrab $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * References:
+ * http://www.ietf.org/rfc/rfc3320.txt?number=3320
+ * http://www.ietf.org/rfc/rfc3321.txt?number=3321
+ * Useful links :
+ * http://www.ietf.org/internet-drafts/draft-ietf-rohc-sigcomp-impl-guide-03.txt
+ * http://www.ietf.org/internet-drafts/draft-ietf-rohc-sigcomp-sip-01.txt
+ */
+
+#ifndef SIGCOMP_STATE_HDLR_H
+#define SIGCOMP_STATE_HDLR_H
+
+extern int udvm_state_access(guint8 buff[],guint16 p_id_start, guint16 p_id_length, guint16 state_begin, guint16 state_length, 
+								guint16 state_address, guint16 state_instruction);
+
+extern void udvm_state_create(guint8 state_buff[],guint8 state_identifier_buff[]);
+
+#endif 
+/* SIGCOMP_STATE_HDLR_H */
diff -urN ethereal-0.10.6/epan/sminmpec.c ethereal-0.10.7/epan/sminmpec.c
--- ethereal-0.10.6/epan/sminmpec.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/sminmpec.c	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,81 @@
+/* sminmpec.h
+ * SMI Network Management Private Enterprise Codes for organizations
+ *
+ * $Id: sminmpec.c 12195 2004-10-04 20:13:35Z gerald $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 2004 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include <epan/value_string.h>
+#include <epan/sminmpec.h>
+
+/*
+ * SMI Network Management Private Enterprise Codes for organizations.
+ *
+ * XXX - these also appear in FreeRadius dictionary files, with items such
+ * as
+ *
+ *	VENDOR          Cisco           9
+ */
+const value_string sminmpec_values[] = {
+  {0,				"None"},
+  {VENDOR_ACC,			"ACC"},
+  {VENDOR_CISCO,		"Cisco"},
+  {VENDOR_HEWLETT_PACKARD,	"Hewlett Packard"},
+  {VENDOR_SUN_MICROSYSTEMS,	"Sun Microsystems"},
+  {VENDOR_MERIT,		"Merit"},
+  {VENDOR_SHIVA,		"Shiva"},
+  {VENDOR_ERICSSON_BUSINESS_COMUNICATIONS,	"Ericsson Business Communications"},
+  {VENDOR_CISCO_VPN5000,	"Cisco VPN 5000"},
+  {VENDOR_LIVINGSTON,		"Livingston"},
+  {VENDOR_MICROSOFT,		"Microsoft"},
+  {VENDOR_3COM,			"3Com"},
+  {VENDOR_ASCEND,		"Ascend"},
+  {VENDOR_BAY,			"Bay Networks"},
+  {VENDOR_FOUNDRY,		"Foundry"},
+  {VENDOR_VERSANET,		"Versanet"},
+  {VENDOR_REDBACK,		"Redback"},
+  {VENDOR_JUNIPER,		"Juniper Networks"},
+  {VENDOR_APTIS,		"Aptis"},
+  {VENDOR_CISCO_VPN3000,	"Cisco VPN 3000"},
+  {VENDOR_COSINE,		"CoSine Communications"},
+  {VENDOR_SHASTA,		"Shasta"},
+  {VENDOR_NOMADIX,		"Nomadix"},
+  {VENDOR_SIEMENS,		"SIEMENS"},
+  {VENDOR_CABLELABS,		"CableLabs"},
+  {VENDOR_UNISPHERE,		"Unisphere Networks"},
+  {VENDOR_CISCO_BBSM,		"Cisco BBSM"},
+  {VENDOR_THE3GPP2,		"3rd Generation Partnership Project 2 (3GPP2)"},
+  {VENDOR_IP_UNPLUGGED,		"ipUnplugged"},
+  {VENDOR_ISSANNI,		"Issanni Communications"},
+  {VENDOR_QUINTUM,		"Quintum"},
+  {VENDOR_INTERLINK,		"Interlink"},
+  {VENDOR_COLUBRIS,		"Colubris"},
+  {VENDOR_COLUMBIA_UNIVERSITY,	"Columbia University"},
+  {VENDOR_THE3GPP,		"3GPP"},
+  {VENDOR_GEMTEK_SYSTEMS,	"Gemtek-Systems"},
+  {VENDOR_WIFI_ALLIANCE,	"Wi-Fi Alliance"},
+  {0, NULL}
+};
diff -urN ethereal-0.10.6/epan/sminmpec.h ethereal-0.10.7/epan/sminmpec.h
--- ethereal-0.10.6/epan/sminmpec.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/sminmpec.h	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,75 @@
+/* sminmpec.h
+ * SMI Network Management Private Enterprise Codes for organizations
+ *
+ * $Id: sminmpec.h 12195 2004-10-04 20:13:35Z gerald $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 2004 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef __SMINMPEC_H__
+#define __SMINMPEC_H__
+
+/*
+ * These are SMI Network Management Private Enterprise Codes for
+ * organizations; see
+ *
+ *	http://www.iana.org/assignments/enterprise-numbers
+ *
+ * for a list.
+ */
+#define VENDOR_ACC			5
+#define VENDOR_CISCO			9
+#define VENDOR_HEWLETT_PACKARD		11
+#define VENDOR_SUN_MICROSYSTEMS		42
+#define VENDOR_MERIT			61
+#define VENDOR_SHIVA			166
+#define VENDOR_ERICSSON_BUSINESS_COMUNICATIONS	193
+#define VENDOR_CISCO_VPN5000		255
+#define VENDOR_LIVINGSTON		307
+#define VENDOR_MICROSOFT		311
+#define VENDOR_3COM			429
+#define VENDOR_ASCEND			529
+#define VENDOR_BAY			1584
+#define VENDOR_FOUNDRY			1991
+#define VENDOR_VERSANET			2180
+#define VENDOR_REDBACK			2352
+#define VENDOR_JUNIPER			2636
+#define VENDOR_APTIS			2637
+#define VENDOR_CISCO_VPN3000		3076
+#define VENDOR_COSINE			3085
+#define VENDOR_SHASTA			3199
+#define VENDOR_NOMADIX			3309
+#define VENDOR_SIEMENS			4329
+#define VENDOR_CABLELABS		4491
+#define VENDOR_UNISPHERE		4874
+#define VENDOR_CISCO_BBSM		5263
+#define VENDOR_THE3GPP2			5535
+#define VENDOR_IP_UNPLUGGED		5925
+#define VENDOR_ISSANNI			5948
+#define VENDOR_QUINTUM			6618
+#define VENDOR_INTERLINK		6728
+#define VENDOR_COLUBRIS			8744
+#define VENDOR_COLUMBIA_UNIVERSITY	11862
+#define VENDOR_THE3GPP			10415
+#define VENDOR_GEMTEK_SYSTEMS		10529
+#define VENDOR_WIFI_ALLIANCE		14122
+
+extern const value_string sminmpec_values[];
+
+#endif /* __SMINMPEC_H__ */
diff -urN ethereal-0.10.6/epan/strutil.c ethereal-0.10.7/epan/strutil.c
--- ethereal-0.10.6/epan/strutil.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/strutil.c	2004-10-20 17:35:04.000000000 -0500
@@ -1,7 +1,7 @@
 /* strutil.c
  * String utility routines
  *
- * $Id: strutil.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: strutil.c 11733 2004-08-13 02:39:49Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -476,3 +476,113 @@
 
 	return NULL;
 }
+
+/*
+ * Scan the search string to make sure it's valid hex.  Return the
+ * number of bytes in nbytes.
+ */
+guint8 *
+convert_string_to_hex(const char *string, size_t *nbytes)
+{
+  size_t n_bytes;
+  const char *p;
+  guchar c;
+  guint8 *bytes, *q, byte_val;
+
+  n_bytes = 0;
+  p = &string[0];
+  for (;;) {
+    c = *p++;
+    if (c == '\0')
+      break;
+    if (isspace(c))
+      continue;	/* allow white space */
+    if (c==':' || c=='.' || c=='-')
+      continue; /* skip any ':', '.', or '-' between bytes */
+    if (!isxdigit(c)) {
+      /* Not a valid hex digit - fail */
+      return NULL;
+    }
+
+    /*
+     * We can only match bytes, not nibbles; we must have a valid
+     * hex digit immediately after that hex digit.
+     */
+    c = *p++;
+    if (!isxdigit(c))
+      return NULL;
+
+    /* 2 hex digits = 1 byte */
+    n_bytes++;
+  }
+
+  /*
+   * Were we given any hex digits?
+   */
+  if (n_bytes == 0) {
+      /* No. */
+      return NULL;
+  }
+
+  /*
+   * OK, it's valid, and it generates "n_bytes" bytes; generate the
+   * raw byte array.
+   */
+  bytes = g_malloc(n_bytes);
+  p = &string[0];
+  q = &bytes[0];
+  for (;;) {
+    c = *p++;
+    if (c == '\0')
+      break;
+    if (isspace(c))
+      continue;	/* allow white space */
+    if (c==':' || c=='.' || c=='-')
+      continue; /* skip any ':', '.', or '-' between bytes */
+    /* From the loop above, we know this is a hex digit */
+    if (isdigit(c))
+      byte_val = c - '0';
+    else if (c >= 'a')
+      byte_val = (c - 'a') + 10;
+    else
+      byte_val = (c - 'A') + 10;
+    byte_val <<= 4;
+
+    /* We also know this is a hex digit */
+    c = *p++;
+    if (isdigit(c))
+      byte_val |= c - '0';
+    else if (c >= 'a')
+      byte_val |= (c - 'a') + 10;
+    else if (c >= 'A')
+      byte_val |= (c - 'A') + 10;
+
+    *q++ = byte_val;
+  }
+  *nbytes = n_bytes;
+  return bytes;
+}
+
+/*
+ * Copy if if it's a case-sensitive search; uppercase it if it's
+ * a case-insensitive search.
+ */
+char *
+convert_string_case(const char *string, gboolean case_insensitive)
+{
+  char *out_string;
+  const char *p;
+  char c;
+  char *q;
+
+  if (case_insensitive) {
+    out_string = g_malloc(strlen(string) + 1);
+    for (p = &string[0], q = &out_string[0]; (c = *p) != '\0'; p++, q++)
+      *q = toupper((unsigned char)*p);
+    *q = '\0';
+  } else
+    out_string = g_strdup(string);
+  return out_string;
+}
+
+
diff -urN ethereal-0.10.6/epan/strutil.h ethereal-0.10.7/epan/strutil.h
--- ethereal-0.10.6/epan/strutil.h	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/strutil.h	2004-10-20 17:35:04.000000000 -0500
@@ -1,7 +1,7 @@
 /* strutil.h
  * String utility definitions
  *
- * $Id: strutil.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: strutil.h 11733 2004-08-13 02:39:49Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -125,4 +125,23 @@
 #define _STRINGIFY(a)           # a
 #define STRINGIFY(a)            _STRINGIFY(a)
 
+/** Scan a string to make sure it's valid hex.
+ *
+ * @param string The string to validate
+ * @param nbytes The length of the return buffer
+ * @return A pointer to a buffer containing the converted raw bytes.  This
+ *         buffer must be g_free()d by the caller.
+ */
+guint8 * convert_string_to_hex(const char *string, size_t *nbytes);
+
+/** Prep a string for case-sensitive vs case-insensitive searching.
+ *
+ * @param string The search string
+ * @param case_sensitive TRUE if case-sensitive, FALSE if not
+ * @return A direct copy of the string if it's a case-sensitive search and
+ * an uppercased version if not.  In either case the string must be g_free()d
+ * by the caller.
+ */
+char * convert_string_case(const char *string, gboolean case_insensitive);
+
 #endif /* __STRUTIL_H__ */
diff -urN ethereal-0.10.6/epan/t35.c ethereal-0.10.7/epan/t35.c
--- ethereal-0.10.6/epan/t35.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/t35.c	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,396 @@
+/* t35.c
+ * T.35 and H.221 tables
+ * 2003  Tomas Kukosa
+ *
+ * $Id: t35.c 12150 2004-09-30 18:12:34Z etxrab $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#include <epan/t35.h>
+
+/* Recommendation T.35 (02/2000) */
+/* Annex to ITU Operational Bulletin No. 766 - 15.VI.2002 */
+const value_string T35CountryCode_vals[] = {
+	{ 0x00, "Japan"},
+	{ 0x01, "Albania"},
+	{ 0x02, "Algeria"},
+	{ 0x03, "American Samoa"},
+	{ 0x04, "Germany"},
+	{ 0x05, "Anguilla"},
+	{ 0x06, "Antigua and Barbuda"},
+	{ 0x07, "Argentina"},
+	{ 0x08, "Ascension (see S. Helena)"},
+	{ 0x09, "Australia"},
+	{ 0x0a, "Austria"},
+	{ 0x0b, "Bahamas"},
+	{ 0x0c, "Bahrain"},
+	{ 0x0d, "Bangladesh"},
+	{ 0x0e, "Barbados"},
+	{ 0x0f, "Belgium"},
+	{ 0x10, "Belize"},
+	{ 0x11, "Benin"},
+	{ 0x12, "Bermuda"},
+	{ 0x13, "Bhutan"},
+	{ 0x14, "Bolivia"},
+	{ 0x15, "Botswana"},
+	{ 0x16, "Brazil"},
+	{ 0x17, "British Antarctic Territory"},
+	{ 0x18, "British Indian Ocean Territory"},
+	{ 0x19, "British Virgin Islands"},
+	{ 0x1a, "Brunei Darussalam"},
+	{ 0x1b, "Bulgaria"},
+	{ 0x1c, "Myanmar"},
+	{ 0x1d, "Burundi"},
+	{ 0x1e, "Belarus"},
+	{ 0x1f, "Cameroon"},
+	{ 0x20, "Canada"},
+	{ 0x21, "Cape Verde"},
+	{ 0x22, "Cayman Islands"},
+	{ 0x23, "Central African Rep."},
+	{ 0x24, "Chad"},
+	{ 0x25, "Chile"},
+	{ 0x26, "China"},
+	{ 0x27, "Colombia"},
+	{ 0x28, "Comoros"},
+	{ 0x29, "Congo"},
+	{ 0x2a, "Cook Islands"},
+	{ 0x2b, "Costa Rica"},
+	{ 0x2c, "Cuba"},
+	{ 0x2d, "Cyprus"},
+	{ 0x2e, "Czech Rep."},
+	{ 0x2f, "Cambodia"},
+	{ 0x30, "Dem. People's Rep. of Korea"},
+	{ 0x31, "Denmark"},
+	{ 0x32, "Djibouti"},
+	{ 0x33, "Dominican Rep."},
+	{ 0x34, "Dominica"},
+	{ 0x35, "Ecuador"},
+	{ 0x36, "Egypt"},
+	{ 0x37, "El Salvador"},
+	{ 0x38, "Equatorial Guinea"},
+	{ 0x39, "Ethiopia"},
+	{ 0x3a, "Falkland Islands (Malvinas)"},
+	{ 0x3b, "Fiji"},
+	{ 0x3c, "Finland"},
+	{ 0x3d, "France"},
+	{ 0x3e, "French Polynesia"},
+	/* { 0x3f, "(Available)"}, */
+	{ 0x40, "Gabon"},
+	{ 0x41, "Gambia"},
+	{ 0x42, "Germany"},
+	{ 0x43, "Angola"},
+	{ 0x44, "Ghana"},
+	{ 0x45, "Gibraltar"},
+	{ 0x46, "Greece"},
+	{ 0x47, "Grenada"},
+	{ 0x48, "Guam"},
+	{ 0x49, "Guatemala"},
+	{ 0x4a, "Guernsey"},
+	{ 0x4b, "Guinea"},
+	{ 0x4c, "Guinea-Bissau"},
+	{ 0x4d, "Guayana"},
+	{ 0x4e, "Haiti"},
+	{ 0x4f, "Honduras"},
+	{ 0x50, "Hong Kong, China"},
+	{ 0x51, "Hungary"},
+	{ 0x52, "Iceland"},
+	{ 0x53, "India"},
+	{ 0x54, "Indonesia"},
+	{ 0x55, "Iran (Islamic Republic of)"},
+	{ 0x56, "Iraq"},
+	{ 0x57, "Ireland"},
+	{ 0x58, "Israel"},
+	{ 0x59, "Italy"},
+	{ 0x5a, "Cte d'Ivoire"},
+	{ 0x5b, "Jamaica"},
+	{ 0x5c, "Afghanistan"},
+	{ 0x5d, "Jersey"},
+	{ 0x5e, "Jordan"},
+	{ 0x5f, "Kenya"},
+	{ 0x60, "Kiribati"},
+	{ 0x61, "Korea (Rep. of)"},
+	{ 0x62, "Kuwait"},
+	{ 0x63, "Lao P.D.R."},
+	{ 0x64, "Lebanon"},
+	{ 0x65, "Lesotho"},
+	{ 0x66, "Liberia"},
+	{ 0x67, "Libya"},
+	{ 0x68, "Liechtenstein"},
+	{ 0x69, "Luxembourg"},
+	{ 0x6a, "Macao, China"},
+	{ 0x6b, "Madagascar"},
+	{ 0x6c, "Malaysia"},
+	{ 0x6d, "Malawi"},
+	{ 0x6e, "Maldives"},
+	{ 0x6f, "Mali"},
+	{ 0x70, "Malta"},
+	{ 0x71, "Mauritania"},
+	{ 0x72, "Mauritius"},
+	{ 0x73, "Mexico"},
+	{ 0x74, "Monaco"},
+	{ 0x75, "Mongolia"},
+	{ 0x76, "Montserrat"},
+	{ 0x77, "Morocco"},
+	{ 0x78, "Mozambique"},
+	{ 0x79, "Nauru"},
+	{ 0x7a, "Nepal"},
+	{ 0x7b, "Netherlands"},
+	{ 0x7c, "Netherlands Antilles"},
+	{ 0x7d, "New Caledonia"},
+	{ 0x7e, "New Zealand"},
+	{ 0x7f, "Nicaragua"},
+	{ 0x80, "Niger"},
+	{ 0x81, "Nigeria"},
+	{ 0x82, "Norway"},
+	{ 0x83, "Oman"},
+	{ 0x84, "Pakistan"},
+	{ 0x85, "Panama"},
+	{ 0x86, "Papua New Guinea"},
+	{ 0x87, "Paraguay"},
+	{ 0x88, "Peru"},
+	{ 0x89, "Philippines"},
+	{ 0x8a, "Poland"},
+	{ 0x8b, "Portugal"},
+	{ 0x8c, "Puerto Rico"},
+	{ 0x8d, "Qatar"},
+	{ 0x8e, "Romania"},
+	{ 0x8f, "Rwanda"},
+	{ 0x90, "Saint Kitts and Nevis"},
+	{ 0x91, "Saint Croix"},
+	{ 0x92, "Saint Helena and Ascension"},
+	{ 0x93, "Saint Lucia"},
+	{ 0x94, "San Marino"},
+	{ 0x95, "Saint Thomas"},
+	{ 0x96, "Sao Tome and Principe"},
+	{ 0x97, "Saint Vincent and the Grenadines"},
+	{ 0x98, "Saudi Arabia"},
+	{ 0x99, "Senegal"},
+	{ 0x9a, "Seychelles"},
+	{ 0x9b, "Sierra Leone"},
+	{ 0x9c, "Singapore"},
+	{ 0x9d, "Solomon"},
+	{ 0x9e, "Somalia"},
+	{ 0x9f, "South Africa"},
+	{ 0xa0, "Spain"},
+	{ 0xa1, "Sri Lanka"},
+	{ 0xa2, "Sudan"},
+	{ 0xa3, "Suriname"},
+	{ 0xa4, "Swaziland"},
+	{ 0xa5, "Sweden"},
+	{ 0xa6, "Switzerland"},
+	{ 0xa7, "Syria"},
+	{ 0xa8, "Tanzania"},
+	{ 0xa9, "Thailand"},
+	{ 0xaa, "Togo"},
+	{ 0xab, "Tonga"},
+	{ 0xac, "Trinidad and Tobago"},
+	{ 0xad, "Tunisia"},
+	{ 0xae, "Turkey"},
+	{ 0xaf, "Turks and Caicos Islands"},
+	{ 0xb0, "Tuvalu"},
+	{ 0xb1, "Uganda"},
+	{ 0xb2, "Ukraine"},
+	{ 0xb3, "United Arab Emirates"},
+	{ 0xb4, "United Kingdom"},
+	{ 0xb5, "United States"},
+	{ 0xb6, "Burkina Faso"},
+	{ 0xb7, "Uruguay"},
+	{ 0xb8, "Russia"},
+	{ 0xb9, "Vanuatu"},
+	{ 0xba, "Vatican"},
+	{ 0xbb, "Venezuela"},
+	{ 0xbc, "Viet Nam"},
+	{ 0xbd, "Wallis and Futuna"},
+	{ 0xbe, "Samoa"},
+	{ 0xbf, "Yemen"},
+	{ 0xc0, "Yemen"},
+	{ 0xc1, "Yugoslavia"},
+	{ 0xc2, "Dem. Rep. of the Congo"},
+	{ 0xc3, "Zambia"},
+	{ 0xc4, "Zimbabwe"},
+	{ 0xc5, "Slovakia"},
+	{ 0xc6, "Slovenia"},
+	{  0, NULL }
+};
+
+
+const value_string T35Extension_vals[] = {
+	{  0, NULL }
+};
+
+const value_string H221ManufacturerCode_vals[] = {
+	{  0x04000042, "Deutsche Telekom AG" },                             /* From Ref. 3 */
+	{  0x04000043, "Deutsche Telekom AG" },                             /* From Ref. 3 */
+	{  0x04000082, "Siemens AG" },                                      /* From Ref. 3 */
+	{  0x04000084, "ITO Communication" },                               /* From Ref. 3 */
+	{  0x04000086, "Hauni Elektronik" },                                /* From Ref. 3 */
+	{  0x04000088, "Dr.Neuhaus Mikroelektronik" },                      /* From Ref. 3 */
+	{  0x0400008a, "mps Software" },                                    /* From Ref. 3 */
+	{  0x0400008b, "Ferrari electronik GmbH" },                         /* From Ref. 3 */
+	{  0x0400008c, "mbp Kommunikationssysteme GmbH" },                  /* From Ref. 3 */
+	{  0x0400008d, "Schneider Rundfunkwerke AG" },                      /* From Ref. 3 */
+	{  0x0400008e, "Digitronic computersysteme gmbh" },                 /* From Ref. 3 */
+	{  0x0400008f, "DeTeWe - Deutsche Telephonwerke AG &Co" },          /* From Ref. 3 */
+	{  0x04000082, "SITK Institut fr Telekommunikation GmbH & Co KG" },/* From Ref. 3 */
+	{  0x0900003D, "Equivalence (OpenH323)" },                          /* From captures */
+	{  0x20000081, "Mediatrix Telecom" },                               /* From Ref. 1 */
+	{  0x3d000310, "Swissvoice" },
+	{  0x3d000311, "Swissvoice" },
+	{  0x3d000312, "Swissvoice" },
+	{  0x3d000313, "Swissvoice" },
+	{  0x3d000314, "Swissvoice" },
+	{  0x3d000315, "Swissvoice" },
+	{  0x3d000316, "Swissvoice" },
+	{  0x3d000317, "Swissvoice" },
+	{  0x3d000318, "Swissvoice" },
+	{  0x3d000319, "Swissvoice" },
+	{  0x3d00031a, "Swissvoice" },
+	{  0x3d00031b, "Swissvoice" },
+	{  0x3d00031c, "Swissvoice" },
+	{  0x3d00031d, "Swissvoice" },
+	{  0x3d00031e, "Swissvoice" },
+	{  0x3d00031f, "Swissvoice" },
+	{  0x82000002, "Ericsson" },                                        /* From captures */
+	{  0xa5000001, "Ericsson" },                                        /* From captures */
+	{  0xb4000000, "British Telecommunications" },                      /* From Ref. 2 */
+	{  0xb4000100, "British Telecommunications" },                      /* From Ref. 2 */
+	{  0xb4000200, "British Telecommunications" },                      /* From Ref. 2 */
+	{  0xb4000300, "British Telecommunications" },                      /* From Ref. 2 */
+	{  0xb4000400, "British Telecommunications" },                      /* From Ref. 2 */
+	{  0xb4000500, "British Telecommunications" },                      /* From Ref. 2 */
+	{  0xb4000600, "British Telecommunications" },                      /* From Ref. 2 */
+	{  0xb4000700, "British Telecommunications" },                      /* From Ref. 2 */
+	{  0xb4000800, "British Telecommunications" },                      /* From Ref. 2 */
+	{  0xb4000900, "British Telecommunications" },                      /* From Ref. 2 */
+	{  0xb4000a00, "British Telecommunications" },                      /* From Ref. 2 */
+	{  0xb4000b00, "British Telecommunications" },                      /* From Ref. 2 */
+	{  0xb4000c00, "British Telecommunications" },                      /* From Ref. 2 */
+	{  0xb4000d00, "British Telecommunications" },                      /* From Ref. 2 */
+	{  0xb4000e00, "British Telecommunications" },                      /* From Ref. 2 */
+	{  0xb4000f00, "British Telecommunications" },                      /* From Ref. 2 */
+	{  0xb4001000, "GPT Video Systems" },                               /* From Ref. 2 */
+	{  0xb4001100, "GPT Video Systems" },                               /* From Ref. 2 */
+	{  0xb4001200, "GPT Video Systems" },                               /* From Ref. 2 */
+	{  0xb4001300, "GPT Video Systems" },                               /* From Ref. 2 */
+	{  0xb4001400, "GPT Video Systems" },                               /* From Ref. 2 */
+	{  0xb4001500, "GPT Video Systems" },                               /* From Ref. 2 */
+	{  0xb4001600, "GPT Video Systems" },                               /* From Ref. 2 */
+	{  0xb4001700, "GPT Video Systems" },                               /* From Ref. 2 */
+	{  0xb4001800, "GPT Video Systems" },                               /* From Ref. 2 */
+	{  0xb4001900, "GPT Video Systems" },                               /* From Ref. 2 */
+	{  0xb4001a00, "GPT Video Systems" },                               /* From Ref. 2 */
+	{  0xb4001b00, "GPT Video Systems" },                               /* From Ref. 2 */
+	{  0xb4001c00, "GPT Video Systems" },                               /* From Ref. 2 */
+	{  0xb4001d00, "GPT Video Systems" },                               /* From Ref. 2 */
+	{  0xb4001e00, "GPT Video Systems" },                               /* From Ref. 2 */
+	{  0xb4001f00, "GPT Video Systems" },                               /* From Ref. 2 */
+	{  0xb4002000, "Marconi Communications" },                          /* From Ref. 2 */ 
+	{  0xb4002100, "Indigo Active Vision Systems" },                    /* From Ref. 2 */ 
+	{  0xb4002200, "LiveWorks Limited" },                               /* From Ref. 2 */ 
+	{  0xb4002300, "ATL Telecom Limited" },                             /* From Ref. 2 */ 
+	{  0xb4002a00, "Network Alchemy Limited" },                         /* From Ref. 2 */ 
+	{  0xb4004200, "Motion Media Technology" },                         /* From Ref. 2 */ 
+	{  0xb4004400, "Data Connection" },                                 /* From Ref. 2 */ 
+	{  0xb4004500, "Westbay Engineers" },                               /* From Ref. 2 */ 
+	{  0xb4004600, "FarSite Communications" },                               /* From Ref. 2 */ 
+	{  0xb4004900, "ImageCom" },                                        /* From Ref. 2 */ 
+	{  0xb4004d00, "Madge Networks" },                                  /* From Ref. 2 */ 
+	{  0xb4005200, "Ridgeway Systems and Software" },                   /* From Ref. 2 */ 
+	{  0xb4005300, "SpliceCom" },                                       /* From Ref. 2 */ 
+	{  0xb4005400, "TeleWare" },                                        /* From Ref. 2 */ 
+	{  0xb4005600, "Vegastream" },                                      /* From Ref. 2 */ 
+	{  0xb4006600, "Westell" },                                         /* From Ref. 2 */ 
+	{  0xb4006900, "ISDN Communications" },                             /* From Ref. 2 */ 
+	{  0xb400c000, "Codian" },                                          /* From Ref. 2 */ 
+
+	{  0xb5000000, "Compression Labs" },                                /* From Ref. 1 */
+	{  0xb5000001, "PictureTel" },                                      /* From Ref. 1 */
+	{  0xb5000002, "Compression Labs" },                                /* From Ref. 1 */
+	{  0xb5000003, "VTEL" },                                            /* From Ref. 1 */
+	{  0xb5000005, "ERIS" },                                            /* From Ref. 1 */
+	{  0xb5000007, "AT&T Worldworx" },                                  /* From Ref. 1 */
+	{  0xb5000009, "VideoServer" },                                     /* From Ref. 1 */
+	{  0xb500000b, "3Com Corporation" },                                /* From Ref. 1 */
+	{  0xb500000c, "Clarent Corporation" },                             /* From Ref. 1 */
+	{  0xb500000d, "Genesys Telecommunications Labs Inc" },             /* From Ref. 1 */
+	{  0xb500000e, "C-Phone Corporation." },                            /* From Ref. 1 */
+	{  0xb500000f, "Science Dynamics Corporation" },                    /* From Ref. 1 */
+	{  0xb5000010, "AT&T Starpoint" },                                  /* From Ref. 1 */
+	{  0xb5000011, "Netscape Conference" },                             /* From Ref. 1 */
+	{  0xb5000012, "Cisco" },                                           /* From Ref. 1 */
+	{  0xb5000013, "Cirilium, Inc." },                                  /* From Ref. 1 */
+	{  0xb5000014, "Ascend Communications, Inc." },                     /* From Ref. 1 */
+	{  0xb5000015, "RADVision, Inc." },                                 /* From Ref. 1 */
+	{  0xb5000016, "Objective Communications" },                        /* From Ref. 1 */
+	{  0xb5000017, "VocalTec Communications, Inc." },                   /* From Ref. 1 */
+	{  0xb5000018, "Serome Technology, Inc." },                         /* From Ref. 1 */
+	{  0xb5000019, "Aspect Communications" },                           /* From Ref. 1 */
+	{  0xb500001a, "Cintech Tele-Management" },                         /* From Ref. 1 */
+	{  0xb500001b, "Philips Video Conferencing Systems" },              /* From Ref. 1 */
+	{  0xb500001c, "Vertical Networks, Inc." },                         /* From Ref. 1 */
+	{  0xb500001d, "Syndeo Corp." },                                    /* From Ref. 1 */
+	{  0xb500001e, "Telxon Corporation" },                              /* From Ref. 1 */
+	{  0xb500001f, "Network Equipment Technologies" },                  /* From Ref. 1 */
+	{  0xb5000020, "Pagoo, Inc." },                                     /* From Ref. 1 */
+	{  0xb5000021, "General Dynamics" },                                /* From Ref. 1 */
+	{  0xb5000022, "Vanguard Managed Solutions" },                      /* From Ref. 1 */
+	{  0xb5000023, "TeleStream Technologies, Inc." },                   /* From Ref. 1 */
+	{  0xb5000024, "Spirent Communications" },                          /* From Ref. 1 */
+	{  0xb5000025, "CrystalVoice Communications" },                     /* From Ref. 1 */
+	{  0xb5000026, "Xiph.org" },                                        /* From Ref. 1 */
+	{  0xb5000027, "NACT Telecommunications" },                         /* From Ref. 1 */
+	{  0xb5000028, "AudioCodes, Inc." },                                /* From Ref. 1 */
+	{  0xb5000120, "AT&T - GBCS" },                                     /* From Ref. 1 */
+	{  0xb5000168, "Leadtek Research Inc." },                           /* From Ref. 1 */
+	{  0xb5000247, "Lucent Technologies" },                             /* From Ref. 1 */
+	{  0xb500029a, "Symbol Technologies Inc." },                        /* From Ref. 1 */
+	{  0xb5000378, "StarVox, Inc." },                                   /* From Ref. 1 */
+	{  0xb50003f7, "Inari Inc." },                                      /* From Ref. 1 */
+	{  0xb5000727, "Quintum Technologies, Inc." },                      /* From Ref. 1 */
+	{  0xb5000918, "Netrix Corporation" },                              /* From Ref. 1 */
+	{  0xb500101e, "SysMaster Corporation" },                           /* From Ref. 1 */
+	{  0xb5001a1a, "Alpha Telecom, Inc. U.S.A." },                      /* From Ref. 1 */
+	{  0xb5002331, "ViaVideo" },                                        /* From Ref. 1 */
+	{  0xb500301c, "Congruency, Inc." },                                /* From Ref. 1 */
+	{  0xb5003039, "MiBridge Inc." },                                   /* From Ref. 1 */
+	{  0xb5003838, "8x8 Inc." },                                        /* From Ref. 1 */
+	{  0xb5004147, "Agere Systems" },                                   /* From Ref. 1 */
+	{  0xb5004153, "Artisoft Inc." },                                   /* From Ref. 1 */
+	{  0xb5004156, "Avaya" },                                           /* From Ref. 1 */
+	{  0xb5004242, "IBM." },                                            /* From Ref. 1 */
+	{  0xb5004257, "StreamComm" },                                      /* From Ref. 1 */
+
+	{  0xb5004c54, "Lucent Technologies" },                             /* From Ref. 1 */
+	{  0xb5004d47, "MediaGate" },                                       /* From Ref. 1 */
+	{  0xb5004e54, "Nortel Networks" },                                 /* From Ref. 1 */
+
+	{  0xb5005243, "Siemens Business Communication Systems" },          /* From Ref. 1 */
+	{  0xb500534c, "Microsoft" },                                       /* From Ref. 1 */
+
+	{  0xb500600d, "Lucent Technologies" },                             /* From Ref. 1 */
+
+	{  0xb5008080, "Intel" },                                           /* From Ref. 1 */
+	{  0xa5000001, "Ericsson" },                                        /* From captures */
+	{  0, NULL }
+};
+/* Ref 1 http://www.delta-info.com/Protocol_Test/Manufacturer_codes.html 	*/
+/* Ref 2 http://www.cix.co.uk/~bpechey/H221/h221code.htm			*/
+/* Ref 3 http://www.regtp.de/reg_tele/start/in_05-06-03-11-00_m/index.html 	*/
+
diff -urN ethereal-0.10.6/epan/t35.h ethereal-0.10.7/epan/t35.h
--- ethereal-0.10.6/epan/t35.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/t35.h	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,35 @@
+/* t35.h
+ * T.35 and H.221 tables
+ * 2003  Tomas Kukosa
+ *
+ * $Id: t35.h 12130 2004-09-29 00:52:45Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef __T35_H__
+#define __T35_H__ 
+
+#include "epan/value_string.h"
+
+extern const value_string T35CountryCode_vals[];
+extern const value_string T35Extension_vals[];
+extern const value_string H221ManufacturerCode_vals[];
+
+#endif  /* __T35_H__ */
diff -urN ethereal-0.10.6/epan/tap.c ethereal-0.10.7/epan/tap.c
--- ethereal-0.10.6/epan/tap.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/tap.c	2004-10-20 17:35:04.000000000 -0500
@@ -0,0 +1,432 @@
+/* tap.c
+ * packet tap interface   2002 Ronnie Sahlberg
+ *
+ * $Id: tap.c 12128 2004-09-29 00:06:36Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
+
+#include <string.h>
+#include "epan/packet_info.h"
+#include "epan/dfilter/dfilter.h"
+#include <epan/tap.h>
+
+static gboolean tapping_is_active=FALSE;
+int num_tap_filters=0;
+
+typedef struct _tap_dissector_t {
+	struct _tap_dissector_t *next;
+	char *name;
+} tap_dissector_t;
+static tap_dissector_t *tap_dissector_list=NULL;
+
+/*
+ * This is the list of free and used packets queued for a tap.
+ * It is implemented here explicitely instead of using GLib objects
+ * in order to be as fast as possible as we need to build and tear down the
+ * queued list at least once for each packet we see, thus we must be able
+ * to build and tear it down as fast as possible.
+ */
+typedef struct _tap_packet_t {
+	struct _tap_packet_t *next;
+	int tap_id;
+	packet_info *pinfo;
+	void *tap_specific_data;
+} tap_packet_t;
+static tap_packet_t *tap_packet_list_free=NULL;
+static tap_packet_t *tap_packet_list_queue=NULL;
+#define TAP_PACKET_QUEUE_LEN 100
+
+
+typedef struct _tap_listener_t {
+	struct _tap_listener_t *next;
+	int tap_id;
+	int needs_redraw;
+	dfilter_t *code;
+	void *tapdata;
+	tap_reset_cb reset;
+	tap_packet_cb packet;
+	tap_draw_cb draw;
+} tap_listener_t;
+static volatile tap_listener_t *tap_listener_queue=NULL;
+
+/* **********************************************************************
+ * Init routine only called from epan at application startup
+ * ********************************************************************** */
+/* This function is called once when ethereal starts up and is used
+   to init any data structures we may need later.
+*/
+void
+tap_init(void)
+{
+	int i;
+	tap_packet_t *tpt;
+
+	for(i=0;i<TAP_PACKET_QUEUE_LEN;i++){
+		tpt=g_malloc(sizeof(tap_packet_t));
+		tpt->next=tap_packet_list_free;
+		tap_packet_list_free=tpt;
+	}
+	tap_packet_list_queue=NULL;
+
+	return;
+}
+
+
+
+/* **********************************************************************
+ * Functions called from dissector when made tappable
+ * ********************************************************************** */
+/* the following two functions are used from dissectors to
+   1, register the ability to tap packets from this subdissector
+   2, push packets encountered by the subdissector to anyone tapping
+*/
+
+/* This function registers that a dissector has the packet tap ability
+   available.  The name parameter is the name of this tap and extensions can
+   use open_tap(char *name,... to specify that it wants to receive packets/
+   events from this tap.
+
+   This function is only to be called once, when the dissector initializes.
+
+   The return value from this call is later used as a parameter to the
+   tap_packet(unsinged int *tap_id,...
+   call so that the tap subsystem knows to which tap point this tapped
+   packet is associated.
+*/  
+int
+register_tap(char *name)
+{
+	tap_dissector_t *td, *tdl;
+	int i;
+
+	td=g_malloc(sizeof(tap_dissector_t));
+	td->next=NULL;
+	td->name = g_strdup(name);
+
+	if(!tap_dissector_list){
+		tap_dissector_list=td;
+		i=1;
+	} else {
+		for(i=2,tdl=tap_dissector_list;tdl->next;i++,tdl=tdl->next)
+			;
+		tdl->next=td;
+	}
+	return i;
+}
+
+
+/* Everytime the dissector has finished dissecting a packet (and all
+   subdissectors have returned) and if the dissector has been made "tappable"
+   it will push some data to everyone tapping this layer by a call
+   to tap_queue_packet().
+   The first parameter is the tap_id returned by the register_tap()
+   call for this dissector (so the tap system can keep track of who it came
+   from and who is listening to it)
+   The second is the packet_info structure which many tap readers will find
+   interesting.
+   The third argument is specific to each tap point or NULL if no additional 
+   data is available to this tap.  A tap point in say IP will probably want to
+   push the IP header structure here. Same thing for TCP and ONCRPC.
+  
+   The pinfo and the specific pointer are what is supplied to every listener
+   in the read_callback() call made to every one currently listening to this
+   tap.
+ 
+   The tap reader is responsible to know how to parse any structure pointed 
+   to by the tap specific data pointer.
+*/
+void 
+tap_queue_packet(int tap_id, packet_info *pinfo, void *tap_specific_data)
+{
+	tap_packet_t *tpt;
+
+	if(!tapping_is_active){
+		return;
+	}
+
+	/* get a free tap_packet structure, this is CHEAP */
+	tpt=tap_packet_list_free;
+	tap_packet_list_free=tpt->next;
+	tpt->next=tap_packet_list_queue;
+	tap_packet_list_queue=tpt;
+
+	tpt->tap_id=tap_id;
+	tpt->pinfo=pinfo;
+	tpt->tap_specific_data=tap_specific_data;
+
+}
+
+
+
+
+
+/* **********************************************************************
+ * Functions used by file.c to drive the tap subsystem
+ * ********************************************************************** */
+/* This function is used to delete/initialize the tap queue and prime an
+   epan_dissect_t with all the filters for tap listeners.
+   To free the tap queue, we just prepend the used queue to the free queue.
+*/
+void
+tap_queue_init(epan_dissect_t *edt)
+{
+	tap_packet_t *tpt;
+	tap_listener_t *tl;
+
+	/* nothing to do, just return */
+	if(!tap_listener_queue){
+		return;
+	}
+
+	tapping_is_active=TRUE;
+	tpt=tap_packet_list_queue;
+	if(tpt){
+		for(;tpt->next;tpt=tpt->next)
+			;
+
+		tpt->next=tap_packet_list_free;
+		tap_packet_list_free=tap_packet_list_queue;
+		tap_packet_list_queue=NULL;
+	}
+
+	/* loop over all tap listeners and build the list of all
+	   interesting hf_fields */
+	for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){
+		if(tl->code){
+			epan_dissect_prime_dfilter(edt, tl->code);
+		}
+	}
+}
+
+/* this function is called after a packet has been fully dissected to push the tapped
+   data to all extensions that has callbacks registered.
+*/
+void 
+tap_push_tapped_queue(epan_dissect_t *edt)
+{
+	tap_packet_t *tp;
+	tap_listener_t *tl;
+
+	/* nothing to do, just return */
+	if(!tapping_is_active){
+		return;
+	}
+
+	tapping_is_active=FALSE;
+
+	/* nothing to do, just return */
+	if(!tap_packet_list_queue){
+		return;
+ 	}
+
+	/* loop over all tap listeners and call the listener callback
+	   for all packets that match the filter. */
+	for(tp=tap_packet_list_queue;tp;tp=tp->next){
+		for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){
+			if(tp->tap_id==tl->tap_id){
+				int passed=TRUE;
+				if(tl->code){
+					passed=dfilter_apply_edt(tl->code, edt);
+				}
+				if(passed && tl->packet){
+					tl->needs_redraw|=tl->packet(tl->tapdata, tp->pinfo, edt, tp->tap_specific_data);
+				}
+			}
+		}
+	}
+}
+
+/* This function is called when we need to reset all tap listeners, for example
+   when we open/start a new capture or if we need to rescan the packet list.
+*/
+void
+reset_tap_listeners(void)
+{
+	tap_listener_t *tl;
+
+	for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){
+		if(tl->reset){
+			tl->reset(tl->tapdata);
+		}
+		tl->needs_redraw=1;
+	}
+
+}
+
+
+/* This function is called when we need to redraw all tap listeners, for example
+   when we open/start a new capture or if we need to rescan the packet list.
+   this one should be called from a low priority thread say once every 3 seconds
+ 
+   If draw_all is true, redraw all aplications regardless if they have 
+   changed or not.
+*/
+void
+draw_tap_listeners(gboolean draw_all)
+{
+	tap_listener_t *tl;
+
+	for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){
+		if(tl->needs_redraw || draw_all){
+			if(tl->draw){
+				tl->draw(tl->tapdata);
+			}
+		}
+		tl->needs_redraw=0;
+	}
+}
+
+
+
+/* **********************************************************************
+ * Functions used by tap to
+ * 1, register that a really simple extension is available for use by
+ *    ethereal. 
+ * 2, start tapping from a subdissector 
+ * 3, close an already open tap
+ * ********************************************************************** */
+/* this function will return the tap_id for the specific protocol tap
+   or 0 if no such tap was found.
+ */
+int 
+find_tap_id(char *name)
+{
+	tap_dissector_t *td;
+	int i;
+
+	for(i=1,td=tap_dissector_list;td;i++,td=td->next) {
+		if(!strcmp(td->name,name)){
+			return i;
+		}
+	}
+	return 0;
+}
+
+/* this function attaches the tap_listener to the named tap.
+ * function returns :
+ *     NULL: ok.
+ * non-NULL: error, return value points to GString containing error
+ *           message.
+ */
+GString *
+register_tap_listener(char *tapname, void *tapdata, char *fstring, tap_reset_cb reset, tap_packet_cb packet, tap_draw_cb draw)
+{
+	tap_listener_t *tl;
+	int tap_id;
+	GString *error_string;
+
+	tap_id=find_tap_id(tapname);
+	if(!tap_id){
+		error_string = g_string_new("");
+		g_string_sprintf(error_string, "Tap %s not found", tapname);
+		return error_string;
+	}
+
+	tl=g_malloc(sizeof(tap_listener_t));
+	tl->code=NULL;
+	tl->needs_redraw=1;
+	if(fstring){
+		if(!dfilter_compile(fstring, &tl->code)){
+			error_string = g_string_new("");
+			g_string_sprintf(error_string,
+			    "Filter \"%s\" is invalid - %s",
+			    fstring, dfilter_error_msg);
+			g_free(tl);
+			return error_string;
+		} else {
+			num_tap_filters++;
+		}
+	}
+
+	tl->tap_id=tap_id;
+	tl->tapdata=tapdata;
+	tl->reset=reset;
+	tl->packet=packet;
+	tl->draw=draw;
+	tl->next=(tap_listener_t *)tap_listener_queue;
+
+	tap_listener_queue=tl;
+
+	return NULL;
+}
+
+/* this function removes a tap listener
+ */
+void
+remove_tap_listener(void *tapdata)
+{
+	tap_listener_t *tl=NULL,*tl2;
+
+	if(!tap_listener_queue){
+		return;
+	}
+
+	if(tap_listener_queue->tapdata==tapdata){
+		tl=(tap_listener_t *)tap_listener_queue;
+		tap_listener_queue=tap_listener_queue->next;
+	} else {
+		for(tl2=(tap_listener_t *)tap_listener_queue;tl2->next;tl2=tl2->next){
+			if(tl2->next->tapdata==tapdata){
+				tl=tl2->next;
+				tl2->next=tl2->next->next;
+				break;
+			}
+			
+		}
+	}
+
+	if(tl){
+		if(tl->code){
+			dfilter_free(tl->code);
+			num_tap_filters--;
+		}
+		g_free(tl);
+	}
+
+	return;
+}
+
+/*
+ * Return TRUE if we have tap listeners, FALSE otherwise.
+ * Checking "num_tap_filters" isn't the right way to check whether we need
+ * to do any dissection in order to run taps, as not all taps necessarily
+ * have filters, and "num_tap_filters" is the number of tap filters, not
+ * the number of tap listeners; it's only the right way to check whether
+ * we need to build a protocol tree when doing dissection.
+ */
+gboolean
+have_tap_listeners(void)
+{
+	return tap_listener_queue != NULL;
+}
diff -urN ethereal-0.10.6/epan/tap.h ethereal-0.10.7/epan/tap.h
--- ethereal-0.10.6/epan/tap.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/tap.h	2004-10-20 17:35:04.000000000 -0500
@@ -0,0 +1,54 @@
+/* tap.h
+ * packet tap interface   2002 Ronnie Sahlberg
+ *
+ * $Id: tap.h 12128 2004-09-29 00:06:36Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef _TAP_H_
+#define _TAP_H_
+
+#include "epan/epan.h"
+
+/* With MSVC and a libethereal.dll, we need a 
+ * special declaration of num_tap_filters.
+ */
+ETH_VAR_IMPORT int num_tap_filters;
+
+typedef void (*tap_reset_cb)(void *tapdata);
+typedef int  (*tap_packet_cb)(void *tapdata, packet_info *pinfo, epan_dissect_t *edt, void *data);
+typedef void (*tap_draw_cb)(void *tapdata);
+
+
+extern void tap_init(void);
+extern int register_tap(char *name);
+extern int find_tap_id(char *name);
+extern void tap_queue_packet(int tap_id, packet_info *pinfo, void *tap_specific_data);
+extern void tap_queue_init(epan_dissect_t *edt);
+extern void tap_push_tapped_queue(epan_dissect_t *edt);
+extern void reset_tap_listeners(void);
+extern void draw_tap_listeners(gboolean draw_all);
+extern GString *register_tap_listener(char *tapname, void *tapdata,
+    char *fstring, tap_reset_cb tap_reset, tap_packet_cb tap_packet,
+    tap_draw_cb tap_draw);
+extern void remove_tap_listener(void *tapdata);
+extern gboolean have_tap_listeners(void);
+
+#endif
diff -urN ethereal-0.10.6/epan/timestamp.c ethereal-0.10.7/epan/timestamp.c
--- ethereal-0.10.6/epan/timestamp.c	2004-08-12 17:42:31.000000000 -0500
+++ ethereal-0.10.7/epan/timestamp.c	2004-10-20 17:35:03.000000000 -0500
@@ -1,7 +1,7 @@
 /* timestamp.c
  * Routines for timestamp type setting.
  *
- * $Id: timestamp.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: timestamp.c 11869 2004-09-01 07:07:23Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
diff -urN ethereal-0.10.6/epan/tvbuff.c ethereal-0.10.7/epan/tvbuff.c
--- ethereal-0.10.6/epan/tvbuff.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/tvbuff.c	2004-10-20 17:35:04.000000000 -0500
@@ -9,7 +9,7 @@
  * 		the data of a backing tvbuff, or can be a composite of
  * 		other tvbuffs.
  *
- * $Id: tvbuff.c 11581 2004-08-02 18:58:19Z guy $
+ * $Id: tvbuff.c 11796 2004-08-22 00:31:58Z guy $
  *
  * Copyright (c) 2000 by Gilbert Ramirez <gram@alumni.rice.edu>
  *
@@ -1052,6 +1052,15 @@
 	return pntohl(ptr);
 }
 
+guint64
+tvb_get_ntoh64(tvbuff_t *tvb, gint offset)
+{
+	const guint8* ptr;
+
+	ptr = ensure_contiguous(tvb, offset, sizeof(guint64));
+	return pntoh64(ptr);
+}
+
 /*
  * Stuff for IEEE float handling on platforms that don't have IEEE
  * format as the native floating-point format.
@@ -1282,6 +1291,15 @@
 	return pletohl(ptr);
 }
 
+guint64
+tvb_get_letoh64(tvbuff_t *tvb, gint offset)
+{
+	const guint8* ptr;
+
+	ptr = ensure_contiguous(tvb, offset, sizeof(guint64));
+	return pletoh64(ptr);
+}
+
 /*
  * Fetches an IEEE single-precision floating-point number, in
  * little-endian form, and returns a "float".
diff -urN ethereal-0.10.6/epan/tvbuff.h ethereal-0.10.7/epan/tvbuff.h
--- ethereal-0.10.6/epan/tvbuff.h	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/epan/tvbuff.h	2004-10-20 17:35:04.000000000 -0500
@@ -9,7 +9,7 @@
  * 		the data of a backing tvbuff, or can be a composite of
  * 		other tvbuffs.
  *
- * $Id: tvbuff.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: tvbuff.h 11796 2004-08-22 00:31:58Z guy $
  *
  * Copyright (c) 2000 by Gilbert Ramirez <gram@alumni.rice.edu>
  *
@@ -298,12 +298,14 @@
 extern guint16 tvb_get_ntohs(tvbuff_t*, gint offset);
 extern guint32 tvb_get_ntoh24(tvbuff_t*, gint offset);
 extern guint32 tvb_get_ntohl(tvbuff_t*, gint offset);
+extern guint64 tvb_get_ntoh64(tvbuff_t*, gint offset);
 extern gfloat tvb_get_ntohieee_float(tvbuff_t*, gint offset);
 extern gdouble tvb_get_ntohieee_double(tvbuff_t*, gint offset);
 
 extern guint16 tvb_get_letohs(tvbuff_t*, gint offset);
 extern guint32 tvb_get_letoh24(tvbuff_t*, gint offset);
 extern guint32 tvb_get_letohl(tvbuff_t*, gint offset);
+extern guint64 tvb_get_letoh64(tvbuff_t*, gint offset);
 extern gfloat tvb_get_letohieee_float(tvbuff_t*, gint offset);
 extern gdouble tvb_get_letohieee_double(tvbuff_t*, gint offset);
 
diff -urN ethereal-0.10.6/epan/xdlc.c ethereal-0.10.7/epan/xdlc.c
--- ethereal-0.10.6/epan/xdlc.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/xdlc.c	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,380 @@
+/* xdlc.c
+ * Routines for use by various SDLC-derived protocols, such as HDLC
+ * and its derivatives LAPB, IEEE 802.2 LLC, etc..
+ *
+ * $Id: xdlc.c 12127 2004-09-28 23:48:02Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+#include <string.h>
+
+#include <glib.h>
+#include <epan/packet.h>
+#include <epan/xdlc.h>
+
+const value_string ftype_vals[] = {
+    { XDLC_I, "Information frame" },
+    { XDLC_S, "Supervisory frame" },
+    { XDLC_U, "Unnumbered frame" },
+    { 0,      NULL }
+};
+
+const value_string stype_vals[] = {
+    { XDLC_RR>>2,   "Receiver ready" },
+    { XDLC_RNR>>2,  "Receiver not ready" },
+    { XDLC_REJ>>2,  "Reject" },
+    { XDLC_SREJ>>2, "Selective reject" },
+    { 0,            NULL }
+};
+
+static const value_string modifier_short_vals_cmd[] = {
+    { XDLC_UI,    "UI" },
+    { XDLC_UP,    "UP" },
+    { XDLC_DISC,  "DISC" },
+    { XDLC_UA,    "UA" },
+    { XDLC_SNRM,  "SNRM" },
+    { XDLC_SNRME, "SNRME" },
+    { XDLC_TEST,  "TEST" },
+    { XDLC_SIM,   "SIM" },
+    { XDLC_FRMR,  "FRMR" },
+    { XDLC_CFGR,  "CFGR" },
+    { XDLC_SARM,  "SARM" },
+    { XDLC_SABM,  "SABM" },
+    { XDLC_SARME, "SARME" },
+    { XDLC_SABME, "SABME" },
+    { XDLC_RESET, "RESET" },
+    { XDLC_XID,   "XID" },
+    { XDLC_SNRME, "SNRME" },
+    { XDLC_BCN,   "BCN" },
+    { 0,          NULL }
+};
+
+const value_string modifier_vals_cmd[] = {
+    { XDLC_UI>>2,    "Unnumbered Information" },
+    { XDLC_UP>>2,    "Unnumbered Poll" },
+    { XDLC_DISC>>2,  "Disconnect" },
+    { XDLC_UA>>2,    "Unnumbered Acknowledge" },
+    { XDLC_SNRM>>2,  "Set Normal Response Mode" },
+    { XDLC_TEST>>2,  "Test" },
+    { XDLC_SIM>>2,   "Set Initialization Mode" },
+    { XDLC_FRMR>>2,  "Frame reject" },
+    { XDLC_CFGR>>2,  "Configure" },
+    { XDLC_SARM>>2,  "Set Asynchronous Response Mode" },
+    { XDLC_SABM>>2,  "Set Asynchronous Balanced Mode" },
+    { XDLC_SARME>>2, "Set Asynchronous Response Mode Extended" },
+    { XDLC_SABME>>2, "Set Asynchronous Balanced Mode Extended" },
+    { XDLC_RESET>>2, "Reset" },
+    { XDLC_XID>>2,   "Exchange identification" },
+    { XDLC_SNRME>>2, "Set Normal Response Mode Extended" },
+    { XDLC_BCN>>2,   "Beacon" },
+    { 0,             NULL }
+};
+
+static const value_string modifier_short_vals_resp[] = {
+    { XDLC_UI,    "UI" },
+    { XDLC_UP,    "UP" },
+    { XDLC_RD,    "RD" },
+    { XDLC_UA,    "UA" },
+    { XDLC_SNRM,  "SNRM" },
+    { XDLC_TEST,  "TEST" },
+    { XDLC_RIM,   "RIM" },
+    { XDLC_FRMR,  "FRMR" },
+    { XDLC_CFGR,  "CFGR" },
+    { XDLC_DM,    "DM" },
+    { XDLC_SABM,  "SABM" },
+    { XDLC_SARME, "SARME" },
+    { XDLC_SABME, "SABME" },
+    { XDLC_RESET, "RESET" },
+    { XDLC_XID,   "XID" },
+    { XDLC_SNRME, "SNRME" },
+    { XDLC_BCN,   "BCN" },
+    { 0,          NULL }
+};
+
+const value_string modifier_vals_resp[] = {
+    { XDLC_UI>>2,    "Unnumbered Information" },
+    { XDLC_UP>>2,    "Unnumbered Poll" },
+    { XDLC_RD>>2,    "Request Disconnect" },
+    { XDLC_UA>>2,    "Unnumbered Acknowledge" },
+    { XDLC_SNRM>>2,  "Set Normal Response Mode" },
+    { XDLC_TEST>>2,  "Test" },
+    { XDLC_RIM>>2,   "Request Initialization Mode" },
+    { XDLC_FRMR>>2,  "Frame reject" },
+    { XDLC_CFGR>>2,  "Configure" },
+    { XDLC_DM>>2,    "Disconnected mode" },
+    { XDLC_SABM>>2,  "Set Asynchronous Balanced Mode" },
+    { XDLC_SARME>>2, "Set Asynchronous Response Mode Extended" },
+    { XDLC_SABME>>2, "Set Asynchronous Balanced Mode Extended" },
+    { XDLC_RESET>>2, "Reset" },
+    { XDLC_XID>>2,   "Exchange identification" },
+    { XDLC_SNRME>>2, "Set Normal Response Mode Extended" },
+    { XDLC_BCN>>2,   "Beacon" },
+    { 0,             NULL }
+};
+
+int
+get_xdlc_control(const guchar *pd, int offset, int is_extended)
+{
+    guint16 control;
+
+    switch (pd[offset] & 0x03) {
+
+    case XDLC_S:
+    default:
+        /*
+	 * Supervisory or Information frame.
+	 */
+	if (is_extended)
+		control = pletohs(&pd[offset]);
+	else
+		control = pd[offset];
+	break;
+
+    case XDLC_U:
+	/*
+	 * Unnumbered frame.
+	 *
+	 * XXX - is this two octets, with a P/F bit, in HDLC extended
+	 * operation?  It's one octet in LLC, even though the control
+	 * field of I and S frames is a 2-byte extended-operation field
+	 * in LLC.  Given that there are no sequence numbers in the
+	 * control field of a U frame, there doesn't appear to be any
+	 * need for it to be 2 bytes in extended operation.
+	 */
+	control = pd[offset];
+	break;
+    }
+    return control;
+}
+
+int
+dissect_xdlc_control(tvbuff_t *tvb, int offset, packet_info *pinfo,
+  proto_tree *xdlc_tree, int hf_xdlc_control, gint ett_xdlc_control,
+  const xdlc_cf_items *cf_items_nonext, const xdlc_cf_items *cf_items_ext,
+  const value_string *u_modifier_short_vals_cmd,
+  const value_string *u_modifier_short_vals_resp, int is_response,
+  int is_extended, int append_info)
+{
+    guint16 control;
+    int control_len;
+    const xdlc_cf_items *cf_items;
+    char *control_format;
+    guint16 poll_final;
+    char info[80];
+    proto_tree *tc, *control_tree;
+    gchar *frame_type = NULL;
+    gchar *modifier;
+
+    switch (tvb_get_guint8(tvb, offset) & 0x03) {
+
+    case XDLC_S:
+	if (is_extended) {
+	    control = tvb_get_letohs(tvb, offset);
+	    control_len = 2;
+	    cf_items = cf_items_ext;
+	    control_format = "Control field: %s (0x%04X)";
+	} else {
+	    control = tvb_get_guint8(tvb, offset);
+	    control_len = 1;
+	    cf_items = cf_items_nonext;
+	    control_format = "Control field: %s (0x%02X)";
+	}
+        /*
+	 * Supervisory frame.
+	 */
+	switch (control & XDLC_S_FTYPE_MASK) {
+	case XDLC_RR:
+	    frame_type = "RR";
+	    break;
+
+	case XDLC_RNR:
+	    frame_type = "RNR";
+	    break;
+
+	case XDLC_REJ:
+	    frame_type = "REJ";
+	    break;
+
+	case XDLC_SREJ:
+	    frame_type = "SREJ";
+	    break;
+	}
+	if (is_extended) {
+	    poll_final = (control & XDLC_P_F_EXT);
+	    sprintf(info, "S%s, func=%s, N(R)=%u",
+		 	(poll_final ?
+		 	    (is_response ? " F" : " P") :
+		 	    ""),
+			frame_type,
+			(control & XDLC_N_R_EXT_MASK) >> XDLC_N_R_EXT_SHIFT);
+	} else {
+	    poll_final = (control & XDLC_P_F);
+	    sprintf(info, "S%s, func=%s, N(R)=%u",
+		 	(poll_final ?
+		 	    (is_response ? " F" : " P") :
+		 	    ""),
+		 	frame_type,
+			(control & XDLC_N_R_MASK) >> XDLC_N_R_SHIFT);
+	}
+	if (check_col(pinfo->cinfo, COL_INFO)) {
+	    if (append_info) {
+	    	col_append_str(pinfo->cinfo, COL_INFO, ", ");
+		col_append_str(pinfo->cinfo, COL_INFO, info);
+	    } else
+		col_add_str(pinfo->cinfo, COL_INFO, info);
+	}
+	if (xdlc_tree) {
+	    tc = proto_tree_add_uint_format(xdlc_tree, hf_xdlc_control, tvb,
+		offset, control_len, control, control_format, info, control);
+	    control_tree = proto_item_add_subtree(tc, ett_xdlc_control);
+	    proto_tree_add_uint(control_tree, *cf_items->hf_xdlc_n_r,
+		tvb, offset, control_len, control);
+	    if (poll_final) {
+		proto_tree_add_boolean(control_tree,
+			(is_response ? *cf_items->hf_xdlc_f :
+				       *cf_items->hf_xdlc_p),
+			tvb, offset, control_len, control);
+	    }
+	    proto_tree_add_uint(control_tree, *cf_items->hf_xdlc_s_ftype,
+		tvb, offset, control_len, control);
+	    /* This will always say it's a supervisory frame */
+	    proto_tree_add_uint(control_tree, *cf_items->hf_xdlc_ftype_s_u,
+		tvb, offset, control_len, control);
+	}
+	break;
+
+    case XDLC_U:
+	/*
+	 * Unnumbered frame.
+	 *
+	 * XXX - is this two octets, with a P/F bit, in HDLC extended
+	 * operation?  It's one octet in LLC, even though the control
+	 * field of I and S frames is a 2-byte extended-operation field
+	 * in LLC.  Given that there are no sequence numbers in the
+	 * control field of a U frame, there doesn't appear to be any
+	 * need for it to be 2 bytes in extended operation.
+	 */
+	if (u_modifier_short_vals_cmd == NULL)
+		u_modifier_short_vals_cmd = modifier_short_vals_cmd;
+	if (u_modifier_short_vals_resp == NULL)
+		u_modifier_short_vals_resp = modifier_short_vals_resp;
+	control = tvb_get_guint8(tvb, offset);
+	control_len = 1;
+	cf_items = cf_items_nonext;
+	control_format = "Control field: %s (0x%02X)";
+	if (is_response) {
+		modifier = match_strval(control & XDLC_U_MODIFIER_MASK,
+			u_modifier_short_vals_resp);
+	} else {
+		modifier = match_strval(control & XDLC_U_MODIFIER_MASK,
+			u_modifier_short_vals_cmd);
+	}
+	if (modifier == NULL)
+		modifier = "Unknown";
+	poll_final = (control & XDLC_P_F);
+	sprintf(info, "U%s, func=%s",
+		(poll_final ?
+		    (is_response ? " F" : " P") :
+		    ""),
+		modifier);
+	if (check_col(pinfo->cinfo, COL_INFO)) {
+	    if (append_info) {
+	    	col_append_str(pinfo->cinfo, COL_INFO, ", ");
+		col_append_str(pinfo->cinfo, COL_INFO, info);
+	    } else
+		col_add_str(pinfo->cinfo, COL_INFO, info);
+	}
+	if (xdlc_tree) {
+	    tc = proto_tree_add_uint_format(xdlc_tree, hf_xdlc_control,	tvb,
+		offset, control_len, control, control_format, info, control);
+	    control_tree = proto_item_add_subtree(tc, ett_xdlc_control);
+	    if (poll_final) {
+		proto_tree_add_boolean(control_tree,
+			(is_response ? *cf_items->hf_xdlc_f:
+				       *cf_items->hf_xdlc_p),
+			tvb, offset, control_len, control);
+	    }
+	    proto_tree_add_uint(control_tree,
+		(is_response ? *cf_items->hf_xdlc_u_modifier_resp :
+			       *cf_items->hf_xdlc_u_modifier_cmd),
+	    	tvb, offset, control_len, control);
+	    /* This will always say it's an unnumbered frame */
+	    proto_tree_add_uint(control_tree, *cf_items->hf_xdlc_ftype_s_u,
+		tvb, offset, control_len, control);
+	}
+	break;
+
+    default:
+	/*
+	 * Information frame.
+	 */
+	if (is_extended) {
+	    control = tvb_get_letohs(tvb, offset);
+	    control_len = 2;
+	    cf_items = cf_items_ext;
+	    control_format = "Control field: %s (0x%04X)";
+	    poll_final = (control & XDLC_P_F_EXT);
+	    sprintf(info, "I%s, N(R)=%u, N(S)=%u",
+			((control & XDLC_P_F_EXT) ? " P" : ""),
+			(control & XDLC_N_R_EXT_MASK) >> XDLC_N_R_EXT_SHIFT,
+			(control & XDLC_N_S_EXT_MASK) >> XDLC_N_S_EXT_SHIFT);
+	} else {
+	    control = tvb_get_guint8(tvb, offset);
+	    control_len = 1;
+	    cf_items = cf_items_nonext;
+	    control_format = "Control field: %s (0x%02X)";
+	    poll_final = (control & XDLC_P_F);
+	    sprintf(info, "I%s, N(R)=%u, N(S)=%u",
+			((control & XDLC_P_F) ? " P" : ""),
+			(control & XDLC_N_R_MASK) >> XDLC_N_R_SHIFT,
+			(control & XDLC_N_S_MASK) >> XDLC_N_S_SHIFT);
+	}
+	if (check_col(pinfo->cinfo, COL_INFO)) {
+	    if (append_info) {
+	    	col_append_str(pinfo->cinfo, COL_INFO, ", ");
+		col_append_str(pinfo->cinfo, COL_INFO, info);
+	    } else
+		col_add_str(pinfo->cinfo, COL_INFO, info);
+	}
+	if (xdlc_tree) {
+	    tc = proto_tree_add_uint_format(xdlc_tree, hf_xdlc_control, tvb,
+		offset, control_len, control, control_format, info, control);
+	    control_tree = proto_item_add_subtree(tc, ett_xdlc_control);
+	    proto_tree_add_uint(control_tree, *cf_items->hf_xdlc_n_r,
+		tvb, offset, control_len, control);
+	    proto_tree_add_uint(control_tree, *cf_items->hf_xdlc_n_s,
+		tvb, offset, control_len, control);
+	    if (poll_final) {
+		proto_tree_add_boolean(control_tree, *cf_items->hf_xdlc_p,
+		    	tvb, offset, control_len, control);
+	    }
+	    /* This will always say it's an information frame */
+	    proto_tree_add_uint(control_tree, *cf_items->hf_xdlc_ftype_i,
+		tvb, offset, control_len, control);
+	}
+	break;
+    }
+    return control;
+}
diff -urN ethereal-0.10.6/epan/xdlc.h ethereal-0.10.7/epan/xdlc.h
--- ethereal-0.10.6/epan/xdlc.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/epan/xdlc.h	2004-10-20 17:34:36.000000000 -0500
@@ -0,0 +1,140 @@
+/* xdlc.h
+ * Define *DLC frame types, and routine to dissect the control field of
+ * a *DLC frame.
+ *
+ * $Id: xdlc.h 12127 2004-09-28 23:48:02Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef __XDLC_H__
+#define __XDLC_H__
+
+/*
+ * Low-order bits of first (extended) or only (basic) octet of control
+ * field, specifying the frame type.
+ */
+#define XDLC_I_MASK		0x01	/* Mask to test for I or not I */
+#define XDLC_I			0x00	/* Information frames */
+#define XDLC_S_U_MASK		0x03	/* Mask to test for S or U */
+#define XDLC_S			0x01	/* Supervisory frames */
+#define XDLC_U			0x03	/* Unnumbered frames */
+
+/*
+ * N(S) and N(R) fields, in basic and extended operation.
+ */
+#define XDLC_N_R_MASK		0xE0	/* basic */
+#define XDLC_N_R_SHIFT		5
+#define XDLC_N_R_EXT_MASK	0xFE00	/* extended */
+#define XDLC_N_R_EXT_SHIFT	9
+#define XDLC_N_S_MASK		0x0E	/* basic */
+#define XDLC_N_S_SHIFT		1
+#define XDLC_N_S_EXT_MASK	0x00FE	/* extended */
+#define XDLC_N_S_EXT_SHIFT	1
+
+/*
+ * Poll/Final bit, in basic and extended operation.
+ */
+#define XDLC_P_F	0x10	/* basic */
+#define XDLC_P_F_EXT	0x0100	/* extended */
+
+/*
+ * S-format frame types.
+ */
+#define XDLC_S_FTYPE_MASK	0x0C
+#define XDLC_RR			0x00	/* Receiver ready */
+#define XDLC_RNR		0x04	/* Receiver not ready */
+#define XDLC_REJ		0x08	/* Reject */
+#define XDLC_SREJ		0x0C	/* Selective reject */
+
+/*
+ * U-format modifiers.
+ */
+#define XDLC_U_MODIFIER_MASK	0xEC
+#define XDLC_UI		0x00	/* Unnumbered Information */
+#define XDLC_UP		0x20	/* Unnumbered Poll */
+#define XDLC_DISC	0x40	/* Disconnect (command) */
+#define XDLC_RD		0x40	/* Request Disconnect (response) */
+#define XDLC_UA		0x60	/* Unnumbered Acknowledge */
+#define XDLC_SNRM	0x80	/* Set Normal Response Mode */
+#define XDLC_TEST	0xE0	/* Test */
+#define XDLC_SIM	0x04	/* Set Initialization Mode (command) */
+#define XDLC_RIM	0x04	/* Request Initialization Mode (response) */
+#define XDLC_FRMR	0x84	/* Frame reject */
+#define XDLC_CFGR	0xC4	/* Configure */
+#define XDLC_SARM	0x0C	/* Set Asynchronous Response Mode (command) */
+#define XDLC_DM		0x0C	/* Disconnected mode (response) */
+#define XDLC_SABM	0x2C	/* Set Asynchronous Balanced Mode */
+#define XDLC_SARME	0x4C	/* Set Asynchronous Response Mode Extended */
+#define XDLC_SABME	0x6C	/* Set Asynchronous Balanced Mode Extended */
+#define XDLC_RESET	0x8C	/* Reset */
+#define XDLC_XID	0xAC	/* Exchange identification */
+#define XDLC_SNRME	0xCC	/* Set Normal Response Mode Extended */
+#define XDLC_BCN	0xEC	/* Beacon */
+
+/*
+ * This macro takes the control field of an xDLC frame, as returned by
+ * "get_xdlc_control()" or "dissect_xdlc_control()", and evaluates to
+ * TRUE if the frame is an "information" frame and FALSE if it isn't.
+ * Note that frames other than information frames can have data in them,
+ * e.g. TEST frames.
+ */
+#define XDLC_IS_INFORMATION(control) \
+	(((control) & XDLC_I_MASK) == XDLC_I || (control) == (XDLC_UI|XDLC_U))
+
+/*
+ * This macro takes the control field of an xDLC frame, and a flag saying
+ * whether we're doing basic or extended operation, and evaluates to
+ * the length of that field (if it's an Unnumbered frame, or we're not
+ * in extended mode, it's 1 byte long, otherwise it's 2 bytes long).
+ */
+#define XDLC_CONTROL_LEN(control, is_extended) \
+	((((control) & XDLC_S_U_MASK) == XDLC_U || !(is_extended)) ? 1 : 2)
+
+/*
+ * Structure containing pointers to hf_ values for various subfields of
+ * the control field.
+ */
+typedef struct {
+	int	*hf_xdlc_n_r;
+	int	*hf_xdlc_n_s;
+	int	*hf_xdlc_p;
+	int	*hf_xdlc_f;
+	int	*hf_xdlc_s_ftype;
+	int	*hf_xdlc_u_modifier_cmd;
+	int	*hf_xdlc_u_modifier_resp;
+	int	*hf_xdlc_ftype_i;
+	int	*hf_xdlc_ftype_s_u;
+} xdlc_cf_items;
+
+extern const value_string ftype_vals[];
+extern const value_string stype_vals[];
+extern const value_string modifier_vals_cmd[];
+extern const value_string modifier_vals_resp[];
+
+extern int get_xdlc_control(const guchar *pd, int offset, int extended);
+
+extern int dissect_xdlc_control(tvbuff_t *tvb, int offset, packet_info *pinfo,
+  proto_tree *xdlc_tree, int hf_xdlc_control, gint ett_xdlc_control,
+  const xdlc_cf_items *cf_items_nonext, const xdlc_cf_items *cf_items_ext,
+  const value_string *u_modifier_short_vals_cmd,
+  const value_string *u_modifier_short_vals_resp, int is_response,
+  int is_extended, int append_info);
+
+#endif
diff -urN ethereal-0.10.6/ethereal.desktop ethereal-0.10.7/ethereal.desktop
--- ethereal-0.10.6/ethereal.desktop	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/ethereal.desktop	2004-10-20 17:34:25.000000000 -0500
@@ -0,0 +1,86 @@
+[Desktop Entry]
+# $Id: ethereal.desktop 11808 2004-08-22 09:22:15Z jmayer $
+# The format of this file is specified at
+# http://freedesktop.org/Standards/desktop-entry-spec/
+# The entries are in the order they are listed in version 0.9.4
+Type=Application
+Version=1.0
+Encoding=UTF-8
+Name=Ethereal
+Name[ko]=이더리얼
+Name[ta]=®¾Ã¢Âø
+Name[uk]=Ефемерність
+GenericName=Network Analyzer
+GenericName[af]=Netwerk Analiseerder
+GenericName[az]=Şəbəkə Analiz Proqramı
+GenericName[bg]=Анализатор на мрежови трафик
+GenericName[bs]=Mrežni analizer
+GenericName[ca]=Analitzador de xarxa
+GenericName[cs]=Analyzátor sítě
+GenericName[da]=Netværksanalyse
+GenericName[de]=Programm für die Netzwerk-Analyse
+GenericName[el]=Αναλυτής Δικτύων
+GenericName[en_GB]=Network Analyser
+GenericName[eo]=Retanalizilo
+GenericName[es]=Analizador de redes
+GenericName[et]=Võrguliikluse analüsaator
+GenericName[eu]=Sare ikerketaria
+GenericName[fa]=تحلیل‌گر شبکه
+GenericName[fi]=Verkkoanalysaattori
+GenericName[fr]=Analyseur réseau
+GenericName[he]=מאבחן רשת
+GenericName[hr]=Program za analiziranje mreža
+GenericName[hu]=hálózatanalizáló
+GenericName[id]=Analisis jaringan
+GenericName[is]=Netskoðunartól
+GenericName[it]=Analizzatore di rete
+GenericName[ja]=ネットワークアナライザ
+GenericName[ko]=네트웍 분석기
+GenericName[lo]=ເຄື່ອງມືວິເຄາະເຄືອຂ່າຍ
+GenericName[lt]=Tinklo analizatorius
+GenericName[lv]=Tīkla Analizators
+GenericName[mk]=Анализатор на мрежи
+GenericName[mn]=Сүлжээ-шинжлэлийн програм
+GenericName[mt]=Analizzatur tan-network
+GenericName[nb]=Nettverksanalyse
+GenericName[nl]=netwerkanalyseprogramma
+GenericName[nn]=Nettverksanalyse
+GenericName[nso]=Moahlaahli wa Kgokagano
+GenericName[pl]=Analizator sieci
+GenericName[pt]=Analisador de Redes
+GenericName[pt_BR]=Analisador de rede
+GenericName[ro]=Analizor de reţea
+GenericName[ru]=Анализатор сетевого трафика
+GenericName[se]=Fierbmeanalysa
+GenericName[sk]=Analyzátor siete
+GenericName[sl]=Analizator omrežij
+GenericName[sr]=Analizatror mreže
+GenericName[ss]=Sihlatiyi seluchungechunge
+GenericName[sv]=Nätverksanalyserare
+GenericName[ta]=Å¨Ä ¬öÅ¡Ç÷
+GenericName[th]=เครื่องมือวิเคราะห์เครือข่าย
+GenericName[tr]=Ağ Analiz Programı
+GenericName[uk]=Аналізатор мережі
+GenericName[ven]=Musengulusi wa Vhukwamani
+GenericName[vi]=Trình phân tích  mạng
+GenericName[xh]=Umcukucezi Womsebenzi womnatha
+GenericName[zh_CN]=网络分析程序
+GenericName[zh_TW]=網路分析程式
+GenericName[zu]=Umhloli Woxhumano olusakazekile
+Comment=Network traffic analyzer
+Comment[fi]=Verkkoliikenne analysaattori
+Comment[sv]=Nätverkstrafikanalysator
+Icon=ethereal.png
+TryExec=ethereal
+Exec=ethereal
+Path=
+Terminal=false
+MimeType=
+Categories=Application;GTK;Network;X-Red-Hat-Extra;
+# Found in Suse 9.1:
+X-KDE-SubstituteUID=true
+# Deprecated:
+# TerminalOptions=
+# BinaryPattern=ethereal
+# MapNotify=true
+# Protocols=
diff -urN ethereal-0.10.6/file.c ethereal-0.10.7/file.c
--- ethereal-0.10.6/file.c	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/file.c	2004-10-20 17:35:06.000000000 -0500
@@ -1,7 +1,7 @@
 /* file.c
  * File I/O routines
  *
- * $Id: file.c 11544 2004-07-27 20:10:02Z guy $
+ * $Id: file.c 12131 2004-09-29 02:54:22Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -68,9 +68,9 @@
 
 #include "color.h"
 #include "color_filters.h"
-#include "column.h"
+#include <epan/column.h>
 #include <epan/packet.h>
-#include "range.h"
+#include "packet-range.h"
 #include "print.h"
 #include "file.h"
 #include "menu.h"
@@ -80,12 +80,12 @@
 #include "progress_dlg.h"
 #include "ui_util.h"
 #include "statusbar.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/dfilter/dfilter.h>
 #include <epan/conversation.h>
 #include "globals.h"
 #include <epan/epan_dissect.h>
-#include "tap.h"
+#include <epan/tap.h>
 #include "tap_dfilter_dlg.h"
 #include <epan/dissectors/packet-data.h>
 
@@ -2491,21 +2491,44 @@
            * we need an API for popping up alert boxes with
            * {Verb} and "Cancel".
            */
-          simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK,
-                        "%sBeginning of capture exceeded!%s\n\n"
-                        "Search is continued from the end of the capture.",
-                        simple_dialog_primary_start(), simple_dialog_primary_end());
-          fdata = cf->plist_end;	/* wrap around */
+
+          if (prefs.gui_find_wrap)
+          {
+              simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK,
+                            "%sBeginning of capture exceeded!%s\n\n"
+                            "Search is continued from the end of the capture.",
+                            simple_dialog_primary_start(), simple_dialog_primary_end());
+              fdata = cf->plist_end;	/* wrap around */
+          }
+          else
+          {
+              simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK,
+                            "%sBeginning of capture exceeded!%s\n\n"
+                            "Try searching forwards.",
+                            simple_dialog_primary_start(), simple_dialog_primary_end());
+              fdata = start_fd;        /* stay on previous packet */
+          }
         }
       } else {
         /* Go on to the next frame. */
         fdata = fdata->next;
         if (fdata == NULL) {
-          simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK,
-                        "%sEnd of capture exceeded!%s\n\n"
-                        "Search is continued from the start of the capture.",
-                        simple_dialog_primary_start(), simple_dialog_primary_end());
-          fdata = cf->plist;	/* wrap around */
+          if (prefs.gui_find_wrap)
+          {
+              simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK,
+                            "%sEnd of capture exceeded!%s\n\n"
+                            "Search is continued from the start of the capture.",
+                            simple_dialog_primary_start(), simple_dialog_primary_end());
+              fdata = cf->plist;	/* wrap around */
+          }
+          else
+          {
+              simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK,
+                            "%sEnd of capture exceeded!%s\n\n"
+                            "Try searching backwards.",
+                            simple_dialog_primary_start(), simple_dialog_primary_end());
+              fdata = start_fd;     /* stay on previous packet */
+          }
         }
       }
 
@@ -2644,6 +2667,26 @@
   return TRUE;	/* we got to that packet */
 }
 
+/*
+ * Go to frame specified by currently selected protocol tree item.
+ */
+void
+goto_framenum(capture_file *cf)
+{
+  header_field_info       *hfinfo;
+  guint32                 framenum;
+
+  if (cf->finfo_selected) {
+    hfinfo = cf->finfo_selected->hfinfo;
+    g_assert(hfinfo);
+    if (hfinfo->type == FT_FRAMENUM) {
+      framenum = fvalue_get_integer(&cf->finfo_selected->value);
+      if (framenum != 0)
+        goto_frame(cf, framenum);
+      }
+  }
+}
+
 /* Select the packet on a given row. */
 void
 select_packet(capture_file *cf, int row)
@@ -2753,8 +2796,11 @@
 void
 mark_frame(capture_file *cf, frame_data *frame)
 {
-  frame->flags.marked = TRUE;
-  cf->marked_count++;
+  if (! frame->flags.marked) {
+    frame->flags.marked = TRUE;
+    if (cf->count > cf->marked_count)
+      cf->marked_count++;
+  }
 }
 
 /*
@@ -2763,8 +2809,11 @@
 void
 unmark_frame(capture_file *cf, frame_data *frame)
 {
-  frame->flags.marked = FALSE;
-  cf->marked_count--;
+  if (frame->flags.marked) {
+    frame->flags.marked = FALSE;
+    if (cf->marked_count > 0)
+      cf->marked_count--;
+  }
 }
 
 typedef struct {
@@ -2861,7 +2910,7 @@
       /* The file being saved is a temporary file from a live
          capture, so it doesn't need to stay around under that name;
 	 first, try renaming the capture buffer file to the new name. */
-#ifndef WIN32
+#ifndef _WIN32
       if (rename(cf->filename, fname) == 0) {
       	/* That succeeded - there's no need to copy the source file. */
       	from_filename = NULL;
@@ -3224,6 +3273,56 @@
   }
 }
 
+/* Reload the current capture file. */
+void
+cf_reload() {
+  gchar *filename;
+  gboolean is_tempfile;
+
+  /* If the file could be opened, "cf_open()" calls "cf_close()"
+     to get rid of state for the old capture file before filling in state
+     for the new capture file.  "cf_close()" will remove the file if
+     it's a temporary file; we don't want that to happen (for one thing,
+     it'd prevent subsequent reopens from working).  Remember whether it's
+     a temporary file, mark it as not being a temporary file, and then
+     reopen it as the type of file it was.
+
+     Also, "cf_close()" will free "cfile.filename", so we must make
+     a copy of it first. */
+  filename = g_strdup(cfile.filename);
+  is_tempfile = cfile.is_tempfile;
+  cfile.is_tempfile = FALSE;
+  if (cf_open(filename, is_tempfile, &cfile) == 0) {
+    switch (cf_read(&cfile)) {
+
+    case READ_SUCCESS:
+    case READ_ERROR:
+      /* Just because we got an error, that doesn't mean we were unable
+         to read any of the file; we handle what we could get from the
+         file. */
+      break;
+
+    case READ_ABORTED:
+      /* The user bailed out of re-reading the capture file; the
+         capture file has been closed - just free the capture file name
+         string and return (without changing the last containing
+         directory). */
+      g_free(filename);
+      return;
+    }
+  } else {
+    /* The open failed, so "cfile.is_tempfile" wasn't set to "is_tempfile".
+       Instead, the file was left open, so we should restore "cfile.is_tempfile"
+       ourselves.
+
+       XXX - change the menu?  Presumably "cf_open()" will do that;
+       make sure it does! */
+    cfile.is_tempfile = is_tempfile;
+  }
+  /* "cf_open()" made a copy of the file name we handed it, so
+     we should free up our copy. */
+  g_free(filename);
+}
 
 /* Copies a file in binary mode, for those operating systems that care about
  * such things.
diff -urN ethereal-0.10.6/file.h ethereal-0.10.7/file.h
--- ethereal-0.10.6/file.h	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/file.h	2004-10-20 17:35:06.000000000 -0500
@@ -1,7 +1,7 @@
 /* file.h
  * Definitions for file structures and routines
  *
- * $Id: file.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: file.h 12170 2004-10-01 12:27:52Z jmayer $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -25,7 +25,7 @@
 #ifndef __FILE_H__
 #define __FILE_H__
 
-#include "range.h"
+#include "packet-range.h"
 #include "wiretap/wtap.h"
 #include <epan/dfilter/dfilter.h>
 #include "print.h"
@@ -44,6 +44,7 @@
 
 int  cf_open(char *, gboolean, capture_file *);
 void cf_close(capture_file *);
+void cf_reload(void);
 read_status_t cf_read(capture_file *);
 int  cf_start_tail(char *, gboolean, capture_file *);
 read_status_t cf_continue_tail(capture_file *, int, int *);
@@ -80,6 +81,7 @@
 gboolean goto_frame(capture_file *cf, guint fnumber);
 gboolean goto_bottom_frame(capture_file *cf);
 gboolean goto_top_frame(capture_file *cf);
+void goto_framenum(capture_file *cf);
 
 
 void select_packet(capture_file *, int);
diff -urN ethereal-0.10.6/filters.c ethereal-0.10.7/filters.c
--- ethereal-0.10.6/filters.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/filters.c	2004-10-20 17:35:04.000000000 -0500
@@ -1,7 +1,7 @@
 /* filters.c
  * Code for reading and writing the filters file.
  *
- * $Id: filters.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: filters.c 11972 2004-09-11 23:03:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -484,7 +484,7 @@
     return;
   }
 
-#ifdef WIN32
+#ifdef _WIN32
   /* ANSI C doesn't say whether "rename()" removes the target if it
      exists; the Win32 call to rename files doesn't do so, which I
      infer is the reason why the MSVC++ "rename()" doesn't do so.
diff -urN ethereal-0.10.6/gtk/Makefile.am ethereal-0.10.7/gtk/Makefile.am
--- ethereal-0.10.6/gtk/Makefile.am	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/Makefile.am	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 # Makefile.am
 # Automake file for the GTK interface routines for Ethereal
 #
-# $Id: Makefile.am 11500 2004-07-24 01:29:12Z guy $
+# $Id: Makefile.am 12250 2004-10-09 16:30:26Z gerald $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -37,12 +37,14 @@
 	about_dlg.h	\
 	capture_dlg.h	\
 	capture_prefs.h	\
+	cfilter_combo_utils.h \
 	color_dlg.h	\
 	colors.h	\
 	column_prefs.h	\
 	compat_macros.h	\
 	conversations_table.h \
 	decode_as_dlg.h	\
+	decode_as_dcerpc.h \
 	dfilter_expr_dlg.h \
 	dlg_utils.h	\
 	file_dlg.h	\
@@ -55,6 +57,9 @@
 	gtkglobals.h	\
 	gtk_stat_util.h \
 	gui_prefs.h	\
+	h323_analysis.h	\
+	h323_conversations.h	\
+	h323_conversations_dlg.h \
 	help_dlg.h	\
 	hostlist_table.h \
 	isprint.h	\
@@ -77,6 +82,7 @@
 	rtp_stream.h	\
 	rtp_stream_dlg.h \
 	sat.h		\
+	sctp_stat.h	\
 	service_response_time_table.h	\
 	stream_prefs.h	\
 	summary_dlg.h   \
diff -urN ethereal-0.10.6/gtk/Makefile.common ethereal-0.10.7/gtk/Makefile.common
--- ethereal-0.10.6/gtk/Makefile.common	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/Makefile.common	2004-10-20 17:34:30.000000000 -0500
@@ -3,7 +3,7 @@
 #     a) common to both files and
 #     b) portable between both files
 #
-# $Id: Makefile.common 11500 2004-07-24 01:29:12Z guy $
+# $Id: Makefile.common 12149 2004-09-30 18:09:09Z etxrab $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -34,12 +34,14 @@
 	capture_if_dlg.c	\
 	capture_info_dlg.c	\
 	capture_prefs.c	\
+	cfilter_combo_utils.c	\
 	color_dlg.c	\
 	color_utils.c	\
 	colors.c	\
 	column_prefs.c	\
 	conversations_table.c	\
 	decode_as_dlg.c	\
+	decode_as_dcerpc.c	\
 	dfilter_expr_dlg.c	\
 	dlg_utils.c	\
 	ethereal-tap-register.c	\
@@ -51,6 +53,8 @@
 	goto_dlg.c	\
 	gtk_stat_util.c	\
 	gui_prefs.c	\
+	h323_analysis.c	\
+	h323_conversations.c	\
 	help_dlg.c	\
 	hostlist_table.c \
 	layout_prefs.c	\
@@ -101,6 +105,7 @@
 	gsm_map_summary.c	\
 	h225_counter.c	\
 	h225_ras_srt.c	\
+	h323_conversations_dlg.c	\
 	hostlist_eth.c \
 	hostlist_fc.c \
 	hostlist_fddi.c \
@@ -120,7 +125,7 @@
 	rpc_stat.c	\
 	rtp_analysis.c	\
 	rtp_stream_dlg.c	\
-	tcp_graph.c	\
 	sip_stat.c	\
 	smb_stat.c	\
+	tcp_graph.c	\
 	wsp_stat.c
diff -urN ethereal-0.10.6/gtk/Makefile.in ethereal-0.10.7/gtk/Makefile.in
--- ethereal-0.10.6/gtk/Makefile.in	2004-08-12 21:04:20.000000000 -0500
+++ ethereal-0.10.7/gtk/Makefile.in	2004-10-20 21:50:17.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -17,7 +17,7 @@
 # Makefile.am
 # Automake file for the GTK interface routines for Ethereal
 #
-# $Id: Makefile.am 11500 2004-07-24 01:29:12Z guy $
+# $Id: Makefile.am 12250 2004-10-09 16:30:26Z gerald $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -42,7 +42,7 @@
 #     a) common to both files and
 #     b) portable between both files
 #
-# $Id: Makefile.common 11500 2004-07-24 01:29:12Z guy $
+# $Id: Makefile.common 12149 2004-09-30 18:09:09Z etxrab $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -122,6 +122,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -133,10 +136,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -217,8 +223,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -274,12 +280,14 @@
 	capture_if_dlg.c	\
 	capture_info_dlg.c	\
 	capture_prefs.c	\
+	cfilter_combo_utils.c	\
 	color_dlg.c	\
 	color_utils.c	\
 	colors.c	\
 	column_prefs.c	\
 	conversations_table.c	\
 	decode_as_dlg.c	\
+	decode_as_dcerpc.c	\
 	dfilter_expr_dlg.c	\
 	dlg_utils.c	\
 	ethereal-tap-register.c	\
@@ -291,6 +299,8 @@
 	goto_dlg.c	\
 	gtk_stat_util.c	\
 	gui_prefs.c	\
+	h323_analysis.c	\
+	h323_conversations.c	\
 	help_dlg.c	\
 	hostlist_table.c \
 	layout_prefs.c	\
@@ -341,6 +351,7 @@
 	gsm_map_summary.c	\
 	h225_counter.c	\
 	h225_ras_srt.c	\
+	h323_conversations_dlg.c	\
 	hostlist_eth.c \
 	hostlist_fc.c \
 	hostlist_fddi.c \
@@ -360,9 +371,9 @@
 	rpc_stat.c	\
 	rtp_analysis.c	\
 	rtp_stream_dlg.c	\
-	tcp_graph.c	\
 	sip_stat.c	\
 	smb_stat.c	\
+	tcp_graph.c	\
 	wsp_stat.c
 
 
@@ -377,12 +388,14 @@
 	about_dlg.h	\
 	capture_dlg.h	\
 	capture_prefs.h	\
+	cfilter_combo_utils.h \
 	color_dlg.h	\
 	colors.h	\
 	column_prefs.h	\
 	compat_macros.h	\
 	conversations_table.h \
 	decode_as_dlg.h	\
+	decode_as_dcerpc.h \
 	dfilter_expr_dlg.h \
 	dlg_utils.h	\
 	file_dlg.h	\
@@ -395,6 +408,9 @@
 	gtkglobals.h	\
 	gtk_stat_util.h \
 	gui_prefs.h	\
+	h323_analysis.h	\
+	h323_conversations.h	\
+	h323_conversations_dlg.h \
 	help_dlg.h	\
 	hostlist_table.h \
 	isprint.h	\
@@ -417,6 +433,7 @@
 	rtp_stream.h	\
 	rtp_stream_dlg.h \
 	sat.h		\
+	sctp_stat.h	\
 	service_response_time_table.h	\
 	stream_prefs.h	\
 	summary_dlg.h   \
@@ -466,28 +483,32 @@
 libui_a_AR = $(AR) cru
 libui_a_LIBADD =
 am__libui_a_SOURCES_DIST = about_dlg.c capture_dlg.c capture_if_dlg.c \
-	capture_info_dlg.c capture_prefs.c color_dlg.c color_utils.c \
-	colors.c column_prefs.c conversations_table.c decode_as_dlg.c \
+	capture_info_dlg.c capture_prefs.c cfilter_combo_utils.c \
+	color_dlg.c color_utils.c colors.c column_prefs.c \
+	conversations_table.c decode_as_dlg.c decode_as_dcerpc.c \
 	dfilter_expr_dlg.c dlg_utils.c ethereal-tap-register.c \
 	file_dlg.c filter_dlg.c find_dlg.c follow_dlg.c font_utils.c \
-	goto_dlg.c gtk_stat_util.c gui_prefs.c help_dlg.c \
-	hostlist_table.c layout_prefs.c main.c menu.c nameres_prefs.c \
-	packet_list.c packet_win.c plugins_dlg.c prefs_dlg.c \
-	print_dlg.c print_prefs.c progress_dlg.c proto_dlg.c \
-	proto_draw.c proto_hier_stats_dlg.c range_utils.c recent.c \
-	rtp_stream.c service_response_time_table.c simple_dialog.c \
-	stream_prefs.c summary_dlg.c supported_protos_dlg.c \
-	tap_dfilter_dlg.c text_page.c toolbar.c ui_util.c webbrowser.c \
-	about_dlg.h capture_dlg.h capture_prefs.h color_dlg.h colors.h \
-	column_prefs.h compat_macros.h conversations_table.h \
-	decode_as_dlg.h dfilter_expr_dlg.h dlg_utils.h file_dlg.h \
-	filter_dlg.h find_dlg.h follow_dlg.h font_utils.h goto_dlg.h \
-	gsm_map_stat.h gtkglobals.h gtk_stat_util.h gui_prefs.h \
-	help_dlg.h hostlist_table.h isprint.h keys.h layout_prefs.h \
-	main.h menu.h mtp3_stat.h nameres_prefs.h packet_list.h \
-	packet_win.h prefs_dlg.h print_prefs.h proto_dlg.h proto_draw.h \
+	goto_dlg.c gtk_stat_util.c gui_prefs.c h323_analysis.c \
+	h323_conversations.c help_dlg.c hostlist_table.c layout_prefs.c \
+	main.c menu.c nameres_prefs.c packet_list.c packet_win.c \
+	plugins_dlg.c prefs_dlg.c print_dlg.c print_prefs.c \
+	progress_dlg.c proto_dlg.c proto_draw.c proto_hier_stats_dlg.c \
+	range_utils.c recent.c rtp_stream.c \
+	service_response_time_table.c simple_dialog.c stream_prefs.c \
+	summary_dlg.c supported_protos_dlg.c tap_dfilter_dlg.c \
+	text_page.c toolbar.c ui_util.c webbrowser.c about_dlg.h \
+	capture_dlg.h capture_prefs.h cfilter_combo_utils.h color_dlg.h \
+	colors.h column_prefs.h compat_macros.h conversations_table.h \
+	decode_as_dlg.h decode_as_dcerpc.h dfilter_expr_dlg.h \
+	dlg_utils.h file_dlg.h filter_dlg.h find_dlg.h follow_dlg.h \
+	font_utils.h goto_dlg.h gsm_map_stat.h gtkglobals.h \
+	gtk_stat_util.h gui_prefs.h h323_analysis.h \
+	h323_conversations.h h323_conversations_dlg.h help_dlg.h \
+	hostlist_table.h isprint.h keys.h layout_prefs.h main.h menu.h \
+	mtp3_stat.h nameres_prefs.h packet_list.h packet_win.h \
+	prefs_dlg.h print_prefs.h proto_dlg.h proto_draw.h \
 	proto_hier_stats_dlg.h range_utils.h recent.h rtp_analysis.h \
-	rtp_stream.h rtp_stream_dlg.h sat.h \
+	rtp_stream.h rtp_stream_dlg.h sat.h sctp_stat.h \
 	service_response_time_table.h stream_prefs.h summary_dlg.h \
 	supported_protos_dlg.h tap_dfilter_dlg.h tap_menu.h text_page.h \
 	toolbar.h ui_util.h webbrowser.h ansi_a_stat.c ansi_map_stat.c \
@@ -495,25 +516,28 @@
 	conversations_fddi.c conversations_ip.c conversations_ipx.c \
 	conversations_tcpip.c conversations_tr.c conversations_udpip.c \
 	dcerpc_stat.c fc_stat.c gsm_a_stat.c gsm_map_stat.c \
-	gsm_map_summary.c h225_counter.c h225_ras_srt.c hostlist_eth.c \
-	hostlist_fc.c hostlist_fddi.c hostlist_ip.c hostlist_ipx.c \
-	hostlist_tcpip.c hostlist_tr.c hostlist_udpip.c http_stat.c \
-	io_stat.c isup_stat.c ldap_stat.c mgcp_stat.c mtp3_stat.c \
-	mtp3_summary.c rpc_progs.c rpc_stat.c rtp_analysis.c \
-	rtp_stream_dlg.c tcp_graph.c sip_stat.c smb_stat.c wsp_stat.c \
-	ethclist.c ethclist.h
+	gsm_map_summary.c h225_counter.c h225_ras_srt.c \
+	h323_conversations_dlg.c hostlist_eth.c hostlist_fc.c \
+	hostlist_fddi.c hostlist_ip.c hostlist_ipx.c hostlist_tcpip.c \
+	hostlist_tr.c hostlist_udpip.c http_stat.c io_stat.c \
+	isup_stat.c ldap_stat.c mgcp_stat.c mtp3_stat.c mtp3_summary.c \
+	rpc_progs.c rpc_stat.c rtp_analysis.c rtp_stream_dlg.c \
+	sip_stat.c smb_stat.c tcp_graph.c wsp_stat.c ethclist.c \
+	ethclist.h
 am__objects_1 = about_dlg.$(OBJEXT) capture_dlg.$(OBJEXT) \
 	capture_if_dlg.$(OBJEXT) capture_info_dlg.$(OBJEXT) \
-	capture_prefs.$(OBJEXT) color_dlg.$(OBJEXT) \
-	color_utils.$(OBJEXT) colors.$(OBJEXT) column_prefs.$(OBJEXT) \
-	conversations_table.$(OBJEXT) decode_as_dlg.$(OBJEXT) \
+	capture_prefs.$(OBJEXT) cfilter_combo_utils.$(OBJEXT) \
+	color_dlg.$(OBJEXT) color_utils.$(OBJEXT) colors.$(OBJEXT) \
+	column_prefs.$(OBJEXT) conversations_table.$(OBJEXT) \
+	decode_as_dlg.$(OBJEXT) decode_as_dcerpc.$(OBJEXT) \
 	dfilter_expr_dlg.$(OBJEXT) dlg_utils.$(OBJEXT) \
 	ethereal-tap-register.$(OBJEXT) file_dlg.$(OBJEXT) \
 	filter_dlg.$(OBJEXT) find_dlg.$(OBJEXT) follow_dlg.$(OBJEXT) \
 	font_utils.$(OBJEXT) goto_dlg.$(OBJEXT) gtk_stat_util.$(OBJEXT) \
-	gui_prefs.$(OBJEXT) help_dlg.$(OBJEXT) hostlist_table.$(OBJEXT) \
-	layout_prefs.$(OBJEXT) main.$(OBJEXT) menu.$(OBJEXT) \
-	nameres_prefs.$(OBJEXT) packet_list.$(OBJEXT) \
+	gui_prefs.$(OBJEXT) h323_analysis.$(OBJEXT) \
+	h323_conversations.$(OBJEXT) help_dlg.$(OBJEXT) \
+	hostlist_table.$(OBJEXT) layout_prefs.$(OBJEXT) main.$(OBJEXT) \
+	menu.$(OBJEXT) nameres_prefs.$(OBJEXT) packet_list.$(OBJEXT) \
 	packet_win.$(OBJEXT) plugins_dlg.$(OBJEXT) prefs_dlg.$(OBJEXT) \
 	print_dlg.$(OBJEXT) print_prefs.$(OBJEXT) \
 	progress_dlg.$(OBJEXT) proto_dlg.$(OBJEXT) proto_draw.$(OBJEXT) \
@@ -533,16 +557,17 @@
 	conversations_udpip.$(OBJEXT) dcerpc_stat.$(OBJEXT) \
 	fc_stat.$(OBJEXT) gsm_a_stat.$(OBJEXT) gsm_map_stat.$(OBJEXT) \
 	gsm_map_summary.$(OBJEXT) h225_counter.$(OBJEXT) \
-	h225_ras_srt.$(OBJEXT) hostlist_eth.$(OBJEXT) \
-	hostlist_fc.$(OBJEXT) hostlist_fddi.$(OBJEXT) \
-	hostlist_ip.$(OBJEXT) hostlist_ipx.$(OBJEXT) \
-	hostlist_tcpip.$(OBJEXT) hostlist_tr.$(OBJEXT) \
-	hostlist_udpip.$(OBJEXT) http_stat.$(OBJEXT) io_stat.$(OBJEXT) \
-	isup_stat.$(OBJEXT) ldap_stat.$(OBJEXT) mgcp_stat.$(OBJEXT) \
-	mtp3_stat.$(OBJEXT) mtp3_summary.$(OBJEXT) rpc_progs.$(OBJEXT) \
-	rpc_stat.$(OBJEXT) rtp_analysis.$(OBJEXT) \
-	rtp_stream_dlg.$(OBJEXT) tcp_graph.$(OBJEXT) sip_stat.$(OBJEXT) \
-	smb_stat.$(OBJEXT) wsp_stat.$(OBJEXT)
+	h225_ras_srt.$(OBJEXT) h323_conversations_dlg.$(OBJEXT) \
+	hostlist_eth.$(OBJEXT) hostlist_fc.$(OBJEXT) \
+	hostlist_fddi.$(OBJEXT) hostlist_ip.$(OBJEXT) \
+	hostlist_ipx.$(OBJEXT) hostlist_tcpip.$(OBJEXT) \
+	hostlist_tr.$(OBJEXT) hostlist_udpip.$(OBJEXT) \
+	http_stat.$(OBJEXT) io_stat.$(OBJEXT) isup_stat.$(OBJEXT) \
+	ldap_stat.$(OBJEXT) mgcp_stat.$(OBJEXT) mtp3_stat.$(OBJEXT) \
+	mtp3_summary.$(OBJEXT) rpc_progs.$(OBJEXT) rpc_stat.$(OBJEXT) \
+	rtp_analysis.$(OBJEXT) rtp_stream_dlg.$(OBJEXT) \
+	sip_stat.$(OBJEXT) smb_stat.$(OBJEXT) tcp_graph.$(OBJEXT) \
+	wsp_stat.$(OBJEXT)
 @USE_GTK2_TRUE@am_libui_a_OBJECTS = $(am__objects_1) $(am__objects_2) \
 @USE_GTK2_TRUE@	$(am__objects_3)
 @USE_GTK2_FALSE@am_libui_a_OBJECTS = ethclist.$(OBJEXT) $(am__objects_1) \
@@ -560,6 +585,7 @@
 @AMDEP_TRUE@	./$(DEPDIR)/capture_if_dlg.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/capture_info_dlg.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/capture_prefs.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/cfilter_combo_utils.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/color_dlg.Po ./$(DEPDIR)/color_utils.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/colors.Po ./$(DEPDIR)/column_prefs.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/conversations_eth.Po \
@@ -572,6 +598,7 @@
 @AMDEP_TRUE@	./$(DEPDIR)/conversations_tr.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/conversations_udpip.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/dcerpc_stat.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/decode_as_dcerpc.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/decode_as_dlg.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/dfilter_expr_dlg.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/dlg_utils.Po ./$(DEPDIR)/ethclist.Po \
@@ -585,8 +612,11 @@
 @AMDEP_TRUE@	./$(DEPDIR)/gtk_stat_util.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/gui_prefs.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/h225_counter.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/h225_ras_srt.Po ./$(DEPDIR)/help_dlg.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/hostlist_eth.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/h225_ras_srt.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/h323_analysis.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/h323_conversations.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/h323_conversations_dlg.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/help_dlg.Po ./$(DEPDIR)/hostlist_eth.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/hostlist_fc.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/hostlist_fddi.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/hostlist_ip.Po \
@@ -674,6 +704,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/capture_if_dlg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/capture_info_dlg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/capture_prefs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cfilter_combo_utils.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color_dlg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color_utils.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colors.Po@am__quote@
@@ -688,6 +719,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conversations_tr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conversations_udpip.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dcerpc_stat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decode_as_dcerpc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decode_as_dlg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dfilter_expr_dlg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlg_utils.Po@am__quote@
@@ -707,6 +739,9 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui_prefs.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h225_counter.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h225_ras_srt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h323_analysis.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h323_conversations.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h323_conversations_dlg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help_dlg.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hostlist_eth.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hostlist_fc.Po@am__quote@
@@ -904,7 +939,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -926,7 +961,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -951,7 +985,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/gtk/Makefile.nmake ethereal-0.10.7/gtk/Makefile.nmake
--- ethereal-0.10.6/gtk/Makefile.nmake	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/Makefile.nmake	2004-10-20 17:34:31.000000000 -0500
@@ -1,7 +1,7 @@
 ## Makefile for building ethereal.exe with Microsoft C and nmake
 ## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12021 2004-09-16 22:07:03Z ulfl $
 
 include ..\config.nmake
 
@@ -15,8 +15,12 @@
 
 CVARSDLL=-DWIN32 -DNULL=0 -D_MT -D_DLL
 
+!IFDEF ETHEREAL_EUG_DIR
+EUG_CFLAGS=-DETHEREAL_EUG_DIR
+!ENDIF
+
 .c.obj::
-   $(CC) $(CVARSDLL) $(CFLAGS) -Fd.\ -c $<
+   $(CC) $(CVARSDLL) $(CFLAGS) $(EUG_CFLAGS) -Fd.\ -c $<
 
 include Makefile.common
 
diff -urN ethereal-0.10.6/gtk/about_dlg.c ethereal-0.10.7/gtk/about_dlg.c
--- ethereal-0.10.6/gtk/about_dlg.c	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/about_dlg.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,6 +1,6 @@
 /* about_dlg.c
  *
- * $Id: about_dlg.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: about_dlg.c 12021 2004-09-16 22:07:03Z ulfl $
  *
  * Ulf Lamping <ulf.lamping@web.de>
  *
@@ -39,7 +39,6 @@
 #if GTK_MAJOR_VERSION >= 2 || GTK_MINOR_VERSION >= 3
 #include "text_page.h"
 #endif
-#include "webbrowser.h"
 
 #include "svnversion.h"
 
@@ -358,54 +357,3 @@
 }
 
 
-void
-url_onlinepage_cb( GtkWidget *widget _U_, gpointer data _U_, onlinepage_action_e action)
-{
-    switch(action) {
-    case(ONLINEPAGE_HOME):
-        browser_open_url ("http://www.ethereal.com");
-        break;
-    case(ONLINEPAGE_DOWNLOAD):
-        browser_open_url ("http://www.ethereal.com/download.html");
-        break;
-    case(ONLINEPAGE_USERGUIDE):
-        browser_open_url ("http://www.ethereal.com/docs/user-guide");
-        break;
-    case(ONLINEPAGE_FAQ):
-        browser_open_url ("http://www.ethereal.com/faq.html");
-        break;
-    case(ONLINEPAGE_SAMPLE):
-        browser_open_url ("http://www.ethereal.com/sample");
-        break;
-    default:
-        g_assert_not_reached();
-    }
-}
-
-void
-url_localpage_cb( GtkWidget *w _U_, gpointer data _U_, localpage_action_e action)
-{
-    switch(action) {
-    case(LOCALPAGE_MAN_ETHEREAL):
-        browser_open_data_file("ethereal.html");
-        break;
-    case(LOCALPAGE_MAN_ETHEREAL_FILTER):
-        browser_open_data_file("ethereal-filter.html");
-        break;
-    case(LOCALPAGE_MAN_TETHEREAL):
-        browser_open_data_file("tethereal.html");
-        break;
-    case(LOCALPAGE_MAN_MERGECAP):
-        browser_open_data_file("mergecap.html");
-        break;
-    case(LOCALPAGE_MAN_EDITCAP):
-        browser_open_data_file("editcap.html");
-        break;
-    case(LOCALPAGE_MAN_TEXT2PCAP):
-        browser_open_data_file("text2pcap.html");
-        break;
-    default:
-        g_assert_not_reached();
-    }
-}
-
diff -urN ethereal-0.10.6/gtk/about_dlg.h ethereal-0.10.7/gtk/about_dlg.h
--- ethereal-0.10.6/gtk/about_dlg.h	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/about_dlg.h	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* about_dlg.h
  * Declarations of routines for the "About" dialog
  *
- * $Id: about_dlg.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: about_dlg.h 12021 2004-09-16 22:07:03Z ulfl $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -58,36 +58,5 @@
  */
 extern void about_ethereal_cb( GtkWidget *widget, gpointer data);
 
-typedef enum {
-    ONLINEPAGE_HOME,
-    ONLINEPAGE_USERGUIDE,
-    ONLINEPAGE_FAQ,
-    ONLINEPAGE_DOWNLOAD,
-    ONLINEPAGE_SAMPLE
-} onlinepage_action_e;
-
-
-/** User requested one of the online pages by menu.
- *
- * @param widget parent widget (unused)
- * @param data unused
- */
-extern void url_onlinepage_cb( GtkWidget *widget, gpointer data, onlinepage_action_e action);
-
-typedef enum {
-    LOCALPAGE_MAN_ETHEREAL,
-    LOCALPAGE_MAN_ETHEREAL_FILTER,
-    LOCALPAGE_MAN_TETHEREAL,
-    LOCALPAGE_MAN_MERGECAP,
-    LOCALPAGE_MAN_EDITCAP,
-    LOCALPAGE_MAN_TEXT2PCAP
-} localpage_action_e;
-
-/** User requested one of the local html pages by menu.
- *
- * @param widget parent widget (unused)
- * @param data unused
- */
-extern void url_localpage_cb( GtkWidget *widget, gpointer data, localpage_action_e action);
 
 #endif /* __ABOUT_DLG_H__ */
diff -urN ethereal-0.10.6/gtk/ansi_a_stat.c ethereal-0.10.7/gtk/ansi_a_stat.c
--- ethereal-0.10.6/gtk/ansi_a_stat.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/ansi_a_stat.c	2004-10-20 17:34:32.000000000 -0500
@@ -5,7 +5,7 @@
  *
  * MUCH code modified from service_response_time_table.c.
  *
- * $Id: ansi_a_stat.c 11436 2004-07-19 21:42:01Z ulfl $
+ * $Id: ansi_a_stat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -45,7 +45,7 @@
 #include "image/clist_descend.xpm"
 #include "simple_dialog.h"
 #include "dlg_utils.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include <epan/dissectors/packet-bssap.h>
 #include <epan/dissectors/packet-ansi_a.h>
diff -urN ethereal-0.10.6/gtk/ansi_map_stat.c ethereal-0.10.7/gtk/ansi_map_stat.c
--- ethereal-0.10.6/gtk/ansi_map_stat.c	2004-08-12 17:41:47.000000000 -0500
+++ ethereal-0.10.7/gtk/ansi_map_stat.c	2004-10-20 17:34:32.000000000 -0500
@@ -5,7 +5,7 @@
  *
  * MUCH code modified from service_response_time_table.c.
  *
- * $Id: ansi_map_stat.c 11436 2004-07-19 21:42:01Z ulfl $
+ * $Id: ansi_map_stat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -45,7 +45,7 @@
 #include "image/clist_descend.xpm"
 #include "simple_dialog.h"
 #include "dlg_utils.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "../globals.h"
 #include "filter_dlg.h"
diff -urN ethereal-0.10.6/gtk/bootp_stat.c ethereal-0.10.7/gtk/bootp_stat.c
--- ethereal-0.10.6/gtk/bootp_stat.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/bootp_stat.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* bootp_stat.c
  * boop_stat   2003 Jean-Michel FAYARD
  *
- * $Id: bootp_stat.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: bootp_stat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -37,7 +37,7 @@
 #include "simple_dialog.h"
 #include "ui_util.h"
 #include "dlg_utils.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "../globals.h"
 #include "compat_macros.h"
diff -urN ethereal-0.10.6/gtk/capture_dlg.c ethereal-0.10.7/gtk/capture_dlg.c
--- ethereal-0.10.6/gtk/capture_dlg.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/capture_dlg.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* capture_dlg.c
  * Routines for packet capture windows
  *
- * $Id: capture_dlg.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: capture_dlg.c 12272 2004-10-12 06:11:30Z ulfl $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -44,13 +44,14 @@
 #include "dlg_utils.h"
 #include "pcap-util.h"
 #include "capture_combo_utils.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "ringbuffer.h"
 #include <epan/filesystem.h>
 #include "compat_macros.h"
 #include "file_dlg.h"
 #include "help_dlg.h"
 #include "gtkglobals.h"
+#include "cfilter_combo_utils.h"
 
 #ifdef _WIN32
 #include "capture-wpcap.h"
@@ -125,87 +126,6 @@
 }
 
 /*
- * Given text that contains an interface name possibly prefixed by an
- * interface description, extract the interface name.
- */
-static char *
-get_if_name(char *if_text)
-{
-  char *if_name;
-
-#ifdef WIN32
-  /*
-   * We cannot assume that the interface name doesn't contain a space;
-   * some names on Windows OT do.
-   *
-   * We also can't assume it begins with "\Device\", either, as, on
-   * Windows OT, WinPcap doesn't put "\Device\" in front of the name.
-   *
-   * As I remember, we can't assume that the interface description
-   * doesn't contain a colon, either; I think some do.
-   *
-   * We can probably assume that the interface *name* doesn't contain
-   * a colon, however; if any interface name does contain a colon on
-   * Windows, it'll be time to just get rid of the damn interface
-   * descriptions in the drop-down list, have just the names in the
-   * drop-down list, and have a "Browse..." button to browse for interfaces,
-   * with names, descriptions, IP addresses, blah blah blah available when
-   * possible.
-   *
-   * So we search backwards for a colon.  If we don't find it, just
-   * return the entire string; otherwise, skip the colon and any blanks
-   * after it, and return that string.
-   */
-   if_name = if_text + strlen(if_text);
-   for (;;) {
-     if (if_name == if_text) {
-       /* We're at the beginning of the string; return it. */
-       break;
-     }
-     if_name--;
-     if (*if_name == ':') {
-       /*
-        * We've found a colon.
-        * Unfortunately, a colon is used in the string "rpcap://",
-        * which is used in case of a remote capture.
-        * So we'll check to make sure the colon isn't followed by "//";
-        * it'll be followed by a blank if it separates the description
-        * and the interface name.  (We don't wire in "rpcap", in case we
-        * support other protocols in the same syntax.)
-        */
-       if (strncmp(if_name, "://", 3) != 0) {
-         /*
-          * OK, we've found a colon not followed by "//".  Skip blanks
-          * following it.
-          */
-         if_name++;
-         while (*if_name == ' ')
-           if_name++;
-         break;
-       }
-     }
-     /* Keep looking for a colon not followed by "//". */
-   }
-#else
-  /*
-   * There's a space between the interface description and name, and
-   * the interface name shouldn't have a space in it (it doesn't, on
-   * UNIX systems); look backwards in the string for a space.
-   *
-   * (An interface name might, however, contain a colon in it, which
-   * is why we don't use the colon search on UNIX.)
-   */
-  if_name = strrchr(if_text, ' ');
-  if (if_name == NULL) {
-    if_name = if_text;
-  } else {
-    if_name++;
-  }
-#endif
-  return if_name;
-}
-
-/*
  * Keep a static pointer to the current "Capture Options" window, if
  * any, so that if somebody tries to do "Capture:Start" while there's
  * already a "Capture Options" window up, we just pop up the existing
@@ -363,7 +283,7 @@
 		gtk_menu_append(GTK_MENU(menu), menu_item);
 	}
 
-    /* the selected menu item can't be changed, once the option_menu 
+    /* the selected menu item can't be changed, once the option_menu
        is created, so set the matching menu item now */
     /* days */
     if(value >= 60 * 60 * 24) {
@@ -416,7 +336,7 @@
 {
 	GtkWidget *menu, *menu_item;
     int unit;
-        
+
     menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(unit_om));
     menu_item = gtk_menu_get_active(GTK_MENU(menu));
     unit = GPOINTER_TO_INT(OBJECT_GET_DATA(menu_item, "time_unit"));
@@ -466,7 +386,7 @@
 		gtk_menu_append(GTK_MENU(menu), menu_item);
 	}
 
-    /* the selected menu item can't be changed, once the option_menu 
+    /* the selected menu item can't be changed, once the option_menu
        is created, so set the matching menu item now */
     /* gigabytes */
     if(value >= 1024 * 1024 * 1024) {
@@ -485,7 +405,7 @@
             }
         }
     }
-        
+
 	gtk_option_menu_set_menu(GTK_OPTION_MENU(unit_om), menu);
 
     return unit_om;
@@ -519,7 +439,7 @@
 {
 	GtkWidget *menu, *menu_item;
     int unit;
-        
+
     menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(unit_om));
     menu_item = gtk_menu_get_active(GTK_MENU(menu));
     unit = GPOINTER_TO_INT(OBJECT_GET_DATA(menu_item, "size_unit"));
@@ -569,14 +489,14 @@
                 *linktype_hb, *linktype_lb, *linktype_om,
                 *snap_hb, *snap_cb, *snap_sb, *snap_lb,
                 *promisc_cb,
-                *filter_hb, *filter_bt, *filter_te,
+                *filter_hb, *filter_bt, *filter_te, *filter_cm,
 
                 *file_fr, *file_vb,
                 *file_hb, *file_bt, *file_lb, *file_te,
-                *multi_tb, *multi_files_on_cb, 
+                *multi_tb, *multi_files_on_cb,
                 *ring_filesize_cb, *ring_filesize_sb, *ring_filesize_om,
                 *file_duration_cb, *file_duration_sb, *file_duration_om,
-                *ringbuffer_nbf_cb, *ringbuffer_nbf_sb, *ringbuffer_nbf_lb, 
+                *ringbuffer_nbf_cb, *ringbuffer_nbf_sb, *ringbuffer_nbf_lb,
                 *stop_files_cb, *stop_files_sb, *stop_files_lb,
 
                 *limit_fr, *limit_vb, *limit_tb,
@@ -597,7 +517,7 @@
   GtkTooltips   *tooltips;
   GtkAdjustment *snap_adj, *ringbuffer_nbf_adj,
 		*stop_packets_adj, *stop_filesize_adj, *stop_duration_adj, *stop_files_adj, *ring_filesize_adj, *file_duration_adj;
-  GList         *if_list, *combo_list;
+  GList         *if_list, *combo_list, *filter_list;
   int           err;
   int           row;
   char          err_str[PCAP_ERRBUF_SIZE];
@@ -695,7 +615,7 @@
   }
   free_capture_combo_list(combo_list);
   free_interface_list(if_list);
-  gtk_tooltips_set_tip(tooltips, GTK_COMBO(if_cb)->entry, 
+  gtk_tooltips_set_tip(tooltips, GTK_COMBO(if_cb)->entry,
     "Choose which interface (network card) will be used to capture packets from. "
     "Be sure to select the correct one, as it's a common mistake to select the wrong interface.", NULL);
   gtk_box_pack_start(GTK_BOX(if_hb), if_cb, TRUE, TRUE, 6);
@@ -734,7 +654,7 @@
    *
    * We leave it as "multiple link-layer types" for now.
    */
-  gtk_tooltips_set_tip(tooltips, linktype_om, 
+  gtk_tooltips_set_tip(tooltips, linktype_om,
     "The selected interface supports multiple link-layer types; select the desired one.", NULL);
   gtk_box_pack_start (GTK_BOX(linktype_hb), linktype_om, FALSE, FALSE, 0);
   SIGNAL_CONNECT(GTK_ENTRY(GTK_COMBO(if_cb)->entry), "changed",
@@ -750,7 +670,7 @@
   gtk_spin_button_set_value(GTK_SPIN_BUTTON (buffer_size_sb), (gfloat) capture_opts.buffer_size);
   gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (buffer_size_sb), TRUE);
   WIDGET_SET_SIZE(buffer_size_sb, 80, -1);
-  gtk_tooltips_set_tip(tooltips, buffer_size_sb, 
+  gtk_tooltips_set_tip(tooltips, buffer_size_sb,
     "The memory buffer size used while capturing. If you notice packet drops, you can try to increase this size.", NULL);
   gtk_box_pack_start (GTK_BOX(linktype_hb), buffer_size_sb, FALSE, FALSE, 0);
 
@@ -763,7 +683,7 @@
       "Capture packets in _promiscuous mode", accel_group);
   gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(promisc_cb),
 		capture_opts.promisc_mode);
-  gtk_tooltips_set_tip(tooltips, promisc_cb, 
+  gtk_tooltips_set_tip(tooltips, promisc_cb,
     "Usually a network card will only capture the traffic sent to its own network address. "
     "If you want to capture all traffic that the network card can \"see\", mark this option. "
     "See the FAQ for some more details of capturing packets from a switched network.", NULL);
@@ -777,7 +697,7 @@
   gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(snap_cb),
 		capture_opts.has_snaplen);
   SIGNAL_CONNECT(snap_cb, "toggled", capture_prep_adjust_sensitivity, cap_open_w);
-  gtk_tooltips_set_tip(tooltips, snap_cb, 
+  gtk_tooltips_set_tip(tooltips, snap_cb,
     "Limit the maximum number of bytes to be captured from each packet. This size includes the "
     "link-layer header and all subsequent headers. ", NULL);
   gtk_box_pack_start(GTK_BOX(snap_hb), snap_cb, FALSE, FALSE, 0);
@@ -800,21 +720,31 @@
   filter_bt = BUTTON_NEW_FROM_STOCK(ETHEREAL_STOCK_CAPTURE_FILTER_ENTRY);
   SIGNAL_CONNECT(filter_bt, "clicked", capture_filter_construct_cb, NULL);
   SIGNAL_CONNECT(filter_bt, "destroy", filter_button_destroy_cb, NULL);
-  gtk_tooltips_set_tip(tooltips, filter_bt, 
+  gtk_tooltips_set_tip(tooltips, filter_bt,
     "Select a capture filter to reduce the amount of packets to be captured. "
-    "See \"Capture Filters\" in the online help for further information how to use it.", 
+    "See \"Capture Filters\" in the online help for further information how to use it.",
     NULL);
   gtk_box_pack_start(GTK_BOX(filter_hb), filter_bt, FALSE, FALSE, 3);
 
-  filter_te = gtk_entry_new();
-  if (cfile.cfilter) gtk_entry_set_text(GTK_ENTRY(filter_te), cfile.cfilter);
-  OBJECT_SET_DATA(filter_bt, E_FILT_TE_PTR_KEY, filter_te);
-  gtk_tooltips_set_tip(tooltips, filter_te, 
+  /* Create the capture filter combo */
+  filter_cm = gtk_combo_new();
+
+  filter_list = OBJECT_GET_DATA(top_level, E_CFILTER_FL_KEY);
+  gtk_combo_disable_activate(GTK_COMBO(filter_cm));
+  gtk_combo_set_case_sensitive(GTK_COMBO(filter_cm), TRUE);
+  OBJECT_SET_DATA(top_level, E_CFILTER_FL_KEY, filter_list);
+  OBJECT_SET_DATA(top_level, E_CFILTER_CM_KEY, filter_cm);
+  filter_te = GTK_COMBO(filter_cm)->entry;
+
+  gtk_combo_set_popdown_strings(GTK_COMBO(filter_cm), filter_list);
+  if (cfile.cfilter)
+    gtk_entry_set_text(GTK_ENTRY(filter_te), cfile.cfilter);
+  gtk_tooltips_set_tip(tooltips, filter_te,
     "Enter a capture filter to reduce the amount of packets to be captured. "
-    "See \"Capture Filters\" in the online help for further information how to use it.", 
+    "See \"Capture Filters\" in the online help for further information how to use it.",
     NULL);
-  gtk_box_pack_start(GTK_BOX(filter_hb), filter_te, TRUE, TRUE, 3);
-
+  WIDGET_SET_SIZE(filter_cm, 400, -1);
+  gtk_box_pack_start(GTK_BOX(filter_hb), filter_cm, FALSE, FALSE, 3);
   main_hb = gtk_hbox_new(FALSE, 5);
   gtk_container_border_width(GTK_CONTAINER(main_hb), 0);
   gtk_container_add(GTK_CONTAINER(main_vb), main_hb);
@@ -827,6 +757,8 @@
   gtk_container_border_width(GTK_CONTAINER(right_vb), 0);
   gtk_box_pack_start(GTK_BOX(main_hb), right_vb, FALSE, FALSE, 0);
 
+  /* let an eventually capture filters dialog know the text entry to fill in */
+  OBJECT_SET_DATA(filter_bt, E_FILT_TE_PTR_KEY, filter_te);
 
   /* Capture file-related options frame */
   file_fr = gtk_frame_new("Capture File(s)");
@@ -844,14 +776,14 @@
   gtk_box_pack_start(GTK_BOX(file_hb), file_lb, FALSE, FALSE, 3);
 
   file_te = gtk_entry_new();
-  gtk_tooltips_set_tip(tooltips, file_te, 
+  gtk_tooltips_set_tip(tooltips, file_te,
     "Enter the file name to which captured data will be written. "
     "If you don't enter something here, a temporary file will be used.",
     NULL);
   gtk_box_pack_start(GTK_BOX(file_hb), file_te, TRUE, TRUE, 3);
 
   file_bt = BUTTON_NEW_FROM_STOCK(ETHEREAL_STOCK_BROWSE);
-  gtk_tooltips_set_tip(tooltips, file_bt, 
+  gtk_tooltips_set_tip(tooltips, file_bt,
     "Select a file to which captured data will be written, "
     "instead of entering the file name directly. ",
     NULL);
@@ -872,7 +804,7 @@
 		capture_opts.multi_files_on);
   SIGNAL_CONNECT(multi_files_on_cb, "toggled", capture_prep_adjust_sensitivity,
                  cap_open_w);
-  gtk_tooltips_set_tip(tooltips, multi_files_on_cb, 
+  gtk_tooltips_set_tip(tooltips, multi_files_on_cb,
     "Instead of using a single capture file, multiple files will be created. "
     "The generated file names will contain an incrementing number and the start time of the capture.", NULL);
   gtk_table_attach_defaults(GTK_TABLE(multi_tb), multi_files_on_cb, 0, 1, row, row+1);
@@ -883,7 +815,7 @@
   gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(ring_filesize_cb),
 		capture_opts.has_autostop_filesize);
   SIGNAL_CONNECT(ring_filesize_cb, "toggled", capture_prep_adjust_sensitivity, cap_open_w);
-  gtk_tooltips_set_tip(tooltips, ring_filesize_cb, 
+  gtk_tooltips_set_tip(tooltips, ring_filesize_cb,
     "If the selected file size is exceeded, capturing switches to the next file.",
     NULL);
   gtk_table_attach_defaults(GTK_TABLE(multi_tb), ring_filesize_cb, 0, 1, row, row+1);
@@ -907,9 +839,9 @@
   file_duration_cb = gtk_check_button_new_with_label("Next file every");
   gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(file_duration_cb),
 			      capture_opts.has_file_duration);
-  SIGNAL_CONNECT(file_duration_cb, "toggled", 
+  SIGNAL_CONNECT(file_duration_cb, "toggled",
 		 capture_prep_adjust_sensitivity, cap_open_w);
-  gtk_tooltips_set_tip(tooltips, file_duration_cb, 
+  gtk_tooltips_set_tip(tooltips, file_duration_cb,
     "If the selected duration is exceeded, capturing switches to the next file.",
     NULL);
   gtk_table_attach_defaults(GTK_TABLE(multi_tb), file_duration_cb, 0, 1, row, row+1);
@@ -933,7 +865,7 @@
   gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(ringbuffer_nbf_cb),
 		capture_opts.has_ring_num_files);
   SIGNAL_CONNECT(ringbuffer_nbf_cb, "toggled", capture_prep_adjust_sensitivity, cap_open_w);
-  gtk_tooltips_set_tip(tooltips, ringbuffer_nbf_cb, 
+  gtk_tooltips_set_tip(tooltips, ringbuffer_nbf_cb,
     "After capturing has switched to the next file and the given number of files has exceeded, "
     "the oldest file will be removed.",
     NULL);
@@ -957,7 +889,7 @@
   gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(stop_files_cb),
 		capture_opts.has_autostop_files);
   SIGNAL_CONNECT(stop_files_cb, "toggled", capture_prep_adjust_sensitivity, cap_open_w);
-  gtk_tooltips_set_tip(tooltips, stop_files_cb, 
+  gtk_tooltips_set_tip(tooltips, stop_files_cb,
     "Stop capturing after the given number of \"file switches\" have been done.", NULL);
   gtk_table_attach_defaults(GTK_TABLE(multi_tb), stop_files_cb, 0, 1, row, row+1);
 
@@ -993,7 +925,7 @@
   gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(stop_packets_cb),
 		capture_opts.has_autostop_packets);
   SIGNAL_CONNECT(stop_packets_cb, "toggled", capture_prep_adjust_sensitivity, cap_open_w);
-  gtk_tooltips_set_tip(tooltips, stop_packets_cb, 
+  gtk_tooltips_set_tip(tooltips, stop_packets_cb,
     "Stop capturing after the given number of packets have been captured.", NULL);
   gtk_table_attach_defaults(GTK_TABLE(limit_tb), stop_packets_cb, 0, 1, row, row+1);
 
@@ -1014,7 +946,7 @@
   gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(stop_filesize_cb),
 		capture_opts.has_autostop_filesize);
   SIGNAL_CONNECT(stop_filesize_cb, "toggled", capture_prep_adjust_sensitivity, cap_open_w);
-  gtk_tooltips_set_tip(tooltips, stop_filesize_cb, 
+  gtk_tooltips_set_tip(tooltips, stop_filesize_cb,
     "Stop capturing after the given amount of capture data has been captured.", NULL);
   gtk_table_attach_defaults(GTK_TABLE(limit_tb), stop_filesize_cb, 0, 1, row, row+1);
 
@@ -1038,7 +970,7 @@
   gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(stop_duration_cb),
 		capture_opts.has_autostop_duration);
   SIGNAL_CONNECT(stop_duration_cb, "toggled", capture_prep_adjust_sensitivity, cap_open_w);
-  gtk_tooltips_set_tip(tooltips, stop_duration_cb, 
+  gtk_tooltips_set_tip(tooltips, stop_duration_cb,
     "Stop capturing after the given time is exceeded.", NULL);
   gtk_table_attach_defaults(GTK_TABLE(limit_tb), stop_duration_cb, 0, 1, row, row+1);
 
@@ -1070,7 +1002,7 @@
   gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(sync_cb),
 		capture_opts.sync_mode);
   SIGNAL_CONNECT(sync_cb, "toggled", capture_prep_adjust_sensitivity, cap_open_w);
-  gtk_tooltips_set_tip(tooltips, sync_cb, 
+  gtk_tooltips_set_tip(tooltips, sync_cb,
     "Using this option will show the captured packets immediately on the main screen. "
     "Please note: this will slow down capturing, so increased packet drops might appear.", NULL);
   gtk_container_add(GTK_CONTAINER(display_vb), sync_cb);
@@ -1079,7 +1011,7 @@
   auto_scroll_cb = CHECK_BUTTON_NEW_WITH_MNEMONIC(
 		"_Automatic scrolling in live capture", accel_group);
   gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(auto_scroll_cb), auto_scroll_live);
-  gtk_tooltips_set_tip(tooltips, auto_scroll_cb, 
+  gtk_tooltips_set_tip(tooltips, auto_scroll_cb,
     "This will scroll the \"Packet List\" automatically to the latest captured packet, "
     "when the \"Update List of packets in real time\" option is used.", NULL);
   gtk_container_add(GTK_CONTAINER(display_vb), auto_scroll_cb);
@@ -1088,7 +1020,7 @@
   hide_info_cb = CHECK_BUTTON_NEW_WITH_MNEMONIC(
 		"_Hide capture info dialog", accel_group);
   gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(hide_info_cb), !capture_opts.show_info);
-  gtk_tooltips_set_tip(tooltips, hide_info_cb, 
+  gtk_tooltips_set_tip(tooltips, hide_info_cb,
     "Hide the capture info dialog while capturing.", NULL);
   gtk_container_add(GTK_CONTAINER(display_vb), hide_info_cb);
 
@@ -1104,7 +1036,7 @@
 		"Enable _MAC name resolution", accel_group);
   gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(m_resolv_cb),
 		g_resolv_flags & RESOLV_MAC);
-  gtk_tooltips_set_tip(tooltips, m_resolv_cb, 
+  gtk_tooltips_set_tip(tooltips, m_resolv_cb,
     "Perform MAC layer name resolution while capturing.", NULL);
   gtk_container_add(GTK_CONTAINER(resolv_vb), m_resolv_cb);
 
@@ -1112,7 +1044,7 @@
 		"Enable _network name resolution", accel_group);
   gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(n_resolv_cb),
 		g_resolv_flags & RESOLV_NETWORK);
-  gtk_tooltips_set_tip(tooltips, n_resolv_cb, 
+  gtk_tooltips_set_tip(tooltips, n_resolv_cb,
     "Perform network layer name resolution while capturing.", NULL);
   gtk_container_add(GTK_CONTAINER(resolv_vb), n_resolv_cb);
 
@@ -1120,7 +1052,7 @@
 		"Enable _transport name resolution", accel_group);
   gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(t_resolv_cb),
 		g_resolv_flags & RESOLV_TRANSPORT);
-  gtk_tooltips_set_tip(tooltips, t_resolv_cb, 
+  gtk_tooltips_set_tip(tooltips, t_resolv_cb,
     "Perform transport layer name resolution while capturing.", NULL);
   gtk_container_add(GTK_CONTAINER(resolv_vb), t_resolv_cb);
 
@@ -1130,18 +1062,22 @@
 
   ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK);
   SIGNAL_CONNECT(ok_bt, "clicked", capture_prep_ok_cb, cap_open_w);
-  gtk_tooltips_set_tip(tooltips, ok_bt, 
+  gtk_tooltips_set_tip(tooltips, ok_bt,
     "Start the capture process.", NULL);
 
   cancel_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL);
-  gtk_tooltips_set_tip(tooltips, cancel_bt, 
+  gtk_tooltips_set_tip(tooltips, cancel_bt,
     "Cancel and exit dialog.", NULL);
   window_set_cancel_button(cap_open_w, cancel_bt, window_cancel_button_cb);
 
   help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP);
-  gtk_tooltips_set_tip(tooltips, help_bt, 
+  gtk_tooltips_set_tip(tooltips, help_bt,
     "Show help about capturing.", NULL);
+#ifdef ETHEREAL_EUG_DIR
+  SIGNAL_CONNECT(help_bt, "clicked", url_page_cb, HELP_CAPTURE_OPTIONS_DIALOG);
+#else
   SIGNAL_CONNECT(help_bt, "clicked", help_topic_cb, "Capturing");
+#endif
 
   gtk_widget_grab_default(ok_bt);
 
@@ -1223,11 +1159,14 @@
   SIGNAL_CONNECT(cap_open_w, "delete_event", window_delete_event_cb, NULL);
   SIGNAL_CONNECT(cap_open_w, "destroy", capture_prep_destroy_cb, NULL);
 
+  /* Give the initial focus to the "Filter" entry box. */
+  gtk_widget_grab_focus(filter_te);
+
   gtk_widget_show_all(cap_open_w);
   window_present(cap_open_w);
 }
 
-static void 
+static void
 capture_prep_answered_cb(gpointer dialog _U_, gint btn, gpointer data)
 {
     switch(btn) {
@@ -1276,13 +1215,13 @@
 static void
 capture_prep_file_cb(GtkWidget *file_bt, GtkWidget *file_te)
 {
-    file_selection_browse(file_bt, file_te, "Ethereal: Specify a Capture File", FILE_SELECTION_OPEN);
+    file_selection_browse(file_bt, file_te, "Ethereal: Specify a Capture File", FILE_SELECTION_WRITE_BROWSE);
 }
 
 
 static void
 capture_prep_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w) {
-  GtkWidget *if_cb, *snap_cb, *snap_sb, *promisc_cb, *filter_te,
+  GtkWidget *if_cb, *snap_cb, *snap_sb, *promisc_cb, *filter_te, *filter_cm,
             *file_te, *multi_files_on_cb, *ringbuffer_nbf_sb, *ringbuffer_nbf_cb,
             *linktype_om, *sync_cb, *auto_scroll_cb, *hide_info_cb,
             *stop_packets_cb, *stop_packets_sb,
@@ -1313,7 +1252,8 @@
   buffer_size_sb = (GtkWidget *) OBJECT_GET_DATA(parent_w, E_CAP_BUFFER_SIZE_SB_KEY);
 #endif
   promisc_cb = (GtkWidget *) OBJECT_GET_DATA(parent_w, E_CAP_PROMISC_KEY);
-  filter_te = (GtkWidget *) OBJECT_GET_DATA(parent_w, E_CAP_FILT_KEY);
+  filter_cm = OBJECT_GET_DATA(top_level, E_CFILTER_CM_KEY);
+  filter_te = GTK_COMBO(filter_cm)->entry;
   file_te   = (GtkWidget *) OBJECT_GET_DATA(parent_w, E_CAP_FILE_TE_KEY);
   multi_files_on_cb = (GtkWidget *) OBJECT_GET_DATA(parent_w, E_CAP_MULTI_FILES_ON_CB_KEY);
   ringbuffer_nbf_cb = (GtkWidget *) OBJECT_GET_DATA(parent_w, E_CAP_RING_NBF_CB_KEY);
@@ -1360,7 +1300,7 @@
       GPOINTER_TO_INT(OBJECT_GET_DATA(linktype_om, E_CAP_OM_LT_VALUE_KEY));
 
 #ifdef _WIN32
-  capture_opts.buffer_size = 
+  capture_opts.buffer_size =
     gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(buffer_size_sb));
 #endif
 
@@ -1439,7 +1379,7 @@
     g_resolv_flags |= RESOLV_TRANSPORT;
 
   capture_opts.has_ring_num_files =
-    gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ringbuffer_nbf_cb));  
+    gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ringbuffer_nbf_cb));
 
   capture_opts.ring_num_files =
     gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(ringbuffer_nbf_sb));
@@ -1469,7 +1409,7 @@
           PRIMARY_TEXT_START "Multiple files: Requested filesize too large!\n\n" PRIMARY_TEXT_END
           "The setting \"Next file every x byte(s)\" can't be greater than %u bytes (2GB).", G_MAXINT);
         return;
-      }        
+      }
     }
 
     /* test if the settings are ok for a ringbuffer */
@@ -1499,7 +1439,7 @@
           PRIMARY_TEXT_START "Stop Capture: Requested filesize too large!\n\n" PRIMARY_TEXT_END
           "The setting \"... after x byte(s)\" can't be greater than %u bytes (2GB).", G_MAXINT);
         return;
-      }        
+      }
     }
   }
 
@@ -1520,7 +1460,11 @@
 
   window_destroy(GTK_WIDGET(parent_w));
 
-  do_capture(save_file);
+  if (do_capture(save_file)) {
+    /* The capture succeeded, which means the capture filter syntax is
+       valid; add this capture filter to the recent capture filter list. */
+    cfilter_combo_add_recent(cfile.cfilter);
+  }
   if (save_file != NULL)
     g_free(save_file);
 }
@@ -1663,7 +1607,7 @@
     gtk_widget_set_sensitive(GTK_WIDGET(stop_filesize_om), FALSE);
 
     gtk_widget_set_sensitive(GTK_WIDGET(stop_files_cb), TRUE);
-    gtk_widget_set_sensitive(GTK_WIDGET(stop_files_sb), 
+    gtk_widget_set_sensitive(GTK_WIDGET(stop_files_sb),
           gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(stop_files_cb)));
     gtk_widget_set_sensitive(GTK_WIDGET(stop_files_lb),
           gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(stop_files_cb)));
diff -urN ethereal-0.10.6/gtk/capture_if_dlg.c ethereal-0.10.7/gtk/capture_if_dlg.c
--- ethereal-0.10.6/gtk/capture_if_dlg.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/capture_if_dlg.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* capture_if_dlg.c
  * Routines for the capture interface dialog
  *
- * $Id: capture_if_dlg.c 11427 2004-07-19 02:27:17Z guy $
+ * $Id: capture_if_dlg.c 11972 2004-09-11 23:03:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -193,7 +193,7 @@
    */
   if (if_dlg_data->pch) {
     if(pcap_stats(if_dlg_data->pch, &stats) >= 0) {
-#if WIN32
+#ifdef _WIN32
       diff = stats.ps_recv - if_dlg_data->last_packets;
       if_dlg_data->last_packets = stats.ps_recv;
 #else
@@ -381,7 +381,12 @@
 
   row = 0;
 
-#ifndef WIN32
+#ifndef _WIN32
+  /*
+   * On Windows, device names are generally not meaningful - NT 5
+   * uses long blobs with GUIDs in them, for example - so we don't
+   * bother showing them.
+   */
   if_lb = gtk_label_new("Device");
   gtk_table_attach_defaults(GTK_TABLE(if_tb), if_lb, 0, 1, row, row+1);
 #endif
@@ -414,7 +419,7 @@
       /* device name */
       if_dlg_data->device_lb = gtk_label_new(if_info->name);
       if_dlg_data->device = if_info->name;
-#ifndef WIN32
+#ifndef _WIN32
       gtk_misc_set_alignment(GTK_MISC(if_dlg_data->device_lb), 0.0, 0.5);
       gtk_table_attach_defaults(GTK_TABLE(if_tb), if_dlg_data->device_lb, 0, 1, row, row+1);
 #endif
diff -urN ethereal-0.10.6/gtk/capture_prefs.c ethereal-0.10.7/gtk/capture_prefs.c
--- ethereal-0.10.6/gtk/capture_prefs.c	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/capture_prefs.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* capture_prefs.c
  * Dialog box for capture preferences
  *
- * $Id: capture_prefs.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: capture_prefs.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -35,7 +35,7 @@
 #include "globals.h"
 #include "capture_prefs.h"
 #include "gtkglobals.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "prefs_dlg.h"
 #include "ui_util.h"
 #include "dlg_utils.h"
diff -urN ethereal-0.10.6/gtk/cfilter_combo_utils.c ethereal-0.10.7/gtk/cfilter_combo_utils.c
--- ethereal-0.10.6/gtk/cfilter_combo_utils.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/gtk/cfilter_combo_utils.c	2004-10-20 17:34:31.000000000 -0500
@@ -0,0 +1,89 @@
+/* cfilter_combo_utils.c
+ * Capture filter combo box routines
+ *
+ * $Id: cfilter_combo_utils.c 12225 2004-10-07 03:50:16Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#include <string.h>
+#include <gtk/gtk.h>
+#include "compat_macros.h"
+#include "main.h"
+#include "gtkglobals.h"
+#include "cfilter_combo_utils.h"
+#include "recent.h"
+#ifdef HAVE_LIBPCAP
+#include <pcap.h>
+#endif
+
+/* XXX: use a preference for this setting! */
+static guint cfilter_combo_max_recent = 20;
+
+gboolean
+cfilter_combo_add(gchar *s) {
+  GList     *li;
+  GList     *fl = OBJECT_GET_DATA(top_level, E_CFILTER_FL_KEY);
+
+  li = g_list_first(fl);
+  while (li) {
+    /* If the filter is already in the list, remove the old one and
+     * append the new one at the latest position (at g_list_append() below) */
+    if (li->data && strcmp(s, li->data) == 0) {
+      fl = g_list_remove(fl, li->data);
+      break;
+    }
+    li = li->next;
+  }
+  fl = g_list_append(fl, s);
+  OBJECT_SET_DATA(top_level, E_CFILTER_FL_KEY, fl);
+  return TRUE;
+}
+
+
+/* write all non empty capture filters (until maximum count)
+ * of the combo box GList to the user's recent file */
+void
+ cfilter_combo_recent_write_all(FILE *rf) {
+   GList     *filter_list = OBJECT_GET_DATA(top_level, E_CFILTER_FL_KEY);
+   GList     *li;
+   guint      max_count = 0;
+
+   /* write all non empty display filter strings to the recent file (until max count) */
+   li = g_list_first(filter_list);
+   while ( li && (max_count++ <= cfilter_combo_max_recent) ) {
+     if (strlen(li->data)) {
+       fprintf (rf, RECENT_KEY_CAPTURE_FILTER ": %s\n", (char *)li->data);
+     }
+     li = li->next;
+   }
+}
+
+/* add a capture filter coming from the user's recent file to the cfilter combo box */
+gboolean
+ cfilter_combo_add_recent(gchar *s) {
+   gchar *dup;
+
+   dup = g_strdup(s);
+   if (!cfilter_combo_add(dup)) {
+     g_free(dup);
+     return FALSE;
+   }
+   return TRUE;
+}
diff -urN ethereal-0.10.6/gtk/cfilter_combo_utils.h ethereal-0.10.7/gtk/cfilter_combo_utils.h
--- ethereal-0.10.6/gtk/cfilter_combo_utils.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/gtk/cfilter_combo_utils.h	2004-10-20 17:34:31.000000000 -0500
@@ -0,0 +1,30 @@
+/* cfilter_combo_utils.h
+ * Capture filter combo box routines
+ *
+ * $Id: cfilter_combo_utils.h 12225 2004-10-07 03:50:16Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+extern void cfilter_combo_recent_write_all(FILE *rf);
+extern gboolean cfilter_combo_add_recent(gchar *s);
+
+#define E_CFILTER_CM_KEY          "capture_filter_combo"
+#define E_CFILTER_FL_KEY          "capture_filter_list"
+#define RECENT_KEY_CAPTURE_FILTER "recent.capture_filter"
diff -urN ethereal-0.10.6/gtk/color_dlg.c ethereal-0.10.7/gtk/color_dlg.c
--- ethereal-0.10.6/gtk/color_dlg.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/color_dlg.c	2004-10-20 17:34:32.000000000 -0500
@@ -1,7 +1,7 @@
 /* color_dlg.c
  * Definitions for dialog boxes for color filters
  *
- * $Id: color_dlg.c 11497 2004-07-24 00:35:13Z guy $
+ * $Id: color_dlg.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -46,7 +46,7 @@
 #include "filter_dlg.h"
 #include "file_dlg.h"
 #include "gtkglobals.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 static GtkWidget* colorize_dialog_new(char *filter);
 static void add_filter_to_list(gpointer filter_arg, gpointer list_arg);
diff -urN ethereal-0.10.6/gtk/column_prefs.c ethereal-0.10.7/gtk/column_prefs.c
--- ethereal-0.10.6/gtk/column_prefs.c	2004-08-12 17:41:48.000000000 -0500
+++ ethereal-0.10.7/gtk/column_prefs.c	2004-10-20 17:34:32.000000000 -0500
@@ -1,7 +1,7 @@
 /* column_prefs.c
  * Dialog box for column preferences
  *
- * $Id: column_prefs.c 11575 2004-07-31 07:04:32Z ulfl $
+ * $Id: column_prefs.c 12131 2004-09-29 02:54:22Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -31,8 +31,8 @@
 #include "globals.h"
 #include "column_prefs.h"
 #include "gtkglobals.h"
-#include "prefs.h"
-#include "column.h"
+#include <epan/prefs.h>
+#include <epan/column.h>
 #include "compat_macros.h"
 #include "ui_util.h"
 
diff -urN ethereal-0.10.6/gtk/compat_macros.h ethereal-0.10.7/gtk/compat_macros.h
--- ethereal-0.10.6/gtk/compat_macros.h	2004-08-12 17:41:48.000000000 -0500
+++ ethereal-0.10.7/gtk/compat_macros.h	2004-10-20 17:34:32.000000000 -0500
@@ -1,7 +1,7 @@
 /* compat_macros.h
  * GTK-related Global defines, etc.
  *
- * $Id: compat_macros.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: compat_macros.h 12113 2004-09-27 22:21:31Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -292,7 +292,7 @@
 #define ETHEREAL_STOCK_LABEL_DISPLAY_FILTER           "_Filter"
 #define ETHEREAL_STOCK_LABEL_DISPLAY_FILTER_ENTRY     "_Filter:"
 #define ETHEREAL_STOCK_LABEL_PREFS                    "_Prefs"
-#define ETHEREAL_STOCK_LABEL_BROWSE                   "" /* icon only */
+#define ETHEREAL_STOCK_LABEL_BROWSE                   "_Browse..."
 #define ETHEREAL_STOCK_LABEL_CREATE_STAT              "Create _Stat"
 #define ETHEREAL_STOCK_LABEL_EXPORT                   "_Export..."
 #define ETHEREAL_STOCK_LABEL_IMPORT                   "_Import..."
@@ -314,7 +314,7 @@
 #define ETHEREAL_STOCK_IMPORT                   "Ethereal_Stock_Import"
 #define ETHEREAL_STOCK_EDIT                     "Ethereal_Stock_Edit"
 #define ETHEREAL_STOCK_ADD_EXPRESSION           "Ethereal_Stock_Edit_Add_Expression"
-#define ETHEREAL_STOCK_DONT_SAVE		"Ethereal_Stock_Continue_without_Saving"
+#define ETHEREAL_STOCK_DONT_SAVE                "Ethereal_Stock_Continue_without_Saving"
 
 #define BUTTON_NEW_FROM_STOCK(stock_id) \
 gtk_button_new_from_stock(stock_id);
diff -urN ethereal-0.10.6/gtk/conversations_eth.c ethereal-0.10.7/gtk/conversations_eth.c
--- ethereal-0.10.6/gtk/conversations_eth.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/conversations_eth.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* conversations_eth.c
  * conversations_eth   2003 Ronnie Sahlberg
  *
- * $Id: conversations_eth.c 11448 2004-07-20 20:56:53Z ulfl $
+ * $Id: conversations_eth.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <string.h>
 #include "epan/packet.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "conversations_table.h"
 #include <epan/dissectors/packet-eth.h>
diff -urN ethereal-0.10.6/gtk/conversations_fc.c ethereal-0.10.7/gtk/conversations_fc.c
--- ethereal-0.10.6/gtk/conversations_fc.c	2004-08-12 17:41:43.000000000 -0500
+++ ethereal-0.10.7/gtk/conversations_fc.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* conversations_fc.c
  * conversations_fc   2003 Ronnie Sahlberg
  *
- * $Id: conversations_fc.c 11448 2004-07-20 20:56:53Z ulfl $
+ * $Id: conversations_fc.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <string.h>
 #include "epan/packet.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "conversations_table.h"
 #include <epan/dissectors/packet-fc.h>
diff -urN ethereal-0.10.6/gtk/conversations_fddi.c ethereal-0.10.7/gtk/conversations_fddi.c
--- ethereal-0.10.6/gtk/conversations_fddi.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/conversations_fddi.c	2004-10-20 17:34:31.000000000 -0500
@@ -1,7 +1,7 @@
 /* conversations_fddi.c
  * conversations_fddi   2003 Ronnie Sahlberg
  *
- * $Id: conversations_fddi.c 11448 2004-07-20 20:56:53Z ulfl $
+ * $Id: conversations_fddi.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <string.h>
 #include "epan/packet.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "conversations_table.h"
 #include <epan/dissectors/packet-fddi.h>
diff -urN ethereal-0.10.6/gtk/conversations_ip.c ethereal-0.10.7/gtk/conversations_ip.c
--- ethereal-0.10.6/gtk/conversations_ip.c	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/conversations_ip.c	2004-10-20 17:34:31.000000000 -0500
@@ -1,7 +1,7 @@
 /* conversations_ip.c
  * conversations_ip   2003 Ronnie Sahlberg
  *
- * $Id: conversations_ip.c 11448 2004-07-20 20:56:53Z ulfl $
+ * $Id: conversations_ip.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <string.h>
 #include "epan/packet.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "conversations_table.h"
 #include <epan/dissectors/packet-ip.h>
diff -urN ethereal-0.10.6/gtk/conversations_ipx.c ethereal-0.10.7/gtk/conversations_ipx.c
--- ethereal-0.10.6/gtk/conversations_ipx.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/conversations_ipx.c	2004-10-20 17:34:31.000000000 -0500
@@ -1,7 +1,7 @@
 /* conversations_ipx.c
  * conversations_ipx   2003 Ronnie Sahlberg
  *
- * $Id: conversations_ipx.c 11448 2004-07-20 20:56:53Z ulfl $
+ * $Id: conversations_ipx.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <string.h>
 #include "epan/packet.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "conversations_table.h"
 #include <epan/dissectors/packet-ipx.h>
diff -urN ethereal-0.10.6/gtk/conversations_table.c ethereal-0.10.7/gtk/conversations_table.c
--- ethereal-0.10.6/gtk/conversations_table.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/conversations_table.c	2004-10-20 17:34:31.000000000 -0500
@@ -4,7 +4,7 @@
  * conversations_table   2003 Ronnie Sahlberg
  * Helper routines common to all endpoint conversations tap.
  *
- * $Id: conversations_table.c 11624 2004-08-08 03:56:02Z gerald $
+ * $Id: conversations_table.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -46,7 +46,7 @@
 #include "image/clist_descend.xpm"
 #include "simple_dialog.h"
 #include "globals.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "gtk/find_dlg.h"
 #include "color.h"
 #include "gtk/color_dlg.h"
diff -urN ethereal-0.10.6/gtk/conversations_tcpip.c ethereal-0.10.7/gtk/conversations_tcpip.c
--- ethereal-0.10.6/gtk/conversations_tcpip.c	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/conversations_tcpip.c	2004-10-20 17:34:31.000000000 -0500
@@ -1,7 +1,7 @@
 /* conversations_tcpip.c
  * conversations_tcpip   2003 Ronnie Sahlberg
  *
- * $Id: conversations_tcpip.c 11448 2004-07-20 20:56:53Z ulfl $
+ * $Id: conversations_tcpip.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <string.h>
 #include "epan/packet.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "conversations_table.h"
 #include <epan/dissectors/packet-tcp.h>
diff -urN ethereal-0.10.6/gtk/conversations_tr.c ethereal-0.10.7/gtk/conversations_tr.c
--- ethereal-0.10.6/gtk/conversations_tr.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/conversations_tr.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* conversations_tr.c
  * conversations_tr   2003 Ronnie Sahlberg
  *
- * $Id: conversations_tr.c 11448 2004-07-20 20:56:53Z ulfl $
+ * $Id: conversations_tr.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <string.h>
 #include "epan/packet.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "conversations_table.h"
 #include <epan/dissectors/packet-tr.h>
diff -urN ethereal-0.10.6/gtk/conversations_udpip.c ethereal-0.10.7/gtk/conversations_udpip.c
--- ethereal-0.10.6/gtk/conversations_udpip.c	2004-08-12 17:41:43.000000000 -0500
+++ ethereal-0.10.7/gtk/conversations_udpip.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* conversations_udpip.c
  * conversations_udpip   2003 Ronnie Sahlberg
  *
- * $Id: conversations_udpip.c 11448 2004-07-20 20:56:53Z ulfl $
+ * $Id: conversations_udpip.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <string.h>
 #include "epan/packet.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "conversations_table.h"
 #include <epan/dissectors/packet-udp.h>
diff -urN ethereal-0.10.6/gtk/dcerpc_stat.c ethereal-0.10.7/gtk/dcerpc_stat.c
--- ethereal-0.10.6/gtk/dcerpc_stat.c	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/dcerpc_stat.c	2004-10-20 17:34:31.000000000 -0500
@@ -1,7 +1,7 @@
 /* dcerpc_stat.c
  * dcerpc_stat   2002 Ronnie Sahlberg
  *
- * $Id: dcerpc_stat.c 11436 2004-07-19 21:42:01Z ulfl $
+ * $Id: dcerpc_stat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -44,7 +44,7 @@
 #include "simple_dialog.h"
 #include "dlg_utils.h"
 #include "ui_util.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include <epan/dissectors/packet-dcerpc.h>
 #include "../globals.h"
diff -urN ethereal-0.10.6/gtk/decode_as_dcerpc.c ethereal-0.10.7/gtk/decode_as_dcerpc.c
--- ethereal-0.10.6/gtk/decode_as_dcerpc.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/gtk/decode_as_dcerpc.c	2004-10-20 17:34:32.000000000 -0500
@@ -0,0 +1,451 @@
+/* decode_as_dcerpc.c
+ *
+ * $Id: decode_as_dcerpc.c 12130 2004-09-29 00:52:45Z guy $
+ *
+ * Routines to modify dcerpc bindings on the fly.
+ *
+ * Copyright 2004 Ulf Lamping
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <gtk/gtk.h>
+#include <string.h>
+
+#include "decode_as_dlg.h"
+#include "dlg_utils.h"
+#include "globals.h"
+#include "simple_dialog.h"
+#include <epan/packet.h>
+#include <epan/ipproto.h>
+#include "ui_util.h"
+#include <epan/epan_dissect.h>
+#include "compat_macros.h"
+#include "decode_as_dcerpc.h"
+
+#include <epan/dissectors/packet-dcerpc.h>
+
+
+/**************************************************/
+/*                Typedefs & Enums                */
+/**************************************************/
+
+/* list of dcerpc "Decode As" bindings */
+GSList *decode_dcerpc_bindings = NULL;
+
+/**************************************************/
+/*            Global Functions                    */
+/**************************************************/
+
+/* inject one of our bindings into the dcerpc binding table */
+static void 
+decode_dcerpc_inject_binding(gpointer data, gpointer user_data)
+{
+    dcerpc_add_conv_to_bind_table((decode_dcerpc_bind_values_t *) data);
+}
+
+
+/* inject all of our bindings into the dcerpc binding table */
+static void 
+decode_dcerpc_inject_bindings(gpointer data) {
+    g_slist_foreach(decode_dcerpc_bindings, decode_dcerpc_inject_binding, NULL /* user_data */);
+}
+
+
+/* init this file */
+void 
+decode_dcerpc_init(void) {
+    GHook*      hook_init_proto;
+
+
+    /* add a hook function to the dcerpc init_protocols hook */
+    hook_init_proto = g_hook_alloc(&dcerpc_hooks_init_protos);
+    hook_init_proto->func = decode_dcerpc_inject_bindings;
+    g_hook_prepend(&dcerpc_hooks_init_protos, hook_init_proto);
+}
+
+
+/* clone a binding (uses g_malloc) */
+static decode_dcerpc_bind_values_t *
+decode_dcerpc_binding_clone(decode_dcerpc_bind_values_t *binding_in)
+{
+    decode_dcerpc_bind_values_t *stored_binding;
+
+    stored_binding = g_malloc(sizeof(decode_dcerpc_bind_values_t));
+    *stored_binding = *binding_in;
+    COPY_ADDRESS(&stored_binding->addr_a, &binding_in->addr_a);
+    COPY_ADDRESS(&stored_binding->addr_b, &binding_in->addr_b);
+    stored_binding->ifname = g_string_new(binding_in->ifname->str);
+
+    return stored_binding;
+}
+
+
+/* free a binding */
+void 
+decode_dcerpc_binding_free(void *binding_in)
+{
+    decode_dcerpc_bind_values_t *binding = binding_in;
+
+    g_free((void *) binding->addr_a.data);
+    g_free((void *) binding->addr_b.data);
+    if(binding->ifname)
+        g_string_free(binding->ifname, TRUE);
+    g_free(binding);
+}
+
+
+/* compare two bindings (except the interface related things, e.g. uuid) */
+static gint
+decode_dcerpc_binding_cmp(gconstpointer a, gconstpointer b)
+{
+    const decode_dcerpc_bind_values_t *binding_a = a;
+    const decode_dcerpc_bind_values_t *binding_b = b;
+
+
+    /* don't compare uuid and ver! */
+    if( 
+        ADDRESSES_EQUAL(&binding_a->addr_a, &binding_b->addr_a) &&
+        ADDRESSES_EQUAL(&binding_a->addr_b, &binding_b->addr_b) &&
+        binding_a->ptype == binding_b->ptype &&
+        binding_a->port_a == binding_b->port_a &&
+        binding_a->port_b == binding_b->port_b &&
+        binding_a->ctx_id == binding_b->ctx_id &&
+        binding_a->smb_fid == binding_b->smb_fid)
+    {
+        /* equal */
+        return 0;
+    }
+
+    /* unequal */
+    return 1;
+}
+
+
+/**************************************************/
+/*             Show Changed Bindings              */
+/**************************************************/
+
+
+/* add a single binding to the Show list */
+static void
+decode_dcerpc_add_show_list_single(gpointer data, gpointer user_data)
+{
+    gchar      string1[20];
+
+    
+    decode_dcerpc_bind_values_t *binding = data;
+
+    g_snprintf(string1, sizeof(string1), "ctx_id: %u", binding->ctx_id);
+
+    decode_add_to_show_list (
+        user_data, 
+        "DCE-RPC", 
+        string1, 
+        "-", 
+        binding->ifname->str);
+}
+
+
+/* add all bindings to the Show list */
+void
+decode_dcerpc_add_show_list(gpointer user_data)
+{
+    g_slist_foreach(decode_dcerpc_bindings, decode_dcerpc_add_show_list_single, user_data);
+}
+
+
+/**************************************************/
+/*         Modify the binding routines            */
+/**************************************************/
+
+
+/* removes all bindings */
+void
+decode_dcerpc_reset_all(void)
+{
+    decode_dcerpc_bind_values_t *binding;
+
+    while(decode_dcerpc_bindings) {
+        binding = decode_dcerpc_bindings->data;
+
+        decode_dcerpc_binding_free(binding);
+        decode_dcerpc_bindings = g_slist_remove(
+            decode_dcerpc_bindings, 
+            decode_dcerpc_bindings->data);
+    }
+}
+
+
+/* remove a binding (looking the same way as the given one) */
+static void
+decode_dcerpc_binding_reset(
+gchar *table_name, 
+decode_dcerpc_bind_values_t *binding)
+{
+    GSList *le;
+    decode_dcerpc_bind_values_t *old_binding;
+
+
+    /* find the old binding (if it exists) */
+    le = g_slist_find_custom(decode_dcerpc_bindings,
+                                             binding,
+                                             decode_dcerpc_binding_cmp);
+    if(le == NULL)
+        return;
+
+    old_binding = le->data;
+
+    decode_dcerpc_bindings = g_slist_remove(decode_dcerpc_bindings, le->data);
+
+    g_free((void *) old_binding->addr_a.data);
+    g_free((void *) old_binding->addr_b.data);
+    g_string_free(old_binding->ifname, TRUE);
+    g_free(old_binding);
+}
+
+
+/* a binding has changed (remove a previously existing one) */
+static void
+decode_dcerpc_binding_change(
+gchar *table_name, 
+decode_dcerpc_bind_values_t *binding)
+{
+
+    decode_dcerpc_bind_values_t *stored_binding;
+
+    /* remove a probably existing old binding */
+    decode_dcerpc_binding_reset(table_name, binding);
+
+    /* clone the new binding and append it to the list */
+    stored_binding = decode_dcerpc_binding_clone(binding);
+    decode_dcerpc_bindings = g_slist_append (decode_dcerpc_bindings, stored_binding);
+}
+
+
+/* a binding has changed (add/replace/remove it) */
+static void
+decode_change_one_dcerpc_binding(gchar *table_name, decode_dcerpc_bind_values_t *binding, GtkWidget *list)
+{
+    dcerpc_uuid_key     *key;
+    gchar              *abbrev;
+#if GTK_MAJOR_VERSION < 2
+    gint               row;
+#else
+    GtkTreeSelection  *selection;
+    GtkTreeModel      *model;
+    GtkTreeIter        iter;
+#endif
+
+#if GTK_MAJOR_VERSION < 2
+    if (!GTK_CLIST(list)->selection)
+    {
+	abbrev = NULL;
+	key = NULL;
+    } else {
+	row = GPOINTER_TO_INT(GTK_CLIST(list)->selection->data);
+	key = gtk_clist_get_row_data(GTK_CLIST(list), row);
+	gtk_clist_get_text(GTK_CLIST(list), row, E_LIST_S_PROTO_NAME, &abbrev);
+    }
+#else
+    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
+    if (gtk_tree_selection_get_selected(selection, &model, &iter) == FALSE)
+    {
+	abbrev = NULL;
+	key = NULL;
+    } else {
+        gtk_tree_model_get(model, &iter, E_LIST_S_PROTO_NAME, &abbrev,
+                           E_LIST_S_TABLE+1, &key, -1);
+    }
+#endif
+
+    if (abbrev != NULL && strcmp(abbrev, "(default)") == 0) {
+        decode_dcerpc_binding_reset(table_name, binding);
+    } else {
+        binding->ifname = g_string_new(abbrev);
+        binding->uuid = key->uuid;
+        binding->ver = key->ver;
+        decode_dcerpc_binding_change(table_name, binding);
+    }
+#if GTK_MAJOR_VERSION >= 2
+    if (abbrev != NULL)
+	g_free(abbrev);
+#endif
+}
+
+
+
+/**************************************************/
+/* Action routines for the "Decode As..." dialog  */
+/*   - called when the OK button pressed          */
+/**************************************************/
+
+/*
+ * This routine is called when the user clicks the "OK" button in the
+ * "Decode As..." dialog window and the DCE-RPC page is foremost.
+ * This routine takes care of making any changes requested to the DCE-RPC 
+ * binding tables.
+ *
+ * @param notebook_pg A pointer to the "DCE-RPC" notebook page.
+ */
+static void
+decode_dcerpc(GtkWidget *notebook_pg)
+{
+    GtkWidget *list;
+    gchar *table_name;
+    decode_dcerpc_bind_values_t *binding;
+
+
+    list = OBJECT_GET_DATA(notebook_pg, E_PAGE_LIST);
+    if (requested_action == E_DECODE_NO)
+#if GTK_MAJOR_VERSION < 2
+	gtk_clist_unselect_all(GTK_CLIST(list));
+#else
+	gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(list)));
+#endif
+
+    binding = OBJECT_GET_DATA(notebook_pg, E_PAGE_BINDING);
+
+    /*table_name = OBJECT_GET_DATA(notebook_pg, E_PAGE_TABLE);*/
+    table_name = "DCE-RPC";
+    decode_change_one_dcerpc_binding(table_name, binding, list);
+}
+
+
+/**************************************************/
+/*                  Dialog setup                  */
+/**************************************************/
+
+
+/* add an interface to the list */
+static void 
+decode_dcerpc_add_to_list(gpointer key, gpointer value, gpointer user_data)
+{
+    dcerpc_uuid_key *k = key;
+    dcerpc_uuid_value *v = value;
+
+    if(strcmp(v->name, "(none)"))
+        decode_add_to_list("DCE-RPC", v->name, key, user_data);
+}
+
+
+/* add all interfaces to the list */
+static GtkWidget *
+decode_add_dcerpc_menu (GtkWidget *page, gchar *table_name)
+{
+    GtkWidget *scrolled_window;
+    GtkWidget *list;
+
+    decode_list_menu_start(page, &list, &scrolled_window);
+    g_hash_table_foreach(dcerpc_uuids, decode_dcerpc_add_to_list, list);
+    decode_list_menu_finish(list);
+    return(scrolled_window);
+}
+
+
+/* add a DCE-RPC page to the notebook */
+GtkWidget *
+decode_dcerpc_add_page (packet_info *pinfo)
+{
+    GtkWidget	*page_hb, *info_vb, *label, *scrolled_window;
+    GString     *gs = g_string_new("");
+    GString     *gs2 = g_string_new("");
+    decode_dcerpc_bind_values_t *binding;
+
+
+    /* clone binding */
+    binding = g_malloc(sizeof(decode_dcerpc_bind_values_t));
+    COPY_ADDRESS(&binding->addr_a, &pinfo->src);
+    COPY_ADDRESS(&binding->addr_b, &pinfo->dst);
+    binding->ptype = pinfo->ptype;
+    binding->port_a = pinfo->srcport;
+    binding->port_b = pinfo->destport;
+    binding->ctx_id = pinfo->dcectxid;
+    binding->smb_fid = dcerpc_get_transport_salt(pinfo, pinfo->dcetransporttype);
+    binding->ifname = NULL;
+    /*binding->uuid = NULL;*/
+    binding->ver = 0;
+
+    /* create page content */
+    page_hb = gtk_hbox_new(FALSE, 5);
+    OBJECT_SET_DATA(page_hb, E_PAGE_ACTION, decode_dcerpc);
+    OBJECT_SET_DATA(page_hb, E_PAGE_TABLE, "DCE-RPC");
+    OBJECT_SET_DATA(page_hb, E_PAGE_TITLE, "DCE-RPC");
+    OBJECT_SET_DATA(page_hb, E_PAGE_BINDING, binding);
+    
+    info_vb = gtk_vbox_new(FALSE, 5);
+    gtk_box_pack_start(GTK_BOX(page_hb), info_vb, TRUE, TRUE, 0);
+
+    /* Always enabled */
+    label = gtk_label_new("Replace binding between:");
+    gtk_box_pack_start(GTK_BOX(info_vb), label, TRUE, TRUE, 0);
+
+    switch(binding->ptype) {
+    case(PT_TCP):
+        g_string_sprintf(gs2, "TCP port");
+        break;
+    case(PT_UDP):
+        g_string_sprintf(gs2, "UDP port");
+        break;
+    default:
+        g_string_sprintf(gs2, "Unknown port type");
+    }
+
+    /* XXX - how to print the address binding->addr_a? */
+    g_string_sprintf(gs, "Address: ToBeDone %s: %u", gs2->str, binding->port_a);
+    label = gtk_label_new(gs->str);
+    gtk_box_pack_start(GTK_BOX(info_vb), label, TRUE, TRUE, 0);
+
+    label = gtk_label_new("&");
+    gtk_box_pack_start(GTK_BOX(info_vb), label, TRUE, TRUE, 0);
+
+    /* XXX - how to print the address binding->addr_b? */
+    g_string_sprintf(gs, "Address: ToBeDone %s: %u", gs2->str, binding->port_b);
+    label = gtk_label_new(gs->str);
+    gtk_box_pack_start(GTK_BOX(info_vb), label, TRUE, TRUE, 0);
+
+    label = gtk_label_new("&");
+    gtk_box_pack_start(GTK_BOX(info_vb), label, TRUE, TRUE, 0);
+
+    g_string_sprintf(gs, "Context ID: %u", binding->ctx_id);
+    label = gtk_label_new(gs->str);
+    gtk_box_pack_start(GTK_BOX(info_vb), label, TRUE, TRUE, 0);
+
+    label = gtk_label_new("&");
+    gtk_box_pack_start(GTK_BOX(info_vb), label, TRUE, TRUE, 0);
+    gtk_widget_set_sensitive(label, binding->smb_fid);
+
+    g_string_sprintf(gs, "SMB FID: %u", binding->smb_fid);
+    label = gtk_label_new(gs->str);
+    gtk_box_pack_start(GTK_BOX(info_vb), label, TRUE, TRUE, 0);
+    gtk_widget_set_sensitive(label, binding->smb_fid);
+
+    /* Conditionally enabled - only when decoding packets */
+    label = gtk_label_new("with:");
+    gtk_box_pack_start(GTK_BOX(info_vb), label, TRUE, TRUE, 0);
+
+    decode_dimmable = g_slist_prepend(decode_dimmable, label);
+    scrolled_window = decode_add_dcerpc_menu(page_hb, "dcerpc" /*table_name*/);
+    gtk_box_pack_start(GTK_BOX(page_hb), scrolled_window, TRUE, TRUE, 0);
+    decode_dimmable = g_slist_prepend(decode_dimmable, scrolled_window);
+
+    g_string_free(gs, TRUE);
+
+    return(page_hb);
+}
diff -urN ethereal-0.10.6/gtk/decode_as_dcerpc.h ethereal-0.10.7/gtk/decode_as_dcerpc.h
--- ethereal-0.10.6/gtk/decode_as_dcerpc.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/gtk/decode_as_dcerpc.h	2004-10-20 17:34:32.000000000 -0500
@@ -0,0 +1,156 @@
+/* decode_as_dcerpc.h
+ *
+ * $Id: decode_as_dcerpc.h 11930 2004-09-07 20:05:04Z guy $
+ *
+ * Routines to modify dcerpc bindings on the fly.
+ * Only internally used between decode_as_dlg and decode_as_dcerpc
+ *
+ * Copyright 2004 Ulf Lamping
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+
+#ifndef __DECODE_AS_DCERPC_H__
+#define __DECODE_AS_DCERPC_H__
+
+/** @file
+ *  "Decode As" / "User Specified Decodes" dialog box.
+ *  @ingroup dialog_group
+ */
+
+
+/*
+ * Columns for a "Select" list.
+ * Note that most of these columns aren't displayed; they're attached
+ * to the row of the table as additional information.
+ */
+#define E_LIST_S_PROTO_NAME 0
+#define E_LIST_S_TABLE	    1
+/* The following is for debugging in decode_add_to_list */
+#define E_LIST_S_MAX	    E_LIST_S_TABLE
+#define E_LIST_S_COLUMNS   (E_LIST_S_MAX + 1)
+
+#define E_PAGE_LIST   "notebook_page_list"
+#define E_PAGE_TABLE  "notebook_page_table_name"
+#define E_PAGE_TITLE  "notebook_page_title"
+#define E_PAGE_VALUE  "notebook_page_value"
+
+#define E_PAGE_ACTION "notebook_page_action"
+
+#define E_PAGE_DCERPC "notebook_page_dcerpc" /* dcerpc only */
+#define E_PAGE_BINDING "notebook_page_binding" /* dcerpc only */
+
+
+/*
+ * Enum used to track which radio button is currently selected in the
+ * dialog. These buttons are labeled "Decode" and "Do not decode".
+ */
+enum action_type {
+    /* The "Decode" button is currently selected. */
+    E_DECODE_YES,
+
+    /* The "Do not decode" button is currently selected. */
+    E_DECODE_NO
+};
+
+extern enum action_type	requested_action;
+
+/*
+ * A list of the dialog items that only have meaning when the user has
+ * selected the "Decode" radio button.  When the "Do not decode"
+ * button is selected these items should be dimmed.
+ */
+extern GSList *decode_dimmable;
+
+/* init decode_dcerpc internals */
+extern void decode_dcerpc_init(void);
+
+/* remove all bindings */
+extern void decode_dcerpc_reset_all(void);
+
+extern void
+decode_dcerpc_add_show_list(gpointer user_data);
+
+extern GtkWidget *
+decode_dcerpc_add_page(packet_info *pinfo);
+
+extern void
+decode_dcerpc_binding_free(void *binding);
+
+
+
+/** Add an item the the Show list.
+ */
+extern void
+decode_add_to_show_list (
+gpointer list_data, 
+gchar *table_name, 
+gchar *selector_name, 
+gchar *initial_proto_name, 
+gchar *current_proto_name);
+
+
+/*
+ * This routine creates one entry in the list of protocol dissector
+ * that can be used.  It is called by the dissector_table_foreach_handle
+ * routine once for each entry in a dissector table's list of handles
+ * for dissectors that could be used in that table.  It guarantees unique
+ * entries by iterating over the list of entries build up to this point,
+ * looking for a duplicate name.  If there is no duplicate, then this
+ * entry is added to the list of possible dissectors.
+ *
+ * @param table_name The name of the dissector table currently
+ * being walked.
+ *
+ * @param value The dissector handle for this entry.  This is an opaque
+ * pointer that can only be handed back to routines in the file packet.c
+ *
+ * @param user_data A data block passed into each instance of this
+ * routine.  It contains information from the caller of the foreach
+ * routine, specifying information about the dissector table and where
+ * to store any information generated by this routine.
+ */
+extern void
+decode_add_to_list (gchar *table_name, gchar *proto_name, gpointer value, gpointer user_data);
+
+/*
+ * This routine starts the creation of a List on a notebook page.  It
+ * creates both a scrolled window and a list, adds the list to the
+ * window, and attaches the list as a data object on the page.
+ *
+ * @param page A pointer to the notebook page being created.
+ *
+ * @param list_p Will be filled in with the address of a newly
+ * created List.
+ *
+ * @param scrolled_win_p Will be filled in with the address of a newly
+ * created GtkScrolledWindow.
+ */
+extern void
+decode_list_menu_start(GtkWidget *page, GtkWidget **list_p,
+                       GtkWidget **scrolled_win_p);
+
+/*
+ * This routine finishes the creation of a List on a notebook page.
+ * It adds the default entry, sets the default entry as the
+ * highlighted entry, and sorts the List.
+ *
+ * @param list A pointer the the List to finish.
+ */
+extern void
+decode_list_menu_finish(GtkWidget *list);
+
+#endif
diff -urN ethereal-0.10.6/gtk/decode_as_dlg.c ethereal-0.10.7/gtk/decode_as_dlg.c
--- ethereal-0.10.6/gtk/decode_as_dlg.c	2004-08-12 17:41:43.000000000 -0500
+++ ethereal-0.10.7/gtk/decode_as_dlg.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,6 +1,6 @@
 /* decode_as_dlg.c
  *
- * $Id: decode_as_dlg.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: decode_as_dlg.c 12297 2004-10-14 16:23:11Z tuexen $
  *
  * Routines to modify dissector tables on the fly.
  *
@@ -34,10 +34,11 @@
 #include "globals.h"
 #include "simple_dialog.h"
 #include <epan/packet.h>
-#include "ipproto.h"
+#include <epan/ipproto.h>
 #include "ui_util.h"
 #include <epan/epan_dissect.h>
 #include "compat_macros.h"
+#include "decode_as_dcerpc.h"
 
 #undef DEBUG
 
@@ -46,18 +47,6 @@
 /**************************************************/
 
 /*
- * Enum used to track which radio button is currently selected in the
- * dialog. These buttons are labeled "Decode" and "Do not decode".
- */
-enum action_type {
-    /* The "Decode" button is currently selected. */
-    E_DECODE_YES,
-
-    /* The "Do not decode" button is currently selected. */
-    E_DECODE_NO
-};
-
-/*
  * Enum used to track which transport layer port menu item is
  * currently selected in the dialog.  These items are labeled "source",
  * "destination", and "source/destination".
@@ -68,7 +57,9 @@
     /* The "destination port" menu item is currently selected. */
     E_DECODE_DPORT,
     /* The "source/destination port" menu item is currently selected. */
-    E_DECODE_BPORT
+    E_DECODE_BPORT,
+    /* For SCTP only. This MUST be the last entry! */
+    E_DECODE_PPID
 };
 
 #define E_DECODE_MIN_HEIGHT 300
@@ -76,22 +67,9 @@
 
 #define E_MENU_SRCDST "menu_src_dst"
 
-#define E_PAGE_ACTION "notebook_page_action"
-#define E_PAGE_LIST   "notebook_page_list"
-#define E_PAGE_TABLE  "notebook_page_table_name"
-#define E_PAGE_TITLE  "notebook_page_title"
-#define E_PAGE_VALUE  "notebook_page_value"
-
-/*
- * Columns for a "Select" list.
- * Note that most of these columns aren't displayed; they're attached
- * to the row of the table as additional information.
- */
-#define E_LIST_S_PROTO_NAME 0
-#define E_LIST_S_TABLE	    1
-/* The following is for debugging in decode_add_to_list */
-#define E_LIST_S_MAX	    E_LIST_S_TABLE
-#define E_LIST_S_COLUMNS   (E_LIST_S_MAX + 1)
+#define E_PAGE_DPORT "dport"
+#define E_PAGE_SPORT "sport"
+#define E_PAGE_PPID  "ppid"
 
 /*
  * Columns for a "Display" list
@@ -129,7 +107,7 @@
  * selected the "Decode" radio button.  When the "Do not decode"
  * button is selected these items should be dimmed.
  */
-static GSList *decode_dimmable = NULL;
+GSList *decode_dimmable = NULL;
 
 /*
  * Remember the "action" radio button that is currently selected in
@@ -137,10 +115,21 @@
  * modified in a callback routine, and read in the routine that
  * handles a click in the "OK" button for the dialog.
  */
-static enum action_type	requested_action = -1;
+enum action_type	requested_action = -1;
+
+
+/**************************************************/
+/*            Global Functions                    */
+/**************************************************/
+
+/* init this module */
+void decode_as_init(void) {
+
+    decode_dcerpc_init();
+}
 
 /**************************************************/
-/*            Resett Changed Dissectors           */
+/*            Reset Changed Dissectors            */
 /**************************************************/
 
 /*
@@ -227,6 +216,85 @@
 /*             Show Changed Dissectors            */
 /**************************************************/
 
+#if GTK_MAJOR_VERSION >= 2
+#define SORT_ALPHABETICAL 0
+
+static gint
+sort_iter_compare_func (GtkTreeModel *model,
+GtkTreeIter *a,
+GtkTreeIter *b,
+gpointer userdata)
+{
+    gint sortcol = GPOINTER_TO_INT(userdata);
+    gint ret = 0;
+    switch (sortcol)
+    {
+        case SORT_ALPHABETICAL:
+        {
+        gchar *name1, *name2;
+        gtk_tree_model_get(model, a, 0, &name1, -1);
+        gtk_tree_model_get(model, b, 0, &name2, -1);
+        if (name1 == NULL || name2 == NULL)
+        {
+            if (name1 == NULL && name2 == NULL)
+                break; /* both equal => ret = 0 */
+            ret = (name1 == NULL) ? -1 : 1;
+        }
+        else
+        {
+            ret = g_ascii_strcasecmp(name1,name2);
+        }
+        g_free(name1);
+        g_free(name2);
+        }
+        break;
+        default:
+        g_return_val_if_reached(0);
+    }
+    return ret;
+}
+#endif
+
+
+void
+decode_add_to_show_list (
+gpointer list_data, 
+gchar *table_name, 
+gchar *selector_name, 
+gchar *initial_proto_name, 
+gchar *current_proto_name)
+{
+    gchar     *text[E_LIST_D_COLUMNS];
+#if GTK_MAJOR_VERSION < 2
+    GtkCList  *clist;
+    gint       row;
+#else
+    GtkListStore *store;
+    GtkTreeIter   iter;
+#endif
+
+#if GTK_MAJOR_VERSION < 2
+    clist = (GtkCList *)list_data;
+#else
+    store = (GtkListStore *)list_data;
+#endif
+
+    text[E_LIST_D_TABLE] = table_name;
+    text[E_LIST_D_SELECTOR] = selector_name;
+    text[E_LIST_D_INITIAL] = initial_proto_name;
+    text[E_LIST_D_CURRENT] = current_proto_name;
+#if GTK_MAJOR_VERSION < 2
+    row = gtk_clist_prepend(clist, text);
+#else
+    gtk_list_store_append(store, &iter);
+    gtk_list_store_set(store, &iter, E_LIST_D_TABLE, text[E_LIST_D_TABLE],
+                       E_LIST_D_SELECTOR, text[E_LIST_D_SELECTOR],
+                       E_LIST_D_INITIAL, text[E_LIST_D_INITIAL],
+                       E_LIST_D_CURRENT, text[E_LIST_D_CURRENT], -1);
+#endif
+}
+
+
 /*
  * This routine creates one entry in the list of protocol dissector
  * that have been changed.  It is called by the g_hash_foreach routine
@@ -250,25 +318,13 @@
 decode_build_show_list (gchar *table_name, ftenum_t selector_type,
 			gpointer key, gpointer value, gpointer user_data)
 {
-#if GTK_MAJOR_VERSION < 2
-    GtkCList  *clist;
-    gint       row;
-#else
-    GtkListStore *store;
-    GtkTreeIter   iter;
-#endif
     dissector_handle_t current, initial;
-    gchar     *current_proto_name, *initial_proto_name, *text[E_LIST_D_COLUMNS];
+    gchar     *current_proto_name, *initial_proto_name, *selector_name;
     gchar      string1[20];
 
     g_assert(user_data);
     g_assert(value);
 
-#if GTK_MAJOR_VERSION < 2
-    clist = (GtkCList *)user_data;
-#else
-    store = (GtkListStore *)user_data;
-#endif
     current = dtbl_entry_get_handle(value);
     if (current == NULL)
 	current_proto_name = "(none)";
@@ -280,7 +336,6 @@
     else
 	initial_proto_name = dissector_handle_get_short_name(initial);
 
-    text[E_LIST_D_TABLE] = get_dissector_table_ui_name(table_name);
     switch (selector_type) {
 
     case FT_UINT8:
@@ -322,60 +377,32 @@
 	    g_snprintf(string1, sizeof(string1), "%#o", GPOINTER_TO_UINT(key));
 	    break;
 	}
-	text[E_LIST_D_SELECTOR] = string1;
+	selector_name = string1;
 	break;
 
     case FT_STRING:
     case FT_STRINGZ:
-	text[E_LIST_D_SELECTOR] = key;
+	selector_name = key;
 	break;
 
     default:
 	g_assert_not_reached();
+	selector_name = NULL;
 	break;
     }
-    text[E_LIST_D_INITIAL] = initial_proto_name;
-    text[E_LIST_D_CURRENT] = current_proto_name;
-#if GTK_MAJOR_VERSION < 2
-    row = gtk_clist_prepend(clist, text);
-#else
-    gtk_list_store_append(store, &iter);
-    gtk_list_store_set(store, &iter, E_LIST_D_TABLE, text[E_LIST_D_TABLE],
-                       E_LIST_D_SELECTOR, text[E_LIST_D_SELECTOR],
-                       E_LIST_D_INITIAL, text[E_LIST_D_INITIAL],
-                       E_LIST_D_CURRENT, text[E_LIST_D_CURRENT], -1);
-#endif
-}
-
 
-/*
- * This routine is called when the user clicks the "OK" button in
- * the "Decode As:Show..." dialog window.  This routine destroys the
- * dialog box and performs other housekeeping functions.
- *
- * @param GtkWidget * A pointer to the "OK" button.
- *
- * @param gpointer A pointer to the dialog window.
- */
-static void
-decode_show_ok_cb (GtkWidget *ok_bt _U_, gpointer parent_w)
-{
-    window_destroy(GTK_WIDGET(parent_w));
+    decode_add_to_show_list (
+        user_data, 
+        get_dissector_table_ui_name(table_name),
+        selector_name, 
+        initial_proto_name, 
+        current_proto_name);
 }
 
 
-/*
- * This routine is called when the user clicks the "Clear" button in
- * the "Decode As:Show..." dialog window.  This routine resets all the
- * dissector values and then destroys the dialog box and performs
- * other housekeeping functions.
- *
- * @param GtkWidget * A pointer to the "Clear" button.
- *
- * @param gpointer A pointer to the dialog window.
- */
+/* clear all settings */
 static void
-decode_show_clear_cb (GtkWidget *clear_bt _U_, gpointer parent_w)
+decode_clear_all(void)
 {
     dissector_delete_item_t *item;
     GSList *tmp;
@@ -407,17 +434,51 @@
     g_slist_free(dissector_reset_list);
     dissector_reset_list = NULL;
 
+    decode_dcerpc_reset_all();
+
     redissect_packets(&cfile);
+}
 
+
+/*
+ * This routine is called when the user clicks the "OK" button in
+ * the "Decode As:Show..." dialog window.  This routine destroys the
+ * dialog box and performs other housekeeping functions.
+ *
+ * @param GtkWidget * A pointer to the "OK" button.
+ *
+ * @param gpointer A pointer to the dialog window.
+ */
+static void
+decode_show_ok_cb (GtkWidget *ok_bt _U_, gpointer parent_w)
+{
     window_destroy(GTK_WIDGET(parent_w));
 }
 
 
 /*
- * This routine is called when the user clicks the "Close" button in
+ * This routine is called when the user clicks the "Clear" button in
+ * the "Decode As:Show..." dialog window.  This routine resets all the
+ * dissector values and then destroys the dialog box and performs
+ * other housekeeping functions.
+ *
+ * @param GtkWidget * A pointer to the "Clear" button.
+ *
+ * @param gpointer A pointer to the dialog window.
+ */
+static void
+decode_show_clear_cb (GtkWidget *clear_bt _U_, gpointer parent_w)
+{
+    decode_clear_all();
+
+    window_destroy(GTK_WIDGET(parent_w));
+}
+
+
+/*
+ * This routine is called when the user clicks the X at the top right end in
  * the "Decode As:Show..." dialog window.  This routine simply calls the
- * cancel routine as if the user had clicked the cancel button instead
- * of the close button.
+ * ok routine as if the user had clicked the ok button.
  *
  * @param GtkWidget * A pointer to the dialog box.
  *
@@ -461,7 +522,7 @@
 {
     GtkWidget         *main_vb, *bbox, *ok_bt, *clear_bt, *scrolled_window;
     gchar             *titles[E_LIST_D_COLUMNS] = {
-        "Table", "Port", "Initial", "Current"
+        "Table", "Value", "Initial", "Current"
     };
     gint               column;
 #if GTK_MAJOR_VERSION < 2
@@ -520,9 +581,11 @@
 #if GTK_MAJOR_VERSION < 2
 	dissector_all_tables_foreach_changed(decode_build_show_list, list);
 	gtk_clist_sort(list);
+    decode_dcerpc_add_show_list(list);
 #else
 	dissector_all_tables_foreach_changed(decode_build_show_list, store);
 	g_object_unref(G_OBJECT(store));
+    decode_dcerpc_add_show_list(store);
 #endif
 
 	/* Put clist into a scrolled window */
@@ -612,7 +675,7 @@
 #if GTK_MAJOR_VERSION < 2
     if (!GTK_CLIST(list)->selection)
     {
-	abbrev = "(NULL)";
+	abbrev = NULL;
 	handle = NULL;
     } else {
 	row = GPOINTER_TO_INT(GTK_CLIST(list)->selection->data);
@@ -623,7 +686,7 @@
     selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
     if (gtk_tree_selection_get_selected(selection, &model, &iter) == FALSE)
     {
-	abbrev = "(NULL)";
+	abbrev = NULL;
 	handle = NULL;
     } else {
         gtk_tree_model_get(model, &iter, E_LIST_S_PROTO_NAME, &abbrev,
@@ -631,18 +694,18 @@
     }
 #endif
 
-    if (strcmp(abbrev, "(default)") == 0) {
+    if (abbrev != NULL && strcmp(abbrev, "(default)") == 0) {
 	dissector_reset(table_name, selector);
     } else {
 	dissector_change(table_name, selector, handle);
     }
 #if GTK_MAJOR_VERSION >= 2
-    g_free(abbrev);
+    if (abbrev != NULL)
+	g_free(abbrev);
 #endif
 }
 
 
-
 /**************************************************/
 /* Action routines for the "Decode As..." dialog  */
 /*   - called when the OK button pressed          */
@@ -737,7 +800,8 @@
     GtkWidget *menu, *menuitem;
     GtkWidget *list;
     gchar *table_name;
-    gint requested_srcdst;
+    gint requested_srcdst, requested_port, ppid;
+    gpointer portp;
 
     list = OBJECT_GET_DATA(notebook_pg, E_PAGE_LIST);
     if (requested_action == E_DECODE_NO)
@@ -758,12 +822,34 @@
 #endif
 
     table_name = OBJECT_GET_DATA(notebook_pg, E_PAGE_TABLE);
-    if (requested_srcdst != E_DECODE_DPORT)
-	decode_change_one_dissector(table_name, cfile.edt->pi.srcport, list);
-    if (requested_srcdst != E_DECODE_SPORT)
-	decode_change_one_dissector(table_name, cfile.edt->pi.destport, list);
+    if (requested_srcdst >= E_DECODE_PPID) {
+    	if (requested_srcdst == E_DECODE_PPID)
+    	   ppid = 0;
+        else
+           if (requested_srcdst - E_DECODE_PPID - 1 < MAX_NUMBER_OF_PPIDS)
+             ppid = cfile.edt->pi.ppid[requested_srcdst - E_DECODE_PPID - 1];
+           else 
+             return;
+        decode_change_one_dissector(table_name, ppid, list);
+        return;
+    }
+    if (requested_srcdst != E_DECODE_DPORT) {
+        portp = OBJECT_GET_DATA(notebook_pg, E_PAGE_SPORT);
+        if (portp != NULL) {
+            requested_port = GPOINTER_TO_INT(portp);
+            decode_change_one_dissector(table_name, requested_port, list);
+        }
+    }
+    if (requested_srcdst != E_DECODE_SPORT) {
+        portp = OBJECT_GET_DATA(notebook_pg, E_PAGE_DPORT);
+        if (portp != NULL) {
+            requested_port = GPOINTER_TO_INT(portp);
+            decode_change_one_dissector(table_name, requested_port, list);
+        }
+    }
 }
 
+
 /**************************************************/
 /*      Signals from the "Decode As..." dialog    */
 /**************************************************/
@@ -787,6 +873,7 @@
     GtkWidget *notebook, *notebook_pg;
     void (* func)(GtkWidget *);
     gint page_num;
+    void *binding = NULL;
 
     /* Call the right routine for the page that was currently in front. */
     notebook =  OBJECT_GET_DATA(parent_w, E_NOTEBOOK);
@@ -797,6 +884,13 @@
     func(notebook_pg);
 
     /* Now destroy the "Decode As" dialog. */
+    notebook_pg = OBJECT_GET_DATA(parent_w, E_PAGE_DCERPC);
+    if(notebook_pg) {
+        binding = OBJECT_GET_DATA(notebook_pg, E_PAGE_BINDING);
+    }
+    if(binding) {
+        decode_dcerpc_binding_free(binding);    
+    }
     window_destroy(GTK_WIDGET(parent_w));
     g_slist_free(decode_dimmable);
     decode_dimmable = NULL;
@@ -834,17 +928,28 @@
 }
 
 /*
- * This routine is called when the user clicks the "Cancel" button in
+ * This routine is called when the user clicks the "Close" button in
  * the "Decode As..." dialog window.  This routine then destroys the
  * dialog box and performs other housekeeping functions.
  *
- * @param cancel_bt A pointer to the "Cancel" button.
+ * @param close_bt A pointer to the "Close" button.
  *
  * @param parent_w A pointer to the dialog window.
  */
 static void
-decode_cancel_cb (GtkWidget *cancel_bt _U_, gpointer parent_w)
+decode_close_cb (GtkWidget *close_bt _U_, gpointer parent_w)
 {
+    GtkWidget *notebook_pg = NULL;
+    void *binding = NULL;
+
+
+    notebook_pg = OBJECT_GET_DATA(parent_w, E_PAGE_DCERPC);
+    if(notebook_pg) {
+        binding = OBJECT_GET_DATA(notebook_pg, E_PAGE_BINDING);
+    }
+    if(binding) {
+        decode_dcerpc_binding_free(binding);
+    }
     window_destroy(GTK_WIDGET(parent_w));
     g_slist_free(decode_dimmable);
     decode_dimmable = NULL;
@@ -854,7 +959,7 @@
 /*
  * This routine is called when the user clicks the "Close" button in
  * the "Decode As..." dialog window.  This routine simply calls the
- * cancel routine as if the user had clicked the cancel button instead
+ * close routine as if the user had clicked the close button instead
  * of the close button.
  *
  * @param decode_w A pointer to the dialog box.
@@ -864,7 +969,7 @@
 static gboolean
 decode_delete_cb (GtkWidget *decode_w, gpointer dummy _U_)
 {
-    decode_cancel_cb(NULL, decode_w);
+    decode_close_cb(NULL, decode_w);
     return FALSE;
 }
 
@@ -889,6 +994,22 @@
 }
 
 
+/*
+ * This routine is called when the user clicks the "Clear" button in
+ * the "Decode As..." dialog window.  This routine resets all the
+ * dissector values and performs other housekeeping functions.
+ *
+ * @param GtkWidget * A pointer to the "Clear" button.
+ * @param gpointer A pointer to the dialog window.
+ */
+static void
+decode_clear_cb(GtkWidget *clear_bt _U_, gpointer parent_w _U_)
+{
+    decode_clear_all();
+}
+
+
+
 /**************************************************/
 /*          Dialog setup - radio buttons          */
 /**************************************************/
@@ -1011,12 +1132,46 @@
 
     OBJECT_SET_DATA(page, E_MENU_SRCDST, menu);
     gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu);
+    OBJECT_SET_DATA(page, E_PAGE_SPORT, GINT_TO_POINTER(cfile.edt->pi.srcport));
+    OBJECT_SET_DATA(page, E_PAGE_DPORT, GINT_TO_POINTER(cfile.edt->pi.destport));
 
     alignment = decode_add_pack_menu(optmenu);
 
     return(alignment);
 }
 
+static GtkWidget *
+decode_add_ppid_menu (GtkWidget *page)
+{
+    GtkWidget *optmenu, *menu, *menuitem;
+    gchar      tmp[100];
+    guint      number_of_ppid;
+    
+    optmenu = gtk_option_menu_new();
+    menu = gtk_menu_new();
+    
+    g_snprintf(tmp, 100, "PPID (%u)", 0);
+    menuitem = gtk_menu_item_new_with_label(tmp);
+    OBJECT_SET_DATA(menuitem, "user_data", GINT_TO_POINTER(E_DECODE_PPID));
+    gtk_menu_append(GTK_MENU(menu), menuitem);
+    gtk_widget_show(menuitem);	/* gtk_widget_show_all() doesn't show this */
+    
+    for(number_of_ppid = 0; number_of_ppid < MAX_NUMBER_OF_PPIDS; number_of_ppid++)
+      if (cfile.edt->pi.ppid[number_of_ppid] != 0) {
+        g_snprintf(tmp, 100, "PPID (%u)", cfile.edt->pi.ppid[number_of_ppid]);
+        menuitem = gtk_menu_item_new_with_label(tmp);
+        OBJECT_SET_DATA(menuitem, "user_data", GINT_TO_POINTER(E_DECODE_PPID + 1 + number_of_ppid));
+        gtk_menu_append(GTK_MENU(menu), menuitem);
+        gtk_widget_show(menuitem);	/* gtk_widget_show_all() doesn't show this */
+      } else
+        break;
+
+    OBJECT_SET_DATA(page, E_MENU_SRCDST, menu);
+    gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu);
+
+    return(optmenu);
+}
+
 /*************************************************/
 /*        Dialog setup - list based menus        */
 /*************************************************/
@@ -1063,12 +1218,10 @@
  * routine, specifying information about the dissector table and where
  * to store any information generated by this routine.
  */
-static void
-decode_add_to_list (gchar *table_name, gpointer value, gpointer user_data)
+void
+decode_add_to_list (gchar *table_name, gchar *proto_name, gpointer value, gpointer user_data)
 {
-    gchar     *proto_name;
     gchar     *text[E_LIST_S_COLUMNS];
-    dissector_handle_t handle;
 #if GTK_MAJOR_VERSION < 2
     GtkCList  *list;
     gint       row;
@@ -1078,26 +1231,19 @@
     GtkTreeIter   iter;
     struct handle_lookup_info hli;
 #endif
-    gint       i;
 
     g_assert(user_data);
     g_assert(value);
 
     list = user_data;
-    handle = value;
-    proto_name = dissector_handle_get_short_name(handle);
 
-    i = dissector_handle_get_protocol_index(handle);
-    if (i >= 0 && !proto_is_protocol_enabled(find_protocol_by_id(i)))
-        return;
-  
 #if GTK_MAJOR_VERSION < 2
-    row = gtk_clist_find_row_from_data(list, handle);
+    row = gtk_clist_find_row_from_data(list, value);
     /* We already have an entry for this handle.
      * XXX - will this ever happen? */
     if (row != -1) return;
 #else
-    hli.handle = handle;
+    hli.handle = value;
     hli.found = FALSE;
     store = GTK_LIST_STORE(gtk_tree_view_get_model(list));
     gtk_tree_model_foreach(GTK_TREE_MODEL(store), lookup_handle, &hli);
@@ -1110,16 +1256,34 @@
     text[E_LIST_S_TABLE] = table_name;
 #if GTK_MAJOR_VERSION < 2
     row = gtk_clist_prepend(list, text);
-    gtk_clist_set_row_data(list, row, handle);
+    gtk_clist_set_row_data(list, row, value);
 #else
     gtk_list_store_append(store, &iter);
     gtk_list_store_set(store, &iter,
                        E_LIST_S_PROTO_NAME, text[E_LIST_S_PROTO_NAME],
                        E_LIST_S_TABLE, text[E_LIST_S_TABLE],
-                       E_LIST_S_TABLE+1, handle, -1);
+                       E_LIST_S_TABLE+1, value, -1);
 #endif
 }
 
+static void
+decode_proto_add_to_list (gchar *table_name, gpointer value, gpointer user_data)
+{
+    gchar     *proto_name;
+    gint       i;
+    dissector_handle_t handle;
+
+
+    handle = value;
+    proto_name = dissector_handle_get_short_name(handle);
+
+    i = dissector_handle_get_protocol_index(handle);
+    if (i >= 0 && !proto_is_protocol_enabled(find_protocol_by_id(i)))
+        return;
+  
+    decode_add_to_list (table_name, proto_name, value, user_data);
+}
+
 
 /*
  * This routine starts the creation of a List on a notebook page.  It
@@ -1134,7 +1298,7 @@
  * @param scrolled_win_p Will be filled in with the address of a newly
  * created GtkScrolledWindow.
  */
-static void
+void
 decode_list_menu_start(GtkWidget *page, GtkWidget **list_p,
                        GtkWidget **scrolled_win_p)
 {
@@ -1147,10 +1311,13 @@
     GtkListStore      *store;
     GtkCellRenderer   *renderer;
     GtkTreeViewColumn *tc;
+    GtkTreeSortable   *sortable;
 #endif
 
 #if GTK_MAJOR_VERSION < 2
     list = GTK_CLIST(gtk_clist_new_with_titles(E_LIST_S_COLUMNS, titles));
+
+    OBJECT_SET_DATA(decode_w, "sctp_list", list);
     gtk_clist_column_titles_passive(list);
 #ifndef DEBUG
     gtk_clist_column_titles_hide(list);
@@ -1163,7 +1330,11 @@
 #else
     store = gtk_list_store_new(E_LIST_S_COLUMNS+1, G_TYPE_STRING,
                                G_TYPE_STRING, G_TYPE_POINTER);
+    OBJECT_SET_DATA(G_OBJECT(decode_w), "sctp_data", store);
     list = GTK_TREE_VIEW(tree_view_new(GTK_TREE_MODEL(store)));
+    sortable = GTK_TREE_SORTABLE(store);
+    gtk_tree_sortable_set_sort_func(sortable, SORT_ALPHABETICAL, sort_iter_compare_func, GINT_TO_POINTER(SORT_ALPHABETICAL), NULL);
+    gtk_tree_sortable_set_sort_column_id(sortable, SORT_ALPHABETICAL, GTK_SORT_ASCENDING);
     gtk_tree_view_set_headers_clickable(list, FALSE);
 #ifndef DEBUG
     gtk_tree_view_set_headers_visible(list, FALSE);
@@ -1202,7 +1373,7 @@
  *
  * @param list A pointer the the List to finish.
  */
-static void
+void
 decode_list_menu_finish(GtkWidget *list)
 {
     gchar *text[E_LIST_S_COLUMNS];
@@ -1256,11 +1427,12 @@
     GtkWidget *list;
 
     decode_list_menu_start(page, &list, &scrolled_window);
-    dissector_table_foreach_handle(table_name, decode_add_to_list, list);
+    dissector_table_foreach_handle(table_name, decode_proto_add_to_list, list);
     decode_list_menu_finish(list);
     return(scrolled_window);
 }
 
+
 /**************************************************/
 /*                  Dialog setup                  */
 /**************************************************/
@@ -1365,6 +1537,219 @@
     return(page);
 }
 
+void
+decode_sctp_list_menu_start(GtkWidget **list_p, GtkWidget **scrolled_win_p)
+{
+#if GTK_MAJOR_VERSION < 2
+    gchar             *titles[E_LIST_S_COLUMNS] = {"Short Name", "Table Name"};
+    GtkCList          *list;
+    gint               column;
+#else
+    GtkTreeView       *list;
+    GtkListStore      *sctp_store;
+    GtkCellRenderer   *renderer;
+    GtkTreeViewColumn *tc;
+    GtkTreeSortable   *sortable;
+#endif
+
+#if GTK_MAJOR_VERSION < 2
+    list=OBJECT_GET_DATA(decode_w, "sctp_list");
+    gtk_clist_column_titles_passive(list);
+#ifndef DEBUG
+    gtk_clist_column_titles_hide(list);
+    for (column = 1; column < E_LIST_S_COLUMNS; column++)
+        gtk_clist_set_column_visibility (list, column, FALSE);
+#endif
+    for (column = 0; column < E_LIST_S_COLUMNS; column++)
+        gtk_clist_set_column_auto_resize(list, column, TRUE);
+#else
+    sctp_store = OBJECT_GET_DATA(decode_w, "sctp_data");
+    list = GTK_TREE_VIEW(tree_view_new(GTK_TREE_MODEL(sctp_store)));
+    sortable = GTK_TREE_SORTABLE(sctp_store);
+    gtk_tree_sortable_set_sort_func(sortable, SORT_ALPHABETICAL, sort_iter_compare_func, GINT_TO_POINTER(SORT_ALPHABETICAL), NULL);
+    gtk_tree_sortable_set_sort_column_id(sortable, SORT_ALPHABETICAL, GTK_SORT_ASCENDING);
+    gtk_tree_view_set_headers_clickable(list, FALSE);
+#ifndef DEBUG
+    gtk_tree_view_set_headers_visible(list, FALSE);
+#endif
+    renderer = gtk_cell_renderer_text_new();
+    tc = gtk_tree_view_column_new_with_attributes("Short Name", renderer,
+                                                  "text", E_LIST_S_PROTO_NAME,
+                                                  NULL);
+    gtk_tree_view_column_set_sizing(tc, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+    gtk_tree_view_append_column(list, tc);
+#endif
+
+    *scrolled_win_p = scrolled_window_new(NULL, NULL);
+    /* this will result to set the width of the dialog to the required size */
+    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(*scrolled_win_p), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+#if GTK_MAJOR_VERSION >= 2
+    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(*scrolled_win_p), GTK_SHADOW_IN);
+    gtk_container_add(GTK_CONTAINER(*scrolled_win_p), GTK_WIDGET(list));
+#endif
+    *list_p = GTK_WIDGET(list);
+}
+
+static void
+decode_sctp_update_ppid_menu(GtkWidget *w _U_, GtkWidget *page)
+{
+    GtkWidget *menu, *menuitem, *list, *scrolled_window, *sctpmenu;
+    gchar      tmp[100];
+    guint      number_of_ppid;
+#if GTK_MAJOR_VERSION < 2
+    GtkCList *sctp_list;
+#else
+    GtkListStore *sctp_store;
+#endif
+
+    menu = gtk_menu_new();
+
+    g_snprintf(tmp, 100, "PPID (%u)", 0);
+    menuitem = gtk_menu_item_new_with_label(tmp);
+    OBJECT_SET_DATA(menuitem, "user_data", GINT_TO_POINTER(E_DECODE_PPID));
+    gtk_menu_append(GTK_MENU(menu), menuitem);
+    gtk_widget_show(menuitem);	/* gtk_widget_show_all() doesn't show this */
+    for(number_of_ppid = 0; number_of_ppid < MAX_NUMBER_OF_PPIDS; number_of_ppid++)
+      if (cfile.edt->pi.ppid[number_of_ppid] != 0) {
+        g_snprintf(tmp, 100, "PPID (%u)", cfile.edt->pi.ppid[number_of_ppid]);
+        menuitem = gtk_menu_item_new_with_label(tmp);
+        OBJECT_SET_DATA(menuitem, "user_data", GINT_TO_POINTER(E_DECODE_PPID + 1 + number_of_ppid));
+        gtk_menu_append(GTK_MENU(menu), menuitem);
+        gtk_widget_show(menuitem);	/* gtk_widget_show_all() doesn't show this */
+      } else
+        break;
+
+    OBJECT_SET_DATA(page, E_MENU_SRCDST, menu);
+    OBJECT_SET_DATA(page, E_PAGE_TABLE, "sctp.ppi");
+    sctpmenu = OBJECT_GET_DATA(decode_w, "user_data");
+    gtk_option_menu_set_menu(GTK_OPTION_MENU(sctpmenu), menu);
+
+#if GTK_MAJOR_VERSION < 2
+    sctp_list = OBJECT_GET_DATA(decode_w, "sctp_list");
+    gtk_clist_clear(sctp_list);
+#else
+    sctp_store = OBJECT_GET_DATA(G_OBJECT(decode_w), "sctp_data");
+    gtk_list_store_clear(sctp_store);
+#endif
+    decode_sctp_list_menu_start(&list, &scrolled_window);
+    dissector_table_foreach_handle("sctp.ppi", decode_proto_add_to_list, list);
+    decode_list_menu_finish(list);
+}
+
+
+static void
+decode_sctp_update_srcdst_menu(GtkWidget *w _U_, GtkWidget *page)
+{
+    GtkWidget  *menu, *menuitem, *scrolled_window, *list, *sctpmenu;
+    gchar      tmp[100];
+#if GTK_MAJOR_VERSION < 2
+    GtkCList	*sctp_list;
+#else
+    GtkListStore *sctp_store;
+#endif
+
+    menu = gtk_menu_new();
+    g_snprintf(tmp, 100, "source (%u)", cfile.edt->pi.srcport);
+    menuitem = gtk_menu_item_new_with_label(tmp);
+    OBJECT_SET_DATA(menuitem, "user_data", GINT_TO_POINTER(E_DECODE_SPORT));
+    gtk_menu_append(GTK_MENU(menu), menuitem);
+    gtk_widget_show(menuitem);	/* gtk_widget_show_all() doesn't show this */
+
+    g_snprintf(tmp, 100, "destination (%u)", cfile.edt->pi.destport);
+    menuitem = gtk_menu_item_new_with_label(tmp);
+    OBJECT_SET_DATA(menuitem, "user_data", GINT_TO_POINTER(E_DECODE_DPORT));
+    gtk_menu_append(GTK_MENU(menu), menuitem);
+    gtk_widget_show(menuitem);	/* gtk_widget_show_all() doesn't show this */
+
+    menuitem = gtk_menu_item_new_with_label("both");
+    OBJECT_SET_DATA(menuitem, "user_data", GINT_TO_POINTER(E_DECODE_BPORT));
+    gtk_menu_append(GTK_MENU(menu), menuitem);
+    gtk_widget_show(menuitem);	/* gtk_widget_show_all() doesn't show this */
+
+    OBJECT_SET_DATA(page, E_MENU_SRCDST, menu);
+    OBJECT_SET_DATA(page, E_PAGE_TABLE, "sctp.port");
+    sctpmenu = OBJECT_GET_DATA(decode_w, "user_data");
+    gtk_option_menu_set_menu(GTK_OPTION_MENU(sctpmenu), menu);
+    OBJECT_SET_DATA(page, E_PAGE_SPORT, GINT_TO_POINTER(cfile.edt->pi.srcport));
+    OBJECT_SET_DATA(page, E_PAGE_DPORT, GINT_TO_POINTER(cfile.edt->pi.destport));  
+#if GTK_MAJOR_VERSION < 2
+    sctp_list = OBJECT_GET_DATA(decode_w, "sctp_list");
+    gtk_clist_clear(sctp_list);
+#else
+    sctp_store = OBJECT_GET_DATA(G_OBJECT(decode_w), "sctp_data");
+    gtk_list_store_clear(sctp_store);
+#endif
+    decode_sctp_list_menu_start(&list, &scrolled_window);
+    dissector_table_foreach_handle("sctp.port", decode_proto_add_to_list, list);
+    decode_list_menu_finish(list);
+}
+
+
+
+static GtkWidget *
+decode_sctp_add_port_ppid (GtkWidget *page)
+{
+    GtkWidget *format_vb, *radio_button;
+    GSList *format_grp;
+
+    format_vb = gtk_vbox_new(FALSE, 2);
+
+    radio_button = gtk_radio_button_new_with_label(NULL, "PPID");
+    format_grp = gtk_radio_button_group(GTK_RADIO_BUTTON(radio_button));
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button), TRUE);
+    SIGNAL_CONNECT(radio_button, "clicked", decode_sctp_update_ppid_menu, page);
+
+    gtk_box_pack_start(GTK_BOX(format_vb), radio_button, TRUE, TRUE, 0);
+
+    radio_button = gtk_radio_button_new_with_label(format_grp, "Port");
+    format_grp = gtk_radio_button_group(GTK_RADIO_BUTTON(radio_button));
+    SIGNAL_CONNECT(radio_button, "clicked", decode_sctp_update_srcdst_menu, page);
+
+    gtk_box_pack_start(GTK_BOX(format_vb), radio_button, TRUE, TRUE, 0);
+
+    return(format_vb);
+}
+
+
+static GtkWidget *
+decode_add_sctp_page (gchar *prompt, gchar *table_name)
+{
+    GtkWidget	*page, *label, *scrolled_window,  *radio, *vbox, *alignment, *sctpbox, *sctpmenu;
+
+    page = gtk_hbox_new(FALSE, 5);
+    OBJECT_SET_DATA(page, E_PAGE_ACTION, decode_transport);
+    OBJECT_SET_DATA(page, E_PAGE_TABLE, table_name);
+    OBJECT_SET_DATA(page, E_PAGE_TITLE, "Transport");
+
+    vbox = gtk_vbox_new(FALSE, 5);
+    radio = decode_sctp_add_port_ppid(page);
+    gtk_box_pack_start(GTK_BOX(vbox), radio, TRUE, TRUE, 0);
+
+    /* Always enabled */
+    sctpbox = gtk_hbox_new(FALSE, 5);
+    label = gtk_label_new(prompt);
+    gtk_box_pack_start(GTK_BOX(sctpbox), label, TRUE, TRUE, 0);  
+    sctpmenu = decode_add_ppid_menu(page);
+    OBJECT_SET_DATA(decode_w, "user_data", sctpmenu);
+    alignment = decode_add_pack_menu(sctpmenu);
+
+    gtk_box_pack_start(GTK_BOX(sctpbox), alignment, TRUE, TRUE, 0);
+
+    /* Conditionally enabled - only when decoding packets */
+    label = gtk_label_new("as");
+    gtk_box_pack_start(GTK_BOX(sctpbox), label, TRUE, TRUE, 0);
+    decode_dimmable = g_slist_prepend(decode_dimmable, label);
+    gtk_box_pack_start(GTK_BOX(vbox), sctpbox, TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(page), vbox, TRUE, TRUE, 0);
+
+    scrolled_window = decode_add_simple_menu(page, table_name);
+    gtk_box_pack_start(GTK_BOX(page), scrolled_window, TRUE, TRUE, 0);
+    decode_dimmable = g_slist_prepend(decode_dimmable, scrolled_window);
+
+    return(page);
+}
+
+
 /*
  * This routine indicates whether we'd actually have any pages in the
  * notebook in a "Decode As" dialog box; if there wouldn't be, we
@@ -1428,6 +1813,10 @@
 	page = decode_add_tcpudp_page("UDP", "udp.port");
 	break;
 
+    case PT_SCTP:
+	page = decode_add_sctp_page("SCTP", "sctp.ppi");
+	break;
+
     default:
 	page = NULL;
 	break;
@@ -1437,10 +1826,18 @@
 	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label);
     }
 
+    if(cfile.edt->pi.dcetransporttype != -1) {
+	    page = decode_dcerpc_add_page(&cfile.edt->pi);
+	    label = gtk_label_new("DCE-RPC");
+	    gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label);
+        OBJECT_SET_DATA(decode_w, E_PAGE_DCERPC, page);
+    }
+
     /* Select the last added page (selects first by default) */
     /* Notebook must be visible for set_page to work. */
     gtk_widget_show_all(notebook);
     gtk_notebook_set_page(GTK_NOTEBOOK(notebook), -1);
+
 }
 
 
@@ -1461,8 +1858,9 @@
 void
 decode_as_cb (GtkWidget * w _U_, gpointer data _U_)
 {
-    GtkWidget	*main_vb, *format_hb, *bbox, *ok_bt, *cancel_bt, *button;
+    GtkWidget	*main_vb, *format_hb, *bbox, *ok_bt, *close_bt, *button;
     GtkWidget   *button_vb, *apply_bt;
+    GtkTooltips *tooltips = gtk_tooltips_new();
 
     if (decode_w != NULL) {
 	/* There's already a "Decode As" dialog box; reactivate it. */
@@ -1492,24 +1890,39 @@
     SIGNAL_CONNECT(button, "clicked", decode_show_cb, decode_w);
     GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
     gtk_box_pack_start(GTK_BOX(button_vb), button, FALSE, FALSE, 0);
+    gtk_tooltips_set_tip(tooltips, button, 
+        "Open a dialog showing the current settings.", NULL);
+
+    button = gtk_button_new_with_label("Clear");
+    SIGNAL_CONNECT(button, "clicked", decode_clear_cb, decode_w);
+    GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
+    gtk_box_pack_start(GTK_BOX(button_vb), button, FALSE, FALSE, 0);
+    gtk_tooltips_set_tip(tooltips, button, 
+        "Clear ALL settings.", NULL);
 
 	decode_add_notebook(format_hb);
     }
 
     /* Button row */
-    bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_CANCEL, NULL);
+    bbox = dlg_button_row_new(GTK_STOCK_OK, GTK_STOCK_APPLY, GTK_STOCK_CLOSE, NULL);
     gtk_box_pack_start(GTK_BOX(main_vb), bbox, FALSE, FALSE, 0);
     gtk_widget_show(bbox);
 
     ok_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_OK);
     SIGNAL_CONNECT(ok_bt, "clicked", decode_ok_cb, decode_w);
+    gtk_tooltips_set_tip(tooltips, ok_bt, 
+        "Apply current setting, close dialog and redissect packets.", NULL);
 
     apply_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_APPLY);
     SIGNAL_CONNECT(apply_bt, "clicked", decode_apply_cb, decode_w);
+    gtk_tooltips_set_tip(tooltips, apply_bt, 
+        "Apply current setting, redissect packets and keep dialog open.", NULL);
 
-    cancel_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CANCEL);
-    window_set_cancel_button(decode_w, cancel_bt, NULL);
-    SIGNAL_CONNECT(cancel_bt, "clicked", decode_cancel_cb, decode_w);
+    close_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_CLOSE);
+    window_set_cancel_button(decode_w, close_bt, NULL);
+    SIGNAL_CONNECT(close_bt, "clicked", decode_close_cb, decode_w);
+    gtk_tooltips_set_tip(tooltips, close_bt, 
+        "Close the dialog, don't redissect packets.", NULL);
 
     gtk_widget_grab_default(ok_bt);
 
@@ -1519,11 +1932,3 @@
     gtk_widget_show_all(decode_w);
     window_present(decode_w);
 }
-
-
-/*
- * Local Variables:
- * mode:c
- * c-basic-offset: 4
- * End:
- */
diff -urN ethereal-0.10.6/gtk/decode_as_dlg.h ethereal-0.10.7/gtk/decode_as_dlg.h
--- ethereal-0.10.6/gtk/decode_as_dlg.h	2004-08-12 17:41:43.000000000 -0500
+++ ethereal-0.10.7/gtk/decode_as_dlg.h	2004-10-20 17:34:29.000000000 -0500
@@ -1,6 +1,6 @@
 /* decode_as_dlg.h
  *
- * $Id: decode_as_dlg.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: decode_as_dlg.h 11924 2004-09-07 16:19:56Z ulfl $
  *
  * Routines to modify dissector tables on the fly.
  *
@@ -31,6 +31,10 @@
  *  @ingroup dialog_group
  */
 
+/** Init the "Decode As" module
+ */
+void decode_as_init(void);
+
 /** User requested the "Decode As" dialog box by menu or toolbar.
  *
  * @param widget parent widget (unused)
diff -urN ethereal-0.10.6/gtk/dlg_utils.c ethereal-0.10.7/gtk/dlg_utils.c
--- ethereal-0.10.6/gtk/dlg_utils.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/dlg_utils.c	2004-10-20 17:34:31.000000000 -0500
@@ -1,7 +1,7 @@
 /* dlg_utils.c
  * Utilities to use when constructing dialogs
  *
- * $Id: dlg_utils.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: dlg_utils.c 12146 2004-09-30 02:02:35Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -193,7 +193,8 @@
     gtk_button_box_set_layout (GTK_BUTTON_BOX(button_hbox), GTK_BUTTONBOX_END);
     gtk_button_box_set_spacing(GTK_BUTTON_BOX(button_hbox), 5);
 
-#if !WIN32 && GTK_MAJOR_VERSION >= 2
+/* GTK+ 1.3 and later - on Win32, we use 1.3[.x] or 2.x, not 1.2[.x] */
+#if !defined(_WIN32) && GTK_MAJOR_VERSION >= 2
     /* beware: sequence of buttons are important! */
 
     /* XXX: this can be implemented more elegant of course, but it works as it should */
@@ -377,11 +378,21 @@
     ok_button_text = GTK_STOCK_OPEN;
     break;
 
+  case FILE_SELECTION_READ_BROWSE:
+    gtk_action = GTK_FILE_CHOOSER_ACTION_OPEN;
+    ok_button_text = GTK_STOCK_OK;
+    break;
+
   case FILE_SELECTION_SAVE:
     gtk_action = GTK_FILE_CHOOSER_ACTION_SAVE;
     ok_button_text = GTK_STOCK_SAVE;
     break;
 
+  case FILE_SELECTION_WRITE_BROWSE:
+    gtk_action = GTK_FILE_CHOOSER_ACTION_SAVE;
+    ok_button_text = GTK_STOCK_OK;
+    break;
+
   default:
     g_assert_not_reached();
     gtk_action = -1;
@@ -389,8 +400,13 @@
     break;
   }
   win = gtk_file_chooser_dialog_new(title, GTK_WINDOW(top_level), gtk_action,
+#ifndef _WIN32
+                                    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                    ok_button_text, GTK_RESPONSE_ACCEPT,
+#else
                                     ok_button_text, GTK_RESPONSE_ACCEPT,
                                     GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+#endif
                                     NULL);
 
   /* If we've opened a file before, start out by showing the files in the directory
@@ -437,14 +453,14 @@
 
     /* trim filename, so gtk_file_chooser_set_current_folder() likes it, see below */
     if (filename[filename_len -1] == G_DIR_SEPARATOR 
-#ifdef WIN32
+#ifdef _WIN32
         && filename_len > 3)    /* e.g. "D:\" */
 #else
         && filename_len > 1)    /* e.g. "/" */
 #endif
     {
         new_filename = g_strdup(filename);
-	    new_filename[filename_len-1] = '\0';
+        new_filename[filename_len-1] = '\0';
     } else {
         new_filename = g_strdup(filename);
     }
diff -urN ethereal-0.10.6/gtk/dlg_utils.h ethereal-0.10.7/gtk/dlg_utils.h
--- ethereal-0.10.6/gtk/dlg_utils.h	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/dlg_utils.h	2004-10-20 17:34:31.000000000 -0500
@@ -1,7 +1,7 @@
 /* dlg_utils.h
  * Declarations of utilities to use when constructing dialogs
  *
- * $Id: dlg_utils.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: dlg_utils.h 12146 2004-09-30 02:02:35Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -99,8 +99,10 @@
 
 /** the action a file selection is designed for */
 typedef enum {
-	FILE_SELECTION_OPEN,    /**< open a file */
-	FILE_SELECTION_SAVE     /**< save/export a file */
+	FILE_SELECTION_OPEN,            /**< open a file */
+	FILE_SELECTION_READ_BROWSE,     /**< browse for a file to read */
+	FILE_SELECTION_SAVE,            /**< save/export a file */
+	FILE_SELECTION_WRITE_BROWSE     /**< browse for a file to write to */
 } file_selection_action_t;
 
 /** Create a file selection dialog box window that belongs to Ethereal's
diff -urN ethereal-0.10.6/gtk/ethclist.c ethereal-0.10.7/gtk/ethclist.c
--- ethereal-0.10.6/gtk/ethclist.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/ethclist.c	2004-10-20 17:34:31.000000000 -0500
@@ -2,7 +2,7 @@
  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball, Josh MacDonald,
  * Copyright (C) 1997-1998 Jay Painter <jpaint@serv.net><jpaint@gimp.org>
  *
- * $Id: ethclist.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: ethclist.c 11972 2004-09-11 23:03:36Z guy $
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -40,7 +40,7 @@
 #include <gtk/gtkbindings.h>
 #include <gtk/gtkdnd.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <gdk/win32/gdkwin32.h>
 #else
 #include <gdk/gdkx.h>
diff -urN ethereal-0.10.6/gtk/ethereal-tap-register.c ethereal-0.10.7/gtk/ethereal-tap-register.c
--- ethereal-0.10.6/gtk/ethereal-tap-register.c	2004-08-12 18:06:11.000000000 -0500
+++ ethereal-0.10.7/gtk/ethereal-tap-register.c	2004-10-20 18:09:15.000000000 -0500
@@ -37,6 +37,8 @@
     register_tap_listener_gtk_h225counter ();}
   { extern void register_tap_listener_gtk_h225rassrt (void);
     register_tap_listener_gtk_h225rassrt ();}
+  { extern void register_tap_listener_h323_conversations_dlg (void);
+    register_tap_listener_h323_conversations_dlg ();}
   { extern void register_tap_listener_eth_hostlist (void);
     register_tap_listener_eth_hostlist ();}
   { extern void register_tap_listener_fc_hostlist (void);
@@ -75,12 +77,12 @@
     register_tap_listener_rtp_analysis ();}
   { extern void register_tap_listener_rtp_stream_dlg (void);
     register_tap_listener_rtp_stream_dlg ();}
-  { extern void register_tap_listener_tcp_graph (void);
-    register_tap_listener_tcp_graph ();}
   { extern void register_tap_listener_gtksipstat (void);
     register_tap_listener_gtksipstat ();}
   { extern void register_tap_listener_gtksmbstat (void);
     register_tap_listener_gtksmbstat ();}
+  { extern void register_tap_listener_tcp_graph (void);
+    register_tap_listener_tcp_graph ();}
   { extern void register_tap_listener_gtkwspstat (void);
     register_tap_listener_gtkwspstat ();}
 }
diff -urN ethereal-0.10.6/gtk/fc_stat.c ethereal-0.10.7/gtk/fc_stat.c
--- ethereal-0.10.6/gtk/fc_stat.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/fc_stat.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* fc_stat.c
  * fc_stat   2003 Ronnie Sahlberg
  *
- * $Id: fc_stat.c 11436 2004-07-19 21:42:01Z ulfl $
+ * $Id: fc_stat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -39,7 +39,7 @@
 #include <epan/value_string.h>
 
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include <epan/dissectors/packet-fc.h>
 #include "../register.h"
 #include "../timestats.h"
diff -urN ethereal-0.10.6/gtk/file_dlg.c ethereal-0.10.7/gtk/file_dlg.c
--- ethereal-0.10.6/gtk/file_dlg.c	2004-08-12 17:41:43.000000000 -0500
+++ ethereal-0.10.7/gtk/file_dlg.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* file_dlg.c
  * Dialog boxes for handling files
  *
- * $Id: file_dlg.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: file_dlg.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -30,7 +30,7 @@
 
 #include <gtk/gtk.h>
 
-#include "range.h"
+#include "packet-range.h"
 #include <epan/filesystem.h>
 
 #include "globals.h"
@@ -46,7 +46,7 @@
 #include "file_dlg.h"
 #include "main.h"
 #include "compat_macros.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "recent.h"
 #include "color.h"
 #include "../ui_util.h"
@@ -78,6 +78,7 @@
 static void file_color_import_destroy_cb(GtkWidget *win, gpointer user_data);
 static void file_color_export_ok_cb(GtkWidget *w, gpointer fs);
 static void file_color_export_destroy_cb(GtkWidget *win, gpointer user_data);
+static void set_file_type_list(GtkWidget *option_menu);
 
 #define E_FILE_M_RESOLVE_KEY	  "file_dlg_mac_resolve_key"
 #define E_FILE_N_RESOLVE_KEY	  "file_dlg_network_resolve_key"
@@ -107,13 +108,19 @@
  */
 static GtkWidget *file_save_as_w;
 
+/* XXX - can we make these not be static? */
+static packet_range_t range;
+static gboolean color_marked;
+static int filetype;
+static GtkWidget *cfmark_cb;
+static GtkWidget *ft_om;
+static GtkWidget *range_tb;
 
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
 #endif
 
 #define PREVIEW_STR_MAX         200
-#define PREVIEW_TIMEOUT_SECS    3
 
 static double
 secs_usecs( guint32 s, guint32 us)
@@ -123,29 +130,19 @@
 
 
 /* set a new filename for the preview widget */
-static gboolean
+static wtap *
 preview_set_filename(GtkWidget *prev, const gchar *cf_name)
 {
     GtkWidget  *label;
     wtap       *wth;
-    const struct wtap_pkthdr *phdr;
     int         err = 0;
     gchar      *err_info;
     struct stat cf_stat;
-    long        data_offset;
     gchar       string_buff[PREVIEW_STR_MAX];
-    unsigned int packet = 0;
-    double      start_time = 0;	/* seconds, with msec resolution */
-    double      stop_time = 0;	/* seconds, with msec resolution */
-    double      cur_time;
-    time_t      ti_time;
-    struct tm  *ti_tm;
-    unsigned int elapsed_time;
-    time_t      time_preview;
-    time_t      time_current;
-    gboolean    is_breaked = FALSE;
     guint64     filesize;
 
+
+    /* init preview labels */
     label = OBJECT_GET_DATA(prev, PREVIEW_FILENAME_KEY);
     gtk_label_set_text(GTK_LABEL(label), "-");
     label = OBJECT_GET_DATA(prev, PREVIEW_FORMAT_KEY);
@@ -200,11 +197,37 @@
     label = OBJECT_GET_DATA(prev, PREVIEW_FORMAT_KEY);
     gtk_label_set_text(GTK_LABEL(label), string_buff);
 
+    return wth;
+}
+
+
+/* do a preview run on the currently selected capture file */
+static void
+preview_do(GtkWidget *prev, wtap *wth)
+{
+    GtkWidget  *label;
+    unsigned int elapsed_time;
+    time_t      time_preview;
+    time_t      time_current;
+    int         err = 0;
+    gchar      *err_info;
+    long        data_offset;
+    const struct wtap_pkthdr *phdr;
+    double      start_time = 0;	/* seconds, with msec resolution */
+    double      stop_time = 0;	/* seconds, with msec resolution */
+    double      cur_time;
+    unsigned int packets = 0;
+    gboolean    is_breaked = FALSE;
+    gchar       string_buff[PREVIEW_STR_MAX];
+    time_t      ti_time;
+    struct tm  *ti_tm;
+
+
     time(&time_preview);
     while ( (wtap_read(wth, &err, &err_info, &data_offset)) ) {
         phdr = wtap_phdr(wth);        
         cur_time = secs_usecs(phdr->ts.tv_sec, phdr->ts.tv_usec);
-        if(packet == 0) {
+        if(packets == 0) {
             start_time 	= cur_time;
             stop_time = cur_time;
         }
@@ -214,10 +237,12 @@
         if (cur_time > stop_time){
             stop_time = cur_time;
         }
-        packet++;
-        if(packet%100) {
+
+        packets++;
+        if(packets%1000) {
+            /* do we have a timeout? */
             time(&time_current);
-            if(time_current-time_preview >= PREVIEW_TIMEOUT_SECS) {
+            if(time_current-time_preview >= (time_t) prefs.gui_fileopen_preview) {
                 is_breaked = TRUE;
                 break;
             }
@@ -225,18 +250,18 @@
     }
 
     if(err != 0) {
-        g_snprintf(string_buff, PREVIEW_STR_MAX, "error after reading %u packets", packet);
+        g_snprintf(string_buff, PREVIEW_STR_MAX, "error after reading %u packets", packets);
         label = OBJECT_GET_DATA(prev, PREVIEW_PACKETS_KEY);
         gtk_label_set_text(GTK_LABEL(label), string_buff);
         wtap_close(wth);
-        return TRUE;
+        return;
     }
 
     /* packet count */
     if(is_breaked) {
-        g_snprintf(string_buff, PREVIEW_STR_MAX, "more than %u packets (preview timeout)", packet);
+        g_snprintf(string_buff, PREVIEW_STR_MAX, "more than %u packets (preview timeout)", packets);
     } else {
-        g_snprintf(string_buff, PREVIEW_STR_MAX, "%u", packet);
+        g_snprintf(string_buff, PREVIEW_STR_MAX, "%u", packets);
     }
     label = OBJECT_GET_DATA(prev, PREVIEW_PACKETS_KEY);
     gtk_label_set_text(GTK_LABEL(label), string_buff);
@@ -271,8 +296,6 @@
     gtk_label_set_text(GTK_LABEL(label), string_buff);
 
     wtap_close(wth);
-
-    return TRUE;
 }
 
 #if 0
@@ -298,13 +321,14 @@
 #endif
 
 
-/* the text entry changed */
+/* the filename text entry changed */
 static void
 file_open_entry_changed(GtkWidget *w _U_, gpointer file_sel)
 {
     GtkWidget *prev = OBJECT_GET_DATA(file_sel, PREVIEW_TABLE_KEY);
     const gchar* cf_name;
     gboolean have_preview;
+    wtap       *wth;
 
     /* get the filename */
 #if (GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION >= 4) || GTK_MAJOR_VERSION > 2
@@ -314,7 +338,8 @@
 #endif
 
     /* set the filename to the preview */
-    have_preview = preview_set_filename(prev, cf_name);
+    wth = preview_set_filename(prev, cf_name);
+    have_preview = (gboolean) wth;
 
     /* make the preview widget sensitive */
     gtk_widget_set_sensitive(prev, have_preview);
@@ -325,6 +350,10 @@
 #else
     gtk_widget_set_sensitive(GTK_FILE_SELECTION(file_sel)->ok_button, have_preview);
 #endif
+
+    /* do the actual preview */
+    if(have_preview)
+        preview_do(prev, wth);
 }
 
 
@@ -613,6 +642,7 @@
   }
 }
 
+/* user pressed "open" button */
 static void
 file_open_ok_cb(GtkWidget *w, gpointer fs) {
   gchar     *cf_name, *rfilter, *s;
@@ -709,7 +739,7 @@
 }
 
 /*
- * Keep a static pointer to the current "Marge Capture File" window, if
+ * Keep a static pointer to the current "Merge Capture File" window, if
  * any, so that if somebody tries to do "File:Merge" while there's already
  * an "Merge Capture File" window up, we just pop up the existing one,
  * rather than creating a new one.
@@ -720,8 +750,9 @@
 void
 file_merge_cmd(GtkWidget *w)
 {
-  GtkWidget	*main_hb, *main_vb, *filter_hbox, *filter_bt, *filter_te,
-  		*prepend_rb, *chrono_rb, *append_rb, *prev;
+  GtkWidget	*main_hb, *main_vb, *ft_hb, *ft_lb, *filter_hbox,
+		*filter_bt, *filter_te, *prepend_rb, *chrono_rb,
+		*append_rb, *prev;
 #if GTK_MAJOR_VERSION < 2
   GtkAccelGroup *accel_group;
 #endif
@@ -740,6 +771,9 @@
     return;
   }
 
+  /* Default to saving all packets, in the file's current format. */
+  filetype = cfile.cd_t;
+
   file_merge_w = file_selection_new("Ethereal: Merge with Capture File",
                                    FILE_SELECTION_OPEN);
 #if (GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION >= 4) || GTK_MAJOR_VERSION > 2
@@ -788,6 +822,23 @@
   gtk_box_pack_start(GTK_BOX(main_hb), main_vb, FALSE, FALSE, 0);
   gtk_widget_show(main_vb);
 
+  /* File type row */
+  range_tb = NULL;
+  ft_hb = gtk_hbox_new(FALSE, 3);
+  gtk_container_add(GTK_CONTAINER(main_vb), ft_hb);
+  gtk_widget_show(ft_hb);
+
+  ft_lb = gtk_label_new("Merged output file type:");
+  gtk_box_pack_start(GTK_BOX(ft_hb), ft_lb, FALSE, FALSE, 0);
+  gtk_widget_show(ft_lb);
+
+  ft_om = gtk_option_menu_new();
+
+  /* Generate the list of file types we can save. */
+  set_file_type_list(ft_om);
+  gtk_box_pack_start(GTK_BOX(ft_hb), ft_om, FALSE, FALSE, 0);
+  gtk_widget_show(ft_om);
+
   filter_hbox = gtk_hbox_new(FALSE, 1);
   gtk_container_border_width(GTK_CONTAINER(filter_hbox), 0);
   gtk_box_pack_start(GTK_BOX(main_vb), filter_hbox, FALSE, FALSE, 0);
@@ -973,19 +1024,19 @@
       /* chonological order */
       in_filenames[0] = cfile.filename;
       in_filenames[1] = cf_name;
-      merge_ok = merge_n_files(out_fd, 2, in_filenames, FALSE, &err);
+      merge_ok = merge_n_files(out_fd, 2, in_filenames, filetype, FALSE, &err);
   } else {
       rb = OBJECT_GET_DATA(w, E_MERGE_PREPEND_KEY);
       if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (rb))) {
           /* prepend file */
           in_filenames[0] = cfile.filename;
           in_filenames[1] = cf_name;
-          merge_ok = merge_n_files(out_fd, 2, in_filenames, TRUE, &err);
+          merge_ok = merge_n_files(out_fd, 2, in_filenames, filetype, TRUE, &err);
       } else {
           /* append file */
           in_filenames[0] = cf_name;
           in_filenames[1] = cfile.filename;
-          merge_ok = merge_n_files(out_fd, 2, in_filenames, TRUE, &err);
+          merge_ok = merge_n_files(out_fd, 2, in_filenames, filetype, TRUE, &err);
       }
   }
 
@@ -1101,14 +1152,6 @@
   file_save_as_cmd_cb(w, data);
 }
 
-/* XXX - can we make these not be static? */
-static packet_range_t range;
-static gboolean color_marked;
-static int filetype;
-static GtkWidget *cfmark_cb;
-static GtkWidget *ft_om;
-static GtkWidget *range_tb;
-
 static gboolean
 can_save_with_wiretap(int ft)
 {
@@ -1181,7 +1224,8 @@
   if (filetype != new_filetype) {
     /* We can select only the filtered or marked packets to be saved if we can
        use Wiretap to save the file. */
-    range_set_displayed_sensitive(range_tb, can_save_with_wiretap(new_filetype));
+    if (range_tb != NULL)
+       range_set_displayed_sensitive(range_tb, can_save_with_wiretap(new_filetype));
     filetype = new_filetype;
     file_set_save_marked_sensitive();
   }
@@ -1205,7 +1249,7 @@
 	
   /* We can request that only the marked packets be saved only if we
      can use Wiretap to save the file and if there *are* marked packets. */
-  if (can_save_with_wiretap(filetype) && cfile.marked_count != 0) {
+  if (can_save_with_wiretap(filetype) && cfile.marked_count > 0) {
     range_set_marked_sensitive(range_tb, TRUE);
   }
   else {
@@ -1363,6 +1407,24 @@
         return;
   }
 
+  /* Check whether the range is valid. */
+  if (!range_check_validity(&range)) {
+    /* The range isn't valid; don't dismiss the open dialog box,
+       just leave it around so that the user can, after they
+       dismiss the alert box popped up for the error, try again. */
+    g_free(cf_name);
+#if (GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION >= 4) || GTK_MAJOR_VERSION > 2
+    /* XXX - as we cannot start a new event loop (using gtk_dialog_run()),
+     * as this will prevent the user from closing the now existing error
+     * message, simply close the dialog (this is the best we can do here). */
+    if (file_save_as_w)
+      window_destroy(GTK_WIDGET (fs));
+#else
+    gtk_widget_show(GTK_WIDGET (fs));
+#endif
+    return;
+  }
+
   /* don't show the dialog while saving */
   gtk_widget_hide(GTK_WIDGET (fs));
 
@@ -1373,7 +1435,15 @@
        just leave it around so that the user can, after they
        dismiss the alert box popped up for the error, try again. */
     g_free(cf_name);
+#if (GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION >= 4) || GTK_MAJOR_VERSION > 2
+    /* XXX - as we cannot start a new event loop (using gtk_dialog_run()),
+     * as this will prevent the user from closing the now existing error
+     * message, simply close the dialog (this is the best we can do here). */
+    if (file_save_as_w)
+      window_destroy(GTK_WIDGET (fs));
+#else
     gtk_widget_show(GTK_WIDGET (fs));
+#endif
     return;
   }
 
@@ -1438,52 +1508,7 @@
 /* Reload a file using the current read and display filters */
 void
 file_reload_cmd_cb(GtkWidget *w _U_, gpointer data _U_) {
-  gchar *filename;
-  gboolean is_tempfile;
-
-  /* If the file could be opened, "cf_open()" calls "cf_close()"
-     to get rid of state for the old capture file before filling in state
-     for the new capture file.  "cf_close()" will remove the file if
-     it's a temporary file; we don't want that to happen (for one thing,
-     it'd prevent subsequent reopens from working).  Remember whether it's
-     a temporary file, mark it as not being a temporary file, and then
-     reopen it as the type of file it was.
-
-     Also, "cf_close()" will free "cfile.filename", so we must make
-     a copy of it first. */
-  filename = g_strdup(cfile.filename);
-  is_tempfile = cfile.is_tempfile;
-  cfile.is_tempfile = FALSE;
-  if (cf_open(filename, is_tempfile, &cfile) == 0) {
-    switch (cf_read(&cfile)) {
-
-    case READ_SUCCESS:
-    case READ_ERROR:
-      /* Just because we got an error, that doesn't mean we were unable
-         to read any of the file; we handle what we could get from the
-         file. */
-      break;
-
-    case READ_ABORTED:
-      /* The user bailed out of re-reading the capture file; the
-         capture file has been closed - just free the capture file name
-         string and return (without changing the last containing
-         directory). */
-      g_free(filename);
-      return;
-    }
-  } else {
-    /* The open failed, so "cfile.is_tempfile" wasn't set to "is_tempfile".
-       Instead, the file was left open, so we should restore "cfile.is_tempfile"
-       ourselves.
-
-       XXX - change the menu?  Presumably "cf_open()" will do that;
-       make sure it does! */
-    cfile.is_tempfile = is_tempfile;
-  }
-  /* "cf_open()" made a copy of the file name we handed it, so
-     we should free up our copy. */
-  g_free(filename);
+  cf_reload();
 }
 
 /******************** Color Filters *********************************/
diff -urN ethereal-0.10.6/gtk/filter_dlg.c ethereal-0.10.7/gtk/filter_dlg.c
--- ethereal-0.10.6/gtk/filter_dlg.c	2004-08-12 17:41:47.000000000 -0500
+++ ethereal-0.10.7/gtk/filter_dlg.c	2004-10-20 17:34:32.000000000 -0500
@@ -1,7 +1,7 @@
 /* filter_dlg.c
  * Dialog boxes for (display and capture) filter editing
  *
- * $Id: filter_dlg.c 11436 2004-07-19 21:42:01Z ulfl $
+ * $Id: filter_dlg.c 12021 2004-09-16 22:07:03Z ulfl $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -614,9 +614,17 @@
 
     help_bt = OBJECT_GET_DATA(bbox, GTK_STOCK_HELP);
     if (list == CFILTER_LIST) {
+#ifdef ETHEREAL_EUG_DIR
+        SIGNAL_CONNECT(help_bt, "clicked", url_page_cb, HELP_CAPTURE_FILTERS_DIALOG);
+#else
         SIGNAL_CONNECT(help_bt, "clicked", help_topic_cb, "Capture Filters");
+#endif
     } else {
+#ifdef ETHEREAL_EUG_DIR
+        SIGNAL_CONNECT(help_bt, "clicked", url_page_cb, HELP_DISPLAY_FILTERS_DIALOG);
+#else
         SIGNAL_CONNECT(help_bt, "clicked", help_topic_cb, "Display Filters");
+#endif
     }
     gtk_tooltips_set_tip (tooltips, help_bt, ("Show topic specific help"), NULL);
 
diff -urN ethereal-0.10.6/gtk/find_dlg.c ethereal-0.10.7/gtk/find_dlg.c
--- ethereal-0.10.6/gtk/find_dlg.c	2004-08-12 17:41:43.000000000 -0500
+++ ethereal-0.10.7/gtk/find_dlg.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* find_dlg.c
  * Routines for "find frame" window
  *
- * $Id: find_dlg.c 11436 2004-07-19 21:42:01Z ulfl $
+ * $Id: find_dlg.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -33,6 +33,7 @@
 
 #include <epan/proto.h>
 #include <epan/dfilter/dfilter.h>
+#include <epan/strutil.h>
 #include "globals.h"
 
 #include "ui_util.h"
@@ -42,7 +43,7 @@
 #include "simple_dialog.h"
 #include "dlg_utils.h"
 #include "compat_macros.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "prefs_dlg.h"
 #include "keys.h"
 
@@ -85,9 +86,6 @@
 static void
 filter_selected_cb(GtkWidget *button_rb _U_, gpointer parent_w);
 
-static guint8 *
-convert_string_to_hex(const char *string, size_t *nbytes);
-
 /*
  * Keep a static pointer to the current "Find Packet" window, if any, so
  * that if somebody tries to do "Find Packet" while there's already a
@@ -101,7 +99,7 @@
 find_frame_cb(GtkWidget *w _U_, gpointer d _U_)
 {
   GtkWidget     *main_vb, *main_find_hb, *main_options_hb,
-      
+
                 *find_type_frame, *find_type_vb,
                 *find_type_hb, *find_type_lb, *hex_rb, *string_rb, *filter_rb,
                 *filter_hb, *filter_bt,
@@ -113,7 +111,7 @@
                 *hex_data_rb, *decode_data_rb, *summary_data_rb,
 
                 *string_opt_frame, *string_opt_vb,
-                *case_cb, *combo_lb, *combo_cb, 
+                *case_cb, *combo_lb, *combo_cb,
 
                 *bbox, *ok_bt, *cancel_bt;
   GtkTooltips   *tooltips;
@@ -259,7 +257,7 @@
   gtk_widget_show(decode_data_rb);
 
   /* Packet bytes */
-  hex_data_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(summary_data_rb, 
+  hex_data_rb = RADIO_BUTTON_NEW_WITH_MNEMONIC(summary_data_rb,
                 "Packet bytes", accel_group);
   gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(hex_data_rb), !decode_data && !summary_data);
   gtk_box_pack_start(GTK_BOX(data_vb), hex_data_rb, TRUE, TRUE, 0);
@@ -288,7 +286,7 @@
   gtk_misc_set_alignment(GTK_MISC(combo_lb), 0.0, 0.5);
   gtk_widget_show(combo_lb);
 
-  /* String Type Selection Dropdown Box 
+  /* String Type Selection Dropdown Box
      These only apply to the Hex Window search option */
   /* Create Combo Box */
   combo_cb = gtk_combo_new();
@@ -350,7 +348,7 @@
   OBJECT_SET_DATA(find_frame_w, E_SOURCE_DECODE_KEY, decode_data_rb);
   OBJECT_SET_DATA(find_frame_w, E_SOURCE_SUMMARY_KEY, summary_data_rb);
   OBJECT_SET_DATA(find_frame_w, E_FILT_TE_BUTTON_KEY, filter_bt);
-  
+
   /*
    * Now that we've attached the pointers, connect the signals - if
    * we do so before we've attached the pointers, the signals may
@@ -385,7 +383,7 @@
 }
 
 /* this function opens the find frame dialogue and sets the filter string */
-void   
+void
 find_frame_with_filter(char *filter)
 {
 	find_frame_cb(NULL, NULL);
@@ -412,7 +410,7 @@
      */
     strval = gtk_entry_get_text(GTK_ENTRY(w));
     if (strval == NULL) {
-      /* XXX - can this happen? */      
+      /* XXX - can this happen? */
       colorize_filter_te_as_invalid(w);
     } else {
       bytes = convert_string_to_hex(strval, &nbytes);
@@ -429,7 +427,7 @@
      */
     strval = gtk_entry_get_text(GTK_ENTRY(w));
     if (strval == NULL) {
-      /* XXX - can this happen? */      
+      /* XXX - can this happen? */
       colorize_filter_te_as_invalid(w);
     } else {
       if (strcmp(strval, "") == 0)
@@ -445,9 +443,9 @@
   }
 }
 
-/* 
+/*
  *  This function will re-check the search text syntax.
- */  
+ */
 static void
 hex_selected_cb(GtkWidget *button_rb _U_, gpointer parent_w)
 {
@@ -460,10 +458,10 @@
     return;
 }
 
-/* 
+/*
  *  This function will disable the string options until
  *  the string search is selected.
- */  
+ */
 static void
 string_selected_cb(GtkWidget *button_rb _U_, gpointer parent_w)
 {
@@ -474,7 +472,7 @@
     hex_data_rb = (GtkWidget *)OBJECT_GET_DATA(parent_w, E_SOURCE_HEX_KEY);
     decode_data_rb = (GtkWidget *)OBJECT_GET_DATA(parent_w, E_SOURCE_DECODE_KEY);
     summary_data_rb = (GtkWidget *)OBJECT_GET_DATA(parent_w, E_SOURCE_SUMMARY_KEY);
-    
+
     data_combo_lb = (GtkWidget *)OBJECT_GET_DATA(parent_w, E_FIND_STRINGTYPE_LABEL_KEY);
     data_combo_cb = (GtkWidget *)OBJECT_GET_DATA(parent_w, E_FIND_STRINGTYPE_KEY);
     data_case_cb = (GtkWidget *) OBJECT_GET_DATA(parent_w, E_CASE_SEARCH_KEY);
@@ -500,10 +498,10 @@
     return;
 }
 
-/* 
+/*
  *  This function will disable the filter button until
  *  the filter search is selected.
- */  
+ */
 static void
 filter_selected_cb(GtkWidget *button_rb _U_, gpointer parent_w)
 {
@@ -511,7 +509,7 @@
 
     filter_bt = (GtkWidget *)OBJECT_GET_DATA(parent_w, E_FILT_TE_BUTTON_KEY);
     filter_rb = (GtkWidget *)OBJECT_GET_DATA(parent_w, E_FIND_FILTERDATA_KEY);
-    
+
     if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(filter_rb)))
     {
         gtk_widget_set_sensitive(GTK_WIDGET(filter_bt), TRUE);
@@ -523,110 +521,6 @@
     return;
 }
 
-static guint8 *
-convert_string_to_hex(const char *string, size_t *nbytes)
-{
-  size_t n_bytes;
-  const char *p;
-  guchar c;
-  guint8 *bytes, *q, byte_val;
-
-  n_bytes = 0;
-  p = &string[0];
-  for (;;) {
-    c = *p++;
-    if (c == '\0')
-      break;
-    if (isspace(c))
-      continue;	/* allow white space */
-    if (c==':' || c=='.' || c=='-')
-      continue; /* skip any ':', '.', or '-' between bytes */
-    if (!isxdigit(c)) {
-      /* Not a valid hex digit - fail */
-      return NULL;
-    }
-
-    /*
-     * We can only match bytes, not nibbles; we must have a valid
-     * hex digit immediately after that hex digit.
-     */
-    c = *p++;
-    if (!isxdigit(c))
-      return NULL;
-
-    /* 2 hex digits = 1 byte */
-    n_bytes++;
-  }
-
-  /*
-   * Were we given any hex digits?
-   */
-  if (n_bytes == 0) {
-      /* No. */
-      return NULL;
-  }
-
-  /*
-   * OK, it's valid, and it generates "n_bytes" bytes; generate the
-   * raw byte array.
-   */
-  bytes = g_malloc(n_bytes);
-  p = &string[0];
-  q = &bytes[0];
-  for (;;) {
-    c = *p++;
-    if (c == '\0')
-      break;
-    if (isspace(c))
-      continue;	/* allow white space */
-    if (c==':' || c=='.' || c=='-')
-      continue; /* skip any ':', '.', or '-' between bytes */
-    /* From the loop above, we know this is a hex digit */
-    if (isdigit(c))
-      byte_val = c - '0';
-    else if (c >= 'a')
-      byte_val = (c - 'a') + 10;
-    else
-      byte_val = (c - 'A') + 10;
-    byte_val <<= 4;
-
-    /* We also know this is a hex digit */
-    c = *p++;
-    if (isdigit(c))
-      byte_val |= c - '0';
-    else if (c >= 'a')
-      byte_val |= (c - 'a') + 10;
-    else if (c >= 'A')
-      byte_val |= (c - 'A') + 10;
-
-    *q++ = byte_val;
-  }
-  *nbytes = n_bytes;
-  return bytes;
-}
-
-static char *
-convert_string_case(const char *string, gboolean case_insensitive)
-{
-  char *out_string;
-  const char *p;
-  char c;
-  char *q;
-
-  /*
-   * Copy if if it's a case-sensitive search; uppercase it if it's
-   * a case-insensitive search.
-   */
-  if (case_insensitive) {
-    out_string = g_malloc(strlen(string) + 1);
-    for (p = &string[0], q = &out_string[0]; (c = *p) != '\0'; p++, q++)
-      *q = toupper((unsigned char)*p);
-    *q = '\0';
-  } else
-    out_string = g_strdup(string);
-  return out_string;
-}
-
 static void
 find_frame_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w)
 {
@@ -748,7 +642,7 @@
       g_free(string);
       if (!found_packet) {
         /* We didn't find the packet. */
-        simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK, 
+        simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK,
             "%sFound no match!%s\n\n"
             "No packet contained that string in its dissected display.",
             simple_dialog_primary_start(), simple_dialog_primary_end());
@@ -760,7 +654,7 @@
       g_free(string);
       if (!found_packet) {
         /* We didn't find the packet. */
-        simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK, 
+        simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK,
             "%sFound no match!%s\n\n"
             "No packet contained that string in its Info column.",
             simple_dialog_primary_start(), simple_dialog_primary_end());
@@ -772,7 +666,7 @@
       g_free(string);
       if (!found_packet) {
         /* We didn't find the packet. */
-        simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK, 
+        simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK,
             "%sFound no match!%s\n\n"
             "No packet contained that string in its data.",
             simple_dialog_primary_start(), simple_dialog_primary_end());
@@ -784,7 +678,7 @@
     dfilter_free(sfcode);
     if (!found_packet) {
       /* We didn't find a packet */
-      simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK, 
+      simple_dialog(ESD_TYPE_INFO, ESD_BTN_OK,
           "%sFound no match!%s\n\n"
           "No packet matched that filter.",
           simple_dialog_primary_start(), simple_dialog_primary_end());
@@ -879,7 +773,7 @@
 }
 
 /* this function jumps to the next packet matching the filter */
-void   
+void
 find_previous_next_frame_with_filter(char *filter, gboolean backwards)
 {
   dfilter_t *sfcode;
diff -urN ethereal-0.10.6/gtk/follow_dlg.c ethereal-0.10.7/gtk/follow_dlg.c
--- ethereal-0.10.6/gtk/follow_dlg.c	2004-08-12 17:41:48.000000000 -0500
+++ ethereal-0.10.7/gtk/follow_dlg.c	2004-10-20 17:34:32.000000000 -0500
@@ -1,6 +1,6 @@
 /* follow_dlg.c
  *
- * $Id: follow_dlg.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: follow_dlg.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -54,14 +54,15 @@
 #include "alert_box.h"
 #include "simple_dialog.h"
 #include <epan/dissectors/packet-ipv6.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/addr_resolv.h>
+#include <epan/charsets.h>
 #include "util.h"
 #include "ui_util.h"
 #include <epan/epan_dissect.h>
 #include <epan/filesystem.h>
 #include "compat_macros.h"
-#include "ipproto.h"
+#include <epan/ipproto.h>
 #include "tap_menu.h"
 #include "print_mswin.h"
 #include "font_utils.h"
diff -urN ethereal-0.10.6/gtk/font_utils.c ethereal-0.10.7/gtk/font_utils.c
--- ethereal-0.10.6/gtk/font_utils.c	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/font_utils.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* font_utils.c
  * Utilities to use for font manipulation
  *
- * $Id: font_utils.c 11515 2004-07-25 09:54:37Z guy $
+ * $Id: font_utils.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -33,12 +33,12 @@
 
 #include <epan/packet.h>
 
-#ifdef WIN32
+#ifdef _WIN32
 #include <windows.h>
 #endif
 
 #include "recent.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #include "gtkglobals.h"
 
@@ -572,7 +572,7 @@
 }
 
 
-#ifdef WIN32
+#ifdef _WIN32
 
 #define NAME_BUFFER_LEN 32
 
@@ -712,7 +712,7 @@
 }
 #endif /* GTK_MAJOR_VERSION */
 
-#endif /* WIN32 */
+#endif /* _WIN32 */
 
 
 void font_init(void)
@@ -721,7 +721,7 @@
   gchar *bold_font_name;
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 #if GTK_MAJOR_VERSION >= 2
   /* try to load the application font for GTK2 */
   try_to_get_windows_font_gtk2();
diff -urN ethereal-0.10.6/gtk/font_utils.h ethereal-0.10.7/gtk/font_utils.h
--- ethereal-0.10.6/gtk/font_utils.h	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/font_utils.h	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* font_utils.h
  * Declarations of utilities to use for font manipulation
  *
- * $Id: font_utils.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: font_utils.h 11972 2004-09-11 23:03:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -54,7 +54,7 @@
  */
 extern fa_ret_t user_font_apply(void);
 
-#ifdef WIN32 
+#ifdef _WIN32 
 #if GTK_MAJOR_VERSION < 2
 /** Init the application font (GTK1 only). 
  *
diff -urN ethereal-0.10.6/gtk/goto_dlg.c ethereal-0.10.7/gtk/goto_dlg.c
--- ethereal-0.10.6/gtk/goto_dlg.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/goto_dlg.c	2004-10-20 17:34:32.000000000 -0500
@@ -1,7 +1,7 @@
 /* goto_dlg.c
  * Routines for "go to packet" window
  *
- * $Id: goto_dlg.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: goto_dlg.c 11887 2004-09-02 19:52:39Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -136,18 +136,7 @@
 void
 goto_framenum_cb(GtkWidget *w _U_, gpointer data _U_)
 {
-    if (cfile.finfo_selected) {
-	header_field_info	*hfinfo;
-	guint32			framenum;
-
-	hfinfo = cfile.finfo_selected->hfinfo;
-	g_assert(hfinfo);
-	if (hfinfo->type == FT_FRAMENUM) {
-	    framenum = fvalue_get_integer(&cfile.finfo_selected->value);
-	    if (framenum != 0)
-		goto_frame(&cfile, framenum);
-	}
-    }
+    goto_framenum(&cfile);
 }
 
 void
diff -urN ethereal-0.10.6/gtk/gsm_a_stat.c ethereal-0.10.7/gtk/gsm_a_stat.c
--- ethereal-0.10.6/gtk/gsm_a_stat.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/gsm_a_stat.c	2004-10-20 17:34:31.000000000 -0500
@@ -5,7 +5,7 @@
  *
  * MUCH code modified from service_response_time_table.c.
  *
- * $Id: gsm_a_stat.c 11436 2004-07-19 21:42:01Z ulfl $
+ * $Id: gsm_a_stat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -45,7 +45,7 @@
 #include "image/clist_descend.xpm"
 #include "simple_dialog.h"
 #include "dlg_utils.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include <epan/dissectors/packet-bssap.h>
 #include <epan/dissectors/packet-gsm_a.h>
diff -urN ethereal-0.10.6/gtk/gsm_map_stat.c ethereal-0.10.7/gtk/gsm_map_stat.c
--- ethereal-0.10.6/gtk/gsm_map_stat.c	2004-08-12 17:41:47.000000000 -0500
+++ ethereal-0.10.7/gtk/gsm_map_stat.c	2004-10-20 17:34:32.000000000 -0500
@@ -5,7 +5,7 @@
  *
  * MUCH code modified from service_response_time_table.c.
  *
- * $Id: gsm_map_stat.c 11436 2004-07-19 21:42:01Z ulfl $
+ * $Id: gsm_map_stat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -46,7 +46,7 @@
 #include "simple_dialog.h"
 #include "dlg_utils.h"
 #include "ui_util.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "../globals.h"
 #include "filter_dlg.h"
diff -urN ethereal-0.10.6/gtk/gsm_map_summary.c ethereal-0.10.7/gtk/gsm_map_summary.c
--- ethereal-0.10.6/gtk/gsm_map_summary.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/gsm_map_summary.c	2004-10-20 17:34:32.000000000 -0500
@@ -6,7 +6,7 @@
  *
  * Modified from summary_dlg.c
  *
- * $Id: gsm_map_summary.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: gsm_map_summary.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -43,7 +43,7 @@
 #include "dlg_utils.h"
 #include "ui_util.h"
 #include "compat_macros.h"
-#include "tap.h"
+#include <epan/tap.h>
 
 #include <epan/dissectors/packet-gsm_map.h>
 #include "gsm_map_stat.h"
diff -urN ethereal-0.10.6/gtk/gui_prefs.c ethereal-0.10.7/gtk/gui_prefs.c
--- ethereal-0.10.6/gtk/gui_prefs.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/gui_prefs.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* gui_prefs.c
  * Dialog box for GUI preferences
  *
- * $Id: gui_prefs.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: gui_prefs.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -35,7 +35,7 @@
 #include "gtkglobals.h"
 #include "help_dlg.h"
 #include "supported_protos_dlg.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "prefs_dlg.h"
 #include "ui_util.h"
 #include "simple_dialog.h"
@@ -52,6 +52,7 @@
 
 static gint fetch_enum_value(gpointer control, const enum_val_t *enumvals);
 static gint fileopen_dir_changed_cb(GtkWidget *myentry _U_, GdkEvent *event, gpointer parent_w);
+static gint fileopen_preview_changed_cb(GtkWidget *myentry _U_, GdkEvent *event, gpointer parent_w);
 static void fileopen_selected_cb(GtkWidget *mybutton_rb _U_, gpointer parent_w);
 static gint recent_files_count_changed_cb(GtkWidget *recent_files_entry _U_, 
 					  GdkEvent *event _U_, gpointer parent_w);
@@ -73,10 +74,12 @@
 
 #define GUI_CONSOLE_OPEN_KEY "console_open"
 #define GUI_FILEOPEN_KEY	"fileopen_behavior"
+#define GUI_FILEOPEN_PREVIEW_KEY "fileopen_preview_timeout"
 #define GUI_RECENT_FILES_COUNT_KEY "recent_files_count"
 #define GUI_FILEOPEN_DIR_KEY	"fileopen_directory"
 #define GUI_ASK_UNSAVED_KEY     "ask_unsaved"
 #define GUI_WEBBROWSER_KEY	    "webbrowser"
+#define GUI_FIND_WRAP_KEY       "find_wrap"
 
 #define GUI_TOOLBAR_STYLE_KEY	"toolbar_style"
 
@@ -128,6 +131,7 @@
 	{ NULL,    NULL,       0 }
 };
 
+
 static const enum_val_t toolbar_style_vals[] = {
   	{ "ICONS", "Icons only",     TB_STYLE_ICONS },
   	{ "TEXT",  "Text only",      TB_STYLE_TEXT },
@@ -165,6 +169,9 @@
 /* Used to contain the string from the Recent Files Count Max pref item */
 static char recent_files_count_max_str[128] = "";
 
+/* Used to contain the string from the Open File preview timeout pref item */
+static char open_file_preview_str[128] = "";
+
 #if GTK_MAJOR_VERSION < 2
 #define GUI_TABLE_ROWS 10
 #else
@@ -180,9 +187,10 @@
 #ifdef _WIN32
 	GtkWidget *console_open_om;
 #endif
-	GtkWidget *fileopen_rb, *fileopen_dir_te, *toolbar_style_om;
+	GtkWidget *fileopen_rb, *fileopen_dir_te, *fileopen_preview_te;
+	GtkWidget *toolbar_style_om;
     GtkWidget *filter_toolbar_placement_om;
-	GtkWidget *recent_files_count_max_te, *ask_unsaved_cb;
+	GtkWidget *recent_files_count_max_te, *ask_unsaved_cb, *find_wrap_cb;
     GtkWidget *webbrowser_te;
 	GtkWidget *save_position_cb, *save_size_cb, *save_maximized_cb;
 #if GTK_MAJOR_VERSION < 2
@@ -306,6 +314,14 @@
 	SIGNAL_CONNECT(fileopen_dir_te, "focus-out-event",
 	    fileopen_dir_changed_cb, main_vb);
 
+	/* File Open dialog preview timeout */
+	fileopen_preview_te = create_preference_entry(main_tb, pos++,
+	    "\"File Open\" preview timeout:", "Timeout, until preview gives up scanning the capture file content.", open_file_preview_str);
+	g_snprintf(current_val_str, 128, "%d", prefs.gui_fileopen_preview);
+	gtk_entry_set_text(GTK_ENTRY(fileopen_preview_te), current_val_str);
+	OBJECT_SET_DATA(main_vb, GUI_FILEOPEN_PREVIEW_KEY, fileopen_preview_te);
+	SIGNAL_CONNECT(fileopen_preview_te, "focus_out_event", fileopen_preview_changed_cb, main_vb);
+
 	/* Number of entries in the recent_files list ... */
 	recent_files_count_max_te = create_preference_entry(main_tb, pos++,
 	    "\"Open Recent\" max. list entries:", "Maximum number of recent files", recent_files_count_max_str);
@@ -321,6 +337,11 @@
 	    "Ask for unsaved capture files:", NULL, prefs.gui_ask_unsaved);
 	OBJECT_SET_DATA(main_vb, GUI_ASK_UNSAVED_KEY, ask_unsaved_cb);
 
+    /* do we want to wrap when searching for data? */
+	find_wrap_cb = create_preference_check_button(main_tb, pos++,
+	    "Wrap to end/beginning of file during a find:", NULL, prefs.gui_find_wrap);
+	OBJECT_SET_DATA(main_vb, GUI_FIND_WRAP_KEY, find_wrap_cb);
+
 	/* Webbrowser */
     if(browser_needs_pref()) {
 	    webbrowser_te = create_preference_entry(main_tb, pos++, 
@@ -432,6 +453,9 @@
     prefs.gui_ask_unsaved = 
 	    gtk_toggle_button_get_active(OBJECT_GET_DATA(w, GUI_ASK_UNSAVED_KEY));
 
+    prefs.gui_find_wrap = 
+	    gtk_toggle_button_get_active(OBJECT_GET_DATA(w, GUI_FIND_WRAP_KEY));
+    
     if(browser_needs_pref()) {
 		g_free(prefs.gui_webbrowser);
 	    prefs.gui_webbrowser = g_strdup(gtk_entry_get_text(
@@ -548,6 +572,31 @@
 }
 
 static gint
+fileopen_preview_changed_cb(GtkWidget *recent_files_entry _U_, 
+			      GdkEvent *event _U_, gpointer parent_w)
+{
+    GtkWidget	*fileopen_preview_te;
+    guint newval;
+    
+    fileopen_preview_te = (GtkWidget *)OBJECT_GET_DATA(parent_w, GUI_FILEOPEN_PREVIEW_KEY);
+
+    /*
+     * Now, just convert the string to a number and store it in the prefs
+     * filed ...
+     */
+
+    newval = strtol(gtk_entry_get_text (GTK_ENTRY(fileopen_preview_te)), NULL, 10);
+
+    if (newval > 0) {
+      prefs.gui_fileopen_preview = newval;
+    }
+
+    /* We really should pop up a nasty dialog box if newval <= 0 */
+
+    return FALSE;
+}
+
+static gint
 fileopen_dir_changed_cb(GtkWidget *fileopen_entry _U_, GdkEvent *event _U_, gpointer parent_w)
 {
     GtkWidget	*fileopen_dir_te;
diff -urN ethereal-0.10.6/gtk/h225_counter.c ethereal-0.10.7/gtk/h225_counter.c
--- ethereal-0.10.6/gtk/h225_counter.c	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/h225_counter.c	2004-10-20 17:34:31.000000000 -0500
@@ -2,7 +2,7 @@
  * h225 message counter for ethereal
  * Copyright 2003 Lars Roland
  *
- * $Id: h225_counter.c 11548 2004-07-28 07:16:33Z guy $
+ * $Id: h225_counter.c 12183 2004-10-02 08:41:52Z ulfl $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -40,7 +40,7 @@
 #include <epan/value_string.h>
 
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include <epan/dissectors/packet-h225.h>
 #include "gtk_stat_util.h"
@@ -527,7 +527,7 @@
 	hs->vbox=gtk_vbox_new(FALSE, 3);
 	gtk_container_set_border_width(GTK_CONTAINER(hs->vbox), 12);
 
-	init_main_stat_window(hs->win, hs->vbox, "ITU-T H.225 Message and Message Reason Counter", filter);
+	init_main_stat_window(hs->win, hs->vbox, "H.225 Message and Message Reason Counter", filter);
 
         /* init a scrolled window*/
 	hs->scrolled_window = scrolled_window_new(NULL, NULL);
@@ -564,6 +564,6 @@
 {
 	register_ethereal_tap("h225,counter", gtk_h225counter_init);
 
-	register_tap_menu_item("ITU-T H.225...", REGISTER_TAP_GROUP_NONE,
+	register_tap_menu_item("H.225...", REGISTER_TAP_GROUP_NONE,
 	    gtk_tap_dfilter_dlg_cb, NULL, NULL, &(h225_counter_dlg));
 }
diff -urN ethereal-0.10.6/gtk/h225_ras_srt.c ethereal-0.10.7/gtk/h225_ras_srt.c
--- ethereal-0.10.6/gtk/h225_ras_srt.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/h225_ras_srt.c	2004-10-20 17:34:30.000000000 -0500
@@ -2,7 +2,7 @@
  * h225 RAS Service Response Time statistics for ethereal
  * Copyright 2003 Lars Roland
  *
- * $Id: h225_ras_srt.c 11548 2004-07-28 07:16:33Z guy $
+ * $Id: h225_ras_srt.c 12183 2004-10-02 08:41:52Z ulfl $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -40,7 +40,7 @@
 #include <epan/value_string.h>
 
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include <epan/dissectors/packet-h225.h>
 #include "../timestats.h"
@@ -307,7 +307,7 @@
 	hs->vbox=gtk_vbox_new(FALSE, 3);
 	gtk_container_set_border_width(GTK_CONTAINER(hs->vbox), 12);
 
-	init_main_stat_window(hs->win, hs->vbox, "ITU-T H.225 RAS Service Response Time", filter);
+	init_main_stat_window(hs->win, hs->vbox, "H.225 RAS Service Response Time", filter);
 
         /* init a scrolled window*/
 	hs->scrolled_window = scrolled_window_new(NULL, NULL);
@@ -344,6 +344,6 @@
 {
 	register_ethereal_tap("h225,srt", gtk_h225rassrt_init);
 
-	register_tap_menu_item("ITU-T H.225 RAS...", REGISTER_TAP_GROUP_RESPONSE_TIME,
+	register_tap_menu_item("H.225 RAS...", REGISTER_TAP_GROUP_RESPONSE_TIME,
 	    gtk_tap_dfilter_dlg_cb, NULL, NULL, &(h225_rassrt_dlg));
 }
diff -urN ethereal-0.10.6/gtk/h323_analysis.c ethereal-0.10.7/gtk/h323_analysis.c
--- ethereal-0.10.6/gtk/h323_analysis.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/gtk/h323_analysis.c	2004-10-20 17:34:29.000000000 -0500
@@ -0,0 +1,570 @@
+/* h323_analysis.c
+ * H323 analysis addition for ethereal
+ *
+ * $Id: h323_analysis.c 12191 2004-10-03 16:28:29Z ulfl $
+ *
+ * Copyright 2004, Iskratel, Ltd, Kranj
+ * By Miha Jemec <m.jemec@iskratel.si>
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation,  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+/*do not define this symbol. will be added soon*/
+/*#define USE_CONVERSATION_GRAPH 1*/
+
+#include "h323_analysis.h"
+#include "h323_conversations.h"
+#include "h323_conversations_dlg.h"
+
+#include <epan/epan_dissect.h>
+#include <epan/filesystem.h>
+
+#include "globals.h"
+
+#include "util.h"
+#include <epan/tap.h>
+
+#include <epan/dissectors/packet-h225.h>
+#include <epan/dissectors/packet-h245.h>
+
+/* in /gtk ... */
+#include "dlg_utils.h"
+#include "ui_util.h"
+#include "alert_box.h"
+#include "simple_dialog.h"
+#include "tap_menu.h"
+#include "main.h"
+#include "progress_dlg.h"
+#include "compat_macros.h"
+
+#include <string.h>
+
+/****************************************************************************/
+/* structure that holds general information about the connection */
+typedef struct _user_data_t {
+        /* tap associated data*/
+        guint32 ip_src;
+        guint16 port_src;
+        guint32 ip_dst;
+        guint16 port_dst;
+        guint32 ip_src_h245;
+        guint16 port_src_h245;
+        guint16 transport;
+
+	GtkWidget *window;
+	GtkCList *clist1;
+	GtkWidget *label_stats;
+	GtkCList *selected_clist1;
+	gint selected_row;
+
+} user_data_t;
+
+/* Column titles. */
+static gchar *titles[7] =  {
+	"Packet",
+	"Time",
+	"Delay",
+	"             Side A",
+	"Direction",
+	"             Side B",
+	"Comment"
+};
+
+typedef const guint8 * ip_addr_p;
+
+static gint32 last_sec = 0, last_usec = 0;
+
+
+/****************************************************************************/
+/* TAP FUNCTIONS */
+
+/****************************************************************************/
+/* when there is a [re]reading of packet's */
+static void
+h225_reset(void *user_data_arg _U_)
+{
+	last_sec = 0;
+	last_usec = 0;
+	return;
+}
+
+/****************************************************************************/
+/* here we can redraw the output */
+/* not used yet */
+static void h225_draw(void *prs _U_)
+{
+	return;
+}
+
+
+static const GdkColor COLOR_DEFAULT = {0, 0xffff, 0xffff, 0xffff};
+static const GdkColor COLOR_ERROR = {0, 0xffff, 0xbfff, 0xbfff};
+static const GdkColor COLOR_WARNING = {0, 0xffff, 0xdfff, 0xbfff};
+static const GdkColor COLOR_CN = {0, 0xbfff, 0xbfff, 0xffff};
+
+/****************************************************************************/
+/* append a line to clist1 */
+static void add_to_clist1(GtkCList *clist1, guint32 number, gchar *time,
+                         double delay, gchar *sideA, gboolean direction, gchar *sideB,
+                         gchar *comment, GdkColor *color)
+{
+        guint added_row;
+        gchar *data[7];
+        gchar field[7][32];
+
+        data[0]=&field[0][0];
+        data[1]=&field[1][0];
+        data[2]=&field[2][0];
+        data[3]=&field[3][0];
+        data[4]=&field[4][0];
+        data[5]=&field[5][0];
+        data[6]=&field[6][0];
+
+        g_snprintf(field[0], 32, "%u", number);
+        g_snprintf(field[1], 32, "%s", time);
+        g_snprintf(field[2], 32, "%f", delay);
+        g_snprintf(field[3], 32, "%s", sideA);
+        g_snprintf(field[4], 20, "%s", direction? "---->" : "<----");
+        g_snprintf(field[5], 32, "%s", sideB);
+        g_snprintf(field[6], 32, "%s", comment);
+
+        added_row = gtk_clist_append(GTK_CLIST(clist1), data);
+        gtk_clist_set_row_data(GTK_CLIST(clist1), added_row, GUINT_TO_POINTER(number));
+        gtk_clist_set_background(GTK_CLIST(clist1), added_row, color);
+}
+
+
+/****************************************************************************/
+/* whenever a h225 packet is seen by the tap listener */
+static int h225_packet(void *user_data_arg, packet_info *pinfo, epan_dissect_t *edt _U_, void *h225info_arg)
+{
+	user_data_t *user_data = user_data_arg;
+	h225_packet_info *h225ptr_info = h225info_arg;	
+	GdkColor color = COLOR_DEFAULT;
+
+        gchar timeStr[32];
+        gchar message[32];
+	guint32 src, dst;
+	double delay;
+	gint32 delay_sec, delay_usec;
+
+	/* time since beginning of capture */
+        g_snprintf(timeStr, sizeof(timeStr), "%d.%06d", pinfo->fd->rel_secs, pinfo->fd->rel_usecs);
+
+	/* time since previous packet seen in tap listener */
+	delay_sec = pinfo->fd->rel_secs - last_sec;
+	delay_usec = pinfo->fd->rel_usecs - last_usec;
+	
+	delay = (double)delay_sec + ((double)delay_usec)/1000000;
+
+	last_sec = pinfo->fd->rel_secs;
+	last_usec = pinfo->fd->rel_usecs;
+
+	switch (h225ptr_info->cs_type) {
+		
+		case H225_SETUP:
+			g_snprintf(message, sizeof(message),"H225 Setup");
+			break;
+		case H225_CALL_PROCEDING:
+			g_snprintf(message, sizeof(message),"H225 Call Proceding");
+			break;
+		case H225_ALERTING:
+			g_snprintf(message, sizeof(message),"H225 Alerting");
+			break;
+		case H225_CONNECT:
+			g_snprintf(message, sizeof(message),"H225 Connect");
+			break;
+		case H225_RELEASE_COMPLET:
+			g_snprintf(message, sizeof(message),"H225 Release Complet");
+			break;
+		case H225_OTHER:
+			g_snprintf(message, sizeof(message),"H225 Other");
+		}
+
+	g_memmove(&src, pinfo->src.data, 4);
+        g_memmove(&dst, pinfo->dst.data, 4);
+
+	if (src == user_data->ip_src)
+		add_to_clist1(user_data->clist1,pinfo->fd->num,timeStr,delay,message, 1, "", "", &color);
+	else
+		add_to_clist1(user_data->clist1, pinfo->fd->num, timeStr,delay, "", 0, message, "", &color);
+
+	return 0;
+}
+
+
+/****************************************************************************/
+/* whenever a h245 packet is seen by the tap listener */
+static int h245_packet(void *user_data_arg, packet_info *pinfo, epan_dissect_t *edt _U_, void *h245info_arg)
+{
+
+	user_data_t *user_data = user_data_arg;
+	h245_packet_info *h245ptr_info = h245info_arg;	
+	GdkColor color = COLOR_DEFAULT;
+
+        gchar timeStr[32];
+        gchar message[32];
+	guint32 src, dst;
+	double delay;
+	gint32 delay_sec, delay_usec;
+
+	/* time since beginning of capture */
+        g_snprintf(timeStr, sizeof(timeStr), "%d.%06d", pinfo->fd->rel_secs, pinfo->fd->rel_usecs);
+
+	/* time since previous packet seen in tap listener */
+	delay_sec = pinfo->fd->rel_secs - last_sec;
+	delay_usec = pinfo->fd->rel_usecs - last_usec;
+	
+	delay = (double)delay_sec + ((double)delay_usec)/1000000;
+
+	last_sec = pinfo->fd->rel_secs;
+	last_usec = pinfo->fd->rel_usecs;
+
+	switch (h245ptr_info->msg_type) {
+		
+		case H245_TermCapSet:
+			g_snprintf(message, sizeof(message),"H245 TermCapSet");
+			break;
+		case H245_TermCapSetAck:
+			g_snprintf(message, sizeof(message),"H245_TermCapSetAck");
+			break;
+		case H245_TermCapSetRjc:
+			g_snprintf(message, sizeof(message),"H245_TermCapSetRjc");
+			break;
+		case H245_TermCapSetRls:
+			g_snprintf(message, sizeof(message),"H245_TermCapSetRls");
+			break;
+		case H245_OpenLogChn:
+			g_snprintf(message, sizeof(message),"H245_OpenLogChn");
+			break;
+		case H245_OpenLogChnCnf:
+			g_snprintf(message, sizeof(message),"H245_OpenLogChnCnf");
+			break;
+		case H245_OpenLogChnAck:
+			g_snprintf(message, sizeof(message),"H245_OpenLogChnAck");
+			break;
+		case H245_OpenLogChnRjc:
+			g_snprintf(message, sizeof(message),"H245_OpenLogChnRjc");
+			break;
+		case H245_CloseLogChn:
+			g_snprintf(message, sizeof(message),"H245_CloseLogChn");
+			break;
+		case H245_CloseLogChnAck:
+			g_snprintf(message, sizeof(message),"H245_CloseLogChnAck");
+			break;
+		case H245_MastSlvDet:
+			g_snprintf(message, sizeof(message),"H245_MastSlvDet");
+			break;
+		case H245_MastSlvDetAck:
+			g_snprintf(message, sizeof(message),"H245_MastSlvDetAck");
+			break;
+		case H245_MastSlvDetRjc:
+			g_snprintf(message, sizeof(message),"H245_MastSlvDetRjc");
+			break;
+		case H245_MastSlvDetRls:
+			g_snprintf(message, sizeof(message),"H245_MastSlvDetRls");
+			break;
+		case H245_OTHER:
+			g_snprintf(message, sizeof(message),"H225 Other");
+		}
+
+	g_memmove(&src, pinfo->src.data, 4);
+        g_memmove(&dst, pinfo->dst.data, 4);
+
+	if (src == user_data->ip_src)
+		add_to_clist1(user_data->clist1,pinfo->fd->num,timeStr,delay,message, 1, "", "", &color);
+	else
+		add_to_clist1(user_data->clist1, pinfo->fd->num, timeStr,delay, "", 0, message, "", &color);
+
+	return 0;
+}
+
+
+/**************** Callbacks *************************************************/
+/****************************************************************************/
+/* XXX just copied from gtk/rpc_stat.c */
+void protect_thread_critical_region(void);
+void unprotect_thread_critical_region(void);
+
+
+/****************************************************************************/
+/* close the dialog window and remove the tap listener */
+static void on_destroy(GtkWidget *win _U_, user_data_t *user_data _U_)
+{
+        g_free(user_data);
+}
+
+/****************************************************************************/
+static void on_clist_select_row(GtkCList        *clist1 _U_,
+                                gint             row _U_,
+                                gint             column _U_,
+                                GdkEvent        *event _U_,
+                                user_data_t     *user_data _U_)
+{
+        user_data->selected_clist1 = clist1;
+        user_data->selected_row = row;
+}
+
+/****************************************************************************/
+static void on_goto_bt_clicked(GtkWidget *bt _U_, user_data_t *user_data _U_)
+{
+        guint fnumber;
+
+        if (user_data->selected_clist1!=NULL) {
+                fnumber = GPOINTER_TO_UINT(gtk_clist_get_row_data(
+                        GTK_CLIST(user_data->selected_clist1), user_data->selected_row) );
+               goto_frame(&cfile, fnumber);
+        }
+}
+
+
+/****************************************************************************/
+/* re-dissects all packets */
+static void on_refresh_bt_clicked(GtkWidget *bt _U_, user_data_t *user_data _U_)
+{
+        gchar filter_text_h225[256];
+        gchar filter_text_h245[256];
+        /*gchar filter_text_rtp[256];*/
+        dfilter_t *sfcode;
+        GString *error_string;
+
+        /* clear the dialog box clists */
+        gtk_clist_clear(GTK_CLIST(user_data->clist1));
+
+        /* try to compile the filter for h225 */
+	g_snprintf(filter_text_h225,sizeof(filter_text_h225),
+        "h225 && (( ip.src==%s && %s.srcport==%u && ip.dst==%s && %s.dstport==%u ) || ( ip.src==%s && %s.srcport==%u && ip.dst==%s && %s.dstport==%u ))",
+                ip_to_str((ip_addr_p)&(user_data->ip_src)),
+				transport_prot_name[user_data->transport],
+                user_data->port_src,
+                ip_to_str((ip_addr_p)&(user_data->ip_dst)),
+				transport_prot_name[user_data->transport],
+                user_data->port_dst,
+                ip_to_str((ip_addr_p)&(user_data->ip_dst)),
+				transport_prot_name[user_data->transport],
+                user_data->port_dst,
+                ip_to_str((ip_addr_p)&(user_data->ip_src)),
+				transport_prot_name[user_data->transport],
+                user_data->port_src
+                );
+
+        if (!dfilter_compile(filter_text_h225, &sfcode)) {
+                simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, dfilter_error_msg);
+                return;
+        }
+
+        /* try to compile the filter for h245 */
+	g_snprintf(filter_text_h245,sizeof(filter_text_h245), 
+        "h245 && (( ip.src==%s && %s.srcport==%u ) || ( ip.dst==%s && %s.dstport==%u ))",
+                ip_to_str((ip_addr_p)&(user_data->ip_src_h245)),
+				transport_prot_name[user_data->transport],
+                user_data->port_src_h245,
+                ip_to_str((ip_addr_p)&(user_data->ip_src_h245)),
+				transport_prot_name[user_data->transport],
+                user_data->port_src_h245
+                );
+
+        if (!dfilter_compile(filter_text_h245, &sfcode)) {
+                simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, dfilter_error_msg);
+                return;
+        }
+
+	/* register tap h225 listener */
+        error_string = register_tap_listener("h225", user_data, filter_text_h225,
+                h225_reset, h225_packet, h225_draw);
+        if (error_string != NULL) {
+                simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, error_string->str);
+                        g_string_free(error_string, TRUE);
+                return;
+        }
+
+	/* register tap h245 listener */
+        error_string = register_tap_listener("h245", user_data, filter_text_h245,
+                NULL, h245_packet, NULL);
+        if (error_string != NULL) {
+                simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, error_string->str);
+                        g_string_free(error_string, TRUE);
+                return;
+        }
+
+        /* retap all packets */
+        retap_packets(&cfile);
+
+        /* remove tap listener again */
+        protect_thread_critical_region();
+        remove_tap_listener(user_data);
+        remove_tap_listener(user_data);
+        unprotect_thread_critical_region();
+
+}
+
+
+/************************************************************************************/
+/************** Create the dialog box with all widgets ******************************/
+void create_h225_dialog(user_data_t* user_data)
+{
+        GtkWidget *window = NULL;
+        GtkWidget *clist_h225;
+        /*GtkWidget *label_stats;*/
+
+        GtkWidget *main_vb;
+        GtkWidget *label;
+        GtkWidget *scrolled_window;
+        GtkWidget *box4, *goto_bt, *close_bt, *refresh_bt;
+        GtkTooltips *tooltips = gtk_tooltips_new();
+
+        gchar label_forward[150];
+
+        gchar str_ip_src[16];
+        gchar str_ip_dst[16];
+
+        /* as multiple analysis windows can be opened, 
+         * don't use window_new_with_geom(), as that will place them on top of each other! */
+	window = window_new(GTK_WINDOW_TOPLEVEL, "Ethereal: H.323 VoIP Analysis");
+        gtk_window_set_default_size(GTK_WINDOW(window), 700, 350);
+
+        /* Container for each row of widgets */
+        main_vb = gtk_vbox_new(FALSE, 2);
+        gtk_container_add(GTK_CONTAINER(window), main_vb);
+        gtk_container_set_border_width(GTK_CONTAINER(main_vb), 2);
+        gtk_widget_show(main_vb);
+
+        strcpy(str_ip_src, ip_to_str((ip_addr_p)&user_data->ip_src));
+        strcpy(str_ip_dst, ip_to_str((ip_addr_p)&user_data->ip_dst));
+
+        g_snprintf(label_forward, 149,
+                "\nAnalysing H.323 Call between  %s port %u (Side A) and  %s port %u (Side B)\n",
+                str_ip_src, user_data->port_src, str_ip_dst, user_data->port_dst);
+
+        /* label */
+        label = gtk_label_new(label_forward);
+        gtk_box_pack_start (GTK_BOX (main_vb), label, FALSE, FALSE, 0);
+
+        /* scrolled window */
+        scrolled_window = scrolled_window_new (NULL, NULL);
+	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),
+                                        GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+        gtk_box_pack_start (GTK_BOX (main_vb), scrolled_window, TRUE, TRUE, 0);
+
+        /* place for some statistics */
+        /*label_stats = gtk_label_new("\n");*/
+        /*gtk_box_pack_start(GTK_BOX(main_vb), label_stats, FALSE, FALSE, 0);*/
+
+        /* packet clist */
+	clist_h225 = gtk_clist_new_with_titles(7, titles);
+        gtk_container_add(GTK_CONTAINER(scrolled_window), clist_h225);
+        gtk_widget_show(clist_h225);
+	SIGNAL_CONNECT(clist_h225, "select_row", on_clist_select_row, user_data);
+
+        /* column widths and justification */
+        gtk_clist_set_column_width(GTK_CLIST(clist_h225), 0, 45);
+        gtk_clist_set_column_width(GTK_CLIST(clist_h225), 1, 90);
+        gtk_clist_set_column_width(GTK_CLIST(clist_h225), 2, 90);
+        gtk_clist_set_column_width(GTK_CLIST(clist_h225), 3, 140);
+        gtk_clist_set_column_width(GTK_CLIST(clist_h225), 4, 60);
+        gtk_clist_set_column_width(GTK_CLIST(clist_h225), 5, 140);
+        gtk_clist_set_column_justification(GTK_CLIST(clist_h225), 0, GTK_JUSTIFY_CENTER);
+        gtk_clist_set_column_justification(GTK_CLIST(clist_h225), 1, GTK_JUSTIFY_CENTER);
+        gtk_clist_set_column_justification(GTK_CLIST(clist_h225), 2, GTK_JUSTIFY_CENTER);
+        gtk_clist_set_column_justification(GTK_CLIST(clist_h225), 3, GTK_JUSTIFY_LEFT);
+        gtk_clist_set_column_justification(GTK_CLIST(clist_h225), 4, GTK_JUSTIFY_CENTER);
+        gtk_clist_set_column_justification(GTK_CLIST(clist_h225), 5, GTK_JUSTIFY_LEFT);
+        gtk_clist_set_column_justification(GTK_CLIST(clist_h225), 6, GTK_JUSTIFY_CENTER);
+
+        gtk_widget_show(scrolled_window);
+
+        /* buttons */
+        box4 = gtk_hbutton_box_new();
+        gtk_box_pack_start(GTK_BOX(main_vb), box4, FALSE, FALSE, 0);
+        gtk_container_set_border_width(GTK_CONTAINER(box4), 10);
+        gtk_button_box_set_layout(GTK_BUTTON_BOX (box4), GTK_BUTTONBOX_END);
+        gtk_button_box_set_spacing(GTK_BUTTON_BOX (box4), 10);
+        gtk_button_box_set_child_ipadding(GTK_BUTTON_BOX (box4), 4, 0);
+        gtk_widget_show(box4);
+
+	refresh_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_REFRESH);
+        gtk_container_add(GTK_CONTAINER(box4), refresh_bt);
+        gtk_widget_show(refresh_bt);
+        SIGNAL_CONNECT(refresh_bt, "clicked", on_refresh_bt_clicked, user_data);
+        gtk_tooltips_set_tip (tooltips, refresh_bt, "Refresh data", NULL);
+
+	goto_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_JUMP_TO);
+        gtk_container_add(GTK_CONTAINER(box4), goto_bt);
+        gtk_widget_show(goto_bt);
+        SIGNAL_CONNECT(goto_bt, "clicked", on_goto_bt_clicked, user_data);
+        gtk_tooltips_set_tip (tooltips, goto_bt, "Jump to the selected packet", NULL);
+
+        close_bt = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE);
+        gtk_container_add(GTK_CONTAINER(box4), close_bt);
+	GTK_WIDGET_SET_FLAGS(close_bt, GTK_CAN_DEFAULT);
+        gtk_widget_show(close_bt);
+        gtk_tooltips_set_tip (tooltips, close_bt, "Close this dialog", NULL);
+	window_set_cancel_button(window, close_bt, window_cancel_button_cb);
+
+	SIGNAL_CONNECT(window, "delete_event", window_delete_event_cb, NULL);
+        SIGNAL_CONNECT(window, "destroy", on_destroy, user_data);
+
+	gtk_widget_show_all(window);
+	window_present(window);
+
+	/* some widget references need to be saved for outside use */
+	user_data->window = window;
+        user_data->clist1 = GTK_CLIST(clist_h225);
+        user_data->label_stats = label;
+        user_data->selected_clist1 = GTK_CLIST(clist_h225);
+        user_data->selected_row = 0;
+}
+
+
+/****************************************************************************/
+void h323_analysis(
+                guint32 ip_src,
+                guint16 port_src,
+                guint32 ip_dst,
+                guint16 port_dst,
+                guint32 ip_src_h245,
+                guint16 port_src_h245,
+                guint16 transport
+                )
+{
+        user_data_t *user_data;
+
+        /* init */
+        user_data = g_malloc(sizeof(user_data_t));
+
+        user_data->ip_src = ip_src;
+        user_data->port_src = port_src;
+        user_data->ip_dst = ip_dst;
+        user_data->port_dst = port_dst;
+        user_data->ip_src_h245 = ip_src_h245;
+        user_data->port_src_h245 = port_src_h245;
+        user_data->transport = transport;
+
+	/* create the dialog box */
+        create_h225_dialog(user_data);
+
+	/* proceed as if the Refresh button would have been pressed */
+        on_refresh_bt_clicked(NULL, user_data);
+}
+
+
diff -urN ethereal-0.10.6/gtk/h323_analysis.h ethereal-0.10.7/gtk/h323_analysis.h
--- ethereal-0.10.6/gtk/h323_analysis.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/gtk/h323_analysis.h	2004-10-20 17:34:29.000000000 -0500
@@ -0,0 +1,48 @@
+/* h323_analysis.h
+ * H323 analysis addition for ethereal
+ *
+ * $Id: h323_analysis.h 12169 2004-10-01 09:13:33Z guy $
+ *
+ * Copyright 2004, Iskratel, Ltd, Kranj
+ * By Miha Jemec <m.jemec@iskratel.si>
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation,  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef H323_ANALYSIS_H_INCLUDED
+#define H323_ANALYSIS_H_INCLUDED
+
+#include <glib.h>
+
+/** @file
+ *  ??? 
+ *  @todo what's this?
+ */
+
+void h323_analysis(
+		guint32 ip_src,  /* network-order IPv4 address */
+		guint16 port_src,
+		guint32 ip_dst,  /* network-order IPv4 address */
+		guint16 port_dst,
+		guint32 ip_src_h245,  /* network-order IPv4 address */
+		guint16 port_src_h245,
+		guint16 transport
+		);
+
+#endif /* H323_ANALYSIS_H_INCLUDED*/
diff -urN ethereal-0.10.6/gtk/h323_conversations.c ethereal-0.10.7/gtk/h323_conversations.c
--- ethereal-0.10.6/gtk/h323_conversations.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/gtk/h323_conversations.c	2004-10-20 17:34:31.000000000 -0500
@@ -0,0 +1,416 @@
+/* h323_conversations.c
+ * H323 conversations summary addition for ethereal
+ *
+ * $Id: h323_conversations.c 12179 2004-10-01 22:09:38Z guy $
+ *
+ * Copyright 2004, Iskratel, Ltd, Kranj
+ * By Miha Jemec <m.jemec@iskratel.si>
+ *
+ * based on rtp_stream.c
+ * Copyright 2003, Alcatel Business Systems
+ * By Lars Ruoff <lars.ruoff@gmx.net>
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation,  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "h323_conversations.h"
+#include "h323_conversations_dlg.h"
+
+#include "globals.h"
+
+#include <epan/tap.h>
+#include <epan/dissectors/packet-h225.h>
+#include <epan/dissectors/packet-h245.h>
+
+#include "alert_box.h"
+#include "simple_dialog.h"
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#include <string.h>
+
+char *transport_prot_name[256] ={
+	"","","","","","","tcp","","","",  /* 0 to 10 */
+    "","","","","","","","udp","","",  /* 10 to 20 */
+    "","","","","","","","","","",     /* 20 to 30 */
+    "","","","","","","","","","",     /* 30 to 40 */
+    "","","","","","","","","","",     /* 40 to 50 */
+    "","","","","","","","","","",     /* 50 to 60 */
+    "","","","","","","","","","",     /* 60 to 70 */
+    "","","","","","","","","","",     /* 70 to 80 */
+    "","","","","","","","","","",     /* 80 to 90 */
+    "","","","","","","","","","",     /* 90 to 100 */
+    "","","","","","","","","","",     /* 100 to 110 */
+    "","","","","","","","","","",     /* 110 to 120 */
+    "","","","","","","","","","",     /* 120 to 130 */
+    "","","sctp","","","","","","","", /* 130 to 140 */
+    "","","","","","","","","","",     /* 140 to 150 */
+    "","","","","","","","","","",     /* 150 to 160 */
+    "","","","","","","","","","",     /* 160 to 170 */
+    "","","","","","","","","","",     /* 170 to 180 */
+    "","","","","","","","","","",     /* 180 to 190 */
+    "","","","","","","","","","",     /* 190 to 200 */
+    "","","","","","","","","","",     /* 200 to 210 */
+    "","","","","","","","","","",     /* 210 to 220 */
+    "","","","","","","","","","",     /* 220 to 230 */
+    "","","","","","","","","","",     /* 230 to 240 */
+    "","","","","","","","","","",     /* 240 to 250 */
+    "","","","","",""                  /* 250 to 255 */
+    };
+
+/****************************************************************************/
+/* the one and only global h323conversations_tapinfo_t structure */
+static h323conversations_tapinfo_t the_tapinfo_struct =
+	{0, NULL, 0, NULL, 0, 0, 0, 0};
+
+/****************************************************************************/
+/* GCompareFunc style comparison function for _h323_conversations_info */
+gint h323_conversations_info_cmp(gconstpointer aa, gconstpointer bb)
+{
+	const struct _h323_conversations_info* a = aa;
+	const struct _h323_conversations_info* b = bb;
+
+	if (a==b)
+		return 0;
+	if (a==NULL || b==NULL)
+		return 1;
+	if ((a->src_addr == b->src_addr)
+		&& (a->src_port == b->src_port)
+		&& (a->dest_addr == b->dest_addr)
+		&& (a->dest_port == b->dest_port)
+		&& (a->transport == b->transport)
+		)
+		return 0;
+	else if ((a->src_addr == b->dest_addr)
+		&& (a->src_port == b->dest_port)
+		&& (a->dest_addr == b->src_addr)
+		&& (a->dest_port == b->src_port)
+		&& (a->transport == b->transport)
+		)
+		return 0;
+	else
+		return 1;
+}
+
+
+/****************************************************************************/
+/* when there is a [re]reading of packet's */
+void h225conversations_reset(h323conversations_tapinfo_t *tapinfo)
+{
+	GList* list;
+
+	/* free the data items first */
+	list = g_list_first(tapinfo->strinfo_list);
+	while (list)
+	{
+		g_free(list->data);
+		list = g_list_next(list);
+	}
+	g_list_free(tapinfo->strinfo_list);
+	tapinfo->strinfo_list = NULL;
+	tapinfo->nconversationss = 0;
+	tapinfo->npackets = 0;
+	tapinfo->setup_packets = 0;
+        tapinfo->completed_calls = 0;
+        tapinfo->rejected_calls = 0;
+
+	++(tapinfo->launch_count);
+
+	return;
+}
+
+/****************************************************************************/
+/* redraw the output */
+void h225conversations_draw(h323conversations_tapinfo_t *tapinfo _U_)
+{
+/* XXX: see h323conversations_on_update in h323_conversationss_dlg.c for comments
+	gtk_signal_emit_by_name(top_level, "signal_h225conversations_update");
+*/
+	h323conversations_dlg_update(the_tapinfo_struct.strinfo_list);
+	return;
+}
+
+
+
+/****************************************************************************/
+/* whenever a H225 packet is seen by the tap listener */
+int h225conversations_packet(h323conversations_tapinfo_t *tapinfo _U_, packet_info *pinfo, epan_dissect_t *edt _U_, void *h225info)
+{
+	h323_conversations_info_t tmp_strinfo;
+	h323_conversations_info_t *strinfo = NULL;
+	GList* list;
+
+	h225_packet_info *pi = h225info;
+	
+	/* TODO: evaluate RAS Messages. Just ignore them for now*/
+	if(pi->msg_type==H225_RAS)
+		return 0;
+
+	/* gather infos on the conversations this packet is part of */
+	g_memmove(&(tmp_strinfo.src_addr), pinfo->src.data, 4);
+	tmp_strinfo.src_port = pinfo->srcport;
+	g_memmove(&(tmp_strinfo.dest_addr), pinfo->dst.data, 4);
+	tmp_strinfo.dest_port = pinfo->destport;
+	tmp_strinfo.transport = pinfo->ipproto;
+
+
+		/* check wether we already have a conversations with these parameters in the list */
+		list = g_list_first(tapinfo->strinfo_list);
+		while (list)
+		{
+			if (h323_conversations_info_cmp(&tmp_strinfo, (h323_conversations_info_t*)(list->data))==0)
+			{
+				strinfo = (h323_conversations_info_t*)(list->data);  /*found!*/
+				break;
+			}
+			list = g_list_next(list);
+		}
+
+		/* not in the list? then create a new entry */
+		if (!strinfo) {
+			tmp_strinfo.call_state = UNKNOWN;
+			tmp_strinfo.npackets = 0;
+			tmp_strinfo.h245packets = 0;
+			tmp_strinfo.first_frame_num = pinfo->fd->num;
+			tmp_strinfo.faststart = pi->is_faststart; 
+			tmp_strinfo.is_h245 = pi->is_h245; 
+			tmp_strinfo.h245address = pi->h245_address; 
+			tmp_strinfo.h245port = pi->h245_port; 
+			strinfo = g_malloc(sizeof(h323_conversations_info_t));
+			*strinfo = tmp_strinfo;  /* memberwise copy of struct */
+			tapinfo->strinfo_list = g_list_append(tapinfo->strinfo_list, strinfo);
+
+		}
+		/* ok, there is an entry, but is it also an entry for h.245 address.
+		 * h.245 address can be provided in connect message, but entry for this conversation
+		 * already exists at this point */
+		else if (pi->is_h245) {
+			strinfo->is_h245 = pi->is_h245; 
+			strinfo->h245address = pi->h245_address; 
+			strinfo->h245port = pi->h245_port; 
+		}
+
+		/* we check the faststart again in the connect message, if there is no
+		 * faststart field in connect message, we asume, there is no faststart */
+		if ((pi->cs_type == H225_CONNECT) && (pi->is_faststart == 0))
+			strinfo->faststart = 0;
+
+		/* in the list or not in the list, we want the status */
+		/* we have four states: CALL SETUP, IN_CALL, COMPLETED, REJECTED 
+		 * CALL_SETUP: if the setup, call proceding, alerting, 
+		 * IN_CALL: connect 
+		 * COMPLETED: release complete after connect
+		 * REJECTED: release complete without connect
+		 */
+		switch (pi->cs_type) {
+
+	                case H225_SETUP:
+        			strinfo->call_state = CALL_SETUP;
+				++(tapinfo->setup_packets);
+        	                break;
+        	        case H225_CALL_PROCEDING:
+        			strinfo->call_state = CALL_SETUP;
+        	                break;
+			case H225_ALERTING:
+        			strinfo->call_state = CALL_SETUP;
+        	                break;
+                	case H225_CONNECT:
+        			strinfo->call_state = IN_CALL;
+        	                break;
+	                case H225_RELEASE_COMPLET:
+				if (strinfo->call_state == IN_CALL) {
+					strinfo->call_state = COMPLETED;
+        				++(tapinfo->completed_calls);
+				}
+				else if (strinfo->call_state == CALL_SETUP) {
+					strinfo->call_state = REJECTED;
+        				++(tapinfo->rejected_calls);
+				}
+				else if (strinfo->call_state == COMPLETED)
+					strinfo->call_state = COMPLETED;
+				else if (strinfo->call_state == REJECTED)
+					strinfo->call_state = REJECTED;
+				else 
+					strinfo->call_state = UNKNOWN;
+	                case H225_OTHER:
+				;
+                }
+
+		/* increment the packets counter for this conversations */
+		++(strinfo->npackets);
+
+		/* increment the packets counter of all conversationss */
+		++(tapinfo->npackets);
+		
+		return 1;  /* refresh output */
+}
+
+
+/****************************************************************************/
+const h323conversations_tapinfo_t* h323conversations_get_info(void)
+{
+	return &the_tapinfo_struct;
+}
+
+
+/****************************************************************************/
+/* TAP INTERFACE */
+/****************************************************************************/
+static gboolean have_h225_tap_listener=FALSE;
+/****************************************************************************/
+void
+h225conversations_init_tap(void)
+{
+	GString *error_string;
+	
+	h225conversations_reset(&the_tapinfo_struct);
+
+	if(have_h225_tap_listener==FALSE)
+	{
+		/* don't register tap listener, if we have it already */
+		error_string = register_tap_listener("h225", &the_tapinfo_struct, NULL,
+			(void*)h225conversations_reset, (void*)h225conversations_packet, (void*)h225conversations_draw);
+
+		if (error_string != NULL) {
+			simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+				      error_string->str);
+			g_string_free(error_string, TRUE);
+			exit(1);
+		}
+		have_h225_tap_listener=TRUE;
+	}
+}
+
+
+/* XXX just copied from gtk/rpc_stat.c */
+void protect_thread_critical_region(void);
+void unprotect_thread_critical_region(void);
+
+/****************************************************************************/
+void
+remove_tap_listener_h225_conversations(void)
+{
+	protect_thread_critical_region();
+	remove_tap_listener(&the_tapinfo_struct);
+	unprotect_thread_critical_region();
+	
+	have_h225_tap_listener=FALSE;
+}
+
+
+/****************************************************************************/
+/* ***************************TAP for h245 **********************************/
+/****************************************************************************/
+
+/****************************************************************************/
+/* redraw the output */
+void h245conversations_draw(h323conversations_tapinfo_t *tapinfo _U_)
+{
+	h323conversations_dlg_update(the_tapinfo_struct.strinfo_list);
+	return;
+}
+
+/****************************************************************************/
+/* whenever a H245 packet is seen by the tap listener */
+int h245conversations_packet(h323conversations_tapinfo_t *tapinfo _U_, packet_info *pinfo, epan_dissect_t *edt _U_, void *h245info _U_)
+{
+	GList* list;
+	struct _h323_conversations_info* a;
+	guint32 src, dst;
+	guint16 srcp, dstp;
+	guint16 p_transport;
+
+	/* check wether this packet is a part of any H323 conversation in the list*/
+	list = g_list_first(tapinfo->strinfo_list);
+	while (list)
+	{
+		a = (h323_conversations_info_t*)(list->data);
+		g_memmove(&src, pinfo->src.data, 4);
+		g_memmove(&dst, pinfo->dst.data, 4);
+		//src = *(pinfo->src.data);
+		//dst = *(pinfo->dst.data);
+		srcp = pinfo->srcport;
+		dstp = pinfo->destport;
+		p_transport = pinfo->ipproto;
+		if ( ((a->h245address == src) && (a->h245port == srcp) && (a->transport == p_transport)) ||
+				( (a->h245address == dst) && (a->h245port == dstp) && (a->transport == p_transport)) ) {
+				/* in the list? increment packet number */
+				++(a->h245packets);
+			break;
+		}
+		list = g_list_next(list);
+	}
+
+	return 1;  /* refresh output */
+}
+
+/****************************************************************************/
+static gboolean have_h245_tap_listener=FALSE;
+
+void
+h245conversations_init_tap(void)
+{
+	GString *error_string;
+	
+	if(have_h245_tap_listener==FALSE)
+	{ 
+		/* don't register tap listener, if we have it already */
+		error_string = register_tap_listener("h245", &the_tapinfo_struct,
+			NULL,
+			(void*)h245conversations_reset, (void*)h245conversations_packet, (void*)h245conversations_draw);
+
+		if (error_string != NULL) {
+			simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+				      error_string->str);
+			g_string_free(error_string, TRUE);
+			exit(1);
+		}
+		have_h245_tap_listener=TRUE;
+	}
+}
+
+/****************************************************************************/
+void
+remove_tap_listener_h245_conversations(void)
+{
+	protect_thread_critical_region();
+	remove_tap_listener(&the_tapinfo_struct);
+	unprotect_thread_critical_region();
+	
+	have_h245_tap_listener=FALSE;
+}
+
+
+/****************************************************************************/
+
+void h245conversations_reset(h323conversations_tapinfo_t *tapinfo _U_)
+{
+	return;
+}
+
diff -urN ethereal-0.10.6/gtk/h323_conversations.h ethereal-0.10.7/gtk/h323_conversations.h
--- ethereal-0.10.6/gtk/h323_conversations.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/gtk/h323_conversations.h	2004-10-20 17:34:31.000000000 -0500
@@ -0,0 +1,125 @@
+/* h323_conversations.h
+ * H323 conversations summary addition for ethereal
+ *
+ * $Id: h323_conversations.h 12179 2004-10-01 22:09:38Z guy $
+ *
+ * Copyright 2004, Iskratel, Ltd, Kranj
+ * By Miha Jemec <m.jemec@iskratel.si>
+ *
+ * based on rtp_stream.h
+ * Copyright 2003, Alcatel Business Systems
+ * By Lars Ruoff <lars.ruoff@gmx.net>
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation,  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef H323_STREAM_H_INCLUDED
+#define H323_STREAM_H_INCLUDED
+
+#include <glib.h>
+#include <stdio.h>
+
+/****************************************************************************/
+/* defines h323 state */
+typedef enum _h323_call_state {
+        CALL_SETUP,
+        IN_CALL,
+        COMPLETED,
+        REJECTED,
+	UNKNOWN
+} h323_call_state;
+
+/* defines an h323 conversation */
+typedef struct _h323_conversations_info {
+	h323_call_state call_state;
+	guint32 src_addr;
+	guint16 src_port;
+	guint32 dest_addr;
+	guint16 dest_port;
+	guint8  pt;
+	guint32 npackets;
+	gboolean faststart;
+	guint32 transport;
+	/* if there are also h245 messages */
+	gboolean is_h245;
+	guint32 h245packets;
+	guint32 h245address;
+	guint16 h245port;
+
+	guint32 first_frame_num; /* frame number of first frame */
+
+} h323_conversations_info_t;
+
+extern char *transport_prot_name[256];
+
+/* structure that holds the information about all detected conversationss */
+/* struct holding all information of the tap */
+typedef struct _h323conversations_tapinfo {
+	int     nconversationss;       /* number of conversationss in the list */
+	GList*  strinfo_list;   /* list with all conversationss */
+	int     npackets;       /* total number of h323 packets of all conversationss */
+	h323_conversations_info_t* filter_conversations_fwd;  /* used as filter in some tap modes */
+	guint32 launch_count;   /* number of times the tap has been run */
+	int setup_packets;
+	int completed_calls;
+	int rejected_calls;
+} h323conversations_tapinfo_t;
+
+
+/****************************************************************************/
+/* INTERFACE */
+
+/*
+* Registers the h323_conversationss tap listener (if not already done).
+* From that point on, the H323 conversationss list will be updated with every redissection.
+* This function is also the entry point for the initialization routine of the tap system.
+* So whenever h323_conversations.c is added to the list of ETHEREAL_TAP_SRCs, the tap will be registered on startup.
+* If not, it will be registered on demand by the h323_conversationss and h323_analysis functions that need it.
+*/
+void h225conversations_init_tap(void);
+void h245conversations_init_tap(void);
+
+/*
+* Removes the h323_conversationss tap listener (if not already done)
+* From that point on, the H323 conversationss list won't be updated any more.
+*/
+void remove_tap_listener_h225_conversations(void);
+void remove_tap_listener_h245_conversations(void);
+
+/*
+* Retrieves a constant reference to the unique info structure of the h323_conversationss tap listener.
+* The user should not modify the data pointed to.
+*/
+const h323conversations_tapinfo_t* h323conversations_get_info(void);
+
+/*
+* Cleans up memory of h323 conversationss tap.
+*/
+void h225conversations_reset(h323conversations_tapinfo_t *tapinfo);
+void h245conversations_reset(h323conversations_tapinfo_t *tapinfo);
+
+/*
+* Marks all packets belonging to conversations.
+* (can be NULL)
+* (redissects all packets)
+*/
+void h323conversations_mark(h323_conversations_info_t* conversations_fwd);
+
+
+#endif /*H323_STREAM_H_INCLUDED*/
diff -urN ethereal-0.10.6/gtk/h323_conversations_dlg.c ethereal-0.10.7/gtk/h323_conversations_dlg.c
--- ethereal-0.10.6/gtk/h323_conversations_dlg.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/gtk/h323_conversations_dlg.c	2004-10-20 17:34:30.000000000 -0500
@@ -0,0 +1,598 @@
+/* h323_conversations_dlg.c
+ * H323 conversations summary addition for ethereal
+ *
+ * $Id: h323_conversations_dlg.c 12185 2004-10-02 11:05:27Z ulfl $
+ *
+ * Copyright 2004, Iskratel, Ltd, Kranj
+ * By Miha Jemec <m.jemec@iskratel.si>
+ *
+ * based on rtp_stream_dlg.c
+ * Copyright 2003, Alcatel Business Systems
+ * By Lars Ruoff <lars.ruoff@gmx.net>
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation,  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include "register.h"
+
+#include "h323_conversations_dlg.h"
+#include "h323_conversations.h"
+#include "h323_analysis.h"
+
+#include "globals.h"
+#include "epan/filesystem.h"
+
+#include "tap_menu.h"
+#include "dlg_utils.h"
+#include "ui_util.h"
+#include "compat_macros.h"
+#include "gtkglobals.h"
+
+#include "image/clist_ascend.xpm"
+#include "image/clist_descend.xpm"
+
+#include <string.h>
+
+
+typedef const guint8 * ip_addr_p;
+
+static const gchar FWD_LABEL_TEXT[] = "Select one conversation.";
+
+/****************************************************************************/
+/* pointer to the one and only dialog window */
+static GtkWidget *h323_conversations_dlg = NULL;
+
+static GtkWidget *clist = NULL;
+static GtkWidget *top_label = NULL;
+static GtkWidget *status_label = NULL;
+static GtkWidget *label_fwd = NULL;
+
+/*static GtkWidget *bt_unselect = NULL;*/
+static GtkWidget *bt_filter = NULL;
+static GtkWidget *bt_analyze = NULL;
+
+static h323_conversations_info_t* selected_conversations_fwd = NULL;  /* current selection */
+static GList *last_list = NULL;
+
+static guint32 conversationss_nb = 0;     /* number of displayed conversationss */
+
+/****************************************************************************/
+/* append a line to clist */
+static void add_to_clist(h323_conversations_info_t* strinfo)
+{
+	gchar label_text[256];
+	gint added_row;
+	gchar *data[8];
+	gchar field[8][30];
+
+	data[0]=&field[0][0];
+	data[1]=&field[1][0];
+	data[2]=&field[2][0];
+	data[3]=&field[3][0];
+	data[4]=&field[4][0];
+	data[5]=&field[5][0];
+	data[6]=&field[6][0];
+	data[7]=&field[7][0];
+
+	g_snprintf(field[0], 20, "%s", ip_to_str((const guint8*)&(strinfo->src_addr)));
+	g_snprintf(field[1], 20, "%u", strinfo->src_port);
+	g_snprintf(field[2], 20, "%s", ip_to_str((const guint8*)&(strinfo->dest_addr)));
+	g_snprintf(field[3], 20, "%u", strinfo->dest_port);
+        g_snprintf(field[4], 20, "%s", strinfo->faststart? "TRUE":"FALSE");
+	g_snprintf(field[5], 20, "%u", strinfo->npackets);
+        g_snprintf(field[6], 20, "%u", strinfo->h245packets);
+	
+	switch (strinfo->call_state) {
+
+		case (CALL_SETUP):
+			g_snprintf(field[7], 20, "%s", "CALL SETUP");
+			break;
+		case (IN_CALL):
+			g_snprintf(field[7], 20, "%s", "IN CALL");
+			break;
+		case (COMPLETED):
+			g_snprintf(field[7], 20, "%s", "COMPLETED");
+			break;
+		case (REJECTED):
+			g_snprintf(field[7], 20, "%s", "REJECTED");
+			break;
+		case (UNKNOWN):
+			g_snprintf(field[7], 20, "%s", "UNKNOWN");
+	}
+
+	added_row = gtk_clist_append(GTK_CLIST(clist), data);
+
+	/* set data pointer of last row to point to user data for that row */
+	gtk_clist_set_row_data(GTK_CLIST(clist), added_row, strinfo);
+
+	/* Update the top label with the number of detected conversationss */
+    conversationss_nb++;
+	g_snprintf(label_text, 256,
+	        "Detected %d H.323 %s.",
+	        conversationss_nb, 
+            plurality(conversationss_nb, "Conversation", "Conversations"));
+	gtk_label_set(GTK_LABEL(top_label), label_text);
+
+	/* Update the status label with the number of total messages */
+        g_snprintf(label_text, 256,
+        	"Total: Setup packets: %d   Completed calls: %d   Rejected calls: %d",
+	                h323conversations_get_info()->setup_packets, 
+			h323conversations_get_info()->completed_calls,
+			h323conversations_get_info()->rejected_calls);
+        gtk_label_set(GTK_LABEL(status_label), label_text);
+}
+
+
+/****************************************************************************/
+/* CALLBACKS                                                                */
+/****************************************************************************/
+static void
+h323conversations_on_destroy                      (GtkObject       *object _U_,
+                                        gpointer         user_data _U_)
+{
+	/* Remove the conversations tap listener */
+	remove_tap_listener_h225_conversations();
+	remove_tap_listener_h245_conversations();
+
+	/* Clean up memory used by conversations tap */
+	h225conversations_reset((h323conversations_tapinfo_t*) h323conversations_get_info());
+
+	/* Note that we no longer have a "H.323 Conversations" dialog box. */
+	h323_conversations_dlg = NULL;
+}
+
+
+/****************************************************************************/
+static void
+h323conversations_on_unselect                  (GtkButton       *button _U_,
+                                        gpointer         user_data _U_)
+{
+	selected_conversations_fwd = NULL;
+	gtk_clist_unselect_all(GTK_CLIST(clist));
+	gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT);
+
+    /*gtk_widget_set_sensitive(bt_unselect, FALSE);*/
+    gtk_widget_set_sensitive(bt_filter, FALSE);
+    gtk_widget_set_sensitive(bt_analyze, FALSE);
+}
+
+
+/****************************************************************************/
+static void
+h323conversations_on_filter                    (GtkButton       *button _U_,
+                                        gpointer         user_data _U_)
+{
+	gchar *filter_string = NULL;
+	gchar *filter_string_fwd = NULL;
+
+	if (selected_conversations_fwd==NULL)
+		return;
+
+	/* if also address for h245 packets is known */
+	else if (selected_conversations_fwd->is_h245) {
+		filter_string_fwd = g_strdup_printf(
+				"((ip.addr==%s && %s.port==%u && ip.addr==%s && %s.port==%u) and h225) or ((ip.addr==%s && %s.port==%u) and h245)",
+				ip_to_str((const guint8*)&(selected_conversations_fwd->src_addr)),
+				transport_prot_name[selected_conversations_fwd->transport],
+				selected_conversations_fwd->src_port,
+				ip_to_str((const guint8*)&(selected_conversations_fwd->dest_addr)),
+				transport_prot_name[selected_conversations_fwd->transport],
+				selected_conversations_fwd->dest_port,
+				ip_to_str((const guint8*)&(selected_conversations_fwd->h245address)),
+				transport_prot_name[selected_conversations_fwd->transport],
+				selected_conversations_fwd->h245port);
+	}
+	/* else filter only h225 packets */
+	else {
+		filter_string_fwd = g_strdup_printf(
+				"(ip.addr==%s && %s.port==%u && ip.addr==%s && %s.port==%u) and h225",
+				ip_to_str((const guint8*)&(selected_conversations_fwd->src_addr)),
+				transport_prot_name[selected_conversations_fwd->transport],
+				selected_conversations_fwd->src_port,
+				ip_to_str((const guint8*)&(selected_conversations_fwd->dest_addr)),
+				transport_prot_name[selected_conversations_fwd->transport],
+				selected_conversations_fwd->dest_port);
+	}
+
+        filter_string = filter_string_fwd;
+
+	gtk_entry_set_text(GTK_ENTRY(main_display_filter_widget), filter_string);
+	g_free(filter_string);
+/*
+	main_filter_packets(&cfile, filter_string, FALSE);
+	h323conversations_dlg_update(h323conversations_get_info()->strinfo_list);
+*/
+}
+
+
+/****************************************************************************/
+static void
+h323conversations_on_analyse                   (GtkButton       *button _U_,
+                                        gpointer         user_data _U_)
+{
+	guint32 ip_src = 0;
+        guint16 port_src = 0;
+        guint32 ip_dst = 0;
+        guint16 port_dst = 0;
+        guint32 ip_src_h245 = 0;
+        guint16 port_src_h245 = 0;
+        guint16 transport=0;
+
+	if (selected_conversations_fwd) {
+		ip_src = selected_conversations_fwd->src_addr;
+		port_src = selected_conversations_fwd->src_port;
+		ip_dst = selected_conversations_fwd->dest_addr;
+		port_dst = selected_conversations_fwd->dest_port;
+		ip_src_h245 = selected_conversations_fwd->h245address;
+		port_src_h245 = selected_conversations_fwd->h245port;
+		transport = selected_conversations_fwd->transport;
+	}
+
+   	h323_analysis(
+                ip_src,
+                port_src,
+                ip_dst,
+                port_dst,
+                ip_src_h245,
+                port_src_h245,
+                transport
+                );
+}
+
+
+/****************************************************************************/
+/* when the user selects a row in the conversations list */
+static void
+h323conversations_on_select_row(GtkCList *clist,
+                                            gint row _U_,
+                                            gint column _U_,
+                                            GdkEventButton *event _U_,
+                                            gpointer user_data _U_)
+{
+	gchar label_text[80];
+
+	selected_conversations_fwd = gtk_clist_get_row_data(GTK_CLIST(clist), row);
+	g_snprintf(label_text, 80, "Selected Conversation: %s:%u <---> %s:%u",
+		ip_to_str((ip_addr_p)&selected_conversations_fwd->src_addr),
+		selected_conversations_fwd->src_port,
+		ip_to_str((ip_addr_p)&selected_conversations_fwd->dest_addr),
+		selected_conversations_fwd->dest_port
+	);
+	gtk_label_set_text(GTK_LABEL(label_fwd), label_text);
+
+    /*gtk_widget_set_sensitive(bt_unselect, TRUE);*/
+    gtk_widget_set_sensitive(bt_filter, TRUE);
+    gtk_widget_set_sensitive(bt_analyze, TRUE);
+
+	/* TODO: activate other buttons when implemented */
+}
+
+
+/****************************************************************************/
+#define NUM_COLS 8
+
+typedef struct column_arrows {
+	GtkWidget *table;
+	GtkWidget *ascend_pm;
+	GtkWidget *descend_pm;
+} column_arrows;
+
+
+/****************************************************************************/
+static void
+h323conversations_click_column_cb(GtkCList *clist, gint column, gpointer data)
+{
+	column_arrows *col_arrows = (column_arrows *) data;
+	int i;
+
+	gtk_clist_freeze(clist);
+
+	for (i=0; i<NUM_COLS; i++) {
+		gtk_widget_hide(col_arrows[i].ascend_pm);
+		gtk_widget_hide(col_arrows[i].descend_pm);
+	}
+
+	if (column == clist->sort_column) {
+		if (clist->sort_type == GTK_SORT_ASCENDING) {
+			clist->sort_type = GTK_SORT_DESCENDING;
+			gtk_widget_show(col_arrows[column].descend_pm);
+		} else {
+			clist->sort_type = GTK_SORT_ASCENDING;
+			gtk_widget_show(col_arrows[column].ascend_pm);
+		}
+	} else {
+		clist->sort_type = GTK_SORT_ASCENDING;
+		gtk_widget_show(col_arrows[column].ascend_pm);
+		gtk_clist_set_sort_column(clist, column);
+	}
+	gtk_clist_thaw(clist);
+
+	gtk_clist_sort(clist);
+}
+
+
+/****************************************************************************/
+static gint
+h323conversations_sort_column(GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2)
+{
+	char *text1 = NULL;
+	char *text2 = NULL;
+	int i1, i2;
+
+	const GtkCListRow *row1 = (const GtkCListRow *) ptr1;
+	const GtkCListRow *row2 = (const GtkCListRow *) ptr2;
+
+	text1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text;
+	text2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text;
+
+	switch(clist->sort_column){
+	case 0:
+	case 2:
+	case 5:
+	case 7:
+		return strcmp (text1, text2);
+	case 1:
+	case 3:
+	case 4:
+	case 6:
+		i1=atoi(text1);
+		i2=atoi(text2);
+		return i1-i2;
+	}
+	g_assert_not_reached();
+	return 0;
+}
+
+
+/****************************************************************************/
+/* INTERFACE                                                                */
+/****************************************************************************/
+
+static void h323conversations_dlg_create (void)
+{
+	GtkWidget *h323conversations_dlg_w;
+	GtkWidget *main_vb;
+	GtkWidget *scrolledwindow;
+	GtkWidget *hbuttonbox;
+	GtkWidget *bt_close;
+    GtkTooltips *tooltips = gtk_tooltips_new();
+
+	gchar *titles[8] =  {"IP address A", "Port A",  "IP address B", "Port B", "Faststart", "H225 pkts", "H245 pkts", "Status"};
+	column_arrows *col_arrows;
+	GtkWidget *column_lb;
+	int i;
+
+    /* don't use a window here (but a dialog), because otherwise a parent
+     * analysis window will hide this one and show the main window :-( */
+	/*h323conversations_dlg_w = window_new_with_geom(GTK_WINDOW_TOPLEVEL, 
+        "Ethereal: H.323 VoIP Conversations", "H323-conversations");*/
+	h323conversations_dlg_w = dlg_window_new("Ethereal: H.323 VoIP Conversations");
+	gtk_window_set_default_size(GTK_WINDOW(h323conversations_dlg_w), 700, 300);
+
+	main_vb = gtk_vbox_new (FALSE, 0);
+	gtk_container_add(GTK_CONTAINER(h323conversations_dlg_w), main_vb);
+	gtk_container_set_border_width (GTK_CONTAINER (main_vb), 12);
+
+	top_label = gtk_label_new ("Detected 0 H.323 Conversations.");
+	gtk_box_pack_start (GTK_BOX (main_vb), top_label, FALSE, FALSE, 8);
+
+	scrolledwindow = scrolled_window_new (NULL, NULL);
+	gtk_box_pack_start (GTK_BOX (main_vb), scrolledwindow, TRUE, TRUE, 0);
+
+	clist = gtk_clist_new (NUM_COLS);
+	gtk_container_add (GTK_CONTAINER (scrolledwindow), clist);
+
+	gtk_clist_set_column_width (GTK_CLIST (clist), 0, 100);
+	gtk_clist_set_column_width (GTK_CLIST (clist), 1, 70);
+	gtk_clist_set_column_width (GTK_CLIST (clist), 2, 100);
+	gtk_clist_set_column_width (GTK_CLIST (clist), 3, 70);
+	gtk_clist_set_column_width (GTK_CLIST (clist), 4, 60);
+	gtk_clist_set_column_width (GTK_CLIST (clist), 5, 60);
+	gtk_clist_set_column_width (GTK_CLIST (clist), 6, 60);
+	gtk_clist_set_column_width (GTK_CLIST (clist), 7, 100);
+
+	gtk_clist_set_column_justification(GTK_CLIST(clist), 0, GTK_JUSTIFY_CENTER);
+	gtk_clist_set_column_justification(GTK_CLIST(clist), 1, GTK_JUSTIFY_CENTER);
+	gtk_clist_set_column_justification(GTK_CLIST(clist), 2, GTK_JUSTIFY_CENTER);
+	gtk_clist_set_column_justification(GTK_CLIST(clist), 3, GTK_JUSTIFY_CENTER);
+	gtk_clist_set_column_justification(GTK_CLIST(clist), 4, GTK_JUSTIFY_CENTER);
+	gtk_clist_set_column_justification(GTK_CLIST(clist), 5, GTK_JUSTIFY_CENTER);
+	gtk_clist_set_column_justification(GTK_CLIST(clist), 6, GTK_JUSTIFY_CENTER);
+	gtk_clist_set_column_justification(GTK_CLIST(clist), 7, GTK_JUSTIFY_CENTER);
+
+	gtk_clist_column_titles_show (GTK_CLIST (clist));
+
+	gtk_clist_set_compare_func(GTK_CLIST(clist), h323conversations_sort_column);
+	gtk_clist_set_sort_column(GTK_CLIST(clist), 0);
+	gtk_clist_set_sort_type(GTK_CLIST(clist), GTK_SORT_ASCENDING);
+
+	gtk_widget_show(h323conversations_dlg_w);
+
+	/* sort by column feature */
+	col_arrows = (column_arrows *) g_malloc(sizeof(column_arrows) * NUM_COLS);
+
+	for (i=0; i<NUM_COLS; i++) {
+		col_arrows[i].table = gtk_table_new(2, 2, FALSE);
+		gtk_table_set_col_spacings(GTK_TABLE(col_arrows[i].table), 5);
+		column_lb = gtk_label_new(titles[i]);
+		gtk_table_attach(GTK_TABLE(col_arrows[i].table), column_lb, 0, 1, 0, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
+		gtk_widget_show(column_lb);
+
+		col_arrows[i].ascend_pm = xpm_to_widget(clist_ascend_xpm);
+		gtk_table_attach(GTK_TABLE(col_arrows[i].table), col_arrows[i].ascend_pm, 1, 2, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
+		col_arrows[i].descend_pm = xpm_to_widget(clist_descend_xpm);
+		gtk_table_attach(GTK_TABLE(col_arrows[i].table), col_arrows[i].descend_pm, 1, 2, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
+		/* make src-ip be the default sort order */
+		if (i == 0) {
+			gtk_widget_show(col_arrows[i].ascend_pm);
+		}
+		gtk_clist_set_column_widget(GTK_CLIST(clist), i, col_arrows[i].table);
+		gtk_widget_show(col_arrows[i].table);
+	}
+
+	SIGNAL_CONNECT(clist, "click-column", h323conversations_click_column_cb, col_arrows);
+
+	label_fwd = gtk_label_new (FWD_LABEL_TEXT);
+	gtk_box_pack_start (GTK_BOX (main_vb), label_fwd, FALSE, FALSE, 0);
+
+	status_label = gtk_label_new ("Total: Setup packets: 0   Completed calls: 0   Rejected calls: 0");
+	gtk_box_pack_start (GTK_BOX (main_vb), status_label, FALSE, FALSE, 8);
+
+        /* button row */
+	hbuttonbox = gtk_hbutton_box_new ();
+	gtk_box_pack_start (GTK_BOX (main_vb), hbuttonbox, FALSE, FALSE, 0);
+	gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox), GTK_BUTTONBOX_SPREAD);
+	gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbuttonbox), 30);
+
+	/*bt_unselect = gtk_button_new_with_label ("Unselect");
+	gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_unselect);
+    gtk_tooltips_set_tip (tooltips, bt_unselect, "Unselect this conversation", NULL);*/
+
+	bt_filter = gtk_button_new_with_label ("Prepare filter");
+	gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_filter);
+    gtk_tooltips_set_tip (tooltips, bt_filter, "Prepare a display filter of the selected conversation", NULL);
+
+	bt_analyze = gtk_button_new_with_label ("Analyze");
+	gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_analyze);
+    gtk_tooltips_set_tip (tooltips, bt_analyze, "Analyze the selected conversation", NULL);
+
+	bt_close = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE);
+	gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_close);
+	GTK_WIDGET_SET_FLAGS(bt_close, GTK_CAN_DEFAULT);
+    gtk_tooltips_set_tip (tooltips, bt_close, "Close this dialog", NULL);
+
+	SIGNAL_CONNECT(clist, "select_row", h323conversations_on_select_row, NULL);
+	/*SIGNAL_CONNECT(bt_unselect, "clicked", h323conversations_on_unselect, NULL);*/
+	SIGNAL_CONNECT(bt_filter, "clicked", h323conversations_on_filter, NULL);
+	SIGNAL_CONNECT(bt_analyze, "clicked", h323conversations_on_analyse, NULL);
+
+	window_set_cancel_button(h323conversations_dlg_w, bt_close, window_cancel_button_cb);
+
+	SIGNAL_CONNECT(h323conversations_dlg_w, "delete_event", window_delete_event_cb, NULL);
+	SIGNAL_CONNECT(h323conversations_dlg_w, "destroy", h323conversations_on_destroy, NULL);
+
+	gtk_widget_show_all(h323conversations_dlg_w);
+	window_present(h323conversations_dlg_w);
+
+	h323conversations_on_unselect(NULL, NULL);
+
+	h323_conversations_dlg = h323conversations_dlg_w;
+}
+
+
+/****************************************************************************/
+/* PUBLIC								    */
+/****************************************************************************/
+
+/****************************************************************************/
+/* update the contents of the dialog box clist */
+/* list: pointer to list of h323_conversations_info_t* */
+void h323conversations_dlg_update(GList *list)
+{
+	gchar label_text[256];
+
+	if (h323_conversations_dlg != NULL) {
+		gtk_clist_clear(GTK_CLIST(clist));
+		conversationss_nb = 0;
+        	g_snprintf(label_text, 256,
+        		"Total: Setup packets: %d   Completed calls: %d   Rejected calls: %d",
+		                h323conversations_get_info()->setup_packets, 
+				h323conversations_get_info()->completed_calls,
+				h323conversations_get_info()->rejected_calls);
+        	gtk_label_set(GTK_LABEL(status_label), label_text);
+
+		list = g_list_first(list);
+		while (list)
+		{
+			add_to_clist((h323_conversations_info_t*)(list->data));
+			list = g_list_next(list);
+		}
+
+		g_snprintf(label_text, 256,
+		        "Detected %d H.323 %s.",
+	    	    conversationss_nb, 
+            	plurality(conversationss_nb, "Conversation", "Conversations"));
+		gtk_label_set(GTK_LABEL(top_label), label_text);
+
+		h323conversations_on_unselect(NULL, NULL);
+	}
+
+	last_list = list;
+}
+
+
+/****************************************************************************/
+/* update the contents of the dialog box clist */
+/* list: pointer to list of h323_conversations_info_t* */
+void h323conversations_dlg_show(GList *list)
+{
+	if (h323_conversations_dlg != NULL) {
+		/* There's already a dialog box; reactivate it. */
+		reactivate_window(h323_conversations_dlg);
+		/* Another list since last call? */
+		if (list != last_list) {
+			h323conversations_dlg_update(list);
+		}
+	}
+	else {
+		/* Create and show the dialog box */
+		h323conversations_dlg_create();
+		h323conversations_dlg_update(list);
+	}
+}
+
+/* init function for tap */
+static void
+h323conversations_init_tap(char *dummy _U_)
+{
+	/* Register the tap listener */
+	h225conversations_init_tap();
+	h245conversations_init_tap();
+
+	/* Scan for H323 conversations conversationss (redissect all packets) */
+	retap_packets(&cfile);
+
+	/* Show the dialog box with the list of conversationss */
+	h323conversations_dlg_show(h323conversations_get_info()->strinfo_list);
+
+	/* Tap listener will be removed and cleaned up in h323conversations_on_destroy */
+	
+}
+
+
+/****************************************************************************/
+/* entry point when called via the GTK menu */
+void h323conversations_launch(GtkWidget *w _U_, gpointer data _U_)
+{
+	h323conversations_init_tap("");
+}
+
+/****************************************************************************/
+void
+register_tap_listener_h323_conversations_dlg(void)
+{
+	register_ethereal_tap("h323,conv",h323conversations_init_tap);
+	
+	register_tap_menu_item("H.323 Conversations...", REGISTER_TAP_GROUP_NONE,
+	    h323conversations_launch, NULL, NULL, NULL);
+}
diff -urN ethereal-0.10.6/gtk/h323_conversations_dlg.h ethereal-0.10.7/gtk/h323_conversations_dlg.h
--- ethereal-0.10.6/gtk/h323_conversations_dlg.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/gtk/h323_conversations_dlg.h	2004-10-20 17:34:30.000000000 -0500
@@ -0,0 +1,51 @@
+/* h323_conversations_dlg.h
+ * H323 conversations addition for ethereal
+ *
+ * $Id: h323_conversations_dlg.h 12154 2004-09-30 19:49:48Z guy $
+ *
+ * Copyright 2004, Iskratel, Ltd, Kranj
+ * By Miha Jemec <m.jemec@iskratel.si>
+ *
+ * based on rtp_stream_dlg.h
+ * Copyright 2003, Alcatel Business Systems
+ * By Lars Ruoff <lars.ruoff@gmx.net>
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation,  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef H323_STREAM_DLG_H_INCLUDED
+#define H323_STREAM_DLG_H_INCLUDED
+
+#include <gtk/gtk.h>
+
+/**
+ * Create or reactivate the h323 streams dialog box.
+ *
+ * @param list pointer to list of rtp_stream_info_t*
+ */
+void h323conversations_dlg_show(GList *list);
+
+/**
+ * Update the contents of the dialog box clist with that of list.
+ *
+ * @param list pointer to list of rtp_stream_info_t*
+ */
+void h323conversations_dlg_update(GList *list);
+
+#endif /* H323_STREAM_DLG_H_INCLUDED*/
diff -urN ethereal-0.10.6/gtk/help_dlg.c ethereal-0.10.7/gtk/help_dlg.c
--- ethereal-0.10.6/gtk/help_dlg.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/help_dlg.c	2004-10-20 17:34:31.000000000 -0500
@@ -1,6 +1,6 @@
 /* help_dlg.c
  *
- * $Id: help_dlg.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: help_dlg.c 12233 2004-10-07 20:30:35Z gerald $
  *
  * Laurent Deniel <laurent.deniel@free.fr>
  *
@@ -35,12 +35,13 @@
 #include "epan/filesystem.h"
 #include "help_dlg.h"
 #include "text_page.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "gtkglobals.h"
 #include "ui_util.h"
 #include "compat_macros.h"
 #include "dlg_utils.h"
 #include "simple_dialog.h"
+#include "webbrowser.h"
 
 #define HELP_DIR	"help"
 
@@ -258,3 +259,84 @@
     }
   }
 }
+
+
+void
+url_page_action(url_page_action_e action)
+{
+    /* pages online at www.ethereal.com */
+    switch(action) {
+    case(ONLINEPAGE_HOME):
+        browser_open_url ("http://www.ethereal.com");
+        break;
+    case(ONLINEPAGE_WIKI):
+        browser_open_url ("http://wiki.ethereal.com");
+        break;
+    case(ONLINEPAGE_DOWNLOAD):
+        browser_open_url ("http://www.ethereal.com/download.html");
+        break;
+    case(ONLINEPAGE_USERGUIDE):
+        browser_open_url ("http://www.ethereal.com/docs/user-guide");
+        break;
+    case(ONLINEPAGE_FAQ):
+        browser_open_url ("http://www.ethereal.com/faq.html");
+        break;
+    case(ONLINEPAGE_SAMPLE_FILES):
+        browser_open_url ("http://wiki.ethereal.com/SampleCaptures");
+        break;
+
+    /* local manual pages */
+    case(LOCALPAGE_MAN_ETHEREAL):
+        browser_open_data_file("ethereal.html");
+        break;
+    case(LOCALPAGE_MAN_ETHEREAL_FILTER):
+        browser_open_data_file("ethereal-filter.html");
+        break;
+    case(LOCALPAGE_MAN_TETHEREAL):
+        browser_open_data_file("tethereal.html");
+        break;
+    case(LOCALPAGE_MAN_MERGECAP):
+        browser_open_data_file("mergecap.html");
+        break;
+    case(LOCALPAGE_MAN_EDITCAP):
+        browser_open_data_file("editcap.html");
+        break;
+    case(LOCALPAGE_MAN_TEXT2PCAP):
+        browser_open_data_file("text2pcap.html");
+        break;
+
+#ifdef ETHEREAL_EUG_DIR
+    /* local help pages (User's Guide) */
+    case(HELP_CONTENT):
+        browser_open_data_file("eug_html_chunked/index.html");
+        break;
+    case(HELP_CAPTURE_OPTIONS_DIALOG):
+        browser_open_data_file("eug_html_chunked/ChCapCaptureOptions.html");
+        break;
+    case(HELP_CAPTURE_FILTERS_DIALOG):
+        browser_open_data_file("eug_html_chunked/ChWorkDefineFilterSection.html");
+        break;
+    case(HELP_DISPLAY_FILTERS_DIALOG):
+        browser_open_data_file("eug_html_chunked/ChWorkDefineFilterSection.html");
+        break;
+#endif
+
+    default:
+        g_assert_not_reached();
+    }
+}
+
+
+void
+url_page_cb(GtkWidget *w _U_, url_page_action_e action)
+{
+    url_page_action(action);
+}
+
+
+void
+url_page_menu_cb( GtkWidget *w _U_, gpointer data _U_, url_page_action_e action)
+{
+    url_page_action(action);
+}
+
diff -urN ethereal-0.10.6/gtk/help_dlg.h ethereal-0.10.7/gtk/help_dlg.h
--- ethereal-0.10.6/gtk/help_dlg.h	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/help_dlg.h	2004-10-20 17:34:31.000000000 -0500
@@ -1,6 +1,6 @@
 /* help_dlg.h
  *
- * $Id: help_dlg.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: help_dlg.h 12084 2004-09-24 15:41:46Z ulfl $
  *
  * Laurent Deniel <laurent.deniel@free.fr>
  *
@@ -50,4 +50,54 @@
 /** Redraw all the text widgets, to use a new font. */
 void help_redraw(void);
 
+typedef enum {
+    /* pages online at www.ethereal.com */
+    ONLINEPAGE_HOME,
+    ONLINEPAGE_WIKI,
+    ONLINEPAGE_USERGUIDE,
+    ONLINEPAGE_FAQ,
+    ONLINEPAGE_DOWNLOAD,
+    ONLINEPAGE_SAMPLE_FILES,
+
+    /* local manual pages */
+    LOCALPAGE_MAN_ETHEREAL = 100,
+    LOCALPAGE_MAN_ETHEREAL_FILTER,
+    LOCALPAGE_MAN_TETHEREAL,
+    LOCALPAGE_MAN_MERGECAP,
+    LOCALPAGE_MAN_EDITCAP,
+    LOCALPAGE_MAN_TEXT2PCAP,
+
+    /* local help pages (User's Guide) */
+#ifdef ETHEREAL_EUG_DIR
+    HELP_CONTENT = 200,
+    HELP_CAPTURE_OPTIONS_DIALOG,
+    HELP_CAPTURE_FILTERS_DIALOG,
+    HELP_DISPLAY_FILTERS_DIALOG
+#endif
+} url_page_action_e;
+
+
+/** User requested one of the html pages.
+ *
+ * @param action the page to show
+ */
+extern void
+url_page_action(url_page_action_e action);
+
+/** User requested one of the html pages by button click.
+ *
+ * @param widget parent widget (unused)
+ * @param action the page to show
+ */
+extern void
+url_page_cb(GtkWidget *w _U_, url_page_action_e action);
+
+/** User requested one of the html pages by menu.
+ *
+ * @param widget parent widget (unused)
+ * @param data unused
+ * @param action the page to show
+ */
+extern void url_page_menu_cb( GtkWidget *widget, gpointer data, url_page_action_e action);
+
 #endif
diff -urN ethereal-0.10.6/gtk/hostlist_eth.c ethereal-0.10.7/gtk/hostlist_eth.c
--- ethereal-0.10.6/gtk/hostlist_eth.c	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/hostlist_eth.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* hostlist_eth.c   2004 Ian Schorr
  * modified from endpoint_talkers_eth.c   2003 Ronnie Sahlberg
  *
- * $Id: hostlist_eth.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: hostlist_eth.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <string.h>
 #include "epan/packet.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "hostlist_table.h"
 #include <epan/dissectors/packet-eth.h>
diff -urN ethereal-0.10.6/gtk/hostlist_fc.c ethereal-0.10.7/gtk/hostlist_fc.c
--- ethereal-0.10.6/gtk/hostlist_fc.c	2004-08-12 17:41:47.000000000 -0500
+++ ethereal-0.10.7/gtk/hostlist_fc.c	2004-10-20 17:34:32.000000000 -0500
@@ -1,7 +1,7 @@
 /* hostlist_fc.c   2004 Ian Schorr
  * modified from endpoint_talkers_fc.c   2003 Ronnie Sahlberg
  *
- * $Id: hostlist_fc.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: hostlist_fc.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <string.h>
 #include "epan/packet.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "hostlist_table.h"
 #include <epan/dissectors/packet-fc.h>
diff -urN ethereal-0.10.6/gtk/hostlist_fddi.c ethereal-0.10.7/gtk/hostlist_fddi.c
--- ethereal-0.10.6/gtk/hostlist_fddi.c	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/hostlist_fddi.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* hostlist_fddi.c   2004 Ian Schorr
  * modified from endpoint_talkers_fddi.c   2003 Ronnie Sahlberg
  *
- * $Id: hostlist_fddi.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: hostlist_fddi.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <string.h>
 #include "epan/packet.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "hostlist_table.h"
 #include <epan/dissectors/packet-fddi.h>
diff -urN ethereal-0.10.6/gtk/hostlist_ip.c ethereal-0.10.7/gtk/hostlist_ip.c
--- ethereal-0.10.6/gtk/hostlist_ip.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/hostlist_ip.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* hostlist_ip.c   2004 Ian Schorr
  * modified from endpoint_talkers_ip.c   2003 Ronnie Sahlberg
  *
- * $Id: hostlist_ip.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: hostlist_ip.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,7 +36,7 @@
 #include <string.h>
 #include "epan/packet.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "hostlist_table.h"
 #include <epan/dissectors/packet-ip.h>
diff -urN ethereal-0.10.6/gtk/hostlist_ipx.c ethereal-0.10.7/gtk/hostlist_ipx.c
--- ethereal-0.10.6/gtk/hostlist_ipx.c	2004-08-12 17:41:43.000000000 -0500
+++ ethereal-0.10.7/gtk/hostlist_ipx.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* hostlist_ipx.c   2004 Ian Schorr
  * modified from endpoint_talkers_ipx.c   2003 Ronnie Sahlberg
  *
- * $Id: hostlist_ipx.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: hostlist_ipx.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <string.h>
 #include "epan/packet.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "hostlist_table.h"
 #include <epan/dissectors/packet-ipx.h>
diff -urN ethereal-0.10.6/gtk/hostlist_table.c ethereal-0.10.7/gtk/hostlist_table.c
--- ethereal-0.10.6/gtk/hostlist_table.c	2004-08-12 17:41:47.000000000 -0500
+++ ethereal-0.10.7/gtk/hostlist_table.c	2004-10-20 17:34:32.000000000 -0500
@@ -2,7 +2,7 @@
  * modified from endpoint_talkers_table.c   2003 Ronnie Sahlberg
  * Helper routines common to all host list taps.
  *
- * $Id: hostlist_table.c 11624 2004-08-08 03:56:02Z gerald $
+ * $Id: hostlist_table.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -41,7 +41,7 @@
 #include "image/clist_descend.xpm"
 #include "simple_dialog.h"
 #include "globals.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "gtk/find_dlg.h"
 #include "color.h"
 #include "gtk/color_dlg.h"
diff -urN ethereal-0.10.6/gtk/hostlist_tcpip.c ethereal-0.10.7/gtk/hostlist_tcpip.c
--- ethereal-0.10.6/gtk/hostlist_tcpip.c	2004-08-12 17:41:47.000000000 -0500
+++ ethereal-0.10.7/gtk/hostlist_tcpip.c	2004-10-20 17:34:32.000000000 -0500
@@ -1,7 +1,7 @@
 /* hostlist_tcpip.c   2004 Ian Schorr
  * modified from endpoint_talkers_tcpip.c   2003 Ronnie Sahlberg
  *
- * $Id: hostlist_tcpip.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: hostlist_tcpip.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <string.h>
 #include "epan/packet.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "hostlist_table.h"
 #include <epan/dissectors/packet-tcp.h>
diff -urN ethereal-0.10.6/gtk/hostlist_tr.c ethereal-0.10.7/gtk/hostlist_tr.c
--- ethereal-0.10.6/gtk/hostlist_tr.c	2004-08-12 17:41:43.000000000 -0500
+++ ethereal-0.10.7/gtk/hostlist_tr.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* hostlist_tr.c   2004 Ian Schorr
  * modified from endpoint_talkers_tr.c   2003 Ronnie Sahlberg
  *
- * $Id: hostlist_tr.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: hostlist_tr.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <string.h>
 #include "epan/packet.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "hostlist_table.h"
 #include <epan/dissectors/packet-tr.h>
diff -urN ethereal-0.10.6/gtk/hostlist_udpip.c ethereal-0.10.7/gtk/hostlist_udpip.c
--- ethereal-0.10.6/gtk/hostlist_udpip.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/hostlist_udpip.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* hostlist_udpip.c   2004 Ian Schorr
  * modified from endpoint_talkers_udpip.c   2003 Ronnie Sahlberg
  *
- * $Id: hostlist_udpip.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: hostlist_udpip.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include <string.h>
 #include "epan/packet.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "hostlist_table.h"
 #include <epan/dissectors/packet-udp.h>
diff -urN ethereal-0.10.6/gtk/http_stat.c ethereal-0.10.7/gtk/http_stat.c
--- ethereal-0.10.6/gtk/http_stat.c	2004-08-12 17:41:43.000000000 -0500
+++ ethereal-0.10.7/gtk/http_stat.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* http_stat.c
  * http_stat   2003 Jean-Michel FAYARD
  *
- * $Id: http_stat.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: http_stat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -37,7 +37,7 @@
 #include "simple_dialog.h"
 #include "ui_util.h"
 #include "dlg_utils.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include <epan/dissectors/packet-http.h>
 #include "../globals.h"
diff -urN ethereal-0.10.6/gtk/io_stat.c ethereal-0.10.7/gtk/io_stat.c
--- ethereal-0.10.6/gtk/io_stat.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/io_stat.c	2004-10-20 17:34:32.000000000 -0500
@@ -1,7 +1,7 @@
 /* io_stat.c
  * io_stat   2002 Ronnie Sahlberg
  *
- * $Id: io_stat.c 11537 2004-07-27 06:29:22Z guy $
+ * $Id: io_stat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -43,7 +43,7 @@
 #include "gtkglobals.h"
 #include "ui_util.h"
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "alert_box.h"
 #include "simple_dialog.h"
diff -urN ethereal-0.10.6/gtk/isup_stat.c ethereal-0.10.7/gtk/isup_stat.c
--- ethereal-0.10.6/gtk/isup_stat.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/isup_stat.c	2004-10-20 17:34:30.000000000 -0500
@@ -5,7 +5,7 @@
  *
  * MUCH code modified from service_response_time_table.c.
  *
- * $Id: isup_stat.c 11436 2004-07-19 21:42:01Z ulfl $
+ * $Id: isup_stat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -45,7 +45,7 @@
 #include "image/clist_descend.xpm"
 #include "simple_dialog.h"
 #include "dlg_utils.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "../globals.h"
 #include "filter_dlg.h"
diff -urN ethereal-0.10.6/gtk/layout_prefs.c ethereal-0.10.7/gtk/layout_prefs.c
--- ethereal-0.10.6/gtk/layout_prefs.c	2004-08-12 17:41:43.000000000 -0500
+++ ethereal-0.10.7/gtk/layout_prefs.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* layout_prefs.c
  * Dialog box for layout preferences
  *
- * $Id: layout_prefs.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: layout_prefs.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -32,7 +32,7 @@
 #include "layout_prefs.h"
 #include "gtkglobals.h"
 /*#include <epan/resolv.h>*/
-#include "prefs.h"
+#include <epan/prefs.h>
 /*#include "prefs_dlg.h"*/
 #include "ui_util.h"
 #include "main.h"
diff -urN ethereal-0.10.6/gtk/ldap_stat.c ethereal-0.10.7/gtk/ldap_stat.c
--- ethereal-0.10.6/gtk/ldap_stat.c	2004-08-12 17:41:43.000000000 -0500
+++ ethereal-0.10.7/gtk/ldap_stat.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* ldap_stat.c
  * ldap_stat   2003 Ronnie Sahlberg
  *
- * $Id: ldap_stat.c 11436 2004-07-19 21:42:01Z ulfl $
+ * $Id: ldap_stat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -39,7 +39,7 @@
 #include <epan/value_string.h>
 
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include <epan/dissectors/packet-ldap.h>
 #include "../register.h"
 #include "../timestats.h"
diff -urN ethereal-0.10.6/gtk/main.c ethereal-0.10.7/gtk/main.c
--- ethereal-0.10.6/gtk/main.c	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/main.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,6 +1,6 @@
 /* main.c
  *
- * $Id: main.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: main.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -64,7 +64,7 @@
 #include "getopt.h"
 #endif
 
-#ifdef WIN32 /* Needed for console I/O */
+#ifdef _WIN32 /* Needed for console I/O */
 #include <fcntl.h>
 #include <conio.h>
 #endif
@@ -85,7 +85,7 @@
 #include "summary.h"
 #include "filters.h"
 #include "disabled_protos.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "filter_dlg.h"
 #include "layout_prefs.h"
 #include "color.h"
@@ -93,18 +93,19 @@
 #include "print.h"
 #include "simple_dialog.h"
 #include "register.h"
-#include "prefs-int.h"
+#include <epan/prefs-int.h>
 #include "ringbuffer.h"
 #include "../ui_util.h"     /* beware: ui_util.h exists twice! */
-#include "tap.h"
+#include <epan/tap.h>
 #include "util.h"
+#include "clopts_common.h"
 #include "version_info.h"
 #include "capture.h"
 #include "merge.h"
 #ifdef HAVE_LIBPCAP
 #include "pcap-util.h"
 #endif
-#ifdef WIN32
+#ifdef _WIN32
 #include "capture-wpcap.h"
 #endif
 
@@ -121,7 +122,7 @@
 #include "menu.h"
 #include "../menu.h"
 #include "file_dlg.h"
-#include "column.h"
+#include <epan/column.h>
 #include "proto_draw.h"
 #include "keys.h"
 #include "packet_win.h"
@@ -132,6 +133,8 @@
 #include "follow_dlg.h"
 #include "font_utils.h"
 #include "about_dlg.h"
+#include "help_dlg.h"
+#include "decode_as_dlg.h"
 
 
 /*
@@ -149,7 +152,7 @@
 capture_file cfile;
 GtkWidget   *main_display_filter_widget=NULL;
 GtkWidget   *top_level = NULL, *tree_view, *byte_nb_ptr, *tv_scrollw;
-static GtkWidget   *none_lb, *main_pane_v1, *main_pane_v2, *main_pane_h1, *main_pane_h2;
+static GtkWidget   *main_pane_v1, *main_pane_v2, *main_pane_h1, *main_pane_h2;
 static GtkWidget   *main_first_pane, *main_second_pane;
 static GtkWidget   *status_pane;
 static GtkWidget   *menubar, *main_vbox, *main_tb, *pkt_scrollw, *stat_hbox, *filter_tb;
@@ -161,7 +164,7 @@
 GString *comp_info_str, *runtime_info_str;
 gchar       *ethereal_path = NULL;
 
-#ifdef WIN32
+#ifdef _WIN32
 static gboolean has_console;	/* TRUE if app has console */
 /*static void create_console(void);*/
 static void destroy_console(void);
@@ -988,7 +991,7 @@
 static void
 show_version(void)
 {
-#ifdef WIN32
+#ifdef _WIN32
   create_console();
 #endif
 
@@ -1139,7 +1142,7 @@
 }
 #endif
 
-#if defined WIN32 || GTK_MAJOR_VERSION < 2 || ! defined USE_THREADS
+#if defined(_WIN32) || GTK_MAJOR_VERSION < 2 || ! defined USE_THREADS
 /* 
    Once every 3 seconds we get a callback here which we use to update
    the tap extensions. Since Gtk1 is single threaded we dont have to
@@ -1186,14 +1189,14 @@
 void
 protect_thread_critical_region(void)
 {
-#if ! defined WIN32 && GTK_MAJOR_VERSION >= 2 && defined USE_THREADS
+#if !defined(_WIN32) && GTK_MAJOR_VERSION >= 2 && defined USE_THREADS
     g_static_mutex_lock(&update_thread_mutex);
 #endif
 }
 void
 unprotect_thread_critical_region(void)
 {
-#if ! defined WIN32 && GTK_MAJOR_VERSION >= 2 && defined USE_THREADS
+#if !defined(_WIN32) && GTK_MAJOR_VERSION >= 2 && defined USE_THREADS
     g_static_mutex_unlock(&update_thread_mutex);
 #endif
 }
@@ -1316,7 +1319,7 @@
     out_fd = create_tempfile(tmpname, sizeof tmpname, "ether");
 
     /* merge the files in chonological order */
-    merge_ok = merge_n_files(out_fd, in_file_count, in_filenames, FALSE, &err);
+    merge_ok = merge_n_files(out_fd, in_file_count, in_filenames, WTAP_FILE_PCAP, FALSE, &err);
 
   if(!merge_ok) {
     /* merge failed */
@@ -1526,9 +1529,9 @@
   extern char         *optarg;
   gboolean             arg_error = FALSE;
 
-#ifdef WIN32
+#ifdef _WIN32
   WSADATA 	       wsaData;
-#endif  /* WIN32 */
+#endif  /* _WIN32 */
 
   char                *rf_path;
   int                  rf_open_errno;
@@ -1568,11 +1571,11 @@
 #define OPTSTRING_INIT "a:b:B:c:f:Hhi:klLm:nN:o:pP:Qr:R:Ss:t:T:w:vy:z:"
 
 #ifdef HAVE_LIBPCAP
-#ifdef WIN32
+#ifdef _WIN32
 #define OPTSTRING_CHILD "W:Z:"
 #else
 #define OPTSTRING_CHILD "W:"
-#endif  /* WIN32 */
+#endif  /* _WIN32 */
 #else
 #define OPTSTRING_CHILD ""
 #endif  /* HAVE_LIBPCAP */
@@ -1593,7 +1596,7 @@
 
   ethereal_path = argv[0];
 
-#ifdef WIN32
+#ifdef _WIN32
   /* Arrange that if we have no console window, and a GLib message logging
      routine is called to log a message, we pop up a console window.
 
@@ -1668,25 +1671,10 @@
 	to specify the information to dump;
 
 	arguments after that will not be used. */
-  if (argc >= 2 && strcmp(argv[1], "-G") == 0) {
-    if (argc == 2)
-      proto_registrar_dump_fields();
-    else {
-      if (strcmp(argv[2], "fields") == 0)
-        proto_registrar_dump_fields();
-      else if (strcmp(argv[2], "protocols") == 0)
-        proto_registrar_dump_protocols();
-      else {
-        fprintf(stderr, "ethereal: Invalid \"%s\" option for -G flag\n",
-                argv[2]);
-        exit(1);
-      }
-    }
-    exit(0);
-  }
+  handle_dashG_option(argc, argv, "ethereal");
 
   /* multithread support currently doesn't seem to work in win32 gtk2.0.6 */
-#if ! defined WIN32 && GTK_MAJOR_VERSION >= 2 && defined G_THREADS_ENABLED && defined USE_THREADS
+#if !defined(_WIN32) && GTK_MAJOR_VERSION >= 2 && defined(G_THREADS_ENABLED) && defined USE_THREADS
   {
       GThread *ut;
       g_thread_init(NULL);
@@ -1694,10 +1682,10 @@
       ut=g_thread_create(update_thread, NULL, FALSE, NULL);
       g_thread_set_priority(ut, G_THREAD_PRIORITY_LOW);
   }
-#else  /* WIN32 || GTK1.2 || !G_THREADS_ENABLED || !USE_THREADS */
+#else  /* _WIN32 || GTK1.2 || !G_THREADS_ENABLED || !USE_THREADS */
   /* this is to keep tap extensions updating once every 3 seconds */
   gtk_timeout_add(3000, (GtkFunction)update_cb,(gpointer)NULL);
-#endif /* !WIN32 && GTK2 && G_THREADS_ENABLED */
+#endif /* !_WIN32 && GTK2 && G_THREADS_ENABLED */
 
 #if HAVE_GNU_ADNS
   gtk_timeout_add(750, (GtkFunction) host_name_lookup_process, NULL);
@@ -1840,13 +1828,13 @@
 
   init_cap_file(&cfile);
 
-#ifdef WIN32
+#ifdef _WIN32
   /* Load wpcap if possible. Do this before collecting the run-time version information */
   load_wpcap();
 
   /* Start windows sockets */
   WSAStartup( MAKEWORD( 1, 1 ), &wsaData );
-#endif  /* WIN32 */
+#endif  /* _WIN32 */
 
   /* Assemble the compile-time version information string */
   comp_info_str = g_string_new("Compiled ");
@@ -2061,7 +2049,7 @@
         break;
       case 'v':        /* Show version and exit */
         show_version();
-#ifdef WIN32
+#ifdef _WIN32
         destroy_console();
 #endif
         exit(0);
@@ -2419,6 +2407,7 @@
 
     colors_init();
     colfilter_init();
+    decode_as_init();
 
     /* the window can be sized only, if it's not already shown, so do it now! */
     main_load_window_geometry(top_level);
@@ -2548,7 +2537,7 @@
   epan_cleanup();
   g_free(rc_file);
 
-#ifdef WIN32
+#ifdef _WIN32
   /* Shutdown windows sockets */
   WSACleanup();
 
@@ -2568,7 +2557,7 @@
   return 0;	/* not reached */
 }
 
-#ifdef WIN32
+#ifdef _WIN32
 
 /* We build this as a GUI subsystem application on Win32, so
    "WinMain()", not "main()", gets called.
@@ -2689,7 +2678,7 @@
 {
     switch(layout_content) {
     case(layout_pane_content_none):
-        return none_lb;
+        return NULL;
         break;
     case(layout_pane_content_plist):
         return pkt_scrollw;
@@ -2711,7 +2700,9 @@
  * Rearrange the main window widgets
  */
 void main_widgets_rearrange(void) {
-    GtkWidget *pane_content[3];
+    GtkWidget *first_pane_widget1, *first_pane_widget2;
+    GtkWidget *second_pane_widget1, *second_pane_widget2;
+    gboolean split_top_left;
 
     /* be a bit faster */
     gtk_widget_hide(main_vbox);
@@ -2727,7 +2718,6 @@
     gtk_widget_ref(info_bar);
     gtk_widget_ref(packets_bar);
     gtk_widget_ref(status_pane);
-    gtk_widget_ref(none_lb);
     gtk_widget_ref(main_pane_v1);
     gtk_widget_ref(main_pane_v2);
     gtk_widget_ref(main_pane_h1);
@@ -2753,64 +2743,63 @@
         gtk_box_pack_start(GTK_BOX(main_vbox), filter_tb, FALSE, TRUE, 1);
     }
 
-    /* get the corresponding widgets to the content setting */
-    pane_content[0] = main_widget_layout(prefs.gui_layout_content_1);
-    pane_content[1] = main_widget_layout(prefs.gui_layout_content_2);
-    pane_content[2] = main_widget_layout(prefs.gui_layout_content_3);
-
     /* fill the main layout panes */
     switch(prefs.gui_layout_type) {
     case(layout_type_5):
         main_first_pane  = main_pane_v1;
         main_second_pane = main_pane_v2;
-        gtk_paned_add1(GTK_PANED(main_first_pane), pane_content[0]);
-        gtk_paned_add2(GTK_PANED(main_first_pane), main_second_pane);
-        gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[1], TRUE, TRUE);
-        gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[2], FALSE, FALSE);
+        split_top_left = FALSE;
         break;
     case(layout_type_2):
         main_first_pane  = main_pane_v1;
         main_second_pane = main_pane_h1;
-        gtk_paned_add1(GTK_PANED(main_first_pane), pane_content[0]);
-        gtk_paned_add2(GTK_PANED(main_first_pane), main_second_pane);
-        gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[1], TRUE, TRUE);
-        gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[2], FALSE, FALSE);
+        split_top_left = FALSE;
         break;
     case(layout_type_1):
         main_first_pane  = main_pane_v1;
         main_second_pane = main_pane_h1;
-        gtk_paned_add1(GTK_PANED(main_first_pane), main_second_pane);
-        gtk_paned_add2(GTK_PANED(main_first_pane), pane_content[2]);
-        gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[0], TRUE, TRUE);
-        gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[1], FALSE, FALSE);
+        split_top_left = TRUE;
         break;
     case(layout_type_4):
         main_first_pane  = main_pane_h1;
         main_second_pane = main_pane_v1;
-        gtk_paned_add1(GTK_PANED(main_first_pane), pane_content[0]);
-        gtk_paned_add2(GTK_PANED(main_first_pane), main_second_pane);
-        gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[1], TRUE, TRUE);
-        gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[2], FALSE, FALSE);
+        split_top_left = FALSE;
         break;
     case(layout_type_3):
         main_first_pane  = main_pane_h1;
         main_second_pane = main_pane_v1;
-        gtk_paned_add1(GTK_PANED(main_first_pane), main_second_pane);
-        gtk_paned_add2(GTK_PANED(main_first_pane), pane_content[2]);
-        gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[0], TRUE, TRUE);
-        gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[1], FALSE, FALSE);
+        split_top_left = TRUE;
         break;
     case(layout_type_6):
         main_first_pane  = main_pane_h1;
         main_second_pane = main_pane_h2;
-        gtk_paned_add1(GTK_PANED(main_first_pane), pane_content[0]);
-        gtk_paned_add2(GTK_PANED(main_first_pane), main_second_pane);
-        gtk_paned_pack1(GTK_PANED(main_second_pane), pane_content[1], TRUE, TRUE);
-        gtk_paned_pack2(GTK_PANED(main_second_pane), pane_content[2], FALSE, FALSE);
+        split_top_left = FALSE;
         break;
     default:
+        main_first_pane = NULL;
+        main_second_pane = NULL;
+        split_top_left = FALSE;
         g_assert_not_reached();
     }
+    if (split_top_left) {
+        first_pane_widget1 = main_second_pane;
+        second_pane_widget1 = main_widget_layout(prefs.gui_layout_content_1);
+        second_pane_widget2 = main_widget_layout(prefs.gui_layout_content_2);
+        first_pane_widget2 = main_widget_layout(prefs.gui_layout_content_3);
+    } else {
+        first_pane_widget1 = main_widget_layout(prefs.gui_layout_content_1);
+        first_pane_widget2 = main_second_pane;
+        second_pane_widget1 = main_widget_layout(prefs.gui_layout_content_2);
+        second_pane_widget2 = main_widget_layout(prefs.gui_layout_content_3);
+    }
+    if (first_pane_widget1 != NULL)
+        gtk_paned_add1(GTK_PANED(main_first_pane), first_pane_widget1);
+    if (first_pane_widget2 != NULL)
+        gtk_paned_add2(GTK_PANED(main_first_pane), first_pane_widget2);
+    if (second_pane_widget1 != NULL)
+        gtk_paned_pack1(GTK_PANED(main_second_pane), second_pane_widget1, TRUE, TRUE);
+    if (second_pane_widget2 != NULL)
+        gtk_paned_pack2(GTK_PANED(main_second_pane), second_pane_widget2, FALSE, FALSE);
 
     gtk_container_add(GTK_CONTAINER(main_vbox), main_first_pane);
 
@@ -2969,7 +2958,7 @@
 
     tooltips = gtk_tooltips_new();
 
-#ifdef WIN32 
+#ifdef _WIN32 
 #if GTK_MAJOR_VERSION < 2
     /* has to be done, after top_level window is created */
     app_font_gtk1_init(top_level);
@@ -3033,8 +3022,6 @@
 
 
     /* Panes for the packet list, tree, and byte view */
-    none_lb = gtk_label_new("None");
-
     main_pane_v1 = gtk_vpaned_new();
     gtk_widget_show(main_pane_v1);
     main_pane_v2 = gtk_vpaned_new();
diff -urN ethereal-0.10.6/gtk/menu.c ethereal-0.10.7/gtk/menu.c
--- ethereal-0.10.6/gtk/menu.c	2004-08-12 17:41:43.000000000 -0500
+++ ethereal-0.10.7/gtk/menu.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* menu.c
  * Menu routines
  *
- * $Id: menu.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: menu.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -35,7 +35,11 @@
 #include "tap_menu.h"
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
-#include "prefs.h"
+#include <epan/prefs.h>
+#include <epan/tap.h>
+#include <epan/timestamp.h>
+#include <epan/ipproto.h>
+
 #include "about_dlg.h"
 #include "capture_dlg.h"
 #include "color_dlg.h"
@@ -61,9 +65,7 @@
 #include "toolbar.h"
 #include "gtkglobals.h"
 #include "register.h"
-#include "../tap.h"
 #include "../menu.h"
-#include "../ipproto.h"
 #include "packet_list.h"
 #include "ethclist.h"
 #include "recent.h"
@@ -72,7 +74,6 @@
 #include "conversations_table.h"
 #include "hostlist_table.h"
 #include "simple_dialog.h"
-#include <epan/timestamp.h>
 
 GtkWidget *popup_menu_object;
 
@@ -343,21 +344,24 @@
     ITEM_FACTORY_STOCK_ENTRY("/Help/_Contents", "F1", help_cb, 0, GTK_STOCK_HELP),
     ITEM_FACTORY_ENTRY("/Help/_Supported Protocols", NULL, supported_cb, 0, NULL, NULL),
 #if (GLIB_MAJOR_VERSION >= 2)
-    /* currently, glib1.x can't start a webbrowser, see webbrowser.c for details */
+#ifdef ETHEREAL_EUG_DIR
+    ITEM_FACTORY_ENTRY("/Help/User's Guide", NULL, url_page_menu_cb, HELP_CONTENT, NULL, NULL),
+#endif
     ITEM_FACTORY_ENTRY("/Help/Manual Pages", NULL, NULL, 0, "<Branch>", NULL),
-    ITEM_FACTORY_ENTRY("/Help/Manual Pages/Ethereal", NULL, url_localpage_cb, LOCALPAGE_MAN_ETHEREAL, NULL, NULL),
-    ITEM_FACTORY_ENTRY("/Help/Manual Pages/Ethereal Filter", NULL, url_localpage_cb, LOCALPAGE_MAN_ETHEREAL_FILTER, NULL, NULL),
+    ITEM_FACTORY_ENTRY("/Help/Manual Pages/Ethereal", NULL, url_page_menu_cb, LOCALPAGE_MAN_ETHEREAL, NULL, NULL),
+    ITEM_FACTORY_ENTRY("/Help/Manual Pages/Ethereal Filter", NULL, url_page_menu_cb, LOCALPAGE_MAN_ETHEREAL_FILTER, NULL, NULL),
     ITEM_FACTORY_ENTRY("/Help/Manual Pages/<separator>", NULL, NULL, 0, "<Separator>", NULL),
-    ITEM_FACTORY_ENTRY("/Help/Manual Pages/Tethereal", NULL, url_localpage_cb, LOCALPAGE_MAN_TETHEREAL, NULL, NULL),
-    ITEM_FACTORY_ENTRY("/Help/Manual Pages/Mergecap", NULL, url_localpage_cb, LOCALPAGE_MAN_MERGECAP, NULL, NULL),
-    ITEM_FACTORY_ENTRY("/Help/Manual Pages/Editcap", NULL, url_localpage_cb, LOCALPAGE_MAN_EDITCAP, NULL, NULL),
-    ITEM_FACTORY_ENTRY("/Help/Manual Pages/Text2pcap", NULL, url_localpage_cb, LOCALPAGE_MAN_TEXT2PCAP, NULL, NULL),
+    ITEM_FACTORY_ENTRY("/Help/Manual Pages/Tethereal", NULL, url_page_menu_cb, LOCALPAGE_MAN_TETHEREAL, NULL, NULL),
+    ITEM_FACTORY_ENTRY("/Help/Manual Pages/Mergecap", NULL, url_page_menu_cb, LOCALPAGE_MAN_MERGECAP, NULL, NULL),
+    ITEM_FACTORY_ENTRY("/Help/Manual Pages/Editcap", NULL, url_page_menu_cb, LOCALPAGE_MAN_EDITCAP, NULL, NULL),
+    ITEM_FACTORY_ENTRY("/Help/Manual Pages/Text2pcap", NULL, url_page_menu_cb, LOCALPAGE_MAN_TEXT2PCAP, NULL, NULL),
     ITEM_FACTORY_ENTRY("/Help/Ethereal Online", NULL, NULL, 0, "<Branch>", NULL),
-    ITEM_FACTORY_STOCK_ENTRY("/Help/Ethereal Online/Home Page", NULL, url_onlinepage_cb, ONLINEPAGE_HOME, GTK_STOCK_HOME),
-    ITEM_FACTORY_ENTRY("/Help/Ethereal Online/User's Guide", NULL, url_onlinepage_cb, ONLINEPAGE_USERGUIDE, NULL, NULL),
-    ITEM_FACTORY_ENTRY("/Help/Ethereal Online/FAQ's", NULL, url_onlinepage_cb, ONLINEPAGE_FAQ, NULL, NULL),
-    ITEM_FACTORY_ENTRY("/Help/Ethereal Online/Downloads", NULL, url_onlinepage_cb, ONLINEPAGE_DOWNLOAD, NULL, NULL),
-    ITEM_FACTORY_ENTRY("/Help/Ethereal Online/Example Files", NULL, url_onlinepage_cb, ONLINEPAGE_SAMPLE, NULL, NULL),
+    ITEM_FACTORY_STOCK_ENTRY("/Help/Ethereal Online/Home Page", NULL, url_page_menu_cb, ONLINEPAGE_HOME, GTK_STOCK_HOME),
+    ITEM_FACTORY_ENTRY("/Help/Ethereal Online/Wiki", NULL, url_page_menu_cb, ONLINEPAGE_WIKI, NULL, NULL),
+    ITEM_FACTORY_ENTRY("/Help/Ethereal Online/User's Guide", NULL, url_page_menu_cb, ONLINEPAGE_USERGUIDE, NULL, NULL),
+    ITEM_FACTORY_ENTRY("/Help/Ethereal Online/FAQ's", NULL, url_page_menu_cb, ONLINEPAGE_FAQ, NULL, NULL),
+    ITEM_FACTORY_ENTRY("/Help/Ethereal Online/Downloads", NULL, url_page_menu_cb, ONLINEPAGE_DOWNLOAD, NULL, NULL),
+    ITEM_FACTORY_ENTRY("/Help/Ethereal Online/Example Files", NULL, url_page_menu_cb, ONLINEPAGE_SAMPLE_FILES, NULL, NULL),
 #endif
     ITEM_FACTORY_ENTRY("/Help/<separator>", NULL, NULL, 0, "<Separator>", NULL),
     ITEM_FACTORY_ENTRY("/Help/_About Ethereal", NULL, about_ethereal_cb,
@@ -473,6 +477,8 @@
     ITEM_FACTORY_ENTRY("/Display Filters...", NULL, dfilter_dialog_cb,
                        0, NULL, NULL),
     ITEM_FACTORY_ENTRY("/Export Selected Packet Bytes...", NULL, savehex_cb,
+                       0, NULL, NULL),
+    ITEM_FACTORY_ENTRY("/Copy Packet Bytes into Clipboard", NULL, copy_hex_cb,
                        0, NULL, NULL)
 };
 
@@ -1039,9 +1045,9 @@
 
 
 	normalized_cf_name = g_strdup(cf_name);
-#ifdef WIN32
-    /* replace all slashes by backslashes */
-    g_strdelimit(normalized_cf_name, "/", '\\');
+#ifdef _WIN32
+	/* replace all slashes by backslashes */
+	g_strdelimit(normalized_cf_name, "/", '\\');
 #endif
 
 	/* get the submenu container item */
@@ -1062,15 +1068,15 @@
 		 * already in the list or 
 		 * this element is above maximum count (too old), remove it */
 		if (!widget_cf_name ||
-#ifdef WIN32
-            /* do a case insensitive compare on win32 */
+#ifdef _WIN32
+		    /* do a case insensitive compare on win32 */
 #if GLIB_MAJOR_VERSION < 2
-            g_strncasecmp(widget_cf_name, normalized_cf_name, 1000) == 0 ||
+		    g_strncasecmp(widget_cf_name, normalized_cf_name, 1000) == 0 ||
 #else
-            g_ascii_strncasecmp(widget_cf_name, normalized_cf_name, 1000) == 0 ||
+		    g_ascii_strncasecmp(widget_cf_name, normalized_cf_name, 1000) == 0 ||
 #endif
-#else   /* WIN32 */
-            /* do a case sensitive compare on unix */
+#else   /* _WIN32 */
+		    /* do a case sensitive compare on unix */
 		    strncmp(widget_cf_name, normalized_cf_name, 1000) == 0 ||
 #endif
 		    cnt >= prefs.gui_recent_files_count_max) {
diff -urN ethereal-0.10.6/gtk/mgcp_stat.c ethereal-0.10.7/gtk/mgcp_stat.c
--- ethereal-0.10.6/gtk/mgcp_stat.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/mgcp_stat.c	2004-10-20 17:34:31.000000000 -0500
@@ -2,7 +2,7 @@
  * mgcp-statistics for ethereal
  * Copyright 2003 Lars Roland
  *
- * $Id: mgcp_stat.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: mgcp_stat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -40,7 +40,7 @@
 #include <epan/value_string.h>
 
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "../plugins/mgcp/packet-mgcp.h"
 #include "../timestats.h"
diff -urN ethereal-0.10.6/gtk/mtp3_stat.c ethereal-0.10.7/gtk/mtp3_stat.c
--- ethereal-0.10.6/gtk/mtp3_stat.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/mtp3_stat.c	2004-10-20 17:34:31.000000000 -0500
@@ -5,7 +5,7 @@
  *
  * Modified from gsm_map_stat.c
  *
- * $Id: mtp3_stat.c 11436 2004-07-19 21:42:01Z ulfl $
+ * $Id: mtp3_stat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -45,7 +45,7 @@
 #include "image/clist_descend.xpm"
 #include "simple_dialog.h"
 #include "dlg_utils.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "../globals.h"
 #include "filter_dlg.h"
diff -urN ethereal-0.10.6/gtk/mtp3_summary.c ethereal-0.10.7/gtk/mtp3_summary.c
--- ethereal-0.10.6/gtk/mtp3_summary.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/mtp3_summary.c	2004-10-20 17:34:31.000000000 -0500
@@ -6,7 +6,7 @@
  *
  * Modified from gsm_map_summary.c
  *
- * $Id: mtp3_summary.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: mtp3_summary.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -46,7 +46,7 @@
 #include "dlg_utils.h"
 #include "ui_util.h"
 #include "compat_macros.h"
-#include "tap.h"
+#include <epan/tap.h>
 
 #include <epan/dissectors/packet-mtp3.h>
 #include "mtp3_stat.h"
diff -urN ethereal-0.10.6/gtk/nameres_prefs.c ethereal-0.10.7/gtk/nameres_prefs.c
--- ethereal-0.10.6/gtk/nameres_prefs.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/nameres_prefs.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* nameres_prefs.c
  * Dialog box for name resolution preferences
  *
- * $Id: nameres_prefs.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: nameres_prefs.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -32,7 +32,7 @@
 #include "nameres_prefs.h"
 #include "gtkglobals.h"
 #include <epan/addr_resolv.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "prefs_dlg.h"
 #include "ui_util.h"
 #include "main.h"
diff -urN ethereal-0.10.6/gtk/packet_list.c ethereal-0.10.7/gtk/packet_list.c
--- ethereal-0.10.6/gtk/packet_list.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/packet_list.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet_list.c
  * packet list related functions   2002 Olivier Abad
  *
- * $Id: packet_list.c 11503 2004-07-24 02:29:14Z guy $
+ * $Id: packet_list.c 12131 2004-09-29 02:54:22Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -39,10 +39,10 @@
 #include "main.h"
 #include "menu.h"
 #include "colors.h"
-#include "column.h"
+#include <epan/column.h>
 #include "epan/column_info.h"
 #include "compat_macros.h"
-#include "../prefs.h"
+#include <epan/prefs.h>
 #include "file_dlg.h"
 #include "packet_list.h"
 #include "keys.h"
@@ -322,7 +322,6 @@
   frame_data *fdata;
   
   /* XXX: we might need a progressbar here */
-  cfile.marked_count = 0;	
   for (fdata = cfile.plist; fdata != NULL; fdata = fdata->next) {
     set_frame_mark(set,
 		   fdata,
diff -urN ethereal-0.10.6/gtk/packet_win.c ethereal-0.10.7/gtk/packet_win.c
--- ethereal-0.10.6/gtk/packet_win.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/packet_win.c	2004-10-20 17:34:29.000000000 -0500
@@ -3,7 +3,7 @@
  *
  * Copyright 2000, Jeffrey C. Foster <jfoste@woodward.com>
  *
- * $Id: packet_win.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet_win.c 12131 2004-09-29 02:54:22Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -45,10 +45,10 @@
 #include <epan/packet.h>
 #include "summary.h"
 #include "file.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "menu.h"
 #include "../menu.h"
-#include "column.h"
+#include <epan/column.h>
 #include "print.h"
 #include <epan/addr_resolv.h>
 #include "packet_win.h"
diff -urN ethereal-0.10.6/gtk/prefs_dlg.c ethereal-0.10.7/gtk/prefs_dlg.c
--- ethereal-0.10.6/gtk/prefs_dlg.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/prefs_dlg.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* prefs_dlg.c
  * Routines for handling preferences
  *
- * $Id: prefs_dlg.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: prefs_dlg.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -35,7 +35,7 @@
 #include "main.h"
 #include <epan/packet.h>
 #include "file.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "column_prefs.h"
 #include "print.h"
 #include "prefs_dlg.h"
@@ -50,10 +50,10 @@
 #include "simple_dialog.h"
 #include "compat_macros.h"
 
-#include "prefs-int.h"
+#include <epan/prefs-int.h>
 
 #ifdef HAVE_LIBPCAP
-#ifdef WIN32
+#ifdef _WIN32
 #include "capture-wpcap.h"
 #endif /* _WIN32 */
 #endif /* HAVE_LIBPCAP */
@@ -202,6 +202,21 @@
 					    pref->saved_val.string);
     break;
 
+  case PREF_RANGE:
+  {
+    char *range_string;
+
+    if (pref->saved_val.range != NULL)
+      g_free(pref->saved_val.range);
+    pref->saved_val.range = range_copy(*pref->varp.range);
+    range_string = range_convert_range(*pref->varp.range);
+    pref->control = create_preference_entry(main_tb, pref->ordinal,
+					    label_string, pref->description,
+					    range_string);
+    g_free(range_string);
+    break;
+  }
+
   case PREF_OBSOLETE:
     g_assert_not_reached();
     break;
@@ -213,7 +228,7 @@
 
 #define MAX_TREE_NODE_NAME_LEN 64
 /* show prefs page for each registered module (protocol) */
-static void
+static guint
 module_prefs_show(module_t *module, gpointer user_data)
 {
   struct ct_struct *cts = user_data;
@@ -243,7 +258,7 @@
        * nothing under it that will be displayed, don't put it into
        * the window.
        */
-      return;
+      return 0;
     }
   }
 
@@ -334,6 +349,8 @@
     /* Show 'em what we got */
     gtk_widget_show_all(main_vb);
   }
+
+  return 0;
 }
 
 
@@ -853,6 +870,68 @@
 }
 
 static guint
+pref_check(pref_t *pref, gpointer user_data)
+{
+  const char *str_val;
+  char *p;
+  guint uval;
+  pref_t **badpref = user_data;
+
+  /* Fetch the value of the preference, and check whether it's valid. */
+  switch (pref->type) {
+
+  case PREF_UINT:
+    str_val = gtk_entry_get_text(GTK_ENTRY(pref->control));
+    uval = strtoul(str_val, &p, pref->info.base);
+    if (p == str_val || *p != '\0') {
+      *badpref = pref;
+      return PREFS_SET_SYNTAX_ERR;	/* number was bad */
+    }
+    break;
+
+  case PREF_BOOL:
+    /* Value can't be bad. */
+    break;
+
+  case PREF_ENUM:
+    /* Value can't be bad. */
+    break;
+
+  case PREF_STRING:
+    /* Value can't be bad. */
+    break;
+
+  case PREF_RANGE:
+    str_val = gtk_entry_get_text(GTK_ENTRY(pref->control));
+
+    if (strlen(str_val) != 0) {
+	range_t *newrange;
+
+	if (range_convert_str(&newrange, str_val, pref->info.max_value) !=
+	    CVT_NO_ERROR) {
+	    *badpref = pref;
+	    return PREFS_SET_SYNTAX_ERR;	/* range was bad */
+	}
+	g_free(newrange);
+    }
+    break;
+
+  case PREF_OBSOLETE:
+    g_assert_not_reached();
+    break;
+  }
+  return 0;
+}
+
+static guint
+module_prefs_check(module_t *module, gpointer user_data)
+{
+  /* For all preferences in this module, fetch its value from this
+     module's notebook page and check whether it's valid. */
+  return prefs_pref_foreach(module, pref_check, user_data);
+}
+
+static guint
 pref_fetch(pref_t *pref, gpointer user_data)
 {
   const char *str_val;
@@ -911,6 +990,30 @@
     }
     break;
 
+  case PREF_RANGE:
+  {
+    range_t *newrange;
+    convert_ret_t ret;
+
+    str_val = gtk_entry_get_text(GTK_ENTRY(pref->control));
+    ret = range_convert_str(&newrange, str_val, pref->info.max_value);
+    if (ret != CVT_NO_ERROR)
+#if 0
+      return PREFS_SET_SYNTAX_ERR;	/* range was bad */
+#else
+      return 0;	/* XXX - should fail */
+#endif
+
+    if (!ranges_are_equal(*pref->varp.range, newrange)) {
+      *pref_changed_p = TRUE;
+      g_free(*pref->varp.range);
+      *pref->varp.range = newrange;
+    } else
+      g_free(newrange);
+
+    break;
+  }
+
   case PREF_OBSOLETE:
     g_assert_not_reached();
     break;
@@ -918,7 +1021,7 @@
   return 0;
 }
 
-static void
+static guint
 module_prefs_fetch(module_t *module, gpointer user_data)
 {
   gboolean *must_redissect_p = user_data;
@@ -933,6 +1036,8 @@
      could cause packets to be dissected differently. */
   if (module->prefs_changed)
     *must_redissect_p = TRUE;
+
+  return 0;	/* keep fetching module preferences */
 }
 
 static guint
@@ -956,6 +1061,13 @@
     }
     break;
 
+  case PREF_RANGE:
+    if (pref->saved_val.range != NULL) {
+      g_free(pref->saved_val.range);
+      pref->saved_val.range = NULL;
+    }
+    break;
+
   case PREF_OBSOLETE:
     g_assert_not_reached();
     break;
@@ -963,19 +1075,46 @@
   return 0;
 }
 
-static void
+static guint
 module_prefs_clean(module_t *module, gpointer user_data _U_)
 {
   /* For all preferences in this module, clean up any cruft allocated for
      use by the GUI code. */
   prefs_pref_foreach(module, pref_clean, NULL);
+  return 0;	/* keep cleaning modules */
 }
 
-
 /* fetch all pref values from all pages */
-static void
+static gboolean
 prefs_main_fetch_all(GtkWidget *dlg, gboolean *must_redissect)
 {
+  pref_t *badpref;
+
+  /* First, check that the values are all valid. */
+  /* XXX - check the non-registered preferences too */
+  switch (prefs_modules_foreach(module_prefs_check, (gpointer)&badpref)) {
+
+  case PREFS_SET_SYNTAX_ERR:
+    switch (badpref->type) {
+
+    case PREF_UINT:
+      simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+                    "The value for \"%s\" is not a valid number.",
+                    badpref->title);
+      return FALSE;
+
+    case PREF_RANGE:
+      simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+                    "The value for \"%s\" is not a valid range.",
+                    badpref->title);
+      return FALSE;
+
+    default:
+      g_assert_not_reached();
+      break;
+    }
+  }
+
   /* Fetch the preferences (i.e., make sure all the values set in all of
      the preferences panes have been copied to "prefs" and the registered
      preferences). */
@@ -998,14 +1137,21 @@
   nameres_prefs_fetch(OBJECT_GET_DATA(dlg, E_NAMERES_PAGE_KEY));
 
   prefs_modules_foreach(module_prefs_fetch, must_redissect);
-}
 
+  return TRUE;
+}
 
 /* apply all pref values to the real world */
 static void
 prefs_main_apply_all(GtkWidget *dlg)
 {
-  /* Now apply those preferences. */
+  /*
+   * Apply the protocol preferences first - "gui_prefs_apply()" could
+   * cause redissection, and we have to make sure the protocol
+   * preference changes have been fully applied.
+   */
+  prefs_apply_all();
+
   gui_prefs_apply(OBJECT_GET_DATA(dlg, E_GUI_PAGE_KEY));
   layout_prefs_apply(OBJECT_GET_DATA(dlg, E_GUI_LAYOUT_PAGE_KEY));
   column_prefs_apply(OBJECT_GET_DATA(dlg, E_GUI_COLUMN_PAGE_KEY));
@@ -1023,8 +1169,6 @@
 #endif /* HAVE_LIBPCAP */
   printer_prefs_apply(OBJECT_GET_DATA(dlg, E_PRINT_PAGE_KEY));
   nameres_prefs_apply(OBJECT_GET_DATA(dlg, E_NAMERES_PAGE_KEY));
-
-  prefs_apply_all();
 }
 
 
@@ -1062,7 +1206,8 @@
 {
   gboolean must_redissect = FALSE;
 
-  prefs_main_fetch_all(parent_w, &must_redissect);
+  if (!prefs_main_fetch_all(parent_w, &must_redissect))
+    return; /* Errors in some preference setting */
 
   prefs_main_apply_all(parent_w);
 
@@ -1080,7 +1225,8 @@
 {
   gboolean must_redissect = FALSE;
 
-  prefs_main_fetch_all(parent_w, &must_redissect);
+  if (!prefs_main_fetch_all(parent_w, &must_redissect))
+    return; /* Errors in some preference setting */
 
   prefs_main_apply_all(parent_w);
 
@@ -1098,7 +1244,8 @@
   char *pf_dir_path;
   char *pf_path;
 
-  prefs_main_fetch_all(parent_w, &must_redissect);
+  if (!prefs_main_fetch_all(parent_w, &must_redissect))
+    return; /* Errors in some preference setting */
 
   /* Create the directory that holds personal configuration files, if
      necessary.  */
@@ -1177,6 +1324,14 @@
     }
     break;
 
+  case PREF_RANGE:
+    if (!ranges_are_equal(*pref->varp.range, pref->saved_val.range)) {
+      *pref_changed_p = TRUE;
+      g_free(*pref->varp.range);
+      *pref->varp.range = range_copy(pref->saved_val.range);
+    }
+    break;
+
   case PREF_OBSOLETE:
     g_assert_not_reached();
     break;
@@ -1184,7 +1339,7 @@
   return 0;
 }
 
-static void
+static guint
 module_prefs_revert(module_t *module, gpointer user_data)
 {
   gboolean *must_redissect_p = user_data;
@@ -1200,6 +1355,7 @@
      could cause packets to be dissected differently. */
   if (module->prefs_changed)
     *must_redissect_p = TRUE;
+  return 0;	/* keep processing modules */
 }
 
 /* cancel button pressed, revert prefs to saved and exit dialog */
@@ -1252,14 +1408,17 @@
   module_t *module;
 };
 
-static void
+static guint
 module_search_properties(module_t *module, gpointer user_data)
 {
   struct properties_data *p = (struct properties_data *)user_data;
 
   /* If this module has the specified title, remember it. */
-  if (strcmp(module->title, p->title) == 0)
+  if (strcmp(module->title, p->title) == 0) {
     p->module = module;
+    return 1;	/* stops the search */
+  }
+  return 0;
 }
 
 void
diff -urN ethereal-0.10.6/gtk/print_dlg.c ethereal-0.10.7/gtk/print_dlg.c
--- ethereal-0.10.6/gtk/print_dlg.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/print_dlg.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* print_dlg.c
  * Dialog boxes for printing and exporting to text files
  *
- * $Id: print_dlg.c 11544 2004-07-27 20:10:02Z guy $
+ * $Id: print_dlg.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -33,7 +33,7 @@
 #include "globals.h"
 #include "keys.h"
 #include "print.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "alert_box.h"
 #include "simple_dialog.h"
 #include "file_dlg.h"
@@ -321,7 +321,8 @@
 static void
 print_browse_file_cb(GtkWidget *file_bt, GtkWidget *file_te)
 {
-    file_selection_browse(file_bt, file_te, "Ethereal: Print to File", FILE_SELECTION_SAVE);
+    file_selection_browse(file_bt, file_te, "Ethereal: Print to File",
+                          FILE_SELECTION_WRITE_BROWSE);
 }
 
 
@@ -747,6 +748,14 @@
 
   args = (print_args_t *)OBJECT_GET_DATA(ok_bt, PRINT_ARGS_KEY);
 
+  /* Check whether the range is valid. */
+  if (!range_check_validity(&args->range)) {
+    /* The range isn't valid; don't dismiss the print/export dialog box,
+       just leave it around so that the user can, after they
+       dismiss the alert box popped up for the error, try again. */
+    return;
+  }
+
   button = (GtkWidget *)OBJECT_GET_DATA(ok_bt, PRINT_DEST_CB_KEY);
   args->to_file = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (button));
 
diff -urN ethereal-0.10.6/gtk/print_prefs.c ethereal-0.10.7/gtk/print_prefs.c
--- ethereal-0.10.6/gtk/print_prefs.c	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/print_prefs.c	2004-10-20 17:34:31.000000000 -0500
@@ -1,7 +1,7 @@
 /* print_prefs.c
  * Dialog boxes for preferences for printing
  *
- * $Id: print_prefs.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: print_prefs.c 12146 2004-09-30 02:02:35Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -33,7 +33,7 @@
 #include "print_prefs.h"
 #include "keys.h"
 #include "print.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "prefs_dlg.h"
 #include "util.h"
 #include "ui_util.h"
@@ -134,7 +134,8 @@
 static void
 printer_browse_file_cb(GtkWidget *file_bt, GtkWidget *file_te)
 {
-    file_selection_browse(file_bt, file_te, "Ethereal: Print to a File", FILE_SELECTION_SAVE);
+    file_selection_browse(file_bt, file_te, "Ethereal: Print to a File",
+                          FILE_SELECTION_WRITE_BROWSE);
 }
 
 
diff -urN ethereal-0.10.6/gtk/proto_dlg.c ethereal-0.10.7/gtk/proto_dlg.c
--- ethereal-0.10.6/gtk/proto_dlg.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/proto_dlg.c	2004-10-20 17:34:31.000000000 -0500
@@ -1,6 +1,6 @@
 /* proto_dlg.c
  *
- * $Id: proto_dlg.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: proto_dlg.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Laurent Deniel <laurent.deniel@free.fr>
  *
@@ -31,7 +31,7 @@
 #include <gdk/gdkkeysyms.h>
 #include <string.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "globals.h"
 #include "main.h"
 #include "util.h"
diff -urN ethereal-0.10.6/gtk/proto_draw.c ethereal-0.10.7/gtk/proto_draw.c
--- ethereal-0.10.6/gtk/proto_draw.c	2004-08-12 17:41:47.000000000 -0500
+++ ethereal-0.10.7/gtk/proto_draw.c	2004-10-20 17:34:32.000000000 -0500
@@ -1,7 +1,7 @@
 /* proto_draw.c
  * Routines for GTK+ packet display
  *
- * $Id: proto_draw.c 11505 2004-07-24 06:38:33Z guy $
+ * $Id: proto_draw.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -54,11 +54,11 @@
 
 #include "main.h"
 #include <epan/packet.h>
-#include "util.h"
+#include <epan/charsets.h>
 #include "menu.h"
 #include "keys.h"
 
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "colors.h"
 #include "file_dlg.h"
 #include "proto_draw.h"
@@ -801,6 +801,47 @@
         savehex_dlg = NULL;
 }
 
+extern void
+copy_hex_cb(GtkWidget * w _U_, gpointer data _U_)  
+{
+	GtkWidget *bv;
+	int len;
+	int i=0;
+	const guint8 *data_p = NULL;
+	GString *ASCII_representation = g_string_new("");
+	GString *byte_str = g_string_new("");
+	
+	bv = get_notebook_bv_ptr(byte_nb_ptr);
+	if (bv == NULL) {
+		/* shouldn't happen */ 
+		simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Could not find the corresponding text window!");
+		return;
+	}
+	
+	data_p = get_byte_view_data_and_length(GTK_WIDGET(bv), &len);
+	
+	g_string_sprintfa(byte_str,"%04x  ",i); /* Offset 0000 */
+	for (i=0; i<len; i++){
+	  g_string_sprintfa(ASCII_representation,"%c",isprint(*data_p) ? *data_p : '.');
+	  g_string_sprintfa(byte_str," %02x",*data_p++);
+	  if ((i+1)%16==0 && i!=0){
+	    g_string_sprintfa(byte_str,"  %s\n%04x  ",ASCII_representation->str,i+1);
+	    g_string_assign (ASCII_representation,"");
+	  }
+	}
+	
+	if(ASCII_representation->len){
+	  for (i=ASCII_representation->len; i<16; i++){
+	    g_string_sprintfa(byte_str,"   ");
+	  }
+	  g_string_sprintfa(byte_str,"  %s\n",ASCII_representation->str);
+	}
+	/* Now that we have the byte data, copy it into the default clipboard */
+        copy_to_clipboard(byte_str);
+	g_string_free(byte_str, TRUE);                       /* Free the memory */
+	g_string_free(ASCII_representation, TRUE);           /* Free the memory */
+}
+
 /* save the current highlighted hex data */
 static void
 savehex_save_clicked_cb(GtkWidget * w _U_, gpointer data _U_)
diff -urN ethereal-0.10.6/gtk/proto_draw.h ethereal-0.10.7/gtk/proto_draw.h
--- ethereal-0.10.6/gtk/proto_draw.h	2004-08-12 17:41:48.000000000 -0500
+++ ethereal-0.10.7/gtk/proto_draw.h	2004-10-20 17:34:32.000000000 -0500
@@ -1,7 +1,7 @@
 /* proto_draw.h
  * Definitions for GTK+ packet display structures and routines
  *
- * $Id: proto_draw.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: proto_draw.h 11883 2004-09-02 16:58:43Z sharpe $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -96,6 +96,13 @@
  */
 extern void savehex_cb(GtkWidget * w, gpointer data);
 
+/** Callback for "Copy packet bytes to clipboard" operation.
+ *
+ * @param w unused
+ * @param data unused
+ */
+extern void copy_hex_cb(GtkWidget * w, gpointer data);
+
 #if GTK_MAJOR_VERSION < 2
 /** Redraw a given byte view window.
  *
diff -urN ethereal-0.10.6/gtk/range_utils.c ethereal-0.10.7/gtk/range_utils.c
--- ethereal-0.10.6/gtk/range_utils.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/range_utils.c	2004-10-20 17:34:31.000000000 -0500
@@ -1,7 +1,7 @@
 /* range_utils.c
  * Packet range routines (save, print, ...) for GTK things
  *
- * $Id: range_utils.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: range_utils.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Ulf Lamping <ulf.lamping@web.de>
  *
@@ -32,10 +32,11 @@
 
 #include "globals.h"
 
-#include "range.h"
+#include "packet-range.h"
 #include "ui_util.h"
 #include "dlg_utils.h"
 #include "compat_macros.h"
+#include "simple_dialog.h"
 
 
 #define RANGE_VALUES_KEY                "range_values"
@@ -58,7 +59,29 @@
 #define RANGE_SELECT_USER_D_KEY         "range_select_user_range_d_lb"
 #define RANGE_SELECT_USER_ENTRY_KEY     "range_select_user_range_entry"
 
+gboolean
+range_check_validity(packet_range_t *range)
+{
+  switch (packet_range_check(range)) {
+
+  case CVT_NO_ERROR:
+    return TRUE;
+
+  case CVT_SYNTAX_ERROR:
+    simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+      "The specified range of packets isn't a valid range.");
+    return FALSE;
+
+  case CVT_NUMBER_TOO_BIG:
+    simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+      "The specified range of packets has a packet number that's too large.");
+    return FALSE;
 
+  default:
+    g_assert_not_reached();
+    return FALSE;
+  }
+}
 
 /* update all "dynamic" things */
 void
@@ -98,10 +121,10 @@
   gtk_label_set_text(GTK_LABEL(OBJECT_GET_DATA(data, RANGE_SELECT_CURR_D_KEY)), label_text);
   gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_CURR_D_KEY), selected_num && filtered_active);
 
-  gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_KEY), cfile.marked_count);
+  gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_KEY), cfile.marked_count > 0);
   g_snprintf(label_text, sizeof(label_text), "%u", cfile.marked_count);
   gtk_label_set_text(GTK_LABEL(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_C_KEY)), label_text);
-  gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_C_KEY), cfile.marked_count && !filtered_active);
+  gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_C_KEY), cfile.marked_count > 0 && !filtered_active);
   g_snprintf(label_text, sizeof(label_text), "%u", range->displayed_marked_cnt);
   gtk_label_set_text(GTK_LABEL(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_D_KEY)), label_text);
   gtk_widget_set_sensitive(OBJECT_GET_DATA(data, RANGE_SELECT_MARKED_D_KEY), range->displayed_marked_cnt && filtered_active);
diff -urN ethereal-0.10.6/gtk/range_utils.h ethereal-0.10.7/gtk/range_utils.h
--- ethereal-0.10.6/gtk/range_utils.h	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/range_utils.h	2004-10-20 17:34:32.000000000 -0500
@@ -1,7 +1,7 @@
 /* range_utils.h
  * Declarations of utilities to with range_utils.c (packet range dialog)
  *
- * $Id: range_utils.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: range_utils.h 12341 2004-10-18 15:14:13Z gerald $
  *
  * Ulf Lamping <ulf.lamping@web.de>
  *
@@ -31,6 +31,14 @@
  *  Packet range widget used for example in the "Save" and "Print" dialogs.
  */
 
+/** Check the validity of a packet_range_t, and put up an alert box if
+ ** it's not valid.
+ *
+ * @param range the range to check
+ * @return a Boolean that's TRUE if it's valid and FALSE if it isn't
+ */
+extern gboolean range_check_validity(packet_range_t *range);
+
 /** Create a new range widget.
  *
  * @param range the range to set
diff -urN ethereal-0.10.6/gtk/recent.c ethereal-0.10.7/gtk/recent.c
--- ethereal-0.10.6/gtk/recent.c	2004-08-12 17:41:47.000000000 -0500
+++ ethereal-0.10.7/gtk/recent.c	2004-10-20 17:34:32.000000000 -0500
@@ -2,7 +2,7 @@
  * Recent "preference" handling routines
  * Copyright 2004, Ulf Lamping <ulf.lamping@web.de>
  *
- * $Id: recent.c 11414 2004-07-18 19:54:07Z guy $
+ * $Id: recent.c 12168 2004-10-01 08:33:53Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,11 +36,11 @@
 #include <epan/filesystem.h>
 #include "menu.h"
 #include "main.h"
-#include "prefs.h"
-#include "prefs-int.h"
+#include <epan/prefs.h>
+#include <epan/prefs-int.h>
 #include "ui_util.h"
 #include "dlg_utils.h"
-
+#include "cfilter_combo_utils.h"
 
 #define RECENT_KEY_MAIN_TOOLBAR_SHOW        "gui.toolbar_main_show"
 #define RECENT_KEY_FILTER_TOOLBAR_SHOW      "gui.filter_toolbar_show"
@@ -123,6 +123,12 @@
   menu_recent_file_write_all(rf);
 
   fputs("\n"
+    "######## Recent capture filters (latest last) ########\n"
+    "\n", rf);
+
+  cfilter_combo_recent_write_all(rf);
+
+  fputs("\n"
     "######## Recent display filters (latest last) ########\n"
     "\n", rf);
 
@@ -247,6 +253,8 @@
 	add_menu_recent_capture_file(value);
   } else if (strcmp(key, RECENT_KEY_DISPLAY_FILTER) == 0) {
 	dfilter_combo_add_recent(value);
+  } else if (strcmp(key, RECENT_KEY_CAPTURE_FILTER) == 0) {
+	cfilter_combo_add_recent(value);
   } else if (strcmp(key, RECENT_KEY_MAIN_TOOLBAR_SHOW) == 0) {
     if (strcasecmp(value, "true") == 0) {
         recent.main_toolbar_show = TRUE;
diff -urN ethereal-0.10.6/gtk/rpc_progs.c ethereal-0.10.7/gtk/rpc_progs.c
--- ethereal-0.10.6/gtk/rpc_progs.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/rpc_progs.c	2004-10-20 17:34:32.000000000 -0500
@@ -1,7 +1,7 @@
 /* rpc_progs.c
  * rpc_progs   2002 Ronnie Sahlberg
  *
- * $Id: rpc_progs.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: rpc_progs.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -38,7 +38,7 @@
 #include <epan/epan.h>
 
 #include "tap_menu.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include <epan/dissectors/packet-rpc.h>
 #include "../globals.h"
diff -urN ethereal-0.10.6/gtk/rpc_stat.c ethereal-0.10.7/gtk/rpc_stat.c
--- ethereal-0.10.6/gtk/rpc_stat.c	2004-08-12 17:41:43.000000000 -0500
+++ ethereal-0.10.7/gtk/rpc_stat.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* rpc_stat.c
  * rpc_stat   2002 Ronnie Sahlberg
  *
- * $Id: rpc_stat.c 11436 2004-07-19 21:42:01Z ulfl $
+ * $Id: rpc_stat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -41,7 +41,7 @@
 #include "simple_dialog.h"
 #include "ui_util.h"
 #include "dlg_utils.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include <epan/dissectors/packet-rpc.h>
 #include "../globals.h"
diff -urN ethereal-0.10.6/gtk/rtp_analysis.c ethereal-0.10.7/gtk/rtp_analysis.c
--- ethereal-0.10.6/gtk/rtp_analysis.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/rtp_analysis.c	2004-10-20 17:34:31.000000000 -0500
@@ -1,7 +1,7 @@
 /* rtp_analysis.c
  * RTP analysis addition for ethereal
  *
- * $Id: rtp_analysis.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: rtp_analysis.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Copyright 2003, Alcatel Business Systems
  * By Lars Ruoff <lars.ruoff@gmx.net>
@@ -10,6 +10,10 @@
  * Copyright 2003, Iskratel, Ltd, Kranj
  * By Miha Jemec <m.jemec@iskratel.si>
  *
+ * Graph. Copyright 2004, Verso Technology
+ * By Alejandro Vaquero <alejandro.vaquero@verso.com>
+ * Based on io_stat.c by Ronnie Sahlberg 
+ *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
  * Copyright 1998 Gerald Combs
@@ -48,13 +52,16 @@
 #include <epan/filesystem.h>
 
 #include "util.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "register.h"
 #include <epan/dissectors/packet-rtp.h>
 #include "g711.h"
 #include "rtp_pt.h"
 
 /* in /gtk ... */
+#include <gtk/gtk.h>
+#include "gtkglobals.h"
+
 #include "dlg_utils.h"
 #include "ui_util.h"
 #include "alert_box.h"
@@ -63,6 +70,7 @@
 #include "main.h"
 #include "progress_dlg.h"
 #include "compat_macros.h"
+#include "../color.h"
 
 #include "image/clist_ascend.xpm"
 #include "image/clist_descend.xpm"
@@ -96,6 +104,62 @@
 	GtkWidget *descend_pm;
 } column_arrows;
 
+#define NUM_COLS 9
+#define NUM_GRAPH_ITEMS 100000
+#define MAX_YSCALE 16
+#define AUTO_MAX_YSCALE 0
+#define MAX_GRAPHS 4
+#define GRAPH_FWD_JITTER 0
+#define GRAPH_FWD_DIFF 1
+#define GRAPH_REV_JITTER 2
+#define GRAPH_REV_DIFF 3
+static guint32 yscale_max[MAX_YSCALE] = {AUTO_MAX_YSCALE, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000, 2000000, 5000000, 10000000, 20000000, 50000000};
+
+#define MAX_PIXELS_PER_TICK 4
+#define DEFAULT_PIXELS_PER_TICK 1
+static guint32 pixels_per_tick[MAX_PIXELS_PER_TICK] = {1, 2, 5, 10};
+static char *graph_descr[4] = {"Fwd Jitter", "Fwd Difference", "Rvr Jitter", "Rvr Difference"};
+/* unit is in ms */
+#define MAX_TICK_VALUES 5
+#define DEFAULT_TICK_VALUE 1
+static guint tick_interval_values[MAX_TICK_VALUES] = { 1, 10, 100, 1000, 10000 };
+typedef struct _dialog_graph_graph_item_t {
+	guint32 value;
+	guint32 flags;
+} dialog_graph_graph_item_t;
+
+typedef struct _dialog_graph_graph_t {
+	struct _user_data_t *ud;	
+        dialog_graph_graph_item_t items[NUM_GRAPH_ITEMS];
+        int plot_style;
+        gboolean display;
+        GtkWidget *display_button;
+        int hf_index;
+        GdkColor color;
+        GdkGC *gc;
+	gchar title[100];
+} dialog_graph_graph_t;
+
+
+typedef struct _dialog_graph_t {
+	gboolean needs_redraw;
+        gint32 interval;    /* measurement interval in ms */
+        guint32 last_interval;
+        guint32 max_interval; /* XXX max_interval and num_items are redundant */
+        guint32 num_items;
+	struct _dialog_graph_graph_t graph[MAX_GRAPHS];
+        GtkWidget *window;
+        GtkWidget *draw_area;
+        GdkPixmap *pixmap;
+        GtkAdjustment *scrollbar_adjustment;
+        GtkWidget *scrollbar;
+        int pixmap_width;
+        int pixmap_height;
+        int pixels_per_tick;
+        int max_y_units;
+	double start_time;
+} dialog_graph_t;	
+
 typedef struct _dialog_data_t {
 	GtkWidget *window;
 	GtkCList *clist_fwd;
@@ -108,7 +172,9 @@
 	GtkCList *selected_clist;
 	GtkWidget *save_voice_as_w;
 	GtkWidget *save_csv_as_w;
+	gint notebook_signal_id;
 	gint selected_row;
+        dialog_graph_t dialog_graph;
 #ifdef USE_CONVERSATION_GRAPH
 	GtkWidget *graph_window;
 #endif
@@ -155,16 +221,20 @@
 	{PT_MPV,        90000},
 	{PT_MP2T,       90000},
 	{PT_H263,       90000},
-	{-1, 1} /* leave this as the last entry to find the end of the map when searching */
 };
 
+#define NUM_CLOCK_VALUES	(sizeof clock_map / sizeof clock_map[0])
 
 static guint32
 get_clock_rate(guint32 key)
 {
-	guint32 i=0;
-	while (clock_map[i].key!=key && clock_map[i].key!=-1) i++;
-	return clock_map[i].value;
+	size_t i;
+
+	for (i = 0; i < NUM_CLOCK_VALUES; i++) {
+		if (clock_map[i].key == key)
+			return clock_map[i].value;
+	}
+	return 1;
 }
 
 
@@ -178,9 +248,18 @@
 	TAP_RTP_NO_DATA
 } error_type_t; 
 
+#if GTK_MAJOR_VERSION < 2
+GtkRcStyle *rc_style;
+GdkColormap *colormap;
+#endif
 
 /****************************************************************************/
 /* structure that holds the information about the forward and reversed direction */
+typedef struct _bw_history_item {
+        double time;
+        guint32 bytes;
+} bw_history_item;
+#define BUFF_BW 300 
 typedef struct _tap_rtp_stat_t {
 	gboolean first_packet;     /* do not use in code that is called after rtp_packet_analyse */
 	                           /* use (flags & STAT_FLAG_FIRST) instead */
@@ -190,8 +269,14 @@
 	guint16 seq_num;
 	guint32 timestamp;
 	guint32 delta_timestamp;
+	double bandwidth;
+	bw_history_item bw_history[BUFF_BW];
+	guint16 bw_start_index;
+	guint16 bw_index;
+	guint32 total_bytes;
 	double delay;
 	double jitter;
+	double diff;
 	double time;
 	double start_time;
 	double max_delay;
@@ -263,11 +348,12 @@
 
 
 /* Column titles. */
-static gchar *titles[8] =  {
+static gchar *titles[9] =  {
 	"Packet",
 	"Sequence",
-	"Delay (s)",
-	"Jitter (s)",
+	"Delay (ms)",
+	"Jitter (ms)",
+	"IP BW (kbps)",
 	"Marker",
 	"Status",
 	"Date",
@@ -277,6 +363,16 @@
 
 typedef const guint8 * ip_addr_p;
 
+static void on_refresh_bt_clicked(GtkWidget *bt _U_, user_data_t *user_data _U_);
+/****************************************************************************/
+static void enable_graph(dialog_graph_graph_t *dgg)
+{
+        
+        dgg->display=TRUE;
+
+}
+
+static void dialog_graph_reset(user_data_t* user_data);
 
 /****************************************************************************/
 /* TAP FUNCTIONS */
@@ -287,15 +383,24 @@
 rtp_reset(void *user_data_arg)
 {
 	user_data_t *user_data = user_data_arg;
-
 	user_data->forward.statinfo.first_packet = TRUE;
 	user_data->reversed.statinfo.first_packet = TRUE;
 	user_data->forward.statinfo.max_delay = 0;
 	user_data->reversed.statinfo.max_delay = 0;
 	user_data->forward.statinfo.delay = 0;
 	user_data->reversed.statinfo.delay = 0;
+        user_data->forward.statinfo.diff = 0;
+        user_data->reversed.statinfo.diff = 0;
 	user_data->forward.statinfo.jitter = 0;
 	user_data->reversed.statinfo.jitter = 0;
+	user_data->forward.statinfo.bandwidth = 0;
+	user_data->reversed.statinfo.bandwidth = 0;
+	user_data->forward.statinfo.total_bytes = 0;
+	user_data->reversed.statinfo.total_bytes = 0;
+	user_data->forward.statinfo.bw_start_index = 0;
+	user_data->reversed.statinfo.bw_start_index = 0;
+	user_data->forward.statinfo.bw_index = 0;
+	user_data->reversed.statinfo.bw_index = 0;
 	user_data->forward.statinfo.timestamp = 0;
 	user_data->reversed.statinfo.timestamp = 0;
 	user_data->forward.statinfo.max_nr = 0;
@@ -324,6 +429,13 @@
 	user_data->forward.saveinfo.saved = FALSE;
 	user_data->reversed.saveinfo.saved = FALSE;
 
+	/* clear the dialog box clists */
+	gtk_clist_clear(GTK_CLIST(user_data->dlg.clist_fwd));
+	gtk_clist_clear(GTK_CLIST(user_data->dlg.clist_rev));
+
+	/* reset graph info */
+	dialog_graph_reset(user_data);
+
 #ifdef USE_CONVERSATION_GRAPH
 	if (user_data->dlg.graph_window != NULL)
 		window_destroy(user_data->dlg.graph_window);
@@ -350,6 +462,61 @@
 }
 
 /****************************************************************************/
+static int rtp_packet_add_graph(dialog_graph_graph_t *dgg, tap_rtp_stat_t *statinfo, packet_info *pinfo, guint32 value)
+{
+        dialog_graph_graph_item_t *it;
+        int idx;
+	double rtp_time;
+
+        /* we sometimes get called when dgg is disabled.
+           this is a bug since the tap listener should be removed first */
+        if(!dgg->display){
+                return 0;
+        }
+
+        dgg->ud->dlg.dialog_graph.needs_redraw=TRUE;
+
+        /*
+         * Find which interval this is supposed to to in and store the
+         * interval index as idx
+         */
+	if (dgg->ud->dlg.dialog_graph.start_time == -1){ /* it is the first */
+		dgg->ud->dlg.dialog_graph.start_time = statinfo->start_time;
+	}	
+	rtp_time = ((double)pinfo->fd->rel_secs + (double) pinfo->fd->rel_usecs/1000000) - dgg->ud->dlg.dialog_graph.start_time;
+	if(rtp_time<0){
+		return FALSE;
+	}	
+	idx = (guint32)(rtp_time*1000)/dgg->ud->dlg.dialog_graph.interval;
+
+        /* some sanity checks */
+        if((idx<0)||(idx>=NUM_GRAPH_ITEMS)){
+                return FALSE;
+        }
+
+        /* update num_items */
+        if((guint32)idx > dgg->ud->dlg.dialog_graph.num_items){
+                dgg->ud->dlg.dialog_graph.num_items=idx;
+                dgg->ud->dlg.dialog_graph.max_interval=idx*dgg->ud->dlg.dialog_graph.interval;
+        }
+
+        /*
+         * Find the appropriate dialog_graph_graph_item_t structure
+         */
+        it=&dgg->items[idx];
+
+	/*
+	 * Use the max value to highlight RTP problems
+	 */
+	if (value > it->value) {
+		it->value=value;
+	}
+	it->flags = it->flags | statinfo->flags;
+
+        return TRUE;
+}
+
+/****************************************************************************/
 /* here we can redraw the output */
 /* not used yet */
 static void rtp_draw(void *prs _U_)
@@ -359,7 +526,7 @@
 
 /* forward declarations */
 static void add_to_clist(GtkCList *clist, guint32 number, guint16 seq_num,
-                         double delay, double jitter, gchar *status, gboolean marker,
+                         double delay, double jitter, double bandwidth, gchar *status, gboolean marker,
                          gchar *timeStr, guint32 pkt_len, GdkColor *color);
 
 static int rtp_packet_analyse(tap_rtp_stat_t *statinfo,
@@ -380,11 +547,12 @@
 #ifdef USE_CONVERSATION_GRAPH
 	value_pair_t vp;
 #endif
-
 	/* we ignore packets that are not displayed */
 	if (pinfo->fd->flags.passed_dfilter == 0)
 		return 0;
-
+	/* also ignore RTP Version != 2 */
+	else if (rtpinfo->info_version !=2)
+		return 0;
 	/* is it the forward direction?  */
 	else if (user_data->ssrc_fwd == rtpinfo->info_sync_src)  {
 #ifdef USE_CONVERSATION_GRAPH
@@ -393,6 +561,8 @@
 		g_array_append_val(user_data->series_fwd.value_pairs, vp);
 #endif
 		rtp_packet_analyse(&(user_data->forward.statinfo), pinfo, rtpinfo);
+		rtp_packet_add_graph(&(user_data->dlg.dialog_graph.graph[GRAPH_FWD_JITTER]), &(user_data->forward.statinfo), pinfo, (guint32)(user_data->forward.statinfo.jitter*1000000));
+		rtp_packet_add_graph(&(user_data->dlg.dialog_graph.graph[GRAPH_FWD_DIFF]), &(user_data->forward.statinfo), pinfo, (guint32)(user_data->forward.statinfo.diff*1000000));
 		rtp_packet_add_info(user_data->dlg.clist_fwd,
 			&(user_data->forward.statinfo), pinfo, rtpinfo);
 		rtp_packet_save_payload(&(user_data->forward.saveinfo),
@@ -406,6 +576,8 @@
 		g_array_append_val(user_data->series_rev.value_pairs, vp);
 #endif
 		rtp_packet_analyse(&(user_data->reversed.statinfo), pinfo, rtpinfo);
+		rtp_packet_add_graph(&(user_data->dlg.dialog_graph.graph[GRAPH_REV_JITTER]), &(user_data->reversed.statinfo), pinfo, (guint32)(user_data->reversed.statinfo.jitter*1000000));
+		rtp_packet_add_graph(&(user_data->dlg.dialog_graph.graph[GRAPH_REV_DIFF]), &(user_data->reversed.statinfo), pinfo, (guint32)(user_data->reversed.statinfo.diff*1000000));
 		rtp_packet_add_info(user_data->dlg.clist_rev,
 			&(user_data->reversed.statinfo), pinfo, rtpinfo);
 		rtp_packet_save_payload(&(user_data->reversed.saveinfo),
@@ -422,10 +594,10 @@
 {
 	double current_time;
 	double current_jitter;
+	double current_diff;
 	guint32 clock_rate;
 
 	statinfo->flags = 0;
-
 	/* check payload type */
 	if (rtpinfo->info_payload_type == PT_CN
 		|| rtpinfo->info_payload_type == PT_CN_OLD)
@@ -435,16 +607,36 @@
 		statinfo->flags |= STAT_FLAG_FOLLOW_PT_CN;
 	if (rtpinfo->info_payload_type != statinfo->pt)
 		statinfo->flags |= STAT_FLAG_PT_CHANGE;
-
 	statinfo->pt = rtpinfo->info_payload_type;
+	/*
+	 * XXX - should "get_clock_rate()" return 0 for unknown
+	 * payload types, presumably meaning that we should
+	 * just ignore this packet?
+	 */
 	clock_rate = get_clock_rate(statinfo->pt);
 
 	/* store the current time and calculate the current jitter */
 	current_time = (double)pinfo->fd->rel_secs + (double) pinfo->fd->rel_usecs/1000000;
-	current_jitter = statinfo->jitter + ( fabs (current_time - (statinfo->time) -
-		((double)(rtpinfo->info_timestamp)-(double)(statinfo->timestamp))/clock_rate)- statinfo->jitter)/16;
+	current_diff = fabs (current_time - (statinfo->time) - ((double)(rtpinfo->info_timestamp)-(double)(statinfo->timestamp))/clock_rate);
+	current_jitter = statinfo->jitter + ( current_diff - statinfo->jitter)/16;
 	statinfo->delay = current_time-(statinfo->time);
 	statinfo->jitter = current_jitter;
+	statinfo->diff = current_diff;
+
+	/* calculate the BW in Kbps adding the IP+UDP header to the RTP -> 20bytes(IP)+8bytes(UDP) = 28bytes */
+	statinfo->bw_history[statinfo->bw_index].bytes = rtpinfo->info_data_len + 28;
+	statinfo->bw_history[statinfo->bw_index].time = current_time;
+	/* check if there are more than 1sec in the history buffer to calculate BW in bps. If so, remove those for the calculation */
+	while ((statinfo->bw_history[statinfo->bw_start_index].time+1)<current_time){
+	 	statinfo->total_bytes -= statinfo->bw_history[statinfo->bw_start_index].bytes;	
+		statinfo->bw_start_index++;
+		if (statinfo->bw_start_index == BUFF_BW) statinfo->bw_start_index=0;
+	};
+	statinfo->total_bytes += rtpinfo->info_data_len + 28;
+	statinfo->bandwidth = (double)(statinfo->total_bytes*8)/1000;
+	statinfo->bw_index++;
+	if (statinfo->bw_index == BUFF_BW) statinfo->bw_index = 0;	
+
 
 	/*  is this the first packet we got in this direction? */
 	if (statinfo->first_packet) {
@@ -452,6 +644,7 @@
 		statinfo->start_time = current_time;
 		statinfo->delay = 0;
 		statinfo->jitter = 0;
+		statinfo->diff = 0;
 		statinfo->flags |= STAT_FLAG_FIRST;
 		statinfo->first_packet = FALSE;
 	}
@@ -540,7 +733,6 @@
 		statinfo->sequence++;
 		statinfo->flags |= STAT_FLAG_WRONG_SEQ;
 	}
-
 	statinfo->time = current_time;
 	statinfo->timestamp = rtpinfo->info_timestamp;
 	statinfo->stop_seq_nr = rtpinfo->info_seq_num;
@@ -566,7 +758,6 @@
 	time_t then;
 	gchar status[40];
 	GdkColor color = COLOR_DEFAULT;
-
 	then = pinfo->fd->abs_secs;
 	msecs = (guint16)(pinfo->fd->abs_usecs/1000);
 	tm_tmp = localtime(&then);
@@ -609,13 +800,13 @@
 		}
 		g_snprintf(status,sizeof(status),OK_TEXT);
 	}
-
 	/*  is this the first packet we got in this direction? */
 	if (statinfo->flags & STAT_FLAG_FIRST) {
 		add_to_clist(clist,
 			pinfo->fd->num, rtpinfo->info_seq_num,
 			0,
 			0,
+			statinfo->bandwidth,
 			status,
 			rtpinfo->info_marker_set,
 			timeStr, pinfo->fd->pkt_len,
@@ -624,14 +815,14 @@
 	else {
 		add_to_clist(clist,
 			pinfo->fd->num, rtpinfo->info_seq_num,
-			statinfo->delay,
-			statinfo->jitter,
+			statinfo->delay*1000,
+			statinfo->jitter*1000,
+			statinfo->bandwidth,
 			status,
 			rtpinfo->info_marker_set,
 			timeStr, pinfo->fd->pkt_len,
 			&color);
 	}
-
 	return 0;
 }
 
@@ -769,6 +960,11 @@
 /* close the dialog window and remove the tap listener */
 static void on_destroy(GtkWidget *win _U_, user_data_t *user_data _U_)
 {
+	/* remove tap listener */
+	protect_thread_critical_region();
+	remove_tap_listener(user_data);
+	unprotect_thread_critical_region();
+
 	/* close and remove temporary files */
 	if (user_data->forward.saveinfo.fp != NULL)
 		fclose(user_data->forward.saveinfo.fp);
@@ -782,12 +978,19 @@
 	if (user_data->dlg.save_voice_as_w != NULL)
 		window_destroy(user_data->dlg.save_voice_as_w);
 
+	/* destroy graph window if open */
+	if (user_data->dlg.dialog_graph.window != NULL)
+		window_destroy(user_data->dlg.dialog_graph.window);
+
 #ifdef USE_CONVERSATION_GRAPH
 	/* destroy graph window if open */
 	if (user_data->dlg.graph_window != NULL)
 		window_destroy(user_data->dlg.graph_window);
 #endif
 
+	/* disable the "switch_page" signal in the dlg, otherwise will be called when the windows is destroy and cause an exeption using GTK1*/
+	gtk_signal_disconnect(GTK_OBJECT(user_data->dlg.notebook), user_data->dlg.notebook_signal_id);
+
 	g_free(user_data->dlg.col_arrows_fwd);
 	g_free(user_data->dlg.col_arrows_rev);
 	g_free(user_data);
@@ -862,7 +1065,6 @@
 		reactivate_window(user_data->dlg.graph_window);
 		return;
 	}
-		
 	list = g_list_append(list, &(user_data->series_fwd));
 	list = g_list_append(list, &(user_data->series_rev));
 
@@ -899,6 +1101,1034 @@
 }
 #endif /*USE_CONVERSATION_GRAPH*/
 
+/****************************************************************************/
+static void dialog_graph_set_title(user_data_t* user_data)
+{
+	char            *title;
+	if (!user_data->dlg.dialog_graph.window){
+		return;
+	}
+	title = g_strdup_printf("RTP Graph Analysis Forward: %s:%u to %s:%u   Reverse: %s:%u to %s:%u",
+			ip_to_str((ip_addr_p)&(user_data->ip_src_fwd)),
+			user_data->port_src_fwd,
+			ip_to_str((ip_addr_p)&(user_data->ip_dst_fwd)),
+			user_data->port_dst_fwd,
+			ip_to_str((ip_addr_p)&(user_data->ip_src_rev)),
+			user_data->port_src_rev,
+			ip_to_str((ip_addr_p)&(user_data->ip_dst_rev)),
+			user_data->port_dst_rev);
+
+	gtk_window_set_title(GTK_WINDOW(user_data->dlg.dialog_graph.window), title);
+	g_free(title);	
+
+}
+
+
+/****************************************************************************/
+static void dialog_graph_reset(user_data_t* user_data)
+{
+	int i, j;
+
+	user_data->dlg.dialog_graph.needs_redraw=TRUE;
+	for(i=0;i<MAX_GRAPHS;i++){
+                for(j=0;j<NUM_GRAPH_ITEMS;j++){
+                        dialog_graph_graph_item_t *dggi;
+                        dggi=&user_data->dlg.dialog_graph.graph[i].items[j];
+			dggi->value=0;
+			dggi->flags=0;
+                }
+        }
+	user_data->dlg.dialog_graph.last_interval=0xffffffff;
+	user_data->dlg.dialog_graph.max_interval=0;
+	user_data->dlg.dialog_graph.num_items=0;
+
+	/* create the color titles near the filter buttons */
+	for(i=0;i<MAX_GRAPHS;i++){
+		/* it is forward */ 
+		if (i<2){
+       			g_snprintf(user_data->dlg.dialog_graph.graph[i].title, 100, "%s: %s:%u to %s:%u (SSRC=%u)",
+			graph_descr[i],
+                	ip_to_str((ip_addr_p)&(user_data->ip_src_fwd)),
+                	user_data->port_src_fwd,
+                	ip_to_str((ip_addr_p)&(user_data->ip_dst_fwd)),
+                	user_data->port_dst_fwd,
+                	user_data->ssrc_fwd);
+		/* it is reverse */
+		} else {
+			g_snprintf(user_data->dlg.dialog_graph.graph[i].title, 100, "%s: %s:%u to %s:%u (SSRC=%u)",
+			graph_descr[i],
+                	ip_to_str((ip_addr_p)&(user_data->ip_src_rev)),
+                	user_data->port_src_rev,
+                	ip_to_str((ip_addr_p)&(user_data->ip_dst_rev)),
+                	user_data->port_dst_rev,
+                	user_data->ssrc_rev);
+		}
+	}
+
+	dialog_graph_set_title(user_data);	
+}
+
+/****************************************************************************/
+static guint32 get_it_value(dialog_graph_graph_t *dgg, int idx)
+{
+        dialog_graph_graph_item_t *it;
+
+        it=&dgg->items[idx];
+
+	return it->value;
+}
+
+/****************************************************************************/
+static void print_time_scale_string(char *buf, int buf_len, guint32 t)
+{
+        if(t>=10000000){
+                g_snprintf(buf, buf_len, "%ds",t/1000000);
+        } else if(t>=1000000){
+                g_snprintf(buf, buf_len, "%d.%03ds",t/1000000,(t%1000000)/1000);
+        } else if(t>=10000){
+                g_snprintf(buf, buf_len, "%dms",t/1000);
+        } else if(t>=1000){
+                g_snprintf(buf, buf_len, "%d.%03dms",t/1000,t%1000);
+        } else {
+                g_snprintf(buf, buf_len, "%dus",t);
+        }
+}
+
+/****************************************************************************/
+static void dialog_graph_draw(user_data_t* user_data)
+{
+        int i, lwidth;
+        guint32 last_interval, first_interval, interval_delta, delta_multiplier;
+        gint32 current_interval;
+        guint32 left_x_border;
+        guint32 right_x_border;
+        guint32 top_y_border;
+        guint32 bottom_y_border;
+#if GTK_MAJOR_VERSION < 2
+        GdkFont *font;
+#else
+        PangoLayout  *layout;
+#endif
+        guint32 label_width, label_height;
+        guint32 draw_width, draw_height;
+        char label_string[15];
+
+        /* new variables */
+        guint32 num_time_intervals;
+        guint32 max_value;              /* max value of seen data */
+        guint32 max_y;                  /* max value of the Y scale */
+
+#if GTK_MAJOR_VERSION <2
+        font = user_data->dlg.dialog_graph.draw_area->style->font;
+#endif
+        if(!user_data->dlg.dialog_graph.needs_redraw){
+                return;
+        }
+        user_data->dlg.dialog_graph.needs_redraw=FALSE;
+
+        /*
+         * Find the length of the intervals we have data for
+         * so we know how large arrays we need to malloc()
+         */
+        num_time_intervals=user_data->dlg.dialog_graph.num_items;
+        /* if there isnt anything to do, just return */
+        if(num_time_intervals==0){
+                return;
+        }
+        num_time_intervals+=1;
+        /* XXX move this check to _packet() */
+        if(num_time_intervals>NUM_GRAPH_ITEMS){
+                simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "RTP Graph error. There are too many entries, bailing out");
+                return;
+        }
+
+        /*
+         * find the max value so we can autoscale the y axis
+         */
+        max_value=0;
+        for(i=0;i<MAX_GRAPHS;i++){
+                int idx;
+
+                if(!user_data->dlg.dialog_graph.graph[i].display){
+                        continue;
+                }
+                for(idx=0;(guint32) (idx) < num_time_intervals;idx++){
+                        guint32 val;
+
+                        val=get_it_value(&user_data->dlg.dialog_graph.graph[i], idx);
+
+                        /* keep track of the max value we have encountered */
+                        if(val>max_value){
+                                max_value=val;
+                        }
+                }
+        }
+	
+        /*
+         * Clear out old plot
+         */
+        gdk_draw_rectangle(user_data->dlg.dialog_graph.pixmap,
+                           user_data->dlg.dialog_graph.draw_area->style->white_gc,
+                           TRUE,
+                           0, 0,
+                           user_data->dlg.dialog_graph.draw_area->allocation.width,
+                           user_data->dlg.dialog_graph.draw_area->allocation.height);
+
+
+        /*
+         * Calculate the y scale we should use
+         */
+        if(user_data->dlg.dialog_graph.max_y_units==AUTO_MAX_YSCALE){
+                max_y=yscale_max[MAX_YSCALE-1];
+                for(i=MAX_YSCALE-1;i>0;i--){
+                        if(max_value<yscale_max[i]){
+                                max_y=yscale_max[i];
+                        }
+                }
+        } else {
+                /* the user had specified an explicit y scale to use */
+                max_y=user_data->dlg.dialog_graph.max_y_units;
+        }
+
+        /*
+         * Calculate size of borders surrounding the plot
+         * The border on the right side needs to be adjusted depending
+         * on the width of the text labels. For simplicity we assume that the
+         * top y scale label will be the widest one
+         */
+         print_time_scale_string(label_string, 15, max_y);
+#if GTK_MAJOR_VERSION < 2
+        label_width=gdk_string_width(font, label_string);
+        label_height=gdk_string_height(font, label_string);
+#else
+        layout = gtk_widget_create_pango_layout(user_data->dlg.dialog_graph.draw_area, label_string);
+        pango_layout_get_pixel_size(layout, &label_width, &label_height);
+#endif
+        left_x_border=10;
+        right_x_border=label_width+20;
+        top_y_border=10;
+        bottom_y_border=label_height+20;
+
+
+        /*
+         * Calculate the size of the drawing area for the actual plot
+         */
+        draw_width=user_data->dlg.dialog_graph.pixmap_width-right_x_border-left_x_border;
+        draw_height=user_data->dlg.dialog_graph.pixmap_height-top_y_border-bottom_y_border;
+
+
+        /*
+         * Draw the y axis and labels
+         * (we always draw the y scale with 11 ticks along the axis)
+         */
+        gdk_draw_line(user_data->dlg.dialog_graph.pixmap, user_data->dlg.dialog_graph.draw_area->style->black_gc,
+                user_data->dlg.dialog_graph.pixmap_width-right_x_border+1,
+                top_y_border,
+                user_data->dlg.dialog_graph.pixmap_width-right_x_border+1,
+                user_data->dlg.dialog_graph.pixmap_height-bottom_y_border);
+        for(i=0;i<=10;i++){
+                int xwidth, lwidth;
+
+                xwidth=5;
+                if(!(i%5)){
+                        /* first, middle and last tick are slightly longer */
+                        xwidth=10;
+                }
+                /* draw the tick */
+                gdk_draw_line(user_data->dlg.dialog_graph.pixmap, user_data->dlg.dialog_graph.draw_area->style->black_gc,
+                        user_data->dlg.dialog_graph.pixmap_width-right_x_border+1,
+                        user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10,
+                        user_data->dlg.dialog_graph.pixmap_width-right_x_border+1+xwidth,
+                        user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10);
+                /* draw the labels */
+                if(i==0){
+                        print_time_scale_string(label_string, 15, (max_y*i/10));
+#if GTK_MAJOR_VERSION < 2
+                        lwidth=gdk_string_width(font, label_string);
+                        gdk_draw_string(user_data->dlg.dialog_graph.pixmap,
+                                        font,
+                                        user_data->dlg.dialog_graph.draw_area->style->black_gc,
+                                        user_data->dlg.dialog_graph.pixmap_width-right_x_border+15+label_width-lwidth,
+                                        user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10+label_height/2,
+                                        label_string);
+#else
+                        pango_layout_set_text(layout, label_string, -1);
+                        pango_layout_get_pixel_size(layout, &lwidth, NULL);
+                        gdk_draw_layout(user_data->dlg.dialog_graph.pixmap,
+                                        user_data->dlg.dialog_graph.draw_area->style->black_gc,
+                                        user_data->dlg.dialog_graph.pixmap_width-right_x_border+15+label_width-lwidth,
+                                        user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10-label_height/2,
+                                        layout);
+#endif
+                }
+                if(i==5){
+                        print_time_scale_string(label_string, 15, (max_y*i/10));
+#if GTK_MAJOR_VERSION < 2
+                        lwidth=gdk_string_width(font, label_string);
+                        gdk_draw_string(user_data->dlg.dialog_graph.pixmap,
+                                        font,
+                                        user_data->dlg.dialog_graph.draw_area->style->black_gc,
+                                        user_data->dlg.dialog_graph.pixmap_width-right_x_border+15+label_width-lwidth,
+                                        user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10+label_height/2,
+                                        label_string);
+#else
+                        pango_layout_set_text(layout, label_string, -1);
+                        pango_layout_get_pixel_size(layout, &lwidth, NULL);
+                        gdk_draw_layout(user_data->dlg.dialog_graph.pixmap,
+                                        user_data->dlg.dialog_graph.draw_area->style->black_gc,
+                                        user_data->dlg.dialog_graph.pixmap_width-right_x_border+15+label_width-lwidth,
+                                        user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10-label_height/2,
+                                        layout);
+#endif
+                }
+                if(i==10){
+                        print_time_scale_string(label_string, 15, (max_y*i/10));
+#if GTK_MAJOR_VERSION < 2
+                        lwidth=gdk_string_width(font, label_string);
+                        gdk_draw_string(user_data->dlg.dialog_graph.pixmap,
+                                        font,
+                                        user_data->dlg.dialog_graph.draw_area->style->black_gc,
+                                        user_data->dlg.dialog_graph.pixmap_width-right_x_border+15+label_width-lwidth,
+                                        user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10+label_height/2,
+                                        label_string);
+#else
+                        pango_layout_set_text(layout, label_string, -1);
+                        pango_layout_get_pixel_size(layout, &lwidth, NULL);
+                        gdk_draw_layout(user_data->dlg.dialog_graph.pixmap,
+                                        user_data->dlg.dialog_graph.draw_area->style->black_gc,
+                                        user_data->dlg.dialog_graph.pixmap_width-right_x_border+15+label_width-lwidth,
+                                        user_data->dlg.dialog_graph.pixmap_height-bottom_y_border-draw_height*i/10-label_height/2,
+                                        layout);
+#endif
+                }
+        }
+
+
+
+        /*
+         * if we have not specified the last_interval via the gui,
+         * then just pick the current end of the capture so that is scrolls
+         * nicely when doing live captures
+         */
+        if(user_data->dlg.dialog_graph.last_interval==0xffffffff){
+                last_interval=user_data->dlg.dialog_graph.max_interval;
+        } else {
+                last_interval=user_data->dlg.dialog_graph.last_interval;
+        }
+
+
+
+
+/*XXX*/
+        /* plot the x-scale */
+        gdk_draw_line(user_data->dlg.dialog_graph.pixmap, user_data->dlg.dialog_graph.draw_area->style->black_gc, left_x_border, user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+1, user_data->dlg.dialog_graph.pixmap_width-right_x_border+1, user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+1);
+
+        if((last_interval/user_data->dlg.dialog_graph.interval)>draw_width/user_data->dlg.dialog_graph.pixels_per_tick+1){
+                first_interval=(last_interval/user_data->dlg.dialog_graph.interval)-draw_width/user_data->dlg.dialog_graph.pixels_per_tick+1;
+                first_interval*=user_data->dlg.dialog_graph.interval;
+        } else {
+                first_interval=0;
+        }
+
+        interval_delta=1;
+        delta_multiplier=5;
+        while(interval_delta<((last_interval-first_interval)/10)){
+                interval_delta*=delta_multiplier;
+                if(delta_multiplier==5){
+                        delta_multiplier=2;
+                } else {
+                        delta_multiplier=5;
+                }
+        }
+
+        for(current_interval=last_interval;current_interval>(gint32)first_interval;current_interval=current_interval-user_data->dlg.dialog_graph.interval){
+                int x, xlen;
+
+                /* if pixels_per_tick is <5, only draw every 10 ticks */
+                if((user_data->dlg.dialog_graph.pixels_per_tick<10) && (current_interval%(10*user_data->dlg.dialog_graph.interval))){
+                        continue;
+                }
+
+                if(current_interval%interval_delta){
+                        xlen=5;
+                } else {
+                        xlen=17;
+                }
+
+                x=draw_width+left_x_border-((last_interval-current_interval)/user_data->dlg.dialog_graph.interval)*user_data->dlg.dialog_graph.pixels_per_tick;
+                gdk_draw_line(user_data->dlg.dialog_graph.pixmap, user_data->dlg.dialog_graph.draw_area->style->black_gc,
+                        x-1-user_data->dlg.dialog_graph.pixels_per_tick/2,
+                        user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+1,
+                        x-1-user_data->dlg.dialog_graph.pixels_per_tick/2,
+                        user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+xlen+1);
+
+                if(xlen==17){
+                        int lwidth;
+                        if(user_data->dlg.dialog_graph.interval>=1000){
+                                g_snprintf(label_string, 15, "%ds", current_interval/1000);
+                        } else if(user_data->dlg.dialog_graph.interval>=100){
+                                g_snprintf(label_string, 15, "%d.%1ds", current_interval/1000,(current_interval/100)%10)
+;
+                        } else if(user_data->dlg.dialog_graph.interval>=10){
+                                g_snprintf(label_string, 15, "%d.%2ds", current_interval/1000,(current_interval/10)%100)
+;
+                        } else {
+                                g_snprintf(label_string, 15, "%d.%3ds", current_interval/1000,current_interval%1000);
+                        }
+#if GTK_MAJOR_VERSION < 2
+                        lwidth=gdk_string_width(font, label_string);
+                        gdk_draw_string(user_data->dlg.dialog_graph.pixmap,
+                                        font,
+                                        user_data->dlg.dialog_graph.draw_area->style->black_gc,
+                                        x-1-user_data->dlg.dialog_graph.pixels_per_tick/2-lwidth/2,
+                                        user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+20+label_height,
+                                        label_string);
+#else
+                        pango_layout_set_text(layout, label_string, -1);
+                        pango_layout_get_pixel_size(layout, &lwidth, NULL);
+                        gdk_draw_layout(user_data->dlg.dialog_graph.pixmap,
+                                        user_data->dlg.dialog_graph.draw_area->style->black_gc,
+                                        x-1-user_data->dlg.dialog_graph.pixels_per_tick/2-lwidth/2,
+                                        user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+20,
+                                        layout);
+#endif
+                }
+
+        }
+
+
+
+
+
+
+        /*
+         * Draw "x" for Sequence Errors and "m" for Marks
+         */
+	/* Draw the labels Fwd and Rev */
+	strcpy(label_string,"<-Fwd");
+#if GTK_MAJOR_VERSION < 2
+	lwidth=gdk_string_width(font, label_string);
+	gdk_draw_string(user_data->dlg.dialog_graph.pixmap,
+		font,
+		user_data->dlg.dialog_graph.draw_area->style->black_gc,
+		user_data->dlg.dialog_graph.pixmap_width-right_x_border+33-lwidth,
+		user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+3+label_height,
+		label_string);
+#else
+	pango_layout_set_text(layout, label_string, -1);
+	pango_layout_get_pixel_size(layout, &lwidth, NULL);
+	gdk_draw_layout(user_data->dlg.dialog_graph.pixmap,
+		user_data->dlg.dialog_graph.draw_area->style->black_gc,
+		user_data->dlg.dialog_graph.pixmap_width-right_x_border+33-lwidth,
+		user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+3,
+		layout);
+#endif
+        strcpy(label_string,"<-Rev");
+#if GTK_MAJOR_VERSION < 2
+        lwidth=gdk_string_width(font, label_string);
+        gdk_draw_string(user_data->dlg.dialog_graph.pixmap,
+                font,
+                user_data->dlg.dialog_graph.draw_area->style->black_gc,
+                user_data->dlg.dialog_graph.pixmap_width-right_x_border+33-lwidth,
+                user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+3+9+label_height,
+                label_string);
+#else
+        pango_layout_set_text(layout, label_string, -1);
+        pango_layout_get_pixel_size(layout, &lwidth, NULL);
+        gdk_draw_layout(user_data->dlg.dialog_graph.pixmap,
+                user_data->dlg.dialog_graph.draw_area->style->black_gc,
+                user_data->dlg.dialog_graph.pixmap_width-right_x_border+33-lwidth,
+                user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+3+9,
+                layout);
+#endif
+
+	/* Draw the marks */	
+	for(i=MAX_GRAPHS-1;i>=0;i--){
+		guint32 interval;
+		guint32 x_pos, prev_x_pos;
+
+		/* XXX for fwd or rev, the flag info for jitter and diff is the same, and here I loop twice */
+		if (!user_data->dlg.dialog_graph.graph[i].display){
+			continue;
+		}
+		/* initialize prev x/y to the low left corner of the graph */
+		prev_x_pos=draw_width-1-user_data->dlg.dialog_graph.pixels_per_tick*((last_interval-first_interval)/user_data->dlg.dialog_graph.interval+1)+left_x_border;
+
+		for(interval=first_interval+user_data->dlg.dialog_graph.interval;interval<=last_interval;interval+=user_data->dlg.dialog_graph.interval){
+			x_pos=draw_width-1-user_data->dlg.dialog_graph.pixels_per_tick*((last_interval-interval)/user_data->dlg.dialog_graph.interval+1)+left_x_border;
+
+			if(user_data->dlg.dialog_graph.graph[i].items[interval/user_data->dlg.dialog_graph.interval].flags & (STAT_FLAG_WRONG_SEQ|STAT_FLAG_MARKER)){
+				int lwidth;
+				if (user_data->dlg.dialog_graph.graph[i].items[interval/user_data->dlg.dialog_graph.interval].flags & STAT_FLAG_WRONG_SEQ){
+					strcpy(label_string,"x");
+				} else {
+				        strcpy(label_string,"m");
+				}
+					
+#if GTK_MAJOR_VERSION < 2
+                                lwidth=gdk_string_width(font, label_string);
+                                gdk_draw_string(user_data->dlg.dialog_graph.pixmap,
+                                        font,
+                                        user_data->dlg.dialog_graph.draw_area->style->black_gc,
+                                        x_pos-1-lwidth/2,
+                                        user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+3+7*(i/2)+label_height,
+                                        label_string);
+#else				
+                           	pango_layout_set_text(layout, label_string, -1);
+                                pango_layout_get_pixel_size(layout, &lwidth, NULL);
+                                gdk_draw_layout(user_data->dlg.dialog_graph.pixmap,
+                                        user_data->dlg.dialog_graph.draw_area->style->black_gc,
+                                        x_pos-1-lwidth/2,
+                                        user_data->dlg.dialog_graph.pixmap_height-bottom_y_border+3+7*(i/2),
+                                        layout);
+#endif
+                        }
+
+                        prev_x_pos=x_pos;
+                }
+        }
+
+#if GTK_MAJOR_VERSION >= 2
+        g_object_unref(G_OBJECT(layout));
+#endif
+
+
+        /*
+         * Loop over all graphs and draw them
+         */
+	for(i=MAX_GRAPHS-1;i>=0;i--){
+		guint32 interval;
+		guint32 x_pos, y_pos, prev_x_pos, prev_y_pos;
+	        if (!user_data->dlg.dialog_graph.graph[i].display){
+                        continue;
+                }	
+		/* initialize prev x/y to the low left corner of the graph */
+		prev_x_pos=draw_width-1-user_data->dlg.dialog_graph.pixels_per_tick*((last_interval-first_interval)/user_data->dlg.dialog_graph.interval+1)+left_x_border;
+		prev_y_pos=draw_height-1+top_y_border;
+		
+		for(interval=first_interval+user_data->dlg.dialog_graph.interval;interval<=last_interval;interval+=user_data->dlg.dialog_graph.interval){
+			guint32 val;
+			x_pos=draw_width-1-user_data->dlg.dialog_graph.pixels_per_tick*((last_interval-interval)/user_data->dlg.dialog_graph.interval+1)+left_x_border;
+			val=get_it_value(&user_data->dlg.dialog_graph.graph[i], interval/user_data->dlg.dialog_graph.interval);
+			if(val>max_y){
+                                y_pos=0;
+                        } else {
+                                y_pos=draw_height-1-(val*draw_height)/max_y+top_y_border;
+                        }
+
+                        /* dont need to draw anything if the segment
+                         * is entirely above the top of the graph
+                         */
+                        if( (prev_y_pos==0) && (y_pos==0) ){
+                                prev_y_pos=y_pos;
+                                prev_x_pos=x_pos;
+                                continue;
+                        }
+		
+                        if(val){
+	                        gdk_draw_line(user_data->dlg.dialog_graph.pixmap, user_data->dlg.dialog_graph.graph[i].gc,
+                                x_pos, draw_height-1+top_y_border,
+                                x_pos, y_pos);
+        		}
+
+                        prev_y_pos=y_pos;
+                        prev_x_pos=x_pos;
+                }
+        }
+
+
+        gdk_draw_pixmap(user_data->dlg.dialog_graph.draw_area->window,
+                        user_data->dlg.dialog_graph.draw_area->style->fg_gc[GTK_WIDGET_STATE(user_data->dlg.dialog_graph.draw_area)],
+                        user_data->dlg.dialog_graph.pixmap,
+                        0, 0,
+                        0, 0,
+                        user_data->dlg.dialog_graph.pixmap_width, user_data->dlg.dialog_graph.pixmap_height);
+
+
+        /* update the scrollbar */
+        user_data->dlg.dialog_graph.scrollbar_adjustment->upper=(gfloat) user_data->dlg.dialog_graph.max_interval;
+        user_data->dlg.dialog_graph.scrollbar_adjustment->step_increment=(gfloat) ((last_interval-first_interval)/10);
+        user_data->dlg.dialog_graph.scrollbar_adjustment->page_increment=(gfloat) (last_interval-first_interval);
+        if((last_interval-first_interval)*100 < user_data->dlg.dialog_graph.max_interval){
+                user_data->dlg.dialog_graph.scrollbar_adjustment->page_size=(gfloat) (user_data->dlg.dialog_graph.max_interval/100);
+        } else {
+                user_data->dlg.dialog_graph.scrollbar_adjustment->page_size=(gfloat) (last_interval-first_interval);
+        }
+        user_data->dlg.dialog_graph.scrollbar_adjustment->value=last_interval-user_data->dlg.dialog_graph.scrollbar_adjustment->page_size;
+        gtk_adjustment_changed(user_data->dlg.dialog_graph.scrollbar_adjustment);
+        gtk_adjustment_value_changed(user_data->dlg.dialog_graph.scrollbar_adjustment);
+
+}
+
+/****************************************************************************/
+static void dialog_graph_redraw(user_data_t* user_data)
+{
+        user_data->dlg.dialog_graph.needs_redraw=TRUE;
+        dialog_graph_draw(user_data); 
+}
+
+/****************************************************************************/
+static gint quit(GtkWidget *widget, GdkEventExpose *event _U_)
+{
+        user_data_t *user_data;
+
+        user_data=(user_data_t *)OBJECT_GET_DATA(widget, "user_data_t");
+
+	user_data->dlg.dialog_graph.window = NULL;
+        return TRUE;
+}
+
+/****************************************************************************/
+static gint expose_event(GtkWidget *widget, GdkEventExpose *event)
+{
+	user_data_t *user_data;
+
+	user_data=(user_data_t *)OBJECT_GET_DATA(widget, "user_data_t");
+        if(!user_data){
+                exit(10);
+        }
+
+
+        gdk_draw_pixmap(widget->window,
+                        widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
+                        user_data->dlg.dialog_graph.pixmap,
+                        event->area.x, event->area.y,
+                        event->area.x, event->area.y,
+                        event->area.width, event->area.height);
+
+        return FALSE;
+}
+
+/****************************************************************************/
+static gint configure_event(GtkWidget *widget, GdkEventConfigure *event _U_)
+{
+        user_data_t *user_data;
+	int i;
+
+        user_data=(user_data_t *)OBJECT_GET_DATA(widget, "user_data_t");
+
+        if(!user_data){
+                exit(10);
+        }
+
+        if(user_data->dlg.dialog_graph.pixmap){
+                gdk_pixmap_unref(user_data->dlg.dialog_graph.pixmap);
+                user_data->dlg.dialog_graph.pixmap=NULL;
+        }
+
+        user_data->dlg.dialog_graph.pixmap=gdk_pixmap_new(widget->window,
+                        widget->allocation.width,
+                        widget->allocation.height,
+                        -1);
+        user_data->dlg.dialog_graph.pixmap_width=widget->allocation.width;
+        user_data->dlg.dialog_graph.pixmap_height=widget->allocation.height;
+
+        gdk_draw_rectangle(user_data->dlg.dialog_graph.pixmap,
+                        widget->style->white_gc,
+                        TRUE,
+                        0, 0,
+                        widget->allocation.width,
+                        widget->allocation.height);
+
+        /* set up the colors and the GC structs for this pixmap */
+	for(i=0;i<MAX_GRAPHS;i++){
+		user_data->dlg.dialog_graph.graph[i].gc=gdk_gc_new(user_data->dlg.dialog_graph.pixmap);
+#if GTK_MAJOR_VERSION < 2
+                colormap = gtk_widget_get_colormap (widget);
+                if (!gdk_color_alloc (colormap, &user_data->dlg.dialog_graph.graph[i].color)){
+                        g_warning ("Couldn't allocate color");
+                }
+
+                gdk_gc_set_foreground(user_data->dlg.dialog_graph.graph[i].gc, &user_data->dlg.dialog_graph.graph[i].color);
+#else
+                gdk_gc_set_rgb_fg_color(user_data->dlg.dialog_graph.graph[i].gc, &user_data->dlg.dialog_graph.graph[i].color);
+#endif
+	}
+
+	dialog_graph_redraw(user_data);
+        return TRUE;
+}
+
+/****************************************************************************/
+static gint scrollbar_changed(GtkWidget *widget _U_, gpointer data)
+{
+        user_data_t *user_data=(user_data_t *)data;
+        guint32 mi;
+
+        mi=(guint32) (user_data->dlg.dialog_graph.scrollbar_adjustment->value+user_data->dlg.dialog_graph.scrollbar_adjustment->page_size);
+        if(user_data->dlg.dialog_graph.last_interval==mi){
+                return TRUE;
+        }
+        if( (user_data->dlg.dialog_graph.last_interval==0xffffffff)
+        &&  (mi==user_data->dlg.dialog_graph.max_interval) ){
+                return TRUE;
+        }
+
+        user_data->dlg.dialog_graph.last_interval=(mi/user_data->dlg.dialog_graph.interval)*user_data->dlg.dialog_graph.interval;
+
+	dialog_graph_redraw(user_data);
+        return TRUE;
+}
+
+/****************************************************************************/
+static void create_draw_area(user_data_t* user_data, GtkWidget *box)
+{
+        user_data->dlg.dialog_graph.draw_area=gtk_drawing_area_new();
+        SIGNAL_CONNECT(user_data->dlg.dialog_graph.draw_area, "destroy", quit, user_data);
+        OBJECT_SET_DATA(user_data->dlg.dialog_graph.draw_area, "user_data_t", user_data);
+
+        WIDGET_SET_SIZE(user_data->dlg.dialog_graph.draw_area, user_data->dlg.dialog_graph.pixmap_width, user_data->dlg.dialog_graph.pixmap_height);
+
+        /* signals needed to handle backing pixmap */
+        SIGNAL_CONNECT(user_data->dlg.dialog_graph.draw_area, "expose_event", expose_event, NULL);
+        SIGNAL_CONNECT(user_data->dlg.dialog_graph.draw_area, "configure_event", configure_event, user_data);
+
+        gtk_widget_show(user_data->dlg.dialog_graph.draw_area);
+        gtk_box_pack_start(GTK_BOX(box), user_data->dlg.dialog_graph.draw_area, TRUE, TRUE, 0);
+
+        /* create the associated scrollbar */
+        user_data->dlg.dialog_graph.scrollbar_adjustment=(GtkAdjustment *)gtk_adjustment_new(0,0,0,0,0,0);
+        user_data->dlg.dialog_graph.scrollbar=gtk_hscrollbar_new(user_data->dlg.dialog_graph.scrollbar_adjustment);
+        gtk_widget_show(user_data->dlg.dialog_graph.scrollbar);
+        gtk_box_pack_start(GTK_BOX(box), user_data->dlg.dialog_graph.scrollbar, FALSE, FALSE, 0);
+        SIGNAL_CONNECT(user_data->dlg.dialog_graph.scrollbar_adjustment, "value_changed", scrollbar_changed, user_data);
+}
+
+/****************************************************************************/
+static void disable_graph(dialog_graph_graph_t *dgg)
+{
+        if (dgg->display) {
+                dgg->display=FALSE;
+                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dgg->display_button),
+                    FALSE);
+        }
+}
+
+/****************************************************************************/
+static gint filter_callback(GtkWidget *widget _U_, dialog_graph_graph_t *dgg)
+{
+        /* this graph is not active, just update display and redraw */
+        if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dgg->display_button))){
+                disable_graph(dgg); 
+                dialog_graph_redraw(dgg->ud);
+		return 0;
+        }
+
+	enable_graph(dgg);
+        retap_packets(&cfile);
+        dialog_graph_redraw(dgg->ud);
+
+        return 0;
+}
+
+/****************************************************************************/
+static void create_filter_box(dialog_graph_graph_t *dgg, GtkWidget *box, int num)
+{
+        GtkWidget *hbox;
+        GtkWidget *label;
+        char str[256];
+
+        hbox=gtk_hbox_new(FALSE, 3);
+        gtk_container_add(GTK_CONTAINER(box), hbox);
+        gtk_box_set_child_packing(GTK_BOX(box), hbox, FALSE, FALSE, 0, GTK_PACK_START);
+        gtk_widget_show(hbox);
+
+	g_snprintf(str, 256, "Graph %d", num);
+	dgg->display_button=gtk_toggle_button_new_with_label(str);
+        gtk_box_pack_start(GTK_BOX(hbox), dgg->display_button, FALSE, FALSE, 0);
+        gtk_widget_show(dgg->display_button);
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dgg->display_button), dgg->display);
+        SIGNAL_CONNECT(dgg->display_button, "toggled", filter_callback, dgg);
+
+	label=gtk_label_new(dgg->title);
+        gtk_widget_show(label);
+        gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+#if GTK_MAJOR_VERSION < 2
+    /* setting the color of the display button doesn't work */
+        rc_style = gtk_rc_style_new ();
+        rc_style->fg[GTK_STATE_NORMAL] = dgg->color;
+        rc_style->color_flags[GTK_STATE_NORMAL] |= GTK_RC_FG;
+        rc_style->fg[GTK_STATE_ACTIVE] = dgg->color;
+        rc_style->color_flags[GTK_STATE_ACTIVE] |= GTK_RC_FG;
+        rc_style->fg[GTK_STATE_PRELIGHT] = dgg->color;
+        rc_style->color_flags[GTK_STATE_PRELIGHT] |= GTK_RC_FG;
+        rc_style->fg[GTK_STATE_SELECTED] = dgg->color;
+        rc_style->color_flags[GTK_STATE_SELECTED] |= GTK_RC_FG;
+        rc_style->fg[GTK_STATE_INSENSITIVE] = dgg->color;
+        rc_style->color_flags[GTK_STATE_INSENSITIVE] |= GTK_RC_FG;
+        gtk_widget_modify_style (label, rc_style);
+        gtk_rc_style_unref (rc_style);
+#else
+        gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &dgg->color);
+        gtk_widget_modify_fg(label, GTK_STATE_ACTIVE, &dgg->color);
+        gtk_widget_modify_fg(label, GTK_STATE_PRELIGHT, &dgg->color);
+        gtk_widget_modify_fg(label, GTK_STATE_SELECTED, &dgg->color);
+        gtk_widget_modify_fg(label, GTK_STATE_INSENSITIVE, &dgg->color);
+#endif
+
+        return;
+}
+
+/****************************************************************************/
+static void create_filter_area(user_data_t* user_data, GtkWidget *box)
+{
+        GtkWidget *frame;
+        GtkWidget *vbox;
+	int i;
+	GtkWidget *label;
+
+    	frame=gtk_frame_new("Graphs");
+        gtk_container_add(GTK_CONTAINER(box), frame);
+        gtk_widget_show(frame);
+
+        vbox=gtk_vbox_new(FALSE, 1);
+        gtk_container_add(GTK_CONTAINER(frame), vbox);
+    	gtk_container_border_width(GTK_CONTAINER(vbox), 3);
+        gtk_box_set_child_packing(GTK_BOX(box), vbox, FALSE, FALSE, 0, GTK_PACK_START);
+        gtk_widget_show(vbox);
+
+	for(i=0;i<MAX_GRAPHS;i++){
+		create_filter_box(&user_data->dlg.dialog_graph.graph[i], vbox, i+1);
+	}
+
+	label=gtk_label_new("Label:    x = Wrong Seq. number      m = Mark set");
+	gtk_widget_show(label);
+	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+
+        return;
+}
+
+/****************************************************************************/
+static void yscale_select(GtkWidget *item, gpointer key)
+{
+        int val;
+	user_data_t *user_data;
+        
+        user_data=(user_data_t *)key;
+        val=(int)OBJECT_GET_DATA(item, "yscale_max");
+
+        user_data->dlg.dialog_graph.max_y_units=val;
+        dialog_graph_redraw(user_data);
+}
+
+/****************************************************************************/
+static void pixels_per_tick_select(GtkWidget *item, gpointer key)
+{
+        int val;
+        user_data_t *user_data;
+
+        user_data=(user_data_t *)key;
+        val=(int)OBJECT_GET_DATA(item, "pixels_per_tick");
+        user_data->dlg.dialog_graph.pixels_per_tick=val;
+        dialog_graph_redraw(user_data);
+}
+
+/****************************************************************************/
+static void tick_interval_select(GtkWidget *item, gpointer key)
+{
+        int val;
+        user_data_t *user_data;
+
+        user_data=(user_data_t *)key;
+        val=(int)OBJECT_GET_DATA(item, "tick_interval");
+
+        user_data->dlg.dialog_graph.interval=val;
+        retap_packets(&cfile);
+        dialog_graph_redraw(user_data);
+}
+
+/****************************************************************************/
+static void create_yscale_max_menu_items(user_data_t* user_data, GtkWidget *menu)
+{
+        char str[15];
+        GtkWidget *menu_item;
+        int i;
+
+        for(i=0;i<MAX_YSCALE;i++){
+                if(yscale_max[i]==AUTO_MAX_YSCALE){
+                        strcpy(str,"Auto");
+                } else {
+                        g_snprintf(str, 15, "%d ms", yscale_max[i]/1000);
+                }
+                menu_item=gtk_menu_item_new_with_label(str);
+                OBJECT_SET_DATA(menu_item, "yscale_max", yscale_max[i]);
+                SIGNAL_CONNECT(menu_item, "activate", yscale_select, user_data);
+                gtk_widget_show(menu_item);
+                gtk_menu_append(GTK_MENU(menu), menu_item);
+        }
+        return;
+}
+
+/****************************************************************************/
+static void create_pixels_per_tick_menu_items(user_data_t* user_data, GtkWidget *menu)
+{
+        char str[5];
+        GtkWidget *menu_item;
+        int i;
+
+        for(i=0;i<MAX_PIXELS_PER_TICK;i++){
+                g_snprintf(str, 5, "%d", pixels_per_tick[i]);
+                menu_item=gtk_menu_item_new_with_label(str);
+
+                OBJECT_SET_DATA(menu_item, "pixels_per_tick",
+                                pixels_per_tick[i]);
+                SIGNAL_CONNECT(menu_item, "activate", pixels_per_tick_select, user_data);
+                gtk_widget_show(menu_item);
+                gtk_menu_append(GTK_MENU(menu), menu_item);
+        }
+        gtk_menu_set_active(GTK_MENU(menu), DEFAULT_PIXELS_PER_TICK);
+        return;
+}
+
+
+/****************************************************************************/
+static void create_tick_interval_menu_items(user_data_t* user_data, GtkWidget *menu)
+{
+        char str[15];
+        GtkWidget *menu_item;
+        int i;
+
+        for(i=0;i<MAX_TICK_VALUES;i++){
+                if(tick_interval_values[i]>=1000){
+                        g_snprintf(str, 15, "%d sec", tick_interval_values[i]/1000);
+                } else if(tick_interval_values[i]>=100){
+                        g_snprintf(str, 15, "0.%1d sec", (tick_interval_values[i]/100)%10);
+                } else if(tick_interval_values[i]>=10){
+                        g_snprintf(str, 15, "0.%02d sec", (tick_interval_values[i]/10)%10);
+                } else {
+                        g_snprintf(str, 15, "0.%03d sec", (tick_interval_values[i])%10);
+                }
+
+                menu_item=gtk_menu_item_new_with_label(str);
+                OBJECT_SET_DATA(menu_item, "tick_interval",
+                                tick_interval_values[i]);
+                SIGNAL_CONNECT(menu_item, "activate", tick_interval_select, (gpointer)user_data);
+                gtk_widget_show(menu_item);
+                gtk_menu_append(GTK_MENU(menu), menu_item);
+        }
+        gtk_menu_set_active(GTK_MENU(menu), DEFAULT_TICK_VALUE);
+        return;
+}
+
+/****************************************************************************/
+static void create_ctrl_menu(user_data_t* user_data, GtkWidget *box, char *name, void (*func)(user_data_t* user_data, GtkWidget *menu))
+{
+        GtkWidget *hbox;
+        GtkWidget *label;
+        GtkWidget *option_menu;
+        GtkWidget *menu;
+
+        hbox=gtk_hbox_new(FALSE, 0);
+        gtk_container_add(GTK_CONTAINER(box), hbox);
+        gtk_box_set_child_packing(GTK_BOX(box), hbox, FALSE, FALSE, 0, GTK_PACK_START);
+        gtk_widget_show(hbox);
+
+        label=gtk_label_new(name);
+        gtk_widget_show(label);
+        gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+        option_menu=gtk_option_menu_new();
+        menu=gtk_menu_new();
+        (*func)(user_data, menu);
+        gtk_option_menu_set_menu(GTK_OPTION_MENU(option_menu), menu);
+        gtk_box_pack_end(GTK_BOX(hbox), option_menu, FALSE, FALSE, 0);
+        gtk_widget_show(option_menu);
+}
+
+/****************************************************************************/
+static void create_ctrl_area(user_data_t* user_data, GtkWidget *box)
+{
+	GtkWidget *frame_vbox;
+    	GtkWidget *frame;
+        GtkWidget *vbox;
+
+        frame_vbox=gtk_vbox_new(FALSE, 0);
+        gtk_container_add(GTK_CONTAINER(box), frame_vbox);
+        gtk_widget_show(frame_vbox);
+
+	frame = gtk_frame_new("X Axis");
+        gtk_container_add(GTK_CONTAINER(frame_vbox), frame);
+        gtk_widget_show(frame);
+
+        vbox=gtk_vbox_new(FALSE, 0);
+        gtk_container_add(GTK_CONTAINER(frame), vbox);
+	gtk_container_border_width(GTK_CONTAINER(vbox), 3);
+        gtk_box_set_child_packing(GTK_BOX(box), vbox, FALSE, FALSE, 0, GTK_PACK_END);
+        gtk_widget_show(vbox);
+
+        create_ctrl_menu(user_data, vbox, "Tick interval:", create_tick_interval_menu_items);
+        create_ctrl_menu(user_data, vbox, "Pixels per tick:", create_pixels_per_tick_menu_items);
+
+    	frame = gtk_frame_new("Y Axis");
+        gtk_container_add(GTK_CONTAINER(frame_vbox), frame);
+        gtk_widget_show(frame);
+
+        vbox=gtk_vbox_new(FALSE, 0);
+        gtk_container_add(GTK_CONTAINER(frame), vbox);
+    	gtk_container_border_width(GTK_CONTAINER(vbox), 3);
+        gtk_box_set_child_packing(GTK_BOX(box), vbox, FALSE, FALSE, 0, GTK_PACK_END);
+        gtk_widget_show(vbox);
+
+        create_ctrl_menu(user_data, vbox, "Scale:", create_yscale_max_menu_items);
+
+        return;
+}
+
+/****************************************************************************/
+static void dialog_graph_init_window(user_data_t* user_data)
+{
+        GtkWidget *vbox;
+        GtkWidget *hbox;
+    	GtkWidget *bt_close;
+
+        /* create the main window */
+        user_data->dlg.dialog_graph.window=window_new(GTK_WINDOW_TOPLEVEL, "I/O Graphs");
+
+        vbox=gtk_vbox_new(FALSE, 0);
+        gtk_container_add(GTK_CONTAINER(user_data->dlg.dialog_graph.window), vbox);
+        gtk_widget_show(vbox);
+
+        create_draw_area(user_data, vbox);
+
+        hbox=gtk_hbox_new(FALSE, 3);
+        gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
+    	gtk_container_border_width(GTK_CONTAINER(hbox), 3);
+        gtk_box_set_child_packing(GTK_BOX(vbox), hbox, FALSE, FALSE, 0, GTK_PACK_START);
+        gtk_widget_show(hbox);
+
+        create_filter_area(user_data, hbox);
+        create_ctrl_area(user_data, hbox);
+
+        dialog_graph_set_title(user_data);
+
+    hbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL);
+        gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+    gtk_widget_show(hbox);
+
+    bt_close = OBJECT_GET_DATA(hbox, GTK_STOCK_CLOSE);
+    window_set_cancel_button(user_data->dlg.dialog_graph.window, bt_close, window_cancel_button_cb);
+
+    SIGNAL_CONNECT(user_data->dlg.dialog_graph.window, "delete_event", window_delete_event_cb, NULL);
+
+    gtk_widget_show(user_data->dlg.dialog_graph.window);
+    window_present(user_data->dlg.dialog_graph.window);
+
+}
+
+
+/****************************************************************************/
+static void on_graph_bt_clicked(GtkWidget *bt _U_, user_data_t *user_data _U_)
+{
+        if (user_data->dlg.dialog_graph.window != NULL) {
+                /* There's already a graph window; reactivate it. */
+                reactivate_window(user_data->dlg.dialog_graph.window);
+                return;
+        }
+
+	dialog_graph_init_window(user_data);	
+
+}
 
 /****************************************************************************/
 static void on_goto_bt_clicked(GtkWidget *bt _U_, user_data_t *user_data _U_)
@@ -923,10 +2153,6 @@
 	dfilter_t *sfcode;
 	GString *error_string;
 
-	/* clear the dialog box clists */
-	gtk_clist_clear(GTK_CLIST(user_data->dlg.clist_fwd));
-	gtk_clist_clear(GTK_CLIST(user_data->dlg.clist_rev));
-
 	/* try to compile the filter. */
 	strcpy(filter_text,"rtp && ip");
 	if (!dfilter_compile(filter_text, &sfcode)) {
@@ -945,6 +2171,10 @@
 		ip_to_str((ip_addr_p)&(user_data->ip_dst_rev)),
 		user_data->port_dst_rev
 		);
+	/* remove tap listener */
+	protect_thread_critical_region();
+	remove_tap_listener(user_data);
+	unprotect_thread_critical_region();
 
 	/* register tap listener */
 	error_string = register_tap_listener("rtp", user_data, filter_text,
@@ -958,11 +2188,6 @@
 	/* retap all packets */
 	retap_packets(&cfile);
 
-	/* remove tap listener again */
-	protect_thread_critical_region();
-	remove_tap_listener(user_data);
-	unprotect_thread_critical_region();
-
 	/* draw statistics info */
 	draw_stat(user_data);
 
@@ -982,7 +2207,7 @@
 	clist = user_data->dlg.selected_clist;
 	row = user_data->dlg.selected_row + 1;
 
-	while (gtk_clist_get_text(clist,row,5,&text)) {
+	while (gtk_clist_get_text(clist,row,6,&text)) {
 		if (strcmp(text, OK_TEXT) != 0) {
 			gtk_clist_select_row(clist, row, 0);
 			gtk_clist_moveto(clist, row, 0, 0.5, 0);
@@ -993,7 +2218,7 @@
 
 	/* wrap around */
 	row = 0;
-	while (gtk_clist_get_text(clist,row,5,&text) && row<user_data->dlg.selected_row) {
+	while (gtk_clist_get_text(clist,row,6,&text) && row<user_data->dlg.selected_row) {
 		if (strcmp(text, OK_TEXT) != 0) {
 			gtk_clist_select_row(clist, row, 0);
 			gtk_clist_moveto(clist, row, 0, 0.5, 0);
@@ -1048,7 +2273,7 @@
 			}
 		}
 		
-		for(j = 0; j < 8; j++) {
+		for(j = 0; j < NUM_COLS; j++) {
 			if (j == 0) {
 				fprintf(fp,"%s",titles[j]);
 			} else {
@@ -1105,7 +2330,7 @@
 				return;
 			}
 		}
-		for(j = 0; j < 8; j++) {
+		for(j = 0; j < NUM_COLS; j++) {
 			if (j == 0) {
 				fprintf(fp,"%s",titles[j]);
 			} else {
@@ -1708,22 +2933,33 @@
 		- user_data->reversed.statinfo.start_seq_nr + 1;
 	gint32 f_lost = f_expected - user_data->forward.statinfo.total_nr;
 	gint32 r_lost = r_expected - user_data->reversed.statinfo.total_nr;
-
+	double f_perc, r_perc;
+	if (f_expected){
+		f_perc = (double)(f_lost*100)/(double)f_expected;
+	} else {
+		f_perc = 0;
+	}
+        if (r_expected){
+                r_perc = (double)(r_lost*100)/(double)r_expected;
+        } else {
+                r_perc = 0;
+        } 
+		
 	g_snprintf(label_max, 199, "Max delay = %f sec at packet no. %u \n"
-		"Total RTP packets = %u   (expected %u)   Lost RTP packets = %d"
+		"Total RTP packets = %u   (expected %u)   Lost RTP packets = %d (%.2f%%)"
 		"   Sequence errors = %u",
 		user_data->forward.statinfo.max_delay, user_data->forward.statinfo.max_nr,
 		user_data->forward.statinfo.total_nr,
-		f_expected, f_lost, user_data->forward.statinfo.sequence);
+		f_expected, f_lost, f_perc, user_data->forward.statinfo.sequence);
 
 	gtk_label_set_text(GTK_LABEL(user_data->dlg.label_stats_fwd), label_max);
 
 	g_snprintf(label_max, 199, "Max delay = %f sec at packet no. %u \n"
-		"Total RTP packets = %u   (expected %u)   Lost RTP packets = %d"
+		"Total RTP packets = %u   (expected %u)   Lost RTP packets = %d (%.2f%%)"
 		"   Sequence errors = %u",
 		user_data->reversed.statinfo.max_delay, user_data->reversed.statinfo.max_nr,
 		user_data->reversed.statinfo.total_nr,
-		r_expected, r_lost, user_data->reversed.statinfo.sequence);
+		r_expected, r_lost, r_perc, user_data->reversed.statinfo.sequence);
 
 	gtk_label_set_text(GTK_LABEL(user_data->dlg.label_stats_rev), label_max);
 
@@ -1731,17 +2967,16 @@
 }
 
 
-#define NUM_COLS 8
 
 /****************************************************************************/
 /* append a line to clist */
 static void add_to_clist(GtkCList *clist, guint32 number, guint16 seq_num,
-                         double delay, double jitter, gchar *status, gboolean marker,
+                         double delay, double jitter, double bandwidth, gchar *status, gboolean marker,
                          gchar *timeStr, guint32 pkt_len, GdkColor *color)
 {
 	guint added_row;
-	gchar *data[8];
-	gchar field[8][32];
+	gchar *data[9];
+	gchar field[9][32];
 
 	data[0]=&field[0][0];
 	data[1]=&field[1][0];
@@ -1751,16 +2986,17 @@
 	data[5]=&field[5][0];
 	data[6]=&field[6][0];
 	data[7]=&field[7][0];
+	data[8]=&field[8][0];
 
 	g_snprintf(field[0], 20, "%u", number);
 	g_snprintf(field[1], 20, "%u", seq_num);
-	g_snprintf(field[2], 20, "%f", delay);
-	g_snprintf(field[3], 20, "%f", jitter);
-	g_snprintf(field[4], 20, "%s", marker? "SET" : "");
-	g_snprintf(field[5], 40, "%s", status);
-	g_snprintf(field[6], 32, "%s", timeStr);
-	g_snprintf(field[7], 20, "%u", pkt_len);
-
+	g_snprintf(field[2], 20, "%.2f", delay);
+	g_snprintf(field[3], 20, "%.2f", jitter);
+	g_snprintf(field[4], 20, "%.2f", bandwidth);
+	g_snprintf(field[5], 20, "%s", marker? "SET" : "");
+	g_snprintf(field[6], 40, "%s", status);
+	g_snprintf(field[7], 32, "%s", timeStr);
+	g_snprintf(field[8], 20, "%u", pkt_len);
 	added_row = gtk_clist_append(GTK_CLIST(clist), data);
 	gtk_clist_set_row_data(GTK_CLIST(clist), added_row, GUINT_TO_POINTER(number));
 	gtk_clist_set_background(GTK_CLIST(clist), added_row, color);
@@ -1784,20 +3020,21 @@
 
 	switch(clist->sort_column){
 	/* columns representing strings */
-	case 4:
 	case 5:
 	case 6:
+	case 7:
 		return strcmp (text1, text2);
 	/* columns representing ints */
 	case 0:
 	case 1:
-	case 7:
+	case 8:
 		i1=atoi(text1);
 		i2=atoi(text2);
 		return i1-i2;
 	/* columns representing floats */
 	case 2:
 	case 3:
+	case 4:
 		f1=atof(text1);
 		f2=atof(text2);
 		if (fabs(f1-f2)<0.0000005)
@@ -1852,7 +3089,7 @@
 	GtkWidget* clist_fwd;
 
 	/* clist for the information */
-	clist_fwd = gtk_clist_new(8);
+	clist_fwd = gtk_clist_new(NUM_COLS);
 	gtk_widget_show(clist_fwd);
 	SIGNAL_CONNECT(clist_fwd, "select_row", on_clist_select_row, user_data);
 
@@ -1862,8 +3099,8 @@
 	gtk_clist_set_sort_type(GTK_CLIST(clist_fwd), GTK_SORT_ASCENDING);
 
 	/* hide date and length column */
-	gtk_clist_set_column_visibility(GTK_CLIST(clist_fwd), 6, FALSE);
 	gtk_clist_set_column_visibility(GTK_CLIST(clist_fwd), 7, FALSE);
+	gtk_clist_set_column_visibility(GTK_CLIST(clist_fwd), 8, FALSE);
 
 	/* column widths and justification */
 	gtk_clist_set_column_width(GTK_CLIST(clist_fwd), 0, 60);
@@ -1871,13 +3108,14 @@
 	gtk_clist_set_column_width(GTK_CLIST(clist_fwd), 2, 75);
 	gtk_clist_set_column_width(GTK_CLIST(clist_fwd), 3, 75);
 	gtk_clist_set_column_width(GTK_CLIST(clist_fwd), 4, 50);
+	gtk_clist_set_column_width(GTK_CLIST(clist_fwd), 5, 75);
 	gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 0, GTK_JUSTIFY_RIGHT);
 	gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 1, GTK_JUSTIFY_RIGHT);
 	gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 2, GTK_JUSTIFY_CENTER);
 	gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 3, GTK_JUSTIFY_CENTER);
 	gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 4, GTK_JUSTIFY_CENTER);
 	gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 5, GTK_JUSTIFY_CENTER);
-
+	gtk_clist_set_column_justification(GTK_CLIST(clist_fwd), 6, GTK_JUSTIFY_CENTER);
 	return clist_fwd;
 }
 
@@ -1948,7 +3186,7 @@
 #ifdef USE_CONVERSATION_GRAPH
 	GtkWidget *graph_bt;
 #endif
-
+	GtkWidget *graph_bt;
 	gchar label_forward[150];
 	gchar label_reverse[150];
 
@@ -1959,7 +3197,7 @@
 	
 
 	window = window_new(GTK_WINDOW_TOPLEVEL, "Ethereal: RTP Stream Analysis");
-	gtk_window_set_default_size(GTK_WINDOW(window), 560, 400);
+	gtk_window_set_default_size(GTK_WINDOW(window), 700, 400);
 
 	/* Container for each row of widgets */
 	main_vb = gtk_vbox_new(FALSE, 2);
@@ -1986,7 +3224,8 @@
 	notebook = gtk_notebook_new();
 	gtk_container_add(GTK_CONTAINER(main_vb), notebook);
 	OBJECT_SET_DATA(window, "notebook", notebook);
-	SIGNAL_CONNECT(notebook, "switch_page", on_notebook_switch_page,
+
+	user_data->dlg.notebook_signal_id = SIGNAL_CONNECT(notebook, "switch_page", on_notebook_switch_page,
                        user_data);
 
 	/* page for forward connection */
@@ -2078,6 +3317,12 @@
 	gtk_widget_show(goto_bt);
 	SIGNAL_CONNECT(goto_bt, "clicked", on_goto_bt_clicked, user_data);
 
+        graph_bt = gtk_button_new_with_label("Graph");
+	gtk_container_add(GTK_CONTAINER(box4), graph_bt);
+	gtk_widget_show(graph_bt);
+	SIGNAL_CONNECT(graph_bt, "clicked", on_graph_bt_clicked, user_data);	
+
+
 #ifdef USE_CONVERSATION_GRAPH
 	graph_bt = gtk_button_new_with_label("Graph");
 	gtk_container_add(GTK_CONTAINER(box4), graph_bt);
@@ -2202,7 +3447,13 @@
 {
 	user_data_t *user_data;
 	int fd;
-
+	int i;
+	static color_t col[MAX_GRAPHS] = {
+       		{0,     0x0000, 0x0000, 0x0000},
+        	{0,     0xffff, 0x0000, 0x0000},
+        	{0,     0x0000, 0xffff, 0x0000},
+        	{0,     0x0000, 0x0000, 0xffff}
+	};
 	/* init */
 	user_data = g_malloc(sizeof(user_data_t));
 
@@ -2229,12 +3480,41 @@
 	user_data->reversed.saveinfo.fp = NULL;
 	user_data->dlg.save_voice_as_w = NULL;
 	user_data->dlg.save_csv_as_w = NULL;
+        user_data->dlg.dialog_graph.window = NULL;
+
 #ifdef USE_CONVERSATION_GRAPH
 	user_data->dlg.graph_window = NULL;
 	user_data->series_fwd.value_pairs = NULL;
 	user_data->series_rev.value_pairs = NULL;
 #endif
 
+        /* init dialog_graph */
+        user_data->dlg.dialog_graph.needs_redraw=TRUE;
+        user_data->dlg.dialog_graph.interval=tick_interval_values[DEFAULT_TICK_VALUE];
+        user_data->dlg.dialog_graph.draw_area=NULL;
+        user_data->dlg.dialog_graph.pixmap=NULL;
+        user_data->dlg.dialog_graph.scrollbar=NULL;
+        user_data->dlg.dialog_graph.scrollbar_adjustment=NULL;
+        user_data->dlg.dialog_graph.pixmap_width=500;
+        user_data->dlg.dialog_graph.pixmap_height=200;
+        user_data->dlg.dialog_graph.pixels_per_tick=pixels_per_tick[DEFAULT_PIXELS_PER_TICK];
+        user_data->dlg.dialog_graph.max_y_units=AUTO_MAX_YSCALE;
+        user_data->dlg.dialog_graph.last_interval=0xffffffff;
+        user_data->dlg.dialog_graph.max_interval=0;
+        user_data->dlg.dialog_graph.num_items=0;
+	user_data->dlg.dialog_graph.start_time = -1;
+
+	for(i=0;i<MAX_GRAPHS;i++){
+        	user_data->dlg.dialog_graph.graph[i].gc=NULL;
+        	user_data->dlg.dialog_graph.graph[i].color.pixel=0;
+        	user_data->dlg.dialog_graph.graph[i].color.red=col[i].red;
+        	user_data->dlg.dialog_graph.graph[i].color.green=col[i].green;
+        	user_data->dlg.dialog_graph.graph[i].color.blue=col[i].blue;
+        	user_data->dlg.dialog_graph.graph[i].display=TRUE;
+        	user_data->dlg.dialog_graph.graph[i].display_button=NULL;
+        	user_data->dlg.dialog_graph.graph[i].ud=user_data;
+	}
+
 	/* create the dialog box */
 	create_rtp_dialog(user_data);
 
@@ -2256,6 +3536,7 @@
 	guint32 ip_dst_rev;
 	guint16 port_dst_rev;
 	guint32 ssrc_rev = 0;
+	unsigned int version_fwd;
 
 	gchar filter_text[256];
 	dfilter_t *sfcode;
@@ -2316,6 +3597,13 @@
 	g_memmove(&ip_dst_rev, edt->pi.src.data, 4);
 	port_src_rev = edt->pi.destport;
 	port_dst_rev = edt->pi.srcport;
+
+        /* check if it is RTP Version 2 */
+        if (!get_int_value_from_proto_tree(edt->tree, "rtp", "rtp.version", &version_fwd) || version_fwd != 2) {
+                simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+                    "RTP Version != 2 is not supported!");
+                return;
+        }
 	
 	/* now we need the SSRC value of the current frame */
 	if (!get_int_value_from_proto_tree(edt->tree, "rtp", "rtp.ssrc", &ssrc_fwd)) {
@@ -2324,6 +3612,8 @@
 		return;
 	}
 
+	/* Scan for rtpstream */
+	rtpstream_scan();
 	/* search for reversed direction in the global rtp streams list */
 	nfound = 0;
 	strinfo_list = g_list_first(rtpstream_get_info()->strinfo_list);
diff -urN ethereal-0.10.6/gtk/rtp_stream.c ethereal-0.10.7/gtk/rtp_stream.c
--- ethereal-0.10.6/gtk/rtp_stream.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/rtp_stream.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* rtp_stream.c
  * RTP streams summary addition for ethereal
  *
- * $Id: rtp_stream.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: rtp_stream.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Copyright 2003, Alcatel Business Systems
  * By Lars Ruoff <lars.ruoff@gmx.net>
@@ -34,7 +34,7 @@
 
 #include "globals.h"
 
-#include "tap.h"
+#include <epan/tap.h>
 #include "register.h"
 #include <epan/dissectors/packet-rtp.h>
 
diff -urN ethereal-0.10.6/gtk/rtp_stream_dlg.c ethereal-0.10.7/gtk/rtp_stream_dlg.c
--- ethereal-0.10.6/gtk/rtp_stream_dlg.c	2004-08-12 17:41:43.000000000 -0500
+++ ethereal-0.10.7/gtk/rtp_stream_dlg.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* rtp_stream_dlg.c
  * RTP streams summary addition for ethereal
  *
- * $Id: rtp_stream_dlg.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: rtp_stream_dlg.c 12192 2004-10-03 16:29:40Z ulfl $
  *
  * Copyright 2003, Alcatel Business Systems
  * By Lars Ruoff <lars.ruoff@gmx.net>
@@ -557,10 +557,11 @@
 	GtkWidget *bt_unselect;
 	GtkWidget *bt_findrev;
 	GtkWidget *bt_save;
-	GtkWidget *bt_frames;
+	GtkWidget *bt_mark;
 	GtkWidget *bt_filter;
-	GtkWidget *bt_analyse;
+	GtkWidget *bt_analyze;
 	GtkWidget *bt_close;
+    GtkTooltips *tooltips = gtk_tooltips_new();
 
 	gchar *titles[8] =  {"Src IP addr", "Src port",  "Dest IP addr", "Dest port", "SSRC", "Payload", "Packets", "Comment"};
 	column_arrows *col_arrows;
@@ -647,27 +648,34 @@
 
 	bt_unselect = gtk_button_new_with_label ("Unselect");
 	gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_unselect);
+    gtk_tooltips_set_tip (tooltips, bt_unselect, "Undo stream selection", NULL);
 
 	bt_findrev = gtk_button_new_with_label ("Find Reverse");
 	gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_findrev);
+    gtk_tooltips_set_tip (tooltips, bt_findrev, "Find the reverse stream matching the selected forward stream", NULL);
 /*
 	bt_goto = BUTTON_NEW_FROM_STOCK(GTK_STOCK_JUMP_TO);
 	gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_goto);
 */
 	bt_save = BUTTON_NEW_FROM_STOCK(GTK_STOCK_SAVE_AS);
 	gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_save);
+    gtk_tooltips_set_tip (tooltips, bt_save, "Save stream payload in rtpdump format", NULL);
 
-	bt_frames = gtk_button_new_with_label ("Mark frames");
-	gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_frames);
+	bt_mark = gtk_button_new_with_label ("Mark packets");
+	gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_mark);
+    gtk_tooltips_set_tip (tooltips, bt_mark, "Mark packets of the selected stream(s)", NULL);
 
-	bt_filter = gtk_button_new_with_label ("Set filter");
+	bt_filter = gtk_button_new_with_label ("Prepare filter");
 	gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_filter);
+    gtk_tooltips_set_tip (tooltips, bt_filter, "Prepare a display filter of the selected stream(s)", NULL);
 
-	bt_analyse = gtk_button_new_with_label ("Analyse");
-	gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_analyse);
+	bt_analyze = gtk_button_new_with_label ("Analyze");
+	gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_analyze);
+    gtk_tooltips_set_tip (tooltips, bt_analyze, "Open an analyze window of the selected stream(s)", NULL);
 
 	bt_close = BUTTON_NEW_FROM_STOCK(GTK_STOCK_CLOSE);
 	gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_close);
+    gtk_tooltips_set_tip (tooltips, bt_close, "Close this dialog", NULL);
 	GTK_WIDGET_SET_FLAGS(bt_close, GTK_CAN_DEFAULT);
 
 	SIGNAL_CONNECT(clist, "select_row", rtpstream_on_select_row, NULL);
@@ -677,9 +685,9 @@
 	SIGNAL_CONNECT(bt_goto, "clicked", rtpstream_on_goto, NULL);
 */
 	SIGNAL_CONNECT(bt_save, "clicked", rtpstream_on_save, NULL);
-	SIGNAL_CONNECT(bt_frames, "clicked", rtpstream_on_mark, NULL);
+	SIGNAL_CONNECT(bt_mark, "clicked", rtpstream_on_mark, NULL);
 	SIGNAL_CONNECT(bt_filter, "clicked", rtpstream_on_filter, NULL);
-	SIGNAL_CONNECT(bt_analyse, "clicked", rtpstream_on_analyse, NULL);
+	SIGNAL_CONNECT(bt_analyze, "clicked", rtpstream_on_analyse, NULL);
 
 	window_set_cancel_button(rtpstream_dlg_w, bt_close, window_cancel_button_cb);
 
diff -urN ethereal-0.10.6/gtk/sctp_stat.h ethereal-0.10.7/gtk/sctp_stat.h
--- ethereal-0.10.6/gtk/sctp_stat.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/gtk/sctp_stat.h	2004-10-20 17:34:31.000000000 -0500
@@ -0,0 +1,319 @@
+/* 
+ * Copyright 2004, Irene Ruengeler <i.ruengeler [AT] fh-muenster.de>
+ *
+ * $Id: sctp_stat.h 11971 2004-09-11 22:57:52Z guy $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+ 
+#include <epan/dissectors/packet-sctp.h>
+
+#define SCTP_DATA_CHUNK_ID               0
+#define SCTP_INIT_CHUNK_ID               1
+#define SCTP_INIT_ACK_CHUNK_ID           2
+#define SCTP_SACK_CHUNK_ID               3
+
+#define CHUNK_TYPE_LENGTH             1
+#define CHUNK_FLAGS_LENGTH            1
+#define CHUNK_LENGTH_LENGTH           2
+
+#define CHUNK_HEADER_OFFSET           0
+#define CHUNK_TYPE_OFFSET             CHUNK_HEADER_OFFSET
+#define CHUNK_FLAGS_OFFSET            (CHUNK_TYPE_OFFSET + CHUNK_TYPE_LENGTH)
+#define CHUNK_LENGTH_OFFSET           (CHUNK_FLAGS_OFFSET + CHUNK_FLAGS_LENGTH)
+#define CHUNK_VALUE_OFFSET            (CHUNK_LENGTH_OFFSET + CHUNK_LENGTH_LENGTH)
+
+#define INIT_CHUNK_INITIATE_TAG_LENGTH               4
+#define INIT_CHUNK_ADV_REC_WINDOW_CREDIT_LENGTH      4
+#define INIT_CHUNK_NUMBER_OF_OUTBOUND_STREAMS_LENGTH 2
+#define INIT_CHUNK_NUMBER_OF_INBOUND_STREAMS_LENGTH  2
+
+
+#define INIT_CHUNK_INITIATE_TAG_OFFSET               CHUNK_VALUE_OFFSET
+#define INIT_CHUNK_ADV_REC_WINDOW_CREDIT_OFFSET      (INIT_CHUNK_INITIATE_TAG_OFFSET + \
+                                                      INIT_CHUNK_INITIATE_TAG_LENGTH )
+#define INIT_CHUNK_NUMBER_OF_OUTBOUND_STREAMS_OFFSET (INIT_CHUNK_ADV_REC_WINDOW_CREDIT_OFFSET + \
+                                                      INIT_CHUNK_ADV_REC_WINDOW_CREDIT_LENGTH )
+#define INIT_CHUNK_NUMBER_OF_INBOUND_STREAMS_OFFSET  (INIT_CHUNK_NUMBER_OF_OUTBOUND_STREAMS_OFFSET + \
+                                                      INIT_CHUNK_NUMBER_OF_OUTBOUND_STREAMS_LENGTH )
+#define INIT_CHUNK_INITIAL_TSN_OFFSET                (INIT_CHUNK_NUMBER_OF_INBOUND_STREAMS_OFFSET + \
+                                                      INIT_CHUNK_NUMBER_OF_INBOUND_STREAMS_LENGTH )
+
+#define DATA_CHUNK_TSN_LENGTH         4
+#define DATA_CHUNK_TSN_OFFSET         (CHUNK_VALUE_OFFSET + 0)
+#define DATA_CHUNK_STREAM_ID_OFFSET   (DATA_CHUNK_TSN_OFFSET + DATA_CHUNK_TSN_LENGTH)
+
+
+typedef struct _v4address {
+	address_type	type;
+	int				len;
+	guint32			data;
+}	v4address;
+
+typedef struct _tsn {
+	guint32	frame_number;
+	guint32      secs;    /* Absolute seconds */
+  	guint32      usecs;
+	struct sockaddr_storage	src;
+	struct sockaddr_storage	dst;
+	GList		*tsns;
+} tsn_t;
+
+typedef struct _sctp_tmp_info {
+	struct sockaddr_storage	src;
+	struct sockaddr_storage	dst;
+	guint16 port1;
+	guint16 port2;
+	guint32 verification_tag1;
+	guint32 verification_tag2;
+	guint32 n_tvbs;
+}sctp_tmp_info_t;
+
+typedef struct _sctp_min_max {
+	guint32	tmp_min_secs;
+	guint32 	tmp_min_usecs;
+	guint32 	tmp_max_secs;
+	guint32	tmp_max_usecs;
+	guint32	tmp_min_tsn1;
+	guint32	tmp_min_tsn2;
+	guint32	tmp_max_tsn1;
+	guint32	tmp_max_tsn2;
+	gint 	tmp_secs;
+} sctp_min_max_t;
+
+struct tsn_sort{
+	guint32 tsnumber;
+	guint32 secs;
+	guint32 usecs;
+	guint32 offset;
+	guint32 length;
+};
+
+
+typedef struct _sctp_assoc_info {
+	//guint16	assoc_id;
+	struct sockaddr_storage	src;
+	struct sockaddr_storage	dst;
+	guint16 port1;
+	guint16 port2;
+	guint32 verification_tag1;
+	guint32 verification_tag2;
+	guint32 n_tvbs;
+	GList   *addr1;
+	GList   *addr2;
+	guint16 instream1;
+	guint16 outstream1;
+	guint16 instream2;
+	guint16 outstream2;
+	guint32 n_adler32_calculated;
+	guint32 n_adler32_correct;
+	guint32 n_crc32c_calculated;
+	guint32 n_crc32c_correct;
+	char checksum_type[8];
+	guint32 n_checksum_errors;
+	guint32 n_bundling_errors;
+	guint32 n_padding_errors;
+	guint32 n_length_errors;
+	guint32 n_value_errors;
+	guint32 n_data_chunks;
+	guint32 n_data_bytes;
+	guint32 n_packets;
+	guint32 n_data_chunks_ep1;
+	guint32 n_data_bytes_ep1;
+	guint32 n_data_chunks_ep2;
+	guint32 n_data_bytes_ep2;
+	guint32 n_sack_chunks_ep1;
+	guint32 n_sack_chunks_ep2;
+	guint32 n_array_tsn1;
+	guint32 n_array_tsn2;
+	guint32 max_window1;
+	guint32 max_window2;
+	gboolean init;
+	gboolean initack;
+	guint8 initack_dir;
+	guint8 direction;
+	guint32	min_secs;
+	guint32 	min_usecs;
+	guint32 	max_secs;
+	guint32	max_usecs;
+	guint32	min_tsn1;
+	guint32	min_tsn2;
+	guint32	max_tsn1;
+	guint32	max_tsn2;
+	guint32 max_bytes1;
+	guint32 max_bytes2;
+	GSList *min_max;
+	GList *frame_numbers;
+	GList *tsn1;
+	GArray *sort_tsn1;
+	GArray *sort_sack1;
+	GList *sack1;
+	GList *tsn2;
+	GArray *sort_tsn2;
+	GArray *sort_sack2;
+	GList *sack2;
+	gboolean check_address;
+	GList*	error_info_list;
+} sctp_assoc_info_t;
+
+typedef struct _sctp_error_info {
+	guint32	frame_number;
+	char 	chunk_info[200];
+	char	*info_text;
+}	sctp_error_info_t;
+
+
+typedef struct _sctp_allassocs_info {
+guint32 sum_tvbs;
+GList*  assoc_info_list;
+gboolean is_registered;
+GList*	children;
+} sctp_allassocs_info_t;
+
+
+//Data structures for sctp_assoc_analyse
+
+struct notes {
+	GtkWidget *checktype;
+	GtkWidget *checksum;
+	GtkWidget *bundling;
+	GtkWidget *padding;
+	GtkWidget *length;
+	GtkWidget *value;
+	GtkWidget *chunks_ep1;
+	GtkWidget *bytes_ep1;
+	GtkWidget *chunks_ep2;
+	GtkWidget *bytes_ep2;
+	struct page *page2;
+	struct page *page3;
+};
+
+struct page {
+	GtkWidget *addr_frame;
+	GtkWidget *scrolled_window;
+	GtkWidget *clist;
+	GtkWidget *port;
+	GtkWidget *veritag;
+	GtkWidget *max_in;
+	GtkWidget *min_in;
+	GtkWidget *max_out;
+	GtkWidget *min_out;
+};
+
+struct sctp_analyse {
+	sctp_assoc_info_t* assoc;
+	GtkWidget* window;
+	struct notes *analyse_nb;
+	GList *children;
+	guint16 num_children;
+};
+
+//Data Structures for sctp_graph_dlg
+
+typedef struct _sctp_graph_t {
+	gboolean needs_redraw;
+	gfloat x_interval;
+	gfloat y_interval;
+	GtkWidget *window;
+	GtkWidget *draw_area;
+	GdkPixmap *pixmap;
+	int pixmap_width;
+	int pixmap_height;
+	int graph_type;
+	gdouble x_old;
+	gdouble y_old;
+	gdouble x_new;
+	gdouble y_new;
+	guint16 offset;
+	guint16 length;
+	gboolean tmp;
+	gboolean rectangle;
+	guint32 x1_tmp_sec;
+	guint32 x2_tmp_sec;
+	guint32 x1_tmp_usec;
+	guint32 x2_tmp_usec;
+	guint32 tmp_width;
+	guint32 axis_width;
+	guint32 y1_tmp;
+	guint32 y2_tmp;
+	guint32 tmp_min_tsn1;
+	guint32 tmp_max_tsn1;
+	guint32 tmp_min_tsn2;
+	guint32 tmp_max_tsn2;
+	guint32 min_x;
+	guint32 max_x;
+	guint32 min_y;
+	guint32 max_y;
+} sctp_graph_t;
+
+
+
+struct sctp_udata {
+	sctp_assoc_info_t * assoc;
+	sctp_graph_t *io;
+	struct sctp_analyse* parent;
+	guint16 dir;
+};
+
+
+void register_tap_listener_sctp_stat(void);
+
+const sctp_allassocs_info_t* sctp_stat_get_info(void);
+
+void sctp_stat_scan(void);
+
+void remove_tap_listener_sctp_stat(void);
+
+void reset(sctp_allassocs_info_t *tapdata _U_);
+
+
+void assoc_analyse(sctp_assoc_info_t* assoc);
+
+const sctp_assoc_info_t* get_selected_assoc(void);
+
+void create_graph(guint16 dir, struct sctp_analyse* u_data);
+
+void create_byte_graph(guint16 dir, struct sctp_analyse* u_data);
+
+void sctp_error_dlg_show();
+
+void sctp_stat_dlg_update(void);
+
+GtkWidget *get_stat_dlg(void);
+
+void update_analyse_dlg(struct sctp_analyse* u_data);
+
+void sctp_analyse_start(GtkWidget *w _U_, gpointer data _U_);
+
+void increase_childcount(struct sctp_analyse *parent);
+
+void decrease_childcount(struct sctp_analyse *parent);
+
+void set_child(struct sctp_udata *child, struct sctp_analyse *parent);
+
+void remove_child(struct sctp_udata *child, struct sctp_analyse *parent);
+
+void decrease_analyse_childcount();
+
+void increase_analyse_childcount();
+
+void set_analyse_child(struct sctp_analyse *child);
+
+void remove_analyse_child(struct sctp_analyse *child);
+
diff -urN ethereal-0.10.6/gtk/sip_stat.c ethereal-0.10.7/gtk/sip_stat.c
--- ethereal-0.10.6/gtk/sip_stat.c	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/sip_stat.c	2004-10-20 17:34:31.000000000 -0500
@@ -1,7 +1,7 @@
 /* sip_stat.c
  * sip_stat   2004 Martin Mathieson
  *
- * $Id: sip_stat.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: sip_stat.c 12128 2004-09-29 00:06:36Z guy $
  * Copied from http_stat.c
  *
  * Ethereal - Network traffic analyzer
@@ -38,7 +38,7 @@
 #include "simple_dialog.h"
 #include "ui_util.h"
 #include "dlg_utils.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include <epan/dissectors/packet-sip.h>
 #include "../globals.h"
diff -urN ethereal-0.10.6/gtk/smb_stat.c ethereal-0.10.7/gtk/smb_stat.c
--- ethereal-0.10.6/gtk/smb_stat.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/smb_stat.c	2004-10-20 17:34:30.000000000 -0500
@@ -1,7 +1,7 @@
 /* smb_stat.c
  * smb_stat   2003 Ronnie Sahlberg
  *
- * $Id: smb_stat.c 11436 2004-07-19 21:42:01Z ulfl $
+ * $Id: smb_stat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -39,7 +39,7 @@
 #include <epan/value_string.h>
 
 #include "tap_menu.h"
-#include "../tap.h"
+#include <epan/tap.h>
 #include "../smb.h"
 #include "../register.h"
 #include "../timestats.h"
diff -urN ethereal-0.10.6/gtk/stream_prefs.c ethereal-0.10.7/gtk/stream_prefs.c
--- ethereal-0.10.6/gtk/stream_prefs.c	2004-08-12 17:41:44.000000000 -0500
+++ ethereal-0.10.7/gtk/stream_prefs.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* stream_prefs.c
  * Dialog boxes for preferences for the stream window
  *
- * $Id: stream_prefs.c 11497 2004-07-24 00:35:13Z guy $
+ * $Id: stream_prefs.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 #include "stream_prefs.h"
 #include "keys.h"
 #include "print.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "compat_macros.h"
 #include "follow_dlg.h"
 #include "packet_list.h"
diff -urN ethereal-0.10.6/gtk/supported_protos_dlg.c ethereal-0.10.7/gtk/supported_protos_dlg.c
--- ethereal-0.10.6/gtk/supported_protos_dlg.c	2004-08-12 17:41:46.000000000 -0500
+++ ethereal-0.10.7/gtk/supported_protos_dlg.c	2004-10-20 17:34:31.000000000 -0500
@@ -2,7 +2,7 @@
  *
  * Laurent Deniel <laurent.deniel@free.fr>
  *
- * $Id: supported_protos_dlg.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: supported_protos_dlg.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -31,7 +31,7 @@
 #include <string.h>
 
 #include "supported_protos_dlg.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "globals.h"
 #include "gtkglobals.h"
 #include "ui_util.h"
diff -urN ethereal-0.10.6/gtk/tcp_graph.c ethereal-0.10.7/gtk/tcp_graph.c
--- ethereal-0.10.6/gtk/tcp_graph.c	2004-08-12 17:41:45.000000000 -0500
+++ ethereal-0.10.7/gtk/tcp_graph.c	2004-10-20 17:34:30.000000000 -0500
@@ -3,7 +3,7 @@
  * By Pavel Mores <pvl@uh.cz>
  * Win32 port:  rwh@unifiedtech.com
  *
- * $Id: tcp_graph.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: tcp_graph.c 12130 2004-09-29 00:52:45Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -33,7 +33,7 @@
 #include <math.h>		/* rint() */
 #include <string.h>
 
-#include "ipproto.h"
+#include <epan/ipproto.h>
 #include "globals.h" 		/* cfile */
 #include <epan/packet.h>	/* frame_data */
 #include "gtkglobals.h"		/* packet_list */
@@ -502,12 +502,13 @@
 static void rtt_delete_unack_from_list (struct unack ** , struct unack * );
 static void rtt_make_elmtlist (struct graph * );
 static void rtt_toggle_seq_origin (struct graph * );
-#if defined(WIN32) && !defined(__MINGW32__)
+#if defined(_WIN32) && !defined(__MINGW32__)
 static int rint (double );	/* compiler template for Windows */
 #endif
 
+/* XXX - what about OS X? */
 static char helptext[] =
-#ifndef WIN32
+#ifndef _WIN32
 "Here's what you can do:\n\
 - Left Mouse Button selects segment in ethereal's packet list\n\
 - Middle Mouse Button zooms in\n\
@@ -518,7 +519,7 @@
 - 's' toggles relative/absolute sequence numbers\n\
 - 't' toggles time origin\n\
 ";
-#else /* WIN32 */
+#else /* _WIN32 */
 "Here's what you can do:\n\
 - <ctrl>-Left  Mouse Button selects segment in ethereal's packet list\n\
 - Left         Mouse Button zooms in\n\
@@ -2951,7 +2952,7 @@
 			g->grab.y = (int )rint (event->y) - g->geom.y;
 			g->grab.grabbed = TRUE;
 		}
-#ifdef WIN32
+#ifdef _WIN32
 				/* Windows mouse control:        */
 				/* [<ctrl>-left] - select packet */
 				/* [left] - zoom in              */
@@ -2960,7 +2961,7 @@
 		if (event->state & GDK_CONTROL_MASK) {
 			graph_select_segment (g, (int)event->x, (int)event->y);
 		} else {
-#else /* WIN32 */
+#else /* _WIN32 */
 	} else if (event->button == 2) {
 #endif
 		int cur_width = g->geom.width, cur_height = g->geom.height;
@@ -3022,10 +3023,10 @@
 		update_zoom_spins (g);
 		if (g->cross.draw)
 			cross_draw (g, (int) event->x, (int) event->y);
-#ifndef WIN32
+#ifndef _WIN32
 	} else if (event->button == 1) {
 		graph_select_segment (g, (int )event->x, (int )event->y);
-#else /* WIN32 */
+#else /* _WIN32 */
 		}
 #endif
 	}
@@ -3968,7 +3969,7 @@
 		g->x_axis->min = 0;
 }
 
-#if defined(WIN32) && !defined(__MINGW32__)
+#if defined(_WIN32) && !defined(__MINGW32__)
 /* replacement of Unix rint() for Windows */
 static int rint (double x)
 {
diff -urN ethereal-0.10.6/gtk/toolbar.c ethereal-0.10.7/gtk/toolbar.c
--- ethereal-0.10.6/gtk/toolbar.c	2004-08-12 17:41:43.000000000 -0500
+++ ethereal-0.10.7/gtk/toolbar.c	2004-10-20 17:34:29.000000000 -0500
@@ -2,7 +2,7 @@
  * The main toolbar
  * Copyright 2003, Ulf Lamping <ulf.lamping@web.de>
  *
- * $Id: toolbar.c 11436 2004-07-19 21:42:01Z ulfl $
+ * $Id: toolbar.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -52,7 +52,7 @@
 #include "goto_dlg.h"
 #include "color.h"
 #include "color_dlg.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "prefs_dlg.h"
 #include "main.h"
 #include "help_dlg.h"
@@ -133,7 +133,7 @@
 } stock_pixmap_t;
 
 /* generate application specific stock items */
-void ethereal_stock_icons(void) {
+static void ethereal_stock_icons(void) {
     GtkIconFactory * factory;
     gint32 i;
 
diff -urN ethereal-0.10.6/gtk/ui_util.c ethereal-0.10.7/gtk/ui_util.c
--- ethereal-0.10.6/gtk/ui_util.c	2004-08-12 17:41:47.000000000 -0500
+++ ethereal-0.10.7/gtk/ui_util.c	2004-10-20 17:34:32.000000000 -0500
@@ -1,7 +1,7 @@
 /* ui_util.c
  * UI utility routines
  *
- * $Id: ui_util.c 11542 2004-07-27 19:13:48Z ulfl $
+ * $Id: ui_util.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -41,7 +41,7 @@
 
 #include "gtkglobals.h"
 #include "ui_util.h"
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "epan/epan.h"
 #include "../ui_util.h"
 #include "compat_macros.h"
@@ -108,7 +108,7 @@
 static void
 window_icon_realize_cb (GtkWidget *win, gpointer data _U_)
 {
-#ifndef WIN32
+#ifndef _WIN32
   static GdkPixmap *icon_pmap = NULL;
   static GdkBitmap *icon_mask = NULL;
   GtkStyle         *style;
@@ -517,13 +517,17 @@
   window_geometry_t geom;
   const gchar *name;
 
-  /* this must be done *before* destroy is running, as the window geometry */
-  /* cannot be retrieved at destroy time (so don't use event "destroy" for this) */
-  window_get_geometry(win, &geom);
-
-  name = OBJECT_GET_DATA(win, WINDOW_GEOM_KEY);
-  if(name) {
-    window_geom_save(name, &geom);
+  /* get_geometry must be done *before* destroy is running, as the window geometry
+   * cannot be retrieved at destroy time (so don't use event "destroy" for this) */
+  /* ...and don't do this at all, if we currently have no GdkWindow (e.g. if the 
+   * GtkWidget is hidden) */
+  if(!GTK_WIDGET_NO_WINDOW(win) && GTK_WIDGET_VISIBLE(win)) {
+      window_get_geometry(win, &geom);
+
+      name = OBJECT_GET_DATA(win, WINDOW_GEOM_KEY);
+      if(name) {
+        window_geom_save(name, &geom);
+      }
   }
 
   gtk_widget_destroy(win);
@@ -988,3 +992,24 @@
     return plugins_list;
 }
 
+extern void
+copy_to_clipboard(GString *str)  
+{
+#if (GTK_MAJOR_VERSION >= 2)
+        GtkClipboard    *cb;
+
+      	cb = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);     /* Get the default clipboard */
+	gtk_clipboard_set_text(cb, str->str, -1);            /* Copy the byte data into the clipboard */
+#else
+        GtkWidget *window;
+        GtkWidget *text;
+
+        window = window_new (GTK_WINDOW_TOPLEVEL,"");
+        text = gtk_text_new (NULL, NULL);                 /* Create the GtkText widget */
+        gtk_container_add (GTK_CONTAINER (window), text); /* Avoid a GTK assertion */
+        gtk_widget_realize (text);   /* Realizing a widget creates a window for it, ready for us to insert some text */
+        gtk_text_insert (GTK_TEXT (text), NULL, NULL, NULL, str->str, -1);
+        gtk_editable_select_region((GtkEditable *)text, 0, -1); /* Select ALL text */
+        gtk_editable_copy_clipboard((GtkEditable *)text); /* Copy the byte data into the clipboard */
+#endif
+}
diff -urN ethereal-0.10.6/gtk/ui_util.h ethereal-0.10.7/gtk/ui_util.h
--- ethereal-0.10.6/gtk/ui_util.h	2004-08-12 17:41:47.000000000 -0500
+++ ethereal-0.10.7/gtk/ui_util.h	2004-10-20 17:34:32.000000000 -0500
@@ -1,7 +1,7 @@
 /* ui_util.h
  * Definitions for UI utility routines
  *
- * $Id: ui_util.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: ui_util.h 12184 2004-10-02 09:34:12Z ulfl $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -110,7 +110,7 @@
  * 
  * @param type window type, typical GTK_WINDOW_TOPLEVEL 
  * @param title the title for the new window
- * @param geom_name the name to distinguish this window, will also be used for the recent file
+ * @param geom_name the name to distinguish this window, will also be used for the recent file (don't use special chars)
  * @return the newly created window
  */
 extern GtkWidget *window_new_with_geom(GtkWindowType type, const gchar *title, const gchar *geom_name);
@@ -291,4 +291,10 @@
  */
 extern GtkWidget *xpm_to_widget_from_parent(GtkWidget *parent, const char ** xpm);
 
+/** Copy a GString to the clipboard.
+ *
+ * @param str GString that is to be copied to the clipboard.
+ */
+extern void copy_to_clipboard(GString *str);  
+
 #endif /* __GTKGUIUI_UTIL_H__ */
diff -urN ethereal-0.10.6/gtk/webbrowser.c ethereal-0.10.7/gtk/webbrowser.c
--- ethereal-0.10.6/gtk/webbrowser.c	2004-08-12 17:41:47.000000000 -0500
+++ ethereal-0.10.7/gtk/webbrowser.c	2004-10-20 17:34:32.000000000 -0500
@@ -4,6 +4,8 @@
  * Web Browser Plug-in
  * Copyright (C) 2003  Henrik Brix Andersen <brix@gimp.org>
  *
+ * $Id: webbrowser.c 12155 2004-09-30 19:51:05Z guy $
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -34,7 +36,7 @@
 
 #include <epan/filesystem.h>
 
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "webbrowser.h"
 #include "compat_macros.h"
 #include "simple_dialog.h"
diff -urN ethereal-0.10.6/gtk/wsp_stat.c ethereal-0.10.7/gtk/wsp_stat.c
--- ethereal-0.10.6/gtk/wsp_stat.c	2004-08-12 17:41:43.000000000 -0500
+++ ethereal-0.10.7/gtk/wsp_stat.c	2004-10-20 17:34:29.000000000 -0500
@@ -1,7 +1,7 @@
 /* wsp_stat.c
  * wsp_stat   2003 Jean-Michel FAYARD
  *
- * $Id: wsp_stat.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: wsp_stat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -38,7 +38,7 @@
 #include "simple_dialog.h"
 #include "ui_util.h"
 #include "dlg_utils.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "../register.h"
 #include "../globals.h"
 #include "compat_macros.h"
diff -urN ethereal-0.10.6/h225-persistentdata.c ethereal-0.10.7/h225-persistentdata.c
--- ethereal-0.10.6/h225-persistentdata.c	2004-08-12 17:41:40.000000000 -0500
+++ ethereal-0.10.7/h225-persistentdata.c	2004-10-20 17:34:27.000000000 -0500
@@ -5,7 +5,7 @@
  *
  * Copyright 2003 Lars Roland
  *
- * $Id: h225-persistentdata.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: h225-persistentdata.c 11869 2004-09-01 07:07:23Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
diff -urN ethereal-0.10.6/h225-persistentdata.h ethereal-0.10.7/h225-persistentdata.h
--- ethereal-0.10.6/h225-persistentdata.h	2004-08-12 17:41:40.000000000 -0500
+++ ethereal-0.10.7/h225-persistentdata.h	2004-10-20 17:34:27.000000000 -0500
@@ -5,7 +5,7 @@
  *
  * Copyright 2003 Lars Roland
  *
- * $Id: h225-persistentdata.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: h225-persistentdata.h 11869 2004-09-01 07:07:23Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
diff -urN ethereal-0.10.6/help/Makefile.am ethereal-0.10.7/help/Makefile.am
--- ethereal-0.10.6/help/Makefile.am	2004-08-12 17:41:40.000000000 -0500
+++ ethereal-0.10.7/help/Makefile.am	2004-10-20 17:34:27.000000000 -0500
@@ -1,7 +1,7 @@
 # Makefile.am
 # Automake file for Ethereal help files
 #
-# $Id: Makefile.am 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.am 12100 2004-09-25 10:15:08Z ulfl $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -32,8 +32,7 @@
 	capture_filters.txt \
 	display_filters.txt \
 	faq.txt             \
-	overview.txt        \
-	well_known.txt
+	overview.txt
 
 EXTRA_DIST = $(help_DATA) Makefile.nmake
 
diff -urN ethereal-0.10.6/help/Makefile.in ethereal-0.10.7/help/Makefile.in
--- ethereal-0.10.6/help/Makefile.in	2004-08-12 21:04:21.000000000 -0500
+++ ethereal-0.10.7/help/Makefile.in	2004-10-20 21:50:17.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -17,7 +17,7 @@
 # Makefile.am
 # Automake file for Ethereal help files
 #
-# $Id: Makefile.am 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.am 12100 2004-09-25 10:15:08Z ulfl $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald@ethereal.com>
@@ -97,6 +97,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -108,10 +111,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -192,8 +198,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -250,8 +256,7 @@
 	capture_filters.txt \
 	display_filters.txt \
 	faq.txt             \
-	overview.txt        \
-	well_known.txt
+	overview.txt
 
 
 EXTRA_DIST = $(help_DATA) Makefile.nmake
@@ -357,7 +362,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -377,7 +382,6 @@
 
 distclean: distclean-am
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-generic distclean-libtool
 
 dvi: dvi-am
@@ -400,7 +404,6 @@
 
 maintainer-clean: maintainer-clean-am
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/help/faq.txt ethereal-0.10.7/help/faq.txt
--- ethereal-0.10.6/help/faq.txt	2004-08-12 17:41:40.000000000 -0500
+++ ethereal-0.10.7/help/faq.txt	2004-10-20 17:34:27.000000000 -0500
@@ -13,16 +13,22 @@
 
    1.1 Where can I get help?
 
-   1.2 What protocols are currently supported?
+   1.2 How much does Ethereal cost?
 
-   1.3 Are there any plans to support {your favorite protocol}?
+   1.3 Can I use Ethereal commercially?
 
-   1.4 Can Ethereal read capture files from {your favorite network
+   1.4 Can I use Ethereal as part of my commercial product?
+
+   1.5 What protocols are currently supported?
+
+   1.6 Are there any plans to support {your favorite protocol}?
+
+   1.7 Can Ethereal read capture files from {your favorite network
    analyzer}?
 
-   1.5 What devices can Ethereal use to capture packets?
+   1.8 What devices can Ethereal use to capture packets?
 
-   1.6 How do you pronounce Ethereal? Where did the name come from?
+   1.9 How do you pronounce Ethereal? Where did the name come from?
 
 Downloading Ethereal:
 
@@ -223,9 +229,47 @@
    Subscription information and archives for all of Ethereal's mailing
    lists can be found at http://www.ethereal.com/lists
 
-   Q 1.2: What protocols are currently supported?
+   Q 1.2: How much does Ethereal cost?
 
-   A: There are currently 518 supported protocols and media, listed
+   A: Ethereal is "free software"; you can download it without paying any
+   license fee. The version of Ethereal you download isn't a "demo"
+   version, with limitations not present in a "full" version; it is the
+   full version.
+
+   The license under which Ethereal is issued is the GNU General Public
+   License. See the GNU GPL FAQ for some more information.
+
+   Q 1.3: Can I use Ethereal commercially?
+
+   A: Yes, if, for example, you mean "I work for a commercial
+   organization; can I use Ethereal to capture and analyze network
+   traffic in our company's networks or in our customer's networks?"
+
+   If you mean "Can I use Ethereal as part of my commercial product?",
+   see the next entry in the FAQ.
+
+   Q 1.4: Can I use Ethereal as part of my commercial product?
+
+   A: As noted, Ethereal is licended under the GNU General Public
+   License. The GPL imposes conditions on your use of GPL'ed code in your
+   own products; you cannot, for example, make a "derived work" from
+   Ethereal, by making modifications to it, and then sell the resulting
+   derived work and not allow recipients to give away the resulting work.
+   You must also make the changes you've made to the Ethereal source
+   available to all recipients of your modified version; those changes
+   must also be licensed under the terms of the GPL. See the GPL FAQ for
+   more details; in particular, note the answer to the question about
+   modifying a GPLed program and selling it commercially, and the
+   question about linking GPLed code with other code to make a
+   proprietary program.
+
+   You can combine a GPLed program such as Ethereal and a commercial
+   program as long as they communicate "at arm's length", as per this
+   item in the GPL FAQ.
+
+   Q 1.5: What protocols are currently supported?
+
+   A: There are currently 530 supported protocols and media, listed
    below. Descriptions can be found in the ethereal(1) man page.
 
             3GPP2 A11
@@ -267,6 +311,7 @@
             ATM LAN Emulation
             ATM OAM AAL
             AVS WLAN Capture header
+            AX/4000 Test Block
             Ad hoc On-demand Distance Vector Routing Protocol
             Address Resolution Protocol
             Aggregate Server Access Protocol
@@ -299,6 +344,7 @@
             Bearer Independent Call Control
             Bi-directional Fault Detection Control Message
             Blocks Extensible Exchange Protocol
+            Blubster/Piolet MANOLITO Protocol
             Boardwalk
             Boot Parameters
             Bootstrap Protocol
@@ -326,6 +372,7 @@
             Compuserve GIF
             Connectionless Lightweight Directory Access Protocol
             Cross Point Frame Injector
+            Cryptographic Message Syntax
             DCE Distributed Time Service Local Server
             DCE Distributed Time Service Provider
             DCE Name Service
@@ -366,6 +413,7 @@
             DCOM Remote Activation
             DEC Spanning Tree Protocol
             DFS Calls
+            DHCP Failover
             DHCPv6
             DICOM
             DNS Control Program Server
@@ -521,7 +569,10 @@
             Microsoft Distributed File System
             Microsoft Distributed Link Tracking Server Service
             Microsoft Encrypted File System Service
+            Microsoft Eventlog Service
             Microsoft Exchange MAPI
+            Microsoft File Replication Service
+            Microsoft File Replication Service API
             Microsoft Local Security Architecture
             Microsoft Local Security Architecture (Directory Services)
             Microsoft Messenger Service
@@ -581,6 +632,7 @@
             OpenBSD Packet Filter log file, pre 3.4
             Optimized Link State Routing Protocol
             PC NFS
+            PKCS#1
             POSTGRESQL
             PPP Bandwidth Allocation Control Protocol
             PPP Bandwidth Allocation Protocol
@@ -733,6 +785,10 @@
             X.25
             X.25 over TCP
             X.29
+            X.509 Authentication Framework
+            X.509 Certificate Extensions
+            X.509 Information Framework
+            X.509 Selected Attribute Types
             X11
             Xyplex
             Yahoo Messenger Protocol
@@ -748,13 +804,13 @@
             iSCSI
             iSNS
 
-   Q 1.3: Are there any plans to support {your favorite protocol}?
+   Q 1.6: Are there any plans to support {your favorite protocol}?
 
    A: Support for particular protocols is added to Ethereal as a result
    of people contributing that support; no formal plans for adding
    support for particular protocols in particular future releases exist.
 
-   Q 1.4: Can Ethereal read capture files from {your favorite network
+   Q 1.7: Can Ethereal read capture files from {your favorite network
    analyzer}?
 
    A: Support for particular protocols is added to Ethereal as a result
@@ -779,7 +835,7 @@
    Note that there is no guarantee that we will be able to
    reverse-engineer a capture file format.
 
-   Q 1.5: What devices can Ethereal use to capture packets?
+   Q 1.8: What devices can Ethereal use to capture packets?
 
    A: Ethereal can read live data from Ethernet, Token-Ring, FDDI, serial
    (PPP and SLIP) (if the OS on which it's running allows Ethereal to do
@@ -820,7 +876,7 @@
    other applications or equipment, even if it cannot itself capture on
    those network types.
 
-   Q 1.6: How do you pronounce Ethereal? Where did the name come from?
+   Q 1.9: How do you pronounce Ethereal? Where did the name come from?
 
    A: The English pronunciation can be found in Merriam-Webster's online
    dictionary at
@@ -974,31 +1030,10 @@
    to a single port so that you can plug your analyzer into that single
    port to sniff all traffic. You would have to check the documentation
    for the switch to see if this is possible and, if so, to see how to do
-   this. See, for example:
-     * this documentation from Cisco on the Switched Port Analyzer (SPAN)
-       feature on Catalyst switches;
-     * documentation from HP on how to set "monitoring"/"mirroring" on
-       ports on the console for HP Advancestack Switch 208 and 224;
-     * the "Network Monitoring Port Features" section of chapter 6 of
-       documentation from HP for HP ProCurve Switches 1600M, 2424M,
-       4000M, and 8000M;
-     * the "Switch Port-Mirroring" section of chapter 6 of documentation
-       from Extreme Networks for their Summit 200 switches;
-     * the documentation on "Configuring Port Mirroring and Monitoring"
-       in Foundry Networks' documentation for their FastIron Edge
-       Switches;
-     * the documentation on "Configuring Port Mirroring and Monitoring"
-       in Foundry Networks' documentation for their BigIron MG8 Layer 3
-       Switches;
-     * the "Port Monitor" subsection of the "Status Monitor and
-       Statistics" section of the documentation from Foundry Networks for
-       their EdgeIron 4802F and 10GC2F switches;
-     * the "Configuring Port Mirroring" section of chapter 3 of the
-       documentation from Foundry Networks for their EdgeIron 24G,
-       2402CF, and 4802CF switches;
-     * the documentation on "Configuring Port Mirroring and Monitoring"
-       in Foundry Networks' documentation for their other switches and
-       metro routers.
+   this. See the switch reference page on the Ethereal Wiki for
+   information on some switches. (Note that it's a Wiki, so you can
+   update or fix that information, or add additional information on those
+   switches or information on new switches, yourself.)
 
    Note also that many firewall/NAT boxes have a switch built into them;
    this includes many of the "cable/DSL router" boxes. If you have a box
@@ -1500,20 +1535,8 @@
      Gtk-CRITICAL **: file gtkwindow.c: line 3107 (gtk_window_resize):
      assertion `height > 0' failed.
 
-   A: This is a bug in Ethereal 0.10.5, which will be fixed in the next
-   release of Ethereal. To work around this bug:
-    1. On Windows, this message will appear in a console window; do NOT,
-       under any circumstances, close that window!
-    2. Make sure the "Save window size" prefrence is set the "User
-       Interface" prefrences in the preferences window opened by
-       "Preferences" under the "Edit" menu.
-    3. Quit Ethereal.
-    4. On Windows, a "Press any key to exit" message might appear in the
-       command window; if that message appears in the window, click on
-       that window and press any key (such as Enter).
-
-   The next time Ethereal starts, it should not produce that error
-   message.
+   A: This is a bug in Ethereal 0.10.5 and 0.10.5a, which is fixed in
+   Ethereal 0.10.6 and later releases.
 
    Q 5.18: When I run Tethereal with the "-x" option, it crashes with an
    error
@@ -1832,9 +1855,8 @@
    On Windows, you will not be able to capture in monitor mode on any
    interfaces, and you might not be able to capture in promiscuous mode,
    either. You might have some success in promiscuous mode with Centrino
-   interfaces, although you will need the not-yet-released Ethereal
-   0.10.6 in order to have the non-data packets recognized and properly
-   dissected.
+   interfaces, although you will need Ethereal 0.10.6 or later in order
+   to have the non-data packets recognized and properly dissected.
 
    You will not be able to capture in monitor mode on any other platforms
    (including Mac OS X). You might be able to capture in promiscuous
@@ -1980,11 +2002,11 @@
    Cards with Atheros Communications chipsets:
 
    You can capture raw 802.11 packets with AR5K cards on Linux systems
-   with the v5_ar5k drivers. You will need the Linux wireless-tools
-   version 25 or higher to put the card into monitor mode. It might also
-   be possible to do so with the madwifi driver. If you have information
-   on how to do this, please supply it to us, so that we can incorporate
-   that information into the FAQ in the future.
+   with the v5_ar5k or madwifi drivers. For the v5ar5k driver you will
+   need the Linux wireless-tools version 25 or higher to put the card
+   into monitor mode. If you're using the madwifi driver, you can put the
+   card into monitor mode using iwconfig interface mode monitor, followed
+   by iwconfig interface channel channel to select a channel (if needed).
 
    Other cards:
 
@@ -2223,4 +2245,4 @@
    For corrections/additions/suggestions for this web page (and not
    Ethereal support questions), please send email to
    ethereal-web[AT]ethereal.com .
-   Last modified: Sun, August 08 2004.
+   Last modified: Sat, September 25 2004.
diff -urN ethereal-0.10.6/help/toc ethereal-0.10.7/help/toc
--- ethereal-0.10.6/help/toc	2004-08-12 17:41:40.000000000 -0500
+++ ethereal-0.10.7/help/toc	2004-10-20 17:34:27.000000000 -0500
@@ -3,5 +3,4 @@
 Capturing:capturing.txt
 Capture Filters:capture_filters.txt
 Display Filters:display_filters.txt
-Well Known:well_known.txt
 FAQ:faq.txt
diff -urN ethereal-0.10.6/help/well_known.txt ethereal-0.10.7/help/well_known.txt
--- ethereal-0.10.6/help/well_known.txt	2004-08-12 17:41:40.000000000 -0500
+++ ethereal-0.10.7/help/well_known.txt	1969-12-31 18:00:00.000000000 -0600
@@ -1,112 +0,0 @@
-Well known things
------------------
-Following is a simple selection of well known numbers, useful when working with Ethereal. This is not intended to replace comprehensive network documentation.
-
-
-Ethernet addresses [RFC 1700]
------------------------------
-ff:ff:ff:ff:ff:ff Broadcast, send to all nodes
-
-Ethernet type field
--------------------
- 0 -   45 invalid
-46 - 1500 length field (Ethernet-II)
-   0x0800 IP(V4), internet protocol version 4
-   0x0806 ARP, address resolution protocol
-   0x8137 IPX, internet packet exchange (Novell)
-
-IP addresses
-------------
-127.0.0.0 - 127.255.255.255 local loopback, should never appear on the network
-224.0.0.0 - 239.255.255.255 multicasting [RFC1112], transmission to a host group
-            255.255.255.255 limited Broadcast, send to all nodes
-
-IP private addresses [RFC 1597]
--------------------------------
-The following IP addresses will not be routed, and should be used for private networks:
-   10.0.0.0 -  10.255.255.255 private in Class A
- 172.16.0.0 -  172.31.255.255 private in Class B
-192.168.0.0 - 192.168.255.255 private in Class C
-
-IP address classes
-------------------
-  0.1.0.0 - 126.0.0.0       Class A
-128.0.0.0 - 191.255.0.0     Class B
-192.0.1.0 - 223.255.255.0   Class C
-224.0.0.0 - 239.255.255.255 Class D
-240.0.0.0 - 247.255.255.255 Class E
-
-IP protocols
-------------
- 1 ICMP 		internet control message protocol v 4
- 6 TCP  		transmission control protocol
-17 UDP  		user datagram protocol
-58 ICMPv6 		internet control message protocol v 6
-
-TCP/UDP ports [RFC 1700]
-------------------------
-  20 FTP-data   file transfer protocol
-  21 FTP-ctrl   file transfer protocol
-  22 SSH        secure shell
-  23 Telnet     telecommunications networking
-  25 SMTP       simple mail transfer protocol
-  53 DNS        domain name server
-  67 BOOTPS     bootstrap protocol server / DHCP
-  68 BOOTPC     bootstrap protocol client / DHCP
-  69 TFTP       trivial file transfer protocol
-  80 HTTP       hypertext transfer protocol
- 102 ISO-TSAP   iso on tcp
- 110 POP3       post office protocol version 3
- 119 NNTP       network news transfer protocol
- 123 NTP        network time protocol
- 137 NETBIOS    name service
- 138 NETBIOS    datagram
- 139 NETBIOS    session
- 143 IMAP       interim mail access protocol v2
- 161 SNMP       simple network management protocol
- 194 IRC        internet relay chat protocol
- 389 LDAP       lightweight directory access protocol
- 443 HTTPS      http through SSL
-2401 CVSPSERVER concurrent versioning system
-
-
-
-RFC References
---------------
-ARP     RFC  826 "An Ethernet Address Resolution Protocol"
-BOOTP   RFC  951 "BOOTSTRAP PROTOCOL (BOOTP)"
-CSLIP   RFC 1144 "Compressing TCP/IP Headers for Low-Speed Serial Links"
-DHCP    RFC 2131 "Dynamic Host Configuration Protocol"
-DNS     RFC 1034,1035 "DOMAIN NAMES"
-FTP     RFC  959 "FILE TRANSFER PROTOCOL (FTP)"
-HTTP    RFC 2068 "Hypertext Transfer Protocol -- HTTP/1.1"
-ICMP    RFC  792 "INTERNET CONTROL MESSAGE PROTOCOL"
-IMAPv4  RFC 2060 "INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1"
-IPv4    RFC  791 "INTERNET PROTOCOL"
-IP      RFC  894 "Transmission of IP Datagrams over Ethernet Networks"
-IP      RFC  950 "Internet Standard Subnetting Procedure"
-IP      RFC 1112 "Host Extensions for IP Multicasting"
-IP      RFC 1812 "Requirements for IP Version 4 Routers"
-MIME    RFC 2045-2049 "Multipurpose Internet Mail Extensions (MIME)"
-NetBIOS RFC 1001,1002 "NetBIOS SERVICE ON A TCP/UDP TRANSPORT"
-NFS     RFC 1014,1057,1094,1813 "XDR/SUN-RPC/NFS/NFSv3"
-NNTP    RFC  977 "Network News Transfer Protocol"
-NTP     RFC  958 "Network Time Protocol (NTP)"
-POP2    RFC  918 "POST OFFICE PROTOCOL"
-POP3    RFC 1725 "Post Office Protocol - Version 3"
-PPP     RFC 1661 "The Point-to-Point Protocol (PPP)"
-PPP-MP  RFC 1990 "The PPP Multilink Protocol (MP)"
-RARP    RFC  903 "A Reverse Address Resolution Protocol"
-SLIP    RFC 1055 "TRANSMISSION OF IP DATAGRAMS OVER SERIAL LINES: SLIP"
-SMTP    RFC  821,822 "SIMPLE MAIL TRANSFER PROTOCOL"
-SNMP    RFC 1157,1901-10,2271-75 "A Simple Network Management Protocol (SNMP)"
-UDP     RFC  768 "User Datagram Protocol"
-URN     RFC 1737 "Functional Requirements for Uniform Resource Names"
-URL     RFC 1738 "Uniform Resource Locators (URL)"
-TCP     RFC  793 "TRANSMISSION CONTROL PROTOCOL"
-TELNET  RFC  854,855 "TELNET PROTOCOL SPECIFICATION"
-TELNET  RFC 1700 see: TELNET OPTIONS
-TFTP    RFC  783 "THE TFTP PROTOCOL (REVISION 2)"
-
-RFC 1166 "INTERNET NUMBERS" list of assigned IP addresses
-RFC 1700 "ASSIGNED NUMBERS" various assigned numbers, e.g. TCP/UDP ports
diff -urN ethereal-0.10.6/image/Makefile.nmake ethereal-0.10.7/image/Makefile.nmake
--- ethereal-0.10.6/image/Makefile.nmake	2004-08-12 17:41:41.000000000 -0500
+++ ethereal-0.10.7/image/Makefile.nmake	2004-10-20 17:34:28.000000000 -0500
@@ -1,10 +1,10 @@
 #
-# $Id: Makefile.nmake 11556 2004-07-28 21:13:27Z obiot $
+# $Id: Makefile.nmake 12359 2004-10-20 19:07:50Z gerald $
 #
 
 include ..\config.nmake
 
-ALL_RC=ethereal.rc libethereal.rc tethereal.rc capinfo.rc editcap.rc text2pcap.rc mergecap.rc wiretap.rc
+ALL_RC=ethereal.rc libethereal.rc tethereal.rc capinfos.rc editcap.rc text2pcap.rc mergecap.rc wiretap.rc
 all : $(ALL_RC)
 
 ethereal.rc   : ethereal.rc.in ..\config.nmake
@@ -22,10 +22,10 @@
 		-e s/@RC_VERSION@/$(RC_VERSION)/ \
 		< tethereal.rc.in > $@
 
-capinfo.rc    : capinfo.rc.in ..\config.nmake
+capinfos.rc    : capinfos.rc.in ..\config.nmake
 	sed -e s/@VERSION@/$(VERSION)/ \
 		-e s/@RC_VERSION@/$(RC_VERSION)/ \
-		< capinfo.rc.in > $@
+		< capinfos.rc.in > $@
 
 editcap.rc    : editcap.rc.in ..\config.nmake
 	sed -e s/@VERSION@/$(VERSION)/ \
diff -urN ethereal-0.10.6/image/capinfo.rc.in ethereal-0.10.7/image/capinfo.rc.in
--- ethereal-0.10.6/image/capinfo.rc.in	2004-08-12 17:41:41.000000000 -0500
+++ ethereal-0.10.7/image/capinfo.rc.in	1969-12-31 18:00:00.000000000 -0600
@@ -1,36 +0,0 @@
-#include "winver.h"
-
-ETHEREAL_ICON		ICON			"ethereal.ico"
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION @RC_VERSION@,0
- PRODUCTVERSION @RC_VERSION@,0
- FILEFLAGSMASK 0x0L
-#ifdef _DEBUG
- FILEFLAGS 0x3L
-#else
- FILEFLAGS 0x2L
-#endif
- FILEOS 0x4L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
-    BLOCK "StringFileInfo"
-    BEGIN
-        BLOCK "040904b0"
-        BEGIN
-            VALUE "CompanyName", "The Ethereal developer community\0"
-            VALUE "FileDescription", "Capinfo\0"
-            VALUE "FileVersion", "@VERSION@\0"
-            VALUE "InternalName", "Capinfo @VERSION@\0"
-            VALUE "LegalCopyright", "Copyright  2000 Gerald Combs <gerald@ethereal.com>, Gilbert Ramirez <gram@alumni.rice.edu> and others\0"
-            VALUE "OriginalFilename", "Capinfo.exe\0"
-            VALUE "ProductName", "Capinfo\0"
-            VALUE "ProductVersion", "@VERSION@\0"
-        END
-    END
-    BLOCK "VarFileInfo"
-    BEGIN
-        VALUE "Translation", 0x409, 1200
-    END
-END
diff -urN ethereal-0.10.6/image/capinfos.rc.in ethereal-0.10.7/image/capinfos.rc.in
--- ethereal-0.10.6/image/capinfos.rc.in	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/image/capinfos.rc.in	2004-10-20 17:34:28.000000000 -0500
@@ -0,0 +1,36 @@
+#include "winver.h"
+
+ETHEREAL_ICON		ICON			"ethereal.ico"
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION @RC_VERSION@,0
+ PRODUCTVERSION @RC_VERSION@,0
+ FILEFLAGSMASK 0x0L
+#ifdef _DEBUG
+ FILEFLAGS 0x3L
+#else
+ FILEFLAGS 0x2L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "CompanyName", "The Ethereal developer community\0"
+            VALUE "FileDescription", "Capinfos\0"
+            VALUE "FileVersion", "@VERSION@\0"
+            VALUE "InternalName", "Capinfos @VERSION@\0"
+            VALUE "LegalCopyright", "Copyright  2000 Gerald Combs <gerald@ethereal.com>, Gilbert Ramirez <gram@alumni.rice.edu> and others\0"
+            VALUE "OriginalFilename", "Capinfos.exe\0"
+            VALUE "ProductName", "Capinfos\0"
+            VALUE "ProductVersion", "@VERSION@\0"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
diff -urN ethereal-0.10.6/imscxdx.xml ethereal-0.10.7/imscxdx.xml
--- ethereal-0.10.6/imscxdx.xml	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/imscxdx.xml	2004-10-20 17:34:26.000000000 -0500
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+	<application id="167772151" name="IMS_Cx_Dx" uri="http://www.3GPP.org/ftp/Specs/html-info/29229.htm">
+
+		<!-- IMS Cx Dx Application -->
+		<command name="User-Authorization"       code="300" vendor-id="TGPP"/>
+		<command name="Server-Assignment"        code="301" vendor-id="TGPP"/>
+		<command name="Location-Info"            code="302" vendor-id="TGPP"/>
+		<command name="Multimedia-Auth"          code="303" vendor-id="TGPP"/>
+		<command name="Registration-Termination" code="304" vendor-id="TGPP"/>
+		<command name="Push-Profile"             code="305" vendor-id="TGPP"/>
+
+		<!-- ************************** IMS Cx Dx AVPS ********************* -->
+		<avp name="Visited-Network-Identifier" code="1" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="no">
+			<type type-name="OctetString"/>
+		</avp>
+		<avp name="Public-Identity" code="2" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="UTF8String"/>
+		</avp>
+		<avp name="Server-Name" code="3" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="UTF8String"/>
+		</avp>
+		<avp name="Server-Capabilities" code="4" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+                        <grouped>
+                                <gavp name="Mandatory-Capability"/>
+                                <gavp name="Optional-Capability"/>
+                                <gavp name="Server-Name"/>
+                        </grouped>
+		</avp>
+		<avp name="Mandatory-Capability" code="5" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="Unsigned32"/>
+		</avp>
+		<avp name="Optional-Capability" code="6" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="Unsigned32"/>
+		</avp>
+		<avp name="User-Data" code="7" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="OctetString"/>
+		</avp>
+		<avp name="SIP-Number-Auth-Items" code="8" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="Unsigned32"/>
+		</avp>
+		<avp name="SIP-Authentication-Scheme" code="9" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="UTF8String"/>
+		</avp>
+		<avp name="SIP-Authenticate" code="10" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="OctetString"/>
+		</avp>
+		<avp name="SIP-Authorization" code="11" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="OctetString"/>
+		</avp>
+		<avp name="SIP-Authentication-Context" code="12" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="OctetString"/>
+		</avp>
+		<!-- GROUPED -->
+		<avp name="SIP-Auth-Data-Item" code="13" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+                        <grouped>
+                                <gavp name="SIP-Item-Number"/>
+                                <gavp name="SIP-Authentication-Scheme"/>
+                                <gavp name="SIP-Authenticate"/>
+                                <gavp name="SIP-Authorization"/>
+                                <gavp name="SIP-Authentication-Context"/>
+                                <gavp name="Confidentiality-Key"/>
+                                <gavp name="Integrity-Key"/>
+                        </grouped>
+		</avp>
+		<avp name="SIP-Item-Number" code="14" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="Unsigned32"/>
+		</avp>
+		<avp name="Server-Assignment-Type" code="15" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+                        <type type-name="Unsigned32"/>
+                        <enum name="No-Assignment" code="0"/>
+                        <enum name="Registration" code="1"/>
+                        <enum name="Re-Registration" code="2"/>
+                        <enum name="Unregistered-User" code="3"/>
+                        <enum name="Timeout-Deregistration" code="4"/>
+                        <enum name="User-Deregistration" code="5"/>
+                        <enum name="Timeout-Deregistration-Store-Server-Name" code="6"/>
+                        <enum name="User-Deregistration-Store-Server-Name" code="7"/>
+                        <enum name="Administrative-Deregistration" code="8"/>
+                        <enum name="Authentication-Failure" code="9"/>
+                        <enum name="Authentication-Timeout" code="10"/>
+                        <enum name="Deregistration-Too-Much-Data" code="11"/>
+		</avp>
+		<!-- GROUPED -->
+		<avp name="Deregistration-Reason" code="16" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+                        <grouped>
+                                <gavp name="Reason-Code"/>
+                                <gavp name="Reason-Info"/>
+                        </grouped>
+		</avp>
+		<avp name="Reason-Code" code="17" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="Unsigned32"/>
+                        <enum name="Permanent-Termination" code="0"/>
+                        <enum name="New-Server-Assigned" code="1"/>
+                        <enum name="Server-Change" code="2"/>
+                        <enum name="Remove-S-CSCF" code="3"/>
+		</avp>
+		<avp name="Reason-Info" code="18" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="UTF8String"/>
+		</avp>
+		<!-- GROUPED -->
+		<avp name="Charging-Information" code="19" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+                        <grouped>
+                                <gavp name="Primary-Event-Charging-Function-Name"/>
+                                <gavp name="Secondary-Event-Charging-Function-Name"/>
+                                <gavp name="Primary-Charging-Collection-Function-Name"/>
+                                <gavp name="Secondary-Charging-Collection-Function-Name"/>
+                        </grouped>
+		</avp>
+		<avp name="Primary-Event-Charging-Function-Name" code="20" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="DiameterIdentity"/>
+		</avp>
+		<avp name="Secondary-Event-Charging-Function-Name" code="21" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="DiameterIdentity"/>
+		</avp>
+		<avp name="Primary-Charging-Collection-Function-Name" code="22" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="DiameterIdentity"/>
+		</avp>
+		<avp name="Secondary-Charging-Collection-Function-Name" code="23" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="DiameterIdentity"/>
+		</avp>
+		<avp name="User-Authorization-Type" code="24" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="Unsigned32"/>
+                        <enum name="Registration" code="0"/>
+                        <enum name="De-Registration" code="1"/>
+                        <enum name="Registration-And-Capabilities" code="2"/>
+		</avp>
+		<avp name="User-Data-Request-Type" code="25" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="Unsigned32"/>
+                        <enum name="Complete-Profile" code="0"/>
+                        <enum name="Registered-Profile" code="1"/>
+                        <enum name="Unregistered-Profile" code="2"/>
+		</avp>
+		<avp name="User-Data-Already-Available" code="26" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="Unsigned32"/>
+                        <enum name="User-Data-Not-Available" code="0"/>
+                        <enum name="User-Data-Already-Available" code="1"/>
+		</avp>
+		<avp name="Confidentiality-Key" code="27" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="OctetString"/>
+		</avp>
+		<avp name="Integrity-Key" code="28" mandatory="must" vendor-bit="must" vendor-id="TGPP" may-encrypt="yes">
+			<type type-name="OctetString"/>
+		</avp>
+		<!-- ************************ END IMS Cx Dx AVPS ******************* -->
+
+	</application>
diff -urN ethereal-0.10.6/in_cksum.c ethereal-0.10.7/in_cksum.c
--- ethereal-0.10.6/in_cksum.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/in_cksum.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,201 +0,0 @@
-/* in_cksum.c
- * 4.4-Lite-2 Internet checksum routine, modified to take a vector of
- * pointers/lengths giving the pieces to be checksummed.
- *
- * $Id: in_cksum.c 11400 2004-07-18 00:24:25Z guy $
- */
-
-/*
- * Copyright (c) 1988, 1992, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)in_cksum.c	8.1 (Berkeley) 6/10/93
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <glib.h>
-
-#include "in_cksum.h"
-
-/*
- * Checksum routine for Internet Protocol family headers (Portable Version).
- *
- * This routine is very heavily used in the network
- * code and should be modified for each CPU to be as fast as possible.
- */
-
-#define ADDCARRY(x)  (x > 65535 ? x -= 65535 : x)
-#define REDUCE {l_util.l = sum; sum = l_util.s[0] + l_util.s[1]; ADDCARRY(sum);}
-
-int
-in_cksum(const vec_t *vec, int veclen)
-{
-	register const guint16 *w;
-	register int sum = 0;
-	register int mlen = 0;
-	int byte_swapped = 0;
-
-	union {
-		guint8	c[2];
-		guint16	s;
-	} s_util;
-	union {
-		guint16 s[2];
-		guint32	l;
-	} l_util;
-
-	for (; veclen != 0; vec++, veclen--) {
-		if (vec->len == 0)
-			continue;
-		w = (const guint16 *)vec->ptr;
-		if (mlen == -1) {
-			/*
-			 * The first byte of this chunk is the continuation
-			 * of a word spanning between this chunk and the
-			 * last chunk.
-			 *
-			 * s_util.c[0] is already saved when scanning previous
-			 * chunk.
-			 */
-			s_util.c[1] = *(const guint8 *)w;
-			sum += s_util.s;
-			w = (const guint16 *)((const guint8 *)w + 1);
-			mlen = vec->len - 1;
-		} else
-			mlen = vec->len;
-		/*
-		 * Force to even boundary.
-		 */
-		if ((1 & (unsigned long) w) && (mlen > 0)) {
-			REDUCE;
-			sum <<= 8;
-			s_util.c[0] = *(const guint8 *)w;
-			w = (const guint16 *)((const guint8 *)w + 1);
-			mlen--;
-			byte_swapped = 1;
-		}
-		/*
-		 * Unroll the loop to make overhead from
-		 * branches &c small.
-		 */
-		while ((mlen -= 32) >= 0) {
-			sum += w[0]; sum += w[1]; sum += w[2]; sum += w[3];
-			sum += w[4]; sum += w[5]; sum += w[6]; sum += w[7];
-			sum += w[8]; sum += w[9]; sum += w[10]; sum += w[11];
-			sum += w[12]; sum += w[13]; sum += w[14]; sum += w[15];
-			w += 16;
-		}
-		mlen += 32;
-		while ((mlen -= 8) >= 0) {
-			sum += w[0]; sum += w[1]; sum += w[2]; sum += w[3];
-			w += 4;
-		}
-		mlen += 8;
-		if (mlen == 0 && byte_swapped == 0)
-			continue;
-		REDUCE;
-		while ((mlen -= 2) >= 0) {
-			sum += *w++;
-		}
-		if (byte_swapped) {
-			REDUCE;
-			sum <<= 8;
-			byte_swapped = 0;
-			if (mlen == -1) {
-				s_util.c[1] = *(const guint8 *)w;
-				sum += s_util.s;
-				mlen = 0;
-			} else
-				mlen = -1;
-		} else if (mlen == -1)
-			s_util.c[0] = *(const guint8 *)w;
-	}
-	if (mlen == -1) {
-		/* The last mbuf has odd # of bytes. Follow the
-		   standard (the odd byte may be shifted left by 8 bits
-		   or not as determined by endian-ness of the machine) */
-		s_util.c[1] = 0;
-		sum += s_util.s;
-	}
-	REDUCE;
-	return (~sum & 0xffff);
-}
-
-/*
- * Given the host-byte-order value of the checksum field in a packet
- * header, and the network-byte-order computed checksum of the data
- * that the checksum covers (including the checksum itself), compute
- * what the checksum field *should* have been.
- */
-guint16
-in_cksum_shouldbe(guint16 sum, guint16 computed_sum)
-{
-	guint32 shouldbe;
-
-	/*
-	 * The value that should have gone into the checksum field
-	 * is the negative of the value gotten by summing up everything
-	 * *but* the checksum field.
-	 *
-	 * We can compute that by subtracting the value of the checksum
-	 * field from the sum of all the data in the packet, and then
-	 * computing the negative of that value.
-	 *
-	 * "sum" is the value of the checksum field, and "computed_sum"
-	 * is the negative of the sum of all the data in the packets,
-	 * so that's -(-computed_sum - sum), or (sum + computed_sum).
-	 *
-	 * All the arithmetic in question is one's complement, so the
-	 * addition must include an end-around carry; we do this by
-	 * doing the arithmetic in 32 bits (with no sign-extension),
-	 * and then adding the upper 16 bits of the sum, which contain
-	 * the carry, to the lower 16 bits of the sum, and then do it
-	 * again in case *that* sum produced a carry.
-	 *
-	 * As RFC 1071 notes, the checksum can be computed without
-	 * byte-swapping the 16-bit words; summing 16-bit words
-	 * on a big-endian machine gives a big-endian checksum, which
-	 * can be directly stuffed into the big-endian checksum fields
-	 * in protocol headers, and summing words on a little-endian
-	 * machine gives a little-endian checksum, which must be
-	 * byte-swapped before being stuffed into a big-endian checksum
-	 * field.
-	 *
-	 * "computed_sum" is a network-byte-order value, so we must put
-	 * it in host byte order before subtracting it from the
-	 * host-byte-order value from the header; the adjusted checksum
-	 * will be in host byte order, which is what we'll return.
-	 */
-	shouldbe = sum;
-	shouldbe += g_ntohs(computed_sum);
-	shouldbe = (shouldbe & 0xFFFF) + (shouldbe >> 16);
-	shouldbe = (shouldbe & 0xFFFF) + (shouldbe >> 16);
-	return shouldbe;
-}
diff -urN ethereal-0.10.6/in_cksum.h ethereal-0.10.7/in_cksum.h
--- ethereal-0.10.6/in_cksum.h	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/in_cksum.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,14 +0,0 @@
-/* in_cksum.h
- * Declaration of  Internet checksum routine.
- *
- * $Id: in_cksum.h 11400 2004-07-18 00:24:25Z guy $
- */
-
-typedef struct {
-	const guint8 *ptr;
-	int	len;
-} vec_t;
-
-extern int in_cksum(const vec_t *vec, int veclen);
-
-extern guint16 in_cksum_shouldbe(guint16 sum, guint16 computed_sum);
diff -urN ethereal-0.10.6/ipproto.c ethereal-0.10.7/ipproto.c
--- ethereal-0.10.6/ipproto.c	2004-08-12 17:41:39.000000000 -0500
+++ ethereal-0.10.7/ipproto.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,215 +0,0 @@
-/* ipproto.c
- * Routines for converting IPv4 protocol/v6 nxthdr field into string
- *
- * $Id: ipproto.c 11621 2004-08-07 00:11:16Z jmayer $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#ifdef HAVE_NETDB_H
-# include <netdb.h>
-#endif
-
-#include <glib.h>
-
-#include "ipproto.h"
-#include <epan/packet.h>
-#include <epan/addr_resolv.h>
-#include <epan/dissectors/packet-ip.h>
-
-#ifdef NEED_SNPRINTF_H
-# include "snprintf.h"
-#endif
-
-static const value_string ipproto_val[] = {
-#if 0
-    { IP_PROTO_IP,	"IPv4" },
-#endif
-    { IP_PROTO_HOPOPTS,	"IPv6 hop-by-hop option" },
-    { IP_PROTO_ICMP,	"ICMP" },
-    { IP_PROTO_IGMP,	"IGMP" },
-    { IP_PROTO_GGP,	"GGP" },
-    { IP_PROTO_IPIP,	"IPIP" },
-#if 0
-    { IP_PROTO_IPV4,	"IPv4" },
-#endif
-    { IP_PROTO_STREAM,  "Stream" },
-    { IP_PROTO_TCP,	"TCP" },
-    { IP_PROTO_CBT,     "CBT" },
-    { IP_PROTO_EGP,	"EGP" },
-    { IP_PROTO_IGP,	"IGRP" },
-    { IP_PROTO_BBN_RCC, "BBN RCC" },
-    { IP_PROTO_NVPII,   "Network Voice" },
-    { IP_PROTO_PUP,	"PUP" },
-    { IP_PROTO_ARGUS,   "ARGUS" },
-    { IP_PROTO_EMCON,   "EMCON" },
-    { IP_PROTO_XNET,    "XNET" },
-    { IP_PROTO_CHAOS,   "CHAOS" },
-    { IP_PROTO_UDP,	"UDP" },
-    { IP_PROTO_MUX,     "Multiplex" },
-    { IP_PROTO_DCNMEAS, "DCN Measurement" },
-    { IP_PROTO_HMP,     "Host Monitoring" },
-    { IP_PROTO_PRM,     "Packet radio" },
-    { IP_PROTO_IDP,	"IDP" },
-    { IP_PROTO_TRUNK1,  "Trunk-1" },
-    { IP_PROTO_TRUNK2,  "Trunk-2" },
-    { IP_PROTO_LEAF1,   "Leaf-1" },
-    { IP_PROTO_LEAF2,   "Leaf-2" },
-    { IP_PROTO_RDP,     "Reliable Data" },
-    { IP_PROTO_IRT,     "IRT" },
-    { IP_PROTO_TP,	"ISO TP4" },
-    { IP_PROTO_BULK,    "Bulk Data" },
-    { IP_PROTO_MFE_NSP, "MFE NSP" },
-    { IP_PROTO_MERIT,   "Merit Internodal" },
-    { IP_PROTO_SEP,     "Sequential Exchange" },
-    { IP_PROTO_3PC,     "3rd Party Connect" },
-    { IP_PROTO_IDPR,    "Interdomain routing" },
-    { IP_PROTO_XTP,     "XTP" },
-    { IP_PROTO_DDP,     "Datagram delivery"},
-    { IP_PROTO_CMTP,    "Control Message" },
-    { IP_PROTO_TPPP,    "TP++" },
-    { IP_PROTO_IL,      "IL" },
-    { IP_PROTO_IPV6,	"IPv6" },
-    { IP_PROTO_SDRP,    "Source demand routing" },
-    { IP_PROTO_ROUTING,	"IPv6 routing" },
-    { IP_PROTO_FRAGMENT,"IPv6 fragment" },
-    { IP_PROTO_IDRP,    "IDRP" },
-    { IP_PROTO_RSVP,	"RSVP" },
-    { IP_PROTO_GRE,	"GRE" },
-    { IP_PROTO_MHRP,    "MHRP" },
-    { IP_PROTO_BNA,     "BNA" },
-    { IP_PROTO_ESP,	"ESP" },
-    { IP_PROTO_AH,	"AH" },
-    { IP_PROTO_INSLP,   "INSLP" },
-    { IP_PROTO_SWIPE,   "SWIPE" },
-    { IP_PROTO_NARP,    "NBMA ARP"},
-    { IP_PROTO_TLSP,    "TLSP Kryptonet" },
-    { IP_PROTO_SKIP,    "SKIP" },
-    { IP_PROTO_ICMPV6,	"ICMPv6" },
-    { IP_PROTO_NONE,	"IPv6 no next header" },
-    { IP_PROTO_DSTOPTS,	"IPv6 destination option" },
-    { IP_PROTO_MIPV6_OLD, "Mobile IPv6 (old)" },
-    { IP_PROTO_SATEXPAK,"SATNET EXPAK" },
-    { IP_PROTO_KRYPTOLAN, "Kryptolan" },
-    { IP_PROTO_RVD,     "Remote Virtual Disk" },
-    { IP_PROTO_IPPC,    "IPPC" },
-    { IP_PROTO_SATMON,  "SATNET Monitoring" },
-    { IP_PROTO_VISA,    "VISA" },
-    { IP_PROTO_IPCV,    "IPCV" },
-    { IP_PROTO_CPNX,    "CPNX" },
-    { IP_PROTO_CPHB,    "CPHB" },
-    { IP_PROTO_WSN,     "Wang Span" },
-    { IP_PROTO_PVP,     "Packet Video" },
-    { IP_PROTO_BRSATMON,"Backroom SATNET Mon" },
-    { IP_PROTO_SUNND,   "Sun ND Protocol" },
-    { IP_PROTO_WBMON,   "Wideband Mon" },
-    { IP_PROTO_WBEXPAK, "Wideband Expak" },
-    { IP_PROTO_EON,	"EON" },
-    { IP_PROTO_VMTP,    "VMTP" },
-    { IP_PROTO_SVMTP,   "Secure VMTP" },
-    { IP_PROTO_VINES,	"VINES" },
-    { IP_PROTO_TTP,     "TTP" },
-    { IP_PROTO_NSFNETIGP,"NSFNET IGP" },
-    { IP_PROTO_DGP,     "Dissimilar Gateway" },
-    { IP_PROTO_TCF,     "TCF" },
-    { IP_PROTO_EIGRP,	"EIGRP" },
-    { IP_PROTO_OSPF,	"OSPF IGP" },
-    { IP_PROTO_SPRITE,  "Sprite RPC" },
-    { IP_PROTO_LARP,    "Locus ARP" },
-    { IP_PROTO_MTP,     "Multicast Transport" },
-    { IP_PROTO_AX25,    "AX.25 Frames" },
-    { IP_PROTO_IPINIP,  "IP in IP" },
-    { IP_PROTO_MICP,    "MICP" },
-    { IP_PROTO_SCCCP,   "Semaphore" },
-    { IP_PROTO_ETHERIP, "Ether in IP" },
-    { IP_PROTO_ENCAP,	"ENCAP" },
-    { IP_PROTO_GMTP,    "GMTP" },
-    { IP_PROTO_IFMP,    "Ipsilon Flow" },
-    { IP_PROTO_PNNI,    "PNNI over IP" },
-    { IP_PROTO_PIM,	"PIM" },
-    { IP_PROTO_ARIS,    "ARIS" },
-    { IP_PROTO_SCPS,    "SCPS" },
-    { IP_PROTO_QNX,     "QNX" },
-    { IP_PROTO_AN,      "Active Networks" },
-    { IP_PROTO_IPCOMP,	"IPComp" },
-    { IP_PROTO_SNP,     "Sitara Networks" },
-    { IP_PROTO_COMPAQ,  "Compaq Peer" },
-    { IP_PROTO_IPX,     "IPX IN IP" },
-    { IP_PROTO_VRRP,	"VRRP" },
-    { IP_PROTO_PGM,     "PGM" },
-    { IP_PROTO_L2TP,    "Layer 2 Tunneling" },
-    { IP_PROTO_DDX,     "DDX" },
-    { IP_PROTO_IATP,    "IATP" },
-    { IP_PROTO_STP,     "STP" },
-    { IP_PROTO_SRP,     "SpectraLink" },
-    { IP_PROTO_UTI,     "UTI" },
-    { IP_PROTO_SMP,     "SMP" },
-    { IP_PROTO_SM,      "SM" },
-    { IP_PROTO_PTP,     "PTP" },
-    { IP_PROTO_ISIS,    "ISIS over IP" },
-    { IP_PROTO_FIRE,    "FIRE" },
-    { IP_PROTO_CRTP,    "CRTP" },
-    { IP_PROTO_CRUDP,   "CRUDP" },
-    { IP_PROTO_SSCOPMCE,"SSCOPMCE" },
-    { IP_PROTO_IPLT,    "IPLT" },
-    { IP_PROTO_SPS,     "Secure Packet" },
-    { IP_PROTO_PIPE,    "PIPE" },
-    { IP_PROTO_SCTP,    "SCTP" },
-    { IP_PROTO_FC,      "Fibre Channel" },
-    { IP_PROTO_RSVPE2EI,"RSVP E2EI" },
-    { IP_PROTO_MIPV6,	"Mobile IPv6" },
-    { IP_PROTO_AX4000,	"AX/4000 Testframe" },
-    { IP_PROTO_NCS_HEARTBEAT,"Novell NCS Heartbeat" },
-    { 0,		NULL },
-};
-
-const char *ipprotostr(int proto) {
-    static char buf[128];
-    const char *s;
-#ifdef HAVE_GETPROTOBYNUMBER
-    struct protoent *pe;
-#endif
-
-    if ((s = match_strval(proto, ipproto_val)) != NULL)
-	goto ok;
-
-#ifdef HAVE_GETPROTOBYNUMBER
-    /*
-     * XXX - have another flag for resolving network-layer
-     * protocol names?
-     */
-    if (g_resolv_flags != 0) {
-	pe = getprotobynumber(proto);
-	if (pe) {
-	    s = pe->p_name;
-	    goto ok;
-	}
-    }
-#endif
-
-    s = "Unknown";
-
-ok:
-    snprintf(buf, sizeof(buf), "%s", s);
-    return buf;
-}
diff -urN ethereal-0.10.6/ipproto.h ethereal-0.10.7/ipproto.h
--- ethereal-0.10.6/ipproto.h	2004-08-12 17:41:39.000000000 -0500
+++ ethereal-0.10.7/ipproto.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,187 +0,0 @@
-/* ipproto.h
- * Declarations of IP protocol numbers, and of routines for converting
- * IP protocol numbers into strings.
- *
- * $Id: ipproto.h 11621 2004-08-07 00:11:16Z jmayer $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifndef __IPPROTO_H__
-#define __IPPROTO_H__
-
-/*
- * IP protocol numbers.
- */
-#define IP_PROTO_IP		0		/* dummy for IP */
-#define IP_PROTO_HOPOPTS	0		/* IP6 hop-by-hop options - RFC1883 */
-#define IP_PROTO_ICMP		1		/* control message protocol - RFC792 */
-#define IP_PROTO_IGMP		2		/* group mgmt protocol - RFC1112 */
-#define IP_PROTO_GGP		3		/* gateway^2 (deprecated) - RFC823*/
-#define IP_PROTO_IPIP		4		/* IP inside IP - RFC2003*/
-#define IP_PROTO_IPV4		4		/* IP header */
-#define IP_PROTO_STREAM         5               /* Stream - RFC1190, RFC1819 */
-#define IP_PROTO_TCP		6		/* TCP - RFC792 */
-#define IP_PROTO_CBT            7               /* CBT - <A.Ballardie@cs.ucl.ac.uk> */
-#define IP_PROTO_EGP		8		/* exterior gateway protocol - RFC888 */
-#define IP_PROTO_IGP		9               /* any private interior gateway protocol ... */
-#define IP_PROTO_IGRP		9               /* ... and used by Cisco for IGRP */
-#define IP_PROTO_BBN_RCC        10              /* BBN RCC Monitoring */
-#define IP_PROTO_NVPII          11              /* Network Voice Protocol - RFC741 */
-#define IP_PROTO_PUP		12		/* pup */
-#define IP_PROTO_ARGUS          13              /* ARGUS */
-#define IP_PROTO_EMCON          14              /* EMCON */
-#define IP_PROTO_XNET           15              /* Cross net debugger - IEN158 */
-#define IP_PROTO_CHAOS          16              /* CHAOS */
-#define IP_PROTO_UDP		17		/* user datagram protocol - RFC768 */
-#define IP_PROTO_MUX            18              /* multiplexing - IEN90 */
-#define IP_PROTO_DCNMEAS        19              /* DCN Measurement Subsystems */
-#define IP_PROTO_HMP            20              /* Host Monitoring - RFC869 */
-#define IP_PROTO_PRM            21              /* Packet radio measurement */
-#define IP_PROTO_IDP		22		/* xns idp */
-#define IP_PROTO_TRUNK1         23
-#define IP_PROTO_TRUNK2         24
-#define IP_PROTO_LEAF1          25
-#define IP_PROTO_LEAF2          26
-#define IP_PROTO_RDP            27              /* Reliable Data Protocol - RFC908 */
-#define IP_PROTO_IRT            28              /* Internet Reliable Transation - RFC938 */
-#define IP_PROTO_TP		29 		/* tp-4 w/ class negotiation - RFC905 */
-#define IP_PROTO_BULK           30              /* Bulk Data Transfer Protocol - RFC969 */
-#define IP_PROTO_MFE_NSP        31              /* MFE Network Services Protocol */
-#define IP_PROTO_MERIT          32              /* MERIT Internodal Protocol */
-#define IP_PROTO_SEP            33              /* Sequential Exchange Protocol */
-#define IP_PROTO_3PC            34              /* Third party connect protocol */
-#define IP_PROTO_IDPR           35              /* Interdomain policy routing protocol */
-#define IP_PROTO_XTP            36              /* XTP */
-#define IP_PROTO_DDP            37              /* Datagram Delivery Protocol */
-#define IP_PROTO_CMTP           38              /* Control Message Transport Protocol */
-#define IP_PROTO_TPPP           39              /* TP++ Transport Protocol */
-#define IP_PROTO_IL             40              /* IL Transport Protocol */
-#define IP_PROTO_IPV6		41		/* IP6 header */
-#define IP_PROTO_SDRP           42              /* Source demand routing protocol */
-#define IP_PROTO_ROUTING	43		/* IP6 routing header */
-#define IP_PROTO_FRAGMENT	44		/* IP6 fragmentation header */
-#define IP_PROTO_IDRP           45              /* Inter-Domain Routing Protocol */
-#define IP_PROTO_RSVP           46              /* Resource ReSerVation protocol */
-#define IP_PROTO_GRE		47		/* General Routing Encapsulation */
-#define IP_PROTO_MHRP           48              /* Mobile Host Routing Protocol */
-#define IP_PROTO_BNA            49              /* BNA */
-#define IP_PROTO_ESP		50		/* Encap Security Payload for IPv6 - RFC2406 */
-#define IP_PROTO_AH		51		/* Authentication Header for IPv6 - RFC2402*/
-#define IP_PROTO_INSLP          52              /* Integrated Net Layer Security */
-#define IP_PROTO_SWIPE          53              /* IP with Encryption */
-#define IP_PROTO_NARP           54              /* NBMA Address resolution protocol - RFC1735 */
-#define IP_PROTO_MOBILE         55              /* IP Mobility */
-#define IP_PROTO_TLSP           56              /* Transport Layer Security Protocol using */
-                                                /* Kryptonet key management */
-#define IP_PROTO_SKIP           57              /* SKIP */
-#define IP_PROTO_ICMPV6		58		/* ICMP6  - RFC1883*/
-#define IP_PROTO_NONE		59		/* IP6 no next header - RFC1883 */
-#define IP_PROTO_DSTOPTS	60		/* IP6 destination options - RFC1883 */
-/* 61 is reserved by IANA for any host internal protocol */
-/*
- * The current Protocol Numbers list says that the IP protocol number for
- * mobility headers is 135; it cites draft-ietf-mobileip-ipv6-24, but
- * that draft doesn't actually give a number.
- *
- * It appears that 62 used to be used, even though that's assigned to
- * a protocol called CFTP; however, the only reference for CFTP is a
- * Network Message from BBN back in 1982, so, for now, we support 62,
- * as well as 135, as a protocol number for mobility headers.
- */
-#define IP_PROTO_MIPV6_OLD	62		/* Mobile IPv6  */
-/* 63 is reserved by IANA for any local network */
-#define IP_PROTO_SATEXPAK       64
-#define IP_PROTO_KRYPTOLAN      65
-#define IP_PROTO_RVD            66              /* MIT Remote virtual disk protocol */
-#define IP_PROTO_IPPC           67              /* Internet Pluribus Packet Core */
-/* 68 is reserved by IANA for any distributed file system */
-#define IP_PROTO_SATMON         69              /* SATNET Monitoring */
-#define IP_PROTO_VISA           70              /* VISA Protocol */
-#define IP_PROTO_IPCV           71              /* Internet Packet Core Utility */
-#define IP_PROTO_CPNX           72              /* Computer Protocol Network Executive */
-#define IP_PROTO_CPHB           73              /* Computer Protocol Heart Beat */
-#define IP_PROTO_WSN            74              /* WANG Span Network */
-#define IP_PROTO_PVP            75              /* Packet Video Protocol */
-#define IP_PROTO_BRSATMON       76              /* Backroon SATNET Monitoring */
-#define IP_PROTO_SUNND          77              /* SUN ND Protocol - Temporary */
-#define IP_PROTO_WBMON          78              /* Wideband Monitoring */
-#define IP_PROTO_WBEXPAK        79              /* Wideband EXPAK */
-#define IP_PROTO_EON		80		/* ISO cnlp */
-#define IP_PROTO_VMTP           81
-#define IP_PROTO_SVMTP          82              /* Secure VMTP */
-#define IP_PROTO_VINES		83		/* Vines over raw IP */
-#define IP_PROTO_TTP            84
-#define IP_PROTO_NSFNETIGP      85              /* NSFNET IGP */
-#define IP_PROTO_DGP            86              /* Dissimilar Gateway Protocol */
-#define IP_PROTO_TCF            87        
-#define IP_PROTO_EIGRP		88
-#define IP_PROTO_OSPF		89              /* OSPF Interior Gateway Protocol - RFC1583 */
-#define IP_PROTO_SPRITE         90              /* SPRITE RPC protocol */
-#define IP_PROTO_LARP           91              /* Locus Address Resolution Protocol */
-#define IP_PROTO_MTP            92              /* Multicast Transport Protocol */
-#define IP_PROTO_AX25           93              /* AX.25 frames */
-#define IP_PROTO_IPINIP         94              /* IP within IP Encapsulation protocol */
-#define IP_PROTO_MICP           95              /* Mobile Internetworking Control Protocol */
-#define IP_PROTO_SCCCP          96              /* Semaphore communications security protocol */
-#define IP_PROTO_ETHERIP	97		/* Ethernet-within-IP - RFC 3378 */
-#define IP_PROTO_ENCAP		98		/* encapsulation header - RFC1241*/
-/* 99 is reserved by IANA for any private encryption scheme */
-#define IP_PROTO_GMTP           100
-#define IP_PROTO_IFMP           101             /* Ipsilon flow management protocol */
-#define IP_PROTO_PNNI           102             /* PNNI over IP */
-#define IP_PROTO_PIM		103		/* Protocol Independent Mcast */
-#define IP_PROTO_ARIS           104
-#define IP_PROTO_SCPS           105
-#define IP_PROTO_QNX            106
-#define IP_PROTO_AN             107             /* Active Networks */
-#define IP_PROTO_IPCOMP		108		/* IP payload compression - RFC2393 */
-#define IP_PROTO_SNP            109             /* Sitara Networks Protocol */
-#define IP_PROTO_COMPAQ         110             /* Compaq Peer Protocol */
-#define IP_PROTO_IPX            111             /* IPX over IP */
-#define IP_PROTO_VRRP		112		/* Virtual Router Redundancy Protocol */
-#define IP_PROTO_PGM		113		/* Pragmatic General Multicast */
-/* 114 is reserved by IANA for any zero hop protocol */
-#define IP_PROTO_L2TP           115             /* Layer Two Tunnelling Protocol */
-#define IP_PROTO_DDX            116             /* D-II Data Exchange */
-#define IP_PROTO_IATP           117             /* Interactive Agent Transfer Protocol */
-#define IP_PROTO_STP            118             /* Schedule Transfer Protocol */
-#define IP_PROTO_SRP            119             /* Spectralink Radio Protocol */
-#define IP_PROTO_UTI            120
-#define IP_PROTO_SMP            121             /* Simple Message Protocol */
-#define IP_PROTO_SM             122
-#define IP_PROTO_PTP            123             /* Performance Transparency Protocol */
-#define IP_PROTO_ISIS           124             /* ISIS over IPv4 */
-#define IP_PROTO_FIRE           125
-#define IP_PROTO_CRTP           126             /* Combat Radio Transport Protocol */
-#define IP_PROTO_CRUDP          127             /* Combat Radio User Datagram */
-#define IP_PROTO_SSCOPMCE       128
-#define IP_PROTO_IPLT           129
-#define IP_PROTO_SPS            130             /* Secure Packet Shield */
-#define IP_PROTO_PIPE           131             /* Private IP Encapsulation within IP */
-#define IP_PROTO_SCTP		132		/* Stream Control Transmission Protocol */
-#define IP_PROTO_FC             133             /* Fibre Channel */
-#define IP_PROTO_RSVPE2EI       134             /* RSVP E2E Ignore - RFC3175 */
-#define IP_PROTO_MIPV6          135             /* Mobile IPv6  */
-#define IP_PROTO_AX4000		173		/* AX/4000 Testblock - non IANA */
-#define IP_PROTO_NCS_HEARTBEAT  224             /* Novell NCS Heartbeat - http://support.novell.com/cgi-bin/search/searchtid.cgi?/10071158.htm */
-
-extern const char *ipprotostr(int proto);
-
-#endif /* ipproto.h */
diff -urN ethereal-0.10.6/make-authors-format.pl ethereal-0.10.7/make-authors-format.pl
--- ethereal-0.10.6/make-authors-format.pl	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/make-authors-format.pl	2004-10-20 17:34:27.000000000 -0500
@@ -0,0 +1,89 @@
+# $Id: make-authors-format.pl 12341 2004-10-18 15:14:13Z gerald $
+
+# Convert AUTHORS-SHORT file for use in man page and HTML documentation
+# after processing through pod2man and pod2html.
+#
+# Must be called via perlnoutf.
+
+use strict;
+
+print "=for html <pre>\n\n";
+print "=for man .nf\n\n";
+
+while (<>) {
+	printline();
+}
+
+print "\n=for html </pre>\n";
+print "\n=for man .fi\n";
+
+sub printline {
+	my $line = shift || $_;
+#
+# Translate UTF-8 characters to the E<> escapes handled by Pod::Man
+# (and only those, since they're a subset of HTML entities)
+#
+	$line =~ s/\xc3\x80/E<Agrave>/g;
+	$line =~ s/\xc3\x81/E<Aacute>/g;
+	$line =~ s/\xc3\x82/E<Acirc>/g;
+	$line =~ s/\xc3\x83/E<Atilde>/g;
+	$line =~ s/\xc3\x84/E<Auml>/g;
+	$line =~ s/\xc3\x85/E<Aring>/g;
+	$line =~ s/\xc3\x86/E<AElig>/g;
+	$line =~ s/\xc3\x87/E<Ccedil>/g;
+	$line =~ s/\xc3\x88/E<Egrave>/g;
+	$line =~ s/\xc3\x89/E<Eacute>/g;
+	$line =~ s/\xc3\x8a/E<Ecirc>/g;
+	$line =~ s/\xc3\x8b/E<Euml>/g;
+	$line =~ s/\xc3\x8c/E<Igrave>/g;
+	$line =~ s/\xc3\x8d/E<Iacute>/g;
+	$line =~ s/\xc3\x8e/E<Icirc>/g;
+	$line =~ s/\xc3\x8f/E<Iuml>/g;
+	$line =~ s/\xc3\x90/E<ETH>/g;
+	$line =~ s/\xc3\x91/E<Ntilde>/g;
+	$line =~ s/\xc3\x92/E<Ograve>/g;
+	$line =~ s/\xc3\x93/E<Oacute>/g;
+	$line =~ s/\xc3\x94/E<Ocirc>/g;
+	$line =~ s/\xc3\x95/E<Otilde>/g;
+	$line =~ s/\xc3\x96/E<Ouml>/g;
+	$line =~ s/\xc3\x98/E<Oslash>/g;
+	$line =~ s/\xc3\x99/E<Ugrave>/g;
+	$line =~ s/\xc3\x9a/E<Uacute>/g;
+	$line =~ s/\xc3\x9b/E<Ucirc>/g;
+	$line =~ s/\xc3\x9c/E<Uuml>/g;
+	$line =~ s/\xc3\x9d/E<Yacute>/g;
+	$line =~ s/\xc3\x9e/E<THORN>/g;
+	$line =~ s/\xc3\x9f/E<szlig>/g;
+	$line =~ s/\xc3\xa0/E<agrave>/g;
+	$line =~ s/\xc3\xa1/E<aacute>/g;
+	$line =~ s/\xc3\xa2/E<acirc>/g;
+	$line =~ s/\xc3\xa3/E<atilde>/g;
+	$line =~ s/\xc3\xa4/E<auml>/g;
+	$line =~ s/\xc3\xa5/E<aring>/g;
+	$line =~ s/\xc3\xa6/E<aelig>/g;
+	$line =~ s/\xc3\xa7/E<ccedil>/g;
+	$line =~ s/\xc3\xa8/E<egrave>/g;
+	$line =~ s/\xc3\xa9/E<eacute>/g;
+	$line =~ s/\xc3\xaa/E<ecirc>/g;
+	$line =~ s/\xc3\xab/E<euml>/g;
+	$line =~ s/\xc3\xac/E<igrave>/g;
+	$line =~ s/\xc3\xad/E<iacute>/g;
+	$line =~ s/\xc3\xae/E<icirc>/g;
+	$line =~ s/\xc3\xaf/E<iuml>/g;
+	$line =~ s/\xc3\xb0/E<eth>/g;
+	$line =~ s/\xc3\xb1/E<ntilde>/g;
+	$line =~ s/\xc3\xb2/E<ograve>/g;
+	$line =~ s/\xc3\xb3/E<oacute>/g;
+	$line =~ s/\xc3\xb4/E<ocirc>/g;
+	$line =~ s/\xc3\xb5/E<otilde>/g;
+	$line =~ s/\xc3\xb6/E<ouml>/g;
+	$line =~ s/\xc3\xb8/E<oslash>/g;
+	$line =~ s/\xc3\xb9/E<ugrave>/g;
+	$line =~ s/\xc3\xba/E<uacute>/g;
+	$line =~ s/\xc3\xbb/E<ucirc>/g;
+	$line =~ s/\xc3\xbc/E<uuml>/g;
+	$line =~ s/\xc3\xbd/E<yacute>/g;
+	$line =~ s/\xc3\xbe/E<thorn>/g;
+	$line =~ s/\xc3\xbf/E<yuml>/g;
+	print $line;
+}
diff -urN ethereal-0.10.6/make-authors-short.pl ethereal-0.10.7/make-authors-short.pl
--- ethereal-0.10.6/make-authors-short.pl	2004-08-12 17:41:31.000000000 -0500
+++ ethereal-0.10.7/make-authors-short.pl	2004-10-20 17:34:18.000000000 -0500
@@ -1,15 +1,19 @@
-#!/usr/bin/perl -w
-
-# $Id: make-authors-short.pl 11728 2004-08-12 21:47:47Z gerald $
+# $Id: make-authors-short.pl 12341 2004-10-18 15:14:13Z gerald $
 
 # Remove tasks from individual author entries from AUTHORS file
 # for use in the about dialog.
+#
+# Must be called via perlnoutf.
 
 use strict;
 
 my $subinfo=0;
 my $nextline;
 
+$_ = <>;
+s/\xef\xbb\xbf//;		# Skip UTF-8 byte order mark
+print unless /^\n/;
+
 while (<>) {
 	if (/(.*){/) {
 		$subinfo = 1;
@@ -22,7 +26,6 @@
 	} elsif ($subinfo == 1) {
 		next;
 	} else {
-		s/^$/ /;	# Make it a verbatim paragraph
 		print;
 	}
 }
diff -urN ethereal-0.10.6/manuf ethereal-0.10.7/manuf
--- ethereal-0.10.6/manuf	2004-08-12 17:41:31.000000000 -0500
+++ ethereal-0.10.7/manuf	2004-10-20 17:34:18.000000000 -0500
@@ -1,7 +1,7 @@
 # 
 # /etc/manuf - Ethernet vendor codes, and well-known MAC addresses
 #
-# $Id: manuf 11619 2004-08-06 21:17:01Z jmayer $
+# $Id: manuf 12341 2004-10-18 15:14:13Z gerald $
 #
 # Laurent Deniel <laurent.deniel [AT] free.fr>
 #
@@ -249,7 +249,7 @@
 00:00:C7	Arix                   # ARIX CORPORATION
 00:00:C8	AltosCompu             # ALTOS COMPUTER SYSTEMS
 00:00:C9	Emulex                 # EMULEX CORPORATION
-00:00:CA	Applitek
+00:00:CA	ArrisInter             # ARRIS International
 00:00:CB	Compu-Shac             # COMPU-SHACK ELECTRONIC GMBH
 00:00:CC	Densan                 # DENSAN CO., LTD.
 00:00:CD	AlliedTele             # Allied Telesyn Research Ltd.
@@ -371,7 +371,7 @@
 00:01:41	CablePrint             # CABLE PRINT
 00:01:42	Cisco                  # Cisco Systems, Inc.
 00:01:43	Cisco                  # Cisco Systems, Inc.
-00:01:44	CerevaNetw             # Cereva Networks, Inc.
+00:01:44	Emc                    # EMC Corporation
 00:01:45	Winsystems             # WINSYSTEMS, INC.
 00:01:46	TescoContr             # Tesco Controls, Inc.
 00:01:47	ZhoneTechn             # Zhone Technologies
@@ -2679,7 +2679,7 @@
 00:0A:6C	Walchem                # Walchem Corporation
 00:0A:6D	EksElektro             # EKS Elektronikservice GmbH
 00:0A:6E	BroadcastT             # Broadcast Technology Limited
-00:0A:6F	ZyteraTech             # ZyTera Technologies Inc.
+00:0A:6F	ZyflexTech             # ZyFLEX Technologies Inc
 00:0A:70	MplsForum              # MPLS Forum
 00:0A:71	AvrioTechn             # Avrio Technologies, Inc
 00:0A:72	Simpletech             # SimpleTech, Inc.
@@ -3618,7 +3618,7 @@
 00:0E:17	Private
 00:0E:18	MyaTechnol             # MyA Technology
 00:0E:19	LogicacmgP             # LogicaCMG Pty Ltd
-00:0E:1A	Private
+00:0E:1A	JpsCommuni             # JPS Communications
 00:0E:1B	Iav                    # IAV GmbH
 00:0E:1C	Hach                   # Hach Company
 00:0E:1D	Private
@@ -4123,7 +4123,7 @@
 00:10:10	Initio                 # INITIO CORPORATION
 00:10:11	Cisco                  # CISCO SYSTEMS, INC.
 00:10:12	ProcessorI             # PROCESSOR SYSTEMS (I) PVT LTD
-00:10:13	Industrial             # INDUSTRIAL COMPUTER SOURCE
+00:10:13	Kontron
 00:10:14	Cisco                  # CISCO SYSTEMS, INC.
 00:10:15	Oomon                  # OOmon Inc.
 00:10:16	TSqware                # T.SQWARE
@@ -4630,6 +4630,153 @@
 00:12:0C	Ce-Infosys             # CE-Infosys Pte Ltd
 00:12:0D	AdvancedTe             # Advanced Telecommunication Technologies, Inc.
 00:12:0E	Abocom
+00:12:0F	Ieee8023               # IEEE 802.3
+00:12:10	Wideray                # WideRay Corp
+00:12:11	ProtechnaH             # Protechna Herbst GmbH & Co. KG
+00:12:12	PlusVision             # PLUS Vision Corporation
+00:12:13	Metrohm                # Metrohm AG
+00:12:14	KoenigBaue             # Koenig & Bauer AG
+00:12:15	IstorNetwo             # iStor Networks, Inc.
+00:12:16	IcpInterne             # ICP Internet Communication Payment AG
+00:12:17	Cisco-Link             # Cisco-Linksys, LLC
+00:12:18	Aruze                  # ARUZE Corporation
+00:12:19	AheadCommu             # Ahead Communication Systems Inc
+00:12:1A	TechnoSoft             # Techno Soft Systemnics Inc.
+00:12:1B	SoundDevic             # Sound Devices, LLC
+00:12:1C	ParrotSA               # PARROT S.A.
+00:12:1D	Netfabric              # Netfabric Corporation
+00:12:1E	JuniperNet             # Juniper Networks, Inc.
+00:12:1F	HardingInt             # Harding Intruments
+00:12:20	Cadco                  # Cadco Systems
+00:12:21	BBraunMels             # B.Braun Melsungen AG
+00:12:22	SkardinUk              # Skardin (UK) Ltd
+00:12:23	Pixim
+00:12:24	Nexql                  # NexQL Corporation
+00:12:25	MotorolaBc             # Motorola BCS
+00:12:26	JapanDirex             # Japan Direx Corporation
+00:12:27	FranklinEl             # Franklin Electric Co., Inc.
+00:12:28	Data                   # Data Ltd.
+00:12:29	BroadeasyT             # BroadEasy Technologies Co.,Ltd
+00:12:2A	VtechTelec             # VTech Telecommunications Ltd.
+00:12:2B	VirbiagePt             # Virbiage Pty Ltd
+00:12:2C	SoenenCont             # Soenen Controls N.V.
+00:12:2D	Sinett                 # SiNett Corporation
+00:12:2E	SignalTech             # Signal Technology - AISD
+00:12:2F	SaneiElect             # Sanei Electric Inc.
+00:12:30	PicasoInfo             # Picaso Infocommunication CO., LTD.
+00:12:31	MotionCont             # Motion Control Systems, Inc.
+00:12:32	LewizCommu             # LeWiz Communications Inc.
+00:12:33	JrcTokki               # JRC TOKKI Co.,Ltd.
+00:12:34	CamilleBau             # Camille Bauer
+00:12:35	Andrew                 # Andrew Corporation
+00:12:36	TidalNetwo             # Tidal Networks
+00:12:37	TexasInstr             # Texas Instruments
+00:12:38	SetaboxTec             # SetaBox Technology Co., Ltd.
+00:12:39	SNet                   # S Net Systems Inc.
+00:12:3A	Posystech              # Posystech Inc., Co.
+00:12:3B	KeroAps                # KeRo Systems ApS
+00:12:3C	Ip3Network             # IP3 Networks, Inc.
+00:12:3D	Ges
+00:12:3E	EruneTechn             # ERUNE technology Co., Ltd.
+00:12:3F	Dell                   # Dell Inc
+00:12:40	AmoiElectr             # AMOI ELECTRONICS CO.,LTD
+00:12:41	A2iMarketi             # a2i marketing center
+00:12:42	Millennial             # Millennial Net
+00:12:43	Cisco
+00:12:44	Cisco
+00:12:45	ZellwegerA             # Zellweger Analytics, Inc.
+00:12:46	TOMTechnol             # T.O.M TECHNOLOGY INC..
+00:12:47	SamsungEle             # Samsung Electronics Co., Ltd.
+00:12:48	Kashya                 # Kashya Inc.
+00:12:49	DeltaElett             # Delta Elettronica S.p.A.
+00:12:4A	DedicatedD             # Dedicated Devices, Inc.
+00:12:4B	ChipconAs              # Chipcon AS
+00:12:4C	Bbwm                   # BBWM Corporation
+00:12:4D	InduconBv              # Inducon BV
+00:12:4E	XacAutomat             # XAC AUTOMATION CORP.
+00:12:4F	TycoTherma             # Tyco Thermal Controls LLC.
+00:12:50	TokyoAirca             # Tokyo Aircaft Instrument Co., Ltd.
+00:12:51	Silink
+00:12:52	CitronixLl             # Citronix, LLC
+00:12:53	Audiodev               # AudioDev AB
+00:12:54	SpectraTec             # Spectra Technologies Holdings Company Ltd
+00:12:55	Neteffect              # NetEffect Incorporated
+00:12:56	LgInformat             # LG INFORMATION & COMM.
+00:12:57	LeapcommCo             # LeapComm Communication Technologies Inc.
+00:12:58	ActivisPol             # Activis Polska
+00:12:59	ThermoElec             # THERMO ELECTRON KARLSRUHE
+00:12:5A	Microsoft              # Microsoft Corporation
+00:12:5B	KaimeiElec             # KAIMEI ELECTRONI
+00:12:5C	GreenHills             # Green Hills Software, Inc.
+00:12:5D	Cybernet               # CyberNet Inc.
+00:12:5E	Caen
+00:12:5F	Awind                  # AWIND Inc.
+00:12:60	StantonMag             # Stanton Magnetics,inc.
+00:12:61	Adaptix                # Adaptix, Inc
+00:12:62	NokiaDanma             # Nokia Danmark A/S
+00:12:63	DataVoiceT             # Data Voice Technologies GmbH
+00:12:64	DaumElectr             # daum electronic gmbh
+00:12:65	EnerdyneTe             # Enerdyne Technologies, Inc.
+00:12:66	Private
+00:12:67	Matsushita             # Matsushita Electronic Components Co., Ltd.
+00:12:68	IpsDOO                 # IPS d.o.o.
+00:12:69	ValueElect             # Value Electronics
+00:12:6A	Optoelectr             # OPTOELECTRONICS Co., Ltd.
+00:12:6B	AscaladeCo             # Ascalade Communications Limited
+00:12:6C	Visonic                # Visonic Ltd.
+00:12:6D	University             # University of California, Berkeley
+00:12:6E	SeidelElek             # Seidel Elektronik GmbH Nfg.KG
+00:12:6F	RaysonTech             # Rayson Technology Co., Ltd.
+00:12:70	NgesDenro              # NGES Denro Systems
+00:12:71	Measuremen             # Measurement Computing Corp
+00:12:72	ReduxCommu             # Redux Communications Ltd.
+00:12:73	Stoke                  # Stoke Inc
+00:12:74	NitLab                 # NIT lab
+00:12:75	Moteiv                 # Moteiv Corporation
+00:12:76	MicrosolHo             # Microsol Holdings Ltd.
+00:12:77	KorenixTec             # Korenix Technologies Co., Ltd.
+00:12:78	Internatio             # International Bar Code
+00:12:79	HewlettPac             # Hewlett Packard
+00:12:7A	SanyuIndus             # Sanyu Industry Co.,Ltd.
+00:12:7B	ViaNetwork             # VIA Networking Technologies, Inc.
+00:12:7C	Pm-Luft                # PM-LUFT AB
+00:12:7D	Mobilearia
+00:12:7E	DigitalLif             # Digital Lifestyles Group, Inc.
+00:12:7F	Cisco
+00:12:80	Cisco
+00:12:81	CieffeSrl              # CIEFFE srl
+00:12:82	Qovia
+00:12:83	NortelNetw             # Nortel Networks
+00:12:84	Lab33Srl               # Lab33 Srl
+00:12:85	GizmondoEu             # Gizmondo Europe Ltd
+00:12:86	Endevco                # ENDEVCO CORP
+00:12:87	DigitalEve             # Digital Everywhere Unterhaltungselektronik GmbH
+00:12:88	2wire                  # 2Wire, Inc
+00:12:89	AdvanceSte             # Advance Sterilization Products
+00:12:8A	MotorolaPc             # Motorola PCS
+00:12:8B	SensoryNet             # Sensory Networks Inc
+00:12:8C	WoodwardGo             # Woodward Governor
+00:12:8D	StbDatense             # STB Datenservice GmbH
+00:12:8E	Q-FreeAsa              # Q-Free ASA
+00:12:8F	Montilio
+00:12:90	KyowaElect             # KYOWA Electric & Machinery Corp.
+00:12:91	KwsCompute             # KWS Computersysteme GmbH
+00:12:92	GriffinTec             # Griffin Technology
+00:12:93	GeEnergy               # GE Energy
+00:12:94	EudynaDevi             # Eudyna Devices Inc.
+00:12:95	Aiware                 # Aiware Inc.
+00:12:96	Addlogix
+00:12:97	O2micro                # O2Micro, Inc.
+00:12:98	MicoElectr             # MICO ELECTRIC(SHENZHEN) LIMITED
+00:12:99	KtechTelec             # Ktech Telecommunications Inc
+00:12:9A	IrtElectro             # IRT Electronics Pty Ltd
+00:12:9B	E2sElectro             # E2S Electronic Engineering Solutions, S.L.
+00:12:9C	Yulinet
+00:12:9D	FirstInter             # FIRST INTERNATIONAL COMPUTER DO BRASIL LTDA
+00:12:9E	SurfCommun             # Surf Communications Inc.
+00:12:9F	Rae                    # RAE Systems, Inc.
+00:12:A0	Neomeridia             # NeoMeridian Sdn Bhd
+00:12:A1	Bluepacket             # BluePacket Communications Co., Ltd.
 00:17:00	Kabel
 00:1C:7C	Perq                   # PERQ SYSTEMS CORPORATION
 00:20:00	LexmarkInt             # LEXMARK INTERNATIONAL, INC.
@@ -4927,7 +5074,7 @@
 00:30:23	CogentComp             # COGENT COMPUTER SYSTEMS, INC.
 00:30:24	Cisco                  # CISCO SYSTEMS, INC.
 00:30:25	CheckoutCo             # CHECKOUT COMPUTER SYSTEMS, LTD
-00:30:26	Heitel
+00:30:26	HeitelDigi             # HeiTel Digital Video GmbH
 00:30:27	Kerbango               # KERBANGO, INC.
 00:30:28	FaseSaldat             # FASE Saldatura srl
 00:30:29	Opicom
@@ -5427,7 +5574,7 @@
 00:50:15	BrightStar             # BRIGHT STAR ENGINEERING
 00:50:16	Sst/Woodhe             # SST/WOODHEAD INDUSTRIES
 00:50:17	RsrSRL                 # RSR S.R.L.
-00:50:18	AdvancedMu             # ADVANCED MULTIMEDIA INTERNET TECHNOLOGY INC.
+00:50:18	Amit                   # AMIT, Inc.
 00:50:19	SpringTide             # SPRING TIDE NETWORKS, INC.
 00:50:1A	Uisiqn
 00:50:1B	AblCanada              # ABL CANADA, INC.
@@ -5602,7 +5749,7 @@
 00:50:CF	VanlinkCom             # VANLINK COMMUNICATION TECHNOLOGY RESEARCH INSTITUTE
 00:50:D0	Minerva                # MINERVA SYSTEMS
 00:50:D1	Cisco                  # CISCO SYSTEMS, INC.
-00:50:D2	BaeCanada              # BAE Systems Canada, Inc.
+00:50:D2	CmcElectro             # CMC Electronics Inc
 00:50:D3	DigitalAud             # DIGITAL AUDIO PROCESSING PTY. LTD.
 00:50:D4	JoohongInf             # JOOHONG INFORMATION &
 00:50:D5	Ad                     # AD SYSTEMS CORP.
@@ -7282,7 +7429,7 @@
 00:E0:23	Telrad
 00:E0:24	GadzooxNet             # GADZOOX NETWORKS
 00:E0:25	Dit                    # dit CO., LTD.
-00:E0:26	EastmanKod             # EASTMAN KODAK CO.
+00:E0:26	RedlakeMas             # Redlake MASD LLC
 00:E0:27	Dux                    # DUX, INC.
 00:E0:28	Aptix                  # APTIX CORPORATION
 00:E0:29	StandardMi             # STANDARD MICROSYSTEMS CORP.
@@ -7704,7 +7851,7 @@
 #
 # Well-known addresses.
 #
-# $Id: manuf 11619 2004-08-06 21:17:01Z jmayer $
+# $Id: manuf 12341 2004-10-18 15:14:13Z gerald $
 #
 # Ethereal - Network traffic analyzer
 # By Gerald Combs <gerald [AT] ethereal.com>
diff -urN ethereal-0.10.6/merge.c ethereal-0.10.7/merge.c
--- ethereal-0.10.6/merge.c	2004-08-12 17:41:31.000000000 -0500
+++ ethereal-0.10.7/merge.c	2004-10-20 17:34:24.000000000 -0500
@@ -1,6 +1,6 @@
 /* Combine two dump files, either by appending or by merging by timestamp
  *
- * $Id: merge.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: merge.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Written by Scott Renfro <scott@renfro.org> based on
  * editcap by Richard Sharpe and Guy Harris
@@ -375,7 +375,7 @@
  * Convenience function: merge two files into one.
  */
 gboolean
-merge_n_files(int out_fd, int in_file_count, char **in_filenames, gboolean do_append, int *err)
+merge_n_files(int out_fd, int in_file_count, char **in_filenames, int filetype, gboolean do_append, int *err)
 {
   extern char *optarg;
   extern int   optind;
@@ -386,7 +386,7 @@
   /* initialize out_file */
   out_file.fd         = out_fd;
   out_file.pdh        = NULL;              /* wiretap dumpfile */
-  out_file.file_type  = WTAP_FILE_PCAP;    /* default to "libpcap" */
+  out_file.file_type  = filetype;
   out_file.frame_type = -2;                /* leave type alone */
   out_file.snaplen    = 0;                 /* no limit */
   out_file.count      = 1;                 /* frames output */
diff -urN ethereal-0.10.6/merge.h ethereal-0.10.7/merge.h
--- ethereal-0.10.6/merge.h	2004-08-12 17:41:37.000000000 -0500
+++ ethereal-0.10.7/merge.h	2004-10-20 17:34:24.000000000 -0500
@@ -2,7 +2,7 @@
  * Definitions for menu routines with toolkit-independent APIs but
  * toolkit-dependent implementations.
  *
- * $Id: merge.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: merge.h 12341 2004-10-18 15:14:13Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -152,7 +152,7 @@
  * @return TRUE if function succeeded
  */
 extern gboolean
-merge_n_files(int out_fd, int in_file_count, char **in_filenames, gboolean do_append, int *err);
+merge_n_files(int out_fd, int in_file_count, char **in_filenames, int filetype, gboolean do_append, int *err);
 
 
 #ifdef __cplusplus
diff -urN ethereal-0.10.6/oui.h ethereal-0.10.7/oui.h
--- ethereal-0.10.6/oui.h	2004-08-12 17:41:38.000000000 -0500
+++ ethereal-0.10.7/oui.h	2004-10-20 17:34:25.000000000 -0500
@@ -1,13 +1,12 @@
 /* oui.h
  * Definitions of OUIs
  *
- * $Id: oui.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: oui.h 12256 2004-10-11 07:15:08Z guy $
  *
  * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@zing.org>
+ * By Gerald Combs <gerald@ethereal.com>
  * Copyright 1998 - 2000 Gerald Combs
  *
- *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
@@ -35,6 +34,7 @@
 #define	OUI_ATM_FORUM	0x00A03E	/* ATM Forum */
 #define OUI_CABLE_BPDU	0x00E02F	/* DOCSIS spanning tree BPDU */
 #define	OUI_APPLE_ATALK	0x080007	/* Appletalk */
+#define	OUI_HP		0x080009	/* Hewlett-Packard */
 
 extern const value_string oui_vals[];
 
diff -urN ethereal-0.10.6/packaging/Makefile.in ethereal-0.10.7/packaging/Makefile.in
--- ethereal-0.10.6/packaging/Makefile.in	2004-08-12 21:04:21.000000000 -0500
+++ ethereal-0.10.7/packaging/Makefile.in	2004-10-20 21:50:17.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -74,6 +74,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -85,10 +88,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -169,8 +175,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -434,7 +440,7 @@
 installcheck: installcheck-recursive
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
diff -urN ethereal-0.10.6/packaging/nsis/Makefile.in ethereal-0.10.7/packaging/nsis/Makefile.in
--- ethereal-0.10.6/packaging/nsis/Makefile.in	2004-08-12 21:04:21.000000000 -0500
+++ ethereal-0.10.7/packaging/nsis/Makefile.in	2004-10-20 21:50:17.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -74,6 +74,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -85,10 +88,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -169,8 +175,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -300,7 +306,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -319,7 +325,6 @@
 
 distclean: distclean-am
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-generic distclean-libtool
 
 dvi: dvi-am
@@ -342,7 +347,6 @@
 
 maintainer-clean: maintainer-clean-am
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/packaging/nsis/Makefile.nmake ethereal-0.10.7/packaging/nsis/Makefile.nmake
--- ethereal-0.10.6/packaging/nsis/Makefile.nmake	2004-08-12 17:42:33.000000000 -0500
+++ ethereal-0.10.7/packaging/nsis/Makefile.nmake	2004-10-20 17:35:04.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11558 2004-07-28 23:09:12Z obiot $
+# $Id: Makefile.nmake 12359 2004-10-20 19:07:50Z gerald $
 #
 # NSIS is a free packager/installer/uninstaller program for Win32.
 # It was originally written for the Winamp package, but various
@@ -9,6 +9,8 @@
 
 include ../../config.nmake
 
+UNIX2DOS=$(PERL) ../../tools/unix2dos.pl
+
 !IFDEF GTK1_ONLY
 # define installer name and undefine GTK2_DIR to get a separate 
 # installer for ethereal GTK1 version
@@ -40,7 +42,7 @@
 !IFDEF GTK2_DIR
 	../../ethereal-gtk2.exe \
 !ENDIF
-	../../text2pcap.exe ../../mergecap.exe ../../capinfo.exe
+	../../text2pcap.exe ../../mergecap.exe ../../capinfos.exe
 DLL=../../wiretap/wiretap-$(WTAP_VERSION).dll
 DOC=../../doc/ethereal.html		\
 	../../doc/tethereal.html	\
@@ -48,16 +50,16 @@
 	../../doc/editcap.html 		\
 	../../doc/text2pcap.html 	\
 	../../doc/mergecap.html 	\
-	../../doc/capinfo.html 	\
+	../../doc/capinfos.html 	\
 	../../FAQ			\
 	../../README			\
 	../../README.win32
+DOC_dos=NEWS.txt
 GPL=../../COPYING
 HELP=../../help/toc \
 	../../help/overview.txt \
 	../../help/capture_filters.txt \
 	../../help/display_filters.txt \
-	../../help/well_known.txt \
 	../../help/faq.txt
 
 PLUGINS=../../plugins/acn/acn.dll \
@@ -81,9 +83,12 @@
 	../../plugins/rudp/rudp.dll \
 	../../plugins/v5ua/v5ua.dll
 
-DELIVERABLES=$(EXE) $(DLL) $(DOC) $(GPL) $(HELP) $(PLUGINS)
+DELIVERABLES=$(EXE) $(DLL) $(DOC) $(DOC_dos) $(GPL) $(HELP) $(PLUGINS)
 
+all: NEWS.txt $(DEST)-setup-$(VERSION).exe
 
+NEWS.txt: ../../NEWS
+	$(UNIX2DOS) < ../../NEWS > NEWS.txt
 
 $(DEST)-setup-$(VERSION).exe : ethereal.nsi $(DELIVERABLES) Makefile.nmake
 	$(MAKENSIS) \
@@ -126,6 +131,7 @@
 	rm -f ethereal-setup-$(VERSION).exe
 	rm -f ethereal-gtk1-setup-$(VERSION).exe
 	rm -f ethereal-gtk2-setup-$(VERSION).exe
+	rm -f NEWS.txt
 
 distclean: clean
 
diff -urN ethereal-0.10.6/packaging/nsis/ethereal.nsi ethereal-0.10.7/packaging/nsis/ethereal.nsi
--- ethereal-0.10.6/packaging/nsis/ethereal.nsi	2004-08-12 17:42:33.000000000 -0500
+++ ethereal-0.10.7/packaging/nsis/ethereal.nsi	2004-10-20 21:11:06.000000000 -0500
@@ -1,7 +1,7 @@
 ;
 ; ethereal.nsi
 ;
-; $Id: ethereal.nsi 11558 2004-07-28 23:09:12Z obiot $
+; $Id: ethereal.nsi 12364 2004-10-21 02:11:04Z gerald $
 
  
 !ifdef MAKENSIS_MODERN_UI
@@ -60,12 +60,19 @@
 !define MUI_UNICON "..\..\image\ethereal.ico"
 
 !define MUI_COMPONENTSPAGE_SMALLDESC
+!define MUI_FINISHPAGE_NOAUTOCLOSE
+!define MUI_UNFINISHPAGE_NOAUTOCLOSE
 !define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of Ethereal.\r\n\r\nBefore starting the installation, make sure Ethereal is not running.\r\n\r\nClick 'Next' to continue."
 !define MUI_FINISHPAGE_LINK "Install WinPcap to be able to capture packets from a network!"
 !define MUI_FINISHPAGE_LINK_LOCATION "http://winpcap.polito.it"
-; show readme doesn't seem to work even with NSIS 2.0rc3
-;!define MUI_FINISHPAGE_SHOWREADME "..\..\README.win32"
-;!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
+
+; NSIS shows Readme files by opening the Readme file with the default application for
+; the file's extension. "README.win32" won't work in most cases, because extension "win32" 
+; is usually not associated with an appropriate text editor. We should use extension "txt" 
+; for a text file or "html" for an html README file.  
+!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\NEWS.txt"
+!define MUI_FINISHPAGE_SHOWREADME_TEXT "Show News"
+!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
 
 ; ============================================================================
 ; MUI Pages
@@ -92,6 +99,36 @@
 !endif ; MAKENSIS_MODERN_UI
 
 ; ============================================================================
+; Section macros
+; ============================================================================
+!include "Sections.nsh"
+
+; ========= Macro to unselect and disable a section =========
+
+!macro DisableSection SECTION
+
+  Push $0
+    SectionGetFlags "${SECTION}" $0
+    IntOp $0 $0 & ${SECTION_OFF}
+    IntOp $0 $0 | ${SF_RO}
+    SectionSetFlags "${SECTION}" $0
+  Pop $0
+
+!macroend
+
+; ========= Macro to enable (unreadonly) a section =========
+!define SECTION_ENABLE   0xFFFFFFEF
+!macro EnableSection SECTION
+
+  Push $0
+    SectionGetFlags "${SECTION}" $0
+    IntOp $0 $0 & ${SECTION_ENABLE}
+    SectionSetFlags "${SECTION}" $0
+  Pop $0
+
+!macroend
+
+; ============================================================================
 ; License page configuration
 ; ============================================================================
 LicenseText "Ethereal is distributed under the GNU General Public License."
@@ -225,7 +262,9 @@
 File "..\..\README"
 File "..\..\README.win32"
 File "..\..\AUTHORS-SHORT"
+File "..\..\AUTHORS-SHORT-FORMAT"
 File "..\..\COPYING"
+File "NEWS.txt"
 File "..\..\manuf"
 File "..\..\doc\ethereal.html"
 File "..\..\doc\ethereal-filter.html"
@@ -237,6 +276,7 @@
 SetOutPath $INSTDIR\diameter
 File "..\..\dictionary.dtd"
 File "..\..\dictionary.xml"
+File "..\..\imscxdx.xml"
 File "..\..\mobileipv4.xml"
 File "..\..\nasreq.xml"
 File "..\..\sunping.xml"
@@ -249,7 +289,6 @@
 File "..\..\help\capturing.txt"
 File "..\..\help\capture_filters.txt"
 File "..\..\help\display_filters.txt"
-File "..\..\help\well_known.txt"
 File "..\..\help\faq.txt"
 
 ; Write the uninstall keys for Windows
@@ -263,6 +302,11 @@
 WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Ethereal" "NoModify" 1
 WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Ethereal" "NoRepair" 1
 WriteUninstaller "uninstall.exe"
+
+; Write an entry for ShellExecute
+WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\ethereal.exe" "" '$INSTDIR\ethereal.exe'
+WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\ethereal.exe" "Path" '$INSTDIR'
+
 SectionEnd
 
 !ifdef GTK1_DIR
@@ -302,10 +346,8 @@
 File "${GTK2_DIR}\lib\gtk-2.0\${GTK2_INST_VERSION}.0\immodules\im-*.dll"
 SetOutPath $INSTDIR\lib\pango\${PANGO_INST_VERSION}.0\modules
 File "${GTK2_DIR}\lib\pango\${PANGO_INST_VERSION}.0\modules\pango-*.dll"
-
 SectionEnd
-!endif
-
+ 
 !ifdef GTK_WIMP_DIR
 Section "GTK-Wimp" SecGTKWimp
 ;-------------------------------------------
@@ -313,9 +355,9 @@
 File "${GTK_WIMP_DIR}\libwimp.dll"
 SetOutPath $INSTDIR\share\themes\Default\gtk-2.0
 File "${GTK_WIMP_DIR}\Theme\gtk-2.0\gtkrc"
-
 SectionEnd
 !endif
+!endif
 
 Section "Tethereal" SecTethereal
 ;-------------------------------------------
@@ -357,14 +399,14 @@
 File "..\..\doc\mergecap.html"
 SectionEnd
 
-Section "Capinfo" SecCapinfo
+Section "Capinfos" SecCapinfos
 ;-------------------------------------------
 !ifdef GTK1_DIR & GTK2_DIR
 SectionIn 1 2
 !endif
 SetOutPath $INSTDIR
-File "..\..\capinfo.exe"
-File "..\..\doc\capinfo.html"
+File "..\..\capinfos.exe"
+File "..\..\doc\capinfos.html"
 SectionEnd
 
 
@@ -507,7 +549,8 @@
 NoEtherealErrorMsg:
 
 DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Ethereal"
-DeleteRegKey HKEY_LOCAL_MACHINE SOFTWARE\Ethereal
+DeleteRegKey HKEY_LOCAL_MACHINE "Software\Ethereal"
+DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\ethereal.exe"
 
 push $R0
 	StrCpy $R0 ".5vw"
@@ -578,8 +621,10 @@
 Delete "$INSTDIR\*.html"
 Delete "$INSTDIR\COPYING"
 Delete "$INSTDIR\AUTHORS-SHORT"
+Delete "$INSTDIR\AUTHORS-SHORT-FORMAT"
 Delete "$INSTDIR\README*"
 Delete "$INSTDIR\FAQ"
+Delete "$INSTDIR\NEWS.txt"
 Delete "$INSTDIR\manuf"
 Delete "$INSTDIR\pcrepattern.3.txt"
 Delete "$SMPROGRAMS\Ethereal\*.*"
@@ -622,7 +667,6 @@
 
 SectionEnd
 
-
 !ifdef MAKENSIS_MODERN_UI
 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
 !ifdef GTK1_DIR
@@ -630,15 +674,15 @@
 !endif  
 !ifdef GTK2_DIR  
   !insertmacro MUI_DESCRIPTION_TEXT ${SecEtherealGTK2} "${PROGRAM_NAME} is a GUI network protocol analyzer (using the modern GTK2 GUI toolkit)."
-!endif  
 !ifdef GTK_WIMP_DIR
   !insertmacro MUI_DESCRIPTION_TEXT ${SecGTKWimp} "GTKWimp is the GTK2 windows impersonator (native Win32 look and feel)."
 !endif  
+!endif
   !insertmacro MUI_DESCRIPTION_TEXT ${SecTethereal} "Tethereal is a network protocol analyzer."
   !insertmacro MUI_DESCRIPTION_TEXT ${SecEditCap} "Editcap is a program that reads a capture file and writes some or all of the packets into another capture file."
   !insertmacro MUI_DESCRIPTION_TEXT ${SecText2Pcap} "Text2pcap is a program that reads in an ASCII hex dump and writes the data into a libpcap-style capture file."
   !insertmacro MUI_DESCRIPTION_TEXT ${SecMergecap} "Mergecap is a program that combines multiple saved capture files into a single output file."
-  !insertmacro MUI_DESCRIPTION_TEXT ${SecCapinfo} "Capinfo is a program that provides information on capture files."
+  !insertmacro MUI_DESCRIPTION_TEXT ${SecCapinfos} "Capinfos is a program that provides information on capture files."
   !insertmacro MUI_DESCRIPTION_TEXT ${SecPlugins} "Plugins with some extended dissections."
   !insertmacro MUI_DESCRIPTION_TEXT ${SecMIBs} "SNMP MIBs for better SNMP dissection."
   !insertmacro MUI_DESCRIPTION_TEXT ${SecShortcuts} "Start menu shortcuts."
@@ -650,10 +694,26 @@
 ; ============================================================================
 ; Callback functions
 ; ============================================================================
-; We simulate the XOR operator
 !ifdef GTK1_DIR & GTK2_DIR
+;Disable GTK-Wimp for GTK1
+Function .onSelChange
+	Push $0
+	SectionGetFlags ${SecEtherealGTK1} $0
+	IntOp  $0 $0 & 1
+	IntCmp $0 1 onSelChange.disableGTK2Sections
+	;enable GTK2Sections
+	!insertmacro EnableSection ${SecGTKWimp}
+	Goto onSelChange.end
+onSelChange.disableGTK2Sections:
+	!insertmacro DisableSection ${SecGTKWimp}
+	Goto onSelChange.end
+onSelChange.end:
+	Pop $0
+FunctionEnd	
+
 !else
 !ifdef GTK1_DIR | GTK2_DIR
+; Disable FileExtension if Ethereal isn't selected
 Function .onSelChange
 	Push $0
 !ifdef GTK1_DIR
diff -urN ethereal-0.10.6/packaging/rpm/Makefile.in ethereal-0.10.7/packaging/rpm/Makefile.in
--- ethereal-0.10.6/packaging/rpm/Makefile.in	2004-08-12 21:04:21.000000000 -0500
+++ ethereal-0.10.7/packaging/rpm/Makefile.in	2004-10-20 21:50:17.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -74,6 +74,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -85,10 +88,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -169,8 +175,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -434,7 +440,7 @@
 installcheck: installcheck-recursive
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
diff -urN ethereal-0.10.6/packaging/rpm/SPECS/Makefile.in ethereal-0.10.7/packaging/rpm/SPECS/Makefile.in
--- ethereal-0.10.6/packaging/rpm/SPECS/Makefile.in	2004-08-12 21:04:21.000000000 -0500
+++ ethereal-0.10.7/packaging/rpm/SPECS/Makefile.in	2004-10-20 21:50:17.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -74,6 +74,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -85,10 +88,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -169,8 +175,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -297,7 +303,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -316,7 +322,6 @@
 
 distclean: distclean-am
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-generic distclean-libtool
 
 dvi: dvi-am
@@ -339,7 +344,6 @@
 
 maintainer-clean: maintainer-clean-am
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/packaging/svr4/Makefile.in ethereal-0.10.7/packaging/svr4/Makefile.in
--- ethereal-0.10.6/packaging/svr4/Makefile.in	2004-08-12 21:04:21.000000000 -0500
+++ ethereal-0.10.7/packaging/svr4/Makefile.in	2004-10-20 21:50:17.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -74,6 +74,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -85,10 +88,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -169,8 +175,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -302,7 +308,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -322,7 +328,6 @@
 
 distclean: distclean-am
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-generic distclean-libtool
 
 dvi: dvi-am
@@ -345,7 +350,6 @@
 
 maintainer-clean: maintainer-clean-am
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/packet-range.c ethereal-0.10.7/packet-range.c
--- ethereal-0.10.6/packet-range.c	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/packet-range.c	2004-10-20 17:34:26.000000000 -0500
@@ -0,0 +1,277 @@
+/* packet-range.c
+ * Packet range routines (save, print, ...)
+ *
+ * $Id: packet-range.c 12341 2004-10-18 15:14:13Z gerald $
+ *
+ * Dick Gooris <gooris@lucent.com>
+ * Ulf Lamping <ulf.lamping@web.de>
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <ctype.h>
+
+#include <glib.h>
+
+#include <epan/frame_data.h>
+
+#include "globals.h"
+
+#include "packet-range.h"
+
+/* (re-)calculate the packet counts (except the user specified range) */
+void packet_range_calc(packet_range_t *range) {
+  guint32       current_count;
+  guint32       mark_low;
+  guint32       mark_high;
+  guint32       displayed_mark_low;
+  guint32       displayed_mark_high;
+  frame_data    *packet;
+
+
+  range->selected_packet        = 0L;
+
+  mark_low                      = 0L;
+  mark_high                     = 0L;
+  range->mark_range_cnt         = 0L;
+
+  displayed_mark_low            = 0L;
+  displayed_mark_high           = 0L;
+  range->displayed_cnt          = 0L;
+  range->displayed_marked_cnt   = 0L;
+  range->displayed_mark_range_cnt=0L;
+
+  /* The next for-loop is used to obtain the amount of packets to be processed
+   * and is used to present the information in the Save/Print As widget.
+   * We have different types of ranges: All the packets, the number
+   * of packets of a marked range, a single packet, and a user specified 
+   * packet range. The last one is not calculated here since this
+   * data must be entered in the widget by the user.
+   */
+
+  current_count = 0;
+  for(packet = cfile.plist; packet != NULL; packet = packet->next) {
+      current_count++;
+      if (cfile.current_frame == packet) {
+          range->selected_packet = current_count;
+      }
+      if (packet->flags.passed_dfilter) {
+          range->displayed_cnt++;
+      }
+      if (packet->flags.marked) {
+            if (packet->flags.passed_dfilter) {
+                range->displayed_marked_cnt++;
+                if (displayed_mark_low == 0) {
+                   displayed_mark_low = current_count;
+                }
+                if (current_count > displayed_mark_high) {
+                   displayed_mark_high = current_count;
+                }
+            }
+
+            if (mark_low == 0) {
+               mark_low = current_count;
+            }
+            if (current_count > mark_high) {
+               mark_high = current_count;
+            }
+      }
+  }
+        
+  current_count = 0;
+  for(packet = cfile.plist; packet != NULL; packet = packet->next) {
+      current_count++;
+
+      if (current_count >= mark_low && 
+          current_count <= mark_high)
+      {
+          range->mark_range_cnt++;
+      }
+
+      if (current_count >= displayed_mark_low && 
+          current_count <= displayed_mark_high)
+      {
+          if (packet->flags.passed_dfilter) {
+            range->displayed_mark_range_cnt++;
+          }
+      }
+  }
+
+  /* in case we marked just one packet, we add 1. */
+  /*if (cfile.marked_count != 0) {
+    range->mark_range = mark_high - mark_low + 1;
+  }*/
+        
+  /* in case we marked just one packet, we add 1. */
+  /*if (range->displayed_marked_cnt != 0) {
+    range->displayed_mark_range = displayed_mark_high - displayed_mark_low + 1;
+  }*/
+}
+
+
+/* (re-)calculate the user specified packet range counts */
+static void packet_range_calc_user(packet_range_t *range) {
+  guint32       current_count;
+  frame_data    *packet;
+
+  range->user_range_cnt             = 0L;
+  range->displayed_user_range_cnt   = 0L;
+
+  current_count = 0;
+  for(packet = cfile.plist; packet != NULL; packet = packet->next) {
+      current_count++;
+
+      if (value_is_in_range(range->user_range, current_count)) {
+          range->user_range_cnt++;
+          if (packet->flags.passed_dfilter) {
+            range->displayed_user_range_cnt++;
+          }
+      }
+  }
+}
+
+
+/* init the range struct */
+void packet_range_init(packet_range_t *range) {
+
+  range->process            = range_process_all;
+  range->process_filtered   = FALSE;
+  range->user_range         = range_empty();
+
+  /* calculate all packet range counters */
+  packet_range_calc(range);
+  packet_range_calc_user(range);
+}
+
+/* check whether the packet range is OK */
+convert_ret_t packet_range_check(packet_range_t *range) {
+  if (range->process == range_process_user_range && range->user_range == NULL) {
+    /* Not valid - return the error. */
+    return range->user_range_status;
+  }
+  return CVT_NO_ERROR;
+}
+
+/* init the processing run */
+void packet_range_process_init(packet_range_t *range) {
+  /* Check that, if an explicit range was selected, it's valid. */
+  /* "enumeration" values */
+  range->marked_range_active    = FALSE;
+  range->selected_done          = FALSE;
+
+  if (range->process_filtered == FALSE) {
+    range->marked_range_left = range->mark_range_cnt;
+  } else {
+    range->marked_range_left = range->displayed_mark_range_cnt;
+  }
+}
+
+/* do we have to process all packets? */
+gboolean packet_range_process_all(packet_range_t *range) {
+    return range->process == range_process_all && !range->process_filtered;
+}
+
+/* do we have to process this packet? */
+range_process_e packet_range_process_packet(packet_range_t *range, frame_data *fdata) {
+
+    switch(range->process) {
+    case(range_process_all):
+        break;
+    case(range_process_selected):
+        if (range->selected_done) {
+          return range_processing_finished;
+        }
+        if (fdata->num != cfile.current_frame->num) {
+          return range_process_next;
+        }
+        range->selected_done = TRUE;
+        break;
+    case(range_process_marked):
+        if (fdata->flags.marked == FALSE) {
+          return range_process_next;
+        }
+        break;
+    case(range_process_marked_range):
+        if (range->marked_range_left == 0) {
+          return range_processing_finished;
+        }
+        if (fdata->flags.marked == TRUE) {
+          range->marked_range_active = TRUE;
+        }
+        if (range->marked_range_active == FALSE ) {
+          return range_process_next;
+        }
+        if (!range->process_filtered ||
+          (range->process_filtered && fdata->flags.passed_dfilter == TRUE))
+        {
+          range->marked_range_left--;
+        }
+        break;
+    case(range_process_user_range):
+        if (value_is_in_range(range->user_range, fdata->num) == FALSE) {
+          return range_process_next;
+        }
+        break;
+    default:
+        g_assert_not_reached();
+    }
+
+    /* this packet has to pass the display filter but didn't? -> try next */
+    if (range->process_filtered && fdata->flags.passed_dfilter == FALSE) {
+        return range_process_next;
+    }
+
+    /* We fell through the conditions above, so we accept this packet */
+    return range_process_this;
+}
+
+
+/******************** Range Entry Parser *********************************/
+
+/* Converts a range string to a user range.
+ * The parameter 'es' points to the string to be converted, and is defined in
+ * the Save/Print-As widget.
+ */
+
+void packet_range_convert_str(packet_range_t *range, const gchar *es)
+{
+    range_t *new_range;
+    convert_ret_t ret;
+
+    if (range->user_range != NULL)
+        g_free(range->user_range);
+    ret = range_convert_str(&new_range, es, cfile.count);
+    if (ret != CVT_NO_ERROR) {
+        /* range isn't valid */
+        range->user_range                 = NULL;
+        range->user_range_status          = ret;
+        range->user_range_cnt             = 0L;
+        range->displayed_user_range_cnt   = 0L;
+        return;
+    }
+    range->user_range = new_range;
+
+    /* calculate new user specified packet range counts */
+    packet_range_calc_user(range);
+} /* packet_range_convert_str */
diff -urN ethereal-0.10.6/packet-range.h ethereal-0.10.7/packet-range.h
--- ethereal-0.10.6/packet-range.h	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/packet-range.h	2004-10-20 17:34:26.000000000 -0500
@@ -0,0 +1,101 @@
+/* packet-range.h
+ * Packet range routines (save, print, ...)
+ *
+ * $Id: packet-range.h 12341 2004-10-18 15:14:13Z gerald $
+ *
+ * Dick Gooris <gooris@lucent.com>
+ * Ulf Lamping <ulf.lamping@web.de>
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+#ifndef __PACKET_RANGE_H__
+#define __PACKET_RANGE_H__
+
+#include <glib.h>
+
+#include <epan/frame_data.h>
+
+#include <epan/range.h>
+
+extern guint32  curr_selected_frame;
+
+typedef enum {
+    range_process_all,
+    range_process_selected,
+    range_process_marked,
+    range_process_marked_range,
+    range_process_user_range
+} packet_range_e;
+
+typedef struct packet_range_tag {
+    /* values coming from the UI */
+    packet_range_e  process;            /* which range to process */
+    gboolean        process_filtered;   /* captured or filtered packets */
+
+    /* user specified range(s) and, if null, error status */
+    range_t         *user_range;
+    convert_ret_t   user_range_status;
+
+    /* calculated values */
+    guint32  selected_packet;       /* the currently selected packet */
+
+    /* current packet counts (captured) */
+    /* cfile.count */               /* packets in capture file */
+    /* cfile.marked_count */        /* packets marked */
+    guint32  mark_range_cnt;        /* packets in marked range */
+    guint32  user_range_cnt;        /* packets in user specified range */
+
+    /* current packet counts (displayed) */
+    guint32  displayed_cnt;
+    guint32  displayed_marked_cnt;
+    guint32  displayed_mark_range_cnt;
+    guint32  displayed_user_range_cnt;
+
+    /* "enumeration" values */
+    gboolean marked_range_active;   /* marked range is currently processed */
+    guint32  marked_range_left;     /* marked range packets left to do */
+    gboolean selected_done;         /* selected packet already processed */
+} packet_range_t;
+
+typedef enum {
+    range_process_this,             /* process this packet */
+    range_process_next,             /* skip this packet, process next */
+    range_processing_finished       /* stop processing, required packets done */
+} range_process_e;
+
+/* init the range structure */
+extern void packet_range_init(packet_range_t *range);
+
+/* check whether the packet range is OK */
+extern convert_ret_t packet_range_check(packet_range_t *range);
+
+/* init the processing run */
+extern void packet_range_process_init(packet_range_t *range);
+
+/* do we have to process all packets? */
+extern gboolean packet_range_process_all(packet_range_t *range);
+
+/* do we have to process this packet? */
+extern range_process_e packet_range_process_packet(packet_range_t *range, frame_data *fdata);
+
+/* convert user given string to the internal user specified range representation */
+extern void packet_range_convert_str(packet_range_t *range, const gchar *es);
+
+#endif /* __PACKET_RANGE_H__ */
diff -urN ethereal-0.10.6/pcap-util.c ethereal-0.10.7/pcap-util.c
--- ethereal-0.10.6/pcap-util.c	2004-08-12 17:41:40.000000000 -0500
+++ ethereal-0.10.7/pcap-util.c	2004-10-20 17:34:27.000000000 -0500
@@ -1,7 +1,7 @@
 /* pcap-util.c
  * Utility routines for packet capture
  *
- * $Id: pcap-util.c 11427 2004-07-19 02:27:17Z guy $
+ * $Id: pcap-util.c 11972 2004-09-11 23:03:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -50,7 +50,7 @@
 #include "pcap-util.h"
 #include "pcap-util-int.h"
 
-#ifndef WIN32
+#ifndef _WIN32
 #include <netinet/in.h>
 #endif
 
diff -urN ethereal-0.10.6/perlnoutf.pl ethereal-0.10.7/perlnoutf.pl
--- ethereal-0.10.6/perlnoutf.pl	1969-12-31 18:00:00.000000000 -0600
+++ ethereal-0.10.7/perlnoutf.pl	2004-10-20 17:35:05.000000000 -0500
@@ -0,0 +1,16 @@
+#!/usr/bin/perl -w
+
+# $Id: perlnoutf.pl 12341 2004-10-18 15:14:13Z gerald $
+
+# Call another Perl script, passing our caller's arguments, with
+# environment variables unset so perl doesn't interpret bytes as UTF-8
+# characters.
+
+use strict;
+
+delete $ENV{LANG};
+delete $ENV{LANGUAGE};
+delete $ENV{LC_ALL};
+delete $ENV{LC_CTYPE};
+
+system("$^X -w @ARGV");
diff -urN ethereal-0.10.6/plugins/Makefile.in ethereal-0.10.7/plugins/Makefile.in
--- ethereal-0.10.6/plugins/Makefile.in	2004-08-12 21:04:21.000000000 -0500
+++ ethereal-0.10.7/plugins/Makefile.in	2004-10-20 21:50:18.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -97,6 +97,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -108,10 +111,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -192,8 +198,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -497,7 +503,7 @@
 installcheck: installcheck-recursive
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
diff -urN ethereal-0.10.6/plugins/Xass-list ethereal-0.10.7/plugins/Xass-list
--- ethereal-0.10.6/plugins/Xass-list	2004-08-12 21:24:00.000000000 -0500
+++ ethereal-0.10.7/plugins/Xass-list	2004-10-20 22:11:23.000000000 -0500
@@ -86,4 +86,7 @@
 dissect_rpc_opaque_data, dissect_rpc_data, dissect_rpc_bytes,
 dissect_rpc_list, dissect_rpc_array, dissect_rpc_uint32, dissect_rpc_uint64,
 dissect_rpc_indir_call, dissect_rpc_indir_reply, crc16_ccitt_tvb,
-
+tvb_get_letoh64, tvb_get_ntoh64, proto_tree_add_float, proto_tree_add_float_hidden,
+proto_tree_add_float_format, tvb_get_ntohieee_float, tvb_get_ntohieee_double,
+tvb_get_letohieee_float, tvb_get_letohieee_double, proto_tree_add_debug_text,
+rtp_add_address, rtcp_add_address, 
diff -urN ethereal-0.10.6/plugins/Xplugin_api.c ethereal-0.10.7/plugins/Xplugin_api.c
--- ethereal-0.10.6/plugins/Xplugin_api.c	2004-08-12 21:24:00.000000000 -0500
+++ ethereal-0.10.7/plugins/Xplugin_api.c	2004-10-20 22:11:23.000000000 -0500
@@ -292,3 +292,15 @@
 p_dissect_rpc_indir_call = pat->p_dissect_rpc_indir_call;
 p_dissect_rpc_indir_reply = pat->p_dissect_rpc_indir_reply;
 p_crc16_ccitt_tvb = pat->p_crc16_ccitt_tvb;
+p_tvb_get_letoh64 = pat->p_tvb_get_letoh64;
+p_tvb_get_ntoh64 = pat->p_tvb_get_ntoh64;
+p_proto_tree_add_float = pat->p_proto_tree_add_float;
+p_proto_tree_add_float_hidden = pat->p_proto_tree_add_float_hidden;
+p_proto_tree_add_float_format = pat->p_proto_tree_add_float_format;
+p_tvb_get_ntohieee_float = pat->p_tvb_get_ntohieee_float;
+p_tvb_get_ntohieee_double = pat->p_tvb_get_ntohieee_double;
+p_tvb_get_letohieee_float = pat->p_tvb_get_letohieee_float;
+p_tvb_get_letohieee_double = pat->p_tvb_get_letohieee_double;
+p_proto_tree_add_debug_text = pat->p_proto_tree_add_debug_text;
+p_rtp_add_address = pat->p_rtp_add_address;
+p_rtcp_add_address = pat->p_rtcp_add_address;
diff -urN ethereal-0.10.6/plugins/Xplugin_api.h ethereal-0.10.7/plugins/Xplugin_api.h
--- ethereal-0.10.6/plugins/Xplugin_api.h	2004-08-12 21:24:00.000000000 -0500
+++ ethereal-0.10.7/plugins/Xplugin_api.h	2004-10-20 22:11:23.000000000 -0500
@@ -292,3 +292,15 @@
 #define dissect_rpc_indir_call (*p_dissect_rpc_indir_call)
 #define dissect_rpc_indir_reply (*p_dissect_rpc_indir_reply)
 #define crc16_ccitt_tvb (*p_crc16_ccitt_tvb)
+#define tvb_get_letoh64 (*p_tvb_get_letoh64)
+#define tvb_get_ntoh64 (*p_tvb_get_ntoh64)
+#define proto_tree_add_float (*p_proto_tree_add_float)
+#define proto_tree_add_float_hidden (*p_proto_tree_add_float_hidden)
+#define proto_tree_add_float_format (*p_proto_tree_add_float_format)
+#define tvb_get_ntohieee_float (*p_tvb_get_ntohieee_float)
+#define tvb_get_ntohieee_double (*p_tvb_get_ntohieee_double)
+#define tvb_get_letohieee_float (*p_tvb_get_letohieee_float)
+#define tvb_get_letohieee_double (*p_tvb_get_letohieee_double)
+#define proto_tree_add_debug_text (*p_proto_tree_add_debug_text)
+#define rtp_add_address (*p_rtp_add_address)
+#define rtcp_add_address (*p_rtcp_add_address)
diff -urN ethereal-0.10.6/plugins/Xplugin_api_decls.h ethereal-0.10.7/plugins/Xplugin_api_decls.h
--- ethereal-0.10.6/plugins/Xplugin_api_decls.h	2004-08-12 21:24:00.000000000 -0500
+++ ethereal-0.10.7/plugins/Xplugin_api_decls.h	2004-10-20 22:11:23.000000000 -0500
@@ -292,3 +292,15 @@
 addr_dissect_rpc_indir_call p_dissect_rpc_indir_call;
 addr_dissect_rpc_indir_reply p_dissect_rpc_indir_reply;
 addr_crc16_ccitt_tvb p_crc16_ccitt_tvb;
+addr_tvb_get_letoh64 p_tvb_get_letoh64;
+addr_tvb_get_ntoh64 p_tvb_get_ntoh64;
+addr_proto_tree_add_float p_proto_tree_add_float;
+addr_proto_tree_add_float_hidden p_proto_tree_add_float_hidden;
+addr_proto_tree_add_float_format p_proto_tree_add_float_format;
+addr_tvb_get_ntohieee_float p_tvb_get_ntohieee_float;
+addr_tvb_get_ntohieee_double p_tvb_get_ntohieee_double;
+addr_tvb_get_letohieee_float p_tvb_get_letohieee_float;
+addr_tvb_get_letohieee_double p_tvb_get_letohieee_double;
+addr_proto_tree_add_debug_text p_proto_tree_add_debug_text;
+addr_rtp_add_address p_rtp_add_address;
+addr_rtcp_add_address p_rtcp_add_address;
diff -urN ethereal-0.10.6/plugins/Xplugin_table.h ethereal-0.10.7/plugins/Xplugin_table.h
--- ethereal-0.10.6/plugins/Xplugin_table.h	2004-08-12 21:24:00.000000000 -0500
+++ ethereal-0.10.7/plugins/Xplugin_table.h	2004-10-20 22:11:23.000000000 -0500
@@ -229,8 +229,8 @@
 typedef guint32 (*addr_dissect_per_boolean) (tvbuff_t *, guint32, packet_info *, proto_tree *, int, gboolean *, proto_item **);
 typedef guint32 (*addr_dissect_per_integer) (tvbuff_t *, guint32, packet_info *, proto_tree *, int, gint32 *, proto_item **);
 typedef guint32 (*addr_dissect_per_constrained_integer) (tvbuff_t *, guint32, packet_info *, proto_tree *, int, guint32, guint32, guint32 *, proto_item **, gboolean);
-typedef guint32 (*addr_dissect_per_choice) (tvbuff_t *, guint32, packet_info *, proto_tree *, int, gint, per_choice_t *, char *, guint32 *);
-typedef guint32 (*addr_dissect_per_sequence) (tvbuff_t *, guint32, packet_info *, proto_tree *, int, gint, per_sequence_t *);
+typedef guint32 (*addr_dissect_per_choice) (tvbuff_t *, guint32, packet_info *, proto_tree *, int, gint, const per_choice_t *, char *, guint32 *);
+typedef guint32 (*addr_dissect_per_sequence) (tvbuff_t *, guint32, packet_info *, proto_tree *, int, gint, const per_sequence_t *);
 typedef guint32 (*addr_dissect_per_octet_string) (tvbuff_t *, guint32, packet_info *, proto_tree *, int, int, int, guint32 *, guint32 *);
 typedef guint32 (*addr_dissect_per_restricted_character_string) (tvbuff_t *, guint32, packet_info *, proto_tree *, int, int, int, char *, int);
 typedef void (*addr_dissector_add_string) (const char *, gchar *, dissector_handle_t);
@@ -259,11 +259,11 @@
 typedef int (*addr_dissect_ber_boolean) (packet_info *, proto_tree *, tvbuff_t *, int, gint);
 typedef int (*addr_dissect_ber_choice) (packet_info *, proto_tree *, tvbuff_t *, int, const ber_choice *, gint, gint);
 typedef int (*addr_dissect_ber_generalized_time) (packet_info *, proto_tree *, tvbuff_t *, int, gint);
-typedef int (*addr_dissect_ber_sequence) (gboolean, packet_info *, proto_tree *, tvbuff_t *, int, ber_sequence *, gint, gint);
-typedef int (*addr_dissect_ber_sequence_of) (gboolean, packet_info *, proto_tree *, tvbuff_t *, int, ber_sequence *, gint, gint);
-typedef int (*addr_dissect_ber_set_of) (gboolean, packet_info *, proto_tree *, tvbuff_t *, int, ber_sequence *, gint, gint);
+typedef int (*addr_dissect_ber_sequence) (gboolean, packet_info *, proto_tree *, tvbuff_t *, int, const ber_sequence *, gint, gint);
+typedef int (*addr_dissect_ber_sequence_of) (gboolean, packet_info *, proto_tree *, tvbuff_t *, int, const ber_sequence *, gint, gint);
+typedef int (*addr_dissect_ber_set_of) (gboolean, packet_info *, proto_tree *, tvbuff_t *, int, const ber_sequence *, gint, gint);
 typedef int (*addr_dissect_ber_octet_string) (gboolean, packet_info *, proto_tree *, tvbuff_t *, int, gint, tvbuff_t **);
-typedef int (*addr_dissect_ber_bitstring) (gboolean, packet_info *, proto_tree *, tvbuff_t *, int, asn_namedbit *, gint, gint, tvbuff_t **);
+typedef int (*addr_dissect_ber_bitstring) (gboolean, packet_info *, proto_tree *, tvbuff_t *, int, const asn_namedbit *, gint, gint, tvbuff_t **);
 typedef int (*addr_dissect_ber_restricted_string) (gboolean, guint32, packet_info *, proto_tree *, tvbuff_t *, int, gint, tvbuff_t **);
 typedef int (*addr_dissect_ber_object_identifier) (gboolean, packet_info *, proto_tree *, tvbuff_t *, int, gint, char *);
 typedef int (*addr_get_ber_identifier) (tvbuff_t *, int, guint8 *, gboolean *, guint32 *);
@@ -292,3 +292,15 @@
 typedef int (*addr_dissect_rpc_indir_call) (tvbuff_t *, packet_info *, proto_tree *, int, int, guint32, guint32, guint32);
 typedef int (*addr_dissect_rpc_indir_reply) (tvbuff_t *, packet_info *, proto_tree *, int, int, int, int, int);
 typedef guint16 (*addr_crc16_ccitt_tvb) (tvbuff_t *, unsigned int);
+typedef guint64 (*addr_tvb_get_letoh64) (tvbuff_t *, gint);
+typedef guint64 (*addr_tvb_get_ntoh64) (tvbuff_t *, gint);
+typedef proto_item *(*addr_proto_tree_add_float) (proto_tree *, int, tvbuff_t *, gint, gint, float);
+typedef proto_item *(*addr_proto_tree_add_float_hidden) (proto_tree *, int, tvbuff_t *, gint, gint, float);
+typedef proto_item *(*addr_proto_tree_add_float_format) (proto_tree *, int, tvbuff_t *, gint, gint, float, const char *, ...);
+typedef gfloat (*addr_tvb_get_ntohieee_float) (tvbuff_t *, gint);
+typedef gdouble (*addr_tvb_get_ntohieee_double) (tvbuff_t *, gint);
+typedef gfloat (*addr_tvb_get_letohieee_float) (tvbuff_t *, gint);
+typedef gdouble (*addr_tvb_get_letohieee_double) (tvbuff_t *, gint);
+typedef proto_item *(*addr_proto_tree_add_debug_text) (proto_tree *, const char *, ...);
+typedef void (*addr_rtp_add_address) (packet_info *, address *, int, int, gchar *, guint32);
+typedef void (*addr_rtcp_add_address) (packet_info *, address *, int, int, gchar *, guint32);
diff -urN ethereal-0.10.6/plugins/acn/Makefile.in ethereal-0.10.7/plugins/acn/Makefile.in
--- ethereal-0.10.6/plugins/acn/Makefile.in	2004-08-12 21:04:21.000000000 -0500
+++ ethereal-0.10.7/plugins/acn/Makefile.in	2004-10-20 21:50:18.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -98,6 +98,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -109,10 +112,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -197,8 +203,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -480,7 +486,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -502,7 +508,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -527,7 +532,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/acn/Makefile.nmake ethereal-0.10.7/plugins/acn/Makefile.nmake
--- ethereal-0.10.6/plugins/acn/Makefile.nmake	2004-08-12 17:41:51.000000000 -0500
+++ ethereal-0.10.7/plugins/acn/Makefile.nmake	2004-10-20 17:34:34.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,13 +9,22 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-acn.obj 
 
-acn.dll acn.exp acn.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:acn.dll $(OBJECTS) ..\plugin_api.obj \
+acn.dll acn.exp acn.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:acn.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) acn.dll acn.exp acn.lib $(PDB_FILE)
+	rm -f $(OBJECTS) acn.dll acn.exp acn.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/acn/packet-acn.c ethereal-0.10.7/plugins/acn/packet-acn.c
--- ethereal-0.10.6/plugins/acn/packet-acn.c	2004-08-12 17:41:51.000000000 -0500
+++ ethereal-0.10.7/plugins/acn/packet-acn.c	2004-10-20 17:34:34.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-acn.c
  * Routines for ACN packet disassembly
  *
- * $Id: packet-acn.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-acn.c 12140 2004-09-29 22:20:21Z guy $
  *
  * Copyright (c) 2003 by Erwin Rol <erwin@erwinrol.com>
  *
@@ -33,19 +33,23 @@
 #include "plugins/plugin_api.h"
 
 #include "moduleinfo.h"
-#include "acn.h"
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <gmodule.h>
 #include <ctype.h>
 #include <time.h>
 #include <string.h>
+
+#include <glib.h>
+#include <gmodule.h>
+
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/strutil.h>
 
+#include "acn.h"
+
 #include "plugins/plugin_api_defs.h"
 
 /* Define version if we are not building ethereal statically */
diff -urN ethereal-0.10.6/plugins/artnet/Makefile.in ethereal-0.10.7/plugins/artnet/Makefile.in
--- ethereal-0.10.6/plugins/artnet/Makefile.in	2004-08-12 21:04:22.000000000 -0500
+++ ethereal-0.10.7/plugins/artnet/Makefile.in	2004-10-20 21:50:18.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -98,6 +98,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -109,10 +112,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -197,8 +203,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -480,7 +486,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -502,7 +508,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -527,7 +532,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/artnet/Makefile.nmake ethereal-0.10.7/plugins/artnet/Makefile.nmake
--- ethereal-0.10.6/plugins/artnet/Makefile.nmake	2004-08-12 17:41:51.000000000 -0500
+++ ethereal-0.10.7/plugins/artnet/Makefile.nmake	2004-10-20 17:34:34.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,13 +9,22 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-artnet.obj 
 
-artnet.dll artnet.exp artnet.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:artnet.dll $(OBJECTS) ..\plugin_api.obj \
+artnet.dll artnet.exp artnet.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:artnet.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) artnet.dll artnet.exp artnet.lib $(PDB_FILE)
+	rm -f $(OBJECTS) artnet.dll artnet.exp artnet.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/artnet/packet-artnet.c ethereal-0.10.7/plugins/artnet/packet-artnet.c
--- ethereal-0.10.6/plugins/artnet/packet-artnet.c	2004-08-12 17:41:51.000000000 -0500
+++ ethereal-0.10.7/plugins/artnet/packet-artnet.c	2004-10-20 17:34:34.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-artnet.c
  * Routines for Art-Net packet disassembly
  *
- * $Id: packet-artnet.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-artnet.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Copyright (c) 2003 by Erwin Rol <erwin@erwinrol.com>
  *
@@ -42,7 +42,7 @@
 #include <string.h>
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/strutil.h>
 
 #include "plugins/plugin_api_defs.h"
@@ -371,6 +371,8 @@
 static int hf_artnet_output_universe = -1;
 static int hf_artnet_output_length = -1;
 static int hf_artnet_output_data = -1;
+static int hf_artnet_output_dmx_data = -1;
+static int hf_artnet_output_data_filter = -1;
 
 /* ArtAddress */
 static int hf_artnet_address = -1;
@@ -491,6 +493,9 @@
 
 static guint global_udp_port_artnet = UDP_PORT_ARTNET;
 static guint udp_port_artnet = UDP_PORT_ARTNET;
+static guint global_disp_chan_val_type = 0;
+static guint global_disp_col_count = 16;
+static guint global_disp_chan_nr_type = 0;
 
 /* A static handle for the ip dissector */
 static dissector_handle_t ip_handle;
@@ -762,7 +767,21 @@
 static guint
 dissect_artnet_output(tvbuff_t *tvb, guint offset, proto_tree *tree)
 {
-  guint16 length;
+  proto_tree *hi,*si;
+  guint16 length,r,c,row_count;
+  guint8 v;
+  static char string[255];
+  char* ptr;
+  const char* chan_format[] = {
+    "%2u ",
+    "%02x ",
+    "%3u "
+  };
+  const char* string_format[] = {
+    "%03x: %s",
+    "%3u: %s"
+  };
+
   proto_tree_add_item(tree, hf_artnet_output_sequence, tvb,
                       offset, 1, FALSE);
   offset += 1;
@@ -780,7 +799,46 @@
                       offset, 2, length);
   offset += 2;
 
-  proto_tree_add_item(tree, hf_artnet_output_data, tvb,
+  hi = proto_tree_add_item(tree,
+                           hf_artnet_output_data,
+                           tvb,
+                           offset,
+                           length,
+                           FALSE);
+                                                                                                                
+  si = proto_item_add_subtree(hi, ett_artnet);
+
+  row_count = (length/global_disp_col_count) + ((length%global_disp_col_count) == 0 ? 0 : 1);
+  ptr = string;
+  for (r=0; r < row_count;r++) {
+    for (c=0;(c < global_disp_col_count) && (((r*global_disp_col_count)+c) < length);c++) {
+      if ((c % (global_disp_col_count/2)) == 0) {
+        sprintf(ptr, " ");
+        ptr++;
+      }
+
+      v = tvb_get_guint8(tvb, (offset+(r*global_disp_col_count)+c));
+      if (global_disp_chan_val_type == 0) {
+        v = (v * 100) / 255;
+        if (v == 100) {
+          sprintf(ptr, "FL ");
+        } else {
+          sprintf(ptr, chan_format[global_disp_chan_val_type], v);
+        }
+      } else {
+        sprintf(ptr, chan_format[global_disp_chan_val_type], v);
+      }
+      ptr += strlen(ptr);
+    }
+    
+    proto_tree_add_none_format(si,hf_artnet_output_dmx_data, tvb,
+                               offset+(r*global_disp_col_count), c, 
+                               string_format[global_disp_chan_nr_type], (r*global_disp_col_count)+1, string);
+    ptr = string;
+  }
+
+  /* Add the real type hidden */
+  proto_tree_add_item_hidden(si, hf_artnet_output_data_filter, tvb,
                       offset, length, FALSE );
   offset += length;
 
@@ -2055,7 +2113,19 @@
     { &hf_artnet_output_data,
       { "DMX data",
         "artnet.output.data",
+        FT_NONE, BASE_DEC, NULL, 0x0,
+        "DMX Data", HFILL }},
+
+    { &hf_artnet_output_data_filter,
+      { "DMX data filter",
+        "artnet.output.data_filter",
         FT_BYTES, BASE_DEC, NULL, 0x0,
+        "DMX Data Filter", HFILL }},
+
+    { &hf_artnet_output_dmx_data,
+      { "DMX data",
+        "artnet.output.dmx_data",
+        FT_NONE, BASE_DEC, NULL, 0x0,
         "DMX Data", HFILL }},
 
     /* ArtAddress */
@@ -2573,6 +2643,28 @@
 
   module_t *artnet_module;
 
+  static enum_val_t disp_chan_val_types[] = {
+     { "pro", "Percent", 0 },
+     { "hex", "Hexadecimal", 1 },
+     { "dec", "Decimal", 2 },
+     { NULL, NULL, 0 }
+  };
+
+  static enum_val_t disp_chan_nr_types[] = {
+     { "hex", "Hexadecimal", 0 },
+     { "dec", "Decimal", 1 },
+     { NULL, NULL, 0 }
+  };
+
+  static enum_val_t col_count[] = {
+     { "6", "6", 6 },
+     { "10", "10", 10 },
+     { "12", "12", 12 },
+     { "16", "16", 16 },
+     { "24", "24", 24 },
+     { NULL, NULL, 0 }
+  };
+
   proto_artnet = proto_register_protocol("Art-Net",
 				       "ARTNET","artnet");
   proto_register_field_array(proto_artnet,hf,array_length(hf));
@@ -2581,12 +2673,29 @@
   artnet_module = prefs_register_protocol(proto_artnet,
 					proto_reg_handoff_artnet);
   prefs_register_uint_preference(artnet_module, "udp_port",
-				 "ARTNET UDP Port",
+				 "UDP Port",
 				 "The UDP port on which "
 				 "Art-Net "
 				 "packets will be sent",
 				 10,&global_udp_port_artnet);
 
+  prefs_register_enum_preference(artnet_module, "dmx_disp_chan_val_type",
+            "DMX Display channel value type", 
+            "The way DMX values are displayed", 
+				 &global_disp_chan_val_type,
+            			 disp_chan_val_types, FALSE);
+
+  prefs_register_enum_preference(artnet_module, "dmx_disp_chan_nr_type",
+            "DMX Display channel nr. type",
+            "The way DMX channel numbers are displayed",
+                                 &global_disp_chan_nr_type,
+                                 disp_chan_nr_types, FALSE);
+
+  prefs_register_enum_preference(artnet_module, "dmx_disp_col_count",
+            "DMX Display Column Count",
+            "The number of columns for the DMX display",
+                                 &global_disp_col_count,
+                                 col_count, FALSE);
 }
 
 /* The registration hand-off routing */
diff -urN ethereal-0.10.6/plugins/asn1/Makefile.in ethereal-0.10.7/plugins/asn1/Makefile.in
--- ethereal-0.10.6/plugins/asn1/Makefile.in	2004-08-12 21:04:22.000000000 -0500
+++ ethereal-0.10.7/plugins/asn1/Makefile.in	2004-10-20 21:50:18.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -98,6 +98,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -109,10 +112,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -197,8 +203,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -475,7 +481,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -497,7 +503,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -522,7 +527,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/asn1/Makefile.nmake ethereal-0.10.7/plugins/asn1/Makefile.nmake
--- ethereal-0.10.6/plugins/asn1/Makefile.nmake	2004-08-12 17:41:51.000000000 -0500
+++ ethereal-0.10.7/plugins/asn1/Makefile.nmake	2004-10-20 17:34:35.000000000 -0500
@@ -1,31 +1,30 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
 
 ############### no need to modify below this line #########
 
-# XXX: that's odd here, no GTK stuff should be in the plugins dir,
-# so move all GTK specific stuff into gtk dir.
-# As GTK1_CFLAGS isn't correct here, we don't have GTK_CFLAGS
-# any longer, so no better choice here. If the move of GTK code 
-# finished, replace this with GLIB_CFLAGS.
-# The same applies to GTK1_LIBS -> GLIB_LIBS.
-CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GTK1_CFLAGS) \
+CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
-OBJECTS=packet-asn1.obj 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
 
-asn1.dll asn1.exp asn1.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:asn1.dll $(OBJECTS) ..\plugin_api.obj \
-!IFDEF GTK1_DIR
-	$(GTK1_LIBS)
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
 !ELSE
-	$(GTK2_LIBS)
+LINK_PLUGIN_WITH=..\plugin_api.obj
 !ENDIF
 
+OBJECTS=packet-asn1.obj 
+
+asn1.dll asn1.exp asn1.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:asn1.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
+	$(GLIB_LIBS)
+
 clean:
-	rm -f $(OBJECTS) asn1.dll asn1.exp asn1.lib $(PDB_FILE)
+	rm -f $(OBJECTS) asn1.dll asn1.exp asn1.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/asn1/packet-asn1.c ethereal-0.10.7/plugins/asn1/packet-asn1.c
--- ethereal-0.10.6/plugins/asn1/packet-asn1.c	2004-08-12 17:41:52.000000000 -0500
+++ ethereal-0.10.7/plugins/asn1/packet-asn1.c	2004-10-20 17:34:35.000000000 -0500
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2003 by Matthijs Melchior <matthijs.melchior@xs4all.nl>
  *
- * $Id: packet-asn1.c 11623 2004-08-08 01:20:26Z guy $
+ * $Id: packet-asn1.c 12140 2004-09-29 22:20:21Z guy $
  *
  * A plugin for:
  *
@@ -79,12 +79,12 @@
 #include <string.h>
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/strutil.h>
 #include <epan/filesystem.h>
 #include <epan/report_err.h>
+#include <epan/dissectors/packet-tcp.h>
 #include "asn1.h"
-#include "simple_dialog.h"
 
 #include "plugins/plugin_api_defs.h"
 
@@ -92,7 +92,7 @@
 #include <gtk/gtk.h>
 #endif
 
-#include <ipproto.h>
+#include <epan/ipproto.h>
 
 /* Define version if we are not building ethereal statically */
 
@@ -152,7 +152,7 @@
 static char *asn1_filename = NULL;
 static char *old_default_asn1_filename = NULL;
 #define OLD_DEFAULT_ASN1FILE "asn1" G_DIR_SEPARATOR_S "default.tt"
-#ifdef WIN32
+#ifdef _WIN32
 #define BAD_SEPARATOR_OLD_DEFAULT_ASN1FILE "asn1/default.tt"
 static char *bad_separator_old_default_asn1_filename = NULL;
 #endif
@@ -182,10 +182,10 @@
 #define NEL(x) (sizeof(x)/sizeof(*x)) /* # elements in static array */
 
 
-char pabbrev[] = "asn1";	/* field prefix */
+static char pabbrev[] = "asn1";	/* field prefix */
 
-char fieldname[512];		/* for constructing full names */
-guint pabbrev_pdu_len;		/* length initial part of fieldname with 'abbrev.asn1pdu.' */
+static char fieldname[512];		/* for constructing full names */
+static guint pabbrev_pdu_len;		/* length initial part of fieldname with 'abbrev.asn1pdu.' */
 
 /*
  * Text strings describing the standard, universal, ASN.1 names.
@@ -194,13 +194,13 @@
 #define ASN1_EOI 4 /* this is in the class number space... */
 #define ASN1_BEG 2 /* to be merged with constructed flag, first entry in sequence */
 
-char tag_class[] = "UACPX";
+static char tag_class[] = "UACPX";
 
-char *asn1_cls[] = { "Universal", "Application", "Context", "Private" };
+static char *asn1_cls[] = { "Universal", "Application", "Context", "Private" };
 
-char *asn1_con[] = { "Primitive", "Constructed" };
+static char *asn1_con[] = { "Primitive", "Constructed" };
 
-char *asn1_tag[] = {
+static char *asn1_tag[] = {
 	/*  0 */ "EOC", 	    "Boolean",        "Integer",          "BitString",
 	/*  4 */ "OctetString",     "Null",           "ObjectIdentifier", "ObjectDescriptor",
 	/*  8 */ "External",        "Real",           "Enumerated",       "tag11",
@@ -214,7 +214,7 @@
 };
 
 /* type names used in the output of the snacc ASN.1 compiler, the TBLTypeId enum */
-gboolean tbl_types_verified = FALSE;
+static gboolean tbl_types_verified = FALSE;
 
 typedef enum {	/* copied from .../snacc/c-lib/boot/tbl.h */
         TBL_BOOLEAN = 0,
@@ -243,7 +243,7 @@
 } TBLTypeId;
 
 /* Universal tags mapped to snacc ASN.1 table types */
-int asn1_uni_type[] = {
+static int asn1_uni_type[] = {
 	/*  0 */ TBL_INVALID,	  TBL_BOOLEAN,	   TBL_INTEGER,     TBL_BITSTRING,
 	/*  4 */ TBL_OCTETSTRING, TBL_NULL,	   TBL_OID,	    TBL_INVALID,
 	/*  8 */ TBL_INVALID,	  TBL_REAL,	   TBL_ENUMERATED,  TBL_INVALID,
@@ -270,7 +270,8 @@
 #define TBLTYPE(x) (tbl_types[x&TBL_TYPEmask])
 
 /* text tables for debugging and GUI */
-char *tbl_types[] = {  /*  0 */	"tbl-boolean",
+static char *tbl_types[] = {
+		       /*  0 */	"tbl-boolean",
 		       /*  1 */	"tbl-integer",
 		       /*  2 */	"tbl-bitstring",
 		       /*  2 */	"tbl-octetstring",
@@ -293,7 +294,7 @@
 
 		       /* 19 */ "tbl-invalid",
 };
-char *tbl_types_asn1[] = {
+static char *tbl_types_asn1[] = {
 		       /*  0 */	"BOOLEAN",
 		       /*  1 */	"INTEGER",
 		       /*  2 */	"BITSTRING",
@@ -318,7 +319,7 @@
 		       /* 19 */ "INVALID entry",
 };
 /* conversion from snacc type to appropriate ethereal type */
-guint tbl_types_ethereal[] = {
+static guint tbl_types_ethereal[] = {
 		       /*  0 */	FT_BOOLEAN,	/* TBL_BOOLEAN */
 		       /*  1 */	FT_UINT32,	/* TBL_INTEGER */
 		       /*  2 */	FT_UINT32,	/* TBL_BITSTRING */
@@ -343,7 +344,7 @@
 		       /* 19 */ FT_NONE,	/* TBL_INVALID */		
 };
 
-char *tbl_types_ethereal_txt[] = {
+static char *tbl_types_ethereal_txt[] = {
 		       /*  0 */	"FT_BOOLEAN",	/* TBL_BOOLEAN */
 		       /*  1 */	"FT_UINT32",	/* TBL_INTEGER */
 		       /*  2 */	"FT_UINT32",	/* TBL_BITSTRING */
@@ -398,7 +399,7 @@
 
 #define PDU_CHOICE    0x08000000   /* manipulated by the PDUname routine */
 
-guint PDUinfo_initflags = 0;	/* default flags for newly allocated PDUinfo structs */
+static guint PDUinfo_initflags = 0;	/* default flags for newly allocated PDUinfo structs */
 
 /* description of PDU properties as passed from the matching routine
  * to the decoder and GUI.
@@ -422,10 +423,10 @@
 #define OUT_FLAG_noname	     0x10
 #define OUT_FLAG_constructed 0x20
 
-PDUprops *getPDUprops(PDUprops *out, guint offset, guint class, guint tag, guint cons);
-char *getPDUenum(PDUprops *props, guint offset, guint cls, guint tag, guint value);
+static PDUprops *getPDUprops(PDUprops *out, guint offset, guint class, guint tag, guint cons);
+static char *getPDUenum(PDUprops *props, guint offset, guint cls, guint tag, guint value);
 
-char empty[] = "";		/* address of the empt string, avoids many tests for NULL */
+static char empty[] = "";		/* address of the empt string, avoids many tests for NULL */
 #define MAX_OTSLEN 256		/* max printed size for an octet string */
 
 
@@ -434,12 +435,12 @@
 #ifdef NEST			/* only for debugging */
 /* show nesting, only for debugging... */
 #define MAXTAGS MAX_NEST
-struct {
+static struct {
 	guchar cls;
 	guchar tag;
 } taglist[MAXTAGS];
 
-char *showtaglist(guint level)
+static char *showtaglist(guint level)
 {
 	static char tagtxt[BUFLM];
 	char *p = tagtxt;
@@ -468,7 +469,7 @@
 	return tagtxt;
 }
 
-guint
+static guint
 get_context(guint level)
 {
 	guint ctx = 0;
@@ -486,7 +487,7 @@
 /* Convert a bit string to an ascii representation for printing
  * -- not thread safe ...
  */
-char *showbits(guchar *val, guint count)
+static char *showbits(guchar *val, guint count)
 {
 	static char str[BUFLM];
 	guint i;
@@ -506,7 +507,8 @@
 }
 
 /* get bitnames string for bits set */
-char * showbitnames(guchar *val, guint count, PDUprops *props, guint offset)
+static char *
+showbitnames(guchar *val, guint count, PDUprops *props, guint offset)
 {
 	static char str[BUFLL];
 	guint i;
@@ -536,7 +538,7 @@
 /* Convert an oid to its conventional text representation
  * -- not thread safe...
  */
-char *showoid(subid_t *oid, guint len)
+static char *showoid(subid_t *oid, guint len)
 {
 	static char str[BUFLM];
 	guint i;
@@ -553,7 +555,8 @@
 }
 
 /* show octetstring, if all ascii, show that, else hex [returnrd string must be freed by caller] */
-char *showoctets(guchar *octets, guint len, guint hexlen) /* if len <= hexlen, always show hex */
+static char *
+showoctets(guchar *octets, guint len, guint hexlen) /* if len <= hexlen, always show hex */
 {
 	guint dohex = 0;
 	guint i;
@@ -599,7 +602,7 @@
 }
 
 /* allow NULL pointers in strcmp, handle them as empty strings */
-int
+static int
 g_strcmp(gconstpointer a, gconstpointer b)
 {
 	if (a == 0) a = empty;
@@ -619,7 +622,8 @@
 /*************************************************************/
 
 /* check length for a reasonable value, return a corrected value */
-int checklength(int len, int def, int cls, int tag, char *lenstr, int strmax)
+static int
+checklength(int len, int def, int cls, int tag, char *lenstr, int strmax)
 {
 	int newlen = len;
 
@@ -701,8 +705,8 @@
 	return newlen;
 }
 
-guint decode_asn1_sequence(tvbuff_t *tvb, guint offset, guint len, proto_tree *pt, int level);
-void PDUreset(int count, int counr2);
+static guint decode_asn1_sequence(tvbuff_t *tvb, guint offset, guint len, proto_tree *pt, int level);
+static void PDUreset(int count, int counr2);
 
 static void 
 dissect_asn1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
@@ -932,7 +936,7 @@
 }
 
 /* decode an ASN.1 sequence, until we have consumed the specified length */
-guint
+static guint
 decode_asn1_sequence(tvbuff_t *tvb, guint offset, guint tlen, proto_tree *pt, int level)
 {
   ASN1_SCK asn1;
@@ -1706,7 +1710,7 @@
 
 int icount = 0;			/* item counter */
 
-guint
+static guint
 parse_tt3(tvbuff_t *tvb, guint offset, guint size, guint level, GNode *ptr)
 {
 	ASN1_SCK asn1;
@@ -1840,9 +1844,10 @@
 	return offset;
 }
 
-void showGNodes(GNode *p, int n);
+static void showGNodes(GNode *p, int n);
 
-gboolean
+#if 0
+static gboolean
 myLeaf(GNode *node, gpointer data)
 {
 	ASN1_SCK asn1;
@@ -1876,7 +1881,7 @@
 	return FALSE;
 }
 
-void
+static void
 list_modules(void)
 {
 	if (asn1_verbose) g_message("build GNode tree:");
@@ -1890,8 +1895,9 @@
 	g_node_traverse(g_node_first_child(asn1_nodes), G_PRE_ORDER, G_TRAVERSE_LEAFS, -1, myLeaf, 0);
 
 }
+#endif
 
-void
+static void
 tt_build_tree(void)		/* build a GNode tree with all offset's to ASN.1 entities */
 {
 	if (asn1_nodes)
@@ -1904,7 +1910,7 @@
 
 /*****************************************************************************************************/
 
-guint anonCount;  /* for naming anonymous types */
+static guint anonCount;  /* for naming anonymous types */
 
 typedef struct _TBLModule 	TBLModule;
 typedef struct _TBLTypeDef	TBLTypeDef;
@@ -1925,7 +1931,8 @@
 };
 typedef enum _tbl_t tbl_t;
 /* text for 'tbl_t' type for debugging */
-char *data_types[] = {	"Module",
+static char *data_types[] = {
+			"Module",
 			"TypeDef",
 			"Tag",
 			"Type",
@@ -2001,7 +2008,7 @@
 
 #define CHECKP(p) {if (p==0){g_warning("pointer==0, line %d **********", __LINE__);return;}}
 
-guint
+static guint
 get_asn1_int(guint want_tag, guint offset)
 {
 	ASN1_SCK asn1;
@@ -2029,7 +2036,7 @@
 	return 0;
 }
 
-subid_t *			/* with prepended length ..... */
+static subid_t *			/* with prepended length ..... */
 get_asn1_oid(guint want_tag, guint offset)
 {
 	ASN1_SCK asn1;
@@ -2060,7 +2067,7 @@
 	return 0;
 }
 
-guchar *			/* 0 terminated string */
+static guchar *			/* 0 terminated string */
 get_asn1_string(guint want_tag, guint offset)
 {
 	ASN1_SCK asn1;
@@ -2090,7 +2097,7 @@
 	return 0;
 }
 
-guint
+static guint
 get_asn1_uint(guint offset)
 {
 	ASN1_SCK asn1;
@@ -2109,7 +2116,7 @@
 	return value;
 }
 
-gboolean
+static gboolean
 check_tag(guint want_tag, guint offset)
 {
 	ASN1_SCK asn1;
@@ -2128,7 +2135,8 @@
 	return FALSE;
 }
 
-gboolean
+#if 0
+static gboolean
 constructed(guint offset)
 {
 	ASN1_SCK asn1;
@@ -2149,8 +2157,9 @@
 
 	return FALSE;
 }
+#endif
 
-void
+static void
 define_constraint(GNode *p, GNode *q)
 {
 	TBLRange *range = g_malloc(sizeof(TBLRange));
@@ -2169,7 +2178,7 @@
 
 }
 
-void
+static void
 define_namednumber(GNode *p, GNode *q)
 {
 	TBLNamedNumber *num = g_malloc(sizeof(TBLNamedNumber));
@@ -2187,7 +2196,7 @@
 	num->value = get_asn1_int(1, (guint)p->data);
 }
 
-void
+static void
 define_typeref(GNode *p, GNode *q)
 {
 	TBLTypeRef *ref = g_malloc(sizeof(TBLTypeRef));
@@ -2205,7 +2214,7 @@
 	ref->implicit = get_asn1_int(ASN1_BOL, (guint)p->data);
 }
 
-void
+static void
 define_tag(GNode *p, GNode *q)
 {
 	TBLTag *type = g_malloc(sizeof(TBLTag));
@@ -2224,7 +2233,7 @@
 	
 }
 
-void
+static void
 define_type(GNode *p, GNode *q)
 {
 	GNode *r;
@@ -2304,7 +2313,7 @@
 	}
 }
 
-void
+static void
 define_typedef(GNode *p, GNode *q)
 {
 	TBLTypeDef *type_def = g_malloc(sizeof(TBLTypeDef));
@@ -2329,7 +2338,7 @@
 	type_def->isPdu = (p != 0);  /* true if it exists, value ignored */
 }
 
-void
+static void
 define_module(GNode *p, GNode *q)
 {
 	TBLModule *module = g_malloc(sizeof(TBLModule));
@@ -2367,7 +2376,7 @@
 	GNode *here;
 };
 
-gboolean
+static gboolean
 is_typedef(GNode *node, gpointer data)
 {
 	TBLTypeDef *d = (TBLTypeDef *)node->data;
@@ -2403,7 +2412,7 @@
 #define ALLOC_INCR 4
 #define CLASSREF (ASN1_PRV+1)
 
-gboolean
+static gboolean
 is_named(GNode *node, gpointer data)
 {
 	TBLNamedNumber *num = (TBLNamedNumber *)node->data;
@@ -2427,7 +2436,7 @@
 	return FALSE;
 }
 
-gboolean
+static gboolean
 index_typedef(GNode *node, gpointer data)
 {
 	TBLTypeDef *d = (TBLTypeDef *)node->data;
@@ -2482,10 +2491,17 @@
 	return FALSE;
 }
 
-TypeRef *typeDef_names = 0;
-guint numTypedefs = 0;
+static TypeRef *typeDef_names = 0;
+static guint numTypedefs = 0;
 
-void
+static gboolean
+free_node_data(GNode *node, gpointer data _U_)
+{
+	g_free(node->data);
+	return FALSE;
+}
+
+static void
 get_values(void)		/* collect values from ASN.1 tree */
 				/* coded according to the tbl.asn1 description of snacc output */ 
 {				/* This routine does not leave references to the tvbuff or */
@@ -2500,8 +2516,11 @@
 	if (asn1_verbose) g_message("interpreting tree");
 	typeDef_names = 0;  /* just forget allocated any data .... */
 	
-	if (data_nodes)
+	if (data_nodes) {
+		g_node_traverse(data_nodes, G_POST_ORDER, G_TRAVERSE_ALL, -1,
+		    free_node_data, NULL);
 		g_node_destroy(data_nodes);
+	}
 			
 	data_nodes = g_node_new(0);
 
@@ -2586,7 +2605,7 @@
 
 }
 
-void
+static void
 showGNode(GNode *p, int n)
 {
 	if (p == 0) return;
@@ -2662,7 +2681,7 @@
 	}
 }
 
-void
+static void
 showGNodes(GNode *p, int n)
 {
 	if (p == 0) return;
@@ -2671,7 +2690,7 @@
 	showGNodes(p->next, n);
 }
 
-void showGenv(GNode *p, int n, int m)
+static void showGenv(GNode *p, int n, int m)
 {
 	int i;
 
@@ -2689,7 +2708,7 @@
 
 }
 
-void
+static void
 debug_dump_TT(void)		/* dump contents of TT struct, for debugging */
 {
 	if (asn1_verbose)
@@ -2702,7 +2721,7 @@
 			TT.totalLenStrings);
 }
 
-void
+static void
 my_log_handler(const gchar *log_domain, GLogLevelFlags log_level,
 		const gchar *message, gpointer user_data)
 {
@@ -2721,7 +2740,7 @@
         }
 }
 
-void
+static void
 read_asn1_type_table(char *filename)
 {
 	FILE *f;
@@ -2742,7 +2761,7 @@
 		 * separator.
 		 */
 		if ((strcmp(filename, old_default_asn1_filename) != 0
-#ifdef WIN32
+#ifdef _WIN32
 		    && strcmp(filename, bad_separator_old_default_asn1_filename) != 0
 #endif
 		    ) || errno != ENOENT)
@@ -2786,12 +2805,14 @@
 	tt_build_tree();
 	if (asn1_verbose) g_message("read %d items from %s", icount, filename);	
 
-	/* list_modules(); */
+#if 0
+	list_modules();
+#endif
 
 	get_values();
 
 	g_node_destroy(asn1_nodes);	asn1_nodes = 0;
-#ifndef WIN32		/* tvb_free not yet exported to plugins... */
+#ifndef _WIN32		/* tvb_free not yet exported to plugins... */
 	tvb_free(asn1_desc);
 #endif
 					asn1_desc = 0;
@@ -2808,7 +2829,7 @@
 			data_types[((TBLTag *)p->data)->type], data_types[(x)], __LINE__);}
 
 
-void
+static void
 save_reference(PDUinfo *p)
 {
 	gint i = p->mytype;
@@ -2819,13 +2840,13 @@
 	g_ptr_array_add(typeDef_names[i].refs, (gpointer)p);
 }
 
-void
+static void
 tbl_type(guint n, GNode *pdu, GNode *list, guint fullindex);
 
 
 
 	/* evaluate typeref, pointer to current pdu node and typedef */
-void
+static void
 tbl_typeref(guint n, GNode *pdu, GNode *tree, guint fullindex)
 {
 	GNode *q;
@@ -2994,7 +3015,7 @@
 	}
 }
 
-void
+static void
 tbl_type(guint n, GNode *pdu, GNode *list, guint fullindex) /* indent, pdu, source type node list */
 {
 	GNode *q, *pdu1;
@@ -3236,7 +3257,7 @@
 	}
 }
 
-void
+static void
 PDUtext(char *txt, PDUinfo *info) /* say everything we know about this entry */
 {
 	PDUinfo *rinfo;
@@ -3291,7 +3312,7 @@
 }
 
 
-void
+static void
 showPDUtree(GNode *p, int n)
 {
 	PDUinfo *info;
@@ -3312,7 +3333,7 @@
 	return;
 }
 
-gboolean
+static gboolean
 build_pdu_tree(char *pduname)
 {
 	SearchDef sd;
@@ -3322,6 +3343,10 @@
 
 	if (asn1_verbose) g_message("build msg tree from '%s' for '%s'", current_asn1, pduname);
 
+	if (!data_nodes) {
+		if (asn1_verbose) g_message("no data nodes");
+		return FALSE;
+	}
 	sd.key = pduname;
 	sd.here = 0;
 	g_node_traverse(data_nodes, G_PRE_ORDER, G_TRAVERSE_ALL, -1, is_typedef, (gpointer)&sd);
@@ -3333,6 +3358,13 @@
 		return FALSE;
 	}
 
+	/* If there's an existing PDU tree, free it */
+	if (PDUtree) {
+		g_node_traverse(PDUtree, G_POST_ORDER, G_TRAVERSE_ALL, -1,
+		    free_node_data, NULL);
+		g_node_destroy(PDUtree);
+	}
+
 	/* initialize the PDU tree, hand craft the root entry */
 
 	info = g_malloc0(sizeof(PDUinfo));
@@ -3498,9 +3530,9 @@
    N_COLUMNS
 };
 
-FILE *namelist = 0;
+static FILE *namelist = 0;
 
-void
+static void
 build_tree_view(GtkTreeStore *store, GNode *p, GtkTreeIter *iter)
 {
 	GtkTreeIter iter2;
@@ -3572,10 +3604,10 @@
 };
 
 #define PATHSTACKMAX 10
-GtkTreePath *pathstack[PATHSTACKMAX];
-gint pathstackp = 0;
+static GtkTreePath *pathstack[PATHSTACKMAX];
+static gint pathstackp = 0;
 
-void add_path(GtkTreePath *p)
+static void add_path(GtkTreePath *p)
 {
 	if (pathstackp >= PATHSTACKMAX) { /* shift old contents */
 		gtk_tree_path_free(pathstack[0]); /* we forget about this one */
@@ -3585,13 +3617,15 @@
 	pathstack[pathstackp++] = p;
 }
 
-GtkTreePath *pop_path() {
+static GtkTreePath *pop_path(void)
+{
 	if (pathstackp > 0)
 		return pathstack[--pathstackp];
 	return 0;
 }
 
-gboolean find_definition(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
+static gboolean
+find_definition(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
 {
 	gint def;
 
@@ -3607,7 +3641,7 @@
 
 }
 
-void
+static void
 my_signal_handler(GtkTreeView *treeview, GtkTreePath *spath, GtkTreeViewColumn *arg2, gpointer model)
 {
 	GtkTreeIter iter;
@@ -3783,8 +3817,8 @@
 }
 
 
-void
-create_message_window()
+static void
+create_message_window(void)
 {
 	GtkCellRenderer *renderer;
 	GtkTreeStore *model;
@@ -3936,13 +3970,13 @@
  *    routines to find names to go with the decoded data stream	 				*
  ************************************************************************************************/
 typedef struct _statestack statestack;
-struct _statestack {
+static struct _statestack {
 	GNode *node;
 	guint type;
 	guint offset;
 	char *name;
 } PDUstate[1024];
-gint PDUstatec = 0;
+static gint PDUstatec = 0;
 
 #define PUSHNODE(x)   { PDUstate[PDUstatec++] = (x); }
 #define STORENODE(x)  { PDUstate[PDUstatec-1] = (x); }
@@ -3967,7 +4001,7 @@
 				pos.node=0;PUSHNODE(pos);return ret;}}
 
 
-void
+static void
 showstack(statestack *pos, char *txt, int n)
 {
 	char buf[1024], *name, *type, *stype;
@@ -4033,7 +4067,7 @@
 	g_message(buf);
 }
 
-void
+static void
 showrefNode(GNode *node, int n)
 {
 	char *name = empty, *type = empty, *tname = empty;
@@ -4062,7 +4096,7 @@
 		showrefNode(ref, n+1);
 }
 
-void
+static void
 showNode(GNode *node, int n, int m)
 {
 	char *name = empty, *type = empty;
@@ -4091,7 +4125,7 @@
 	if (node->next) showNode(node->next, n, m);
 }
 
-void
+static void
 PDUreset(int count, int count2)
 {
 	statestack pos;
@@ -4116,7 +4150,7 @@
 	}
 }
 
-GNode *				/* find GNode for a choice element, 0 if none */
+static GNode *			/* find GNode for a choice element, 0 if none */
 makechoice(GNode *p, guint class, guint tag)
 {
 	GNode *q;
@@ -4159,7 +4193,7 @@
 }
 
 		/* offset is for debugging only, a reference to output on screen */
-PDUprops *
+static PDUprops *
 getPDUprops(PDUprops *out, guint offset, guint class, guint tag, guint cons)
 {
 	statestack pos, pos2, save_pos;
@@ -4720,7 +4754,7 @@
 	return out;
 }
 
-char *
+static char *
 getPDUenum(PDUprops *props, guint offset, guint cls, guint tag, guint value)
 {
 	GNode *list;
@@ -4773,7 +4807,7 @@
 /* insert error text in front of spec
  * with a delimeter we can recognize on next attempt
  */
-void insert_error(gchar *s, int len, gchar *err, guint mark)
+static void insert_error(gchar *s, int len, gchar *err, guint mark)
 {
 	gchar *news;
 	guint slen;
@@ -4790,7 +4824,7 @@
 
 /* parse a range of port numbers: a,b-c,d
  */
-GSList *parse_port_range(gchar *s, int len)
+static GSList *parse_port_range(gchar *s, int len)
 {
 	GSList *list = NULL;
 	guint n, count, fill, fillstart = 0;
@@ -4866,7 +4900,7 @@
 
 /* build text representation of given port list
  */
-void show_port_range(GSList *list, gchar *buf, int len)
+static void show_port_range(GSList *list, gchar *buf, int len)
 {
 	gchar delim = 0;
 	int this, last, size;
@@ -4926,6 +4960,9 @@
 
   asn1_logfile = get_tempfile_path(ASN1LOGFILE);
 
+  current_asn1 = g_strdup("");
+  asn1_filename = g_strdup(current_asn1);
+
   current_pduname = g_strdup("ASN1");
   asn1_pduname = g_strdup(current_pduname);
 
@@ -4995,7 +5032,7 @@
 				 &asn1_desegment);
 
   old_default_asn1_filename = get_datafile_path(OLD_DEFAULT_ASN1FILE);
-#ifdef WIN32
+#ifdef _WIN32
   bad_separator_old_default_asn1_filename = get_datafile_path(BAD_SEPARATOR_OLD_DEFAULT_ASN1FILE);
 #endif
 
@@ -5094,57 +5131,8 @@
 #endif /* JUST_ONE_PORT */
   }
 
-#ifdef JUST_ONE_PORT
-  tcp_port_asn1 = global_tcp_port_asn1;
-  udp_port_asn1 = global_udp_port_asn1;
-  sctp_port_asn1 = global_sctp_port_asn1;
-
-  dissector_add("tcp.port", global_tcp_port_asn1, asn1_handle);
-  dissector_add("udp.port", global_udp_port_asn1, asn1_handle);
-  dissector_add("sctp.port", global_sctp_port_asn1, asn1_handle);
-#else
-  len = strlen(global_tcp_ports_asn1) + 32; /* extra for possible error message */
-  global_tcp_ports_asn1 = realloc(global_tcp_ports_asn1, len);
-  tcp_ports_asn1 = parse_port_range(global_tcp_ports_asn1, len);
-  if (tcp_ports_asn1)		/* no error, normalize presentation */
-	  show_port_range(tcp_ports_asn1, global_tcp_ports_asn1, len);
-  else
-	  g_message("tcp_ports: %s\n", global_tcp_ports_asn1);
-
-  len = strlen(global_udp_ports_asn1) + 32; /* extra for possible error message */
-  global_udp_ports_asn1 = realloc(global_udp_ports_asn1, len);
-  udp_ports_asn1 = parse_port_range(global_udp_ports_asn1, len);
-  if (udp_ports_asn1)		/* no error, normalize presentation */
-	  show_port_range(udp_ports_asn1, global_udp_ports_asn1, len);
-  else
-	  g_message("udp_ports: %s\n", global_udp_ports_asn1);
-
-  len = strlen(global_sctp_ports_asn1) + 32; /* extra for possible error message */
-  global_sctp_ports_asn1 = realloc(global_sctp_ports_asn1, len);
-  sctp_ports_asn1 = parse_port_range(global_sctp_ports_asn1, len);
-  if (sctp_ports_asn1)		/* no error, normalize presentation */
-	  show_port_range(sctp_ports_asn1, global_sctp_ports_asn1, len);
-  else
-	  g_message("sctp_ports: %s\n", global_sctp_ports_asn1);
-
-  list = tcp_ports_asn1;
-  while (list) {
-	  dissector_add("tcp.port", GPOINTER_TO_INT(list->data), asn1_handle);
-	  list = g_slist_next(list);
-  }
-  list = udp_ports_asn1;
-  while (list) {
-	  dissector_add("udp.port", GPOINTER_TO_INT(list->data), asn1_handle);
-	  list = g_slist_next(list);
-  }
-  list = sctp_ports_asn1;
-  while (list) {
-	  dissector_add("sctp.port", GPOINTER_TO_INT(list->data), asn1_handle);
-	  list = g_slist_next(list);
-  }
-#endif /* JUST_ONE_PORT */
-
-  if ( g_strcmp(asn1_filename, current_asn1) != 0) { /* new defintions, parse it */
+  if (strcmp(asn1_filename, current_asn1) != 0) {
+	  /* new definitions, parse the file if we have one */
 	  /* !!! should be postponed until we really need it !!! */
 #ifdef READSYNTAX
 	  read_asn1_type_table(asn1_filename);
@@ -5152,7 +5140,8 @@
 	  g_free(current_asn1);
 	  current_asn1 = g_strdup(asn1_filename);
   }
-  if (g_strcmp(asn1_pduname, current_pduname) != 0) { /* new PDU type, build tree for it */
+  if (!PDUtree ||	/* no tree built yet for PDU type */
+      strcmp(asn1_pduname, current_pduname) != 0) { /* new PDU type, build tree for it */
 	  if (build_pdu_tree(asn1_pduname)) {
 		  g_free(current_pduname);
 		  current_pduname = g_strdup(asn1_pduname);
@@ -5167,6 +5156,59 @@
 	  create_message_window();
   }
 #endif /* SHOWPDU */
+
+  /* If we now have a PDU tree, register for the port or ports we have */
+  if (PDUtree) {
+#ifdef JUST_ONE_PORT
+    tcp_port_asn1 = global_tcp_port_asn1;
+    udp_port_asn1 = global_udp_port_asn1;
+    sctp_port_asn1 = global_sctp_port_asn1;
+
+    dissector_add("tcp.port", global_tcp_port_asn1, asn1_handle);
+    dissector_add("udp.port", global_udp_port_asn1, asn1_handle);
+    dissector_add("sctp.port", global_sctp_port_asn1, asn1_handle);
+#else
+    len = strlen(global_tcp_ports_asn1) + 32; /* extra for possible error message */
+    global_tcp_ports_asn1 = realloc(global_tcp_ports_asn1, len);
+    tcp_ports_asn1 = parse_port_range(global_tcp_ports_asn1, len);
+    if (tcp_ports_asn1)		/* no error, normalize presentation */
+	  show_port_range(tcp_ports_asn1, global_tcp_ports_asn1, len);
+    else
+	  g_message("tcp_ports: %s\n", global_tcp_ports_asn1);
+
+    len = strlen(global_udp_ports_asn1) + 32; /* extra for possible error message */
+    global_udp_ports_asn1 = realloc(global_udp_ports_asn1, len);
+    udp_ports_asn1 = parse_port_range(global_udp_ports_asn1, len);
+    if (udp_ports_asn1)		/* no error, normalize presentation */
+	  show_port_range(udp_ports_asn1, global_udp_ports_asn1, len);
+    else
+	  g_message("udp_ports: %s\n", global_udp_ports_asn1);
+
+    len = strlen(global_sctp_ports_asn1) + 32; /* extra for possible error message */
+    global_sctp_ports_asn1 = realloc(global_sctp_ports_asn1, len);
+    sctp_ports_asn1 = parse_port_range(global_sctp_ports_asn1, len);
+    if (sctp_ports_asn1)		/* no error, normalize presentation */
+	  show_port_range(sctp_ports_asn1, global_sctp_ports_asn1, len);
+    else
+	  g_message("sctp_ports: %s\n", global_sctp_ports_asn1);
+
+    list = tcp_ports_asn1;
+    while (list) {
+	  dissector_add("tcp.port", GPOINTER_TO_INT(list->data), asn1_handle);
+	  list = g_slist_next(list);
+    }
+    list = udp_ports_asn1;
+    while (list) {
+	  dissector_add("udp.port", GPOINTER_TO_INT(list->data), asn1_handle);
+	  list = g_slist_next(list);
+    }
+    list = sctp_ports_asn1;
+    while (list) {
+	  dissector_add("sctp.port", GPOINTER_TO_INT(list->data), asn1_handle);
+	  list = g_slist_next(list);
+    }
+  }
+#endif /* JUST_ONE_PORT */
 }
 
 /* Start the functions we need for the plugin stuff */
diff -urN ethereal-0.10.6/plugins/ciscosm/Makefile.in ethereal-0.10.7/plugins/ciscosm/Makefile.in
--- ethereal-0.10.6/plugins/ciscosm/Makefile.in	2004-08-12 21:04:22.000000000 -0500
+++ ethereal-0.10.7/plugins/ciscosm/Makefile.in	2004-10-20 21:50:18.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -99,6 +99,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -110,10 +113,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -198,8 +204,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -481,7 +487,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -503,7 +509,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -528,7 +533,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/ciscosm/Makefile.nmake ethereal-0.10.7/plugins/ciscosm/Makefile.nmake
--- ethereal-0.10.6/plugins/ciscosm/Makefile.nmake	2004-08-12 17:41:51.000000000 -0500
+++ ethereal-0.10.7/plugins/ciscosm/Makefile.nmake	2004-10-20 17:34:34.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,13 +9,22 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-sm.obj 
 
-ciscosm.dll ciscosm.exp ciscosm.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:ciscosm.dll $(OBJECTS) ..\plugin_api.obj \
+ciscosm.dll ciscosm.exp ciscosm.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:ciscosm.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) ciscosm.dll ciscosm.exp ciscosm.lib $(PDB_FILE)
+	rm -f $(OBJECTS) ciscosm.dll ciscosm.exp ciscosm.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/docsis/Makefile.in ethereal-0.10.7/plugins/docsis/Makefile.in
--- ethereal-0.10.6/plugins/docsis/Makefile.in	2004-08-12 21:04:22.000000000 -0500
+++ ethereal-0.10.7/plugins/docsis/Makefile.in	2004-10-20 21:50:18.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -98,6 +98,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -109,10 +112,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -197,8 +203,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -539,7 +545,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -561,7 +567,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -586,7 +591,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/docsis/Makefile.nmake ethereal-0.10.7/plugins/docsis/Makefile.nmake
--- ethereal-0.10.6/plugins/docsis/Makefile.nmake	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/plugins/docsis/Makefile.nmake	2004-10-20 17:34:33.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,6 +9,15 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-intrngreq.obj packet-type29ucd.obj \
 	packet-docsis.obj packet-bpkmattr.obj \
 	packet-dsarsp.obj packet-macmgmt.obj \
@@ -23,11 +32,11 @@
 	packet-dsareq.obj packet-dsdrsp.obj \
 	packet-rngreq.obj packet-vendor.obj
 
-docsis.dll docsis.exp docsis.lib : $(OBJECTS) ..\plugin_api.obj 
-	link -dll /out:docsis.dll $(OBJECTS) ..\plugin_api.obj  \
+docsis.dll docsis.exp docsis.lib : $(OBJECTS) $(LINK_PLUGIN_WITH) 
+	link -dll /out:docsis.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH)  \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) docsis.dll docsis.exp docsis.lib $(PDB_FILE)
+	rm -f $(OBJECTS) docsis.dll docsis.exp docsis.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/enttec/Makefile.in ethereal-0.10.7/plugins/enttec/Makefile.in
--- ethereal-0.10.6/plugins/enttec/Makefile.in	2004-08-12 21:04:22.000000000 -0500
+++ ethereal-0.10.7/plugins/enttec/Makefile.in	2004-10-20 21:50:19.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -98,6 +98,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -109,10 +112,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -197,8 +203,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -480,7 +486,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -502,7 +508,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -527,7 +532,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/enttec/Makefile.nmake ethereal-0.10.7/plugins/enttec/Makefile.nmake
--- ethereal-0.10.6/plugins/enttec/Makefile.nmake	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/plugins/enttec/Makefile.nmake	2004-10-20 17:34:33.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,13 +9,22 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-enttec.obj 
 
-enttec.dll enttec.exp enttec.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:enttec.dll $(OBJECTS) ..\plugin_api.obj \
+enttec.dll enttec.exp enttec.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:enttec.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) enttec.dll enttec.exp enttec.lib $(PDB_FILE)
+	rm -f $(OBJECTS) enttec.dll enttec.exp enttec.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/enttec/packet-enttec.c ethereal-0.10.7/plugins/enttec/packet-enttec.c
--- ethereal-0.10.6/plugins/enttec/packet-enttec.c	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/plugins/enttec/packet-enttec.c	2004-10-20 17:34:33.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-enttec.c
  * Routines for ENTTEC packet disassembly
  *
- * $Id: packet-enttec.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-enttec.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Copyright (c) 2003 by Erwin Rol <erwin@erwinrol.com>
  *
@@ -42,7 +42,7 @@
 #include <string.h>
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/strutil.h>
 
 #include "plugins/plugin_api_defs.h"
diff -urN ethereal-0.10.6/plugins/giop/Makefile.in ethereal-0.10.7/plugins/giop/Makefile.in
--- ethereal-0.10.6/plugins/giop/Makefile.in	2004-08-12 21:04:23.000000000 -0500
+++ ethereal-0.10.7/plugins/giop/Makefile.in	2004-10-20 21:50:19.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -101,6 +101,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -112,10 +115,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -200,8 +206,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -495,7 +501,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -517,7 +523,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -542,7 +547,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/giop/Makefile.nmake ethereal-0.10.7/plugins/giop/Makefile.nmake
--- ethereal-0.10.6/plugins/giop/Makefile.nmake	2004-08-12 17:41:53.000000000 -0500
+++ ethereal-0.10.7/plugins/giop/Makefile.nmake	2004-10-20 17:34:35.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,20 +9,29 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-cosnaming.obj  packet-coseventcomm.obj
 
 all : cosnaming.dll coseventcomm.dll
 
-cosnaming.dll cosnaming.exp cosnaming.lib : packet-cosnaming.obj ..\plugin_api.obj
-	link -dll /out:cosnaming.dll packet-cosnaming.obj ..\plugin_api.obj \
+cosnaming.dll cosnaming.exp cosnaming.lib : packet-cosnaming.obj $(LINK_PLUGIN_WITH)
+	link -dll /out:cosnaming.dll $(LDFLAGS) packet-cosnaming.obj $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
-coseventcomm.dll coseventcomm.exp coseventcomm.lib : packet-coseventcomm.obj ..\plugin_api.obj
-	link -dll /out:coseventcomm.dll packet-coseventcomm.obj ..\plugin_api.obj \
+coseventcomm.dll coseventcomm.exp coseventcomm.lib : packet-coseventcomm.obj $(LINK_PLUGIN_WITH)
+	link -dll /out:coseventcomm.dll $(LDFLAGS) packet-coseventcomm.obj $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
 	rm -f $(OBJECTS) cosnaming.dll cosnaming.exp cosnaming.lib \
-		coseventcomm.dll coseventcomm.exp coseventcomm.lib $(PDB_FILE)
+		coseventcomm.dll coseventcomm.exp coseventcomm.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/gryphon/Makefile.in ethereal-0.10.7/plugins/gryphon/Makefile.in
--- ethereal-0.10.6/plugins/gryphon/Makefile.in	2004-08-12 21:04:23.000000000 -0500
+++ ethereal-0.10.7/plugins/gryphon/Makefile.in	2004-10-20 21:50:19.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -100,6 +100,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -111,10 +114,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -199,8 +205,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -482,7 +488,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -504,7 +510,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -529,7 +534,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/gryphon/Makefile.nmake ethereal-0.10.7/plugins/gryphon/Makefile.nmake
--- ethereal-0.10.6/plugins/gryphon/Makefile.nmake	2004-08-12 17:41:52.000000000 -0500
+++ ethereal-0.10.7/plugins/gryphon/Makefile.nmake	2004-10-20 17:34:35.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,13 +9,22 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-gryphon.obj 
 
-gryphon.dll gryphon.exp gryphon.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:gryphon.dll $(OBJECTS) ..\plugin_api.obj \
+gryphon.dll gryphon.exp gryphon.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:gryphon.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) gryphon.dll gryphon.exp gryphon.lib $(PDB_FILE)
+	rm -f $(OBJECTS) gryphon.dll gryphon.exp gryphon.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/gryphon/packet-gryphon.c ethereal-0.10.7/plugins/gryphon/packet-gryphon.c
--- ethereal-0.10.6/plugins/gryphon/packet-gryphon.c	2004-08-12 17:41:52.000000000 -0500
+++ ethereal-0.10.7/plugins/gryphon/packet-gryphon.c	2004-10-20 17:34:35.000000000 -0500
@@ -3,7 +3,7 @@
  * By Steve Limkemann <stevelim@dgtech.com>
  * Copyright 1998 Steve Limkemann
  *
- * $Id: packet-gryphon.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: packet-gryphon.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -40,7 +40,7 @@
 #include <epan/packet.h>
 #include "packet-gryphon.h"
 #include <epan/dissectors/packet-tcp.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #include "plugins/plugin_api_defs.h"
 
@@ -48,10 +48,6 @@
 G_MODULE_EXPORT const gchar version[] = VERSION;
 #endif
 
-#ifndef G_HAVE_GINT64
-#error "Sorry, this won't compile without 64-bit integer support"
-#endif
-
 /*
  * See
  *
@@ -906,29 +902,36 @@
 static int
 resp_time(tvbuff_t *tvb, int offset, proto_tree *pt)
 {
-    int     hours, minutes, seconds, fraction;
-    union {
-    	unsigned int		lng[2];
-	guint64			lnglng;
-    } ts;
-    time_t          timestamp;
-    char   date[45];
+    guint64 ts;
+    time_t  timestamp;
+    struct tm *tmp;
+    static const char *mon_names[12] = {
+        "Jan",
+        "Feb",
+        "Mar",
+        "Apr",
+        "May",
+        "Jun",
+        "Jul",
+        "Aug",
+        "Sep",
+        "Oct",
+        "Nov",
+        "Dec"
+    };
 
-    /* XXX This code is neither Endianess independent, nor will it work
-     * on platforms that do not support the *optional* guin64 type
-     */
-    ts.lng[1] = tvb_get_ntohl(tvb, offset);
-    ts.lng[0] = tvb_get_ntohl(tvb, offset + 4);
-    timestamp = (time_t) (ts.lnglng / 100000L);
-    strncpy (date, ctime(&timestamp), sizeof(date));
-    date[strlen(date)-1] = 0x00;
-    proto_tree_add_text(pt, tvb, offset, 8, "Date/Time: %s", date);
-    timestamp = ts.lng[0];
-    hours = timestamp /(100000 * 60 *60);
-    minutes = (timestamp / (100000 * 60)) % 60;
-    seconds = (timestamp / 100000) % 60;
-    fraction = timestamp % 100000;
-    proto_tree_add_text(pt, tvb, offset+4, 4, "Timestamp: %d:%02d:%02d.%05d", hours, minutes, seconds, fraction);
+    ts = tvb_get_ntoh64(tvb, offset);
+    timestamp = (time_t) (ts / 100000);
+    tmp = localtime(&timestamp);
+    proto_tree_add_text(pt, tvb, offset, 8,
+        "Date/Time: %s %d, %d %02d:%02d:%02d.%05u",
+        mon_names[tmp->tm_mon],
+        tmp->tm_mday,
+        tmp->tm_year + 1900,
+        tmp->tm_hour,
+        tmp->tm_min,
+        tmp->tm_sec,
+        (guint) (ts % 100000));
     offset += 8;
     return offset;
 }
diff -urN ethereal-0.10.6/plugins/irda/Makefile.in ethereal-0.10.7/plugins/irda/Makefile.in
--- ethereal-0.10.6/plugins/irda/Makefile.in	2004-08-12 21:04:23.000000000 -0500
+++ ethereal-0.10.7/plugins/irda/Makefile.in	2004-10-20 21:50:19.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -98,6 +98,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -109,10 +112,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -197,8 +203,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -485,7 +491,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -507,7 +513,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -532,7 +537,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/irda/Makefile.nmake ethereal-0.10.7/plugins/irda/Makefile.nmake
--- ethereal-0.10.6/plugins/irda/Makefile.nmake	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/plugins/irda/Makefile.nmake	2004-10-20 17:34:33.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,13 +9,22 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-irda.obj packet-ircomm.obj packet-sir.obj
 
-irda.dll irda.exp irda.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:irda.dll $(OBJECTS) ..\plugin_api.obj \
+irda.dll irda.exp irda.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:irda.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) irda.dll irda.exp irda.lib $(PDB_FILE)
+	rm -f $(OBJECTS) irda.dll irda.exp irda.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/irda/packet-irda.c ethereal-0.10.7/plugins/irda/packet-irda.c
--- ethereal-0.10.6/plugins/irda/packet-irda.c	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/plugins/irda/packet-irda.c	2004-10-20 17:34:33.000000000 -0500
@@ -6,7 +6,7 @@
  * Extended by Jan Kiszka <jan.kiszka@web.de>
  * Copyright 2003 Jan Kiszka
  *
- * $Id: packet-irda.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: packet-irda.c 12140 2004-09-29 22:20:21Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -43,6 +43,8 @@
 #include <gmodule.h>
 #include <epan/packet.h>
 #include <epan/proto.h>
+#include <epan/conversation.h>
+#include <epan/xdlc.h>
 
 #include "plugins/plugin_api_defs.h"
 
diff -urN ethereal-0.10.6/plugins/irda/packet-sir.c ethereal-0.10.7/plugins/irda/packet-sir.c
--- ethereal-0.10.6/plugins/irda/packet-sir.c	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/plugins/irda/packet-sir.c	2004-10-20 17:34:33.000000000 -0500
@@ -23,10 +23,11 @@
 #endif
 #include "moduleinfo.h"
 #include "plugins/plugin_api.h"
-#include "crc16.h"
 
 #include <gmodule.h>
 
+#include <epan/packet.h>
+#include <epan/crc16.h>
 
 /** Serial infrared port. */
 #define TCP_PORT_SIR 6417
diff -urN ethereal-0.10.6/plugins/lwres/Makefile.in ethereal-0.10.7/plugins/lwres/Makefile.in
--- ethereal-0.10.6/plugins/lwres/Makefile.in	2004-08-12 21:04:23.000000000 -0500
+++ ethereal-0.10.7/plugins/lwres/Makefile.in	2004-10-20 21:50:19.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -98,6 +98,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -109,10 +112,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -197,8 +203,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -479,7 +485,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -501,7 +507,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -526,7 +531,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/lwres/Makefile.nmake ethereal-0.10.7/plugins/lwres/Makefile.nmake
--- ethereal-0.10.6/plugins/lwres/Makefile.nmake	2004-08-12 17:41:52.000000000 -0500
+++ ethereal-0.10.7/plugins/lwres/Makefile.nmake	2004-10-20 17:34:35.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,13 +9,22 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-lwres.obj 
 
-lwres.dll lwres.exp lwres.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:lwres.dll $(OBJECTS) ..\plugin_api.obj \
+lwres.dll lwres.exp lwres.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:lwres.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) lwres.dll lwres.exp lwres.lib $(PDB_FILE)
+	rm -f $(OBJECTS) lwres.dll lwres.exp lwres.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/lwres/packet-lwres.c ethereal-0.10.7/plugins/lwres/packet-lwres.c
--- ethereal-0.10.6/plugins/lwres/packet-lwres.c	2004-08-12 17:41:52.000000000 -0500
+++ ethereal-0.10.7/plugins/lwres/packet-lwres.c	2004-10-20 17:34:35.000000000 -0500
@@ -1,7 +1,7 @@
 /* packet-lwres.c
  * Routines for light weight reslover (lwres, part of BIND9) packet disassembly
  *
- * $Id: packet-lwres.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: packet-lwres.c 12140 2004-09-29 22:20:21Z guy $
  *
  * Copyright (c) 2003 by Oleg Terletsky <oleg.terletsky@comverse.com>
  *
@@ -30,13 +30,17 @@
 
 #include "plugins/plugin_api.h"
 #include "moduleinfo.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <gmodule.h>
 #include <ctype.h>
 #include <time.h>
 #include <string.h>
-#include "prefs.h"
+
+#include <epan/packet.h>
+#include <epan/prefs.h>
+
 #include "plugins/plugin_api_defs.h"
 
 #define LWRES_LWPACKET_LENGTH           (4 * 5 + 2 * 4)
diff -urN ethereal-0.10.6/plugins/megaco/Makefile.in ethereal-0.10.7/plugins/megaco/Makefile.in
--- ethereal-0.10.6/plugins/megaco/Makefile.in	2004-08-12 21:04:23.000000000 -0500
+++ ethereal-0.10.7/plugins/megaco/Makefile.in	2004-10-20 21:50:20.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -98,6 +98,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -109,10 +112,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -197,8 +203,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -480,7 +486,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -502,7 +508,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -527,7 +532,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/megaco/Makefile.nmake ethereal-0.10.7/plugins/megaco/Makefile.nmake
--- ethereal-0.10.6/plugins/megaco/Makefile.nmake	2004-08-12 17:41:51.000000000 -0500
+++ ethereal-0.10.7/plugins/megaco/Makefile.nmake	2004-10-20 17:34:34.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,13 +9,22 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-megaco.obj 
 
-megaco.dll megaco.exp megaco.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:megaco.dll $(OBJECTS) ..\plugin_api.obj \
+megaco.dll megaco.exp megaco.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:megaco.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) megaco.dll megaco.exp megaco.lib $(PDB_FILE)
+	rm -f $(OBJECTS) megaco.dll megaco.exp megaco.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/megaco/packet-megaco.c ethereal-0.10.7/plugins/megaco/packet-megaco.c
--- ethereal-0.10.6/plugins/megaco/packet-megaco.c	2004-08-12 17:41:51.000000000 -0500
+++ ethereal-0.10.7/plugins/megaco/packet-megaco.c	2004-10-20 17:34:34.000000000 -0500
@@ -2,7 +2,7 @@
 * Routines for megaco packet disassembly
 * RFC 3015
 *
-* $Id: packet-megaco.c 11615 2004-08-06 19:57:49Z guy $
+* $Id: packet-megaco.c 12115 2004-09-27 22:55:15Z guy $
 *
 * Christian Falckenberg, 2002/10/17
 * Copyright (c) 2002 by Christian Falckenberg
@@ -11,6 +11,10 @@
 * Christoph Wiest,		2003/06/28
 * Modified 2003 by		Christoph Wiest
 *						<ch.wiest@tesionmail.de>
+* Modifyed 2004 by		Anders Broman
+*						<anders.broman@ericsson.com>
+* To handle TPKT headers if over TCP
+*
 * Ethereal - Network traffic analyzer
 * By Gerald Combs <gerald@ethereal.com>
 * Copyright 1999 Gerald Combs
@@ -46,9 +50,10 @@
 #include <string.h>
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/strutil.h>
 #include "sctpppids.h"
+#include <epan/dissectors/packet-tpkt.h>
 
 #include "plugins/plugin_api_defs.h"
 
@@ -79,51 +84,53 @@
 /* Define headers in subtree for megaco */
 static int hf_megaco_modem_descriptor           = -1;
 static int hf_megaco_multiplex_descriptor       = -1;
-static int hf_megaco_media_descriptor		= -1;
+static int hf_megaco_media_descriptor			= -1;
 static int hf_megaco_events_descriptor          = -1;
 static int hf_megaco_signal_descriptor          = -1;
 static int hf_megaco_audit_descriptor           = -1;
 static int hf_megaco_servicechange_descriptor	= -1;
-static int hf_megaco_digitmap_descriptor	= -1;
-static int hf_megaco_statistics_descriptor	= -1;
+static int hf_megaco_digitmap_descriptor		= -1;
+static int hf_megaco_statistics_descriptor		= -1;
 static int hf_megaco_observedevents_descriptor	= -1;
-static int hf_megaco_topology_descriptor	= -1;
-static int hf_megaco_error_descriptor		= -1;
+static int hf_megaco_topology_descriptor		= -1;
+static int hf_megaco_error_descriptor			= -1;
 static int hf_megaco_TerminationState_descriptor= -1;
-static int hf_megaco_Remote_descriptor 		= -1;
-static int hf_megaco_Local_descriptor 		= -1;
+static int hf_megaco_Remote_descriptor 			= -1;
+static int hf_megaco_Local_descriptor 			= -1;
 static int hf_megaco_LocalControl_descriptor 	= -1;
 static int hf_megaco_packages_descriptor		= -1;
-static int hf_megaco_error_Frame			= -1;
-static int hf_megaco_Service_State			= -1;
+static int hf_megaco_error_Frame				= -1;
+static int hf_megaco_Service_State				= -1;
 static int hf_megaco_Event_Buffer_Control		= -1;
-static int hf_megaco_mode				= -1;
-static int hf_megaco_reserve_group			= -1;
-static int hf_megaco_reserve_value			= -1;
-static int hf_megaco_streamid 				= -1;
-static int hf_megaco_requestid 				= -1;
-static int hf_megaco_pkgdname				= -1;
-static int hf_megaco_mId				= -1;
-static int hf_megaco_h245				= -1;
+static int hf_megaco_mode						= -1;
+static int hf_megaco_reserve_group				= -1;
+static int hf_megaco_reserve_value				= -1;
+static int hf_megaco_streamid 					= -1;
+static int hf_megaco_requestid 					= -1;
+static int hf_megaco_pkgdname					= -1;
+static int hf_megaco_mId						= -1;
+static int hf_megaco_h245						= -1;
 
 /* Define the trees for megaco */
-static int ett_megaco 					= -1;
-static int ett_megaco_command_line 			= -1;
+static int ett_megaco 							= -1;
+static int ett_megaco_command_line 				= -1;
 static int ett_megaco_mediadescriptor			= -1;
-static int ett_megaco_descriptors 			= -1;
+static int ett_megaco_descriptors 				= -1;
 static int ett_megaco_TerminationState			= -1;
 static int ett_megaco_Localdescriptor			= -1;
 static int ett_megaco_Remotedescriptor			= -1;
-static int ett_megaco_LocalControldescriptor		= -1;
+static int ett_megaco_LocalControldescriptor	= -1;
 static int ett_megaco_auditdescriptor			= -1;
 static int ett_megaco_eventsdescriptor			= -1;
-static int ett_megaco_observedeventsdescriptor		= -1;
-static int ett_megaco_observedevent			= -1;
+static int ett_megaco_observedeventsdescriptor	= -1;
+static int ett_megaco_observedevent				= -1;
 static int ett_megaco_packagesdescriptor		= -1;
 static int ett_megaco_requestedevent			= -1;
 static int ett_megaco_signalsdescriptor			= -1;
 static int ett_megaco_requestedsignal			= -1;
-static int ett_megaco_h245 				= -1;
+static int ett_megaco_h245 						= -1;
+
+static dissector_handle_t megaco_text_handle;
 
 
 /*
@@ -206,16 +213,42 @@
 dissect_megaco_Packagesdescriptor(tvbuff_t *tvb, proto_tree *tree, gint tvb_next_offset, gint tvb_current_offset);
 static void 
 tvb_raw_text_add(tvbuff_t *tvb, proto_tree *tree);
+static void
+dissect_megaco_text(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
 
 static dissector_handle_t sdp_handle;
 static dissector_handle_t h245_handle;
 static proto_tree *top_tree;
-
 /*
-* dissect_megaco_text - The dissector for the MEGACO Protocol, using
-* text encoding.
-*/
-
+ * dissect_megaco_text over TCP, there will be a TPKT header there 
+ * 
+ */
+static void dissect_megaco_text_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+	int lv_tpkt_len;
+
+	/* This code is copied from the Q.931 dissector, some parts skipped.
+	 * Check whether this looks like a TPKT-encapsulated
+	 * MEGACO packet.
+	 *
+	 * The minimum length of a MEGACO message is 6?:
+	 * Re-assembly ?
+	 */
+	lv_tpkt_len = is_tpkt(tvb, 6);
+	if (lv_tpkt_len == -1) {
+		/*
+		 * It's not a TPKT packet;
+		 * Is in MEGACO ?
+		 */
+		dissect_megaco_text(tvb, pinfo, tree);
+	}
+	dissect_tpkt_encap(tvb, pinfo, tree, TRUE,
+	    megaco_text_handle);
+}
+/*
+ * dissect_megaco_text - The dissector for the MEGACO Protocol, using
+ * text encoding.
+ */
 static void
 dissect_megaco_text(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
@@ -255,8 +288,15 @@
 	 * binary encodings. Bugfix add skipping of leading spaces.
 	 */
 	tvb_offset = tvb_skip_wsp(tvb, tvb_offset);
+	/* Quick fix for MEGACO not following the RFC, hopfully not breaking any thing
+	 * Turned out to be TPKT in case of TCP, added some code to handle that.
+	 * 
+	 * tvb_offset = tvb_find_guint8(tvb, tvb_offset, 5, 'M');
+	 */
 	if(!tvb_get_nstringz0(tvb,tvb_offset,sizeof(word),word)) return;
-	if (strncasecmp(word, "MEGACO", 6) != 0 && tvb_get_guint8(tvb, tvb_offset ) != '!') return;
+	if (strncasecmp(word, "MEGACO", 6) != 0 && tvb_get_guint8(tvb, tvb_offset ) != '!'){
+			return;
+	}
 	
 	
 	/* Display MEGACO in protocol column */
@@ -498,7 +538,10 @@
 	
  				if ( transaction[19] == 'A'){ 
 					tvb_offset  = tvb_find_guint8(tvb, tvb_offset, tvb_len, '{')+1;
-					len = tvb_len - tvb_offset - 1;
+					tvb_offset = tvb_skip_wsp(tvb, tvb_offset);
+					tvb_next_offset = tvb_find_guint8(tvb, tvb_offset, tvb_len, '}') - 1;
+					tvb_next_offset = tvb_skip_wsp_return(tvb, tvb_next_offset);
+					len = tvb_next_offset - tvb_offset;
 					if (check_col(pinfo->cinfo, COL_INFO) )
 						col_add_fstr(pinfo->cinfo, COL_INFO, "%s TransactionResponseAck",
 						tvb_format_text(tvb,tvb_offset,len));
@@ -2608,7 +2651,7 @@
 proto_reg_handoff_megaco(void)
 {
 	static int megaco_prefs_initialized = FALSE;
-	static dissector_handle_t megaco_text_handle;
+	static dissector_handle_t megaco_text_tcp_handle;
 	
 	sdp_handle = find_dissector("sdp");
 	h245_handle = find_dissector("h245dg");
@@ -2616,13 +2659,16 @@
 	if (!megaco_prefs_initialized) {
 		megaco_text_handle = create_dissector_handle(dissect_megaco_text,
 			proto_megaco);
+		megaco_text_tcp_handle = create_dissector_handle(dissect_megaco_text_tcp,
+			proto_megaco);
+
 		megaco_prefs_initialized = TRUE;
 	}
 	else {
-		dissector_delete("tcp.port", txt_tcp_port, megaco_text_handle);
+		dissector_delete("tcp.port", txt_tcp_port, megaco_text_tcp_handle);
 		dissector_delete("udp.port", txt_udp_port, megaco_text_handle);
 #if 0
-		dissector_delete("tcp.port", bin_tcp_port, megaco_bin_handle);
+		dissector_delete("tcp.port", bin_tcp_port, megaco_text_tcp_handle);
 		dissector_delete("udp.port", bin_udp_port, megaco_bin_handle);
 #endif
 	}
@@ -2637,7 +2683,7 @@
 	bin_udp_port = global_megaco_bin_udp_port;
 #endif
 	
-	dissector_add("tcp.port", global_megaco_txt_tcp_port, megaco_text_handle);
+	dissector_add("tcp.port", global_megaco_txt_tcp_port, megaco_text_tcp_handle);
 	dissector_add("udp.port", global_megaco_txt_udp_port, megaco_text_handle);
 #if 0
 	dissector_add("tcp.port", global_megaco_bin_tcp_port, megaco_bin_handle);
@@ -2712,4 +2758,3 @@
 
 /* End the functions we need for plugin stuff */
 
-
diff -urN ethereal-0.10.6/plugins/mgcp/Makefile.in ethereal-0.10.7/plugins/mgcp/Makefile.in
--- ethereal-0.10.6/plugins/mgcp/Makefile.in	2004-08-12 21:04:24.000000000 -0500
+++ ethereal-0.10.7/plugins/mgcp/Makefile.in	2004-10-20 21:50:20.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -98,6 +98,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -109,10 +112,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -197,8 +203,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -480,7 +486,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -502,7 +508,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -527,7 +532,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/mgcp/Makefile.nmake ethereal-0.10.7/plugins/mgcp/Makefile.nmake
--- ethereal-0.10.6/plugins/mgcp/Makefile.nmake	2004-08-12 17:41:52.000000000 -0500
+++ ethereal-0.10.7/plugins/mgcp/Makefile.nmake	2004-10-20 17:34:35.000000000 -0500
@@ -1,36 +1,30 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
 
-# If you want this plugin to use libethereal.lib instead 
-# of the standard plugin api, you have to comment out the next line
-#USE_LIBETHEREAL_LIB=YES
-
 ############### no need to modify below this line #########
 
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
-!IFDEF ENABLE_LIBETHEREAL
-!IFDEF USE_LIBETHEREAL_LIB
-LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
-CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB $(CFLAGS)
-!ENDIF
-!ENDIF
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
 
-!IFNDEF LINK_PLUGIN_WITH
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
 LINK_PLUGIN_WITH=..\plugin_api.obj
 !ENDIF
 
 OBJECTS=packet-mgcp.obj 
 
 mgcp.dll mgcp.exp mgcp.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
-	link -dll /out:mgcp.dll $(OBJECTS) $(LINK_PLUGIN_WITH) \
+	link -dll /out:mgcp.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) mgcp.dll mgcp.exp mgcp.lib $(PDB_FILE)
+	rm -f $(OBJECTS) mgcp.dll mgcp.exp mgcp.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/mgcp/packet-mgcp.c ethereal-0.10.7/plugins/mgcp/packet-mgcp.c
--- ethereal-0.10.6/plugins/mgcp/packet-mgcp.c	2004-08-12 17:41:52.000000000 -0500
+++ ethereal-0.10.7/plugins/mgcp/packet-mgcp.c	2004-10-20 17:34:35.000000000 -0500
@@ -8,7 +8,7 @@
  *          PKT-SP-EC-MGCP-I09-040113, January 13, 2004, Cable Television 
  *          Laboratories, Inc., http://www.PacketCable.com/
  *
- * $Id: packet-mgcp.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-mgcp.c 12139 2004-09-29 19:30:10Z guy $
  *
  * Copyright (c) 2000 by Ed Warnicke <hagbard@physics.rutgers.edu>
  * Copyright (c) 2004 by Thomas Anders <thomas.anders [AT] blue-cable.de>
@@ -36,9 +36,7 @@
 #include "config.h"
 #endif
 
-#ifndef HAVE_WIN32_LIBETHEREAL_LIB
 #include "plugins/plugin_api.h"
-#endif
 
 #include "moduleinfo.h"
 
@@ -50,15 +48,13 @@
 #include <string.h>
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/strutil.h>
 #include <epan/conversation.h>
+#include <epan/tap.h>
 #include "packet-mgcp.h"
-#include "../../tap.h"
 
-#ifndef HAVE_WIN32_LIBETHEREAL_LIB
 #include "plugins/plugin_api_defs.h"
-#endif
 
 #ifndef ENABLE_STATIC
 G_MODULE_EXPORT const gchar version[] = VERSION;
@@ -1725,8 +1721,6 @@
   proto_reg_handoff_mgcp();
 }
 
-#ifndef HAVE_WIN32_LIBETHEREAL_LIB
-
 G_MODULE_EXPORT void
 plugin_init(plugin_address_table_t *pat
 #ifndef PLUGINS_NEED_ADDRESS_TABLE
@@ -1736,10 +1730,6 @@
   /* initialise the table of pointers needed in Win32 DLLs */
   plugin_address_table_init(pat);
   
-#else /* HAVE_WIN32_LIBETHEREAL_LIB */
-G_MODULE_EXPORT void plugin_init(void *dummy _U_)
-{
-#endif
   /* register the new protocol, protocol fields, and subtrees */
   if (proto_mgcp == -1) { /* execute protocol initialization only once */
     proto_register_mgcp();
diff -urN ethereal-0.10.6/plugins/mgcp/packet-mgcp.h ethereal-0.10.7/plugins/mgcp/packet-mgcp.h
--- ethereal-0.10.6/plugins/mgcp/packet-mgcp.h	2004-08-12 17:41:52.000000000 -0500
+++ ethereal-0.10.7/plugins/mgcp/packet-mgcp.h	2004-10-20 17:34:35.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for mgcp packet disassembly
  * RFC 2705
  *
- * $Id: packet-mgcp.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: packet-mgcp.h 11869 2004-09-01 07:07:23Z guy $
  *
  * Copyright (c) 2000 by Ed Warnicke <hagbard@physics.rutgers.edu>
  *
diff -urN ethereal-0.10.6/plugins/opsi/Makefile.in ethereal-0.10.7/plugins/opsi/Makefile.in
--- ethereal-0.10.6/plugins/opsi/Makefile.in	2004-08-12 21:04:24.000000000 -0500
+++ ethereal-0.10.7/plugins/opsi/Makefile.in	2004-10-20 21:50:20.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -98,6 +98,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -109,10 +112,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -197,8 +203,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -480,7 +486,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -502,7 +508,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -527,7 +532,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/opsi/Makefile.nmake ethereal-0.10.7/plugins/opsi/Makefile.nmake
--- ethereal-0.10.6/plugins/opsi/Makefile.nmake	2004-08-12 17:41:53.000000000 -0500
+++ ethereal-0.10.7/plugins/opsi/Makefile.nmake	2004-10-20 17:34:36.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11454 2004-07-21 06:31:33Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,13 +9,22 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-opsi.obj 
 
-opsi.dll opsi.exp opsi.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:opsi.dll $(OBJECTS) ..\plugin_api.obj \
+opsi.dll opsi.exp opsi.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:opsi.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) opsi.dll opsi.exp opsi.lib $(PDB_FILE)
+	rm -f $(OBJECTS) opsi.dll opsi.exp opsi.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/opsi/packet-opsi.c ethereal-0.10.7/plugins/opsi/packet-opsi.c
--- ethereal-0.10.6/plugins/opsi/packet-opsi.c	2004-08-12 17:41:53.000000000 -0500
+++ ethereal-0.10.7/plugins/opsi/packet-opsi.c	2004-10-20 21:11:06.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for OPSI protocol dissection
  * Copyright 2004, Laurent Rabret (France Telecom R&D) <laurent.rabret@i.hate.spams.org>
  *
- * $Id: packet-opsi.c 11492 2004-07-23 23:28:08Z jmayer $
+ * $Id: packet-opsi.c 12364 2004-10-21 02:11:04Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -44,7 +44,7 @@
 
 #include <epan/packet.h>
 #include <epan/dissectors/packet-tcp.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 
 #include "packet-opsi.h"
 
@@ -95,6 +95,8 @@
 static int hf_smc_id_att		= -1;
 static int hf_smc_receive_time_att	= -1;
 static int hf_smc_stat_time_att		= -1;
+static int hf_opsi_flags_att		= -1;
+static int hf_opsi_application_name_att	= -1;
 
 /* Initialize the subtree pointers */
 static gint ett_opsi 			= -1;
@@ -131,6 +133,8 @@
 static gint ett_opsi_smc_id		= -1;
 static gint ett_opsi_smc_receive_time	= -1;
 static gint ett_opsi_smc_stat_time	= -1;
+static gint ett_opsi_flags		= -1;
+static gint ett_opsi_application_name	= -1;
 
 
 /* Code mapping */
@@ -327,6 +331,11 @@
 	"SMC receive time attribute", &ett_opsi_smc_receive_time, &hf_smc_receive_time_att, decode_time_attribute },
 	{SMC_STAT_TIME_ATTRIBUTE,	/* 661 */
 	"SMC stat time attribute", &ett_opsi_smc_stat_time, &hf_smc_stat_time_att, decode_longint_attribute },
+	{OPSI_FLAGS_ATTRIBUTE,		/* 674 */
+	"OPSI flags attribute", &ett_opsi_flags, &hf_opsi_flags_att, decode_longint_attribute },
+	{OPSI_APPLICATION_NAME_ATTRIBUTE,/* 675 */
+	"OPSI application name attribute", &ett_opsi_application_name, &hf_opsi_application_name_att, decode_string_attribute },
+
 };
 #define OPSI_ATTRIBUTES_COUNT (sizeof(opsi_attributes)/sizeof(opsi_attribute_handle_t))
 
@@ -713,6 +722,16 @@
 			FT_UINT32, BASE_DEC, NULL, 0x00,
 			"", HFILL }
 		},
+		{ &hf_opsi_flags_att,
+			{ "OPSI flags",			"opsi.attr.flags",
+			FT_UINT32, BASE_DEC, NULL, 0x00,
+			"", HFILL }
+		},
+		{ &hf_opsi_application_name_att,
+			{ "OPSI application name",	"opsi.attr.application_name",
+			FT_STRING, BASE_NONE, NULL, 0x00,
+			"", HFILL }
+		},
 	};
 
 /* Setup protocol subtree array */
@@ -751,6 +770,8 @@
 		&ett_opsi_smc_id,	        
 		&ett_opsi_smc_receive_time,
 		&ett_opsi_smc_stat_time,
+		&ett_opsi_flags,
+		&ett_opsi_application_name,
 	};
 	
 /* For desegmentation / reassembly */
diff -urN ethereal-0.10.6/plugins/opsi/packet-opsi.h ethereal-0.10.7/plugins/opsi/packet-opsi.h
--- ethereal-0.10.6/plugins/opsi/packet-opsi.h	2004-08-12 17:41:53.000000000 -0500
+++ ethereal-0.10.7/plugins/opsi/packet-opsi.h	2004-10-20 21:11:06.000000000 -0500
@@ -2,7 +2,7 @@
  * Routines for OPSI protocol dissection
  * Copyright 2004, Laurent Rabret <laurent.rabret@i.hate.spams.org>
  *
- * $Id: packet-opsi.h 11454 2004-07-21 06:31:33Z guy $
+ * $Id: packet-opsi.h 12364 2004-10-21 02:11:04Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -113,6 +113,8 @@
 #define SMC_RECEIVE_TIME_ATTRIBUTE	660
 #define SMC_STAT_TIME_ATTRIBUTE		661
 
+#define OPSI_FLAGS_ATTRIBUTE		674
+#define OPSI_APPLICATION_NAME_ATTRIBUTE	675
 
 /*
  * Published API functions.  NOTE, "local" API functions 
diff -urN ethereal-0.10.6/plugins/pcli/Makefile.in ethereal-0.10.7/plugins/pcli/Makefile.in
--- ethereal-0.10.6/plugins/pcli/Makefile.in	2004-08-12 21:04:24.000000000 -0500
+++ ethereal-0.10.7/plugins/pcli/Makefile.in	2004-10-20 21:50:20.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -98,6 +98,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -109,10 +112,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -197,8 +203,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -480,7 +486,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -502,7 +508,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -527,7 +532,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/pcli/Makefile.nmake ethereal-0.10.7/plugins/pcli/Makefile.nmake
--- ethereal-0.10.6/plugins/pcli/Makefile.nmake	2004-08-12 17:41:52.000000000 -0500
+++ ethereal-0.10.7/plugins/pcli/Makefile.nmake	2004-10-20 17:34:35.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,13 +9,22 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-pcli.obj 
 
-pcli.dll pcli.exp pcli.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:pcli.dll $(OBJECTS) ..\plugin_api.obj \
+pcli.dll pcli.exp pcli.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:pcli.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) pcli.dll pcli.exp pcli.lib $(PDB_FILE)
+	rm -f $(OBJECTS) pcli.dll pcli.exp pcli.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/pcli/packet-pcli.c ethereal-0.10.7/plugins/pcli/packet-pcli.c
--- ethereal-0.10.6/plugins/pcli/packet-pcli.c	2004-08-12 17:41:52.000000000 -0500
+++ ethereal-0.10.7/plugins/pcli/packet-pcli.c	2004-10-20 17:34:35.000000000 -0500
@@ -4,7 +4,7 @@
  * http://www.packetcable.com/downloads/specs/pkt-sp-esp-I01-991229.pdf
  * Chapter 4 ( Call Content Connection Interface )
  *
- * $Id: packet-pcli.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: packet-pcli.c 12115 2004-09-27 22:55:15Z guy $
  *
  * Copyright (c) 2000 by Ed Warnicke <hagbard@physics.rutgers.edu>
  *
@@ -45,7 +45,7 @@
 #include <string.h>
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include <epan/strutil.h>
 
 #include "plugins/plugin_api_defs.h"
diff -urN ethereal-0.10.6/plugins/plugin_api.h ethereal-0.10.7/plugins/plugin_api.h
--- ethereal-0.10.6/plugins/plugin_api.h	2004-08-12 17:41:52.000000000 -0500
+++ ethereal-0.10.7/plugins/plugin_api.h	2004-10-20 17:34:35.000000000 -0500
@@ -1,7 +1,7 @@
 /* plugin_api.h
  * Routines for Ethereal plugins.
  *
- * $Id: plugin_api.h 11410 2004-07-18 18:06:47Z gram $
+ * $Id: plugin_api.h 12140 2004-09-29 22:20:21Z guy $
  *
  * Ethereal - Network traffic analyzer
  * Copyright 2000 by Gilbert Ramirez <gram@alumni.rice.edu>
@@ -41,26 +41,28 @@
 /* file generted by plugin_gen.py */
 #include "Xplugin_api.h"
 
-#endif
-
 #include <epan/packet.h>
 #include <epan/conversation.h>
 #include <epan/report_err.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "reassemble.h"
 #include <epan/dissectors/packet-giop.h>
 #include <epan/dissectors/packet-tpkt.h>
 #include <epan/dissectors/packet-tcp.h>
 #include <epan/dissectors/packet-rpc.h>
-#include "tap.h"
+#include <epan/tap.h>
 #include "asn1.h"
 #include <epan/dissectors/packet-per.h>
 #include <epan/dissectors/packet-ber.h>
-#include "xdlc.h"
-#include "crc16.h"
+#include <epan/dissectors/packet-rtp.h>
+#include <epan/dissectors/packet-rtcp.h>
+#include <epan/xdlc.h>
+#include <epan/crc16.h>
 #include "epan/except.h"
 #include "epan/filesystem.h"
 
+#endif /* PLUGINS_NEED_ADDRESS_TABLE */
+
 #include "plugin_table.h"
 
 #ifdef PLUGINS_NEED_ADDRESS_TABLE
diff -urN ethereal-0.10.6/plugins/plugin_api_list.c ethereal-0.10.7/plugins/plugin_api_list.c
--- ethereal-0.10.6/plugins/plugin_api_list.c	2004-08-12 17:41:52.000000000 -0500
+++ ethereal-0.10.7/plugins/plugin_api_list.c	2004-10-20 17:34:35.000000000 -0500
@@ -1,7 +1,7 @@
 /* plugin_api_list.c
  * Used to generate various included files for plugin API
  *
- * $Id: plugin_api_list.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: plugin_api_list.c 12265 2004-10-11 18:34:54Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -31,7 +31,7 @@
 #include <epan/filesystem.h>
 #include <epan/report_err.h>
 #include <epan/except.h>
-#include "prefs.h"
+#include <epan/prefs.h>
 #include "reassemble.h"
 #include <epan/dissectors/packet-giop.h>
 #include <epan/dissectors/packet-per.h>
@@ -39,10 +39,12 @@
 #include <epan/dissectors/packet-tpkt.h>
 #include <epan/dissectors/packet-tcp.h>
 #include <epan/dissectors/packet-rpc.h>
-#include "tap.h"
+#include <epan/dissectors/packet-rtp.h>
+#include <epan/dissectors/packet-rtcp.h>
+#include <epan/tap.h>
 #include "asn1.h"
-#include "xdlc.h"
-#include "crc16.h"
+#include <epan/xdlc.h>
+#include <epan/crc16.h>
 
 gint check_col(column_info*, gint);
 void col_clear(column_info*, gint);
@@ -371,8 +373,8 @@
 guint32 dissect_per_boolean(tvbuff_t*, guint32, packet_info *pinfo, proto_tree*, int, gboolean*, proto_item**);
 guint32 dissect_per_integer(tvbuff_t*, guint32, packet_info*, proto_tree*, int, gint32*, proto_item**);
 guint32 dissect_per_constrained_integer(tvbuff_t*, guint32, packet_info*, proto_tree*, int, guint32, guint32, guint32*, proto_item**, gboolean);
-guint32 dissect_per_choice(tvbuff_t*, guint32, packet_info*, proto_tree*, int, gint, per_choice_t*, char*, guint32*);
-guint32 dissect_per_sequence(tvbuff_t*, guint32, packet_info*, proto_tree *parent_tree, int, gint, per_sequence_t*);
+guint32 dissect_per_choice(tvbuff_t*, guint32, packet_info*, proto_tree*, int, gint, const per_choice_t*, char*, guint32*);
+guint32 dissect_per_sequence(tvbuff_t*, guint32, packet_info*, proto_tree *parent_tree, int, gint, const per_sequence_t*);
 guint32 dissect_per_octet_string(tvbuff_t*, guint32, packet_info*, proto_tree*, int, int, int, guint32*, guint32*);
 guint32 dissect_per_restricted_character_string(tvbuff_t*, guint32, packet_info*, proto_tree*, int, int, int, char*, int);
 
@@ -422,11 +424,11 @@
 int dissect_ber_boolean(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, gint hf_id);
 int dissect_ber_choice(packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, const ber_choice *ch, gint hf_id, gint ett_id);
 int dissect_ber_generalized_time(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, gint hf_id);
-int dissect_ber_sequence(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, ber_sequence *seq, gint hf_id, gint ett_id);
-int dissect_ber_sequence_of(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, ber_sequence *seq, gint hf_id, gint ett_id);
-int dissect_ber_set_of(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, ber_sequence *seq, gint hf_id, gint ett_id);
+int dissect_ber_sequence(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, const ber_sequence *seq, gint hf_id, gint ett_id);
+int dissect_ber_sequence_of(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, const ber_sequence *seq, gint hf_id, gint ett_id);
+int dissect_ber_set_of(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, const ber_sequence *seq, gint hf_id, gint ett_id);
 int dissect_ber_octet_string(gboolean implicit_tag, packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, gint hf_id, tvbuff_t **tvb_out);
-int dissect_ber_bitstring(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, asn_namedbit *named_bits, gint hf_id, gint ett_id, tvbuff_t **tvb_out);
+int dissect_ber_bitstring(gboolean implicit_tag, packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *tvb, int offset, asn_namedbit const *named_bits, gint hf_id, gint ett_id, tvbuff_t **tvb_out);
 int dissect_ber_restricted_string(gboolean implicit_tag, guint32 type, packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, gint hf_id, tvbuff_t **tvb_out);
 int dissect_ber_object_identifier(gboolean implicit_tag, packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, gint hf_id, char *value_string);
 int get_ber_identifier(tvbuff_t *tvb, int offset, guint8 *class, gboolean *pc, guint32 *tag);
@@ -480,3 +482,20 @@
  proto_tree *tree, int offset, int result_id, int prog_id, int vers_id,
  int proc_id);
 guint16 crc16_ccitt_tvb(tvbuff_t *tvb, unsigned int len);
+
+guint64 tvb_get_letoh64(tvbuff_t *tvb, gint offset);
+guint64 tvb_get_ntoh64(tvbuff_t *tvb, gint offset);
+
+proto_item* proto_tree_add_float(proto_tree*, int, tvbuff_t*, gint, gint, float);
+proto_item* proto_tree_add_float_hidden(proto_tree*, int, tvbuff_t*, gint, gint, float);
+proto_item* proto_tree_add_float_format(proto_tree*, int, tvbuff_t*, gint, gint, float, const char*, ...);
+
+gfloat tvb_get_ntohieee_float(tvbuff_t*, gint offset);
+gdouble tvb_get_ntohieee_double(tvbuff_t*, gint offset);
+gfloat tvb_get_letohieee_float(tvbuff_t*, gint offset);
+gdouble tvb_get_letohieee_double(tvbuff_t*, gint offset);
+
+proto_item *proto_tree_add_debug_text(proto_tree *tree, const char *format, ...);
+
+void rtp_add_address(packet_info *pinfo, address *addr, int port, int other_port, gchar *setup_method, guint32 setup_frame_number);
+void rtcp_add_address(packet_info *pinfo, address *addr, int port, int other_port, gchar *setup_method, guint32 setup_frame_number);
diff -urN ethereal-0.10.6/plugins/rdm/Makefile.in ethereal-0.10.7/plugins/rdm/Makefile.in
--- ethereal-0.10.6/plugins/rdm/Makefile.in	2004-08-12 21:04:24.000000000 -0500
+++ ethereal-0.10.7/plugins/rdm/Makefile.in	2004-10-20 21:50:20.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -98,6 +98,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -109,10 +112,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -197,8 +203,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -479,7 +485,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -501,7 +507,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -526,7 +531,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/rdm/Makefile.nmake ethereal-0.10.7/plugins/rdm/Makefile.nmake
--- ethereal-0.10.6/plugins/rdm/Makefile.nmake	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/plugins/rdm/Makefile.nmake	2004-10-20 17:34:33.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,13 +9,22 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-rdm.obj 
 
-rdm.dll rdm.exp rdm.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:rdm.dll $(OBJECTS) ..\plugin_api.obj \
+rdm.dll rdm.exp rdm.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:rdm.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) rdm.dll rdm.exp rdm.lib $(PDB_FILE)
+	rm -f $(OBJECTS) rdm.dll rdm.exp rdm.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/rlm/Makefile.in ethereal-0.10.7/plugins/rlm/Makefile.in
--- ethereal-0.10.6/plugins/rlm/Makefile.in	2004-08-12 21:04:24.000000000 -0500
+++ ethereal-0.10.7/plugins/rlm/Makefile.in	2004-10-20 21:50:21.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -99,6 +99,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -110,10 +113,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -198,8 +204,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -481,7 +487,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -503,7 +509,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -528,7 +533,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/rlm/Makefile.nmake ethereal-0.10.7/plugins/rlm/Makefile.nmake
--- ethereal-0.10.6/plugins/rlm/Makefile.nmake	2004-08-12 17:41:51.000000000 -0500
+++ ethereal-0.10.7/plugins/rlm/Makefile.nmake	2004-10-20 17:34:34.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,13 +9,22 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-rlm.obj 
 
-rlm.dll rlm.exp rlm.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:rlm.dll $(OBJECTS) ..\plugin_api.obj \
+rlm.dll rlm.exp rlm.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:rlm.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) rlm.dll rlm.exp rlm.lib $(PDB_FILE)
+	rm -f $(OBJECTS) rlm.dll rlm.exp rlm.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/rtnet/Makefile.in ethereal-0.10.7/plugins/rtnet/Makefile.in
--- ethereal-0.10.6/plugins/rtnet/Makefile.in	2004-08-12 21:04:25.000000000 -0500
+++ ethereal-0.10.7/plugins/rtnet/Makefile.in	2004-10-20 21:50:21.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -98,6 +98,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -109,10 +112,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -197,8 +203,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -479,7 +485,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -501,7 +507,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -526,7 +531,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/rtnet/Makefile.nmake ethereal-0.10.7/plugins/rtnet/Makefile.nmake
--- ethereal-0.10.6/plugins/rtnet/Makefile.nmake	2004-08-12 17:41:51.000000000 -0500
+++ ethereal-0.10.7/plugins/rtnet/Makefile.nmake	2004-10-20 17:34:34.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,13 +9,22 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-rtnet.obj 
 
-rtnet.dll rtnet.exp rtnet.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:rtnet.dll $(OBJECTS) ..\plugin_api.obj \
+rtnet.dll rtnet.exp rtnet.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:rtnet.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) rtnet.dll rtnet.exp rtnet.lib $(PDB_FILE)
+	rm -f $(OBJECTS) rtnet.dll rtnet.exp rtnet.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/rudp/Makefile.in ethereal-0.10.7/plugins/rudp/Makefile.in
--- ethereal-0.10.6/plugins/rudp/Makefile.in	2004-08-12 21:04:25.000000000 -0500
+++ ethereal-0.10.7/plugins/rudp/Makefile.in	2004-10-20 21:50:21.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -99,6 +99,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -110,10 +113,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -198,8 +204,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -481,7 +487,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -503,7 +509,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -528,7 +533,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/rudp/Makefile.nmake ethereal-0.10.7/plugins/rudp/Makefile.nmake
--- ethereal-0.10.6/plugins/rudp/Makefile.nmake	2004-08-12 17:41:53.000000000 -0500
+++ ethereal-0.10.7/plugins/rudp/Makefile.nmake	2004-10-20 17:34:35.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,13 +9,22 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-rudp.obj 
 
-rudp.dll rudp.exp rudp.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:rudp.dll $(OBJECTS) ..\plugin_api.obj \
+rudp.dll rudp.exp rudp.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:rudp.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) rudp.dll rudp.exp rudp.lib $(PDB_FILE)
+	rm -f $(OBJECTS) rudp.dll rudp.exp rudp.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/plugins/v5ua/Makefile.in ethereal-0.10.7/plugins/v5ua/Makefile.in
--- ethereal-0.10.6/plugins/v5ua/Makefile.in	2004-08-12 21:04:25.000000000 -0500
+++ ethereal-0.10.7/plugins/v5ua/Makefile.in	2004-10-20 21:50:21.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -98,6 +98,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -109,10 +112,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -197,8 +203,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -480,7 +486,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -502,7 +508,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -527,7 +532,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/plugins/v5ua/Makefile.nmake ethereal-0.10.7/plugins/v5ua/Makefile.nmake
--- ethereal-0.10.6/plugins/v5ua/Makefile.nmake	2004-08-12 17:41:52.000000000 -0500
+++ ethereal-0.10.7/plugins/v5ua/Makefile.nmake	2004-10-20 17:34:35.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11400 2004-07-18 00:24:25Z guy $
+# $Id: Makefile.nmake 12176 2004-10-01 19:50:03Z guy $
 #
 
 include ..\..\config.nmake
@@ -9,13 +9,22 @@
 CFLAGS=/DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
 	/I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
 
+LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
+
+!IFDEF LINK_PLUGINS_WITH_LIBETHEREAL
+LINK_PLUGIN_WITH=..\..\epan\libethereal.lib
+CFLAGS=/DHAVE_WIN32_LIBETHEREAL_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
+!ELSE
+LINK_PLUGIN_WITH=..\plugin_api.obj
+!ENDIF
+
 OBJECTS=packet-v5ua.obj 
 
-v5ua.dll v5ua.exp v5ua.lib : $(OBJECTS) ..\plugin_api.obj
-	link -dll /out:v5ua.dll $(OBJECTS) ..\plugin_api.obj \
+v5ua.dll v5ua.exp v5ua.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
+	link -dll /out:v5ua.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
 	$(GLIB_LIBS)
 
 clean:
-	rm -f $(OBJECTS) v5ua.dll v5ua.exp v5ua.lib $(PDB_FILE)
+	rm -f $(OBJECTS) v5ua.dll v5ua.exp v5ua.lib *.pdb
 
 distclean: clean
diff -urN ethereal-0.10.6/prefs-int.h ethereal-0.10.7/prefs-int.h
--- ethereal-0.10.6/prefs-int.h	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/prefs-int.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,103 +0,0 @@
-/* prefs-int.h
- * Definitions for implementation of preference handling routines;
- * used by "friends" of the preferences type.
- *
- * $Id: prefs-int.h 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifndef __PREFS_INT_H__
-#define __PREFS_INT_H__
-
-struct pref_module {
-	const char *name;	/* name of module */
-	const char *title;	/* title of module (displayed in preferences notebook) */
-	gboolean is_subtree;	/* if TRUE, this has other modules, not preferences, under it */
-	void (*apply_cb)(void);	/* routine to call when preferences applied */
-	GList	*prefs;		/* list of its preferences or submodules */
-	int	numprefs;	/* number of non-obsolete preferences */
-	gboolean prefs_changed;	/* if TRUE, a preference has changed since we last checked */
-	gboolean obsolete;	/* if TRUE, this is a module that used to
-				   exist but no longer does */
-};
-
-/*
- * Module used for protocol preferences. With MSVC and a 
- * libethereal.dll, we need a special declaration.
- */
-ETH_VAR_IMPORT module_t *protocols_module;
-
-/*
- * PREF_OBSOLETE is used for preferences that a module used to support
- * but no longer supports; we give different error messages for them.
- */
-typedef enum {
-	PREF_UINT,
-	PREF_BOOL,
-	PREF_ENUM,
-	PREF_STRING,
-	PREF_OBSOLETE
-} pref_type_t;
-
-struct preference {
-	const char *name;	/* name of preference */
-	const char *title;	/* title to use in GUI */
-	const char *description; /* human-readable description of preference */
-	int	ordinal;	/* ordinal number of this preference */
-	pref_type_t type;	/* type of that preference */
-	union {
-		guint *uint;
-		gboolean *boolp;
-		gint *enump;
-		char **string;
-	} varp;			/* pointer to variable storing the value */
-	union {
-		guint uint;
-		gboolean boolval;
-		gint enumval;
-		char *string;
-	} saved_val;		/* original value, when editing from the GUI */
-	union {
-	  guint base;			/* input/output base, for PREF_UINT */
-	  struct {
-	    const enum_val_t *enumvals;	/* list of name & values */
-	    gboolean radio_buttons;	/* TRUE if it should be shown as
-					   radio buttons rather than as an
-					   option menu or combo box in
-					   the preferences tab */
-	  } enum_info;			/* for PREF_ENUM */
-	} info;			/* display/text file information */
-	void	*control;	/* handle for GUI control for this preference */
-};
-
-gint find_val_for_string(const char *needle, const enum_val_t *haystack,
-    gint default_value);
-
-
-/* read_prefs_file: read in a generic config file and do a callback to */
-/* pref_set_pair_fct() for every key/value pair found */
-typedef int (*pref_set_pair_cb) (gchar *key, gchar *value);
-
-int
-read_prefs_file(const char *pf_path, FILE *pf, pref_set_pair_cb pref_set_pair_fct);
-
-
-
-#endif /* prefs-int.h */
diff -urN ethereal-0.10.6/prefs.c ethereal-0.10.7/prefs.c
--- ethereal-0.10.6/prefs.c	2004-08-12 17:41:38.000000000 -0500
+++ ethereal-0.10.7/prefs.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,2493 +0,0 @@
-/* prefs.c
- * Routines for handling preferences
- *
- * $Id: prefs.c 11623 2004-08-08 01:20:26Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <glib.h>
-
-#include <epan/filesystem.h>
-#include "globals.h"
-#include <epan/addr_resolv.h>
-#include <epan/packet.h>
-#include "file.h"
-#include "prefs.h"
-#include <epan/proto.h>
-#include "column.h"
-#include "print.h"
-
-#include "prefs-int.h"
-
-/* Internal functions */
-static module_t *find_module(const char *name);
-static module_t *prefs_register_module_or_subtree(module_t *parent,
-    const char *name, const char *title, gboolean is_subtree,
-    void (*apply_cb)(void));
-static struct preference *find_preference(module_t *, const char *);
-static int    set_pref(gchar*, gchar*);
-static GList *get_string_list(gchar *);
-static gchar *put_string_list(GList *);
-static void   clear_string_list(GList *);
-static void   free_col_info(e_prefs *);
-
-#define GPF_NAME	"ethereal.conf"
-#define PF_NAME		"preferences"
-
-static gboolean init_prefs = TRUE;
-static gchar *gpf_path = NULL;
-
-/*
- * XXX - variables to allow us to attempt to interpret the first
- * "mgcp.{tcp,udp}.port" in a preferences file as
- * "mgcp.{tcp,udp}.gateway_port" and the second as
- * "mgcp.{tcp,udp}.callagent_port".
- */
-static int mgcp_tcp_port_count;
-static int mgcp_udp_port_count;
-
-e_prefs prefs;
-
-static gchar	*gui_ptree_line_style_text[] =
-	{ "NONE", "SOLID", "DOTTED", "TABBED", NULL };
-
-static gchar	*gui_ptree_expander_style_text[] =
-	{ "NONE", "SQUARE", "TRIANGLE", "CIRCULAR", NULL };
-
-static gchar	*gui_hex_dump_highlight_style_text[] =
-	{ "BOLD", "INVERSE", NULL };
-
-static gchar	*gui_console_open_text[] =
-	{ "NEVER", "AUTOMATIC", "ALWAYS", NULL };
-
-static gchar	*gui_fileopen_style_text[] =
-	{ "LAST_OPENED", "SPECIFIED", NULL };
-
-/* GTK knows of two ways representing "both", vertical and horizontal aligned.
- * as this may not work on other guis, we use only "both" in general here */
-static gchar	*gui_toolbar_style_text[] =
-	{ "ICONS", "TEXT", "BOTH", NULL };
-
-static gchar	*gui_layout_content_text[] =
-	{ "NONE", "PLIST", "PDETAILS", "PBYTES", NULL };
-
-/*
- * List of all modules with preference settings.
- */
-static GList *modules;
-
-/*
- * List of all modules that should show up at the top level of the
- * tree in the preference dialog box.
- */
-static GList *top_level_modules;
-
-static gint
-module_compare_name(gconstpointer p1_arg, gconstpointer p2_arg)
-{
-	const module_t *p1 = p1_arg;
-	const module_t *p2 = p2_arg;
-
-	return g_strcasecmp(p1->name, p2->name);
-}
-
-static gint
-module_compare_title(gconstpointer p1_arg, gconstpointer p2_arg)
-{
-	const module_t *p1 = p1_arg;
-	const module_t *p2 = p2_arg;
-
-	return g_strcasecmp(p1->title, p2->title);
-}
-
-/*
- * Register a module that will have preferences.
- * Specify the module under which to register it or NULL to register it
- * at the top level, the name used for the module in the preferences file,
- * the title used in the tab for it in a preferences dialog box, and a
- * routine to call back when we apply the preferences.
- */
-module_t *
-prefs_register_module(module_t *parent, const char *name, const char *title,
-    void (*apply_cb)(void))
-{
-	return prefs_register_module_or_subtree(parent, name, title, FALSE,
-	    apply_cb);
-}
-
-/*
- * Register a subtree that will have modules under it.
- * Specify the module under which to register it or NULL to register it
- * at the top level and the title used in the tab for it in a preferences
- * dialog box.
- */
-module_t *
-prefs_register_subtree(module_t *parent, const char *title)
-{
-	return prefs_register_module_or_subtree(parent, NULL, title, TRUE,
-	    NULL);
-}
-
-static module_t *
-prefs_register_module_or_subtree(module_t *parent, const char *name,
-    const char *title, gboolean is_subtree, void (*apply_cb)(void))
-{
-	module_t *module;
-	const guchar *p;
-
-	module = g_malloc(sizeof (module_t));
-	module->name = name;
-	module->title = title;
-	module->is_subtree = is_subtree;
-	module->apply_cb = apply_cb;
-	module->prefs = NULL;	/* no preferences, to start */
-	module->numprefs = 0;
-	module->prefs_changed = FALSE;
-	module->obsolete = FALSE;
-
-	/*
-	 * Do we have a module name?
-	 */
-	if (name != NULL) {
-		/*
-		 * Yes.
-		 * Make sure that only lower-case ASCII letters, numbers,
-		 * underscores, hyphens, and dots appear in the name.
-		 *
-		 * Crash if there is, as that's an error in the code;
-		 * you can make the title a nice string with capitalization,
-		 * white space, punctuation, etc., but the name can be used
-		 * on the command line, and shouldn't require quoting,
-		 * shifting, etc.
-		 */
-		for (p = name; *p != '\0'; p++)
-			g_assert(isascii(*p) &&
-			    (islower(*p) || isdigit(*p) || *p == '_' ||
-			     *p == '-' || *p == '.'));
-
-		/*
-		 * Make sure there's not already a module with that
-		 * name.  Crash if there is, as that's an error in the
-		 * code, and the code has to be fixed not to register
-		 * more than one module with the same name.
-		 *
-		 * We search the list of all modules; the subtree stuff
-		 * doesn't require preferences in subtrees to have names
-		 * that reflect the subtree they're in (that would require
-		 * protocol preferences to have a bogus "protocol.", or
-		 * something such as that, to be added to all their names).
-		 */
-		g_assert(find_module(name) == NULL);
-
-		/*
-		 * Insert this module in the list of all modules.
-		 */
-		modules = g_list_insert_sorted(modules, module,
-		    module_compare_name);
-	} else {
-		/*
-		 * This has no name, just a title; check to make sure it's a
-		 * subtree, and crash if it's not.
-		 */
-		g_assert(is_subtree);
-	}
-
-	/*
-	 * Insert this module into the appropriate place in the display
-	 * tree.
-	 */
-	if (parent == NULL) {
-		/*
-		 * It goes at the top.
-		 */
-		top_level_modules = g_list_insert_sorted(top_level_modules,
-		    module, module_compare_title);
-	} else {
-		/*
-		 * It goes into the list for this module.
-		 */
-		parent->prefs = g_list_insert_sorted(parent->prefs, module,
-		    module_compare_title);
-	}
-
-	return module;
-}
-
-/*
- * Register that a protocol has preferences.
- */
-module_t *protocols_module;
-
-module_t *
-prefs_register_protocol(int id, void (*apply_cb)(void))
-{
-	protocol_t *protocol;
-
-	/*
-	 * Have we yet created the "Protocols" subtree?
-	 */
-	if (protocols_module == NULL) {
-		/*
-		 * No.  Do so.
-		 */
-		protocols_module = prefs_register_subtree(NULL, "Protocols");
-	}
-	protocol = find_protocol_by_id(id);
-	return prefs_register_module(protocols_module,
-	    proto_get_protocol_filter_name(id),
-	    proto_get_protocol_short_name(protocol), apply_cb);
-}
-
-/*
- * Register that a protocol used to have preferences but no longer does,
- * by creating an "obsolete" module for it.
- */
-module_t *
-prefs_register_protocol_obsolete(int id)
-{
-	module_t *module;
-	protocol_t *protocol;
-
-	/*
-	 * Have we yet created the "Protocols" subtree?
-	 */
-	if (protocols_module == NULL) {
-		/*
-		 * No.  Do so.
-		 */
-		protocols_module = prefs_register_subtree(NULL, "Protocols");
-	}
-	protocol = find_protocol_by_id(id);
-	module = prefs_register_module(protocols_module,
-	    proto_get_protocol_filter_name(id),
-	    proto_get_protocol_short_name(protocol), NULL);
-	module->obsolete = TRUE;
-	return module;
-}
-
-/*
- * Find a module, given its name.
- */
-static gint
-module_match(gconstpointer a, gconstpointer b)
-{
-	const module_t *module = a;
-	const char *name = b;
-
-	return strcmp(name, module->name);
-}
-
-static module_t *
-find_module(const char *name)
-{
-	GList *list_entry;
-
-	list_entry = g_list_find_custom(modules, (gpointer)name, module_match);
-	if (list_entry == NULL)
-		return NULL;	/* no such module */
-	return (module_t *) list_entry->data;
-}
-
-typedef struct {
-	module_cb callback;
-	gpointer user_data;
-} module_cb_arg_t;
-
-static void
-do_module_callback(gpointer data, gpointer user_data)
-{
-	module_t *module = data;
-	module_cb_arg_t *arg = user_data;
-
-	if (!module->obsolete)
-		(*arg->callback)(module, arg->user_data);
-}
-
-/*
- * Call a callback function, with a specified argument, for each module
- * in a list of modules.  If the list is NULL, searches the top-level
- * list in the display tree of modules.
- *
- * Ignores "obsolete" modules; their sole purpose is to allow old
- * preferences for dissectors that no longer have preferences to be
- * silently ignored in preference files.  Does not ignore subtrees,
- * as this can be used when walking the display tree of modules.
- */
-void
-prefs_module_list_foreach(GList *module_list, module_cb callback,
-    gpointer user_data)
-{
-	module_cb_arg_t arg;
-
-	if (module_list == NULL)
-		module_list = top_level_modules;
-
-	arg.callback = callback;
-	arg.user_data = user_data;
-	g_list_foreach(module_list, do_module_callback, &arg);
-}
-
-/*
- * Call a callback function, with a specified argument, for each module
- * in the list of all modules.  (This list does not include subtrees.)
- *
- * Ignores "obsolete" modules; their sole purpose is to allow old
- * preferences for dissectors that no longer have preferences to be
- * silently ignored in preference files.
- */
-void
-prefs_modules_foreach(module_cb callback, gpointer user_data)
-{
-	prefs_module_list_foreach(modules, callback, user_data);
-}
-
-static void
-call_apply_cb(gpointer data, gpointer user_data _U_)
-{
-	module_t *module = data;
-
-	if (module->obsolete)
-		return;
-	if (module->prefs_changed) {
-		if (module->apply_cb != NULL)
-			(*module->apply_cb)();
-		module->prefs_changed = FALSE;
-	}
-}
-
-/*
- * Call the "apply" callback function for each module if any of its
- * preferences have changed, and then clear the flag saying its
- * preferences have changed, as the module has been notified of that
- * fact.
- */
-void
-prefs_apply_all(void)
-{
-	g_list_foreach(modules, call_apply_cb, NULL);
-}
-
-/*
- * Register a preference in a module's list of preferences.
- * If it has a title, give it an ordinal number; otherwise, it's a
- * preference that won't show up in the UI, so it shouldn't get an
- * ordinal number (the ordinal should be the ordinal in the set of
- * *visible* preferences).
- */
-static pref_t *
-register_preference(module_t *module, const char *name, const char *title,
-    const char *description, pref_type_t type)
-{
-	pref_t *preference;
-	const guchar *p;
-
-	preference = g_malloc(sizeof (pref_t));
-	preference->name = name;
-	preference->title = title;
-	preference->description = description;
-	preference->type = type;
-	if (title != NULL)
-		preference->ordinal = module->numprefs;
-	else
-		preference->ordinal = -1;	/* no ordinal for you */
-
-	/*
-	 * Make sure that only lower-case ASCII letters, numbers,
-	 * underscores, and dots appear in the preference name.
-	 *
-	 * Crash if there is, as that's an error in the code;
-	 * you can make the title and description nice strings
-	 * with capitalization, white space, punctuation, etc.,
-	 * but the name can be used on the command line,
-	 * and shouldn't require quoting, shifting, etc.
-	 */
-	for (p = name; *p != '\0'; p++)
-		g_assert(isascii(*p) &&
-		    (islower(*p) || isdigit(*p) || *p == '_' || *p == '.'));
-
-	/*
-	 * Make sure there's not already a preference with that
-	 * name.  Crash if there is, as that's an error in the
-	 * code, and the code has to be fixed not to register
-	 * more than one preference with the same name.
-	 */
-	g_assert(find_preference(module, name) == NULL);
-
-	if (type != PREF_OBSOLETE) {
-		/*
-		 * Make sure the preference name doesn't begin with the
-		 * module name, as that's redundant and Just Silly.
-		 */
-		g_assert((strncmp(name, module->name, strlen(module->name)) != 0) ||
-			(((name[strlen(module->name)]) != '.') && ((name[strlen(module->name)]) != '_')));
-	}
-
-	/*
-	 * There isn't already one with that name, so add the
-	 * preference.
-	 */
-	module->prefs = g_list_append(module->prefs, preference);
-	if (title != NULL)
-		module->numprefs++;
-
-	return preference;
-}
-
-/*
- * Find a preference in a module's list of preferences, given the module
- * and the preference's name.
- */
-static gint
-preference_match(gconstpointer a, gconstpointer b)
-{
-	const pref_t *pref = a;
-	const char *name = b;
-
-	return strcmp(name, pref->name);
-}
-
-static struct preference *
-find_preference(module_t *module, const char *name)
-{
-	GList *list_entry;
-
-	list_entry = g_list_find_custom(module->prefs, (gpointer)name,
-	    preference_match);
-	if (list_entry == NULL)
-		return NULL;	/* no such preference */
-	return (struct preference *) list_entry->data;
-}
-
-/*
- * Returns TRUE if the given protocol has registered preferences
- */
-gboolean
-prefs_is_registered_protocol(char *name)
-{
-	module_t *m = find_module(name);
-
-	return (m != NULL && !m->obsolete);
-}
-
-/*
- * Returns the module title of a registered protocol
- */
-const char *
-prefs_get_title_by_name(char *name)
-{
-	module_t *m = find_module(name);
-
-	return (m != NULL && !m->obsolete) ? m->title : NULL;
-}
-
-/*
- * Register a preference with an unsigned integral value.
- */
-void
-prefs_register_uint_preference(module_t *module, const char *name,
-    const char *title, const char *description, guint base, guint *var)
-{
-	pref_t *preference;
-
-	preference = register_preference(module, name, title, description,
-	    PREF_UINT);
-	preference->varp.uint = var;
-	preference->info.base = base;
-}
-
-/*
- * Register a preference with an Boolean value.
- */
-void
-prefs_register_bool_preference(module_t *module, const char *name,
-    const char *title, const char *description, gboolean *var)
-{
-	pref_t *preference;
-
-	preference = register_preference(module, name, title, description,
-	    PREF_BOOL);
-	preference->varp.boolp = var;
-}
-
-/*
- * Register a preference with an enumerated value.
- */
-void
-prefs_register_enum_preference(module_t *module, const char *name,
-    const char *title, const char *description, gint *var,
-    const enum_val_t *enumvals, gboolean radio_buttons)
-{
-	pref_t *preference;
-
-	preference = register_preference(module, name, title, description,
-	    PREF_ENUM);
-	preference->varp.enump = var;
-	preference->info.enum_info.enumvals = enumvals;
-	preference->info.enum_info.radio_buttons = radio_buttons;
-}
-
-/*
- * Register a preference with a character-string value.
- */
-void
-prefs_register_string_preference(module_t *module, const char *name,
-    const char *title, const char *description, char **var)
-{
-	pref_t *preference;
-
-	preference = register_preference(module, name, title, description,
-	    PREF_STRING);
-
-	/*
-	 * String preference values should be non-null (as you can't
-	 * keep them null after using the preferences GUI, you can at best
-	 * have them be null strings) and freeable (as we free them
-	 * if we change them.
-	 *
-	 * If the value is a null pointer, make it a copy of a null
-	 * string, otherwise make it a copy of the value.
-	 */
-	if (*var == NULL)
-		*var = g_strdup("");
-	else
-		*var = g_strdup(*var);
-	preference->varp.string = var;
-	preference->saved_val.string = NULL;
-}
-
-/*
- * Register a preference that used to be supported but no longer is.
- */
-void
-prefs_register_obsolete_preference(module_t *module, const char *name)
-{
-	register_preference(module, name, NULL, NULL, PREF_OBSOLETE);
-}
-
-/*
- * Call a callback function, with a specified argument, for each preference
- * in a given module.
- *
- * If any of the callbacks return a non-zero value, stop and return that
- * value, otherwise return 0.
- */
-guint
-prefs_pref_foreach(module_t *module, pref_cb callback, gpointer user_data)
-{
-	GList *elem;
-	pref_t *pref;
-	guint ret;
-
-	for (elem = g_list_first(module->prefs); elem != NULL;
-	    elem = g_list_next(elem)) {
-		pref = elem->data;
-		if (pref->type == PREF_OBSOLETE) {
-			/*
-			 * This preference is no longer supported; it's
-			 * not a real preference, so we don't call the
-			 * callback for it (i.e., we treat it as if it
-			 * weren't found in the list of preferences,
-			 * and we weren't called in the first place).
-			 */
-			continue;
-		}
-
-		ret = (*callback)(pref, user_data);
-		if (ret != 0)
-			return ret;
-	}
-	return 0;
-}
-
-/*
- * Register all non-dissector modules' preferences.
- */
-void
-prefs_register_modules(void)
-{
-}
-
-/* Parse through a list of comma-separated, possibly quoted strings.
-   Return a list of the string data. */
-static GList *
-get_string_list(gchar *str)
-{
-  enum { PRE_STRING, IN_QUOT, NOT_IN_QUOT };
-
-  gint      state = PRE_STRING, i = 0, j = 0;
-  gboolean  backslash = FALSE;
-  guchar    cur_c;
-  gchar    *slstr = NULL;
-  GList    *sl = NULL;
-
-  /* Allocate a buffer for the first string.   */
-  slstr = (gchar *) g_malloc(sizeof(gchar) * COL_MAX_LEN);
-  j = 0;
-
-  for (;;) {
-    cur_c = str[i];
-    if (cur_c == '\0') {
-      /* It's the end of the input, so it's the end of the string we
-         were working on, and there's no more input. */
-      if (state == IN_QUOT || backslash) {
-        /* We were in the middle of a quoted string or backslash escape,
-           and ran out of characters; that's an error.  */
-        g_free(slstr);
-        clear_string_list(sl);
-        return NULL;
-      }
-      slstr[j] = '\0';
-      sl = g_list_append(sl, slstr);
-      break;
-    }
-    if (cur_c == '"' && ! backslash) {
-      switch (state) {
-        case PRE_STRING:
-          /* We hadn't yet started processing a string; this starts the
-             string, and we're now quoting.  */
-          state = IN_QUOT;
-          break;
-        case IN_QUOT:
-          /* We're in the middle of a quoted string, and we saw a quotation
-             mark; we're no longer quoting.   */
-          state = NOT_IN_QUOT;
-          break;
-        case NOT_IN_QUOT:
-          /* We're working on a string, but haven't seen a quote; we're
-             now quoting.  */
-          state = IN_QUOT;
-          break;
-        default:
-          break;
-      }
-    } else if (cur_c == '\\' && ! backslash) {
-      /* We saw a backslash, and the previous character wasn't a
-         backslash; escape the next character.
-
-         This also means we've started a new string. */
-      backslash = TRUE;
-      if (state == PRE_STRING)
-        state = NOT_IN_QUOT;
-    } else if (cur_c == ',' && state != IN_QUOT && ! backslash) {
-      /* We saw a comma, and we're not in the middle of a quoted string
-         and it wasn't preceded by a backslash; it's the end of
-         the string we were working on...  */
-      slstr[j] = '\0';
-      sl = g_list_append(sl, slstr);
-
-      /* ...and the beginning of a new string.  */
-      state = PRE_STRING;
-      slstr = (gchar *) g_malloc(sizeof(gchar) * COL_MAX_LEN);
-      j = 0;
-    } else if (!isspace(cur_c) || state != PRE_STRING) {
-      /* Either this isn't a white-space character, or we've started a
-         string (i.e., already seen a non-white-space character for that
-         string and put it into the string).
-
-         The character is to be put into the string; do so if there's
-         room.  */
-      if (j < COL_MAX_LEN) {
-        slstr[j] = cur_c;
-        j++;
-      }
-
-      /* If it was backslash-escaped, we're done with the backslash escape.  */
-      backslash = FALSE;
-    }
-    i++;
-  }
-  return(sl);
-}
-
-#define MAX_FMT_PREF_LEN      1024
-#define MAX_FMT_PREF_LINE_LEN   60
-static gchar *
-put_string_list(GList *sl)
-{
-  static gchar  pref_str[MAX_FMT_PREF_LEN] = "";
-  GList        *clp = g_list_first(sl);
-  gchar        *str;
-  int           cur_pos = 0, cur_len = 0;
-  gchar        *quoted_str;
-  int           str_len;
-  gchar        *strp, *quoted_strp, c;
-  int           fmt_len;
-
-  while (clp) {
-    str = clp->data;
-
-    /* Allocate a buffer big enough to hold the entire string, with each
-       character quoted (that's the worst case).  */
-    str_len = strlen(str);
-    quoted_str = g_malloc(str_len*2 + 1);
-
-    /* Now quote any " or \ characters in it. */
-    strp = str;
-    quoted_strp = quoted_str;
-    while ((c = *strp++) != '\0') {
-      if (c == '"' || c == '\\') {
-        /* It has to be backslash-quoted.  */
-        *quoted_strp++ = '\\';
-      }
-      *quoted_strp++ = c;
-    }
-    *quoted_strp = '\0';
-
-    fmt_len = strlen(quoted_str) + 4;
-    if ((fmt_len + cur_len) < (MAX_FMT_PREF_LEN - 1)) {
-      if ((fmt_len + cur_pos) > MAX_FMT_PREF_LINE_LEN) {
-        /* Wrap the line.  */
-        cur_len--;
-        cur_pos = 0;
-        pref_str[cur_len] = '\n'; cur_len++;
-        pref_str[cur_len] = '\t'; cur_len++;
-      }
-      sprintf(&pref_str[cur_len], "\"%s\", ", quoted_str);
-      cur_pos += fmt_len;
-      cur_len += fmt_len;
-    }
-    g_free(quoted_str);
-    clp = clp->next;
-  }
-
-  /* If the string is at least two characters long, the last two characters
-     are ", ", and should be discarded, as there are no more items in the
-     string.  */
-  if (cur_len >= 2)
-    pref_str[cur_len - 2] = '\0';
-
-  return(pref_str);
-}
-
-static void
-clear_string_list(GList *sl)
-{
-  GList *l = sl;
-
-  while (l) {
-    g_free(l->data);
-    l = g_list_remove_link(l, l);
-  }
-}
-
-/*
- * Takes a string, a pointer to an array of "enum_val_t"s, and a default gint
- * value.
- * The array must be terminated by an entry with a null "name" string.
- *
- * If the string matches a "name" string in an entry, the value from that
- * entry is returned.
- *
- * Otherwise, if a string matches a "desctiption" string in an entry, the
- * value from that entry is returned; we do that for backwards compatibility,
- * as we used to have only a "name" string that was used both for command-line
- * and configuration-file values and in the GUI (which meant either that
- * the GUI had what might be somewhat cryptic values to select from or that
- * the "-o" flag took long strings, often with spaces in them).
- *
- * Otherwise, the default value that was passed as the third argument is
- * returned.
- */
-gint
-find_val_for_string(const char *needle, const enum_val_t *haystack,
-    gint default_value)
-{
-	int i;
-
-	for (i = 0; haystack[i].name != NULL; i++) {
-		if (strcasecmp(needle, haystack[i].name) == 0) {
-			return haystack[i].value;
-		}
-	}
-	for (i = 0; haystack[i].name != NULL; i++) {
-		if (strcasecmp(needle, haystack[i].description) == 0) {
-			return haystack[i].value;
-		}
-	}
-	return default_value;
-}
-
-/* Takes an string and a pointer to an array of strings, and a default int value.
- * The array must be terminated by a NULL string. If the string is found in the array
- * of strings, the index of that string in the array is returned. Otherwise, the
- * default value that was passed as the third argument is returned.
- */
-static int
-find_index_from_string_array(char *needle, char **haystack, int default_value)
-{
-	int i = 0;
-
-	while (haystack[i] != NULL) {
-		if (strcmp(needle, haystack[i]) == 0) {
-			return i;
-		}
-		i++;
-	}
-	return default_value;
-}
-
-/* Preferences file format:
- * - Configuration directives start at the beginning of the line, and
- *   are terminated with a colon.
- * - Directives can be continued on the next line by preceding them with
- *   whitespace.
- *
- * Example:
-
-# This is a comment line
-print.command: lpr
-print.file: /a/very/long/path/
-	to/ethereal-out.ps
- *
- */
-
-#define MAX_VAR_LEN    48
-
-#define DEF_NUM_COLS    6
-
-
-/* Read the preferences file, fill in "prefs", and return a pointer to it.
-
-   If we got an error (other than "it doesn't exist") trying to read
-   the global preferences file, stuff the errno into "*gpf_errno_return"
-   and a pointer to the path of the file into "*gpf_path_return", and
-   return NULL.
-
-   If we got an error (other than "it doesn't exist") trying to read
-   the user's preferences file, stuff the errno into "*pf_errno_return"
-   and a pointer to the path of the file into "*pf_path_return", and
-   return NULL. */
-e_prefs *
-read_prefs(int *gpf_errno_return, int *gpf_read_errno_return,
-	   char **gpf_path_return, int *pf_errno_return,
-	   int *pf_read_errno_return, char **pf_path_return)
-{
-  int         i;
-  int         err;
-  char       *pf_path;
-  FILE       *pf;
-  fmt_data   *cfmt;
-  gchar      *col_fmt[] = {"No.",      "%m", "Time",        "%t",
-                           "Source",   "%s", "Destination", "%d",
-                           "Protocol", "%p", "Info",        "%i"};
-
-  if (init_prefs) {
-    /* Initialize preferences to wired-in default values.
-       They may be overridden by the global preferences file or the
-       user's preferences file. */
-    init_prefs       = FALSE;
-    prefs.pr_format  = PR_FMT_TEXT;
-    prefs.pr_dest    = PR_DEST_CMD;
-    prefs.pr_file    = g_strdup("ethereal.out");
-    prefs.pr_cmd     = g_strdup("lpr");
-    prefs.col_list = NULL;
-    for (i = 0; i < DEF_NUM_COLS; i++) {
-      cfmt = (fmt_data *) g_malloc(sizeof(fmt_data));
-      cfmt->title = g_strdup(col_fmt[i * 2]);
-      cfmt->fmt   = g_strdup(col_fmt[(i * 2) + 1]);
-      prefs.col_list = g_list_append(prefs.col_list, cfmt);
-    }
-    prefs.num_cols  = DEF_NUM_COLS;
-    prefs.st_client_fg.pixel =     0;
-    prefs.st_client_fg.red   = 32767;
-    prefs.st_client_fg.green =     0;
-    prefs.st_client_fg.blue  =     0;
-    prefs.st_client_bg.pixel =     0;
-    prefs.st_client_bg.red   = 64507;
-    prefs.st_client_bg.green = 60909;
-    prefs.st_client_bg.blue  = 60909;
-    prefs.st_server_fg.pixel =     0;
-    prefs.st_server_fg.red   =     0;
-    prefs.st_server_fg.green =     0;
-    prefs.st_server_fg.blue  = 32767;
-    prefs.st_server_bg.pixel =     0;
-    prefs.st_server_bg.red   = 60909;
-    prefs.st_server_bg.green = 60909;
-    prefs.st_server_bg.blue  = 64507;
-    prefs.gui_scrollbar_on_right = TRUE;
-    prefs.gui_plist_sel_browse = FALSE;
-    prefs.gui_ptree_sel_browse = FALSE;
-    prefs.gui_altern_colors = FALSE;
-    prefs.gui_ptree_line_style = 0;
-    prefs.gui_ptree_expander_style = 1;
-    prefs.gui_hex_dump_highlight_style = 1;
-    prefs.filter_toolbar_show_in_statusbar = FALSE;
-    prefs.gui_toolbar_main_style = TB_STYLE_ICONS;
-#ifdef WIN32
-    prefs.gui_font_name1 = g_strdup("-*-lucida console-medium-r-*-*-*-100-*-*-*-*-*-*");
-    prefs.gui_font_name2 = g_strdup("Lucida Console 10");
-#else
-    /*
-     * XXX - for now, we make the initial font name a pattern that matches
-     * only ISO 8859/1 fonts, so that we don't match 2-byte fonts such
-     * as ISO 10646 fonts.
-     *
-     * Users in locales using other one-byte fonts will have to choose
-     * a different font from the preferences dialog - or put the font
-     * selection in the global preferences file to make that font the
-     * default for all users who don't explicitly specify a different
-     * font.
-     *
-     * Making this a font set rather than a font has two problems:
-     *
-     *	1) as far as I know, you can't select font sets with the
-     *	   font selection dialog;
-     *
-     *  2) if you use a font set, the text to be drawn must be a
-     *	   multi-byte string in the appropriate locale, but
-     *	   Ethereal does *NOT* guarantee that's the case - in
-     *	   the hex-dump window, each character in the text portion
-     *	   of the display must be a *single* byte, and in the
-     *	   packet-list and protocol-tree windows, text extracted
-     *	   from the packet is not necessarily in the right format.
-     *
-     * "Doing this right" may, for the packet-list and protocol-tree
-     * windows, require that dissectors know what the locale is
-     * *AND* know what locale and text representation is used in
-     * the packets they're dissecting, and may be impossible in
-     * the hex-dump window (except by punting and displaying only
-     * ASCII characters).
-     *
-     * GTK+ 2.0 may simplify part of the problem, as it will, as I
-     * understand it, use UTF-8-encoded Unicode as its internal
-     * character set; however, we'd still have to know whatever
-     * character set and encoding is used in the packet (which
-     * may differ for different protocols, e.g. SMB might use
-     * PC code pages for some strings and Unicode for others, whilst
-     * NFS might use some UNIX character set encoding, e.g. ISO 8859/x,
-     * or one of the EUC character sets for Asian languages, or one
-     * of the other multi-byte character sets, or UTF-8, or...).
-     *
-     * I.e., as far as I can tell, "internationalizing" the packet-list,
-     * protocol-tree, and hex-dump windows involves a lot more than, say,
-     * just using font sets rather than fonts.
-     */
-    prefs.gui_font_name1 = g_strdup("-misc-fixed-medium-r-semicondensed-*-*-120-*-*-*-*-iso8859-1");
-    /* XXX- is this the correct default font name for GTK2 none win32? */
-    prefs.gui_font_name2 = g_strdup("fixed medium 12");
-#endif
-    prefs.gui_marked_fg.pixel        =     65535;
-    prefs.gui_marked_fg.red          =     65535;
-    prefs.gui_marked_fg.green        =     65535;
-    prefs.gui_marked_fg.blue         =     65535;
-    prefs.gui_marked_bg.pixel        =         0;
-    prefs.gui_marked_bg.red          =         0;
-    prefs.gui_marked_bg.green        =         0;
-    prefs.gui_marked_bg.blue         =         0;
-    prefs.gui_geometry_save_position =         0;
-    prefs.gui_geometry_save_size     =         1;
-    prefs.gui_geometry_save_maximized=         1;
-    prefs.gui_console_open           = console_open_never;
-    prefs.gui_fileopen_style         = FO_STYLE_LAST_OPENED;
-    prefs.gui_recent_files_count_max = 10;
-    prefs.gui_fileopen_dir           = g_strdup("");
-    prefs.gui_ask_unsaved            = TRUE;
-    prefs.gui_webbrowser             = g_strdup("mozilla %s");
-    prefs.gui_layout_type            = layout_type_5;
-    prefs.gui_layout_content_1       = layout_pane_content_plist;
-    prefs.gui_layout_content_2       = layout_pane_content_pdetails;
-    prefs.gui_layout_content_3       = layout_pane_content_pbytes;
-
-/* set the default values for the capture dialog box */
-    prefs.capture_device           = NULL;
-    prefs.capture_devices_descr    = NULL;
-    prefs.capture_devices_hide     = NULL;
-    prefs.capture_prom_mode        = TRUE;
-    prefs.capture_real_time        = FALSE;
-    prefs.capture_auto_scroll      = FALSE;
-    prefs.capture_show_info        = TRUE;
-    prefs.name_resolve             = RESOLV_ALL ^ RESOLV_NETWORK;
-    prefs.name_resolve_concurrency = 500;
-  }
-
-  /* Construct the pathname of the global preferences file. */
-  if (! gpf_path)
-    gpf_path = get_datafile_path(GPF_NAME);
-
-  /* Read the global preferences file, if it exists. */
-  *gpf_path_return = NULL;
-  if ((pf = fopen(gpf_path, "r")) != NULL) {
-    /*
-     * Start out the counters of "mgcp.{tcp,udp}.port" entries we've
-     * seen.
-     */
-    mgcp_tcp_port_count = 0;
-    mgcp_udp_port_count = 0;
-
-    /* We succeeded in opening it; read it. */
-    err = read_prefs_file(gpf_path, pf, set_pref);
-    if (err != 0) {
-      /* We had an error reading the file; return the errno and the
-         pathname, so our caller can report the error. */
-      *gpf_errno_return = 0;
-      *gpf_read_errno_return = err;
-      *gpf_path_return = gpf_path;
-    }
-    fclose(pf);
-  } else {
-    /* We failed to open it.  If we failed for some reason other than
-       "it doesn't exist", return the errno and the pathname, so our
-       caller can report the error. */
-    if (errno != ENOENT) {
-      *gpf_errno_return = errno;
-      *gpf_read_errno_return = 0;
-      *gpf_path_return = gpf_path;
-    }
-  }
-
-  /* Construct the pathname of the user's preferences file. */
-  pf_path = get_persconffile_path(PF_NAME, FALSE);
-
-  /* Read the user's preferences file, if it exists. */
-  *pf_path_return = NULL;
-  if ((pf = fopen(pf_path, "r")) != NULL) {
-    /*
-     * Start out the counters of "mgcp.{tcp,udp}.port" entries we've
-     * seen.
-     */
-    mgcp_tcp_port_count = 0;
-    mgcp_udp_port_count = 0;
-
-    /* We succeeded in opening it; read it. */
-    err = read_prefs_file(pf_path, pf, set_pref);
-    if (err != 0) {
-      /* We had an error reading the file; return the errno and the
-         pathname, so our caller can report the error. */
-      *pf_errno_return = 0;
-      *pf_read_errno_return = err;
-      *pf_path_return = pf_path;
-    } else
-      g_free(pf_path);
-    fclose(pf);
-  } else {
-    /* We failed to open it.  If we failed for some reason other than
-       "it doesn't exist", return the errno and the pathname, so our
-       caller can report the error. */
-    if (errno != ENOENT) {
-      *pf_errno_return = errno;
-      *pf_read_errno_return = 0;
-      *pf_path_return = pf_path;
-    }
-  }
-
-  return &prefs;
-}
-
-/* read the preferences file (or similiar) and call the callback 
- * function to set each key/value pair found */
-int
-read_prefs_file(const char *pf_path, FILE *pf, pref_set_pair_cb pref_set_pair_fct)
-{
-  enum { START, IN_VAR, PRE_VAL, IN_VAL, IN_SKIP };
-  gchar     cur_var[MAX_VAR_LEN], cur_val[MAX_VAL_LEN];
-  int       got_c, state = START;
-  gboolean  got_val = FALSE;
-  gint      var_len = 0, val_len = 0, fline = 1, pline = 1;
-  gchar     hint[] = "(saving your preferences once should remove this warning)";
-
-
-  while ((got_c = getc(pf)) != EOF) {
-    if (got_c == '\n') {
-      state = START;
-      fline++;
-      continue;
-    }
-    if (var_len >= MAX_VAR_LEN) {
-      g_warning ("%s line %d: Variable too long %s", pf_path, fline, hint);
-      state = IN_SKIP;
-      var_len = 0;
-      continue;
-    }
-    if (val_len >= MAX_VAL_LEN) {
-      g_warning ("%s line %d: Value too long %s", pf_path, fline, hint);
-      state = IN_SKIP;
-      var_len = 0;
-      continue;
-    }
-
-    switch (state) {
-      case START:
-        if (isalnum(got_c)) {
-          if (var_len > 0) {
-            if (got_val) {
-              cur_var[var_len] = '\0';
-              cur_val[val_len] = '\0';
-              switch (pref_set_pair_fct(cur_var, cur_val)) {
-
-	      case PREFS_SET_SYNTAX_ERR:
-                g_warning ("%s line %d: Syntax error %s", pf_path, pline, hint);
-                break;
-
-	      case PREFS_SET_NO_SUCH_PREF:
-                g_warning ("%s line %d: No such preference \"%s\" %s", pf_path,
-				pline, cur_var, hint);
-                break;
-
-	      case PREFS_SET_OBSOLETE:
-	        /* We silently ignore attempts to set these; it's
-	           probably not the user's fault that it's in there -
-	           they may have saved preferences with a release that
-	           supported them. */
-                break;
-              }
-            } else {
-              g_warning ("%s line %d: Incomplete preference %s", pf_path, pline, hint);
-            }
-          }
-          state      = IN_VAR;
-          got_val    = FALSE;
-          cur_var[0] = got_c;
-          var_len    = 1;
-          pline = fline;
-        } else if (isspace(got_c) && var_len > 0 && got_val) {
-          state = PRE_VAL;
-        } else if (got_c == '#') {
-          state = IN_SKIP;
-        } else {
-          g_warning ("%s line %d: Malformed line %s", pf_path, fline, hint);
-        }
-        break;
-      case IN_VAR:
-        if (got_c != ':') {
-          cur_var[var_len] = got_c;
-          var_len++;
-        } else {
-          state   = PRE_VAL;
-          val_len = 0;
-          got_val = TRUE;
-        }
-        break;
-      case PRE_VAL:
-        if (!isspace(got_c)) {
-          state = IN_VAL;
-          cur_val[val_len] = got_c;
-          val_len++;
-        }
-        break;
-      case IN_VAL:
-        if (got_c != '#')  {
-          cur_val[val_len] = got_c;
-          val_len++;
-        } else {
-          while (isspace((guchar)cur_val[val_len]) && val_len > 0)
-            val_len--;
-          state = IN_SKIP;
-        }
-        break;
-    }
-  }
-  if (var_len > 0) {
-    if (got_val) {
-      cur_var[var_len] = '\0';
-      cur_val[val_len] = '\0';
-      switch (pref_set_pair_fct(cur_var, cur_val)) {
-
-      case PREFS_SET_SYNTAX_ERR:
-        g_warning ("%s line %d: Syntax error %s", pf_path, pline, hint);
-        break;
-
-      case PREFS_SET_NO_SUCH_PREF:
-        g_warning ("%s line %d: No such preference \"%s\" %s", pf_path,
-			pline, cur_var, hint);
-        break;
-
-      case PREFS_SET_OBSOLETE:
-	/* We silently ignore attempts to set these; it's probably not
-	   the user's fault that it's in there - they may have saved
-	   preferences with a release that supported it. */
-        break;
-      }
-    } else {
-      g_warning ("%s line %d: Incomplete preference %s", pf_path, pline, hint);
-    }
-  }
-  if (ferror(pf))
-    return errno;
-  else
-    return 0;
-}
-
-/*
- * Given a string of the form "<pref name>:<pref value>", as might appear
- * as an argument to a "-o" option, parse it and set the preference in
- * question.  Return an indication of whether it succeeded or failed
- * in some fashion.
- */
-int
-prefs_set_pref(char *prefarg)
-{
-	guchar *p, *colonp;
-	int ret;
-
-	/*
-	 * Set the counters of "mgcp.{tcp,udp}.port" entries we've
-	 * seen to values that keep us from trying to interpret tham
-	 * as "mgcp.{tcp,udp}.gateway_port" or "mgcp.{tcp,udp}.callagent_port",
-	 * as, from the command line, we have no way of guessing which
-	 * the user had in mind.
-	 */
-	mgcp_tcp_port_count = -1;
-	mgcp_udp_port_count = -1;
-
-	colonp = strchr(prefarg, ':');
-	if (colonp == NULL)
-		return PREFS_SET_SYNTAX_ERR;
-
-	p = colonp;
-	*p++ = '\0';
-
-	/*
-	 * Skip over any white space (there probably won't be any, but
-	 * as we allow it in the preferences file, we might as well
-	 * allow it here).
-	 */
-	while (isspace(*p))
-		p++;
-	if (*p == '\0') {
-		/*
-		 * Put the colon back, so if our caller uses, in an
-		 * error message, the string they passed us, the message
-		 * looks correct.
-		 */
-		*colonp = ':';
-		return PREFS_SET_SYNTAX_ERR;
-	}
-
-	ret = set_pref(prefarg, p);
-	*colonp = ':';	/* put the colon back */
-	return ret;
-}
-
-#define PRS_PRINT_FMT                    "print.format"
-#define PRS_PRINT_DEST                   "print.destination"
-#define PRS_PRINT_FILE                   "print.file"
-#define PRS_PRINT_CMD                    "print.command"
-#define PRS_COL_FMT                      "column.format"
-#define PRS_STREAM_CL_FG                 "stream.client.fg"
-#define PRS_STREAM_CL_BG                 "stream.client.bg"
-#define PRS_STREAM_SR_FG                 "stream.server.fg"
-#define PRS_STREAM_SR_BG                 "stream.server.bg"
-#define PRS_GUI_SCROLLBAR_ON_RIGHT       "gui.scrollbar_on_right"
-#define PRS_GUI_PLIST_SEL_BROWSE         "gui.packet_list_sel_browse"
-#define PRS_GUI_PTREE_SEL_BROWSE         "gui.protocol_tree_sel_browse"
-#define PRS_GUI_ALTERN_COLORS            "gui.tree_view_altern_colors"
-#define PRS_GUI_FILTER_TOOLBAR_IN_STATUSBAR "gui.filter_toolbar_show_in_statusbar"
-#define PRS_GUI_PTREE_LINE_STYLE         "gui.protocol_tree_line_style"
-#define PRS_GUI_PTREE_EXPANDER_STYLE     "gui.protocol_tree_expander_style"
-#define PRS_GUI_HEX_DUMP_HIGHLIGHT_STYLE "gui.hex_dump_highlight_style"
-#define PRS_GUI_FONT_NAME_1              "gui.font_name"
-#define PRS_GUI_FONT_NAME_2              "gui.gtk2.font_name"
-#define PRS_GUI_MARKED_FG                "gui.marked_frame.fg"
-#define PRS_GUI_MARKED_BG                "gui.marked_frame.bg"
-#define PRS_GUI_CONSOLE_OPEN             "gui.console_open"
-#define PRS_GUI_FILEOPEN_STYLE           "gui.fileopen.style"
-#define PRS_GUI_RECENT_COUNT_MAX         "gui.recent_files_count.max"
-#define PRS_GUI_FILEOPEN_DIR             "gui.fileopen.dir"
-#define PRS_GUI_FILEOPEN_REMEMBERED_DIR  "gui.fileopen.remembered_dir"
-#define PRS_GUI_ASK_UNSAVED              "gui.ask_unsaved"
-#define PRS_GUI_GEOMETRY_SAVE_POSITION   "gui.geometry.save.position"
-#define PRS_GUI_GEOMETRY_SAVE_SIZE       "gui.geometry.save.size"
-#define PRS_GUI_GEOMETRY_SAVE_MAXIMIZED  "gui.geometry.save.maximized"
-#define PRS_GUI_GEOMETRY_MAIN_X          "gui.geometry.main.x"
-#define PRS_GUI_GEOMETRY_MAIN_Y          "gui.geometry.main.y"
-#define PRS_GUI_GEOMETRY_MAIN_WIDTH      "gui.geometry.main.width"
-#define PRS_GUI_GEOMETRY_MAIN_HEIGHT     "gui.geometry.main.height"
-#define PRS_GUI_TOOLBAR_MAIN_SHOW        "gui.toolbar_main_show"
-#define PRS_GUI_TOOLBAR_MAIN_STYLE       "gui.toolbar_main_style"
-#define PRS_GUI_WEBBROWSER               "gui.webbrowser"
-#define PRS_GUI_LAYOUT_TYPE              "gui.layout_type"
-#define PRS_GUI_LAYOUT_CONTENT_1         "gui.layout_content_1"
-#define PRS_GUI_LAYOUT_CONTENT_2         "gui.layout_content_2"
-#define PRS_GUI_LAYOUT_CONTENT_3         "gui.layout_content_3"
-
-/*
- * This applies to more than just captures, so it's not "capture.name_resolve";
- * "capture.name_resolve" is supported on input for backwards compatibility.
- *
- * It's not a preference for a particular part of Ethereal, it's used all
- * over the place, so its name doesn't have two components.
- */
-#define PRS_NAME_RESOLVE "name_resolve"
-#define PRS_NAME_RESOLVE_CONCURRENCY "name_resolve_concurrency"
-#define PRS_CAP_NAME_RESOLVE "capture.name_resolve"
-
-/*  values for the capture dialog box */
-#define PRS_CAP_DEVICE        "capture.device"
-#define PRS_CAP_DEVICES_DESCR "capture.devices_descr"
-#define PRS_CAP_DEVICES_HIDE  "capture.devices_hide"
-#define PRS_CAP_PROM_MODE     "capture.prom_mode"
-#define PRS_CAP_REAL_TIME     "capture.real_time_update"
-#define PRS_CAP_AUTO_SCROLL   "capture.auto_scroll"
-#define PRS_CAP_SHOW_INFO     "capture.show_info"
-
-#define RED_COMPONENT(x)   (guint16) (((((x) >> 16) & 0xff) * 65535 / 255))
-#define GREEN_COMPONENT(x) (guint16) (((((x) >>  8) & 0xff) * 65535 / 255))
-#define BLUE_COMPONENT(x)  (guint16) ( (((x)        & 0xff) * 65535 / 255))
-
-static gchar *pr_formats[] = { "text", "postscript" };
-static gchar *pr_dests[]   = { "command", "file" };
-
-typedef struct {
-  char    letter;
-  guint32 value;
-} name_resolve_opt_t;
-
-static name_resolve_opt_t name_resolve_opt[] = {
-  { 'm', RESOLV_MAC },
-  { 'n', RESOLV_NETWORK },
-  { 't', RESOLV_TRANSPORT },
-  { 'C', RESOLV_CONCURRENT },
-};
-
-#define N_NAME_RESOLVE_OPT	(sizeof name_resolve_opt / sizeof name_resolve_opt[0])
-
-static char *
-name_resolve_to_string(guint32 name_resolve)
-{
-  static char string[N_NAME_RESOLVE_OPT+1];
-  char *p;
-  unsigned int i;
-  gboolean all_opts_set = TRUE;
-
-  if (name_resolve == RESOLV_NONE)
-    return "FALSE";
-  p = &string[0];
-  for (i = 0; i < N_NAME_RESOLVE_OPT; i++) {
-    if (name_resolve & name_resolve_opt[i].value)
-      *p++ =  name_resolve_opt[i].letter;
-    else
-      all_opts_set = FALSE;
-  }
-  *p = '\0';
-  if (all_opts_set)
-    return "TRUE";
-  return string;
-}
-
-char
-string_to_name_resolve(char *string, guint32 *name_resolve)
-{
-  char c;
-  unsigned int i;
-
-  *name_resolve = 0;
-  while ((c = *string++) != '\0') {
-    for (i = 0; i < N_NAME_RESOLVE_OPT; i++) {
-      if (c == name_resolve_opt[i].letter) {
-        *name_resolve |= name_resolve_opt[i].value;
-        break;
-      }
-    }
-    if (i == N_NAME_RESOLVE_OPT) {
-      /*
-       * Unrecognized letter.
-       */
-      return c;
-    }
-  }
-  return '\0';
-}
-
-static int
-set_pref(gchar *pref_name, gchar *value)
-{
-  GList    *col_l, *col_l_elt;
-  gint      llen;
-  fmt_data *cfmt;
-  unsigned long int cval;
-  guint    uval;
-  gboolean bval;
-  gint     enum_val;
-  char     *p;
-  gchar    *dotp, *last_dotp;
-  module_t *module;
-  pref_t   *pref;
-  gboolean had_a_dot;
-
-  if (strcmp(pref_name, PRS_PRINT_FMT) == 0) {
-    if (strcmp(value, pr_formats[PR_FMT_TEXT]) == 0) {
-      prefs.pr_format = PR_FMT_TEXT;
-    } else if (strcmp(value, pr_formats[PR_FMT_PS]) == 0) {
-      prefs.pr_format = PR_FMT_PS;
-    } else {
-      return PREFS_SET_SYNTAX_ERR;
-    }
-  } else if (strcmp(pref_name, PRS_PRINT_DEST) == 0) {
-    if (strcmp(value, pr_dests[PR_DEST_CMD]) == 0) {
-      prefs.pr_dest = PR_DEST_CMD;
-    } else if (strcmp(value, pr_dests[PR_DEST_FILE]) == 0) {
-      prefs.pr_dest = PR_DEST_FILE;
-    } else {
-      return PREFS_SET_SYNTAX_ERR;
-    }
-  } else if (strcmp(pref_name, PRS_PRINT_FILE) == 0) {
-    if (prefs.pr_file) g_free(prefs.pr_file);
-    prefs.pr_file = g_strdup(value);
-  } else if (strcmp(pref_name, PRS_PRINT_CMD) == 0) {
-    if (prefs.pr_cmd) g_free(prefs.pr_cmd);
-    prefs.pr_cmd = g_strdup(value);
-  } else if (strcmp(pref_name, PRS_COL_FMT) == 0) {
-    col_l = get_string_list(value);
-    if (col_l == NULL)
-      return PREFS_SET_SYNTAX_ERR;
-    if ((g_list_length(col_l) % 2) != 0) {
-      /* A title didn't have a matching format.  */
-      clear_string_list(col_l);
-      return PREFS_SET_SYNTAX_ERR;
-    }
-    /* Check to make sure all column formats are valid.  */
-    col_l_elt = g_list_first(col_l);
-    while(col_l_elt) {
-      /* Make sure the title isn't empty.  */
-      if (strcmp(col_l_elt->data, "") == 0) {
-      	/* It is.  */
-        clear_string_list(col_l);
-        return PREFS_SET_SYNTAX_ERR;
-      }
-
-      /* Go past the title.  */
-      col_l_elt = col_l_elt->next;
-
-      /* Check the format.  */
-      if (get_column_format_from_str(col_l_elt->data) == -1) {
-        /* It's not a valid column format.  */
-        clear_string_list(col_l);
-        return PREFS_SET_SYNTAX_ERR;
-      }
-
-      /* Go past the format.  */
-      col_l_elt = col_l_elt->next;
-    }
-    free_col_info(&prefs);
-    prefs.col_list = NULL;
-    llen             = g_list_length(col_l);
-    prefs.num_cols   = llen / 2;
-    col_l_elt = g_list_first(col_l);
-    while(col_l_elt) {
-      cfmt = (fmt_data *) g_malloc(sizeof(fmt_data));
-      cfmt->title    = g_strdup(col_l_elt->data);
-      col_l_elt      = col_l_elt->next;
-      cfmt->fmt      = g_strdup(col_l_elt->data);
-      col_l_elt      = col_l_elt->next;
-      prefs.col_list = g_list_append(prefs.col_list, cfmt);
-    }
-    clear_string_list(col_l);
-  } else if (strcmp(pref_name, PRS_STREAM_CL_FG) == 0) {
-    cval = strtoul(value, NULL, 16);
-    prefs.st_client_fg.pixel = 0;
-    prefs.st_client_fg.red   = RED_COMPONENT(cval);
-    prefs.st_client_fg.green = GREEN_COMPONENT(cval);
-    prefs.st_client_fg.blue  = BLUE_COMPONENT(cval);
-  } else if (strcmp(pref_name, PRS_STREAM_CL_BG) == 0) {
-    cval = strtoul(value, NULL, 16);
-    prefs.st_client_bg.pixel = 0;
-    prefs.st_client_bg.red   = RED_COMPONENT(cval);
-    prefs.st_client_bg.green = GREEN_COMPONENT(cval);
-    prefs.st_client_bg.blue  = BLUE_COMPONENT(cval);
-  } else if (strcmp(pref_name, PRS_STREAM_SR_FG) == 0) {
-    cval = strtoul(value, NULL, 16);
-    prefs.st_server_fg.pixel = 0;
-    prefs.st_server_fg.red   = RED_COMPONENT(cval);
-    prefs.st_server_fg.green = GREEN_COMPONENT(cval);
-    prefs.st_server_fg.blue  = BLUE_COMPONENT(cval);
-  } else if (strcmp(pref_name, PRS_STREAM_SR_BG) == 0) {
-    cval = strtoul(value, NULL, 16);
-    prefs.st_server_bg.pixel = 0;
-    prefs.st_server_bg.red   = RED_COMPONENT(cval);
-    prefs.st_server_bg.green = GREEN_COMPONENT(cval);
-    prefs.st_server_bg.blue  = BLUE_COMPONENT(cval);
-  } else if (strcmp(pref_name, PRS_GUI_SCROLLBAR_ON_RIGHT) == 0) {
-    if (strcasecmp(value, "true") == 0) {
-	    prefs.gui_scrollbar_on_right = TRUE;
-    }
-    else {
-	    prefs.gui_scrollbar_on_right = FALSE;
-    }
-  } else if (strcmp(pref_name, PRS_GUI_PLIST_SEL_BROWSE) == 0) {
-    if (strcasecmp(value, "true") == 0) {
-	    prefs.gui_plist_sel_browse = TRUE;
-    }
-    else {
-	    prefs.gui_plist_sel_browse = FALSE;
-    }
-  } else if (strcmp(pref_name, PRS_GUI_PTREE_SEL_BROWSE) == 0) {
-    if (strcasecmp(value, "true") == 0) {
-	    prefs.gui_ptree_sel_browse = TRUE;
-    }
-    else {
-	    prefs.gui_ptree_sel_browse = FALSE;
-    }
-  } else if (strcmp(pref_name, PRS_GUI_ALTERN_COLORS) == 0) {
-    if (strcasecmp(value, "true") == 0) {
-            prefs.gui_altern_colors = TRUE;
-    }
-    else {
-            prefs.gui_altern_colors = FALSE;
-    }
-  } else if (strcmp(pref_name, PRS_GUI_PTREE_LINE_STYLE) == 0) {
-    prefs.gui_ptree_line_style =
-	find_index_from_string_array(value, gui_ptree_line_style_text, 0);
-  } else if (strcmp(pref_name, PRS_GUI_PTREE_EXPANDER_STYLE) == 0) {
-    prefs.gui_ptree_expander_style =
-	find_index_from_string_array(value, gui_ptree_expander_style_text, 1);
-  } else if (strcmp(pref_name, PRS_GUI_HEX_DUMP_HIGHLIGHT_STYLE) == 0) {
-    prefs.gui_hex_dump_highlight_style =
-	find_index_from_string_array(value, gui_hex_dump_highlight_style_text, 1);
-  } else if (strcmp(pref_name, PRS_GUI_FILTER_TOOLBAR_IN_STATUSBAR) == 0) {
-    if (strcasecmp(value, "true") == 0) {
-            prefs.filter_toolbar_show_in_statusbar = TRUE;
-    }
-    else {
-            prefs.filter_toolbar_show_in_statusbar = FALSE;
-    }
-  } else if (strcmp(pref_name, PRS_GUI_TOOLBAR_MAIN_SHOW) == 0) {
-    /* obsoleted by recent setting */
-  } else if (strcmp(pref_name, PRS_GUI_TOOLBAR_MAIN_STYLE) == 0) {
-    /* see toolbar.c for details, "icons only" is default */
-	prefs.gui_toolbar_main_style =
-	    find_index_from_string_array(value, gui_toolbar_style_text,
-				     TB_STYLE_ICONS);
-  } else if (strcmp(pref_name, PRS_GUI_FONT_NAME_1) == 0) {
-    if (prefs.gui_font_name1 != NULL)
-      g_free(prefs.gui_font_name1);
-    prefs.gui_font_name1 = g_strdup(value);
-  } else if (strcmp(pref_name, PRS_GUI_FONT_NAME_2) == 0) {
-    if (prefs.gui_font_name2 != NULL)
-      g_free(prefs.gui_font_name2);
-    prefs.gui_font_name2 = g_strdup(value);
-  } else if (strcmp(pref_name, PRS_GUI_MARKED_FG) == 0) {
-    cval = strtoul(value, NULL, 16);
-    prefs.gui_marked_fg.pixel = 0;
-    prefs.gui_marked_fg.red   = RED_COMPONENT(cval);
-    prefs.gui_marked_fg.green = GREEN_COMPONENT(cval);
-    prefs.gui_marked_fg.blue  = BLUE_COMPONENT(cval);
-  } else if (strcmp(pref_name, PRS_GUI_MARKED_BG) == 0) {
-    cval = strtoul(value, NULL, 16);
-    prefs.gui_marked_bg.pixel = 0;
-    prefs.gui_marked_bg.red   = RED_COMPONENT(cval);
-    prefs.gui_marked_bg.green = GREEN_COMPONENT(cval);
-    prefs.gui_marked_bg.blue  = BLUE_COMPONENT(cval);
-  } else if (strcmp(pref_name, PRS_GUI_GEOMETRY_SAVE_POSITION) == 0) {
-    if (strcasecmp(value, "true") == 0) {
-	    prefs.gui_geometry_save_position = TRUE;
-    }
-    else {
-	    prefs.gui_geometry_save_position = FALSE;
-    }
-  } else if (strcmp(pref_name, PRS_GUI_GEOMETRY_SAVE_SIZE) == 0) {
-    if (strcasecmp(value, "true") == 0) {
-	    prefs.gui_geometry_save_size = TRUE;
-    }
-    else {
-	    prefs.gui_geometry_save_size = FALSE;
-    }
-  } else if (strcmp(pref_name, PRS_GUI_GEOMETRY_SAVE_MAXIMIZED) == 0) {
-    if (strcasecmp(value, "true") == 0) {
-	    prefs.gui_geometry_save_maximized = TRUE;
-    }
-    else {
-	    prefs.gui_geometry_save_maximized = FALSE;
-    }
-  } else if (strcmp(pref_name, PRS_GUI_GEOMETRY_MAIN_X) == 0) {         /* deprecated */
-  } else if (strcmp(pref_name, PRS_GUI_GEOMETRY_MAIN_Y) == 0) {         /* deprecated */
-  } else if (strcmp(pref_name, PRS_GUI_GEOMETRY_MAIN_WIDTH) == 0) {     /* deprecated */
-  } else if (strcmp(pref_name, PRS_GUI_GEOMETRY_MAIN_HEIGHT) == 0) {    /* deprecated */
-  } else if (strcmp(pref_name, PRS_GUI_CONSOLE_OPEN) == 0) {
-    prefs.gui_console_open =
-	find_index_from_string_array(value, gui_console_open_text,
-				     console_open_never);
-  } else if (strcmp(pref_name, PRS_GUI_FILEOPEN_STYLE) == 0) {
-    prefs.gui_fileopen_style =
-	find_index_from_string_array(value, gui_fileopen_style_text,
-				     FO_STYLE_LAST_OPENED);
-  } else if (strcmp(pref_name, PRS_GUI_RECENT_COUNT_MAX) == 0) {
-    prefs.gui_recent_files_count_max = strtoul(value, NULL, 10);
-    if (prefs.gui_recent_files_count_max == 0) {
-      /* We really should put up a dialog box here ... */
-      prefs.gui_recent_files_count_max = 10;
-    }
-  } else if (strcmp(pref_name, PRS_GUI_FILEOPEN_DIR) == 0) {
-    if (prefs.gui_fileopen_dir != NULL)
-      g_free(prefs.gui_fileopen_dir);
-    prefs.gui_fileopen_dir = g_strdup(value);
-  } else if (strcmp(pref_name, PRS_GUI_FILEOPEN_REMEMBERED_DIR) == 0) { /* deprecated */
-
-  } else if (strcmp(pref_name, PRS_GUI_ASK_UNSAVED) == 0) {
-    if (strcasecmp(value, "true") == 0) {
-	    prefs.gui_ask_unsaved = TRUE;
-    }
-    else {
-	    prefs.gui_ask_unsaved = FALSE;
-    }
-  } else if (strcmp(pref_name, PRS_GUI_WEBBROWSER) == 0) {
-    g_free(prefs.gui_webbrowser);
-    prefs.gui_webbrowser = g_strdup(value);
-  } else if (strcmp(pref_name, PRS_GUI_LAYOUT_TYPE) == 0) {
-    prefs.gui_layout_type = strtoul(value, NULL, 10);
-    if (prefs.gui_layout_type == layout_unused ||
-        prefs.gui_layout_type >= layout_type_max) {
-      /* XXX - report an error?  It's not a syntax error - we'd need to
-         add a way of reporting a *semantic* error. */
-      prefs.gui_layout_type = layout_type_5;
-    }
-  } else if (strcmp(pref_name, PRS_GUI_LAYOUT_CONTENT_1) == 0) {
-    prefs.gui_layout_content_1 =
-	find_index_from_string_array(value, gui_layout_content_text, 0);
-  } else if (strcmp(pref_name, PRS_GUI_LAYOUT_CONTENT_2) == 0) {
-    prefs.gui_layout_content_2 =
-	find_index_from_string_array(value, gui_layout_content_text, 0);
-  } else if (strcmp(pref_name, PRS_GUI_LAYOUT_CONTENT_3) == 0) {
-    prefs.gui_layout_content_3 =
-	find_index_from_string_array(value, gui_layout_content_text, 0);
-
-/* handle the capture options */
-  } else if (strcmp(pref_name, PRS_CAP_DEVICE) == 0) {
-    if (prefs.capture_device != NULL)
-      g_free(prefs.capture_device);
-    prefs.capture_device = g_strdup(value);
-  } else if (strcmp(pref_name, PRS_CAP_DEVICES_DESCR) == 0) {
-    if (prefs.capture_devices_descr != NULL)
-      g_free(prefs.capture_devices_descr);
-    prefs.capture_devices_descr = g_strdup(value);
-  } else if (strcmp(pref_name, PRS_CAP_DEVICES_HIDE) == 0) {
-    if (prefs.capture_devices_hide != NULL)
-      g_free(prefs.capture_devices_hide);
-    prefs.capture_devices_hide = g_strdup(value);
-  } else if (strcmp(pref_name, PRS_CAP_PROM_MODE) == 0) {
-    prefs.capture_prom_mode = ((strcasecmp(value, "true") == 0)?TRUE:FALSE);
-  } else if (strcmp(pref_name, PRS_CAP_REAL_TIME) == 0) {
-    prefs.capture_real_time = ((strcasecmp(value, "true") == 0)?TRUE:FALSE);
-  } else if (strcmp(pref_name, PRS_CAP_AUTO_SCROLL) == 0) {
-    prefs.capture_auto_scroll = ((strcasecmp(value, "true") == 0)?TRUE:FALSE);
-  } else if (strcmp(pref_name, PRS_CAP_SHOW_INFO) == 0) {
-    prefs.capture_show_info = ((strcasecmp(value, "true") == 0)?TRUE:FALSE);
-
-/* handle the global options */
-  } else if (strcmp(pref_name, PRS_NAME_RESOLVE) == 0 ||
-	     strcmp(pref_name, PRS_CAP_NAME_RESOLVE) == 0) {
-    /*
-     * "TRUE" and "FALSE", for backwards compatibility, are synonyms for
-     * RESOLV_ALL and RESOLV_NONE.
-     *
-     * Otherwise, we treat it as a list of name types we want to resolve.
-     */
-    if (strcasecmp(value, "true") == 0)
-      prefs.name_resolve = RESOLV_ALL;
-    else if (strcasecmp(value, "false") == 0)
-      prefs.name_resolve = RESOLV_NONE;
-    else {
-      prefs.name_resolve = RESOLV_NONE;	/* start out with none set */
-      if (string_to_name_resolve(value, &prefs.name_resolve) != '\0')
-        return PREFS_SET_SYNTAX_ERR;
-    }
-  } else if (strcmp(pref_name, PRS_NAME_RESOLVE_CONCURRENCY) == 0) {
-    prefs.name_resolve_concurrency = strtol(value, NULL, 10);
-  } else {
-    /* To which module does this preference belong? */
-    module = NULL;
-    last_dotp = pref_name;
-    had_a_dot = FALSE;
-    while (!module) {
-        dotp = strchr(last_dotp, '.');
-        if (dotp == NULL) {
-            if (had_a_dot) {
-              /* no such module */
-              return PREFS_SET_NO_SUCH_PREF;
-            }
-            else {
-              /* no ".", so no module/name separator */
-              return PREFS_SET_SYNTAX_ERR;
-            }
-        }
-        else {
-            had_a_dot = TRUE;
-        }
-        *dotp = '\0';		/* separate module and preference name */
-        module = find_module(pref_name);
-
-        /*
-         * XXX - "Diameter" rather than "diameter" was used in earlier
-         * versions of Ethereal; if we didn't find the module, and its name
-         * was "Diameter", look for "diameter" instead.
-         *
-         * In addition, the BEEP protocol used to be the BXXP protocol,
-         * so if we didn't find the module, and its name was "bxxp",
-         * look for "beep" instead.
-         *
-         * Also, the preferences for GTP v0 and v1 were combined under
-         * a single "gtp" heading, and the preferences for SMPP were
-         * moved to "smpp-gsm-sms" and then moved to "gsm-sms-ud".
-         * However, SMPP now has its own preferences, so we just map
-         * "smpp-gsm-sms" to "gsm-sms-ud", and then handle SMPP below.
-         */
-        if (module == NULL) {
-          if (strcmp(pref_name, "Diameter") == 0)
-            module = find_module("diameter");
-          else if (strcmp(pref_name, "bxxp") == 0)
-            module = find_module("beep");
-          else if (strcmp(pref_name, "gtpv0") == 0 ||
-                   strcmp(pref_name, "gtpv1") == 0)
-            module = find_module("gtp");
-          else if (strcmp(pref_name, "smpp-gsm-sms") == 0)
-            module = find_module("gsm-sms-ud");
-        }
-        *dotp = '.';		/* put the preference string back */
-        dotp++;			/* skip past separator to preference name */
-        last_dotp = dotp;
-    }
-
-    pref = find_preference(module, dotp);
-
-    if (pref == NULL) {
-      if (strcmp(module->name, "mgcp") == 0) {
-        /*
-         * XXX - "mgcp.display raw text toggle" and "mgcp.display dissect tree"
-         * rather than "mgcp.display_raw_text" and "mgcp.display_dissect_tree"
-         * were used in earlier versions of Ethereal; if we didn't find the
-         * preference, it was an MGCP preference, and its name was
-         * "display raw text toggle" or "display dissect tree", look for
-         * "display_raw_text" or "display_dissect_tree" instead.
-         *
-         * "mgcp.tcp.port" and "mgcp.udp.port" are harder to handle, as both
-         * the gateway and callagent ports were given those names; we interpret
-         * the first as "mgcp.{tcp,udp}.gateway_port" and the second as
-         * "mgcp.{tcp,udp}.callagent_port", as that's the order in which
-         * they were registered by the MCCP dissector and thus that's the
-         * order in which they were written to the preferences file.  (If
-         * we're not reading the preferences file, but are handling stuff
-         * from a "-o" command-line option, we have no clue which the user
-         * had in mind - they should have used "mgcp.{tcp,udp}.gateway_port"
-         * or "mgcp.{tcp,udp}.callagent_port" instead.)
-         */
-        if (strcmp(dotp, "display raw text toggle") == 0)
-          pref = find_preference(module, "display_raw_text");
-        else if (strcmp(dotp, "display dissect tree") == 0)
-          pref = find_preference(module, "display_dissect_tree");
-        else if (strcmp(dotp, "tcp.port") == 0) {
-          mgcp_tcp_port_count++;
-          if (mgcp_tcp_port_count == 1) {
-            /* It's the first one */
-            pref = find_preference(module, "tcp.gateway_port");
- 	  } else if (mgcp_tcp_port_count == 2) {
-            /* It's the second one */
-            pref = find_preference(module, "tcp.callagent_port");
-	  }
-          /* Otherwise it's from the command line, and we don't bother
-             mapping it. */
-	} else if (strcmp(dotp, "udp.port") == 0) {
-          mgcp_udp_port_count++;
-          if (mgcp_udp_port_count == 1) {
-            /* It's the first one */
-            pref = find_preference(module, "udp.gateway_port");
-	  } else if (mgcp_udp_port_count == 2) {
-            /* It's the second one */
-            pref = find_preference(module, "udp.callagent_port");
-	  }
-          /* Otherwise it's from the command line, and we don't bother
-             mapping it. */
-	}
-      } else if (strcmp(module->name, "smb") == 0) {
-        /* Handle old names for SMB preferences. */
-        if (strcmp(dotp, "smb.trans.reassembly") == 0)
-          pref = find_preference(module, "trans_reassembly");
-        else if (strcmp(dotp, "smb.dcerpc.reassembly") == 0)
-          pref = find_preference(module, "dcerpc_reassembly");
-      } else if (strcmp(module->name, "ndmp") == 0) {
-        /* Handle old names for NDMP preferences. */
-        if (strcmp(dotp, "ndmp.desegment") == 0)
-          pref = find_preference(module, "desegment");
-      } else if (strcmp(module->name, "diameter") == 0) {
-        /* Handle old names for Diameter preferences. */
-        if (strcmp(dotp, "diameter.desegment") == 0)
-          pref = find_preference(module, "desegment");
-      } else if (strcmp(module->name, "pcli") == 0) {
-        /* Handle old names for PCLI preferences. */
-        if (strcmp(dotp, "pcli.udp_port") == 0)
-          pref = find_preference(module, "udp_port");
-      } else if (strcmp(module->name, "artnet") == 0) {
-        /* Handle old names for ARTNET preferences. */
-        if (strcmp(dotp, "artnet.udp_port") == 0)
-          pref = find_preference(module, "udp_port");
-      } else if (strcmp(module->name, "mapi") == 0) {
-        /* Handle old names for MAPI preferences. */
-        if (strcmp(dotp, "mapi_decrypt") == 0)
-          pref = find_preference(module, "decrypt");
-      } else if (strcmp(module->name, "fc") == 0) {
-        /* Handle old names for Fibre Channel preferences. */
-        if (strcmp(dotp, "reassemble_fc") == 0)
-          pref = find_preference(module, "reassemble");
-        else if (strcmp(dotp, "fc_max_frame_size") == 0)
-          pref = find_preference(module, "max_frame_size");
-      } else if (strcmp(module->name, "fcip") == 0) {
-        /* Handle old names for Fibre Channel-over-IP preferences. */
-        if (strcmp(dotp, "desegment_fcip_messages") == 0)
-          pref = find_preference(module, "desegment");
-        else if (strcmp(dotp, "fcip_port") == 0)
-          pref = find_preference(module, "target_port");
-      } else if (strcmp(module->name, "gtp") == 0) {
-        /* Handle old names for GTP preferences. */
-        if (strcmp(dotp, "gtpv0_port") == 0)
-          pref = find_preference(module, "v0_port");
-        else if (strcmp(dotp, "gtpv1c_port") == 0)
-          pref = find_preference(module, "v1c_port");
-        else if (strcmp(dotp, "gtpv1u_port") == 0)
-          pref = find_preference(module, "v1u_port");
-        else if (strcmp(dotp, "gtp_dissect_tpdu") == 0)
-          pref = find_preference(module, "dissect_tpdu");
-        else if (strcmp(dotp, "gtpv0_dissect_cdr_as") == 0)
-          pref = find_preference(module, "v0_dissect_cdr_as");
-        else if (strcmp(dotp, "gtpv0_check_etsi") == 0)
-          pref = find_preference(module, "v0_check_etsi");
-        else if (strcmp(dotp, "gtpv1_check_etsi") == 0)
-          pref = find_preference(module, "v1_check_etsi");
-      } else if (strcmp(module->name, "ip") == 0) {
-        /* Handle old names for IP preferences. */
-        if (strcmp(dotp, "ip_summary_in_tree") == 0)
-          pref = find_preference(module, "summary_in_tree");
-      } else if (strcmp(module->name, "iscsi") == 0) {
-        /* Handle old names for iSCSI preferences. */
-        if (strcmp(dotp, "iscsi_port") == 0)
-          pref = find_preference(module, "target_port");
-      } else if (strcmp(module->name, "lmp") == 0) {
-        /* Handle old names for LMP preferences. */
-        if (strcmp(dotp, "lmp_version") == 0)
-          pref = find_preference(module, "version");
-      } else if (strcmp(module->name, "mtp3") == 0) {
-        /* Handle old names for MTP3 preferences. */
-        if (strcmp(dotp, "mtp3_standard") == 0)
-          pref = find_preference(module, "standard");
-      } else if (strcmp(module->name, "nlm") == 0) {
-        /* Handle old names for NLM preferences. */
-        if (strcmp(dotp, "nlm_msg_res_matching") == 0)
-          pref = find_preference(module, "msg_res_matching");
-      } else if (strcmp(module->name, "ppp") == 0) {
-        /* Handle old names for PPP preferences. */
-        if (strcmp(dotp, "ppp_fcs") == 0)
-          pref = find_preference(module, "fcs_type");
-        else if (strcmp(dotp, "ppp_vj") == 0)
-          pref = find_preference(module, "decompress_vj");
-      } else if (strcmp(module->name, "rsvp") == 0) {
-        /* Handle old names for RSVP preferences. */
-        if (strcmp(dotp, "rsvp_process_bundle") == 0)
-          pref = find_preference(module, "process_bundle");
-      } else if (strcmp(module->name, "tcp") == 0) {
-        /* Handle old names for TCP preferences. */
-        if (strcmp(dotp, "tcp_summary_in_tree") == 0)
-          pref = find_preference(module, "summary_in_tree");
-        else if (strcmp(dotp, "tcp_analyze_sequence_numbers") == 0)
-          pref = find_preference(module, "analyze_sequence_numbers");
-        else if (strcmp(dotp, "tcp_relative_sequence_numbers") == 0)
-          pref = find_preference(module, "relative_sequence_numbers");
-      } else if (strcmp(module->name, "udp") == 0) {
-        /* Handle old names for UDP preferences. */
-        if (strcmp(dotp, "udp_summary_in_tree") == 0)
-          pref = find_preference(module, "summary_in_tree");
-      } else if (strcmp(module->name, "ndps") == 0) {
-        /* Handle old names for NDPS preferences. */
-        if (strcmp(dotp, "desegment_ndps") == 0)
-          pref = find_preference(module, "desegment_tcp");
-      } else if (strcmp(module->name, "http") == 0) {
-        /* Handle old names for HTTP preferences. */
-        if (strcmp(dotp, "desegment_http_headers") == 0)
-          pref = find_preference(module, "desegment_headers");
-        else if (strcmp(dotp, "desegment_http_body") == 0)
-          pref = find_preference(module, "desegment_body");
-      } else if (strcmp(module->name, "smpp") == 0) {
-        /* Handle preferences that moved from SMPP. */
-        module_t *new_module = find_module("gsm-sms-ud");
-        if (strcmp(dotp, "port_number_udh_means_wsp") == 0)
-          pref = find_preference(new_module, "port_number_udh_means_wsp");
-        else if (strcmp(dotp, "try_dissect_1st_fragment") == 0)
-          pref = find_preference(new_module, "try_dissect_1st_fragment");
-      } else if (strcmp(module->name, "asn1") == 0) {
-        /* Handle old generic ASN.1 preferences (it's not really a
-           rename, as the new preferences support multiple ports,
-           but we might as well copy them over). */
-        if (strcmp(dotp, "tcp_port") == 0)
-          pref = find_preference(module, "tcp_ports");
-        else if (strcmp(dotp, "udp_port") == 0)
-          pref = find_preference(module, "udp_ports");
-        else if (strcmp(dotp, "sctp_port") == 0)
-          pref = find_preference(module, "sctp_ports");
-      }
-    }
-    if (pref == NULL)
-      return PREFS_SET_NO_SUCH_PREF;	/* no such preference */
-
-    switch (pref->type) {
-
-    case PREF_UINT:
-      uval = strtoul(value, &p, pref->info.base);
-      if (p == value || *p != '\0')
-        return PREFS_SET_SYNTAX_ERR;	/* number was bad */
-      if (*pref->varp.uint != uval) {
-        module->prefs_changed = TRUE;
-        *pref->varp.uint = uval;
-      }
-      break;
-
-    case PREF_BOOL:
-      /* XXX - give an error if it's neither "true" nor "false"? */
-      if (strcasecmp(value, "true") == 0)
-        bval = TRUE;
-      else
-        bval = FALSE;
-      if (*pref->varp.boolp != bval) {
-	module->prefs_changed = TRUE;
-	*pref->varp.boolp = bval;
-      }
-      break;
-
-    case PREF_ENUM:
-      /* XXX - give an error if it doesn't match? */
-      enum_val = find_val_for_string(value,
-					pref->info.enum_info.enumvals, 1);
-      if (*pref->varp.enump != enum_val) {
-	module->prefs_changed = TRUE;
-	*pref->varp.enump = enum_val;
-      }
-      break;
-
-    case PREF_STRING:
-      if (strcmp(*pref->varp.string, value) != 0) {
-        module->prefs_changed = TRUE;
-        g_free(*pref->varp.string);
-        *pref->varp.string = g_strdup(value);
-      }
-      break;
-
-    case PREF_OBSOLETE:
-      return PREFS_SET_OBSOLETE;	/* no such preference any more */
-    }
-  }
-
-  return PREFS_SET_OK;
-}
-
-typedef struct {
-	module_t *module;
-	FILE	*pf;
-} write_pref_arg_t;
-
-/*
- * Write out a single preference.
- */
-static void
-write_pref(gpointer data, gpointer user_data)
-{
-	pref_t *pref = data;
-	write_pref_arg_t *arg = user_data;
-	const enum_val_t *enum_valp;
-	const char *val_string;
-
-	if (pref->type == PREF_OBSOLETE) {
-		/*
-		 * This preference is no longer supported; it's not a
-		 * real preference, so we don't write it out (i.e., we
-		 * treat it as if it weren't found in the list of
-		 * preferences, and we weren't called in the first place).
-		 */
-		return;
-	}
-
-	fprintf(arg->pf, "\n# %s\n", pref->description);
-
-	switch (pref->type) {
-
-	case PREF_UINT:
-		switch (pref->info.base) {
-
-		case 10:
-			fprintf(arg->pf, "# A decimal number.\n");
-			fprintf(arg->pf, "%s.%s: %u\n", arg->module->name,
-			    pref->name, *pref->varp.uint);
-			break;
-
-		case 8:
-			fprintf(arg->pf, "# An octal number.\n");
-			fprintf(arg->pf, "%s.%s: %#o\n", arg->module->name,
-			    pref->name, *pref->varp.uint);
-			break;
-
-		case 16:
-			fprintf(arg->pf, "# A hexadecimal number.\n");
-			fprintf(arg->pf, "%s.%s: %#x\n", arg->module->name,
-			    pref->name, *pref->varp.uint);
-			break;
-		}
-		break;
-
-	case PREF_BOOL:
-		fprintf(arg->pf, "# TRUE or FALSE (case-insensitive).\n");
-		fprintf(arg->pf, "%s.%s: %s\n", arg->module->name, pref->name,
-		    *pref->varp.boolp ? "TRUE" : "FALSE");
-		break;
-
-	case PREF_ENUM:
-		/*
-		 * For now, we save the "description" value, so that if we
-		 * save the preferences older versions of Ethereal can at
-		 * least read preferences that they supported; we support
-		 * either the short name or the description when reading
-		 * the preferences file or a "-o" option.
-		 */
-		fprintf(arg->pf, "# One of: ");
-		enum_valp = pref->info.enum_info.enumvals;
-		val_string = NULL;
-		while (enum_valp->name != NULL) {
-			if (enum_valp->value == *pref->varp.enump)
-				val_string = enum_valp->description;
-			fprintf(arg->pf, "%s", enum_valp->description);
-			enum_valp++;
-			if (enum_valp->name == NULL)
-				fprintf(arg->pf, "\n");
-			else
-				fprintf(arg->pf, ", ");
-		}
-		fprintf(arg->pf, "# (case-insensitive).\n");
-		fprintf(arg->pf, "%s.%s: %s\n", arg->module->name,
-		    pref->name, val_string);
-		break;
-
-	case PREF_STRING:
-		fprintf(arg->pf, "# A string.\n");
-		fprintf(arg->pf, "%s.%s: %s\n", arg->module->name, pref->name,
-		    *pref->varp.string);
-		break;
-
-	case PREF_OBSOLETE:
-		g_assert_not_reached();
-		break;
-	}
-}
-
-static void
-write_module_prefs(gpointer data, gpointer user_data)
-{
-	write_pref_arg_t arg;
-
-	arg.module = data;
-	arg.pf = user_data;
-	g_list_foreach(arg.module->prefs, write_pref, &arg);
-}
-
-/* Write out "prefs" to the user's preferences file, and return 0.
-
-   If we got an error, stuff a pointer to the path of the preferences file
-   into "*pf_path_return", and return the errno. */
-int
-write_prefs(char **pf_path_return)
-{
-  char        *pf_path;
-  FILE        *pf;
-  GList       *clp, *col_l;
-  fmt_data    *cfmt;
-
-  /* To do:
-   * - Split output lines longer than MAX_VAL_LEN
-   * - Create a function for the preference directory check/creation
-   *   so that duplication can be avoided with filter.c
-   */
-
-  pf_path = get_persconffile_path(PF_NAME, TRUE);
-  if ((pf = fopen(pf_path, "w")) == NULL) {
-    *pf_path_return = pf_path;
-    return errno;
-  }
-
-  fputs("# Configuration file for Ethereal " VERSION ".\n"
-    "#\n"
-    "# This file is regenerated each time preferences are saved within\n"
-    "# Ethereal.  Making manual changes should be safe, however.\n", pf);
-
-  fprintf (pf, "\n######## User Interface ########\n");
-  
-  fprintf(pf, "\n# Vertical scrollbars should be on right side?\n");
-  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
-  fprintf(pf, PRS_GUI_SCROLLBAR_ON_RIGHT ": %s\n",
-		  prefs.gui_scrollbar_on_right == TRUE ? "TRUE" : "FALSE");
-
-  fprintf(pf, "\n# Packet-list selection bar can be used to browse w/o selecting?\n");
-  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
-  fprintf(pf, PRS_GUI_PLIST_SEL_BROWSE ": %s\n",
-		  prefs.gui_plist_sel_browse == TRUE ? "TRUE" : "FALSE");
-
-  fprintf(pf, "\n# Protocol-tree selection bar can be used to browse w/o selecting?\n");
-  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
-  fprintf(pf, PRS_GUI_PTREE_SEL_BROWSE ": %s\n",
-		  prefs.gui_ptree_sel_browse == TRUE ? "TRUE" : "FALSE");
-
-  fprintf(pf, "\n# Alternating colors in TreeViews?\n");
-  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
-  fprintf(pf, PRS_GUI_ALTERN_COLORS ": %s\n",
-		  prefs.gui_altern_colors == TRUE ? "TRUE" : "FALSE");
-
-  fprintf(pf, "\n# Place filter toolbar inside the statusbar?\n");
-  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
-  fprintf(pf, PRS_GUI_FILTER_TOOLBAR_IN_STATUSBAR ": %s\n",
-                 prefs.filter_toolbar_show_in_statusbar == TRUE ? "TRUE" : "FALSE");
-
-  fprintf(pf, "\n# Protocol-tree line style.\n");
-  fprintf(pf, "# One of: NONE, SOLID, DOTTED, TABBED\n");
-  fprintf(pf, PRS_GUI_PTREE_LINE_STYLE ": %s\n",
-          gui_ptree_line_style_text[prefs.gui_ptree_line_style]);
-
-  fprintf(pf, "\n# Protocol-tree expander style.\n");
-  fprintf(pf, "# One of: NONE, SQUARE, TRIANGLE, CIRCULAR\n");
-  fprintf(pf, PRS_GUI_PTREE_EXPANDER_STYLE ": %s\n",
-		  gui_ptree_expander_style_text[prefs.gui_ptree_expander_style]);
-
-  fprintf(pf, "\n# Hex dump highlight style.\n");
-  fprintf(pf, "# One of: BOLD, INVERSE\n");
-  fprintf(pf, PRS_GUI_HEX_DUMP_HIGHLIGHT_STYLE ": %s\n",
-		  gui_hex_dump_highlight_style_text[prefs.gui_hex_dump_highlight_style]);
-
-  fprintf(pf, "\n# Main Toolbar style.\n");
-  fprintf(pf, "# One of: ICONS, TEXT, BOTH\n");
-  fprintf(pf, PRS_GUI_TOOLBAR_MAIN_STYLE ": %s\n",
-		  gui_toolbar_style_text[prefs.gui_toolbar_main_style]);
-
-  fprintf(pf, "\n# Save window position at exit?\n");
-  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
-  fprintf(pf, PRS_GUI_GEOMETRY_SAVE_POSITION ": %s\n",
-		  prefs.gui_geometry_save_position == TRUE ? "TRUE" : "FALSE");
-
-  fprintf(pf, "\n# Save window size at exit?\n");
-  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
-  fprintf(pf, PRS_GUI_GEOMETRY_SAVE_SIZE ": %s\n",
-		  prefs.gui_geometry_save_size == TRUE ? "TRUE" : "FALSE");
-                  
-  fprintf(pf, "\n# Save window maximized state at exit (GTK2 only)?\n");
-  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
-  fprintf(pf, PRS_GUI_GEOMETRY_SAVE_MAXIMIZED ": %s\n",
-		  prefs.gui_geometry_save_maximized == TRUE ? "TRUE" : "FALSE");
-                  
-  fprintf(pf, "\n# Open a console window (WIN32 only)?\n");
-  fprintf(pf, "# One of: NEVER, AUTOMATIC, ALWAYS\n");
-  fprintf(pf, PRS_GUI_CONSOLE_OPEN ": %s\n",
-		  gui_console_open_text[prefs.gui_console_open]);
-
-  fprintf(pf, "\n# Where to start the File Open dialog box.\n");
-  fprintf(pf, "# One of: LAST_OPENED, SPECIFIED\n");
-  fprintf(pf, PRS_GUI_FILEOPEN_STYLE ": %s\n",
-		  gui_fileopen_style_text[prefs.gui_fileopen_style]);
-
-  fprintf(pf, PRS_GUI_RECENT_COUNT_MAX ": %d\n",
-	          prefs.gui_recent_files_count_max);
-
-  if (prefs.gui_fileopen_dir != NULL) {
-    fprintf(pf, "\n# Directory to start in when opening File Open dialog.\n");
-    fprintf(pf, PRS_GUI_FILEOPEN_DIR ": %s\n",
-                  prefs.gui_fileopen_dir);
-  }
-                  
-  fprintf(pf, "\n# Ask to save unsaved capture files?\n");
-  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
-  fprintf(pf, PRS_GUI_ASK_UNSAVED ": %s\n",
-		  prefs.gui_ask_unsaved == TRUE ? "TRUE" : "FALSE");                  
-
-  fprintf(pf, "\n# The path to the webbrowser.\n");
-  fprintf(pf, "# Ex: mozilla %%s\n");
-  fprintf(pf, PRS_GUI_WEBBROWSER ": %s\n", prefs.gui_webbrowser);
-
-  fprintf (pf, "\n######## User Interface: Layout ########\n");
-
-  fprintf(pf, "\n# Layout type (1-6).\n");
-  fprintf(pf, PRS_GUI_LAYOUT_TYPE ": %d\n",
-	          prefs.gui_layout_type);
-
-  fprintf(pf, "\n# Layout content of the panes (1-3).\n");
-  fprintf(pf, "# One of: NONE, PLIST, PDETAILS, PBYTES\n");
-  fprintf(pf, PRS_GUI_LAYOUT_CONTENT_1 ": %s\n",
-	          gui_layout_content_text[prefs.gui_layout_content_1]);
-  fprintf(pf, PRS_GUI_LAYOUT_CONTENT_2 ": %s\n",
-	          gui_layout_content_text[prefs.gui_layout_content_2]);
-  fprintf(pf, PRS_GUI_LAYOUT_CONTENT_3 ": %s\n",
-	          gui_layout_content_text[prefs.gui_layout_content_3]);
-
-  fprintf (pf, "\n######## User Interface: Columns ########\n");
-  
-  clp = prefs.col_list;
-  col_l = NULL;
-  while (clp) {
-    cfmt = (fmt_data *) clp->data;
-    col_l = g_list_append(col_l, cfmt->title);
-    col_l = g_list_append(col_l, cfmt->fmt);
-    clp = clp->next;
-  }
-  fprintf (pf, "\n# Packet list column format.\n");
-  fprintf (pf, "# Each pair of strings consists of a column title and its format.\n");
-  fprintf (pf, "%s: %s\n", PRS_COL_FMT, put_string_list(col_l));
-  /* This frees the list of strings, but not the strings to which it
-     refers; that's what we want, as we haven't copied those strings,
-     we just referred to them.  */
-  g_list_free(col_l);
-
-  fprintf (pf, "\n######## User Interface: Font ########\n");
-
-  fprintf(pf, "\n# Font name for packet list, protocol tree, and hex dump panes (GTK version 1).\n");
-  fprintf(pf, PRS_GUI_FONT_NAME_1 ": %s\n", prefs.gui_font_name1);
-
-  fprintf(pf, "\n# Font name for packet list, protocol tree, and hex dump panes (GTK version 2).\n");
-  fprintf(pf, PRS_GUI_FONT_NAME_2 ": %s\n", prefs.gui_font_name2);
-
-  fprintf (pf, "\n######## User Interface: Colors ########\n");
-
-  fprintf (pf, "\n# Color preferences for a marked frame.\n");
-  fprintf (pf, "# Each value is a six digit hexadecimal color value in the form rrggbb.\n");
-  fprintf (pf, "%s: %02x%02x%02x\n", PRS_GUI_MARKED_FG,
-    (prefs.gui_marked_fg.red * 255 / 65535),
-    (prefs.gui_marked_fg.green * 255 / 65535),
-    (prefs.gui_marked_fg.blue * 255 / 65535));
-  fprintf (pf, "%s: %02x%02x%02x\n", PRS_GUI_MARKED_BG,
-    (prefs.gui_marked_bg.red * 255 / 65535),
-    (prefs.gui_marked_bg.green * 255 / 65535),
-    (prefs.gui_marked_bg.blue * 255 / 65535));
-
-  fprintf (pf, "\n# TCP stream window color preferences.\n");
-  fprintf (pf, "# Each value is a six digit hexadecimal color value in the form rrggbb.\n");
-  fprintf (pf, "%s: %02x%02x%02x\n", PRS_STREAM_CL_FG,
-    (prefs.st_client_fg.red * 255 / 65535),
-    (prefs.st_client_fg.green * 255 / 65535),
-    (prefs.st_client_fg.blue * 255 / 65535));
-  fprintf (pf, "%s: %02x%02x%02x\n", PRS_STREAM_CL_BG,
-    (prefs.st_client_bg.red * 255 / 65535),
-    (prefs.st_client_bg.green * 255 / 65535),
-    (prefs.st_client_bg.blue * 255 / 65535));
-  fprintf (pf, "%s: %02x%02x%02x\n", PRS_STREAM_SR_FG,
-    (prefs.st_server_fg.red * 255 / 65535),
-    (prefs.st_server_fg.green * 255 / 65535),
-    (prefs.st_server_fg.blue * 255 / 65535));
-  fprintf (pf, "%s: %02x%02x%02x\n", PRS_STREAM_SR_BG,
-    (prefs.st_server_bg.red * 255 / 65535),
-    (prefs.st_server_bg.green * 255 / 65535),
-    (prefs.st_server_bg.blue * 255 / 65535));
-
-  fprintf(pf, "\n####### Capture ########\n");
-  
-  if (prefs.capture_device != NULL) {
-    fprintf(pf, "\n# Default capture device\n");
-    fprintf(pf, PRS_CAP_DEVICE ": %s\n", prefs.capture_device);
-  }
-
-  if (prefs.capture_devices_descr != NULL) {
-    fprintf(pf, "\n# Interface descriptions.\n");
-    fprintf(pf, "# Ex: eth0(eth0 descr),eth1(eth1 descr),...\n");
-    fprintf(pf, PRS_CAP_DEVICES_DESCR ": %s\n", prefs.capture_devices_descr);
-  }
-
-  if (prefs.capture_devices_hide != NULL) {
-    fprintf(pf, "\n# Hide interface?\n");
-    fprintf(pf, "# Ex: eth0,eth3,...\n");
-    fprintf(pf, PRS_CAP_DEVICES_HIDE ": %s\n", prefs.capture_devices_hide);
-  }
-
-  fprintf(pf, "\n# Capture in promiscuous mode?\n");
-  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
-  fprintf(pf, PRS_CAP_PROM_MODE ": %s\n",
-		  prefs.capture_prom_mode == TRUE ? "TRUE" : "FALSE");
-
-  fprintf(pf, "\n# Update packet list in real time during capture?\n");
-  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
-  fprintf(pf, PRS_CAP_REAL_TIME ": %s\n",
-		  prefs.capture_real_time == TRUE ? "TRUE" : "FALSE");
-
-  fprintf(pf, "\n# Scroll packet list during capture?\n");
-  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
-  fprintf(pf, PRS_CAP_AUTO_SCROLL ": %s\n",
-		  prefs.capture_auto_scroll == TRUE ? "TRUE" : "FALSE");
-
-  fprintf(pf, "\n# Show capture info dialog while capturing?\n");
-  fprintf(pf, "# TRUE or FALSE (case-insensitive).\n");
-  fprintf(pf, PRS_CAP_SHOW_INFO ": %s\n",
-		  prefs.capture_show_info == TRUE ? "TRUE" : "FALSE");
-
-  fprintf (pf, "\n######## Printing ########\n");
-
-  fprintf (pf, "\n# Can be one of \"text\" or \"postscript\".\n"
-    "print.format: %s\n", pr_formats[prefs.pr_format]);
-
-  fprintf (pf, "\n# Can be one of \"command\" or \"file\".\n"
-    "print.destination: %s\n", pr_dests[prefs.pr_dest]);
-
-  fprintf (pf, "\n# This is the file that gets written to when the "
-    "destination is set to \"file\"\n"
-    "%s: %s\n", PRS_PRINT_FILE, prefs.pr_file);
-
-  fprintf (pf, "\n# Output gets piped to this command when the destination "
-    "is set to \"command\"\n"
-    "%s: %s\n", PRS_PRINT_CMD, prefs.pr_cmd);
-
-  fprintf(pf, "\n####### Name Resolution ########\n");
-  
-  fprintf(pf, "\n# Resolve addresses to names?\n");
-  fprintf(pf, "# TRUE or FALSE (case-insensitive), or a list of address types to resolve.\n");
-  fprintf(pf, PRS_NAME_RESOLVE ": %s\n",
-		  name_resolve_to_string(prefs.name_resolve));
-
-  fprintf(pf, "\n# Name resolution concurrency.\n");
-  fprintf(pf, "# A decimal number.\n");
-  fprintf(pf, PRS_NAME_RESOLVE_CONCURRENCY ": %d\n",
-		  prefs.name_resolve_concurrency);
-
-  fprintf(pf, "\n####### Protocols ########\n");
-
-  g_list_foreach(modules, write_module_prefs, pf);
-
-  fclose(pf);
-
-  /* XXX - catch I/O errors (e.g. "ran out of disk space") and return
-     an error indication, or maybe write to a new preferences file and
-     rename that file on top of the old one only if there are not I/O
-     errors. */
-  return 0;
-}
-
-/* Copy a set of preferences. */
-void
-copy_prefs(e_prefs *dest, e_prefs *src)
-{
-  fmt_data *src_cfmt, *dest_cfmt;
-  GList *entry;
-
-  dest->pr_format = src->pr_format;
-  dest->pr_dest = src->pr_dest;
-  dest->pr_file = g_strdup(src->pr_file);
-  dest->pr_cmd = g_strdup(src->pr_cmd);
-  dest->col_list = NULL;
-  for (entry = src->col_list; entry != NULL; entry = g_list_next(entry)) {
-    src_cfmt = entry->data;
-    dest_cfmt = (fmt_data *) g_malloc(sizeof(fmt_data));
-    dest_cfmt->title = g_strdup(src_cfmt->title);
-    dest_cfmt->fmt = g_strdup(src_cfmt->fmt);
-    dest->col_list = g_list_append(dest->col_list, dest_cfmt);
-  }
-  dest->num_cols = src->num_cols;
-  dest->st_client_fg = src->st_client_fg;
-  dest->st_client_bg = src->st_client_bg;
-  dest->st_server_fg = src->st_server_fg;
-  dest->st_server_bg = src->st_server_bg;
-  dest->gui_scrollbar_on_right = src->gui_scrollbar_on_right;
-  dest->gui_plist_sel_browse = src->gui_plist_sel_browse;
-  dest->gui_ptree_sel_browse = src->gui_ptree_sel_browse;
-  dest->gui_altern_colors = src->gui_altern_colors;
-  dest->filter_toolbar_show_in_statusbar = src->filter_toolbar_show_in_statusbar;
-  dest->gui_ptree_line_style = src->gui_ptree_line_style;
-  dest->gui_ptree_expander_style = src->gui_ptree_expander_style;
-  dest->gui_hex_dump_highlight_style = src->gui_hex_dump_highlight_style;
-  dest->gui_toolbar_main_style = src->gui_toolbar_main_style;
-  dest->gui_fileopen_dir = g_strdup(src->gui_fileopen_dir);
-  dest->gui_console_open = src->gui_console_open;
-  dest->gui_fileopen_style = src->gui_fileopen_style;
-  dest->gui_ask_unsaved = src->gui_ask_unsaved;
-  dest->gui_layout_type = src->gui_layout_type;
-  dest->gui_layout_content_1 = src->gui_layout_content_1;
-  dest->gui_layout_content_2 = src->gui_layout_content_2;
-  dest->gui_layout_content_3 = src->gui_layout_content_3;
-  dest->gui_font_name1 = g_strdup(src->gui_font_name1);
-  dest->gui_font_name2 = g_strdup(src->gui_font_name2);
-  dest->gui_marked_fg = src->gui_marked_fg;
-  dest->gui_marked_bg = src->gui_marked_bg;
-  dest->gui_geometry_save_position = src->gui_geometry_save_position;
-  dest->gui_geometry_save_size = src->gui_geometry_save_size;
-  dest->gui_geometry_save_maximized = src->gui_geometry_save_maximized;
-  dest->gui_webbrowser = g_strdup(src->gui_webbrowser);
-/*  values for the capture dialog box */
-  dest->capture_device = g_strdup(src->capture_device);
-  dest->capture_devices_descr = g_strdup(src->capture_devices_descr);
-  dest->capture_devices_hide = g_strdup(src->capture_devices_hide);
-  dest->capture_prom_mode = src->capture_prom_mode;
-  dest->capture_real_time = src->capture_real_time;
-  dest->capture_auto_scroll = src->capture_auto_scroll;
-  dest->capture_show_info = src->capture_show_info;
-  dest->name_resolve = src->name_resolve;
-  dest->name_resolve_concurrency = src->name_resolve_concurrency;
-
-}
-
-/* Free a set of preferences. */
-void
-free_prefs(e_prefs *pr)
-{
-  if (pr->pr_file != NULL) {
-    g_free(pr->pr_file);
-    pr->pr_file = NULL;
-  }
-  if (pr->pr_cmd != NULL) {
-    g_free(pr->pr_cmd);
-    pr->pr_cmd = NULL;
-  }
-  free_col_info(pr);
-  if (pr->gui_font_name1 != NULL) {
-    g_free(pr->gui_font_name1);
-    pr->gui_font_name1 = NULL;
-  }
-  if (pr->gui_font_name2 != NULL) {
-    g_free(pr->gui_font_name2);
-    pr->gui_font_name2 = NULL;
-  }
-  if (pr->gui_fileopen_dir != NULL) {
-    g_free(pr->gui_fileopen_dir);
-    pr->gui_fileopen_dir = NULL;
-  }
-  g_free(pr->gui_webbrowser);
-  pr->gui_webbrowser = NULL;
-  if (pr->capture_device != NULL) {
-    g_free(pr->capture_device);
-    pr->capture_device = NULL;
-  }
-  if (pr->capture_devices_descr != NULL) {
-    g_free(pr->capture_devices_descr);
-    pr->capture_devices_descr = NULL;
-  }
-  if (pr->capture_devices_hide != NULL) {
-    g_free(pr->capture_devices_hide);
-    pr->capture_devices_hide = NULL;
-  }
-}
-
-static void
-free_col_info(e_prefs *pr)
-{
-  fmt_data *cfmt;
-
-  while (pr->col_list != NULL) {
-    cfmt = pr->col_list->data;
-    g_free(cfmt->title);
-    g_free(cfmt->fmt);
-    g_free(cfmt);
-    pr->col_list = g_list_remove_link(pr->col_list, pr->col_list);
-  }
-  g_list_free(pr->col_list);
-  pr->col_list = NULL;
-}
diff -urN ethereal-0.10.6/prefs.h ethereal-0.10.7/prefs.h
--- ethereal-0.10.6/prefs.h	2004-08-12 17:41:38.000000000 -0500
+++ ethereal-0.10.7/prefs.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,341 +0,0 @@
-/* prefs.h
- * Definitions for preference handling routines
- *
- * $Id: prefs.h 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifndef __PREFS_H__
-#define __PREFS_H__
-
-#include <glib.h>
-
-#include "color.h"
-
-#define PR_DEST_CMD  0
-#define PR_DEST_FILE 1
-
-#define DEF_WIDTH 750
-#define DEF_HEIGHT 550
-
-#define MAX_VAL_LEN  1024
-
-/* only GTK1 *or* GTK2 font_name should be used */
-#if GTK_MAJOR_VERSION < 2
-#define PREFS_GUI_FONT_NAME gui_font_name1
-#else
-#define PREFS_GUI_FONT_NAME gui_font_name2
-#endif
-
-/*
- * Convert a string listing name resolution types to a bitmask of
- * those types.
- *
- * Set "*name_resolve" to the bitmask, and return '\0', on success;
- * return the bad character in the string on error.
- */
-char string_to_name_resolve(char *string, guint32 *name_resolve);
-
-/*
- * Modes for the starting directory in File Open dialogs.
- */
-#define FO_STYLE_LAST_OPENED	0	/* start in last directory we looked at */
-#define FO_STYLE_SPECIFIED	1	/* start in specified directory */
-
-/*
- * Toolbar styles.
- */
-#define TB_STYLE_ICONS		0
-#define TB_STYLE_TEXT		1
-#define TB_STYLE_BOTH		2
-
-/*
- * Types of layout of summary/details/hex panes.
- */
-typedef enum {
-    layout_unused,  /* entry currently unused */
-    layout_type_5,
-    layout_type_2,
-    layout_type_1,
-    layout_type_4,
-    layout_type_3,
-    layout_type_6,
-    layout_type_max
-} layout_type_e;
-
-/*
- * Types of pane.
- */
-typedef enum {
-    layout_pane_content_none,
-    layout_pane_content_plist,
-    layout_pane_content_pdetails,
-    layout_pane_content_pbytes
-} layout_pane_content_e;
-
-/*
- * open console behaviour (win32 only)
- */
-typedef enum {
-    console_open_never,
-    console_open_auto,
-    console_open_always
-} console_open_e;
-
-
-typedef struct _e_prefs {
-  gint     pr_format;
-  gint     pr_dest;
-  gchar   *pr_file;
-  gchar   *pr_cmd;
-  GList   *col_list;
-  gint     num_cols;
-  color_t  st_client_fg, st_client_bg, st_server_fg, st_server_bg;
-  gboolean gui_scrollbar_on_right;
-  gboolean gui_plist_sel_browse;
-  gboolean gui_ptree_sel_browse;
-  gboolean gui_altern_colors;
-  gboolean filter_toolbar_show_in_statusbar;
-  gint     gui_ptree_line_style;
-  gint     gui_ptree_expander_style;
-  gboolean gui_hex_dump_highlight_style;
-  gint     gui_toolbar_main_style;
-  gchar   *gui_font_name1;
-  gchar   *gui_font_name2;
-  color_t  gui_marked_fg;
-  color_t  gui_marked_bg;
-  gboolean gui_geometry_save_position;
-  gboolean gui_geometry_save_size;
-  gboolean gui_geometry_save_maximized;
-  console_open_e gui_console_open;
-  guint    gui_fileopen_style;
-  guint    gui_recent_files_count_max;
-  gchar	   *gui_fileopen_dir;
-  gboolean gui_ask_unsaved;
-  gchar   *gui_webbrowser;
-  layout_type_e gui_layout_type;
-  layout_pane_content_e gui_layout_content_1;
-  layout_pane_content_e gui_layout_content_2;
-  layout_pane_content_e gui_layout_content_3;
-  guint32  name_resolve;
-  gint     name_resolve_concurrency;
-  gchar   *capture_device;
-  gchar   *capture_devices_descr;
-  gchar   *capture_devices_hide;
-  gboolean capture_prom_mode;
-  gboolean capture_real_time;
-  gboolean capture_auto_scroll;
-  gboolean capture_show_info;
-} e_prefs;
-
-ETH_VAR_IMPORT e_prefs prefs;
-
-/*
- * Routines to let modules that have preference settings register
- * themselves by name, and to let them register preference settings
- * by name.
- */
-struct pref_module;
-
-typedef struct pref_module module_t;
-
-/*
- * Register a module that will have preferences.
- * Specify the module under which to register it or NULL to register it
- * at the top level, the name used for the module in the preferences file,
- * the title used in the tab for it in a preferences dialog box, and a
- * routine to call back when we apply the preferences.
- *
- * This should not be used for dissector preferences;
- * "prefs_register_protocol()" should be used for that, so that the
- * preferences go under the "Protocols" subtree, and so that the
- * name is the protocol name specified at the "proto_register_protocol()"
- * call so that the "Protocol Properties..." menu item works.
- */
-extern module_t *prefs_register_module(module_t *parent, const char *name,
-    const char *title, void (*apply_cb)(void));
-
-/*
- * Register a subtree that will have modules under it.
- * Specify the module under which to register it or NULL to register it
- * at the top level and the title used in the tab for it in a preferences
- * dialog box.
- */
-extern module_t *prefs_register_subtree(module_t *parent, const char *title);
-
-/*
- * Register that a protocol has preferences.
- */
-extern module_t *prefs_register_protocol(int id, void (*apply_cb)(void));
-
-/*
- * Register that a protocol used to have preferences but no longer does,
- * by creating an "obsolete" module for it.
- */
-extern module_t *prefs_register_protocol_obsolete(int id);
-
-/*
- * Callback function for module list scanners.
- */
-typedef void (*module_cb)(module_t *module, gpointer user_data);
-
-/*
- * Call a callback function, with a specified argument, for each module
- * in a list of modules.  If the list is NULL, searches the top-level
- * list in the display tree of modules.
- *
- * Ignores "obsolete" modules; their sole purpose is to allow old
- * preferences for dissectors that no longer have preferences to be
- * silently ignored in preference files.  Does not ignore subtrees,
- * as this can be used when walking the display tree of modules.
- */
-extern void prefs_module_list_foreach(GList *module_list, module_cb callback,
-    gpointer user_data);
-
-/*
- * Call a callback function, with a specified argument, for each module
- * in the list of all modules.  (This list does not include subtrees.)
- *
- * Ignores "obsolete" modules; their sole purpose is to allow old
- * preferences for dissectors that no longer have preferences to be
- * silently ignored in preference files.
- */
-extern void prefs_modules_foreach(module_cb callback, gpointer user_data);
-
-/*
- * Call the "apply" callback function for each module if any of its
- * preferences have changed, and then clear the flag saying its
- * preferences have changed, as the module has been notified of that
- * fact.
- */
-extern void prefs_apply_all(void);
-
-struct preference;
-
-typedef struct preference pref_t;
-
-/*
- * Returns TRUE if the given protocol has registered preferences.
- */
-extern gboolean prefs_is_registered_protocol(char *name);
-
-/*
- * Returns the module title of a registered protocol (or NULL if unknown).
- */
-extern const char *prefs_get_title_by_name(char *name);
-
-/*
- * Register a preference with an unsigned integral value.
- */
-extern void prefs_register_uint_preference(module_t *module, const char *name,
-    const char *title, const char *description, guint base, guint *var);
-
-/*
- * Register a preference with an Boolean value.
- */
-extern void prefs_register_bool_preference(module_t *module, const char *name,
-    const char *title, const char *description, gboolean *var);
-
-/*
- * Register a preference with an enumerated value.
- */
-typedef struct {
-	char	*name;
-	char	*description;
-	gint	value;
-} enum_val_t;
-
-extern void prefs_register_enum_preference(module_t *module, const char *name,
-    const char *title, const char *description, gint *var,
-    const enum_val_t *enumvals, gboolean radio_buttons);
-
-/*
- * Register a preference with a character-string value.
- */
-extern void prefs_register_string_preference(module_t *module, const char *name,
-    const char *title, const char *description, char **var);
-
-/*
- * Register a preference that used to be supported but no longer is.
- */
-extern void prefs_register_obsolete_preference(module_t *module,
-    const char *name);
-
-typedef guint (*pref_cb)(pref_t *pref, gpointer user_data);
-
-/*
- * Call a callback function, with a specified argument, for each preference
- * in a given module.
- *
- * If any of the callbacks return a non-zero value, stop and return that
- * value, otherwise return 0.
- */
-extern guint prefs_pref_foreach(module_t *module, pref_cb callback,
-    gpointer user_data);
-
-/*
- * Register all non-dissector modules' preferences.
- */
-extern void prefs_register_modules(void);
-
-/* Read the preferences file, fill in "prefs", and return a pointer to it.
-
-   If we got an error (other than "it doesn't exist") trying to read
-   the global preferences file, stuff the errno into "*gpf_errno_return"
-   on an open error and into "*gpf_read_errno_return" on a read error,
-   stuff a pointer to the path of the file into "*gpf_path_return", and
-   return NULL.
-
-   If we got an error (other than "it doesn't exist") trying to read
-   the user's preferences file, stuff the errno into "*pf_errno_return"
-   on an open error and into "*pf_read_errno_return" on a read error,
-   stuff a pointer to the path of the file into "*pf_path_return", and
-   return NULL. */
-extern e_prefs *read_prefs(int *, int *, char **, int *, int *, char **);
-
-/* Write out "prefs" to the user's preferences file, and return 0.
-
-   If we got an error, stuff a pointer to the path of the preferences file
-   into "*pf_path_return", and return the errno. */
-extern int write_prefs(char **);
-
-/* Copy a set of preferences. */
-extern void copy_prefs(e_prefs *dest, e_prefs *src);
-
-/* Free a set of preferences. */
-extern void free_prefs(e_prefs *pr);
-
-/*
- * Given a string of the form "<pref name>:<pref value>", as might appear
- * as an argument to a "-o" option, parse it and set the preference in
- * question.  Return an indication of whether it succeeded or failed
- * in some fashion.
- *
- * XXX - should supply, for syntax errors, a detailed explanation of
- * the syntax error.
- */
-#define PREFS_SET_OK		0	/* succeeded */
-#define PREFS_SET_SYNTAX_ERR	1	/* syntax error in string */
-#define PREFS_SET_NO_SUCH_PREF	2	/* no such preference */
-#define PREFS_SET_OBSOLETE	3	/* preference used to exist but no longer does */
-
-extern int prefs_set_pref(char *prefarg);
-
-#endif /* prefs.h */
diff -urN ethereal-0.10.6/print.c ethereal-0.10.7/print.c
--- ethereal-0.10.6/print.c	2004-08-12 17:41:40.000000000 -0500
+++ ethereal-0.10.7/print.c	2004-10-20 17:34:27.000000000 -0500
@@ -1,7 +1,7 @@
 /* print.c
  * Routines for printing packet analysis trees.
  *
- * $Id: print.c 11559 2004-07-29 00:11:14Z obiot $
+ * $Id: print.c 11958 2004-09-10 22:59:37Z guy $
  *
  * Gilbert Ramirez <gram@alumni.rice.edu>
  *
@@ -40,10 +40,10 @@
 #include <epan/tvbuff.h>
 #include <epan/packet.h>
 
-#include "range.h"
+#include "packet-range.h"
 #include "print.h"
 #include "ps.h"
-#include "util.h"
+#include <epan/charsets.h>
 #include <epan/dissectors/packet-data.h>
 #include <epan/dissectors/packet-frame.h>
 
diff -urN ethereal-0.10.6/print.h ethereal-0.10.7/print.h
--- ethereal-0.10.6/print.h	2004-08-12 17:41:41.000000000 -0500
+++ ethereal-0.10.7/print.h	2004-10-20 17:34:28.000000000 -0500
@@ -1,7 +1,7 @@
 /* print.h
  * Definitions for printing packet analysis trees.
  *
- * $Id: print.h 11544 2004-07-27 20:10:02Z guy $
+ * $Id: print.h 11898 2004-09-04 20:02:11Z guy $
  *
  * Gilbert Ramirez <gram@alumni.rice.edu>
  *
@@ -29,6 +29,8 @@
 
 #include <epan/packet.h>
 
+#include "packet-range.h"
+
 /*
  * Print stream code; this provides a "print stream" class with subclasses
  * of various sorts.  Additional subclasses might be implemented elsewhere.
diff -urN ethereal-0.10.6/range.c ethereal-0.10.7/range.c
--- ethereal-0.10.6/range.c	2004-08-12 17:41:39.000000000 -0500
+++ ethereal-0.10.7/range.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,459 +0,0 @@
-/* range.c
- * Packet range routines (save, print, ...)
- *
- * $Id: range.c 11400 2004-07-18 00:24:25Z guy $
- *
- * Dick Gooris <gooris@lucent.com>
- * Ulf Lamping <ulf.lamping@web.de>
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <ctype.h>
-
-#include <glib.h>
-
-#include <epan/frame_data.h>
-
-
-#include "range.h"
-
-#include "globals.h"
-
-
-static gboolean packet_is_in_range(packet_range_t *range, guint32 val);
-
-
-/* (re-)calculate the packet counts (except the user specified range) */
-void packet_range_calc(packet_range_t *range) {
-  guint32       current_count;
-  guint32       mark_low;
-  guint32       mark_high;
-  guint32       displayed_mark_low;
-  guint32       displayed_mark_high;
-  frame_data    *packet;
-
-
-  range->selected_packet        = 0L;
-
-  mark_low                      = 0L;
-  mark_high                     = 0L;
-  range->mark_range_cnt         = 0L;
-
-  displayed_mark_low            = 0L;
-  displayed_mark_high           = 0L;
-  range->displayed_cnt          = 0L;
-  range->displayed_marked_cnt   = 0L;
-  range->displayed_mark_range_cnt=0L;
-
-  /* The next for-loop is used to obtain the amount of packets to be processed
-   * and is used to present the information in the Save/Print As widget.
-   * We have different types of ranges: All the packets, the number
-   * of packets of a marked range, a single packet, and a user specified 
-   * packet range. The last one is not calculated here since this
-   * data must be entered in the widget by the user.
-   */
-
-  current_count = 0;
-  for(packet = cfile.plist; packet != NULL; packet = packet->next) {
-      current_count++;
-      if (cfile.current_frame == packet) {
-          range->selected_packet = current_count;
-      }
-      if (packet->flags.passed_dfilter) {
-          range->displayed_cnt++;
-      }
-      if (packet->flags.marked) {
-            if (packet->flags.passed_dfilter) {
-                range->displayed_marked_cnt++;
-                if (displayed_mark_low == 0) {
-                   displayed_mark_low = current_count;
-                }
-                if (current_count > displayed_mark_high) {
-                   displayed_mark_high = current_count;
-                }
-            }
-
-            if (mark_low == 0) {
-               mark_low = current_count;
-            }
-            if (current_count > mark_high) {
-               mark_high = current_count;
-            }
-      }
-  }
-        
-  current_count = 0;
-  for(packet = cfile.plist; packet != NULL; packet = packet->next) {
-      current_count++;
-
-      if (current_count >= mark_low && 
-          current_count <= mark_high)
-      {
-          range->mark_range_cnt++;
-      }
-
-      if (current_count >= displayed_mark_low && 
-          current_count <= displayed_mark_high)
-      {
-          if (packet->flags.passed_dfilter) {
-            range->displayed_mark_range_cnt++;
-          }
-      }
-  }
-
-  /* in case we marked just one packet, we add 1. */
-  /*if (cfile.marked_count != 0) {
-    range->mark_range = mark_high - mark_low + 1;
-  }*/
-        
-  /* in case we marked just one packet, we add 1. */
-  /*if (range->displayed_marked_cnt != 0) {
-    range->displayed_mark_range = displayed_mark_high - displayed_mark_low + 1;
-  }*/
-}
-
-
-/* (re-)calculate the user specified packet range counts */
-void packet_range_calc_user(packet_range_t *range) {
-  guint32       current_count;
-  frame_data    *packet;
-
-  range->user_range_cnt             = 0L;
-  range->displayed_user_range_cnt   = 0L;
-
-  current_count = 0;
-  for(packet = cfile.plist; packet != NULL; packet = packet->next) {
-      current_count++;
-
-      if (packet_is_in_range(range, current_count)) {
-          range->user_range_cnt++;
-          if (packet->flags.passed_dfilter) {
-            range->displayed_user_range_cnt++;
-          }
-      }
-  }
-}
-
-
-/* init the range struct */
-void packet_range_init(packet_range_t *range) {
-
-  range->process            = range_process_all;
-  range->process_filtered   = FALSE;
-  range->nranges            = 0;
-  range->ranges[range->nranges].low  = 0L;
-  range->ranges[range->nranges].high = 0L;
-
-  /* calculate all packet range counters */
-  packet_range_calc(range);
-  packet_range_calc_user(range);
-}
-
-/* init the processing run */
-void packet_range_process_init(packet_range_t *range) {
-  /* "enumeration" values */
-  range->marked_range_active    = FALSE;
-  range->selected_done          = FALSE;
-
-  if (range->process_filtered == FALSE) {
-    range->marked_range_left = range->mark_range_cnt;
-  } else {
-    range->marked_range_left = range->displayed_mark_range_cnt;
-  }
-}
-
-/* do we have to process all packets? */
-gboolean packet_range_process_all(packet_range_t *range) {
-    return range->process == range_process_all && !range->process_filtered;
-}
-
-/* do we have to process this packet? */
-range_process_e packet_range_process_packet(packet_range_t *range, frame_data *fdata) {
-
-    switch(range->process) {
-    case(range_process_all):
-        break;
-    case(range_process_selected):
-        if (range->selected_done) {
-          return range_processing_finished;
-        }
-        if (fdata->num != cfile.current_frame->num) {
-          return range_process_next;
-        }
-        range->selected_done = TRUE;
-        break;
-    case(range_process_marked):
-        if (fdata->flags.marked == FALSE) {
-          return range_process_next;
-        }
-        break;
-    case(range_process_marked_range):
-        if (range->marked_range_left == 0) {
-          return range_processing_finished;
-        }
-        if (fdata->flags.marked == TRUE) {
-          range->marked_range_active = TRUE;
-        }
-        if (range->marked_range_active == FALSE ) {
-          return range_process_next;
-        }
-        if (!range->process_filtered ||
-          (range->process_filtered && fdata->flags.passed_dfilter == TRUE))
-        {
-          range->marked_range_left--;
-        }
-        break;
-    case(range_process_user_range):
-        if (packet_is_in_range(range, fdata->num) == FALSE) {
-          return range_process_next;
-        }
-        break;
-    default:
-        g_assert_not_reached();
-    }
-
-    /* this packet has to pass the display filter but didn't? -> try next */
-    if (range->process_filtered && fdata->flags.passed_dfilter == FALSE) {
-        return range_process_next;
-    }
-
-    /* We fell through the conditions above, so we accept this packet */
-    return range_process_this;
-}
-
-
-/******************** Range Entry Parser *********************************/
-
-/* Converts a range string to a fast comparable array of ranges.
- * The parameter 'es' points to the string to be converted, and is defined in
- * the Save/Print-As widget.
- *
- * This function fills the array ranges containing low and high values indexed 
- * by a global variable nranges. After having called this function, the function 
- * packet_is_in_range() determines whether a given (packet) number is within 
- * the range or not. 
- *
- * In case of a single packet number, we make a range where low is equal to high. 
- * We strip any characters other than commas, digits, or hyphens. We take care 
- * on wrongly entered ranges; opposite order will be taken care of.
- * 
- * The following syntax is accepted :
- *
- *   1-20,30-40     Range from 1 to 20, and packets 30 to 40
- *   -20,30         Range from 1 to 20, and packet 30
- *   20,30,40-      Packet number 20, 30, and the range from 40 to the end
- *   20-10,30-25    Range from 10 to 20, and from 25 to 30
- *   -              All packets
- */
-
-void packet_range_convert_str(packet_range_t *range, const gchar *es)
-{
-    gchar     EntryStr[255], OrgStr[255], value[255], p;
-    guint     i, j=0;
-    guint32   tmp, val;
-    gboolean  hyphenseen;
-
-    /* Reset the number of ranges we are going to find */
-    range->nranges = 0;
-    range->ranges[range->nranges].low  = 0L;
-    range->ranges[range->nranges].high = 0L;
-
-    /* Make a copy of the string, and check the validity of the input */
-    strcpy(OrgStr,es);
-    if (strlen(OrgStr) == 0 ) {
-        return;
-    }
-
-    /* Only keep digits, commas, and hyphens. */
-    for (i=0; i<=strlen(OrgStr); i++) {
-      if ( isdigit((guchar)OrgStr[i]) || OrgStr[i] == '-' || OrgStr[i] == ',' ) {
-         EntryStr[j++] = OrgStr[i];
-      }
-    }
-    EntryStr[j] = '\0';
-
-    /* Remove any starting commas */
-    strcpy(OrgStr,EntryStr);
-    i = 0;
-    while (OrgStr[i] == ',') {
-       i++;
-    }
-    strcpy(EntryStr,OrgStr+i);
-
-    /* Remove any double commas */
-    strcpy(OrgStr,EntryStr);
-    p = ',';
-    j = 0;
-    for (i=0; i<=strlen(OrgStr); i++) {
-      if ( OrgStr[i] != ',' || p != ',') {
-         EntryStr[j++] = OrgStr[i];
-      }
-      p = OrgStr[i];
-    }
-    EntryStr[j] = '\0';
-
-    /* Remove any double hyphens */
-    strcpy(OrgStr,EntryStr);
-    p = '-';
-    j = 0;
-    for (i=0; i<=strlen(OrgStr); i++) {
-      if (OrgStr[i] != '-' || p != '-' || i == 0) {
-         EntryStr[j++] = OrgStr[i];
-      }
-      p = OrgStr[i];
-    }
-    EntryStr[j] = '\0';
-
-    /* Remove any trailing commas */
-    i = strlen(EntryStr) - 1;
-    while (EntryStr[i] == ',') {
-       EntryStr[i] = '\0';
-       i--;
-    }
-
-    /* The entry string is now filtered, and ready for further parsing */
-    /* printf("Function : packet_range_convert_str EntryStr = %s\n",EntryStr); */
-
-    /* Now we are going to process the ranges separately until we get a comma,
-     * or end of string.
-     *
-     * We build a structure array called ranges of high and low values. After the
-     * following loop, we have the nranges variable which tells how many ranges
-     * were found. The number of individual ranges is limited to 'MaxRanges'
-     */
-
-    j = 0;
-    hyphenseen = FALSE;
-    for (i=0; i<=strlen(EntryStr);i++) {
-
-       /* Copy the digit string until a no-digit character is seen */
-       if (isdigit((guchar)EntryStr[i])) {
-          value[j++] = EntryStr[i];
-          continue;
-       }
-
-       /* Terminate the digit string, and convert it */
-       value[j] = '\0';
-       val=atol(value);
-       j=0;
-
-       /* In case we see a hyphen, store the value we read in the low part 
-        * of ranges. In case it is a trailer hyphen, store the low value, and
-        * set the high value to the maximum of packets captured.
-        */
-       if (EntryStr[i] == '-') {
-          /* If this is a trailer hyphen, then treat it in a different
-           * way, then the high value is the maximum number of packets counted
-           * and we are ready 
-           */
-          if (i == strlen(EntryStr)-1) {
-             range->ranges[range->nranges].low  = val;
-             range->ranges[range->nranges].high = cfile.count;
-             range->nranges++;
-             break;
-          } else {
-             /* Store the low value of the range */
-             range->ranges[range->nranges].low  = val;
-          }
-          hyphenseen=TRUE;
-          continue;
-       }
-
-       /* In case we see a comma, or end of string */
-       if (EntryStr[i] == ',' || i == strlen(EntryStr)) {
-          if (hyphenseen) {
-             /* Normal treatment: store the high value range in ranges */
-             range->ranges[range->nranges].high = val;
-          } else {
-             /* We did not see a hyphen and we get a comma, then this must
-              * be a single packet number */
-             range->ranges[range->nranges].low  = val;
-             range->ranges[range->nranges].high = val;
-          }
-          hyphenseen=FALSE;
-       }
-
-       /* Increase the index for the number of ranges we found, and protect
-        * against wildly outside array bound jumps */
-       range->nranges++;
-       if (range->nranges > MaxRange) {
-           range->nranges--;
-       }
-    }
-    range->nranges--;
-
-    /*  Now we are going through the low and high values, and check
-     *  whether they are in a proper order. Low should be equal or lower
-     *  than high. So, go through the loop and swap if needed.
-     */
-    for (i=0; i <= range->nranges; i++) {
-       if (range->ranges[i].low > range->ranges[i].high) {
-          tmp = range->ranges[i].low;
-          range->ranges[i].low  = range->ranges[i].high;
-          range->ranges[i].high = tmp;
-       }
-    }
-
-    /* In case we want to know what the result ranges are :
-     *
-     * for (i=0; i <= nranges; i++) {
-     *  printf("Function : packet_range_convert_str L=%u \t H=%u\n",ranges[i].low,ranges[i].high);
-     * }
-     *
-     */
-
-    /* calculate new user specified packet range counts */
-    packet_range_calc_user(range);
-} /* packet_range_convert_str */
-
-/* This function returns TRUE if a given value is within one of the ranges
- * stored in the ranges array.
- */
-static gboolean packet_is_in_range(packet_range_t *range, guint32 val)
-{
-   guint i;
-
-   for (i=0; i <= range->nranges; i++) {
-      if (val >= range->ranges[i].low && val <= range->ranges[i].high)
-         return TRUE;
-   }
-   return(FALSE);
-}
-
-#if 0
-/* This is a debug function to check the range functionality */
-static void packet_is_in_range_check(packet_range_t *range, guint32 val)
-{
-
-  /* Print the result for a given value */
-  printf("Function : packet_is_in_range_check Number %u\t",val);
-
-  if (packet_is_in_range(range, val)) {
-     printf("is in range\n");
-  } else {
-     printf("is not in range\n");
-  }
-}
-#endif
diff -urN ethereal-0.10.6/range.h ethereal-0.10.7/range.h
--- ethereal-0.10.6/range.h	2004-08-12 17:41:39.000000000 -0500
+++ ethereal-0.10.7/range.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,106 +0,0 @@
-/* range.h
- * Packet range routines (save, print, ...)
- *
- * $Id: range.h 11400 2004-07-18 00:24:25Z guy $
- *
- * Dick Gooris <gooris@lucent.com>
- * Ulf Lamping <ulf.lamping@web.de>
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifndef __PRINT_RANGE_H__
-#define __PRINT_RANGE_H__
-
-#include <glib.h>
-
-#include <epan/frame_data.h>
-
-extern guint32  curr_selected_frame;
-
-typedef enum {
-    range_process_all,
-    range_process_selected,
-    range_process_marked,
-    range_process_marked_range,
-    range_process_user_range
-} packet_range_e;
-
-/* Range parser variables */
-#define MaxRange  30
-
-typedef struct range_admin_tag {
-    guint32 low;
-    guint32 high;
-} range_admin_t;
-
-
-typedef struct packet_range_tag {
-    /* values coming from the UI */
-    packet_range_e  process;            /* which range to process */
-    gboolean        process_filtered;   /* captured or filtered packets */
-
-    /* user specified range(s) */
-    guint           nranges;        /* number of entries in ranges (0 based) */
-    range_admin_t   ranges[MaxRange];
-
-    /* calculated values */
-    guint32  selected_packet;       /* the currently selected packet */
-
-    /* current packet counts (captured) */
-    /* cfile.count */               /* packets in capture file */
-    /* cfile.marked_count */        /* packets marked */
-    guint32  mark_range_cnt;        /* packets in marked range */
-    guint32  user_range_cnt;        /* packets in user specified range */
-
-    /* current packet counts (displayed) */
-    guint32  displayed_cnt;
-    guint32  displayed_marked_cnt;
-    guint32  displayed_mark_range_cnt;
-    guint32  displayed_user_range_cnt;
-
-    /* "enumeration" values */
-    gboolean marked_range_active;   /* marked range is currently processed */
-    guint32  marked_range_left;     /* marked range packets left to do */
-    gboolean selected_done;         /* selected packet already processed */
-} packet_range_t;
-
-typedef enum {
-    range_process_this,             /* process this packet */
-    range_process_next,             /* skip this packet, process next */
-    range_processing_finished       /* stop processing, required packets done */
-} range_process_e;
-
-/* init the range structure */
-extern void packet_range_init(packet_range_t *range);
-
-/* init the processing run */
-void packet_range_process_init(packet_range_t *range);
-
-/* do we have to process all packets? */
-extern gboolean packet_range_process_all(packet_range_t *range);
-
-/* do we have to process this packet? */
-extern range_process_e packet_range_process_packet(packet_range_t *range, frame_data *fdata);
-
-/* convert user given string to the internal user specified range representation */
-extern void packet_range_convert_str(packet_range_t *range, const gchar *es);
-
-
-#endif /* __PRINT_RANGE_H__ */
diff -urN ethereal-0.10.6/req_resp_hdrs.c ethereal-0.10.7/req_resp_hdrs.c
--- ethereal-0.10.6/req_resp_hdrs.c	2004-08-12 17:41:39.000000000 -0500
+++ ethereal-0.10.7/req_resp_hdrs.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,339 +0,0 @@
-/* req_resp_hdrs.c
- * Routines handling protocols with a request/response line, headers,
- * a blank line, and an optional body.
- *
- * $Id: req_resp_hdrs.c 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <glib.h>
-#include <epan/packet.h>
-#include <epan/strutil.h>
-#include <string.h>
-
-#include "req_resp_hdrs.h"
-
-/*
- * Optionally do reassembly of the request/response line, headers, and body.
- */
-gboolean
-req_resp_hdrs_do_reassembly(tvbuff_t *tvb, packet_info *pinfo,
-    gboolean desegment_headers, gboolean desegment_body)
-{
-	gint		offset = 0;
-	gint		next_offset;
-	gint		next_offset_sav;
-	gint		length_remaining, reported_length_remaining;
-	int		linelen;
-	gchar		*header_val;
-	long int	content_length;
-	gboolean	content_length_found = FALSE;
-	gboolean	chunked_encoding = FALSE;
-
-	/*
-	 * Do header desegmentation if we've been told to.
-	 *
-	 * RFC 2616 defines HTTP messages as being either of the
-	 * Request or the Response type
-	 * (HTTP-message = Request | Response).
-	 * Request and Response are defined as:
-	 *     Request = Request-Line
-	 *         *(( general-header
-	 *         | request-header
-	 *         | entity-header ) CRLF)
-	 *         CRLF
-	 *         [ message-body ]
-	 *     Response = Status-Line
-	 *         *(( general-header
-	 *         | response-header
-	 *         | entity-header ) CRLF)
-	 *         CRLF
-	 *         [ message-body ]
-	 * that's why we can always assume two consecutive line
-	 * endings (we allow CR, LF, or CRLF, as some clients
-	 * or servers might not use a full CRLF) to mark the end
-	 * of the headers.  The worst thing that would happen
-	 * otherwise would be the packet not being desegmented
-	 * or being interpreted as only headers.
-	 *
-	 * RFC 2326 says RTSP works the same way; RFC 3261 says SIP
-	 * works the same way.
-	 */
-
-	/*
-	 * If header desegmentation is activated, check that all
-	 * headers are in this tvbuff (search for an empty line
-	 * marking end of headers) or request one more byte (we
-	 * don't know how many bytes we'll need, so we just ask
-	 * for one).
-	 */
-	if (desegment_headers && pinfo->can_desegment) {
-		next_offset = offset;
-		for (;;) {
-			next_offset_sav = next_offset;
-
-			length_remaining = tvb_length_remaining(tvb,
-			    next_offset);
-			reported_length_remaining =
-			    tvb_reported_length_remaining(tvb, next_offset);
-
-			/*
-			 * Request one more byte if there're no
-			 * bytes left in the reported data (if there're
-			 * bytes left in the reported data, but not in
-			 * the available data, requesting more bytes
-			 * won't help, as those bytes weren't captured).
-			 */
-			if (reported_length_remaining < 1) {
-				pinfo->desegment_offset = offset;
-				pinfo->desegment_len = 1;
-				return FALSE;
-			}
-
-			/*
-			 * Request one more byte if we cannot find a
-			 * header (i.e. a line end).
-			 */
-			linelen = tvb_find_line_end(tvb, next_offset,
-			    -1, &next_offset, TRUE);
-			if (linelen == -1 &&
-			    length_remaining >= reported_length_remaining) {
-				/*
-				 * Not enough data; ask for one more
-				 * byte.
-				 */
-				pinfo->desegment_offset = offset;
-				pinfo->desegment_len = 1;
-				return FALSE;
-			} else if (linelen == 0) {
-				/*
-				 * We found the end of the headers.
-				 */
-				break;
-			}
-
-			/*
-			 * Is this a Content-Length or Transfer-Encoding
-			 * header?  If not, it either means that we are in
-			 * a different header line, or that we are
-			 * at the end of the headers, or that there
-			 * isn't enough data; the two latter cases
-			 * have already been handled above.
-			 */
-			if (desegment_body) {
-				/*
-				 * Check if we've found Content-Length.
-				 */
-				if (tvb_strncaseeql(tvb, next_offset_sav,
-				    "Content-Length:", 15) == 0) {
-					header_val = tvb_get_string(tvb,
-					    next_offset_sav + 15,
-					    linelen - 15);
-					if (sscanf(header_val,
-					    "%li", &content_length)
-					    == 1)
-						content_length_found = TRUE;
-					g_free(header_val);
-				} else if (tvb_strncaseeql(tvb,
-					    next_offset_sav,
-					    "Transfer-Encoding:", 18) == 0) {
-					/*
-					 * Find out if this Transfer-Encoding is
-					 * chunked.  It should be, since there
-					 * really aren't any other types, but
-					 * RFC 2616 allows for them.
-					 */
-					gchar *p;
-					gint len;
-
-					header_val = tvb_get_string(tvb,
-					    next_offset_sav + 18, linelen - 18);
-					p = header_val;
-					len = strlen(header_val);
-					/* Skip white space */
-					while (p < header_val + len &&
-					    (*p == ' ' || *p == '\t'))
-						p++;
-					if (p <= header_val + len) {
-						if (strncasecmp(p, "chunked", 7)
-						    == 0) {
-							/*
-							 * Don't bother looking
-							 * for extensions;
-							 * since we don't
-							 * understand them,
-							 * they should be
-							 * ignored.
-							 */
-							chunked_encoding = TRUE;
-						}
-					}
-					g_free(header_val);
-				}
-			}
-		}
-	}
-
-	/*
-	 * The above loop ends when we reached the end of the headers, so
-	 * there should be content_length bytes after the 4 terminating bytes
-	 * and next_offset points to after the end of the headers.
-	 */
-	if (desegment_body) {
-		if (content_length_found) {
-			/* next_offset has been set to the end of the headers */
-			if (!tvb_bytes_exist(tvb, next_offset, content_length)) {
-				length_remaining = tvb_length_remaining(tvb,
-				    next_offset);
-				reported_length_remaining =
-				    tvb_reported_length_remaining(tvb, next_offset);
-				if (length_remaining < reported_length_remaining) {
-					/*
-					 * It's a waste of time asking for more
-					 * data, because that data wasn't captured.
-					 */
-					return TRUE;
-				}
-				if (length_remaining == -1)
-					length_remaining = 0;
-				pinfo->desegment_offset = offset;
-				pinfo->desegment_len =
-				    content_length - length_remaining;
-				return FALSE;
-			}
-		} else if (chunked_encoding) {
-			/*
-			 * This data is chunked, so we need to keep pulling
-			 * data until we reach the end of the stream, or a
-			 * zero sized chunk.
-			 *
-			 * XXX
-			 * This doesn't bother with trailing headers; I don't
-			 * think they are really used, and we'd have to use
-			 * is_http_request_or_reply() to determine if it was
-			 * a trailing header, or the start of a new response.
-			 */
-			gboolean done_chunking = FALSE;
-
-			while (!done_chunking) {
-				gint chunk_size = 0;
-				gint chunk_offset = 0;
-				gchar *chunk_string = NULL;
-				gchar *c = NULL;
-
-				length_remaining = tvb_length_remaining(tvb,
-				    next_offset);
-				reported_length_remaining =
-				    tvb_reported_length_remaining(tvb,
-				    next_offset);
-
-				if (reported_length_remaining < 1) {
-					pinfo->desegment_offset = offset;
-					pinfo->desegment_len = 1;
-					return FALSE;
-				}
-
-				linelen = tvb_find_line_end(tvb, next_offset,
-						-1, &chunk_offset, TRUE);
-
-				if (linelen == -1 &&
-				    length_remaining >=
-				    reported_length_remaining) {
-					 pinfo->desegment_offset = offset;
-					 pinfo->desegment_len = 2;
-					 return FALSE;
-				}
-				
-				/* We have a line with the chunk size in it.*/
-				chunk_string = tvb_get_string(tvb, next_offset,
-				    linelen);
-				c = chunk_string;
-
-				/*
-				 * We don't care about the extensions.
-				 */
-				if ((c = strchr(c, ';'))) {
-					*c = '\0';
-				}
-
-				if ((sscanf(chunk_string, "%x",
-				    &chunk_size) < 0) || chunk_size < 0) {
-					/* We couldn't get the chunk size,
-					 * so stop trying.
-					 */
-					return TRUE;
-				}
-
-				if (chunk_size == 0) {
-					/*
-					 * This is the last chunk.  Let's pull in the
-					 * trailing CRLF.
-					 */
-					linelen = tvb_find_line_end(tvb,
-					    chunk_offset, -1, &chunk_offset, TRUE);
-						
-					if (linelen == -1 &&
-					    length_remaining >=
-					    reported_length_remaining) {
-						pinfo->desegment_offset = offset;
-						pinfo->desegment_len = 1;
-						return FALSE;
-					}
-
-					pinfo->desegment_offset = chunk_offset;
-					pinfo->desegment_len = 0;
-					done_chunking = TRUE;
-				} else {
-					/* 
-					 * Skip to the next chunk if we
-					 * already have it 
-					 */
-					if (reported_length_remaining >
-					        chunk_size) {
-						
-						next_offset = chunk_offset 
-						    + chunk_size + 2;
-					} else {
-						/* 
-						 * Fetch this chunk, plus the
-						 * trailing CRLF.
-						 */ 
-						pinfo->desegment_offset = offset;
-						pinfo->desegment_len =
-						    chunk_size + 1 -
-						    reported_length_remaining;
-						return FALSE;
-					}
-				}
-
-			}
-		}
-
-	}
-
-	/*
-	 * No further desegmentation needed.
-	 */
-	return TRUE;
-}
diff -urN ethereal-0.10.6/req_resp_hdrs.h ethereal-0.10.7/req_resp_hdrs.h
--- ethereal-0.10.6/req_resp_hdrs.h	2004-08-12 17:41:39.000000000 -0500
+++ ethereal-0.10.7/req_resp_hdrs.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,36 +0,0 @@
-/* req_resp_hdrs.h
- * Declarations of routines handling protocols with a request/response line,
- * headers, a blank line, and an optional body.
- *
- * $Id: req_resp_hdrs.h 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifndef __REQ_RESP_HDRS_H__
-#define __REQ_RESP_HDRS_H__
-
-/*
- * Optionally do reassembly of the request/response line, headers, and body.
- */
-extern gboolean
-req_resp_hdrs_do_reassembly(tvbuff_t *tvb, packet_info *pinfo,
-    gboolean desegment_headers, gboolean desegment_body);
-
-#endif
diff -urN ethereal-0.10.6/smb.h ethereal-0.10.7/smb.h
--- ethereal-0.10.6/smb.h	2004-08-12 17:41:40.000000000 -0500
+++ ethereal-0.10.7/smb.h	2004-10-20 17:34:27.000000000 -0500
@@ -2,7 +2,7 @@
  * Defines for smb packet dissection
  * Copyright 1999, Richard Sharpe <rsharpe@ns.aus.com>
  *
- * $Id: smb.h 11592 2004-08-03 02:28:49Z guy $
+ * $Id: smb.h 12145 2004-09-30 01:04:33Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -193,6 +193,7 @@
  * frame number of the request in the dissection of the reply.
  */
 #define SMB_SIF_TID_IS_IPC	0x0001
+#define SMB_SIF_IS_CONTINUED	0x0002
 typedef struct {
 	guint32 frame_req, frame_res;
 	nstime_t req_time;
diff -urN ethereal-0.10.6/t35.c ethereal-0.10.7/t35.c
--- ethereal-0.10.6/t35.c	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/t35.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,395 +0,0 @@
-/* t35.c
- * T.35 and H.221 tables
- * 2003  Tomas Kukosa
- *
- * $Id: t35.c 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#include "t35.h"
-
-/* Recommendation T.35 (02/2000) */
-/* Annex to ITU Operational Bulletin No. 766 - 15.VI.2002 */
-const value_string T35CountryCode_vals[] = {
-	{ 0x00, "Japan"},
-	{ 0x01, "Albania"},
-	{ 0x02, "Algeria"},
-	{ 0x03, "American Samoa"},
-	{ 0x04, "Germany"},
-	{ 0x05, "Anguilla"},
-	{ 0x06, "Antigua and Barbuda"},
-	{ 0x07, "Argentina"},
-	{ 0x08, "Ascension (see S. Helena)"},
-	{ 0x09, "Australia"},
-	{ 0x0a, "Austria"},
-	{ 0x0b, "Bahamas"},
-	{ 0x0c, "Bahrain"},
-	{ 0x0d, "Bangladesh"},
-	{ 0x0e, "Barbados"},
-	{ 0x0f, "Belgium"},
-	{ 0x10, "Belize"},
-	{ 0x11, "Benin"},
-	{ 0x12, "Bermuda"},
-	{ 0x13, "Bhutan"},
-	{ 0x14, "Bolivia"},
-	{ 0x15, "Botswana"},
-	{ 0x16, "Brazil"},
-	{ 0x17, "British Antarctic Territory"},
-	{ 0x18, "British Indian Ocean Territory"},
-	{ 0x19, "British Virgin Islands"},
-	{ 0x1a, "Brunei Darussalam"},
-	{ 0x1b, "Bulgaria"},
-	{ 0x1c, "Myanmar"},
-	{ 0x1d, "Burundi"},
-	{ 0x1e, "Belarus"},
-	{ 0x1f, "Cameroon"},
-	{ 0x20, "Canada"},
-	{ 0x21, "Cape Verde"},
-	{ 0x22, "Cayman Islands"},
-	{ 0x23, "Central African Rep."},
-	{ 0x24, "Chad"},
-	{ 0x25, "Chile"},
-	{ 0x26, "China"},
-	{ 0x27, "Colombia"},
-	{ 0x28, "Comoros"},
-	{ 0x29, "Congo"},
-	{ 0x2a, "Cook Islands"},
-	{ 0x2b, "Costa Rica"},
-	{ 0x2c, "Cuba"},
-	{ 0x2d, "Cyprus"},
-	{ 0x2e, "Czech Rep."},
-	{ 0x2f, "Cambodia"},
-	{ 0x30, "Dem. People's Rep. of Korea"},
-	{ 0x31, "Denmark"},
-	{ 0x32, "Djibouti"},
-	{ 0x33, "Dominican Rep."},
-	{ 0x34, "Dominica"},
-	{ 0x35, "Ecuador"},
-	{ 0x36, "Egypt"},
-	{ 0x37, "El Salvador"},
-	{ 0x38, "Equatorial Guinea"},
-	{ 0x39, "Ethiopia"},
-	{ 0x3a, "Falkland Islands (Malvinas)"},
-	{ 0x3b, "Fiji"},
-	{ 0x3c, "Finland"},
-	{ 0x3d, "France"},
-	{ 0x3e, "French Polynesia"},
-	/* { 0x3f, "(Available)"}, */
-	{ 0x40, "Gabon"},
-	{ 0x41, "Gambia"},
-	{ 0x42, "Germany"},
-	{ 0x43, "Angola"},
-	{ 0x44, "Ghana"},
-	{ 0x45, "Gibraltar"},
-	{ 0x46, "Greece"},
-	{ 0x47, "Grenada"},
-	{ 0x48, "Guam"},
-	{ 0x49, "Guatemala"},
-	{ 0x4a, "Guernsey"},
-	{ 0x4b, "Guinea"},
-	{ 0x4c, "Guinea-Bissau"},
-	{ 0x4d, "Guayana"},
-	{ 0x4e, "Haiti"},
-	{ 0x4f, "Honduras"},
-	{ 0x50, "Hong Kong, China"},
-	{ 0x51, "Hungary"},
-	{ 0x52, "Iceland"},
-	{ 0x53, "India"},
-	{ 0x54, "Indonesia"},
-	{ 0x55, "Iran (Islamic Republic of)"},
-	{ 0x56, "Iraq"},
-	{ 0x57, "Ireland"},
-	{ 0x58, "Israel"},
-	{ 0x59, "Italy"},
-	{ 0x5a, "Cte d'Ivoire"},
-	{ 0x5b, "Jamaica"},
-	{ 0x5c, "Afghanistan"},
-	{ 0x5d, "Jersey"},
-	{ 0x5e, "Jordan"},
-	{ 0x5f, "Kenya"},
-	{ 0x60, "Kiribati"},
-	{ 0x61, "Korea (Rep. of)"},
-	{ 0x62, "Kuwait"},
-	{ 0x63, "Lao P.D.R."},
-	{ 0x64, "Lebanon"},
-	{ 0x65, "Lesotho"},
-	{ 0x66, "Liberia"},
-	{ 0x67, "Libya"},
-	{ 0x68, "Liechtenstein"},
-	{ 0x69, "Luxembourg"},
-	{ 0x6a, "Macao, China"},
-	{ 0x6b, "Madagascar"},
-	{ 0x6c, "Malaysia"},
-	{ 0x6d, "Malawi"},
-	{ 0x6e, "Maldives"},
-	{ 0x6f, "Mali"},
-	{ 0x70, "Malta"},
-	{ 0x71, "Mauritania"},
-	{ 0x72, "Mauritius"},
-	{ 0x73, "Mexico"},
-	{ 0x74, "Monaco"},
-	{ 0x75, "Mongolia"},
-	{ 0x76, "Montserrat"},
-	{ 0x77, "Morocco"},
-	{ 0x78, "Mozambique"},
-	{ 0x79, "Nauru"},
-	{ 0x7a, "Nepal"},
-	{ 0x7b, "Netherlands"},
-	{ 0x7c, "Netherlands Antilles"},
-	{ 0x7d, "New Caledonia"},
-	{ 0x7e, "New Zealand"},
-	{ 0x7f, "Nicaragua"},
-	{ 0x80, "Niger"},
-	{ 0x81, "Nigeria"},
-	{ 0x82, "Norway"},
-	{ 0x83, "Oman"},
-	{ 0x84, "Pakistan"},
-	{ 0x85, "Panama"},
-	{ 0x86, "Papua New Guinea"},
-	{ 0x87, "Paraguay"},
-	{ 0x88, "Peru"},
-	{ 0x89, "Philippines"},
-	{ 0x8a, "Poland"},
-	{ 0x8b, "Portugal"},
-	{ 0x8c, "Puerto Rico"},
-	{ 0x8d, "Qatar"},
-	{ 0x8e, "Romania"},
-	{ 0x8f, "Rwanda"},
-	{ 0x90, "Saint Kitts and Nevis"},
-	{ 0x91, "Saint Croix"},
-	{ 0x92, "Saint Helena and Ascension"},
-	{ 0x93, "Saint Lucia"},
-	{ 0x94, "San Marino"},
-	{ 0x95, "Saint Thomas"},
-	{ 0x96, "Sao Tome and Principe"},
-	{ 0x97, "Saint Vincent and the Grenadines"},
-	{ 0x98, "Saudi Arabia"},
-	{ 0x99, "Senegal"},
-	{ 0x9a, "Seychelles"},
-	{ 0x9b, "Sierra Leone"},
-	{ 0x9c, "Singapore"},
-	{ 0x9d, "Solomon"},
-	{ 0x9e, "Somalia"},
-	{ 0x9f, "South Africa"},
-	{ 0xa0, "Spain"},
-	{ 0xa1, "Sri Lanka"},
-	{ 0xa2, "Sudan"},
-	{ 0xa3, "Suriname"},
-	{ 0xa4, "Swaziland"},
-	{ 0xa5, "Sweden"},
-	{ 0xa6, "Switzerland"},
-	{ 0xa7, "Syria"},
-	{ 0xa8, "Tanzania"},
-	{ 0xa9, "Thailand"},
-	{ 0xaa, "Togo"},
-	{ 0xab, "Tonga"},
-	{ 0xac, "Trinidad and Tobago"},
-	{ 0xad, "Tunisia"},
-	{ 0xae, "Turkey"},
-	{ 0xaf, "Turks and Caicos Islands"},
-	{ 0xb0, "Tuvalu"},
-	{ 0xb1, "Uganda"},
-	{ 0xb2, "Ukraine"},
-	{ 0xb3, "United Arab Emirates"},
-	{ 0xb4, "United Kingdom"},
-	{ 0xb5, "United States"},
-	{ 0xb6, "Burkina Faso"},
-	{ 0xb7, "Uruguay"},
-	{ 0xb8, "Russia"},
-	{ 0xb9, "Vanuatu"},
-	{ 0xba, "Vatican"},
-	{ 0xbb, "Venezuela"},
-	{ 0xbc, "Viet Nam"},
-	{ 0xbd, "Wallis and Futuna"},
-	{ 0xbe, "Samoa"},
-	{ 0xbf, "Yemen"},
-	{ 0xc0, "Yemen"},
-	{ 0xc1, "Yugoslavia"},
-	{ 0xc2, "Dem. Rep. of the Congo"},
-	{ 0xc3, "Zambia"},
-	{ 0xc4, "Zimbabwe"},
-	{ 0xc5, "Slovakia"},
-	{ 0xc6, "Slovenia"},
-	{  0, NULL }
-};
-
-
-const value_string T35Extension_vals[] = {
-	{  0, NULL }
-};
-
-const value_string H221ManufacturerCode_vals[] = {
-	{  0x04000042, "Deutsche Telekom AG" },                             /* From Ref. 3 */
-	{  0x04000043, "Deutsche Telekom AG" },                             /* From Ref. 3 */
-	{  0x04000082, "Siemens AG" },                                      /* From Ref. 3 */
-	{  0x04000084, "ITO Communication" },                               /* From Ref. 3 */
-	{  0x04000086, "Hauni Elektronik" },                                /* From Ref. 3 */
-	{  0x04000088, "Dr.Neuhaus Mikroelektronik" },                      /* From Ref. 3 */
-	{  0x0400008a, "mps Software" },                                    /* From Ref. 3 */
-	{  0x0400008b, "Ferrari electronik GmbH" },                         /* From Ref. 3 */
-	{  0x0400008c, "mbp Kommunikationssysteme GmbH" },                  /* From Ref. 3 */
-	{  0x0400008d, "Schneider Rundfunkwerke AG" },                      /* From Ref. 3 */
-	{  0x0400008e, "Digitronic computersysteme gmbh" },                 /* From Ref. 3 */
-	{  0x0400008f, "DeTeWe - Deutsche Telephonwerke AG &Co" },          /* From Ref. 3 */
-	{  0x04000082, "SITK Institut fr Telekommunikation GmbH & Co KG" },/* From Ref. 3 */
-	{  0x0900003D, "Equivalence (OpenH323)" },                          /* From captures */
-	{  0x20000081, "Mediatrix Telecom" },                               /* From Ref. 1 */
-	{  0x3d000310, "Swissvoice" },
-	{  0x3d000311, "Swissvoice" },
-	{  0x3d000312, "Swissvoice" },
-	{  0x3d000313, "Swissvoice" },
-	{  0x3d000314, "Swissvoice" },
-	{  0x3d000315, "Swissvoice" },
-	{  0x3d000316, "Swissvoice" },
-	{  0x3d000317, "Swissvoice" },
-	{  0x3d000318, "Swissvoice" },
-	{  0x3d000319, "Swissvoice" },
-	{  0x3d00031a, "Swissvoice" },
-	{  0x3d00031b, "Swissvoice" },
-	{  0x3d00031c, "Swissvoice" },
-	{  0x3d00031d, "Swissvoice" },
-	{  0x3d00031e, "Swissvoice" },
-	{  0x3d00031f, "Swissvoice" },
-	{  0x82000002, "Ericsson" },                                        /* From captures */
-	{  0xa5000001, "Ericsson" },                                        /* From captures */
-	{  0xb4000000, "British Telecommunications" },                      /* From Ref. 2 */
-	{  0xb4000001, "British Telecommunications" },                      /* From Ref. 2 */
-	{  0xb4000002, "British Telecommunications" },                      /* From Ref. 2 */
-	{  0xb4000003, "British Telecommunications" },                      /* From Ref. 2 */
-	{  0xb4000004, "British Telecommunications" },                      /* From Ref. 2 */
-	{  0xb4000005, "British Telecommunications" },                      /* From Ref. 2 */
-	{  0xb4000006, "British Telecommunications" },                      /* From Ref. 2 */
-	{  0xb4000007, "British Telecommunications" },                      /* From Ref. 2 */
-	{  0xb4000008, "British Telecommunications" },                      /* From Ref. 2 */
-	{  0xb4000009, "British Telecommunications" },                      /* From Ref. 2 */
-	{  0xb400000a, "British Telecommunications" },                      /* From Ref. 2 */
-	{  0xb400000b, "British Telecommunications" },                      /* From Ref. 2 */
-	{  0xb400000c, "British Telecommunications" },                      /* From Ref. 2 */
-	{  0xb400000d, "British Telecommunications" },                      /* From Ref. 2 */
-	{  0xb400000e, "British Telecommunications" },                      /* From Ref. 2 */
-	{  0xb400000f, "British Telecommunications" },                      /* From Ref. 2 */
-	{  0xb4000010, "GPT Video Systems" },                               /* From Ref. 2 */
-	{  0xb4000011, "GPT Video Systems" },                               /* From Ref. 2 */
-	{  0xb4000012, "GPT Video Systems" },                               /* From Ref. 2 */
-	{  0xb4000013, "GPT Video Systems" },                               /* From Ref. 2 */
-	{  0xb4000014, "GPT Video Systems" },                               /* From Ref. 2 */
-	{  0xb4000015, "GPT Video Systems" },                               /* From Ref. 2 */
-	{  0xb4000016, "GPT Video Systems" },                               /* From Ref. 2 */
-	{  0xb4000017, "GPT Video Systems" },                               /* From Ref. 2 */
-	{  0xb4000018, "GPT Video Systems" },                               /* From Ref. 2 */
-	{  0xb4000019, "GPT Video Systems" },                               /* From Ref. 2 */
-	{  0xb400001a, "GPT Video Systems" },                               /* From Ref. 2 */
-	{  0xb400001b, "GPT Video Systems" },                               /* From Ref. 2 */
-	{  0xb400001c, "GPT Video Systems" },                               /* From Ref. 2 */
-	{  0xb400001d, "GPT Video Systems" },                               /* From Ref. 2 */
-	{  0xb400001e, "GPT Video Systems" },                               /* From Ref. 2 */
-	{  0xb400001f, "GPT Video Systems" },                               /* From Ref. 2 */
-	{  0xb4000020, "Marconi Communications" },                          /* From Ref. 2 */ 
-	{  0xb4000021, "Indigo Active Vision Systems" },                    /* From Ref. 2 */ 
-	{  0xb4000022, "LiveWorks Limited" },                               /* From Ref. 2 */ 
-	{  0xb4000023, "ATL Telecom Limited" },                             /* From Ref. 2 */ 
-	{  0xb400002a, "Network Alchemy Limited" },                         /* From Ref. 2 */ 
-	{  0xb4000042, "Motion Media Technology" },                         /* From Ref. 2 */ 
-	{  0xb4000044, "Data Connection" },                                 /* From Ref. 2 */ 
-	{  0xb4000045, "Westbay Engineers" },                               /* From Ref. 2 */ 
-	{  0xb4000049, "ImageCom" },                                        /* From Ref. 2 */ 
-	{  0xb400004d, "Madge Networks" },                                  /* From Ref. 2 */ 
-	{  0xb4000052, "Ridgeway Systems and Software" },                   /* From Ref. 2 */ 
-	{  0xb4000053, "SpliceCom" },                                       /* From Ref. 2 */ 
-	{  0xb4000054, "TeleWare" },                                        /* From Ref. 2 */ 
-	{  0xb4000056, "Vegastream" },                                      /* From Ref. 2 */ 
-	{  0xb4000066, "Westell" },                                         /* From Ref. 2 */ 
-	{  0xb4000069, "ISDN Communications" },                             /* From Ref. 2 */ 
-	{  0xb40000c0, "Codian" },                                          /* From Ref. 2 */ 
-
-	{  0xb5000000, "Compression Labs" },                                /* From Ref. 1 */
-	{  0xb5000001, "PictureTel" },                                      /* From Ref. 1 */
-	{  0xb5000002, "Compression Labs" },                                /* From Ref. 1 */
-	{  0xb5000003, "VTEL" },                                            /* From Ref. 1 */
-	{  0xb5000005, "ERIS" },                                            /* From Ref. 1 */
-	{  0xb5000007, "AT&T Worldworx" },                                  /* From Ref. 1 */
-	{  0xb5000009, "VideoServer" },                                     /* From Ref. 1 */
-	{  0xb500000b, "3Com Corporation" },                                /* From Ref. 1 */
-	{  0xb500000c, "Clarent Corporation" },                             /* From Ref. 1 */
-	{  0xb500000d, "Genesys Telecommunications Labs Inc" },             /* From Ref. 1 */
-	{  0xb500000e, "C-Phone Corporation." },                            /* From Ref. 1 */
-	{  0xb500000f, "Science Dynamics Corporation" },                    /* From Ref. 1 */
-	{  0xb5000010, "AT&T Starpoint" },                                  /* From Ref. 1 */
-	{  0xb5000011, "Netscape Conference" },                             /* From Ref. 1 */
-	{  0xb5000012, "Cisco" },                                           /* From Ref. 1 */
-	{  0xb5000013, "Cirilium, Inc." },                                  /* From Ref. 1 */
-	{  0xb5000014, "Ascend Communications, Inc." },                     /* From Ref. 1 */
-	{  0xb5000015, "RADVision, Inc." },                                 /* From Ref. 1 */
-	{  0xb5000016, "Objective Communications" },                        /* From Ref. 1 */
-	{  0xb5000017, "VocalTec Communications, Inc." },                   /* From Ref. 1 */
-	{  0xb5000018, "Serome Technology, Inc." },                         /* From Ref. 1 */
-	{  0xb5000019, "Aspect Communications" },                           /* From Ref. 1 */
-	{  0xb500001a, "Cintech Tele-Management" },                         /* From Ref. 1 */
-	{  0xb500001b, "Philips Video Conferencing Systems" },              /* From Ref. 1 */
-	{  0xb500001c, "Vertical Networks, Inc." },                         /* From Ref. 1 */
-	{  0xb500001d, "Syndeo Corp." },                                    /* From Ref. 1 */
-	{  0xb500001e, "Telxon Corporation" },                              /* From Ref. 1 */
-	{  0xb500001f, "Network Equipment Technologies" },                  /* From Ref. 1 */
-	{  0xb5000020, "Pagoo, Inc." },                                     /* From Ref. 1 */
-	{  0xb5000021, "General Dynamics" },                                /* From Ref. 1 */
-	{  0xb5000022, "Vanguard Managed Solutions" },                      /* From Ref. 1 */
-	{  0xb5000023, "TeleStream Technologies, Inc." },                   /* From Ref. 1 */
-	{  0xb5000024, "Spirent Communications" },                          /* From Ref. 1 */
-	{  0xb5000025, "CrystalVoice Communications" },                     /* From Ref. 1 */
-	{  0xb5000026, "Xiph.org" },                                        /* From Ref. 1 */
-	{  0xb5000027, "NACT Telecommunications" },                         /* From Ref. 1 */
-	{  0xb5000028, "AudioCodes, Inc." },                                /* From Ref. 1 */
-	{  0xb5000120, "AT&T - GBCS" },                                     /* From Ref. 1 */
-	{  0xb5000168, "Leadtek Research Inc." },                           /* From Ref. 1 */
-	{  0xb5000247, "Lucent Technologies" },                             /* From Ref. 1 */
-	{  0xb500029a, "Symbol Technologies Inc." },                        /* From Ref. 1 */
-	{  0xb5000378, "StarVox, Inc." },                                   /* From Ref. 1 */
-	{  0xb50003f7, "Inari Inc." },                                      /* From Ref. 1 */
-	{  0xb5000727, "Quintum Technologies, Inc." },                      /* From Ref. 1 */
-	{  0xb5000918, "Netrix Corporation" },                              /* From Ref. 1 */
-	{  0xb500101e, "SysMaster Corporation" },                           /* From Ref. 1 */
-	{  0xb5001a1a, "Alpha Telecom, Inc. U.S.A." },                      /* From Ref. 1 */
-	{  0xb5002331, "ViaVideo" },                                        /* From Ref. 1 */
-	{  0xb500301c, "Congruency, Inc." },                                /* From Ref. 1 */
-	{  0xb5003039, "MiBridge Inc." },                                   /* From Ref. 1 */
-	{  0xb5003838, "8x8 Inc." },                                        /* From Ref. 1 */
-	{  0xb5004147, "Agere Systems" },                                   /* From Ref. 1 */
-	{  0xb5004153, "Artisoft Inc." },                                   /* From Ref. 1 */
-	{  0xb5004156, "Avaya" },                                           /* From Ref. 1 */
-	{  0xb5004242, "IBM." },                                            /* From Ref. 1 */
-	{  0xb5004257, "StreamComm" },                                      /* From Ref. 1 */
-
-	{  0xb5004c54, "Lucent Technologies" },                             /* From Ref. 1 */
-	{  0xb5004d47, "MediaGate" },                                       /* From Ref. 1 */
-	{  0xb5004e54, "Nortel Networks" },                                 /* From Ref. 1 */
-
-	{  0xb5005243, "Siemens Business Communication Systems" },          /* From Ref. 1 */
-	{  0xb500534c, "Microsoft" },                                       /* From Ref. 1 */
-
-	{  0xb500600d, "Lucent Technologies" },                             /* From Ref. 1 */
-
-	{  0xb5008080, "Intel" },                                           /* From Ref. 1 */
-	{  0xa5000001, "Ericsson" },                                        /* From captures */
-	{  0, NULL }
-};
-/* Ref 1 http://www.delta-info.com/Protocol_Test/Manufacturer_codes.html 	*/
-/* Ref 2 http://www.cix.co.uk/~bpechey/H221/h221code.htm			*/
-/* Ref 3 http://www.regtp.de/reg_tele/start/in_05-06-03-11-00_m/index.html 	*/
-
diff -urN ethereal-0.10.6/t35.h ethereal-0.10.7/t35.h
--- ethereal-0.10.6/t35.h	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/t35.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,35 +0,0 @@
-/* t35.h
- * T.35 and H.221 tables
- * 2003  Tomas Kukosa
- *
- * $Id: t35.h 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifndef __T35_H__
-#define __T35_H__ 
-
-#include "epan/value_string.h"
-
-extern const value_string T35CountryCode_vals[];
-extern const value_string T35Extension_vals[];
-extern const value_string H221ManufacturerCode_vals[];
-
-#endif  /* __T35_H__ */
diff -urN ethereal-0.10.6/tap-ansi_astat.c ethereal-0.10.7/tap-ansi_astat.c
--- ethereal-0.10.6/tap-ansi_astat.c	2004-08-12 17:41:26.000000000 -0500
+++ ethereal-0.10.7/tap-ansi_astat.c	2004-10-20 17:34:15.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 2003, Michael Lum <mlum [AT] telostech.com>
  * In association with Telos Technology Inc.
  *
- * $Id: tap-ansi_astat.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: tap-ansi_astat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -45,7 +45,7 @@
 #include <string.h>
 #include "epan/packet_info.h"
 #include "epan/value_string.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include <epan/dissectors/packet-bssap.h>
 #include <epan/dissectors/packet-ansi_a.h>
 #include "register.h"
diff -urN ethereal-0.10.6/tap-bootpstat.c ethereal-0.10.7/tap-bootpstat.c
--- ethereal-0.10.6/tap-bootpstat.c	2004-08-12 17:41:38.000000000 -0500
+++ ethereal-0.10.7/tap-bootpstat.c	2004-10-20 17:34:25.000000000 -0500
@@ -1,7 +1,7 @@
 /* tap-bootpstat.c
  * boop_stat   2003 Jean-Michel FAYARD
  *
- * $Id: tap-bootpstat.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: tap-bootpstat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -29,7 +29,7 @@
 #include <stdio.h>
 
 #include "epan/packet_info.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "register.h"
 #include <string.h>
 
diff -urN ethereal-0.10.6/tap-dcerpcstat.c ethereal-0.10.7/tap-dcerpcstat.c
--- ethereal-0.10.6/tap-dcerpcstat.c	2004-08-12 17:41:26.000000000 -0500
+++ ethereal-0.10.7/tap-dcerpcstat.c	2004-10-20 17:34:15.000000000 -0500
@@ -1,7 +1,7 @@
 /* tap-dcerpcstat.c
  * dcerpcstat   2002 Ronnie Sahlberg
  *
- * $Id: tap-dcerpcstat.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: tap-dcerpcstat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 
 #include <string.h>
 #include "epan/packet_info.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include <epan/dissectors/packet-dcerpc.h>
 #include "register.h"
 
diff -urN ethereal-0.10.6/tap-gsm_astat.c ethereal-0.10.7/tap-gsm_astat.c
--- ethereal-0.10.6/tap-gsm_astat.c	2004-08-12 17:41:39.000000000 -0500
+++ ethereal-0.10.7/tap-gsm_astat.c	2004-10-20 17:34:25.000000000 -0500
@@ -3,7 +3,7 @@
  * Copyright 2003, Michael Lum <mlum [AT] telostech.com>
  * In association with Telos Technology Inc.
  *
- * $Id: tap-gsm_astat.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: tap-gsm_astat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -45,7 +45,7 @@
 #include <string.h>
 #include "epan/packet_info.h"
 #include "epan/value_string.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include <epan/dissectors/packet-bssap.h>
 #include <epan/dissectors/packet-gsm_a.h>
 #include "register.h"
diff -urN ethereal-0.10.6/tap-h225counter.c ethereal-0.10.7/tap-h225counter.c
--- ethereal-0.10.6/tap-h225counter.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/tap-h225counter.c	2004-10-20 17:34:36.000000000 -0500
@@ -2,7 +2,7 @@
  * h225 message counter for ethereal
  * Copyright 2003 Lars Roland
  *
- * $Id: tap-h225counter.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: tap-h225counter.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -39,7 +39,7 @@
 
 #include <string.h>
 #include "epan/packet_info.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "epan/value_string.h"
 #include "register.h"
 #include <epan/dissectors/packet-h225.h>
diff -urN ethereal-0.10.6/tap-h225rassrt.c ethereal-0.10.7/tap-h225rassrt.c
--- ethereal-0.10.6/tap-h225rassrt.c	2004-08-12 17:41:41.000000000 -0500
+++ ethereal-0.10.7/tap-h225rassrt.c	2004-10-20 17:34:27.000000000 -0500
@@ -2,7 +2,7 @@
  * h225 RAS Service Response Time statistics for ethereal
  * Copyright 2003 Lars Roland
  *
- * $Id: tap-h225rassrt.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: tap-h225rassrt.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -35,7 +35,7 @@
 
 #include <string.h>
 #include "epan/packet_info.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "epan/value_string.h"
 #include "register.h"
 #include <epan/dissectors/packet-h225.h>
diff -urN ethereal-0.10.6/tap-httpstat.c ethereal-0.10.7/tap-httpstat.c
--- ethereal-0.10.6/tap-httpstat.c	2004-08-12 17:41:38.000000000 -0500
+++ ethereal-0.10.7/tap-httpstat.c	2004-10-20 17:34:25.000000000 -0500
@@ -1,7 +1,7 @@
 /* tap-httpstat.c
  * tap-httpstat   2003 Jean-Michel FAYARD
  *
- * $Id: tap-httpstat.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: tap-httpstat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -31,7 +31,7 @@
 
 #include "epan/packet_info.h"
 #include "epan/value_string.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "register.h"
 #include <epan/dissectors/packet-http.h>
 
diff -urN ethereal-0.10.6/tap-iostat.c ethereal-0.10.7/tap-iostat.c
--- ethereal-0.10.6/tap-iostat.c	2004-08-12 17:41:40.000000000 -0500
+++ ethereal-0.10.7/tap-iostat.c	2004-10-20 17:34:27.000000000 -0500
@@ -1,7 +1,7 @@
 /* tap-iostat.c
  * iostat   2002 Ronnie Sahlberg
  *
- * $Id: tap-iostat.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: tap-iostat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -35,7 +35,7 @@
 #include <string.h>
 #include "epan/epan_dissect.h"
 #include "epan/packet_info.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "register.h"
 
 
diff -urN ethereal-0.10.6/tap-iousers.c ethereal-0.10.7/tap-iousers.c
--- ethereal-0.10.6/tap-iousers.c	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/tap-iousers.c	2004-10-20 17:34:33.000000000 -0500
@@ -1,7 +1,7 @@
 /* tap-iousers.c
  * iostat   2003 Ronnie Sahlberg
  *
- * $Id: tap-iousers.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: tap-iousers.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -36,7 +36,7 @@
 #include <epan/packet_info.h>
 #include <epan/packet.h>
 #include <epan/addr_resolv.h>
-#include "tap.h"
+#include <epan/tap.h>
 #include "register.h"
 #include <epan/dissectors/packet-ip.h>
 #include <epan/dissectors/packet-ipx.h>
diff -urN ethereal-0.10.6/tap-mgcpstat.c ethereal-0.10.7/tap-mgcpstat.c
--- ethereal-0.10.6/tap-mgcpstat.c	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/tap-mgcpstat.c	2004-10-20 17:35:06.000000000 -0500
@@ -1,7 +1,7 @@
 /* tap-mgcpstat.c
  * mgcpstat   2003 Lars Roland
  *
- * $Id: tap-mgcpstat.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: tap-mgcpstat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -34,7 +34,7 @@
 
 #include <string.h>
 #include "epan/packet_info.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "epan/value_string.h"
 #include "register.h"
 #include "plugins/mgcp/packet-mgcp.h"
diff -urN ethereal-0.10.6/tap-protocolinfo.c ethereal-0.10.7/tap-protocolinfo.c
--- ethereal-0.10.6/tap-protocolinfo.c	2004-08-12 17:41:39.000000000 -0500
+++ ethereal-0.10.7/tap-protocolinfo.c	2004-10-20 17:34:26.000000000 -0500
@@ -1,7 +1,7 @@
 /* tap-protocolinfo.c
  * protohierstat   2002 Ronnie Sahlberg
  *
- * $Id: tap-protocolinfo.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: tap-protocolinfo.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -38,7 +38,7 @@
 #include "epan/epan_dissect.h"
 #include "epan/column-utils.h"
 #include "epan/proto.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "register.h"
 
 typedef struct _pci_t {
@@ -55,6 +55,20 @@
 	guint i;
 	char *str;
 
+	/*
+	 * XXX - there needs to be a way for "protocolinfo_init()" to
+	 * find out whether the columns are being generated and, if not,
+	 * to report an error and exit, as the whole point of this tap
+	 * is to modify the columns, and if the columns aren't being
+	 * displayed, that makes this tap somewhat pointless.
+	 *
+	 * To prevent a crash, we check whether pinfo->cinfo is null
+	 * and, if so, we report that error and exit.
+	 */
+	if (pinfo->cinfo == NULL) {
+		fprintf(stderr, "tethereal: the proto,colinfo tap doesn't work if the columns aren't being printed.\n");
+		exit(1);
+	}
 	gp=proto_get_finfo_ptr_array(edt->tree, rs->hf_index);
 	if(!gp){
 		return 0;
diff -urN ethereal-0.10.6/tap-protohierstat.c ethereal-0.10.7/tap-protohierstat.c
--- ethereal-0.10.6/tap-protohierstat.c	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/tap-protohierstat.c	2004-10-20 17:35:06.000000000 -0500
@@ -1,7 +1,7 @@
 /* tap-protohierstat.c
  * protohierstat   2002 Ronnie Sahlberg
  *
- * $Id: tap-protohierstat.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: tap-protohierstat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -38,7 +38,7 @@
 #include "epan/packet_info.h"
 #include "epan/epan_dissect.h"
 #include "epan/proto.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "register.h"
 
 typedef struct _phs_t {
diff -urN ethereal-0.10.6/tap-rpcprogs.c ethereal-0.10.7/tap-rpcprogs.c
--- ethereal-0.10.6/tap-rpcprogs.c	2004-08-12 17:41:40.000000000 -0500
+++ ethereal-0.10.7/tap-rpcprogs.c	2004-10-20 17:34:27.000000000 -0500
@@ -1,7 +1,7 @@
 /* tap-rpcprogs.c
  * rpcstat   2002 Ronnie Sahlberg
  *
- * $Id: tap-rpcprogs.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: tap-rpcprogs.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -38,7 +38,7 @@
 
 #include <string.h>
 #include "epan/packet_info.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include <epan/dissectors/packet-rpc.h>
 #include "register.h"
 
diff -urN ethereal-0.10.6/tap-rpcstat.c ethereal-0.10.7/tap-rpcstat.c
--- ethereal-0.10.6/tap-rpcstat.c	2004-08-12 17:41:38.000000000 -0500
+++ ethereal-0.10.7/tap-rpcstat.c	2004-10-20 17:34:25.000000000 -0500
@@ -1,7 +1,7 @@
 /* tap-rpcstat.c
  * rpcstat   2002 Ronnie Sahlberg
  *
- * $Id: tap-rpcstat.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: tap-rpcstat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -44,7 +44,7 @@
 
 #include <string.h>
 #include "epan/packet_info.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include <epan/dissectors/packet-rpc.h>
 #include "register.h"
 
diff -urN ethereal-0.10.6/tap-sipstat.c ethereal-0.10.7/tap-sipstat.c
--- ethereal-0.10.6/tap-sipstat.c	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/tap-sipstat.c	2004-10-20 17:35:06.000000000 -0500
@@ -1,7 +1,7 @@
 /* tap_sipstat.c
  * sip message counter for ethereal
  *
- * $Id: tap-sipstat.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: tap-sipstat.c 12128 2004-09-29 00:06:36Z guy $
  * Copied from gtk/sip_stat.c and tap-httpstat.c
  *
  * Ethereal - Network traffic analyzer
@@ -35,7 +35,7 @@
 
 #include <string.h>
 #include "epan/packet_info.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "epan/value_string.h"
 #include "register.h"
 #include <epan/dissectors/packet-sip.h>
diff -urN ethereal-0.10.6/tap-smbsids.c ethereal-0.10.7/tap-smbsids.c
--- ethereal-0.10.6/tap-smbsids.c	2004-08-12 17:41:38.000000000 -0500
+++ ethereal-0.10.7/tap-smbsids.c	2004-10-20 17:34:25.000000000 -0500
@@ -1,7 +1,7 @@
 /* tap-smbsids.c
  * smbstat   2003 Ronnie Sahlberg
  *
- * $Id: tap-smbsids.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: tap-smbsids.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -40,7 +40,7 @@
 #include "epan/packet_info.h"
 #include <epan/dissectors/packet-smb-sidsnooping.h>
 #include "register.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "epan/value_string.h"
 #include "smb.h"
 
diff -urN ethereal-0.10.6/tap-smbstat.c ethereal-0.10.7/tap-smbstat.c
--- ethereal-0.10.6/tap-smbstat.c	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/tap-smbstat.c	2004-10-20 17:35:06.000000000 -0500
@@ -1,7 +1,7 @@
 /* tap-smbstat.c
  * smbstat   2003 Ronnie Sahlberg
  *
- * $Id: tap-smbstat.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: tap-smbstat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -38,7 +38,7 @@
 
 #include <string.h>
 #include "epan/packet_info.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "epan/value_string.h"
 #include "smb.h"
 #include "register.h"
diff -urN ethereal-0.10.6/tap-wspstat.c ethereal-0.10.7/tap-wspstat.c
--- ethereal-0.10.6/tap-wspstat.c	2004-08-12 17:42:32.000000000 -0500
+++ ethereal-0.10.7/tap-wspstat.c	2004-10-20 17:35:04.000000000 -0500
@@ -1,7 +1,7 @@
 /* tap-rpcstat.c
  * wspstat   2003 Jean-Michel FAYARD
  *
- * $Id: tap-wspstat.c 11410 2004-07-18 18:06:47Z gram $
+ * $Id: tap-wspstat.c 12128 2004-09-29 00:06:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -43,7 +43,7 @@
 
 #include <string.h>
 #include "epan/packet_info.h"
-#include "tap.h"
+#include <epan/tap.h>
 #include "register.h"
 #include "epan/value_string.h"
 #include <epan/dissectors/packet-wsp.h>
diff -urN ethereal-0.10.6/tap.c ethereal-0.10.7/tap.c
--- ethereal-0.10.6/tap.c	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/tap.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,432 +0,0 @@
-/* tap.c
- * packet tap interface   2002 Ronnie Sahlberg
- *
- * $Id: tap.c 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-
-#include <string.h>
-#include "epan/packet_info.h"
-#include "epan/dfilter/dfilter.h"
-#include "tap.h"
-
-static gboolean tapping_is_active=FALSE;
-int num_tap_filters=0;
-
-typedef struct _tap_dissector_t {
-	struct _tap_dissector_t *next;
-	char *name;
-} tap_dissector_t;
-static tap_dissector_t *tap_dissector_list=NULL;
-
-/*
- * This is the list of free and used packets queued for a tap.
- * It is implemented here explicitely instead of using GLib objects
- * in order to be as fast as possible as we need to build and tear down the
- * queued list at least once for each packet we see, thus we must be able
- * to build and tear it down as fast as possible.
- */
-typedef struct _tap_packet_t {
-	struct _tap_packet_t *next;
-	int tap_id;
-	packet_info *pinfo;
-	void *tap_specific_data;
-} tap_packet_t;
-static tap_packet_t *tap_packet_list_free=NULL;
-static tap_packet_t *tap_packet_list_queue=NULL;
-#define TAP_PACKET_QUEUE_LEN 100
-
-
-typedef struct _tap_listener_t {
-	struct _tap_listener_t *next;
-	int tap_id;
-	int needs_redraw;
-	dfilter_t *code;
-	void *tapdata;
-	tap_reset_cb reset;
-	tap_packet_cb packet;
-	tap_draw_cb draw;
-} tap_listener_t;
-static volatile tap_listener_t *tap_listener_queue=NULL;
-
-/* **********************************************************************
- * Init routine only called from epan at application startup
- * ********************************************************************** */
-/* This function is called once when ethereal starts up and is used
-   to init any data structures we may need later.
-*/
-void
-tap_init(void)
-{
-	int i;
-	tap_packet_t *tpt;
-
-	for(i=0;i<TAP_PACKET_QUEUE_LEN;i++){
-		tpt=g_malloc(sizeof(tap_packet_t));
-		tpt->next=tap_packet_list_free;
-		tap_packet_list_free=tpt;
-	}
-	tap_packet_list_queue=NULL;
-
-	return;
-}
-
-
-
-/* **********************************************************************
- * Functions called from dissector when made tappable
- * ********************************************************************** */
-/* the following two functions are used from dissectors to
-   1, register the ability to tap packets from this subdissector
-   2, push packets encountered by the subdissector to anyone tapping
-*/
-
-/* This function registers that a dissector has the packet tap ability
-   available.  The name parameter is the name of this tap and extensions can
-   use open_tap(char *name,... to specify that it wants to receive packets/
-   events from this tap.
-
-   This function is only to be called once, when the dissector initializes.
-
-   The return value from this call is later used as a parameter to the
-   tap_packet(unsinged int *tap_id,...
-   call so that the tap subsystem knows to which tap point this tapped
-   packet is associated.
-*/  
-int
-register_tap(char *name)
-{
-	tap_dissector_t *td, *tdl;
-	int i;
-
-	td=g_malloc(sizeof(tap_dissector_t));
-	td->next=NULL;
-	td->name = g_strdup(name);
-
-	if(!tap_dissector_list){
-		tap_dissector_list=td;
-		i=1;
-	} else {
-		for(i=2,tdl=tap_dissector_list;tdl->next;i++,tdl=tdl->next)
-			;
-		tdl->next=td;
-	}
-	return i;
-}
-
-
-/* Everytime the dissector has finished dissecting a packet (and all
-   subdissectors have returned) and if the dissector has been made "tappable"
-   it will push some data to everyone tapping this layer by a call
-   to tap_queue_packet().
-   The first parameter is the tap_id returned by the register_tap()
-   call for this dissector (so the tap system can keep track of who it came
-   from and who is listening to it)
-   The second is the packet_info structure which many tap readers will find
-   interesting.
-   The third argument is specific to each tap point or NULL if no additional 
-   data is available to this tap.  A tap point in say IP will probably want to
-   push the IP header structure here. Same thing for TCP and ONCRPC.
-  
-   The pinfo and the specific pointer are what is supplied to every listener
-   in the read_callback() call made to every one currently listening to this
-   tap.
- 
-   The tap reader is responsible to know how to parse any structure pointed 
-   to by the tap specific data pointer.
-*/
-void 
-tap_queue_packet(int tap_id, packet_info *pinfo, void *tap_specific_data)
-{
-	tap_packet_t *tpt;
-
-	if(!tapping_is_active){
-		return;
-	}
-
-	/* get a free tap_packet structure, this is CHEAP */
-	tpt=tap_packet_list_free;
-	tap_packet_list_free=tpt->next;
-	tpt->next=tap_packet_list_queue;
-	tap_packet_list_queue=tpt;
-
-	tpt->tap_id=tap_id;
-	tpt->pinfo=pinfo;
-	tpt->tap_specific_data=tap_specific_data;
-
-}
-
-
-
-
-
-/* **********************************************************************
- * Functions used by file.c to drive the tap subsystem
- * ********************************************************************** */
-/* This function is used to delete/initialize the tap queue and prime an
-   epan_dissect_t with all the filters for tap listeners.
-   To free the tap queue, we just prepend the used queue to the free queue.
-*/
-void
-tap_queue_init(epan_dissect_t *edt)
-{
-	tap_packet_t *tpt;
-	tap_listener_t *tl;
-
-	/* nothing to do, just return */
-	if(!tap_listener_queue){
-		return;
-	}
-
-	tapping_is_active=TRUE;
-	tpt=tap_packet_list_queue;
-	if(tpt){
-		for(;tpt->next;tpt=tpt->next)
-			;
-
-		tpt->next=tap_packet_list_free;
-		tap_packet_list_free=tap_packet_list_queue;
-		tap_packet_list_queue=NULL;
-	}
-
-	/* loop over all tap listeners and build the list of all
-	   interesting hf_fields */
-	for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){
-		if(tl->code){
-			epan_dissect_prime_dfilter(edt, tl->code);
-		}
-	}
-}
-
-/* this function is called after a packet has been fully dissected to push the tapped
-   data to all extensions that has callbacks registered.
-*/
-void 
-tap_push_tapped_queue(epan_dissect_t *edt)
-{
-	tap_packet_t *tp;
-	tap_listener_t *tl;
-
-	/* nothing to do, just return */
-	if(!tapping_is_active){
-		return;
-	}
-
-	tapping_is_active=FALSE;
-
-	/* nothing to do, just return */
-	if(!tap_packet_list_queue){
-		return;
- 	}
-
-	/* loop over all tap listeners and call the listener callback
-	   for all packets that match the filter. */
-	for(tp=tap_packet_list_queue;tp;tp=tp->next){
-		for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){
-			if(tp->tap_id==tl->tap_id){
-				int passed=TRUE;
-				if(tl->code){
-					passed=dfilter_apply_edt(tl->code, edt);
-				}
-				if(passed && tl->packet){
-					tl->needs_redraw|=tl->packet(tl->tapdata, tp->pinfo, edt, tp->tap_specific_data);
-				}
-			}
-		}
-	}
-}
-
-/* This function is called when we need to reset all tap listeners, for example
-   when we open/start a new capture or if we need to rescan the packet list.
-*/
-void
-reset_tap_listeners(void)
-{
-	tap_listener_t *tl;
-
-	for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){
-		if(tl->reset){
-			tl->reset(tl->tapdata);
-		}
-		tl->needs_redraw=1;
-	}
-
-}
-
-
-/* This function is called when we need to redraw all tap listeners, for example
-   when we open/start a new capture or if we need to rescan the packet list.
-   this one should be called from a low priority thread say once every 3 seconds
- 
-   If draw_all is true, redraw all aplications regardless if they have 
-   changed or not.
-*/
-void
-draw_tap_listeners(gboolean draw_all)
-{
-	tap_listener_t *tl;
-
-	for(tl=(tap_listener_t *)tap_listener_queue;tl;tl=tl->next){
-		if(tl->needs_redraw || draw_all){
-			if(tl->draw){
-				tl->draw(tl->tapdata);
-			}
-		}
-		tl->needs_redraw=0;
-	}
-}
-
-
-
-/* **********************************************************************
- * Functions used by tap to
- * 1, register that a really simple extension is available for use by
- *    ethereal. 
- * 2, start tapping from a subdissector 
- * 3, close an already open tap
- * ********************************************************************** */
-/* this function will return the tap_id for the specific protocol tap
-   or 0 if no such tap was found.
- */
-int 
-find_tap_id(char *name)
-{
-	tap_dissector_t *td;
-	int i;
-
-	for(i=1,td=tap_dissector_list;td;i++,td=td->next) {
-		if(!strcmp(td->name,name)){
-			return i;
-		}
-	}
-	return 0;
-}
-
-/* this function attaches the tap_listener to the named tap.
- * function returns :
- *     NULL: ok.
- * non-NULL: error, return value points to GString containing error
- *           message.
- */
-GString *
-register_tap_listener(char *tapname, void *tapdata, char *fstring, tap_reset_cb reset, tap_packet_cb packet, tap_draw_cb draw)
-{
-	tap_listener_t *tl;
-	int tap_id;
-	GString *error_string;
-
-	tap_id=find_tap_id(tapname);
-	if(!tap_id){
-		error_string = g_string_new("");
-		g_string_sprintf(error_string, "Tap %s not found", tapname);
-		return error_string;
-	}
-
-	tl=g_malloc(sizeof(tap_listener_t));
-	tl->code=NULL;
-	tl->needs_redraw=1;
-	if(fstring){
-		if(!dfilter_compile(fstring, &tl->code)){
-			error_string = g_string_new("");
-			g_string_sprintf(error_string,
-			    "Filter \"%s\" is invalid - %s",
-			    fstring, dfilter_error_msg);
-			g_free(tl);
-			return error_string;
-		} else {
-			num_tap_filters++;
-		}
-	}
-
-	tl->tap_id=tap_id;
-	tl->tapdata=tapdata;
-	tl->reset=reset;
-	tl->packet=packet;
-	tl->draw=draw;
-	tl->next=(tap_listener_t *)tap_listener_queue;
-
-	tap_listener_queue=tl;
-
-	return NULL;
-}
-
-/* this function removes a tap listener
- */
-void
-remove_tap_listener(void *tapdata)
-{
-	tap_listener_t *tl=NULL,*tl2;
-
-	if(!tap_listener_queue){
-		return;
-	}
-
-	if(tap_listener_queue->tapdata==tapdata){
-		tl=(tap_listener_t *)tap_listener_queue;
-		tap_listener_queue=tap_listener_queue->next;
-	} else {
-		for(tl2=(tap_listener_t *)tap_listener_queue;tl2->next;tl2=tl2->next){
-			if(tl2->next->tapdata==tapdata){
-				tl=tl2->next;
-				tl2->next=tl2->next->next;
-				break;
-			}
-			
-		}
-	}
-
-	if(tl){
-		if(tl->code){
-			dfilter_free(tl->code);
-			num_tap_filters--;
-		}
-		g_free(tl);
-	}
-
-	return;
-}
-
-/*
- * Return TRUE if we have tap listeners, FALSE otherwise.
- * Checking "num_tap_filters" isn't the right way to check whether we need
- * to do any dissection in order to run taps, as not all taps necessarily
- * have filters, and "num_tap_filters" is the number of tap filters, not
- * the number of tap listeners; it's only the right way to check whether
- * we need to build a protocol tree when doing dissection.
- */
-gboolean
-have_tap_listeners(void)
-{
-	return tap_listener_queue != NULL;
-}
diff -urN ethereal-0.10.6/tap.h ethereal-0.10.7/tap.h
--- ethereal-0.10.6/tap.h	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/tap.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,54 +0,0 @@
-/* tap.h
- * packet tap interface   2002 Ronnie Sahlberg
- *
- * $Id: tap.h 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- * 
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifndef _TAP_H_
-#define _TAP_H_
-
-#include "epan/epan.h"
-
-/* With MSVC and a libethereal.dll, we need a 
- * special declaration of num_tap_filters.
- */
-ETH_VAR_IMPORT int num_tap_filters;
-
-typedef void (*tap_reset_cb)(void *tapdata);
-typedef int  (*tap_packet_cb)(void *tapdata, packet_info *pinfo, epan_dissect_t *edt, void *data);
-typedef void (*tap_draw_cb)(void *tapdata);
-
-
-extern void tap_init(void);
-extern int register_tap(char *name);
-extern int find_tap_id(char *name);
-extern void tap_queue_packet(int tap_id, packet_info *pinfo, void *tap_specific_data);
-extern void tap_queue_init(epan_dissect_t *edt);
-extern void tap_push_tapped_queue(epan_dissect_t *edt);
-extern void reset_tap_listeners(void);
-extern void draw_tap_listeners(gboolean draw_all);
-extern GString *register_tap_listener(char *tapname, void *tapdata,
-    char *fstring, tap_reset_cb tap_reset, tap_packet_cb tap_packet,
-    tap_draw_cb tap_draw);
-extern void remove_tap_listener(void *tapdata);
-extern gboolean have_tap_listeners(void);
-
-#endif
diff -urN ethereal-0.10.6/tethereal.c ethereal-0.10.7/tethereal.c
--- ethereal-0.10.6/tethereal.c	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/tethereal.c	2004-10-20 17:34:33.000000000 -0500
@@ -1,6 +1,6 @@
 /* tethereal.c
  *
- * $Id: tethereal.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: tethereal.c 12356 2004-10-20 15:30:19Z gerald $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -83,11 +83,12 @@
 #include <epan/packet.h>
 #include "file.h"
 #include "disabled_protos.h"
-#include "prefs.h"
-#include "column.h"
+#include <epan/prefs.h>
+#include <epan/column.h>
 #include "print.h"
 #include <epan/addr_resolv.h>
 #include "util.h"
+#include "clopts_common.h"
 #include "version_info.h"
 #ifdef HAVE_LIBPCAP
 #include "pcap-util.h"
@@ -99,7 +100,7 @@
 #include "capture_stop_conditions.h"
 #include "ringbuffer.h"
 #include <epan/epan_dissect.h>
-#include "tap.h"
+#include <epan/tap.h>
 #include <epan/timestamp.h>
 
 #ifdef HAVE_LIBPCAP
@@ -873,22 +874,7 @@
 
      We do this here to mirror what happens in the GTK+ version, although
      it's not necessary here. */
-  if (argc >= 2 && strcmp(argv[1], "-G") == 0) {
-    if (argc == 2)
-      proto_registrar_dump_fields();
-    else {
-      if (strcmp(argv[2], "fields") == 0)
-        proto_registrar_dump_fields();
-      else if (strcmp(argv[2], "protocols") == 0)
-        proto_registrar_dump_protocols();
-      else {
-        fprintf(stderr, "tethereal: Invalid \"%s\" option for -G flag\n",
-                argv[2]);
-        exit(1);
-      }
-    }
-    exit(0);
-  }
+  handle_dashG_option(argc, argv, "tethereal");
 
   /* Set the C-language locale to the native environment. */
   setlocale(LC_ALL, "");
@@ -1524,16 +1510,16 @@
       epan_cleanup();
 #ifdef HAVE_PCAP_OPEN_DEAD
       {
-        pcap_t *p;
+        pcap_t *pc;
 
-        p = pcap_open_dead(DLT_EN10MB, MIN_PACKET_SIZE);
-        if (p != NULL) {
-          if (pcap_compile(p, &fcode, rfilter, 0, 0) != -1) {
+        pc = pcap_open_dead(DLT_EN10MB, MIN_PACKET_SIZE);
+        if (pc != NULL) {
+          if (pcap_compile(pc, &fcode, rfilter, 0, 0) != -1) {
             fprintf(stderr,
               "  Note: That display filter code looks like a valid capture filter;\n"
               "        maybe you mixed them up?\n");
           }
-          pcap_close(p);
+          pcap_close(pc);
         }
       }
 #endif
@@ -1892,14 +1878,14 @@
         capture_opts.ringbuffer_num_files);
       if (cfile.save_file_fd != -1) {
         ld.pdh = ringbuf_init_wtap_dump_fdopen(out_file_type, ld.linktype,
-          pcap_snapshot(ld.pch), &err);
+          file_snaplen, &err);
       } else {
       	err = errno;	/* "ringbuf_init()" failed */
         ld.pdh = NULL;
       }
     } else {
       ld.pdh = wtap_dump_open(cfile.save_file, out_file_type,
-		 ld.linktype, pcap_snapshot(ld.pch), &err);
+		 ld.linktype, file_snaplen, &err);
     }
 
     if (ld.pdh == NULL) {
@@ -2175,14 +2161,14 @@
 {
   struct wtap_pkthdr whdr;
   union wtap_pseudo_header pseudo_header;
-  loop_data *ld = (loop_data *) user;
+  loop_data *ldat = (loop_data *) user;
   int loop_err;
   int err;
 
   /* Convert from libpcap to Wiretap format.
      If that fails, ignore the packet (wtap_process_pcap_packet has
      written an error message). */
-  pd = wtap_process_pcap_packet(ld->linktype, phdr, pd, &pseudo_header,
+  pd = wtap_process_pcap_packet(ldat->linktype, phdr, pd, &pseudo_header,
 				&whdr, &err);
   if (pd == NULL)
     return;
@@ -2203,17 +2189,17 @@
    */
   if (cnd_ring_timeout != NULL && cnd_eval(cnd_ring_timeout)) {
     /* time elapsed for this ring file, switch to the next */
-    if (ringbuf_switch_file(&cfile, &ld->pdh, &loop_err)) {
+    if (ringbuf_switch_file(&cfile, &ldat->pdh, &loop_err)) {
       /* File switch succeeded: reset the condition */
       cnd_reset(cnd_ring_timeout);
     } else {
       /* File switch failed: stop here */
       /* XXX - we should do something with "loop_err" */
-      ld->go = FALSE;
+      ldat->go = FALSE;
     }
   }
 
-  if (!process_packet(&cfile, ld->pdh, 0, &whdr, &pseudo_header, pd, &err)) {
+  if (!process_packet(&cfile, ldat->pdh, 0, &whdr, &pseudo_header, pd, &err)) {
     /* Error writing to a capture file */
     if (!quiet) {
       /* We're capturing packets, so (if -q not specified) we're printing
@@ -2221,8 +2207,8 @@
       fprintf(stderr, "\n");
     }
     show_capture_file_io_error(cfile.save_file, err, FALSE);
-    pcap_close(ld->pch);
-    wtap_dump_close(ld->pdh, &err);
+    pcap_close(ldat->pch);
+    wtap_dump_close(ldat->pdh, &err);
     exit(2);
   }
 
@@ -2378,10 +2364,12 @@
       goto out;
     }
   } else {
-    if (!write_preamble(cf)) {
-      err = errno;
-      show_print_file_io_error(err);
-      goto out;
+    if (print_packet_info) {
+      if (!write_preamble(cf)) {
+        err = errno;
+        show_print_file_io_error(err);
+        goto out;
+      }
     }
     pdh = NULL;
   }
@@ -2440,9 +2428,11 @@
       if (!wtap_dump_close(pdh, &err))
         show_capture_file_io_error(cfile.save_file, err, TRUE);
     } else {
-      if (!write_finale()) {
-        err = errno;
-        show_print_file_io_error(err);
+      if (print_packet_info) {
+        if (!write_finale()) {
+          err = errno;
+          show_print_file_io_error(err);
+        }
       }
     }
   }
@@ -3256,9 +3246,9 @@
 /* Take care of byte order in the libpcap headers read from pipes.
  * (function taken from wiretap/libpcap.c) */
 static void
-adjust_header(loop_data *ld, struct pcap_hdr *hdr, struct pcaprec_hdr *rechdr)
+adjust_header(loop_data *ldat, struct pcap_hdr *hdr, struct pcaprec_hdr *rechdr)
 {
-  if (ld->byte_swapped) {
+  if (ldat->byte_swapped) {
     /* Byte-swap the record header fields. */
     rechdr->ts_sec = BSWAP32(rechdr->ts_sec);
     rechdr->ts_usec = BSWAP32(rechdr->ts_usec);
@@ -3290,7 +3280,7 @@
  * N.B. : we can't read the libpcap formats used in RedHat 6.1 or SuSE 6.3
  * because we can't seek on pipes (see wiretap/libpcap.c for details) */
 static int
-pipe_open_live(char *pipename, struct pcap_hdr *hdr, loop_data *ld,
+pipe_open_live(char *pipename, struct pcap_hdr *hdr, loop_data *ldat,
                  char *errmsg, int errmsgl)
 {
   struct stat pipe_stat;
@@ -3307,12 +3297,12 @@
   else {
     if (stat(pipename, &pipe_stat) < 0) {
       if (errno == ENOENT || errno == ENOTDIR)
-        ld->pipe_err = PIPNEXIST;
+        ldat->pipe_err = PIPNEXIST;
       else {
         snprintf(errmsg, errmsgl,
           "The capture session could not be initiated "
           "due to error on pipe: %s", strerror(errno));
-        ld->pipe_err = PIPERR;
+        ldat->pipe_err = PIPERR;
       }
       return -1;
     }
@@ -3322,12 +3312,12 @@
          * Assume the user specified an interface on a system where
          * interfaces are in /dev.  Pretend we haven't seen it.
          */
-         ld->pipe_err = PIPNEXIST;
+         ldat->pipe_err = PIPNEXIST;
       } else {
         snprintf(errmsg, errmsgl,
             "The capture session could not be initiated because\n"
             "\"%s\" is neither an interface nor a pipe", pipename);
-        ld->pipe_err = PIPERR;
+        ldat->pipe_err = PIPERR;
       }
       return -1;
     }
@@ -3336,12 +3326,12 @@
       snprintf(errmsg, errmsgl,
           "The capture session could not be initiated "
           "due to error on pipe open: %s", strerror(errno));
-      ld->pipe_err = PIPERR;
+      ldat->pipe_err = PIPERR;
       return -1;
     }
   }
 
-  ld->from_pipe = TRUE;
+  ldat->from_pipe = TRUE;
 
   /* read the pcap header */
   bytes_read = 0;
@@ -3362,28 +3352,28 @@
   case PCAP_MAGIC:
     /* Host that wrote it has our byte order, and was running
        a program using either standard or ss990417 libpcap. */
-    ld->byte_swapped = FALSE;
-    ld->modified = FALSE;
+    ldat->byte_swapped = FALSE;
+    ldat->modified = FALSE;
     break;
   case PCAP_MODIFIED_MAGIC:
     /* Host that wrote it has our byte order, but was running
        a program using either ss990915 or ss991029 libpcap. */
-    ld->byte_swapped = FALSE;
-    ld->modified = TRUE;
+    ldat->byte_swapped = FALSE;
+    ldat->modified = TRUE;
     break;
   case PCAP_SWAPPED_MAGIC:
     /* Host that wrote it has a byte order opposite to ours,
        and was running a program using either standard or
        ss990417 libpcap. */
-    ld->byte_swapped = TRUE;
-    ld->modified = FALSE;
+    ldat->byte_swapped = TRUE;
+    ldat->modified = FALSE;
     break;
   case PCAP_SWAPPED_MODIFIED_MAGIC:
     /* Host that wrote it out has a byte order opposite to
        ours, and was running a program using either ss990915
        or ss991029 libpcap. */
-    ld->byte_swapped = TRUE;
-    ld->modified = TRUE;
+    ldat->byte_swapped = TRUE;
+    ldat->modified = TRUE;
     break;
   default:
     /* Not a "libpcap" type we know about. */
@@ -3407,7 +3397,7 @@
     bytes_read += b;
   }
 
-  if (ld->byte_swapped) {
+  if (ldat->byte_swapped) {
     /* Byte-swap the header fields about which we care. */
     hdr->version_major = BSWAP16(hdr->version_major);
     hdr->version_minor = BSWAP16(hdr->version_minor);
@@ -3420,12 +3410,12 @@
     goto error;
   }
 
-  ld->pipe_state = STATE_EXPECT_REC_HDR;
-  ld->pipe_err = PIPOK;
+  ldat->pipe_state = STATE_EXPECT_REC_HDR;
+  ldat->pipe_err = PIPOK;
   return fd;
 
 error:
-  ld->pipe_err = PIPERR;
+  ldat->pipe_err = PIPERR;
   close(fd);
   return -1;
 
@@ -3434,7 +3424,7 @@
  * header, write the record in the capture file, and update capture statistics. */
 
 static int
-pipe_dispatch(int fd, loop_data *ld, struct pcap_hdr *hdr,
+pipe_dispatch(int fd, loop_data *ldat, struct pcap_hdr *hdr,
                 struct pcaprec_modified_hdr *rechdr, guchar *data,
                 char *errmsg, int errmsgl)
 {
@@ -3443,18 +3433,18 @@
   enum { PD_REC_HDR_READ, PD_DATA_READ, PD_PIPE_EOF, PD_PIPE_ERR,
           PD_ERR } result;
 
-  switch (ld->pipe_state) {
+  switch (ldat->pipe_state) {
 
   case STATE_EXPECT_REC_HDR:
-    ld->bytes_to_read = ld->modified ?
+    ldat->bytes_to_read = ldat->modified ?
       sizeof(struct pcaprec_modified_hdr) : sizeof(struct pcaprec_hdr);
-    ld->bytes_read = 0;
-    ld->pipe_state = STATE_READ_REC_HDR;
+    ldat->bytes_read = 0;
+    ldat->pipe_state = STATE_READ_REC_HDR;
     /* Fall through */
 
   case STATE_READ_REC_HDR:
-    b = read(fd, ((char *)rechdr)+ld->bytes_read,
-      ld->bytes_to_read - ld->bytes_read);
+    b = read(fd, ((char *)rechdr)+ldat->bytes_read,
+      ldat->bytes_to_read - ldat->bytes_read);
     if (b <= 0) {
       if (b == 0)
         result = PD_PIPE_EOF;
@@ -3462,18 +3452,18 @@
         result = PD_PIPE_ERR;
       break;
     }
-    if ((ld->bytes_read += b) < ld->bytes_to_read)
+    if ((ldat->bytes_read += b) < ldat->bytes_to_read)
         return 0;
     result = PD_REC_HDR_READ;
     break;
 
   case STATE_EXPECT_DATA:
-    ld->bytes_read = 0;
-    ld->pipe_state = STATE_READ_DATA;
+    ldat->bytes_read = 0;
+    ldat->pipe_state = STATE_READ_DATA;
     /* Fall through */
 
   case STATE_READ_DATA:
-    b = read(fd, data+ld->bytes_read, rechdr->hdr.incl_len - ld->bytes_read);
+    b = read(fd, data+ldat->bytes_read, rechdr->hdr.incl_len - ldat->bytes_read);
     if (b <= 0) {
       if (b == 0)
         result = PD_PIPE_EOF;
@@ -3481,7 +3471,7 @@
         result = PD_PIPE_ERR;
       break;
     }
-    if ((ld->bytes_read += b) < rechdr->hdr.incl_len)
+    if ((ldat->bytes_read += b) < rechdr->hdr.incl_len)
       return 0;
     result = PD_DATA_READ;
     break;
@@ -3490,7 +3480,7 @@
     snprintf(errmsg, errmsgl, "pipe_dispatch: invalid state");
     result = PD_ERR;
 
-  } /* switch (ld->pipe_state) */
+  } /* switch (ldat->pipe_state) */
 
   /*
    * We've now read as much data as we were expecting, so process it.
@@ -3499,13 +3489,13 @@
 
   case PD_REC_HDR_READ:
     /* We've read the header. Take care of byte order. */
-    adjust_header(ld, hdr, &rechdr->hdr);
+    adjust_header(ldat, hdr, &rechdr->hdr);
     if (rechdr->hdr.incl_len > WTAP_MAX_PACKET_SIZE) {
       snprintf(errmsg, errmsgl, "Frame %u too long (%d bytes)",
-        ld->packet_count+1, rechdr->hdr.incl_len);
+        ldat->packet_count+1, rechdr->hdr.incl_len);
       break;
     }
-    ld->pipe_state = STATE_EXPECT_DATA;
+    ldat->pipe_state = STATE_EXPECT_DATA;
     return 0;
 
   case PD_DATA_READ:
@@ -3515,13 +3505,13 @@
     phdr.caplen = rechdr->hdr.incl_len;
     phdr.len = rechdr->hdr.orig_len;
 
-    capture_pcap_cb((guchar *)ld, &phdr, data);
+    capture_pcap_cb((guchar *)ldat, &phdr, data);
 
-    ld->pipe_state = STATE_EXPECT_REC_HDR;
+    ldat->pipe_state = STATE_EXPECT_REC_HDR;
     return 1;
 
   case PD_PIPE_EOF:
-    ld->pipe_err = PIPEOF;
+    ldat->pipe_err = PIPEOF;
     return -1;
 
   case PD_PIPE_ERR:
@@ -3532,7 +3522,7 @@
     break;
   }
 
-  ld->pipe_err = PIPERR;
+  ldat->pipe_err = PIPERR;
   /* Return here rather than inside the switch to prevent GCC warning */
   return -1;
 }
diff -urN ethereal-0.10.6/tools/Makefile.in ethereal-0.10.7/tools/Makefile.in
--- ethereal-0.10.6/tools/Makefile.in	2004-08-12 21:04:25.000000000 -0500
+++ ethereal-0.10.7/tools/Makefile.in	2004-10-20 21:50:21.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -97,6 +97,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -108,10 +111,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -192,8 +198,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -468,7 +474,7 @@
 installcheck: installcheck-recursive
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
diff -urN ethereal-0.10.6/tools/lemon/Makefile.in ethereal-0.10.7/tools/lemon/Makefile.in
--- ethereal-0.10.6/tools/lemon/Makefile.in	2004-08-12 21:04:25.000000000 -0500
+++ ethereal-0.10.7/tools/lemon/Makefile.in	2004-10-20 21:50:21.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -102,6 +102,9 @@
 GTK_CFLAGS = @GTK_CFLAGS@
 GTK_CONFIG = @GTK_CONFIG@
 GTK_LIBS = @GTK_LIBS@
+G_ASCII_STRTOULL_C = @G_ASCII_STRTOULL_C@
+G_ASCII_STRTOULL_LO = @G_ASCII_STRTOULL_LO@
+G_ASCII_STRTOULL_O = @G_ASCII_STRTOULL_O@
 HAVE_DOXYGEN = @HAVE_DOXYGEN@
 HAVE_DOXYGEN_FALSE = @HAVE_DOXYGEN_FALSE@
 HAVE_DOXYGEN_TRUE = @HAVE_DOXYGEN_TRUE@
@@ -113,10 +116,13 @@
 HAVE_RPM = @HAVE_RPM@
 HAVE_SVR4_PACKAGING = @HAVE_SVR4_PACKAGING@
 INET_ATON_C = @INET_ATON_C@
+INET_ATON_LO = @INET_ATON_LO@
 INET_ATON_O = @INET_ATON_O@
 INET_NTOP_C = @INET_NTOP_C@
+INET_NTOP_LO = @INET_NTOP_LO@
 INET_NTOP_O = @INET_NTOP_O@
 INET_PTON_C = @INET_PTON_C@
+INET_PTON_LO = @INET_PTON_LO@
 INET_PTON_O = @INET_PTON_O@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -197,8 +203,8 @@
 build_cpu = @build_cpu@
 build_os = @build_os@
 build_vendor = @build_vendor@
-capinfo_bin = @capinfo_bin@
-capinfo_man = @capinfo_man@
+capinfos_bin = @capinfos_bin@
+capinfos_man = @capinfos_man@
 datadir = @datadir@
 dftest_bin = @dftest_bin@
 editcap_bin = @editcap_bin@
@@ -464,7 +470,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -486,7 +492,6 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-libtool distclean-tags
 
@@ -511,7 +516,6 @@
 maintainer-clean: maintainer-clean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/tools/win32-setup.sh ethereal-0.10.7/tools/win32-setup.sh
--- ethereal-0.10.6/tools/win32-setup.sh	2004-08-12 17:41:27.000000000 -0500
+++ ethereal-0.10.7/tools/win32-setup.sh	2004-10-20 17:34:16.000000000 -0500
@@ -1,6 +1,7 @@
 #!/bin/sh
 
-DOWNLOAD_PREFIX="http://www.ethereal.com/distribution/win32/development"
+# DOWNLOAD_PREFIX="http://www.ethereal.com/distribution/win32/development"
+DOWNLOAD_PREFIX="http://anonsvn.ethereal.com/ethereal-win32-libs/trunk/packages"
 
 err_exit () {
 	echo "ERROR: $1"
@@ -46,12 +47,16 @@
 	PACKAGE_PATH=$4
 	PACKAGE=`basename "$PACKAGE_PATH"`
 	echo "****** $PACKAGE ******"
-	if [ -z "$http_proxy" ] ; then
-		echo "No HTTP proxy specified (http_proxy is empty)."
+	if [ -z "$http_proxy" -a -z "$HTTP_PROXY" ] ; then
+		echo "No HTTP proxy specified (http_proxy and HTTP_PROXY are empty)."
 		use_proxy="-Y off"
 	else
-		echo "HTTP proxy ($http_proxy) has been specified and will be used."
 		use_proxy="-Y on"
+		if [ -z "$http_proxy" ] ; then
+			echo "HTTP proxy ($HTTP_PROXY) has been specified and will be used."
+		else
+			echo "HTTP proxy ($http_proxy) has been specified and will be used."
+		fi
 	fi
 	echo "Downloading $4 into $DEST_PATH, installing into $3"
 	if [ ! -d "$DEST_PATH/$DEST_SUBDIR" ] ; then
diff -urN ethereal-0.10.6/util.c ethereal-0.10.7/util.c
--- ethereal-0.10.6/util.c	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/util.c	2004-10-20 17:34:33.000000000 -0500
@@ -1,7 +1,7 @@
 /* util.c
  * Utility routines
  *
- * $Id: util.c 11615 2004-08-06 19:57:49Z guy $
+ * $Id: util.c 11972 2004-09-11 23:03:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -161,7 +161,7 @@
 }
 
 static char *tmpdir = NULL;
-#ifdef WIN32
+#ifdef _WIN32
 static char *temp = NULL;
 #endif
 static char *E_tmpdir;
@@ -180,7 +180,7 @@
 	if (!initialized) {
 		if ((dir = getenv("TMPDIR")) != NULL)
 			tmpdir = setup_tmpdir(dir);
-#ifdef WIN32
+#ifdef _WIN32
 		if ((dir = getenv("TEMP")) != NULL)
 			temp = setup_tmpdir(dir);
 #endif
@@ -195,7 +195,7 @@
 			return fd;
 	}
 
-#ifdef WIN32
+#ifdef _WIN32
 	if (temp != NULL) {
 		fd = try_tempfile(namebuf, namebuflen, temp, pfx);
 		if (fd != -1)
@@ -210,119 +210,6 @@
 	return try_tempfile(namebuf, namebuflen, G_DIR_SEPARATOR_S "tmp", pfx);
 }
 
-/* ASCII/EBCDIC conversion tables from
- * http://www.room42.com/store/computer_center/code_tables.shtml
- */
-#if 0
-static guint8 ASCII_translate_EBCDIC [ 256 ] = {
-    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
-    0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
-    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
-    0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
-    0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, 0x4D,
-    0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61,
-    0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
-    0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F,
-    0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8,
-    0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
-    0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
-    0xE8, 0xE9, 0xAD, 0xE0, 0xBD, 0x5F, 0x6D,
-    0x7D, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
-    0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
-    0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
-    0xA8, 0xA9, 0xC0, 0x6A, 0xD0, 0xA1, 0x4B,
-    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
-    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
-    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
-    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
-    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
-    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
-    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
-    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
-    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
-    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
-    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
-    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
-    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
-    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
-    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
-    0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B
-};
-
-void
-ASCII_to_EBCDIC(guint8 *buf, guint bytes)
-{
-	guint	i;
-	guint8	*bufptr;
-
-	bufptr = buf;
-
-	for (i = 0; i < bytes; i++, bufptr++) {
-		*bufptr = ASCII_translate_EBCDIC[*bufptr];
-	}
-}
-
-guint8
-ASCII_to_EBCDIC1(guint8 c)
-{
-	return ASCII_translate_EBCDIC[c];
-}
-#endif
-
-static guint8 EBCDIC_translate_ASCII [ 256 ] = {
-    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
-    0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
-    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
-    0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
-    0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
-    0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
-    0x2E, 0x2E, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
-    0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x2E, 0x3F,
-    0x20, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
-    0x2E, 0x2E, 0x2E, 0x3C, 0x28, 0x2B, 0x7C,
-    0x26, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
-    0x2E, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0x5E,
-    0x2D, 0x2F, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
-    0x2E, 0x7C, 0x2C, 0x25, 0x5F, 0x3E, 0x3F,
-    0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
-    0x2E, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22,
-    0x2E, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
-    0x69, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
-    0x2E, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71,
-    0x72, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
-    0x2E, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
-    0x7A, 0x2E, 0x2E, 0x2E, 0x5B, 0x2E, 0x2E,
-    0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
-    0x2E, 0x2E, 0x2E, 0x2E, 0x5D, 0x2E, 0x2E,
-    0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
-    0x49, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
-    0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51,
-    0x52, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
-    0x5C, 0x2E, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
-    0x5A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
-    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
-    0x39, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E
-};
-
-void
-EBCDIC_to_ASCII(guint8 *buf, guint bytes)
-{
-	guint	i;
-	guint8	*bufptr;
-
-	bufptr = buf;
-
-	for (i = 0; i < bytes; i++, bufptr++) {
-		*bufptr = EBCDIC_translate_ASCII[*bufptr];
-	}
-}
-
-guint8
-EBCDIC_to_ASCII1(guint8 c)
-{
-	return EBCDIC_translate_ASCII[c];
-}
-
 /* Compute the difference between two seconds/microseconds time stamps. */
 void
 compute_timestamp_diff(gint *diffsec, gint *diffusec,
@@ -367,39 +254,6 @@
   }
 }
 
-/* Decode a base64 string in-place - simple and slow algorithm.
-   Return length of result. Taken from rproxy/librsync/base64.c by
-   Andrew Tridgell. */
-
-size_t epan_base64_decode(char *s)
-{
-	static const char b64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-	int bit_offset, byte_offset, idx, i, n;
-	unsigned char *d = (unsigned char *)s;
-	char *p;
-
-	n=i=0;
-
-	while (*s && (p=strchr(b64, *s))) {
-		idx = (int)(p - b64);
-		byte_offset = (i*6)/8;
-		bit_offset = (i*6)%8;
-		d[byte_offset] &= ~((1<<(8-bit_offset))-1);
-		if (bit_offset < 3) {
-			d[byte_offset] |= (idx << (2-bit_offset));
-			n = byte_offset+1;
-		} else {
-			d[byte_offset] |= (idx >> (bit_offset-2));
-			d[byte_offset+1] = 0;
-			d[byte_offset+1] |= (idx << (8-(bit_offset-2))) & 0xFF;
-			n = byte_offset+2;
-		}
-		s++; i++;
-	}
-
-	return n;
-}
-
 /* Try to figure out if we're remotely connected, e.g. via ssh or
    Terminal Server, and create a capture filter that matches aspects of the
    connection.  We match the following environment variables:
diff -urN ethereal-0.10.6/util.h ethereal-0.10.7/util.h
--- ethereal-0.10.6/util.h	2004-08-12 17:41:49.000000000 -0500
+++ ethereal-0.10.7/util.h	2004-10-20 17:34:33.000000000 -0500
@@ -1,7 +1,7 @@
 /* util.h
  * Utility definitions
  *
- * $Id: util.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: util.h 12172 2004-10-01 12:32:46Z jmayer $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -35,17 +35,10 @@
  * Collect command-line arguments as a string consisting of the arguments,
  * separated by spaces.
  */
-char *get_args_as_string(int argc, char **argv, int optind);
-
-void ASCII_to_EBCDIC(guint8 *buf, guint bytes);
-guint8 ASCII_to_EBCDIC1(guint8 c);
-void EBCDIC_to_ASCII(guint8 *buf, guint bytes);
-guint8 EBCDIC_to_ASCII1(guint8 c);
+char *get_args_as_string(int, char **, int);
 
 /* Compute the difference between two seconds/microseconds time stamps. */
 void compute_timestamp_diff(gint *, gint *, guint32, guint32, guint32, guint32);
-/* In-place decoding of a base64 string. */
-size_t epan_base64_decode(char *s);
 
 /* Create a capture filter for the connection */
 char *get_conn_cfilter(void);
diff -urN ethereal-0.10.6/version_info.c ethereal-0.10.7/version_info.c
--- ethereal-0.10.6/version_info.c	2004-08-12 17:41:39.000000000 -0500
+++ ethereal-0.10.7/version_info.c	2004-10-20 17:34:26.000000000 -0500
@@ -1,7 +1,7 @@
 /* version_info.c
  * Routines to report version information for stuff used by Ethereal
  *
- * $Id: version_info.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: version_info.c 11972 2004-09-11 23:03:36Z guy $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@ethereal.com>
@@ -201,7 +201,7 @@
 void
 get_runtime_version_info(GString *str)
 {
-#if defined(WIN32)
+#if defined(_WIN32)
 	OSVERSIONINFO info;
 #elif defined(HAVE_SYS_UTSNAME_H)
 	struct utsname name;
@@ -210,7 +210,7 @@
 	get_runtime_pcap_version(str);
 
 	g_string_append(str, "on ");
-#if defined(WIN32)
+#if defined(_WIN32)
 	info.dwOSVersionInfoSize = sizeof info;
 	if (!GetVersionEx(&info)) {
 		/*
diff -urN ethereal-0.10.6/wiretap/Makefile.in ethereal-0.10.7/wiretap/Makefile.in
--- ethereal-0.10.6/wiretap/Makefile.in	2004-08-12 21:04:31.000000000 -0500
+++ ethereal-0.10.7/wiretap/Makefile.in	2004-10-20 21:50:27.000000000 -0500
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.7.7 from Makefile.am.
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
 # @configure_input@
 
 # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
@@ -737,7 +737,7 @@
 installcheck: installcheck-am
 install-strip:
 	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  INSTALL_STRIP_FLAG=-s \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 	  `test -z '$(STRIP)' || \
 	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
@@ -764,7 +764,6 @@
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 distclean-am: clean-am distclean-compile distclean-generic distclean-hdr \
 	distclean-libtool distclean-tags
 
@@ -791,7 +790,6 @@
 	-rm -rf $(top_srcdir)/autom4te.cache
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
diff -urN ethereal-0.10.6/wiretap/Makefile.nmake ethereal-0.10.7/wiretap/Makefile.nmake
--- ethereal-0.10.6/wiretap/Makefile.nmake	2004-08-12 17:42:34.000000000 -0500
+++ ethereal-0.10.7/wiretap/Makefile.nmake	2004-10-20 17:35:05.000000000 -0500
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.nmake 11528 2004-07-26 20:46:54Z guy $
+# $Id: Makefile.nmake 11980 2004-09-12 23:29:33Z ulfl $
 #
 
 include ..\config.nmake
@@ -12,8 +12,10 @@
 CFLAGS=-DHAVE_CONFIG_H $(GLIB_CFLAGS) $(ZLIB_CFLAGS) /I$(PCAP_DIR)/include \
 	-D_U_="" $(LOCAL_CFLAGS)
 
+CVARSDLL=-DWIN32 -DNULL=0 -D_MT -D_DLL
+
 .c.obj::
-	$(CC) $(cvarsdll) $(CFLAGS) -Fd.\ -c $<
+	$(CC) $(CVARSDLL) $(CFLAGS) -Fd.\ -c $<
 
 OBJECTS=$(NONGENERATED_C_FILES:.c=.obj) $(GENERATED_C_FILES:.c=.obj)
 
diff -urN ethereal-0.10.6/wiretap/aclocal.m4 ethereal-0.10.7/wiretap/aclocal.m4
--- ethereal-0.10.6/wiretap/aclocal.m4	2004-08-12 21:04:28.000000000 -0500
+++ ethereal-0.10.7/wiretap/aclocal.m4	2004-10-20 21:50:24.000000000 -0500
@@ -1,4 +1,4 @@
-# generated automatically by aclocal 1.7.7 -*- Autoconf -*-
+# generated automatically by aclocal 1.7.9 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
 # Free Software Foundation, Inc.
@@ -400,7 +400,7 @@
 # Call AM_AUTOMAKE_VERSION so it can be traced.
 # This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-	 [AM_AUTOMAKE_VERSION([1.7.7])])
+	 [AM_AUTOMAKE_VERSION([1.7.9])])
 
 # Helper functions for option handling.                    -*- Autoconf -*-
 
diff -urN ethereal-0.10.6/wiretap/ascend.c ethereal-0.10.7/wiretap/ascend.c
--- ethereal-0.10.6/wiretap/ascend.c	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/wiretap/ascend.c	2004-10-20 17:35:06.000000000 -0500
@@ -1,6 +1,6 @@
 /* ascend.c
  *
- * $Id: ascend.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: ascend.c 12171 2004-10-01 12:31:52Z jmayer $
  *
  * Wiretap Library
  * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
@@ -104,7 +104,7 @@
 static gboolean ascend_read(wtap *wth, int *err, gchar **err_info,
 	long *data_offset);
 static gboolean ascend_seek_read(wtap *wth, long seek_off,
-	union wtap_pseudo_header *pseudo_header, guint8 *pd, int len,
+	union wtap_pseudo_header *pseudo_head, guint8 *pd, int len,
 	int *err, gchar **err_info);
 static void ascend_close(wtap *wth);
 
@@ -340,12 +340,12 @@
 }
 
 static gboolean ascend_seek_read(wtap *wth, long seek_off,
-	union wtap_pseudo_header *pseudo_header, guint8 *pd, int len,
+	union wtap_pseudo_header *pseudo_head, guint8 *pd, int len,
 	int *err, gchar **err_info)
 {
   if (file_seek(wth->random_fh, seek_off, SEEK_SET, err) == -1)
     return FALSE;
-  if (! parse_ascend(wth->random_fh, pd, &pseudo_header->ascend, NULL, len)) {
+  if (! parse_ascend(wth->random_fh, pd, &pseudo_head->ascend, NULL, len)) {
     *err = WTAP_ERR_BAD_RECORD;
     *err_info = g_strdup((ascend_parse_error != NULL) ? ascend_parse_error : "parse error");
     return FALSE;
diff -urN ethereal-0.10.6/wiretap/dbs-etherwatch.c ethereal-0.10.7/wiretap/dbs-etherwatch.c
--- ethereal-0.10.6/wiretap/dbs-etherwatch.c	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/wiretap/dbs-etherwatch.c	2004-10-20 17:35:06.000000000 -0500
@@ -1,6 +1,6 @@
 /* dbs-etherwatch.c
  *
- * $Id: dbs-etherwatch.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: dbs-etherwatch.c 12171 2004-10-01 12:31:52Z jmayer $
  *
  * Wiretap Library
  * Copyright (c) 2001 by Marc Milgram <ethereal@mmilgram.NOSPAMmail.net>
@@ -318,7 +318,7 @@
 	int	num_items_scanned;
 	int	eth_hdr_len, pkt_len, csec;
 	int length_pos, length_from, length;
-	struct tm time;
+	struct tm tm;
 	char mon[4];
 	gchar *p;
 	static gchar months[] = "JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC";
@@ -390,9 +390,9 @@
 	num_items_scanned = sscanf(line + LENGTH_POS,
 				"%d byte buffer at %d-%3s-%d %d:%d:%d.%d",
 				&pkt_len,
-				&time.tm_mday, mon,
-				&time.tm_year, &time.tm_hour, &time.tm_min,
-				&time.tm_sec, &csec);
+				&tm.tm_mday, mon,
+				&tm.tm_year, &tm.tm_hour, &tm.tm_min,
+				&tm.tm_sec, &csec);
 
 	if (num_items_scanned != 8) {
 		*err = WTAP_ERR_BAD_RECORD;
@@ -470,11 +470,11 @@
 	if (wth) {
 		p = strstr(months, mon);
 		if (p)
-			time.tm_mon = (p - months) / 3;
-		time.tm_year -= 1900;
+			tm.tm_mon = (p - months) / 3;
+		tm.tm_year -= 1900;
 
-		time.tm_isdst = -1;
-		wth->phdr.ts.tv_sec = mktime(&time);
+		tm.tm_isdst = -1;
+		wth->phdr.ts.tv_sec = mktime(&tm);
 
 		wth->phdr.ts.tv_usec = csec * 10000;
 		wth->phdr.caplen = eth_hdr_len + pkt_len;
diff -urN ethereal-0.10.6/wiretap/file_access.c ethereal-0.10.7/wiretap/file_access.c
--- ethereal-0.10.6/wiretap/file_access.c	2004-08-12 17:42:34.000000000 -0500
+++ ethereal-0.10.7/wiretap/file_access.c	2004-10-20 17:35:05.000000000 -0500
@@ -1,6 +1,6 @@
 /* file_access.c
  *
- * $Id: file_access.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: file_access.c 12258 2004-10-11 07:18:20Z guy $
  *
  * Wiretap Library
  * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
@@ -394,8 +394,8 @@
 	  NULL, NULL },
 
 	/* WTAP_FILE_NETTL */
-	{ "HP-UX nettl trace", NULL,
-	  NULL, NULL },
+	{ "HP-UX nettl trace", "nettl",
+	  nettl_dump_can_write_encap, nettl_dump_open },
 
 	/* WTAP_FILE_TOSHIBA */
 	{ "Toshiba Compact ISDN Router snoop trace", NULL,
diff -urN ethereal-0.10.6/wiretap/nettl.c ethereal-0.10.7/wiretap/nettl.c
--- ethereal-0.10.6/wiretap/nettl.c	2004-08-12 17:42:34.000000000 -0500
+++ ethereal-0.10.7/wiretap/nettl.c	2004-10-20 17:35:05.000000000 -0500
@@ -1,6 +1,6 @@
 /* nettl.c
  *
- * $Id: nettl.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: nettl.c 12356 2004-10-20 15:30:19Z gerald $
  *
  * Wiretap Library
  * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
@@ -39,6 +39,19 @@
     0x54, 0x52, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80
 };
 
+/* HP nettl file header */
+struct nettl_file_hdr {
+    guchar	magic[12];
+    guchar	file_name[56];
+    guchar	tz[20];
+    guchar	host_name[9];
+    guchar	os_vers[9];
+    guchar	os_v;
+    guint8	xxa[8];
+    guchar	model[11];
+    guint16	unknown;
+};
+
 /* HP nettl record header for the SX25L2 subsystem - The FCS is not included in the file. */
 struct nettlrec_sx25l2_hdr {
     guint8	xxa[8];
@@ -54,15 +67,26 @@
 
 /* HP nettl record header for the NS_LS_IP subsystem */
 /* This also works for BASE100 and GSC100BT */
+/* see /usr/include/sys/netdiag1.h for hints */
 struct nettlrec_ns_ls_ip_hdr {
-    guint8	xxa[28];
-    guint8	caplen[4];
-    guint8	length[4];
-    guint8	sec[4];
-    guint8	usec[4];
-    guint8	xxb[16];
+    guint32	kind;
+    guint8	xxa[4];
+    guint8	rectype;
+    guint8	xxb[19];
+    guint32	caplen;
+    guint32	length;
+    guint32	sec;
+    guint32	usec;
+    guint8	xxc[16];
 };
 
+/* Full record header for writing out a nettl file */
+struct nettlrec_dump_hdr {
+    guint16	hdr_len;
+    guint16	subsys;
+    struct	nettlrec_ns_ls_ip_hdr hdr;
+    guint8	xxd[4];
+};
 
 /* header is followed by data and once again the total length (2 bytes) ! */
 
@@ -130,14 +154,17 @@
 		int length, int *err, gchar **err_info);
 static int nettl_read_rec_header(wtap *wth, FILE_T fh,
 		struct wtap_pkthdr *phdr, union wtap_pseudo_header *pseudo_header,
-		int *err, gchar **err_info);
+		int *err, gchar **err_info, gboolean *fddihack);
 static gboolean nettl_read_rec_data(FILE_T fh, guchar *pd, int length,
-		int *err);
+		int *err, gboolean fddihack);
 static void nettl_close(wtap *wth);
+static gboolean nettl_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr,
+    const union wtap_pseudo_header *pseudo_header, const guchar *pd, int *err);
 
 int nettl_open(wtap *wth, int *err, gchar **err_info _U_)
 {
     char magic[12], os_vers[2];
+    guint8 dummy[4];
     int bytes_read;
 
     /* Read in the string that should be at the start of a HP file */
@@ -182,6 +209,45 @@
     wth->subtype_close = nettl_close;
     wth->snapshot_length = 0;	/* not available in header, only in frame */
 
+    /* read the first header to take a guess at the file encap */
+    bytes_read = file_read(dummy, 1, 4, wth->fh);
+    if (bytes_read != 4) {
+        if (*err != 0)
+            return -1;
+        if (bytes_read != 0) {
+            *err = WTAP_ERR_SHORT_READ;
+            return -1;
+        }
+        return 0;
+    }
+
+    switch (dummy[3]) {
+        case NETTL_SUBSYS_HPPB_FDDI :
+        case NETTL_SUBSYS_EISA_FDDI :
+        case NETTL_SUBSYS_PCI_FDDI :
+        case NETTL_SUBSYS_HSC_FDDI :
+		wth->file_encap = WTAP_ENCAP_FDDI_BITSWAPPED;
+		break;
+        case NETTL_SUBSYS_TOKEN :
+        case NETTL_SUBSYS_PCI_TR :
+		wth->file_encap = WTAP_ENCAP_TOKEN_RING;
+		break;
+        case NETTL_SUBSYS_NS_LS_IP :
+        case NETTL_SUBSYS_NS_LS_LOOPBACK :
+        case NETTL_SUBSYS_NS_LS_TCP :
+        case NETTL_SUBSYS_NS_LS_UDP :
+        case NETTL_SUBSYS_NS_LS_IPV6 :
+		wth->file_encap = WTAP_ENCAP_RAW_IP;
+		break;
+	default:
+		/* if assumption is bad, the read will catch it */
+		wth->file_encap = WTAP_ENCAP_ETHERNET;
+    }
+
+    if (file_seek(wth->fh, 0x80, SEEK_SET, err) == -1)
+	return -1;
+    wth->data_offset = 0x80;
+
     return 1;
 }
 
@@ -190,11 +256,12 @@
     long *data_offset)
 {
     int ret;
+    gboolean fddihack=FALSE;
 
     /* Read record header. */
     *data_offset = wth->data_offset;
     ret = nettl_read_rec_header(wth, wth->fh, &wth->phdr, &wth->pseudo_header,
-        err, err_info);
+        err, err_info, &fddihack);
     if (ret <= 0) {
 	/* Read error or EOF */
 	return FALSE;
@@ -221,7 +288,7 @@
      */
     buffer_assure_space(wth->frame_buffer, wth->phdr.caplen);
     if (!nettl_read_rec_data(wth->fh, buffer_start_ptr(wth->frame_buffer),
-		wth->phdr.caplen, err))
+		wth->phdr.caplen, err, fddihack))
 	return FALSE;	/* Read error */
     wth->data_offset += wth->phdr.caplen;
     return TRUE;
@@ -234,13 +301,14 @@
 {
     int ret;
     struct wtap_pkthdr phdr;
+    gboolean fddihack=FALSE;
 
     if (file_seek(wth->random_fh, seek_off, SEEK_SET, err) == -1)
 	return FALSE;
 
     /* Read record header. */
     ret = nettl_read_rec_header(wth, wth->random_fh, &phdr, pseudo_header,
-        err, err_info);
+        err, err_info, &fddihack);
     if (ret <= 0) {
 	/* Read error or EOF */
 	if (ret == 0) {
@@ -253,13 +321,13 @@
     /*
      * Read the packet data.
      */
-    return nettl_read_rec_data(wth->random_fh, pd, length, err);
+    return nettl_read_rec_data(wth->random_fh, pd, length, err, fddihack);
 }
 
 static int
 nettl_read_rec_header(wtap *wth, FILE_T fh, struct wtap_pkthdr *phdr,
 		union wtap_pseudo_header *pseudo_header, int *err,
-		gchar **err_info)
+		gchar **err_info, gboolean *fddihack)
 {
     int bytes_read;
     struct nettlrec_sx25l2_hdr lapb_hdr;
@@ -267,11 +335,13 @@
     struct nettlrec_ns_ls_drv_eth_hdr drv_eth_hdr;
     guint16 length;
     int offset = 0;
-    guint8 encap[4];
+    int encap;
+    int padlen;
     guint8 dummy[4];
+    guchar dummyc[12];
 
     errno = WTAP_ERR_CANT_READ;
-    bytes_read = file_read(encap, 1, 4, fh);
+    bytes_read = file_read(dummy, 1, 4, fh);
     if (bytes_read != 4) {
 	*err = file_error(fh);
 	if (*err != 0)
@@ -283,37 +353,53 @@
 	return 0;
     }
     offset += 4;
+    encap=dummy[3];
 
-    switch (encap[3]) {
+    switch (encap) {
 	case NETTL_SUBSYS_LAN100 :
+	case NETTL_SUBSYS_EISA100BT :
 	case NETTL_SUBSYS_BASE100 :
 	case NETTL_SUBSYS_GSC100BT :
 	case NETTL_SUBSYS_PCI100BT :
 	case NETTL_SUBSYS_SPP100BT :
+	case NETTL_SUBSYS_100VG :
 	case NETTL_SUBSYS_GELAN :
 	case NETTL_SUBSYS_BTLAN :
 	case NETTL_SUBSYS_INTL100 :
 	case NETTL_SUBSYS_IGELAN :
 	case NETTL_SUBSYS_IETHER :
+	case NETTL_SUBSYS_HPPB_FDDI :
+	case NETTL_SUBSYS_EISA_FDDI :
         case NETTL_SUBSYS_PCI_FDDI :
+        case NETTL_SUBSYS_HSC_FDDI :
         case NETTL_SUBSYS_TOKEN :
         case NETTL_SUBSYS_PCI_TR :
 	case NETTL_SUBSYS_NS_LS_IP :
 	case NETTL_SUBSYS_NS_LS_LOOPBACK :
 	case NETTL_SUBSYS_NS_LS_TCP :
 	case NETTL_SUBSYS_NS_LS_UDP :
+	case NETTL_SUBSYS_HP_APAPORT :
+	case NETTL_SUBSYS_HP_APALACP :
+	case NETTL_SUBSYS_NS_LS_IPV6 :
+	case NETTL_SUBSYS_NS_LS_ICMPV6 :
 	case NETTL_SUBSYS_NS_LS_ICMP :
-	    if( (encap[3] == NETTL_SUBSYS_NS_LS_IP)
-	     || (encap[3] == NETTL_SUBSYS_NS_LS_LOOPBACK)
-	     || (encap[3] == NETTL_SUBSYS_NS_LS_UDP)
-	     || (encap[3] == NETTL_SUBSYS_NS_LS_TCP) ) {
+	    if( (encap == NETTL_SUBSYS_NS_LS_IP)
+	     || (encap == NETTL_SUBSYS_NS_LS_LOOPBACK)
+	     || (encap == NETTL_SUBSYS_NS_LS_UDP)
+	     || (encap == NETTL_SUBSYS_NS_LS_TCP)
+	     || (encap == NETTL_SUBSYS_NS_LS_IPV6)) {
 		phdr->pkt_encap = WTAP_ENCAP_RAW_IP;
-	    } else if (encap[3] == NETTL_SUBSYS_NS_LS_ICMP) {
-		phdr->pkt_encap = WTAP_ENCAP_UNKNOWN;
-	    } else if (encap[3] == NETTL_SUBSYS_PCI_FDDI) {
-		phdr->pkt_encap = WTAP_ENCAP_FDDI;
-	    } else if( (encap[3] == NETTL_SUBSYS_PCI_TR)
-		    || (encap[3] == NETTL_SUBSYS_TOKEN) ) {
+	    } else if (encap == NETTL_SUBSYS_NS_LS_ICMP) {
+		phdr->pkt_encap = WTAP_ENCAP_RAW_ICMP;
+	    } else if (encap == NETTL_SUBSYS_NS_LS_ICMPV6) {
+		phdr->pkt_encap = WTAP_ENCAP_RAW_ICMPV6;
+	    } else if( (encap == NETTL_SUBSYS_HPPB_FDDI)
+		    || (encap == NETTL_SUBSYS_EISA_FDDI)
+		    || (encap == NETTL_SUBSYS_PCI_FDDI)
+		    || (encap == NETTL_SUBSYS_HSC_FDDI) ) {
+		phdr->pkt_encap = WTAP_ENCAP_FDDI_BITSWAPPED;
+	    } else if( (encap == NETTL_SUBSYS_PCI_TR)
+		    || (encap == NETTL_SUBSYS_TOKEN) ) {
 		phdr->pkt_encap = WTAP_ENCAP_TOKEN_RING;
 	    } else {
 		phdr->pkt_encap = WTAP_ENCAP_ETHERNET;
@@ -351,8 +437,59 @@
 		offset += 4;
 	    }
 
-	    /* PCI FDDI has an extra 3 bytes of padding */
-	    if (encap[3] == NETTL_SUBSYS_PCI_FDDI) {
+	    /* HPPB FDDI has different inbound vs outbound trace records */
+	    if (encap == NETTL_SUBSYS_HPPB_FDDI) {
+                if (ip_hdr.rectype == NETTL_HDR_PDUIN) {
+                   /* inbound is very strange...
+                      there are an extra 3 bytes after the DSAP and SSAP
+                      for SNAP frames ???
+                   */
+                   *fddihack=TRUE;
+		   length = pntohl(&ip_hdr.length);
+		   if (length <= 0)
+		       return 0;
+		   phdr->len = length;
+		   length = pntohl(&ip_hdr.caplen);
+		   phdr->caplen = length;
+                } else {
+	           /* outbound appears to have variable padding */
+		   bytes_read = file_read(dummyc, 1, 9, fh);
+		   if (bytes_read != 9) {
+		       *err = file_error(fh);
+		       if (*err != 0)
+			   return -1;
+		       if (bytes_read != 0) {
+			   *err = WTAP_ERR_SHORT_READ;
+			   return -1;
+		       }
+		       return 0;
+		   }
+                   /* padding is usually either a total 11 or 16 bytes??? */
+		   padlen = (int)dummyc[8];
+		   bytes_read = file_read(dummy, 1, padlen, fh);
+		   if (bytes_read != padlen) {
+		       *err = file_error(fh);
+		       if (*err != 0)
+			   return -1;
+		       if (bytes_read != 0) {
+			   *err = WTAP_ERR_SHORT_READ;
+			   return -1;
+		       }
+		       return 0;
+		   }
+		   padlen += 9;
+		   offset += padlen;
+		   length = pntohl(&ip_hdr.length);
+		   if (length <= 0)
+			   return 0;
+		   phdr->len = length - padlen;
+		   length = pntohl(&ip_hdr.caplen);
+		   phdr->caplen = length - padlen;
+               }
+	    } else if ( (encap == NETTL_SUBSYS_PCI_FDDI)
+	             || (encap == NETTL_SUBSYS_EISA_FDDI)
+	             || (encap == NETTL_SUBSYS_HSC_FDDI) ) {
+	        /* other flavor FDDI cards have an extra 3 bytes of padding */
 		bytes_read = file_read(dummy, 1, 3, fh);
 		if (bytes_read != 3) {
 		    *err = file_error(fh);
@@ -371,6 +508,26 @@
 		phdr->len = length - 3;
 		length = pntohl(&ip_hdr.caplen);
 		phdr->caplen = length - 3;
+	    } else if (encap == NETTL_SUBSYS_NS_LS_LOOPBACK) {
+	        /* LOOPBACK has an extra 26 bytes of padding */
+		bytes_read = file_read(dummy, 1, 26, fh);
+		if (bytes_read != 26) {
+		    *err = file_error(fh);
+		    if (*err != 0)
+			return -1;
+		    if (bytes_read != 0) {
+			*err = WTAP_ERR_SHORT_READ;
+			return -1;
+		    }
+		    return 0;
+		}
+		offset += 26;
+		length = pntohl(&ip_hdr.length);
+		if (length <= 0)
+			return 0;
+		phdr->len = length - 26;
+		length = pntohl(&ip_hdr.caplen);
+		phdr->caplen = length - 26;
 	    } else {
 		length = pntohl(&ip_hdr.length);
 		if (length <= 0)
@@ -484,19 +641,42 @@
 	    break;
 	default:
 	    *err = WTAP_ERR_UNSUPPORTED_ENCAP;
-	    *err_info = g_strdup_printf("nettl: network type %u unknown or unsupported",
-		    encap[3]);
+	    *err_info = g_strdup_printf("nettl: subsystem %u unknown or unsupported",
+		    encap);
 	    return -1;
     }
     return offset;
 }
 
 static gboolean
-nettl_read_rec_data(FILE_T fh, guchar *pd, int length, int *err)
+nettl_read_rec_data(FILE_T fh, guchar *pd, int length, int *err, gboolean fddihack)
 {
     int bytes_read;
+    guchar *p=NULL;
+    guint8 dummy[3];
 
-    bytes_read = file_read(pd, 1, length, fh);
+    if (fddihack == TRUE) {
+       /* read in FC, dest, src, DSAP and SSAP */
+       if (file_read(pd, 1, 15, fh) == 15) {
+          if (pd[13] == 0xAA) {
+             /* it's SNAP, have to eat 3 bytes??? */
+             if (file_read(dummy, 1, 3, fh) == 3) {
+                p=pd+15;
+                bytes_read = file_read(p, 1, length-18, fh);
+                bytes_read += 18;
+             } else {
+                bytes_read = -1;
+             }
+          } else {
+             /* not SNAP */
+             p=pd+15;
+             bytes_read = file_read(p, 1, length-15, fh);
+             bytes_read += 15;
+          }
+       } else
+          bytes_read = -1;
+    } else
+       bytes_read = file_read(pd, 1, length, fh);
 
     if (bytes_read != length) {
 	*err = file_error(fh);
@@ -511,3 +691,154 @@
 {
     g_free(wth->capture.nettl);
 }
+
+
+/* Returns 0 if we could write the specified encapsulation type,
+   an error indication otherwise.  nettl files are WTAP_ENCAP_UNKNOWN
+   when they are first opened, so we allow that for tethereal read/write.
+ */
+
+int nettl_dump_can_write_encap(int encap)
+{
+
+	switch (encap) {
+		case WTAP_ENCAP_ETHERNET:
+		case WTAP_ENCAP_FDDI_BITSWAPPED:
+		case WTAP_ENCAP_TOKEN_RING:
+		case WTAP_ENCAP_RAW_IP:
+		case WTAP_ENCAP_RAW_ICMP:
+		case WTAP_ENCAP_RAW_ICMPV6:
+		case WTAP_ENCAP_PER_PACKET:
+		case WTAP_ENCAP_UNKNOWN:
+			return 0;
+		default:
+			return WTAP_ERR_UNSUPPORTED_ENCAP;
+	}
+}
+
+
+/* Returns TRUE on success, FALSE on failure;
+   sets "*err" to an error code on failure */
+gboolean nettl_dump_open(wtap_dumper *wdh, gboolean cant_seek _U_, int *err)
+{
+	struct nettl_file_hdr file_hdr;
+	size_t nwritten;
+
+	/* This is a nettl file */
+	wdh->subtype_write = nettl_dump;
+	wdh->subtype_close = NULL;
+
+	/* Write the file header. */
+	memset(&file_hdr,0,sizeof(file_hdr));
+	memcpy(file_hdr.magic,nettl_magic_hpux10,sizeof(file_hdr.magic));
+	strcpy(file_hdr.file_name,"/tmp/ethereal.TRC000");
+	strcpy(file_hdr.tz,"UTC");
+	strcpy(file_hdr.host_name,"ethereal");
+	strcpy(file_hdr.os_vers,"B.11.11");
+	file_hdr.os_v=0x55;
+	strcpy(file_hdr.model,"9000/800");
+	file_hdr.unknown=g_htons(0x406);
+	nwritten = fwrite(&file_hdr, 1, sizeof file_hdr, wdh->fh);
+	if (nwritten != sizeof(file_hdr)) {
+		if (nwritten == 0 && ferror(wdh->fh))
+			*err = errno;
+		else
+			*err = WTAP_ERR_SHORT_WRITE;
+		return FALSE;
+	}
+	wdh->bytes_dumped += sizeof(file_hdr);
+
+	return TRUE;
+}
+
+/* Write a record for a packet to a dump file.
+   Returns TRUE on success, FALSE on failure. */
+static gboolean nettl_dump(wtap_dumper *wdh,
+	const struct wtap_pkthdr *phdr,
+	const union wtap_pseudo_header *pseudo_header _U_,
+	const guchar *pd, int *err)
+{
+	struct nettlrec_dump_hdr rec_hdr;
+	guint32 dummy=0;
+	size_t nwritten;
+
+	memset(&rec_hdr,0,sizeof(rec_hdr));
+	rec_hdr.hdr_len = g_htons(sizeof(rec_hdr));
+	rec_hdr.hdr.rectype = NETTL_HDR_PDUIN;
+	rec_hdr.hdr.sec = g_htonl(phdr->ts.tv_sec);
+	rec_hdr.hdr.usec = g_htonl(phdr->ts.tv_usec);
+	rec_hdr.hdr.caplen = g_htonl(phdr->caplen);
+	rec_hdr.hdr.length = g_htonl(phdr->len);
+
+	switch (phdr->pkt_encap) {
+
+		case WTAP_ENCAP_RAW_IP:
+			rec_hdr.subsys = g_htons(NETTL_SUBSYS_NS_LS_IP);
+			break;
+
+		case WTAP_ENCAP_ETHERNET:
+			rec_hdr.subsys = g_htons(NETTL_SUBSYS_BTLAN);
+			break;
+
+		case WTAP_ENCAP_FDDI_BITSWAPPED:
+			rec_hdr.subsys = g_htons(NETTL_SUBSYS_PCI_FDDI);
+			/* account for pad bytes */
+			rec_hdr.hdr.caplen = g_htonl(phdr->caplen + 3);
+			rec_hdr.hdr.length = g_htonl(phdr->len + 3);
+			break;
+
+		case WTAP_ENCAP_TOKEN_RING:
+			rec_hdr.subsys = g_htons(NETTL_SUBSYS_PCI_TR);
+			break;
+	
+		case WTAP_ENCAP_RAW_ICMP:
+			rec_hdr.subsys = g_htons(NETTL_SUBSYS_NS_LS_ICMP);
+			break;
+	
+		case WTAP_ENCAP_RAW_ICMPV6:
+			rec_hdr.subsys = g_htons(NETTL_SUBSYS_NS_LS_ICMPV6);
+			break;
+	
+		default:
+			/* found one we don't support */
+			*err = WTAP_ERR_UNSUPPORTED_ENCAP;
+			return FALSE;
+	}
+
+	nwritten = fwrite(&rec_hdr, 1, sizeof(rec_hdr), wdh->fh);
+	if (nwritten != sizeof(rec_hdr)) {
+		if (nwritten == 0 && ferror(wdh->fh))
+			*err = errno;
+		else
+			*err = WTAP_ERR_SHORT_WRITE;
+		return FALSE;
+	}
+	wdh->bytes_dumped += sizeof(rec_hdr);
+
+	if (phdr->pkt_encap == WTAP_ENCAP_FDDI_BITSWAPPED) {
+		/* add those weird 3 bytes of padding */
+		nwritten = fwrite(&dummy, 1, 3, wdh->fh);
+		if (nwritten != 3) {
+			if (nwritten == 0 && ferror(wdh->fh))
+				*err = errno;
+			else
+				*err = WTAP_ERR_SHORT_WRITE;
+			return FALSE;
+		}
+        	wdh->bytes_dumped += 3;
+	}
+
+	/* write actual PDU data */
+
+	nwritten = fwrite(pd, 1, phdr->caplen, wdh->fh);
+	if (nwritten != phdr->caplen) {
+		if (nwritten == 0 && ferror(wdh->fh))
+			*err = errno;
+		else
+			*err = WTAP_ERR_SHORT_WRITE;
+		return FALSE;
+	}
+        wdh->bytes_dumped += phdr->caplen;
+
+	return TRUE;
+}
diff -urN ethereal-0.10.6/wiretap/nettl.h ethereal-0.10.7/wiretap/nettl.h
--- ethereal-0.10.6/wiretap/nettl.h	2004-08-12 17:42:34.000000000 -0500
+++ ethereal-0.10.7/wiretap/nettl.h	2004-10-20 17:35:05.000000000 -0500
@@ -1,6 +1,6 @@
 /* nettl.h
  *
- * $Id: nettl.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: nettl.h 12299 2004-10-14 21:59:17Z guy $
  *
  * Wiretap Library
  * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
@@ -24,69 +24,87 @@
 #ifndef __NETTL_H__
 #define __NETTL_H__
 
-#define NETTL_SUBSYS_NS_LS_LOGGING	0x00
-#define NETTL_SUBSYS_NS_LS_NFT		0x01
-#define NETTL_SUBSYS_NS_LS_LOOPBACK	0x02
-#define NETTL_SUBSYS_NS_LS_NI		0x03
-#define NETTL_SUBSYS_NS_LS_IPC		0x04
-#define NETTL_SUBSYS_NS_LS_SOCKREGD	0x05
-#define NETTL_SUBSYS_NS_LS_TCP		0x06
-#define NETTL_SUBSYS_NS_LS_PXP		0x07
-#define NETTL_SUBSYS_NS_LS_UDP		0x08
-#define NETTL_SUBSYS_NS_LS_IP		0x09
-#define NETTL_SUBSYS_NS_LS_PROBE	0x0A
-#define NETTL_SUBSYS_NS_LS_DRIVER	0x0B
-#define NETTL_SUBSYS_NS_LS_RLBD		0x0C
-#define NETTL_SUBSYS_NS_LS_BUFS		0x0D
-#define NETTL_SUBSYS_NS_LS_CASE21	0x0E
-#define NETTL_SUBSYS_NS_LS_ROUTER21	0x0F
-#define NETTL_SUBSYS_NS_LS_NFS		0x10
-#define NETTL_SUBSYS_NS_LS_NETISR	0x11
-#define NETTL_SUBSYS_NS_LS_NSE		0x13
-#define NETTL_SUBSYS_NS_LS_STRLOG	0x14
-#define NETTL_SUBSYS_NS_LS_TIRDWR	0x15
-#define NETTL_SUBSYS_NS_LS_TIMOD	0x16
-#define NETTL_SUBSYS_NS_LS_ICMP		0x17
-#define NETTL_SUBSYS_FILTER		0x1A
-#define NETTL_SUBSYS_NAME		0x1B
-#define NETTL_SUBSYS_IGMP		0x1D
-#define NETTL_SUBSYS_SX25L2		0x22
-#define NETTL_SUBSYS_SX25L3		0x23
-#define NETTL_SUBSYS_FTAM_INIT		0x40
-#define NETTL_SUBSYS_FTAM_RESP		0x41
-#define NETTL_SUBSYS_FTAM_VFS		0x46
-#define NETTL_SUBSYS_FTAM_USER		0x48
-#define NETTL_SUBSYS_OTS		0x5A
-#define NETTL_SUBSYS_NETWORK		0x5B
-#define NETTL_SUBSYS_TRANSPORT		0x5C
-#define NETTL_SUBSYS_SESSION		0x5D
-#define NETTL_SUBSYS_ACSE_PRES		0x5E
-#define NETTL_SUBSYS_SHM		0x74
-#define NETTL_SUBSYS_ACSE_US		0x77
-#define NETTL_SUBSYS_HPS		0x79
-#define NETTL_SUBSYS_CM			0x7A
-#define NETTL_SUBSYS_ULA_UTILS		0x7B
-#define NETTL_SUBSYS_EM			0x7C
+/* nettl subsystems are defined in /etc/nettlgen.conf */
+
+#define NETTL_SUBSYS_NS_LS_LOGGING	0
+#define NETTL_SUBSYS_NS_LS_NFT		1
+#define NETTL_SUBSYS_NS_LS_LOOPBACK	2
+#define NETTL_SUBSYS_NS_LS_NI		3
+#define NETTL_SUBSYS_NS_LS_IPC		4
+#define NETTL_SUBSYS_NS_LS_SOCKREGD	5
+#define NETTL_SUBSYS_NS_LS_TCP		6
+#define NETTL_SUBSYS_NS_LS_PXP		7
+#define NETTL_SUBSYS_NS_LS_UDP		8
+#define NETTL_SUBSYS_NS_LS_IP		9
+#define NETTL_SUBSYS_NS_LS_PROBE	10
+#define NETTL_SUBSYS_NS_LS_DRIVER	11
+#define NETTL_SUBSYS_NS_LS_RLBD		12
+#define NETTL_SUBSYS_NS_LS_BUFS		13
+#define NETTL_SUBSYS_NS_LS_CASE21	14
+#define NETTL_SUBSYS_NS_LS_ROUTER21	15
+#define NETTL_SUBSYS_NS_LS_NFS		16
+#define NETTL_SUBSYS_NS_LS_NETISR	17
+#define NETTL_SUBSYS_NS_LS_NSE		18
+#define NETTL_SUBSYS_NS_LS_STRLOG	19
+#define NETTL_SUBSYS_NS_LS_TIRDWR	21
+#define NETTL_SUBSYS_NS_LS_TIMOD	22
+#define NETTL_SUBSYS_NS_LS_ICMP		23
+#define NETTL_SUBSYS_FILTER		26
+#define NETTL_SUBSYS_NAME		27
+#define NETTL_SUBSYS_IGMP		29
+#define NETTL_SUBSYS_SX25L2		34
+#define NETTL_SUBSYS_SX25L3		35
+#define NETTL_SUBSYS_FTAM_INIT		64
+#define NETTL_SUBSYS_FTAM_RESP		65
+#define NETTL_SUBSYS_FTAM_VFS		70
+#define NETTL_SUBSYS_FTAM_USER		72
+#define NETTL_SUBSYS_OTS		90
+#define NETTL_SUBSYS_NETWORK		91
+#define NETTL_SUBSYS_TRANSPORT		92
+#define NETTL_SUBSYS_SESSION		93
+#define NETTL_SUBSYS_ACSE_PRES		94
+#define NETTL_SUBSYS_SHM		116
+#define NETTL_SUBSYS_ACSE_US		119
+#define NETTL_SUBSYS_HPS		121
+#define NETTL_SUBSYS_CM			122
+#define NETTL_SUBSYS_ULA_UTILS		123
+#define NETTL_SUBSYS_EM			124
+#define NETTL_SUBSYS_HP_APAPORT		189
+#define NETTL_SUBSYS_HP_APALACP		190
+#define NETTL_SUBSYS_NS_LS_IPV6		244
+#define NETTL_SUBSYS_NS_LS_ICMPV6	245
 
 /* Ethernet cards */
-#define NETTL_SUBSYS_LAN100		0xA4
-#define NETTL_SUBSYS_BASE100		0xAD
-#define NETTL_SUBSYS_GSC100BT		0xB2
-#define NETTL_SUBSYS_PCI100BT		0xB3
-#define NETTL_SUBSYS_SPP100BT		0xB4
-#define NETTL_SUBSYS_GELAN		0xB9
-#define NETTL_SUBSYS_BTLAN		0xD2
-#define NETTL_SUBSYS_INTL100		0xE9
-#define NETTL_SUBSYS_IGELAN		0xFC
-#define NETTL_SUBSYS_IETHER		0xFD
+#define NETTL_SUBSYS_100VG		37
+#define NETTL_SUBSYS_LAN100		164
+#define NETTL_SUBSYS_EISA100BT		172
+#define NETTL_SUBSYS_BASE100		173
+#define NETTL_SUBSYS_GSC100BT		178
+#define NETTL_SUBSYS_PCI100BT		179
+#define NETTL_SUBSYS_SPP100BT		180
+#define NETTL_SUBSYS_GELAN		185
+#define NETTL_SUBSYS_BTLAN		210
+#define NETTL_SUBSYS_INTL100		233
+#define NETTL_SUBSYS_IGELAN		252
+#define NETTL_SUBSYS_IETHER		253
 
 /* FDDI cards */
-#define NETTL_SUBSYS_PCI_FDDI		0xB0
+#define NETTL_SUBSYS_HPPB_FDDI		95
+#define NETTL_SUBSYS_EISA_FDDI		174
+#define NETTL_SUBSYS_PCI_FDDI		176
+#define NETTL_SUBSYS_HSC_FDDI		177
 
 /* Token Ring cards */
-#define NETTL_SUBSYS_TOKEN		0x1F
-#define NETTL_SUBSYS_PCI_TR		0xBB
+#define NETTL_SUBSYS_TOKEN		31
+#define NETTL_SUBSYS_PCI_TR		187
+
+/* from /usr/include/sys/subsys_id.h */
+
+#define NETTL_HDR_PDUIN			0x20
+#define NETTL_HDR_PDUOUT		0x10
 
 int nettl_open(wtap *wth, int *err, gchar **err_info);
+gboolean nettl_dump_open(wtap_dumper *wdh, gboolean cant_seek _U_, int *err);
+int nettl_dump_can_write_encap(int encap);
 
 #endif
diff -urN ethereal-0.10.6/wiretap/netxray.c ethereal-0.10.7/wiretap/netxray.c
--- ethereal-0.10.6/wiretap/netxray.c	2004-08-12 17:42:35.000000000 -0500
+++ ethereal-0.10.7/wiretap/netxray.c	2004-10-20 17:35:06.000000000 -0500
@@ -1,6 +1,6 @@
 /* netxray.c
  *
- * $Id: netxray.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: netxray.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Wiretap Library
  * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
@@ -1199,7 +1199,7 @@
     file_hdr.nframes = htolel(netxray->nframes);
     file_hdr.start_offset = htolel(CAPTUREFILE_HEADER_SIZE);
     file_hdr.end_offset = htolel(filelen);
-    file_hdr.network = (guint8) htoles(wtap_encap_to_netxray_1_1_encap(wdh->encap));
+    file_hdr.network = wtap_encap_to_netxray_1_1_encap(wdh->encap);
     file_hdr.timelo = htolel(0);
     file_hdr.timehi = htolel(0);
 
@@ -1406,7 +1406,7 @@
     file_hdr.nframes = htolel(netxray->nframes);
     file_hdr.start_offset = htolel(CAPTUREFILE_HEADER_SIZE);
     file_hdr.end_offset = htolel(filelen);
-    file_hdr.network = (guint8) htoles(wtap_encap_to_netxray_2_0_encap(wdh->encap));
+    file_hdr.network = wtap_encap_to_netxray_2_0_encap(wdh->encap);
     file_hdr.timelo = htolel(0);
     file_hdr.timehi = htolel(0);
     switch (wdh->encap) {
diff -urN ethereal-0.10.6/wiretap/ngsniffer.c ethereal-0.10.7/wiretap/ngsniffer.c
--- ethereal-0.10.6/wiretap/ngsniffer.c	2004-08-12 17:42:34.000000000 -0500
+++ ethereal-0.10.7/wiretap/ngsniffer.c	2004-10-20 17:35:05.000000000 -0500
@@ -1,6 +1,6 @@
 /* ngsniffer.c
  *
- * $Id: ngsniffer.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: ngsniffer.c 11995 2004-09-15 07:22:34Z guy $
  *
  * Wiretap Library
  * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
@@ -1629,6 +1629,8 @@
  */
 static int infer_pkt_encap(const guint8 *pd, int len)
 {
+	int i;
+
 	if (len <= 0) {
 		/*
 		 * Nothing to infer, but it doesn't matter how you
@@ -1637,26 +1639,11 @@
 		return WTAP_ENCAP_PPP_WITH_PHDR;
 	}
 
-	switch (pd[0]) {
-
-	case 0xFF:
+	if (pd[0] == 0xFF) {
 		/*
 		 * PPP.  (XXX - check for 0xFF 0x03?)
 		 */
 		return WTAP_ENCAP_PPP_WITH_PHDR;
-
-	case 0x34:
-	case 0x28:
-		/*
-		 * Frame Relay.
-		 *
-		 * XXX - in version 4 and 5 captures, wouldn't this just
-		 * have a capture subtype of NET_FRAME_RELAY?  Or is this
-		 * here only to handle other versions of the capture
-		 * file, where we might just not yet have found where
-		 * the subtype is specified in the capture?
-		 */
-		return WTAP_ENCAP_FRELAY_WITH_PHDR;
 	}
 
 	if (len >= 2) {
@@ -1672,6 +1659,40 @@
 			 */
 			return WTAP_ENCAP_CHDLC_WITH_PHDR;
 		}
+
+		/*
+		 * Check for Frame Relay.  Look for packets with at least
+		 * 3 bytes of header - 2 bytes of DLCI followed by 1 byte
+		 * of control, which, for now, we require to be 0x03 (UI),
+		 * although there might be other frame types as well.
+		 * Scan forward until we see the last DLCI byte, with
+		 * the low-order bit being 1, and then check the next
+		 * byte to see if it's a control byte.
+		 *
+		 * XXX - in version 4 and 5 captures, wouldn't this just
+		 * have a capture subtype of NET_FRAME_RELAY?  Or is this
+		 * here only to handle other versions of the capture
+		 * file, where we might just not yet have found where
+		 * the subtype is specified in the capture?
+		 *
+		 * Bay^H^H^HNortel Networks has a mechanism in the Optivity
+		 * software for some of their routers to save captures
+		 * in Sniffer format; they use a version number of 4.9, but
+		 * don't put out any header records before the first FRAME2
+		 * record.  That means we have to use heuristics to guess
+		 * what type of packet we have.
+		 */
+		for (i = 0; i < len && (pd[i] & 0x01) == 0; i++)
+			;
+		i++;	/* advance to the byte after the last DLCI byte */
+		if (i == len) {
+			/*
+			 * No control byte.
+			 */
+			return WTAP_ENCAP_LAPB;
+		}
+		if (pd[i] == 0x03)
+			return WTAP_ENCAP_FRELAY_WITH_PHDR;
 	}
 
 	/*
diff -urN ethereal-0.10.6/wiretap/vms.c ethereal-0.10.7/wiretap/vms.c
--- ethereal-0.10.6/wiretap/vms.c	2004-08-12 17:42:34.000000000 -0500
+++ ethereal-0.10.7/wiretap/vms.c	2004-10-20 17:35:05.000000000 -0500
@@ -1,6 +1,6 @@
 /* vms.c
  *
- * $Id: vms.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: vms.c 12171 2004-10-01 12:31:52Z jmayer $
  *
  * Wiretap Library
  * Copyright (c) 2001 by Marc Milgram <ethereal@mmilgram.NOSPAMmail.net>
@@ -369,15 +369,15 @@
     int	   pkt_len = 0;
     int	   pktnum;
     int	   csec = 101;
-    struct tm time;
+    struct tm tm;
     char mon[4] = {'J', 'A', 'N', 0};
     gchar *p;
     static gchar months[] = "JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC";
 
-    time.tm_year = 1970;
-    time.tm_hour = 1;
-    time.tm_min = 1;
-    time.tm_sec = 1;
+    tm.tm_year = 1970;
+    tm.tm_hour = 1;
+    tm.tm_min = 1;
+    tm.tm_sec = 1;
 
     /* Skip lines until one starts with a hex number */
     do {
@@ -397,16 +397,16 @@
 	    /* First look for the Format 1 type sequencing */
 	    num_items_scanned = sscanf(p,  
 		  		       "packet %d at %d-%3s-%d %d:%d:%d.%d",
-			  	       &pktnum, &time.tm_mday, mon,
-				       &time.tm_year, &time.tm_hour,
-				       &time.tm_min, &time.tm_sec, &csec);
+			  	       &pktnum, &tm.tm_mday, mon,
+				       &tm.tm_year, &tm.tm_hour,
+				       &tm.tm_min, &tm.tm_sec, &csec);
 	    /* Next look for the Format 2 type sequencing */
 	    if (num_items_scanned != 8) {
 	      num_items_scanned = sscanf(p,
 		  		         "packet seq # = %d at %d-%3s-%d %d:%d:%d.%d",
-			  	         &pktnum, &time.tm_mday, mon,
-				         &time.tm_year, &time.tm_hour,
-				         &time.tm_min, &time.tm_sec, &csec);
+			  	         &pktnum, &tm.tm_mday, mon,
+				         &tm.tm_year, &tm.tm_hour,
+				         &tm.tm_min, &tm.tm_sec, &csec);
 	    }
 	    /* if unknown format then exit with error        */
 	    /* We will need to add code to handle new format */
@@ -435,11 +435,11 @@
     if (wth) {
         p = strstr(months, mon);
         if (p)
-            time.tm_mon = (p - months) / 3;
-        time.tm_year -= 1900;
+            tm.tm_mon = (p - months) / 3;
+        tm.tm_year -= 1900;
 
-	time.tm_isdst = -1;
-        wth->phdr.ts.tv_sec = mktime(&time);
+	tm.tm_isdst = -1;
+        wth->phdr.ts.tv_sec = mktime(&tm);
 
         wth->phdr.ts.tv_usec = csec * 10000;
         wth->phdr.caplen = pkt_len;
diff -urN ethereal-0.10.6/wiretap/wtap.c ethereal-0.10.7/wiretap/wtap.c
--- ethereal-0.10.6/wiretap/wtap.c	2004-08-12 17:42:34.000000000 -0500
+++ ethereal-0.10.7/wiretap/wtap.c	2004-10-20 17:35:06.000000000 -0500
@@ -1,6 +1,6 @@
 /* wtap.c
  *
- * $Id: wtap.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: wtap.c 12047 2004-09-19 07:13:52Z guy $
  *
  * Wiretap Library
  * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
@@ -251,6 +251,12 @@
 
 	/* WTAP_ENCAP_BACNET_MS_TP */
 	{ "BACnet MS/TP", "bacnet-ms-tp" },
+
+	/* WTAP_ENCAP_RAW_ICMP */
+	{ "Raw ICMP", "raw-icmp" },
+
+	/* WTAP_ENCAP_RAW_ICMPV6 */
+	{ "Raw ICMPv6", "raw-icmpv6" },
 };
 
 /* Name that should be somewhat descriptive. */
diff -urN ethereal-0.10.6/wiretap/wtap.h ethereal-0.10.7/wiretap/wtap.h
--- ethereal-0.10.6/wiretap/wtap.h	2004-08-12 17:42:34.000000000 -0500
+++ ethereal-0.10.7/wiretap/wtap.h	2004-10-20 17:35:06.000000000 -0500
@@ -1,6 +1,6 @@
 /* wtap.h
  *
- * $Id: wtap.h 11400 2004-07-18 00:24:25Z guy $
+ * $Id: wtap.h 12047 2004-09-19 07:13:52Z guy $
  *
  * Wiretap Library
  * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
@@ -153,9 +153,11 @@
 #define WTAP_ENCAP_SYMANTEC			61
 #define WTAP_ENCAP_APPLE_IP_OVER_IEEE1394	62
 #define WTAP_ENCAP_BACNET_MS_TP			63
+#define WTAP_ENCAP_RAW_ICMP			64
+#define WTAP_ENCAP_RAW_ICMPV6			65
 
 /* last WTAP_ENCAP_ value + 1 */
-#define WTAP_NUM_ENCAP_TYPES			64
+#define WTAP_NUM_ENCAP_TYPES			66
 
 /* File types that can be read by wiretap.
    We support writing some many of these file types, too, so we
diff -urN ethereal-0.10.6/xdlc.c ethereal-0.10.7/xdlc.c
--- ethereal-0.10.6/xdlc.c	2004-08-12 17:41:38.000000000 -0500
+++ ethereal-0.10.7/xdlc.c	1969-12-31 18:00:00.000000000 -0600
@@ -1,380 +0,0 @@
-/* xdlc.c
- * Routines for use by various SDLC-derived protocols, such as HDLC
- * and its derivatives LAPB, IEEE 802.2 LLC, etc..
- *
- * $Id: xdlc.c 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-#include <string.h>
-
-#include <glib.h>
-#include <epan/packet.h>
-#include "xdlc.h"
-
-const value_string ftype_vals[] = {
-    { XDLC_I, "Information frame" },
-    { XDLC_S, "Supervisory frame" },
-    { XDLC_U, "Unnumbered frame" },
-    { 0,      NULL }
-};
-
-const value_string stype_vals[] = {
-    { XDLC_RR>>2,   "Receiver ready" },
-    { XDLC_RNR>>2,  "Receiver not ready" },
-    { XDLC_REJ>>2,  "Reject" },
-    { XDLC_SREJ>>2, "Selective reject" },
-    { 0,            NULL }
-};
-
-static const value_string modifier_short_vals_cmd[] = {
-    { XDLC_UI,    "UI" },
-    { XDLC_UP,    "UP" },
-    { XDLC_DISC,  "DISC" },
-    { XDLC_UA,    "UA" },
-    { XDLC_SNRM,  "SNRM" },
-    { XDLC_SNRME, "SNRME" },
-    { XDLC_TEST,  "TEST" },
-    { XDLC_SIM,   "SIM" },
-    { XDLC_FRMR,  "FRMR" },
-    { XDLC_CFGR,  "CFGR" },
-    { XDLC_SARM,  "SARM" },
-    { XDLC_SABM,  "SABM" },
-    { XDLC_SARME, "SARME" },
-    { XDLC_SABME, "SABME" },
-    { XDLC_RESET, "RESET" },
-    { XDLC_XID,   "XID" },
-    { XDLC_SNRME, "SNRME" },
-    { XDLC_BCN,   "BCN" },
-    { 0,          NULL }
-};
-
-const value_string modifier_vals_cmd[] = {
-    { XDLC_UI>>2,    "Unnumbered Information" },
-    { XDLC_UP>>2,    "Unnumbered Poll" },
-    { XDLC_DISC>>2,  "Disconnect" },
-    { XDLC_UA>>2,    "Unnumbered Acknowledge" },
-    { XDLC_SNRM>>2,  "Set Normal Response Mode" },
-    { XDLC_TEST>>2,  "Test" },
-    { XDLC_SIM>>2,   "Set Initialization Mode" },
-    { XDLC_FRMR>>2,  "Frame reject" },
-    { XDLC_CFGR>>2,  "Configure" },
-    { XDLC_SARM>>2,  "Set Asynchronous Response Mode" },
-    { XDLC_SABM>>2,  "Set Asynchronous Balanced Mode" },
-    { XDLC_SARME>>2, "Set Asynchronous Response Mode Extended" },
-    { XDLC_SABME>>2, "Set Asynchronous Balanced Mode Extended" },
-    { XDLC_RESET>>2, "Reset" },
-    { XDLC_XID>>2,   "Exchange identification" },
-    { XDLC_SNRME>>2, "Set Normal Response Mode Extended" },
-    { XDLC_BCN>>2,   "Beacon" },
-    { 0,             NULL }
-};
-
-static const value_string modifier_short_vals_resp[] = {
-    { XDLC_UI,    "UI" },
-    { XDLC_UP,    "UP" },
-    { XDLC_RD,    "RD" },
-    { XDLC_UA,    "UA" },
-    { XDLC_SNRM,  "SNRM" },
-    { XDLC_TEST,  "TEST" },
-    { XDLC_RIM,   "RIM" },
-    { XDLC_FRMR,  "FRMR" },
-    { XDLC_CFGR,  "CFGR" },
-    { XDLC_DM,    "DM" },
-    { XDLC_SABM,  "SABM" },
-    { XDLC_SARME, "SARME" },
-    { XDLC_SABME, "SABME" },
-    { XDLC_RESET, "RESET" },
-    { XDLC_XID,   "XID" },
-    { XDLC_SNRME, "SNRME" },
-    { XDLC_BCN,   "BCN" },
-    { 0,          NULL }
-};
-
-const value_string modifier_vals_resp[] = {
-    { XDLC_UI>>2,    "Unnumbered Information" },
-    { XDLC_UP>>2,    "Unnumbered Poll" },
-    { XDLC_RD>>2,    "Request Disconnect" },
-    { XDLC_UA>>2,    "Unnumbered Acknowledge" },
-    { XDLC_SNRM>>2,  "Set Normal Response Mode" },
-    { XDLC_TEST>>2,  "Test" },
-    { XDLC_RIM>>2,   "Request Initialization Mode" },
-    { XDLC_FRMR>>2,  "Frame reject" },
-    { XDLC_CFGR>>2,  "Configure" },
-    { XDLC_DM>>2,    "Disconnected mode" },
-    { XDLC_SABM>>2,  "Set Asynchronous Balanced Mode" },
-    { XDLC_SARME>>2, "Set Asynchronous Response Mode Extended" },
-    { XDLC_SABME>>2, "Set Asynchronous Balanced Mode Extended" },
-    { XDLC_RESET>>2, "Reset" },
-    { XDLC_XID>>2,   "Exchange identification" },
-    { XDLC_SNRME>>2, "Set Normal Response Mode Extended" },
-    { XDLC_BCN>>2,   "Beacon" },
-    { 0,             NULL }
-};
-
-int
-get_xdlc_control(const guchar *pd, int offset, int is_extended)
-{
-    guint16 control;
-
-    switch (pd[offset] & 0x03) {
-
-    case XDLC_S:
-    default:
-        /*
-	 * Supervisory or Information frame.
-	 */
-	if (is_extended)
-		control = pletohs(&pd[offset]);
-	else
-		control = pd[offset];
-	break;
-
-    case XDLC_U:
-	/*
-	 * Unnumbered frame.
-	 *
-	 * XXX - is this two octets, with a P/F bit, in HDLC extended
-	 * operation?  It's one octet in LLC, even though the control
-	 * field of I and S frames is a 2-byte extended-operation field
-	 * in LLC.  Given that there are no sequence numbers in the
-	 * control field of a U frame, there doesn't appear to be any
-	 * need for it to be 2 bytes in extended operation.
-	 */
-	control = pd[offset];
-	break;
-    }
-    return control;
-}
-
-int
-dissect_xdlc_control(tvbuff_t *tvb, int offset, packet_info *pinfo,
-  proto_tree *xdlc_tree, int hf_xdlc_control, gint ett_xdlc_control,
-  const xdlc_cf_items *cf_items_nonext, const xdlc_cf_items *cf_items_ext,
-  const value_string *u_modifier_short_vals_cmd,
-  const value_string *u_modifier_short_vals_resp, int is_response,
-  int is_extended, int append_info)
-{
-    guint16 control;
-    int control_len;
-    const xdlc_cf_items *cf_items;
-    char *control_format;
-    guint16 poll_final;
-    char info[80];
-    proto_tree *tc, *control_tree;
-    gchar *frame_type = NULL;
-    gchar *modifier;
-
-    switch (tvb_get_guint8(tvb, offset) & 0x03) {
-
-    case XDLC_S:
-	if (is_extended) {
-	    control = tvb_get_letohs(tvb, offset);
-	    control_len = 2;
-	    cf_items = cf_items_ext;
-	    control_format = "Control field: %s (0x%04X)";
-	} else {
-	    control = tvb_get_guint8(tvb, offset);
-	    control_len = 1;
-	    cf_items = cf_items_nonext;
-	    control_format = "Control field: %s (0x%02X)";
-	}
-        /*
-	 * Supervisory frame.
-	 */
-	switch (control & XDLC_S_FTYPE_MASK) {
-	case XDLC_RR:
-	    frame_type = "RR";
-	    break;
-
-	case XDLC_RNR:
-	    frame_type = "RNR";
-	    break;
-
-	case XDLC_REJ:
-	    frame_type = "REJ";
-	    break;
-
-	case XDLC_SREJ:
-	    frame_type = "SREJ";
-	    break;
-	}
-	if (is_extended) {
-	    poll_final = (control & XDLC_P_F_EXT);
-	    sprintf(info, "S%s, func=%s, N(R)=%u",
-		 	(poll_final ?
-		 	    (is_response ? " F" : " P") :
-		 	    ""),
-			frame_type,
-			(control & XDLC_N_R_EXT_MASK) >> XDLC_N_R_EXT_SHIFT);
-	} else {
-	    poll_final = (control & XDLC_P_F);
-	    sprintf(info, "S%s, func=%s, N(R)=%u",
-		 	(poll_final ?
-		 	    (is_response ? " F" : " P") :
-		 	    ""),
-		 	frame_type,
-			(control & XDLC_N_R_MASK) >> XDLC_N_R_SHIFT);
-	}
-	if (check_col(pinfo->cinfo, COL_INFO)) {
-	    if (append_info) {
-	    	col_append_str(pinfo->cinfo, COL_INFO, ", ");
-		col_append_str(pinfo->cinfo, COL_INFO, info);
-	    } else
-		col_add_str(pinfo->cinfo, COL_INFO, info);
-	}
-	if (xdlc_tree) {
-	    tc = proto_tree_add_uint_format(xdlc_tree, hf_xdlc_control, tvb,
-		offset, control_len, control, control_format, info, control);
-	    control_tree = proto_item_add_subtree(tc, ett_xdlc_control);
-	    proto_tree_add_uint(control_tree, *cf_items->hf_xdlc_n_r,
-		tvb, offset, control_len, control);
-	    if (poll_final) {
-		proto_tree_add_boolean(control_tree,
-			(is_response ? *cf_items->hf_xdlc_f :
-				       *cf_items->hf_xdlc_p),
-			tvb, offset, control_len, control);
-	    }
-	    proto_tree_add_uint(control_tree, *cf_items->hf_xdlc_s_ftype,
-		tvb, offset, control_len, control);
-	    /* This will always say it's a supervisory frame */
-	    proto_tree_add_uint(control_tree, *cf_items->hf_xdlc_ftype_s_u,
-		tvb, offset, control_len, control);
-	}
-	break;
-
-    case XDLC_U:
-	/*
-	 * Unnumbered frame.
-	 *
-	 * XXX - is this two octets, with a P/F bit, in HDLC extended
-	 * operation?  It's one octet in LLC, even though the control
-	 * field of I and S frames is a 2-byte extended-operation field
-	 * in LLC.  Given that there are no sequence numbers in the
-	 * control field of a U frame, there doesn't appear to be any
-	 * need for it to be 2 bytes in extended operation.
-	 */
-	if (u_modifier_short_vals_cmd == NULL)
-		u_modifier_short_vals_cmd = modifier_short_vals_cmd;
-	if (u_modifier_short_vals_resp == NULL)
-		u_modifier_short_vals_resp = modifier_short_vals_resp;
-	control = tvb_get_guint8(tvb, offset);
-	control_len = 1;
-	cf_items = cf_items_nonext;
-	control_format = "Control field: %s (0x%02X)";
-	if (is_response) {
-		modifier = match_strval(control & XDLC_U_MODIFIER_MASK,
-			u_modifier_short_vals_resp);
-	} else {
-		modifier = match_strval(control & XDLC_U_MODIFIER_MASK,
-			u_modifier_short_vals_cmd);
-	}
-	if (modifier == NULL)
-		modifier = "Unknown";
-	poll_final = (control & XDLC_P_F);
-	sprintf(info, "U%s, func=%s",
-		(poll_final ?
-		    (is_response ? " F" : " P") :
-		    ""),
-		modifier);
-	if (check_col(pinfo->cinfo, COL_INFO)) {
-	    if (append_info) {
-	    	col_append_str(pinfo->cinfo, COL_INFO, ", ");
-		col_append_str(pinfo->cinfo, COL_INFO, info);
-	    } else
-		col_add_str(pinfo->cinfo, COL_INFO, info);
-	}
-	if (xdlc_tree) {
-	    tc = proto_tree_add_uint_format(xdlc_tree, hf_xdlc_control,	tvb,
-		offset, control_len, control, control_format, info, control);
-	    control_tree = proto_item_add_subtree(tc, ett_xdlc_control);
-	    if (poll_final) {
-		proto_tree_add_boolean(control_tree,
-			(is_response ? *cf_items->hf_xdlc_f:
-				       *cf_items->hf_xdlc_p),
-			tvb, offset, control_len, control);
-	    }
-	    proto_tree_add_uint(control_tree,
-		(is_response ? *cf_items->hf_xdlc_u_modifier_resp :
-			       *cf_items->hf_xdlc_u_modifier_cmd),
-	    	tvb, offset, control_len, control);
-	    /* This will always say it's an unnumbered frame */
-	    proto_tree_add_uint(control_tree, *cf_items->hf_xdlc_ftype_s_u,
-		tvb, offset, control_len, control);
-	}
-	break;
-
-    default:
-	/*
-	 * Information frame.
-	 */
-	if (is_extended) {
-	    control = tvb_get_letohs(tvb, offset);
-	    control_len = 2;
-	    cf_items = cf_items_ext;
-	    control_format = "Control field: %s (0x%04X)";
-	    poll_final = (control & XDLC_P_F_EXT);
-	    sprintf(info, "I%s, N(R)=%u, N(S)=%u",
-			((control & XDLC_P_F_EXT) ? " P" : ""),
-			(control & XDLC_N_R_EXT_MASK) >> XDLC_N_R_EXT_SHIFT,
-			(control & XDLC_N_S_EXT_MASK) >> XDLC_N_S_EXT_SHIFT);
-	} else {
-	    control = tvb_get_guint8(tvb, offset);
-	    control_len = 1;
-	    cf_items = cf_items_nonext;
-	    control_format = "Control field: %s (0x%02X)";
-	    poll_final = (control & XDLC_P_F);
-	    sprintf(info, "I%s, N(R)=%u, N(S)=%u",
-			((control & XDLC_P_F) ? " P" : ""),
-			(control & XDLC_N_R_MASK) >> XDLC_N_R_SHIFT,
-			(control & XDLC_N_S_MASK) >> XDLC_N_S_SHIFT);
-	}
-	if (check_col(pinfo->cinfo, COL_INFO)) {
-	    if (append_info) {
-	    	col_append_str(pinfo->cinfo, COL_INFO, ", ");
-		col_append_str(pinfo->cinfo, COL_INFO, info);
-	    } else
-		col_add_str(pinfo->cinfo, COL_INFO, info);
-	}
-	if (xdlc_tree) {
-	    tc = proto_tree_add_uint_format(xdlc_tree, hf_xdlc_control, tvb,
-		offset, control_len, control, control_format, info, control);
-	    control_tree = proto_item_add_subtree(tc, ett_xdlc_control);
-	    proto_tree_add_uint(control_tree, *cf_items->hf_xdlc_n_r,
-		tvb, offset, control_len, control);
-	    proto_tree_add_uint(control_tree, *cf_items->hf_xdlc_n_s,
-		tvb, offset, control_len, control);
-	    if (poll_final) {
-		proto_tree_add_boolean(control_tree, *cf_items->hf_xdlc_p,
-		    	tvb, offset, control_len, control);
-	    }
-	    /* This will always say it's an information frame */
-	    proto_tree_add_uint(control_tree, *cf_items->hf_xdlc_ftype_i,
-		tvb, offset, control_len, control);
-	}
-	break;
-    }
-    return control;
-}
diff -urN ethereal-0.10.6/xdlc.h ethereal-0.10.7/xdlc.h
--- ethereal-0.10.6/xdlc.h	2004-08-12 17:41:38.000000000 -0500
+++ ethereal-0.10.7/xdlc.h	1969-12-31 18:00:00.000000000 -0600
@@ -1,140 +0,0 @@
-/* xdlc.h
- * Define *DLC frame types, and routine to dissect the control field of
- * a *DLC frame.
- *
- * $Id: xdlc.h 11400 2004-07-18 00:24:25Z guy $
- *
- * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@ethereal.com>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifndef __XDLC_H__
-#define __XDLC_H__
-
-/*
- * Low-order bits of first (extended) or only (basic) octet of control
- * field, specifying the frame type.
- */
-#define XDLC_I_MASK		0x01	/* Mask to test for I or not I */
-#define XDLC_I			0x00	/* Information frames */
-#define XDLC_S_U_MASK		0x03	/* Mask to test for S or U */
-#define XDLC_S			0x01	/* Supervisory frames */
-#define XDLC_U			0x03	/* Unnumbered frames */
-
-/*
- * N(S) and N(R) fields, in basic and extended operation.
- */
-#define XDLC_N_R_MASK		0xE0	/* basic */
-#define XDLC_N_R_SHIFT		5
-#define XDLC_N_R_EXT_MASK	0xFE00	/* extended */
-#define XDLC_N_R_EXT_SHIFT	9
-#define XDLC_N_S_MASK		0x0E	/* basic */
-#define XDLC_N_S_SHIFT		1
-#define XDLC_N_S_EXT_MASK	0x00FE	/* extended */
-#define XDLC_N_S_EXT_SHIFT	1
-
-/*
- * Poll/Final bit, in basic and extended operation.
- */
-#define XDLC_P_F	0x10	/* basic */
-#define XDLC_P_F_EXT	0x0100	/* extended */
-
-/*
- * S-format frame types.
- */
-#define XDLC_S_FTYPE_MASK	0x0C
-#define XDLC_RR			0x00	/* Receiver ready */
-#define XDLC_RNR		0x04	/* Receiver not ready */
-#define XDLC_REJ		0x08	/* Reject */
-#define XDLC_SREJ		0x0C	/* Selective reject */
-
-/*
- * U-format modifiers.
- */
-#define XDLC_U_MODIFIER_MASK	0xEC
-#define XDLC_UI		0x00	/* Unnumbered Information */
-#define XDLC_UP		0x20	/* Unnumbered Poll */
-#define XDLC_DISC	0x40	/* Disconnect (command) */
-#define XDLC_RD		0x40	/* Request Disconnect (response) */
-#define XDLC_UA		0x60	/* Unnumbered Acknowledge */
-#define XDLC_SNRM	0x80	/* Set Normal Response Mode */
-#define XDLC_TEST	0xE0	/* Test */
-#define XDLC_SIM	0x04	/* Set Initialization Mode (command) */
-#define XDLC_RIM	0x04	/* Request Initialization Mode (response) */
-#define XDLC_FRMR	0x84	/* Frame reject */
-#define XDLC_CFGR	0xC4	/* Configure */
-#define XDLC_SARM	0x0C	/* Set Asynchronous Response Mode (command) */
-#define XDLC_DM		0x0C	/* Disconnected mode (response) */
-#define XDLC_SABM	0x2C	/* Set Asynchronous Balanced Mode */
-#define XDLC_SARME	0x4C	/* Set Asynchronous Response Mode Extended */
-#define XDLC_SABME	0x6C	/* Set Asynchronous Balanced Mode Extended */
-#define XDLC_RESET	0x8C	/* Reset */
-#define XDLC_XID	0xAC	/* Exchange identification */
-#define XDLC_SNRME	0xCC	/* Set Normal Response Mode Extended */
-#define XDLC_BCN	0xEC	/* Beacon */
-
-/*
- * This macro takes the control field of an xDLC frame, as returned by
- * "get_xdlc_control()" or "dissect_xdlc_control()", and evaluates to
- * TRUE if the frame is an "information" frame and FALSE if it isn't.
- * Note that frames other than information frames can have data in them,
- * e.g. TEST frames.
- */
-#define XDLC_IS_INFORMATION(control) \
-	(((control) & XDLC_I_MASK) == XDLC_I || (control) == (XDLC_UI|XDLC_U))
-
-/*
- * This macro takes the control field of an xDLC frame, and a flag saying
- * whether we're doing basic or extended operation, and evaluates to
- * the length of that field (if it's an Unnumbered frame, or we're not
- * in extended mode, it's 1 byte long, otherwise it's 2 bytes long).
- */
-#define XDLC_CONTROL_LEN(control, is_extended) \
-	((((control) & XDLC_S_U_MASK) == XDLC_U || !(is_extended)) ? 1 : 2)
-
-/*
- * Structure containing pointers to hf_ values for various subfields of
- * the control field.
- */
-typedef struct {
-	int	*hf_xdlc_n_r;
-	int	*hf_xdlc_n_s;
-	int	*hf_xdlc_p;
-	int	*hf_xdlc_f;
-	int	*hf_xdlc_s_ftype;
-	int	*hf_xdlc_u_modifier_cmd;
-	int	*hf_xdlc_u_modifier_resp;
-	int	*hf_xdlc_ftype_i;
-	int	*hf_xdlc_ftype_s_u;
-} xdlc_cf_items;
-
-extern const value_string ftype_vals[];
-extern const value_string stype_vals[];
-extern const value_string modifier_vals_cmd[];
-extern const value_string modifier_vals_resp[];
-
-extern int get_xdlc_control(const guchar *pd, int offset, int extended);
-
-extern int dissect_xdlc_control(tvbuff_t *tvb, int offset, packet_info *pinfo,
-  proto_tree *xdlc_tree, int hf_xdlc_control, gint ett_xdlc_control,
-  const xdlc_cf_items *cf_items_nonext, const xdlc_cf_items *cf_items_ext,
-  const value_string *u_modifier_short_vals_cmd,
-  const value_string *u_modifier_short_vals_resp, int is_response,
-  int is_extended, int append_info);
-
-#endif
diff -urN ethereal-0.10.6/xmlstub.c ethereal-0.10.7/xmlstub.c
--- ethereal-0.10.6/xmlstub.c	2004-08-12 17:41:25.000000000 -0500
+++ ethereal-0.10.7/xmlstub.c	2004-10-20 17:34:15.000000000 -0500
@@ -3,7 +3,7 @@
  * exists so that the library can be loaded on systems that
  * have it.
  *
- * $Id: xmlstub.c 11400 2004-07-18 00:24:25Z guy $
+ * $Id: xmlstub.c 12341 2004-10-18 15:14:13Z gerald $
  *
  * Copyright (c) 2001 by David Frascone <dave@frascone.com>
  *
@@ -145,11 +145,13 @@
 	}
 	XmlStub.xmlSubstituteEntitiesDefault=(int(*)(int))symbol;
 
-	if (!g_module_symbol(handle, "xmlDoValidityCheckingDefaultValue", &symbol)) {
+#ifdef ETHEREAL_XML_DO_VALIDITY_CHECKING
+  if (!g_module_symbol(handle, "xmlDoValidityCheckingDefaultValue", &symbol)) {
 		g_warning("Unable to find \"xmlDoValidityCheckingDefaultValue\"");
 		error=TRUE;
 	}
 	XmlStub.xmlDoValidityCheckingDefaultValue = (int *)symbol;
+#endif
 
 	/*
 	 * Return if any of the above functions set our error flag.
diff -urN ethereal-0.10.6/xmlstub.h ethereal-0.10.7/xmlstub.h
--- ethereal-0.10.6/xmlstub.h	2004-08-12 17:41:25.000000000 -0500
+++ ethereal-0.10.7/xmlstub.h	2004-10-20 17:34:15.000000000 -0500
@@ -8,6 +8,13 @@
 
 #include "config.h"
 
+/****************** specific to ethereal ********************************/
+/*
+ * Uncomment the following line to restore XML_DO_VALIDITY_CHECKING
+ * behavior which is causing issues on WIN32 platforms. See:
+ * http://www.ethereal.com/lists/ethereal-dev/200410/msg00194.html
+ */
+/* #define ETHEREAL_XML_DO_VALIDITY_CHECKING */
 /****************** From xml headers ************************************/
 
 /*
@@ -121,7 +128,7 @@
 #endif
 
 #ifndef LIBXML_DLL_IMPORT
-#if defined(WIN32) && !defined(STATIC)
+#if defined(_WIN32) && !defined(STATIC)
 #define LIBXML_DLL_IMPORT __declspec(dllimport)
 #else
 #define LIBXML_DLL_IMPORT
@@ -188,7 +195,7 @@
 
 typedef unsigned char xmlChar;
 
-#ifndef WIN32
+#ifndef _WIN32
 #ifndef CHAR
 #define CHAR xmlChar
 #endif
@@ -1088,16 +1095,15 @@
 	char            *(*xmlGetProp)(xmlNodePtr, char *);
 	int              (*xmlKeepBlanksDefault)(int);
 	int              (*xmlSubstituteEntitiesDefault)(int);
-
-	/* Variables */
-	int              *xmlDoValidityCheckingDefaultValue;
-
+#ifdef ETHEREAL_XML_DO_VALIDITY_CHECKING
+  int              *xmlDoValidityCheckingDefaultValue;
+#endif
 } XML_STUB;
 
 XML_EXTERN XML_STUB XmlStub;
 XML_EXTERN int XmlStubInitialized;
 
-#ifdef WIN32
+#ifdef _WIN32
 /* We're in windows, use the windows filename */
 #define XML_LIBRARY "libxml2.dll"
 #else
