aboutsummaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorRichard van der Hoff <richardv@mxtelecom.com>2007-08-24 13:44:59 +0000
committerRichard van der Hoff <richardv@mxtelecom.com>2007-08-24 13:44:59 +0000
commite184617c04e10d54081319e0960c0c91e2da8475 (patch)
tree887da7f2c19df3f248b072379cfc5dffb2a957e8 /plugins
parenta312d7833c6a0417f1272dd701d94a47873f32ae (diff)
complete the death of the h223 plugin
svn path=/trunk/; revision=22635
Diffstat (limited to 'plugins')
-rw-r--r--plugins/Makefile.am1
-rw-r--r--plugins/h223/AUTHORS4
-rw-r--r--plugins/h223/COPYING340
-rw-r--r--plugins/h223/ChangeLog5
-rw-r--r--plugins/h223/Makefile.am125
-rw-r--r--plugins/h223/Makefile.common40
-rw-r--r--plugins/h223/Makefile.nmake96
-rw-r--r--plugins/h223/moduleinfo.h18
-rw-r--r--plugins/h223/moduleinfo.nmake28
-rw-r--r--plugins/h223/packet-h223.c1584
-rw-r--r--plugins/h223/packet-h223.h31
-rw-r--r--plugins/h223/plugin.rc.in34
12 files changed, 0 insertions, 2306 deletions
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index eb99da0e3f..2dfa2d2536 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -30,7 +30,6 @@ SUBDIRS = \
enttec \
giop \
gryphon \
- h223 \
irda \
lwres \
m2m \
diff --git a/plugins/h223/AUTHORS b/plugins/h223/AUTHORS
deleted file mode 100644
index 16664ae607..0000000000
--- a/plugins/h223/AUTHORS
+++ /dev/null
@@ -1,4 +0,0 @@
-Author :
-Richard van der Hoff <richardv@mxtelecom.com>
-
-
diff --git a/plugins/h223/COPYING b/plugins/h223/COPYING
deleted file mode 100644
index d60c31a97a..0000000000
--- a/plugins/h223/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- 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
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/plugins/h223/ChangeLog b/plugins/h223/ChangeLog
deleted file mode 100644
index 98d6a87710..0000000000
--- a/plugins/h223/ChangeLog
+++ /dev/null
@@ -1,5 +0,0 @@
-2004-04-14 Richard van der Hoff <richardv@mxtelecom.com>
-
- * initial version
-
-
diff --git a/plugins/h223/Makefile.am b/plugins/h223/Makefile.am
deleted file mode 100644
index 2bfec3064b..0000000000
--- a/plugins/h223/Makefile.am
+++ /dev/null
@@ -1,125 +0,0 @@
-# Makefile.am
-# Automake file for H.223 plugin
-#
-# $Id$
-#
-# Wireshark - Network traffic analyzer
-# By Gerald Combs <gerald@wireshark.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.
-#
-
-INCLUDES = -I$(top_srcdir) -I$(includedir)
-
-include Makefile.common
-
-if HAVE_WARNINGS_AS_ERRORS
-AM_CFLAGS = -Werror
-endif
-
-plugindir = @plugindir@
-
-plugin_LTLIBRARIES = h223.la
-h223_la_SOURCES = \
- plugin.c \
- moduleinfo.h \
- $(DISSECTOR_SRC) \
- $(DISSECTOR_SUPPORT_SRC) \
- $(DISSECTOR_INCLUDES)
-h223_la_LDFLAGS = -module -avoid-version
-h223_la_LIBADD = @PLUGIN_LIBS@
-
-# Libs must be cleared, or else libtool won't create a shared module.
-# If your module needs to be linked against any particular libraries,
-# add them here.
-LIBS =
-
-#
-# Build plugin.c, which contains the plugin version[] string, a
-# function plugin_register() that calls the register routines for all
-# protocols, and a function plugin_reg_handoff() that calls the handoff
-# registration routines for all protocols.
-#
-# We do this by scanning sources. If that turns out to be too slow,
-# maybe we could just require every .o file to have an register routine
-# of a given name (packet-aarp.o -> proto_register_aarp, etc.).
-#
-# Formatting conventions: The name of the proto_register_* routines an
-# proto_reg_handoff_* routines must start in column zero, or must be
-# preceded only by "void " starting in column zero, and must not be
-# inside #if.
-#
-# DISSECTOR_SRC is assumed to have all the files that need to be scanned.
-#
-# For some unknown reason, having a big "for" loop in the Makefile
-# to scan all the files doesn't work with some "make"s; they seem to
-# pass only the first few names in the list to the shell, for some
-# reason.
-#
-# Therefore, we have a script to generate the plugin.c file.
-# The shell script runs slowly, as multiple greps and seds are run
-# for each input file; this is especially slow on Windows. Therefore,
-# if Python is present (as indicated by PYTHON being defined), we run
-# a faster Python script to do that work instead.
-#
-# The first argument is the directory in which the source files live.
-# The second argument is "plugin", to indicate that we should build
-# a plugin.c file for a plugin.
-# All subsequent arguments are the files to scan.
-#
-plugin.c: $(DISSECTOR_SRC) $(top_srcdir)/tools/make-dissector-reg \
- $(top_srcdir)/tools/make-dissector-reg.py
- @if test -n $(PYTHON); then \
- echo Making plugin.c with python ; \
- $(PYTHON) $(top_srcdir)/tools/make-dissector-reg.py $(srcdir) \
- plugin $(DISSECTOR_SRC) ; \
- else \
- echo Making plugin.c with shell script ; \
- $(top_srcdir)/tools/make-dissector-reg $(srcdir) \
- $(plugin_src) plugin $(DISSECTOR_SRC) ; \
- fi
-
-#
-# Currently plugin.c can be included in the distribution because
-# we always build all protocol dissectors. We used to have to check
-# whether or not to build the snmp dissector. If we again need to
-# variably build something, making plugin.c non-portable, uncomment
-# the dist-hook line below.
-#
-# Oh, yuk. We don't want to include "plugin.c" in the distribution, as
-# its contents depend on the configuration, and therefore we want it
-# to be built when the first "make" is done; however, Automake insists
-# on putting *all* source into the distribution.
-#
-# We work around this by having a "dist-hook" rule that deletes
-# "plugin.c", so that "dist" won't pick it up.
-#
-#dist-hook:
-# @rm -f $(distdir)/plugin.c
-
-CLEANFILES = \
- h223 \
- *~
-
-MAINTAINERCLEANFILES = \
- Makefile.in \
- plugin.c
-
-EXTRA_DIST = \
- Makefile.common \
- Makefile.nmake \
- moduleinfo.nmake \
- plugin.rc.in
diff --git a/plugins/h223/Makefile.common b/plugins/h223/Makefile.common
deleted file mode 100644
index bc60a65d81..0000000000
--- a/plugins/h223/Makefile.common
+++ /dev/null
@@ -1,40 +0,0 @@
-# Makefile.common for H.223 plugin
-# Contains the stuff from Makefile.am and Makefile.nmake that is
-# a) common to both files and
-# b) portable between both files
-#
-# $Id$
-#
-# Wireshark - Network traffic analyzer
-# By Gerald Combs <gerald@wireshark.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.
-
-# the name of the plugin
-PLUGIN_NAME = h223
-
-# the dissector sources (without any helpers)
-DISSECTOR_SRC = \
- packet-h223.c
-
-# corresponding headers
-DISSECTOR_INCLUDES = \
- packet-h223.h
-
-# Dissector helpers. They're included in the source files in this
-# directory, but they're not dissectors themselves, i.e. they're not
-# used to generate "register.c").
-DISSECTOR_SUPPORT_SRC =
diff --git a/plugins/h223/Makefile.nmake b/plugins/h223/Makefile.nmake
deleted file mode 100644
index dbc7d1c4e7..0000000000
--- a/plugins/h223/Makefile.nmake
+++ /dev/null
@@ -1,96 +0,0 @@
-# Makefile.nmake
-# nmake file for Wireshark plugin
-#
-# $Id$
-#
-
-include ..\..\config.nmake
-include moduleinfo.nmake
-
-include Makefile.common
-
-CFLAGS=/WX /DHAVE_CONFIG_H /I../.. /I../../wiretap $(GLIB_CFLAGS) \
- /I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS)
-
-LDFLAGS = $(PLUGIN_LDFLAGS)
-
-!IFDEF ENABLE_LIBWIRESHARK
-LINK_PLUGIN_WITH=..\..\epan\libwireshark.lib
-CFLAGS=/DHAVE_WIN32_LIBWIRESHARK_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
-
-DISSECTOR_OBJECTS = $(DISSECTOR_SRC:.c=.obj)
-
-DISSECTOR_SUPPORT_OBJECTS = $(DISSECTOR_SUPPORT_SRC:.c=.obj)
-
-OBJECTS = $(DISSECTOR_OBJECTS) $(DISSECTOR_SUPPORT_OBJECTS) plugin.obj
-
-RESOURCE=$(PLUGIN_NAME).res
-
-all: $(PLUGIN_NAME).dll
-
-$(PLUGIN_NAME).rc : moduleinfo.nmake
- sed -e s/@PLUGIN_NAME@/$(PLUGIN_NAME)/ \
- -e s/@RC_MODULE_VERSION@/$(RC_MODULE_VERSION)/ \
- -e s/@RC_VERSION@/$(RC_VERSION)/ \
- -e s/@MODULE_VERSION@/$(MODULE_VERSION)/ \
- -e s/@PACKAGE@/$(PACKAGE)/ \
- -e s/@VERSION@/$(VERSION)/ \
- -e s/@MSVC_VARIANT@/$(MSVC_VARIANT)/ \
- < plugin.rc.in > $@
-
-$(PLUGIN_NAME).dll $(PLUGIN_NAME).exp $(PLUGIN_NAME).lib : $(OBJECTS) $(LINK_PLUGIN_WITH) $(RESOURCE)
- link -dll /out:$(PLUGIN_NAME).dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
- $(GLIB_LIBS) $(RESOURCE)
-
-#
-# Build plugin.c, which contains the plugin version[] string, a
-# function plugin_register() that calls the register routines for all
-# protocols, and a function plugin_reg_handoff() that calls the handoff
-# registration routines for all protocols.
-#
-# We do this by scanning sources. If that turns out to be too slow,
-# maybe we could just require every .o file to have an register routine
-# of a given name (packet-aarp.o -> proto_register_aarp, etc.).
-#
-# Formatting conventions: The name of the proto_register_* routines an
-# proto_reg_handoff_* routines must start in column zero, or must be
-# preceded only by "void " starting in column zero, and must not be
-# inside #if.
-#
-# DISSECTOR_SRC is assumed to have all the files that need to be scanned.
-#
-# For some unknown reason, having a big "for" loop in the Makefile
-# to scan all the files doesn't work with some "make"s; they seem to
-# pass only the first few names in the list to the shell, for some
-# reason.
-#
-# Therefore, we have a script to generate the plugin.c file.
-# The shell script runs slowly, as multiple greps and seds are run
-# for each input file; this is especially slow on Windows. Therefore,
-# if Python is present (as indicated by PYTHON being defined), we run
-# a faster Python script to do that work instead.
-#
-# The first argument is the directory in which the source files live.
-# The second argument is "plugin", to indicate that we should build
-# a plugin.c file for a plugin.
-# All subsequent arguments are the files to scan.
-#
-plugin.c: $(DISSECTOR_SRC) ../../tools/make-dissector-reg.py ../../tools/make-dissector-reg
-!IFDEF PYTHON
- @echo Making plugin.c (using python)
- @$(PYTHON) "../../tools/make-dissector-reg.py" . plugin $(DISSECTOR_SRC)
-!ELSE
- @echo Making plugin.c (using sh)
- @$(SH) ../../tools/make-dissector-reg . plugin $(DISSECTOR_SRC)
-!ENDIF
-
-!ENDIF
-
-clean:
- rm -f $(OBJECTS) $(RESOURCE) plugin.c *.pdb \
- $(PLUGIN_NAME).dll $(PLUGIN_NAME).dll.manifest $(PLUGIN_NAME).lib \
- $(PLUGIN_NAME).exp $(PLUGIN_NAME).rc
-
-distclean: clean
-
-maintainer-clean: distclean
diff --git a/plugins/h223/moduleinfo.h b/plugins/h223/moduleinfo.h
deleted file mode 100644
index cbb5be5b86..0000000000
--- a/plugins/h223/moduleinfo.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Included *after* config.h, in order to re-define these macros */
-
-#ifdef PACKAGE
-#undef PACKAGE
-#endif
-
-/* Name of package */
-#define PACKAGE "h223"
-
-
-#ifdef VERSION
-#undef VERSION
-#endif
-
-/* Version number of package */
-#define VERSION "0.0.1"
-
-
diff --git a/plugins/h223/moduleinfo.nmake b/plugins/h223/moduleinfo.nmake
deleted file mode 100644
index 2b9908aeb6..0000000000
--- a/plugins/h223/moduleinfo.nmake
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# $Id$
-#
-
-# The name
-PACKAGE=h223
-
-# The version
-MODULE_VERSION_MAJOR=0
-MODULE_VERSION_MINOR=0
-MODULE_VERSION_MICRO=1
-MODULE_VERSION_EXTRA=0
-
-#
-# The RC_VERSION should be comma-separated, not dot-separated,
-# as per Graham Bloice's message in
-#
-# http://www.ethereal.com/lists/ethereal-dev/200303/msg00283.html
-#
-# "The RC_VERSION variable in config.nmake should be comma separated.
-# This allows the resources to be built correctly and the version
-# number to be correctly displayed in the explorer properties dialog
-# for the executables, and XP's tooltip, rather than 0.0.0.0."
-#
-
-MODULE_VERSION=$(MODULE_VERSION_MAJOR).$(MODULE_VERSION_MINOR).$(MODULE_VERSION_MICRO).$(MODULE_VERSION_EXTRA)
-RC_MODULE_VERSION=$(MODULE_VERSION_MAJOR),$(MODULE_VERSION_MINOR),$(MODULE_VERSION_MICRO),$(MODULE_VERSION_EXTRA)
-
diff --git a/plugins/h223/packet-h223.c b/plugins/h223/packet-h223.c
deleted file mode 100644
index 2cd86d7fe4..0000000000
--- a/plugins/h223/packet-h223.c
+++ /dev/null
@@ -1,1584 +0,0 @@
-/* packet-h223.c
- * Routines for H.223 packet dissection
- * Copyright (c) 2004-5 MX Telecom Ltd <richardv@mxtelecom.com>
- *
- * $Id$
- *
- * Wireshark - Network traffic analyzer
- * By Gerald Combs <gerald@wireshark.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.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-
-#include <gmodule.h>
-#include <glib.h>
-#include <epan/emem.h>
-#include <epan/bitswap.h>
-#include <epan/circuit.h>
-#include <epan/conversation.h>
-#include <epan/packet.h>
-#include <epan/stream.h>
-#include <epan/reassemble.h>
-#include <epan/golay.h>
-#include <epan/iax2_codec_type.h>
-#include <epan/dissectors/packet-frame.h>
-#include <epan/asn1.h>
-#include <epan/dissectors/packet-h245.h>
-
-#include "packet-h223.h"
-
-#include <string.h>
-
-/* #define DEBUG_H223 */
-
-/* debug the mux-pdu defragmentation code. warning: verbose output! */
-/* #define DEBUG_H223_FRAGMENTATION */
-
-#define PROTO_TAG_H223 "H223"
-
-/* Wireshark ID of the H.223 protocol */
-static int proto_h223 = -1;
-static int proto_h223_bitswapped = -1;
-
-/* The following hf_* variables are used to hold the Wireshark IDs of
- * our header fields; they are filled out when we call
- * proto_register_field_array() in proto_register_h223()
- */
-static int hf_h223_non_h223_data = -1;
-static int hf_h223_mux_stuffing_pdu = -1;
-static int hf_h223_mux_pdu = -1;
-static int hf_h223_mux_header = -1;
-static int hf_h223_mux_rawhdr = -1;
-static int hf_h223_mux_correctedhdr = -1;
-static int hf_h223_mux_mc = -1;
-static int hf_h223_mux_mpl = -1;
-static int hf_h223_mux_deact = -1;
-static int hf_h223_mux_vc = -1;
-static int hf_h223_mux_extra = -1;
-static int hf_h223_mux_hdlc2 = -1;
-static int hf_h223_mux_fragments = -1;
-static int hf_h223_mux_fragment = -1;
-static int hf_h223_mux_fragment_overlap = -1;
-static int hf_h223_mux_fragment_overlap_conflict = -1;
-static int hf_h223_mux_fragment_multiple_tails = -1;
-static int hf_h223_mux_fragment_too_long_fragment = -1;
-static int hf_h223_mux_fragment_error = -1;
-static int hf_h223_mux_reassembled_in = -1;
-
-static int hf_h223_al_fragments = -1;
-static int hf_h223_al_fragment = -1;
-static int hf_h223_al_fragment_overlap = -1;
-static int hf_h223_al_fragment_overlap_conflict = -1;
-static int hf_h223_al_fragment_multiple_tails = -1;
-static int hf_h223_al_fragment_too_long_fragment = -1;
-static int hf_h223_al_fragment_error = -1;
-static int hf_h223_al_reassembled_in = -1;
-
-static int hf_h223_al1 = -1;
-static int hf_h223_al1_framed = -1;
-static int hf_h223_al2 = -1;
-static int hf_h223_al2_sequenced = -1;
-static int hf_h223_al2_unsequenced = -1;
-static int hf_h223_al2_seqno = -1;
-static int hf_h223_al2_crc = -1;
-static int hf_h223_al2_crc_bad = -1;
-
-static int hf_h223_al_payload = -1;
-
-/* These are the ids of the subtrees that we may be creating */
-static gint ett_h223 = -1;
-static gint ett_h223_non_h223_data = -1;
-static gint ett_h223_mux_stuffing_pdu = -1;
-static gint ett_h223_mux_pdu = -1;
-static gint ett_h223_mux_header = -1;
-static gint ett_h223_mux_deact = -1;
-static gint ett_h223_mux_vc = -1;
-static gint ett_h223_mux_extra = -1;
-static gint ett_h223_mux_fragments = -1;
-static gint ett_h223_mux_fragment = -1;
-static gint ett_h223_al_fragments = -1;
-static gint ett_h223_al_fragment = -1;
-static gint ett_h223_al1 = -1;
-static gint ett_h223_al2 = -1;
-static gint ett_h223_al_payload = -1;
-
-/* These are the handles of our subdissectors */
-static dissector_handle_t data_handle=NULL;
-static dissector_handle_t srp_handle=NULL;
-static dissector_handle_t h245dg_handle=NULL;
-
-static const fragment_items h223_mux_frag_items _U_ = {
- &ett_h223_mux_fragment,
- &ett_h223_mux_fragments,
- &hf_h223_mux_fragments,
- &hf_h223_mux_fragment,
- &hf_h223_mux_fragment_overlap,
- &hf_h223_mux_fragment_overlap_conflict,
- &hf_h223_mux_fragment_multiple_tails,
- &hf_h223_mux_fragment_too_long_fragment,
- &hf_h223_mux_fragment_error,
- &hf_h223_mux_reassembled_in,
- "fragments"
-};
-
-static const fragment_items h223_al_frag_items = {
- &ett_h223_al_fragment,
- &ett_h223_al_fragments,
- &hf_h223_al_fragments,
- &hf_h223_al_fragment,
- &hf_h223_al_fragment_overlap,
- &hf_h223_al_fragment_overlap_conflict,
- &hf_h223_al_fragment_multiple_tails,
- &hf_h223_al_fragment_too_long_fragment,
- &hf_h223_al_fragment_error,
- &hf_h223_al_reassembled_in,
- "fragments"
-};
-
-/* this is a fudge to pass pdu_offset into add_h223_mux_element() */
-static guint32 pdu_offset;
-
-/***************************************************************************
- *
- * virtual circuit number handling
- *
- * we have to be able to manage more than one H.223 call at a time,
- * so have a hash which maps {call,vc} to an integer.
- */
-
-typedef struct _h223_call_info h223_call_info;
-
-typedef struct {
- const h223_call_info* call; /* h223 call */
- guint32 vc; /* child circuit */
-} circuit_chain_key;
-
-static GHashTable *circuit_chain_hashtable = NULL;
-static guint circuit_chain_count = 1;
-
-/* Hash Functions */
-static gint circuit_chain_equal(gconstpointer v, gconstpointer w)
-{
- const circuit_chain_key *v1 = (const circuit_chain_key *)v;
- const circuit_chain_key *v2 = (const circuit_chain_key *)w;
- gint result;
- result = ( v1->call == v2->call &&
- v1->vc == v2 -> vc );
- return result;;
-}
-
-static guint circuit_chain_hash (gconstpointer v)
-{
- const circuit_chain_key *key = (const circuit_chain_key *)v;
- guint hash_val = ((guint32)(unsigned long)(key->call))^(((guint32)key->vc) << 16);
- return hash_val;
-}
-
-static guint32 circuit_chain_lookup(const h223_call_info* call_info,
- guint32 child_vc)
-{
- circuit_chain_key key, *new_key;
- guint32 circuit_id;
- key.call = call_info;
- key.vc = child_vc;
- circuit_id = GPOINTER_TO_UINT(g_hash_table_lookup( circuit_chain_hashtable, &key ));
- if( circuit_id == 0 ) {
- new_key = se_alloc(sizeof(circuit_chain_key));
- *new_key = key;
- circuit_id = ++circuit_chain_count;
- g_hash_table_insert(circuit_chain_hashtable, new_key, GUINT_TO_POINTER(circuit_id));
- }
- return circuit_id;
-}
-
-static void circuit_chain_init(void)
-{
- if (circuit_chain_hashtable)
- g_hash_table_destroy(circuit_chain_hashtable);
- circuit_chain_hashtable = g_hash_table_new(circuit_chain_hash, circuit_chain_equal);
- circuit_chain_count = 1;
-}
-
-
-/***************************************************************************
- *
- * Call information management
- *
- */
-
-/* we keep information on each call in an h223_call_info structure
- *
- * We attach the h223_call_info structures to individual calls with
- * circuit_add_proto_data().
-*/
-
-typedef struct _h223_mux_element_listitem h223_mux_element_listitem;
-struct _h223_mux_element_listitem {
- h223_mux_element *me;
- guint32 first_frame;
- guint32 pdu_offset;
- h223_mux_element_listitem *next;
-};
-
-/* we have this information for each stream */
-typedef struct {
- h223_mux_element_listitem* mux_table[16];
-} h223_call_direction_data;
-
-
-struct _h223_call_info {
- /* H.223 level: 0 for standard H223, 1, 2 or 3 for the enhanced protocols
- specified in the annexes
- */
- int h223_level;
-
- /* for H.223 streams over TCP (as opposed to IAX), this
- stores the source address and port of the first packet spotted,
- so that we can differentiate directions.
- */
- address srcaddress;
- guint32 srcport;
-
- h223_call_direction_data direction_data[2];
-};
-
-typedef struct _h223_lc_params_listitem h223_lc_params_listitem;
-struct _h223_lc_params_listitem
-{
- h223_lc_params *lc_params;
- guint32 first_frame;
- guint32 last_frame;
- h223_lc_params_listitem *next;
-};
-
-typedef struct {
- h223_lc_params_listitem *lc_params[2];
- h223_call_info *call_info;
-} h223_vc_info;
-
-static void add_h223_mux_element(h223_call_direction_data *direct, guint8 mc, h223_mux_element *me, guint32 framenum)
-{
- h223_mux_element_listitem *li;
- h223_mux_element_listitem **old_li_ptr;
- h223_mux_element_listitem *old_li;
-
- DISSECTOR_ASSERT(mc < 16);
-
- li = se_alloc(sizeof(h223_mux_element_listitem));
- old_li_ptr = &(direct->mux_table[mc]);
- old_li = *old_li_ptr;
- if( !old_li ) {
- direct->mux_table[mc] = li;
- } else {
- while( old_li->next ) {
- old_li_ptr = &(old_li->next);
- old_li = *old_li_ptr;
- }
- if( framenum < old_li->first_frame || (framenum == old_li->first_frame && pdu_offset < old_li->pdu_offset) )
- return;
- else if ( framenum == old_li->first_frame && pdu_offset == old_li->pdu_offset )
- *old_li_ptr = li; /* replace the tail of the list with the new item, since */
- /* a single h223 pdu has just set the same MC twice.. */
- else
- old_li->next = li;
- }
- li->first_frame = framenum;
- li->pdu_offset = pdu_offset;
- li->next = 0;
- li->me = me;
-}
-
-static h223_mux_element* find_h223_mux_element(h223_call_direction_data* direct, guint8 mc, guint32 framenum, guint32 pkt_offset)
-{
- h223_mux_element_listitem* li;
-
- DISSECTOR_ASSERT(mc < 16);
-
- li = direct->mux_table[mc];
-
- while( li && li->next && li->next->first_frame < framenum )
- li = li->next;
- while( li && li->next && li->next->first_frame == framenum && li->next->pdu_offset < pkt_offset )
- li = li->next;
- if( li ) {
- return li->me;
- } else {
- return NULL;
- }
-}
-
-static void add_h223_lc_params(h223_vc_info* vc_info, int direction, h223_lc_params *lc_params, guint32 framenum )
-{
- h223_lc_params_listitem *li = se_alloc(sizeof(h223_lc_params_listitem));
- h223_lc_params_listitem **old_li_ptr = &(vc_info->lc_params[direction ? 0 : 1]);
- h223_lc_params_listitem *old_li = *old_li_ptr;
- if( !old_li ) {
- vc_info->lc_params[direction ? 0 : 1] = li;
- } else {
- while( old_li->next ) {
- old_li_ptr = &(old_li->next);
- old_li = *old_li_ptr;
- }
- if( framenum < old_li->first_frame )
- return;
- else if( framenum == old_li->first_frame )
- *old_li_ptr = li;
- else {
- old_li->next = li;
- old_li->last_frame = framenum - 1;
- }
- }
- li->first_frame = framenum;
- li->last_frame = 0;
- li->next = 0;
- li->lc_params = lc_params;
-}
-
-static h223_lc_params* find_h223_lc_params(h223_vc_info* vc_info, int direction, guint32 framenum)
-{
- h223_lc_params_listitem* li = vc_info->lc_params[direction? 0 : 1];
- while( li && li->next && li->next->first_frame <= framenum )
- li = li->next;
- if( li )
- return li->lc_params;
- else
- return NULL;
-}
-
-static void init_direction_data(h223_call_direction_data *direct)
-{
- int i;
- h223_mux_element *mc0_element;
-
- for ( i = 0; i < 16; ++i )
- direct->mux_table[i] = NULL;
-
- /* set up MC 0 to contain just VC 0 */
- mc0_element = se_alloc(sizeof(h223_mux_element));
- add_h223_mux_element( direct, 0, mc0_element, 0 );
- mc0_element->sublist = NULL;
- mc0_element->vc = 0;
- mc0_element->repeat_count = 0; /* until closing flag */
- mc0_element->next = NULL;
-}
-
-static h223_vc_info* h223_vc_info_new( h223_call_info* call_info )
-{
- h223_vc_info *vc_info = se_alloc(sizeof(h223_vc_info));
- vc_info->lc_params[0] = vc_info->lc_params[1] = NULL;
- vc_info->call_info = call_info;
- return vc_info;
-}
-
-static void init_logical_channel( guint32 start_frame, h223_call_info* call_info, int vc, int direction, h223_lc_params* params )
-{
- guint32 circuit_id = circuit_chain_lookup(call_info, vc);
- circuit_t *subcircuit;
- h223_vc_info *vc_info;
- subcircuit = find_circuit( CT_H223, circuit_id, start_frame );
-
- if( subcircuit == NULL ) {
- subcircuit = circuit_new( CT_H223, circuit_id, start_frame );
-#ifdef DEBUG_H223
- g_debug("%d: Created new circuit %d for call %p VC %d", start_frame, circuit_id, call_info, vc);
-#endif
- vc_info = h223_vc_info_new( call_info );
- circuit_add_proto_data( subcircuit, proto_h223, vc_info );
- } else {
- vc_info = circuit_get_proto_data( subcircuit, proto_h223 );
- }
- add_h223_lc_params( vc_info, direction, params, start_frame );
-}
-
-/* create a brand-new h223_call_info structure */
-static h223_call_info *create_call_info( guint32 start_frame )
-{
- h223_call_info *data;
- h223_lc_params *vc0_params;
-
- data = se_alloc(sizeof(h223_call_info));
-
- /* initialise the call info */
- init_direction_data(&data -> direction_data[0]);
- init_direction_data(&data -> direction_data[1]);
-
- /* FIXME shouldn't this be figured out dynamically? */
- data -> h223_level = 2;
-
- vc0_params = se_alloc(sizeof(h223_lc_params));
- vc0_params->al_type = al1Framed;
- vc0_params->al_params = NULL;
- vc0_params->segmentable = TRUE;
- vc0_params->subdissector = srp_handle;
- init_logical_channel( start_frame, data, 0, P2P_DIR_SENT, vc0_params );
- init_logical_channel( start_frame, data, 0, P2P_DIR_RECV, vc0_params );
- return data;
-}
-
-/* find or create call_info struct for calls over circuits (eg, IAX) */
-static h223_call_info *find_or_create_call_info_circ(packet_info * pinfo)
-{
- h223_call_info *data;
- circuit_t *circ = NULL;
-
- if(pinfo->ctype != CT_NONE)
- circ = find_circuit( pinfo->ctype, pinfo->circuit_id, pinfo->fd->num );
- if(circ == NULL)
- return NULL;
-
- data = (h223_call_info *)circuit_get_proto_data(circ, proto_h223);
-
- if( data == NULL ) {
- data = create_call_info(pinfo->fd->num);
-
-#ifdef DEBUG_H223
- g_debug("%u: Created new call %p for circuit %p ctype %d, id %u",
- pinfo->fd->num, data, circ, pinfo->ctype, pinfo->circuit_id);
-#endif
- circuit_add_proto_data(circ, proto_h223, data);
- }
-
- /* work out what direction we're really going in */
- if( pinfo->p2p_dir < 0 || pinfo->p2p_dir > 1)
- pinfo->p2p_dir = P2P_DIR_SENT;
-
- return data;
-}
-
-/* find or create call_info struct for calls over conversations (eg, RTP) */
-static h223_call_info *find_or_create_call_info_conv(packet_info * pinfo)
-{
- h223_call_info *data;
- conversation_t *conv;
-
- /* assume we're running atop TCP or RTP; use the conversation support */
- conv = find_conversation( pinfo->fd->num,
- &pinfo->src,&pinfo->dst,
- pinfo->ptype,
- pinfo->srcport,pinfo->destport, 0 );
-
- /* both RTP and TCP track their conversations, so just assert here if
- * we can't find one */
- DISSECTOR_ASSERT(conv);
-
- data = (h223_call_info *)conversation_get_proto_data(conv, proto_h223);
-
- if(data == NULL && pinfo->ptype == PT_UDP ) {
- conversation_t *conv2;
-
- /* RTP tracks the two sides of the conversation totally separately;
- * this messes us up totally.
- *
- * Look for another converstation, going in the opposite direction.
- */
- conv2 = find_conversation( pinfo->fd->num,
- &pinfo->dst,&pinfo->src,
- pinfo->ptype,
- pinfo->destport,pinfo->srcport, 0 );
- if(conv2 != NULL)
- data = (h223_call_info *)conversation_get_proto_data(conv2, proto_h223);
-
- if(data != NULL) {
-#ifdef DEBUG_H223
- g_debug("%u: Identified conv %p as reverse of conv %p with call %p and type=%u src=%u.%u.%u.%u:%u dst=%u.%u.%u.%u:%u",
- pinfo->fd->num, conv, conv2, data, pinfo->ptype,
- pinfo->dst.data[0], pinfo->dst.data[1], pinfo->dst.data[2], pinfo->dst.data[3],
- pinfo->destport,
- pinfo->src.data[0], pinfo->src.data[1], pinfo->src.data[2], pinfo->src.data[3],
- pinfo->srcport);
-#endif
- conversation_add_proto_data(conv, proto_h223, data);
- }
- }
-
- /* we still haven't found any call data - create a new one for this
- * conversation */
- if(data == NULL) {
- data = create_call_info(pinfo->fd->num);
-
-#ifdef DEBUG_H223
- g_debug("%u: Created new call %p for conv %p type=%u src=%u.%u.%u.%u:%u dst=%u.%u.%u.%u:%u",
- pinfo->fd->num, data, conv, pinfo->ptype,
- pinfo->src.data[0], pinfo->src.data[1], pinfo->src.data[2], pinfo->src.data[3],
- pinfo->srcport,
- pinfo->dst.data[0], pinfo->dst.data[1], pinfo->dst.data[2], pinfo->dst.data[3],
- pinfo->destport);
-#endif
-
- conversation_add_proto_data(conv, proto_h223, data);
- /* add the source details so we can distinguish directions
- * in future */
- COPY_ADDRESS(&(data -> srcaddress), &(pinfo->src));
- data -> srcport = pinfo->srcport;
- }
-
- /* work out what direction we're really going in */
- if( ADDRESSES_EQUAL( &(pinfo->src), &(data->srcaddress))
- && pinfo->srcport == data->srcport )
- pinfo->p2p_dir = P2P_DIR_SENT;
- else
- pinfo->p2p_dir = P2P_DIR_RECV;
-
- return data;
-}
-
-static h223_call_info *find_or_create_call_info ( packet_info * pinfo )
-{
- h223_call_info *data;
-
- data = find_or_create_call_info_circ(pinfo);
- if(data == NULL)
- data = find_or_create_call_info_conv(pinfo);
- return data;
-}
-
-/* called from the h245 dissector to handle a MultiplexEntrySend message */
-static void h223_set_mc( packet_info* pinfo, guint8 mc, h223_mux_element* me )
-{
- circuit_t *circ = find_circuit( pinfo->ctype, pinfo->circuit_id, pinfo->fd->num );
- h223_vc_info* vc_info;
-
- /* if this h245 pdu packet came from an h223 circuit, add the details on
- * the new mux entry */
- if(circ) {
- vc_info = circuit_get_proto_data(circ, proto_h223);
- add_h223_mux_element( &(vc_info->call_info->direction_data[pinfo->p2p_dir ? 0 : 1]), mc, me, pinfo->fd->num );
- }
-}
-
-/* called from the h245 dissector to handle an OpenLogicalChannelAck message */
-static void h223_add_lc( packet_info* pinfo, guint16 lc, h223_lc_params* params )
-{
- circuit_t *circ = find_circuit( pinfo->ctype, pinfo->circuit_id, pinfo->fd->num );
- h223_vc_info* vc_info;
-
- /* if this h245 pdu packet came from an h223 circuit, add the details on
- * the new channel */
- if(circ) {
- vc_info = circuit_get_proto_data(circ, proto_h223);
- init_logical_channel( pinfo->fd->num, vc_info->call_info, lc, pinfo->p2p_dir, params );
- }
-}
-
-/************************************************************************************
- *
- * AL-PDU dissection
- */
-
-const guint8 crctable[256] = {
- 0x00, 0x91, 0xe3, 0x72, 0x07, 0x96, 0xe4, 0x75, 0x0e, 0x9f, 0xed, 0x7c, 0x09, 0x98, 0xea, 0x7b,
- 0x1c, 0x8d, 0xff, 0x6e, 0x1b, 0x8a, 0xf8, 0x69, 0x12, 0x83, 0xf1, 0x60, 0x15, 0x84, 0xf6, 0x67,
- 0x38, 0xa9, 0xdb, 0x4a, 0x3f, 0xae, 0xdc, 0x4d, 0x36, 0xa7, 0xd5, 0x44, 0x31, 0xa0, 0xd2, 0x43,
- 0x24, 0xb5, 0xc7, 0x56, 0x23, 0xb2, 0xc0, 0x51, 0x2a, 0xbb, 0xc9, 0x58, 0x2d, 0xbc, 0xce, 0x5f,
- 0x70, 0xe1, 0x93, 0x02, 0x77, 0xe6, 0x94, 0x05, 0x7e, 0xef, 0x9d, 0x0c, 0x79, 0xe8, 0x9a, 0x0b,
- 0x6c, 0xfd, 0x8f, 0x1e, 0x6b, 0xfa, 0x88, 0x19, 0x62, 0xf3, 0x81, 0x10, 0x65, 0xf4, 0x86, 0x17,
- 0x48, 0xd9, 0xab, 0x3a, 0x4f, 0xde, 0xac, 0x3d, 0x46, 0xd7, 0xa5, 0x34, 0x41, 0xd0, 0xa2, 0x33,
- 0x54, 0xc5, 0xb7, 0x26, 0x53, 0xc2, 0xb0, 0x21, 0x5a, 0xcb, 0xb9, 0x28, 0x5d, 0xcc, 0xbe, 0x2f,
- 0xe0, 0x71, 0x03, 0x92, 0xe7, 0x76, 0x04, 0x95, 0xee, 0x7f, 0x0d, 0x9c, 0xe9, 0x78, 0x0a, 0x9b,
- 0xfc, 0x6d, 0x1f, 0x8e, 0xfb, 0x6a, 0x18, 0x89, 0xf2, 0x63, 0x11, 0x80, 0xf5, 0x64, 0x16, 0x87,
- 0xd8, 0x49, 0x3b, 0xaa, 0xdf, 0x4e, 0x3c, 0xad, 0xd6, 0x47, 0x35, 0xa4, 0xd1, 0x40, 0x32, 0xa3,
- 0xc4, 0x55, 0x27, 0xb6, 0xc3, 0x52, 0x20, 0xb1, 0xca, 0x5b, 0x29, 0xb8, 0xcd, 0x5c, 0x2e, 0xbf,
- 0x90, 0x01, 0x73, 0xe2, 0x97, 0x06, 0x74, 0xe5, 0x9e, 0x0f, 0x7d, 0xec, 0x99, 0x08, 0x7a, 0xeb,
- 0x8c, 0x1d, 0x6f, 0xfe, 0x8b, 0x1a, 0x68, 0xf9, 0x82, 0x13, 0x61, 0xf0, 0x85, 0x14, 0x66, 0xf7,
- 0xa8, 0x39, 0x4b, 0xda, 0xaf, 0x3e, 0x4c, 0xdd, 0xa6, 0x37, 0x45, 0xd4, 0xa1, 0x30, 0x42, 0xd3,
- 0xb4, 0x25, 0x57, 0xc6, 0xb3, 0x22, 0x50, 0xc1, 0xba, 0x2b, 0x59, 0xc8, 0xbd, 0x2c, 0x5e, 0xcf };
-
-static guint8 h223_al2_crc8bit( tvbuff_t *tvb ) {
- guint32 len = tvb_reported_length(tvb) - 1;
- const guint8* data = tvb_get_ptr( tvb, 0, len );
- unsigned char crc = 0;
- guint32 pos = 0;
- DISSECTOR_ASSERT(tvb_reported_length(tvb) >= 1);
- while ( len-- )
- crc = crctable[crc^data[pos++]];
- return crc;
-}
-
-static void dissect_mux_al_pdu( tvbuff_t *tvb,
- packet_info *pinfo,
- proto_tree *vc_tree,
-/* circuit_t* vc_circuit, */
- h223_lc_params* lc_params )
-{
- proto_tree *al_tree = NULL;
- proto_item *al_item;
- proto_tree *al_subtree;
- proto_item *al_subitem = NULL;
- proto_item *tmp_item;
- tvbuff_t *next_tvb = NULL;
- dissector_handle_t subdissector = lc_params->subdissector;
- guint32 len = tvb_reported_length(tvb);
-
- guint8 calc_checksum;
- guint8 real_checksum;
- gboolean al2_sequenced = FALSE;
- int data_start;
-
- switch( lc_params->al_type ) {
- case al1Framed:
- case al1NotFramed:
- al_item = proto_tree_add_none_format(vc_tree, hf_h223_al1, tvb, 0, -1, "H.223 AL1 (%sframed)",
- (lc_params->al_type==al1Framed)?"":"not ");
- al_tree = proto_item_add_subtree (al_item, ett_h223_al1);
- if(lc_params->al_type == al1Framed)
- proto_tree_add_boolean_hidden(al_tree, hf_h223_al1_framed, tvb, 0, 1, TRUE );
- next_tvb = tvb;
- al_subitem = proto_tree_add_item(al_tree, hf_h223_al_payload, next_tvb, 0, -1, FALSE);
- break;
-
- case al2WithSequenceNumbers:
- al2_sequenced = TRUE;
- /* fall-through */
- case al2WithoutSequenceNumbers:
- tmp_item = proto_tree_add_boolean(vc_tree, hf_h223_al2, tvb, 0, 0, TRUE );
-
- al_item = proto_tree_add_item(vc_tree,
- al2_sequenced?hf_h223_al2_sequenced:hf_h223_al2_unsequenced,
- tvb, 0, -1,FALSE);
- al_tree = proto_item_add_subtree (al_item, ett_h223_al2);
-
- PROTO_ITEM_SET_GENERATED(tmp_item);
-
- /* check minimum payload length */
- if(len < (al2_sequenced?2U:1U))
- THROW(BoundsError);
-
- data_start = 0;
- if( al2_sequenced ) {
- proto_tree_add_item(al_tree, hf_h223_al2_seqno, tvb, 0, 1, TRUE);
- data_start++;
- }
-
- next_tvb = tvb_new_subset( tvb, data_start, len-1-data_start, len-1-data_start );
- al_subitem = proto_tree_add_item(al_tree, hf_h223_al_payload, next_tvb, 0, -1, FALSE);
-
- calc_checksum = h223_al2_crc8bit(tvb);
- real_checksum = tvb_get_guint8(tvb, len - 1);
-
- if( calc_checksum == real_checksum ) {
- proto_tree_add_uint_format(al_tree, hf_h223_al2_crc, tvb, len - 1, 1, real_checksum,
- "CRC: 0x%02x (correct)", real_checksum );
- } else {
- proto_tree_add_uint_format(al_tree, hf_h223_al2_crc, tvb, len - 1, 1, real_checksum,
- "CRC: 0x%02x (incorrect, should be 0x%02x)", real_checksum, calc_checksum );
- tmp_item = proto_tree_add_boolean( al_tree, hf_h223_al2_crc_bad, tvb, len - 1, 1, TRUE );
- PROTO_ITEM_SET_GENERATED(tmp_item);
-
- /* don't pass pdus which fail checksums on to the subdissector */
- subdissector = data_handle;
- }
- break;
- default:
- call_dissector(data_handle, tvb, pinfo, vc_tree);
- return;
- }
-
- if (!subdissector)
- subdissector = data_handle;
-
- al_subtree = proto_item_add_subtree(al_subitem, ett_h223_al_payload);
- call_dissector(subdissector, next_tvb, pinfo, al_subtree);
-}
-
-/************************************************************************************
- *
- * MUX-PDU dissection
- */
-
-
-/* dissect a fragment of a MUX-PDU which belongs to a particular VC
- *
- * tvb buffer containing the MUX-PDU fragment
- * pinfo info on the packet containing the last fragment of the MUX-PDU
- * pkt_offset offset within the block from the superdissector where the
- * fragment starts (must increase monotonically for constant pinfo->fd->num)
- * pdu_tree dissection tree for the PDU; a single item will be added (with
- * its own subtree)
- * vc VC for this SDU
- * end_of_mux_sdu true if this is a segmentable VC and this is the last
- * fragment in an SDU
- */
-static void dissect_mux_sdu_fragment(tvbuff_t *volatile next_tvb,
- packet_info *pinfo,
- guint32 pkt_offset,
- proto_tree *pdu_tree,
- h223_call_info* call_info,
- guint16 vc, gboolean end_of_mux_sdu)
-{
- /* update the circuit details before passing to a subdissector */
- guint32 orig_circuit = pinfo->circuit_id;
- guint32 orig_ctype = pinfo->ctype;
- pinfo->circuit_id=circuit_chain_lookup(call_info, vc);
- pinfo->ctype=CT_H223;
-
- TRY {
- circuit_t *subcircuit=find_circuit(pinfo->ctype,pinfo->circuit_id,pinfo->fd->num);
- proto_tree *vc_tree = NULL;
- proto_item *vc_item;
- h223_vc_info *vc_info = NULL;
- h223_lc_params *lc_params = NULL;
-
- if(pdu_tree) {
- vc_item = proto_tree_add_uint(pdu_tree, hf_h223_mux_vc, next_tvb, 0, tvb_reported_length(next_tvb), vc);
- vc_tree = proto_item_add_subtree (vc_item, ett_h223_mux_vc);
- }
-
- if( subcircuit == NULL ) {
- g_message( "Frame %d: Subcircuit id %d not found for call %p VC %d", pinfo->fd->num,
- pinfo->circuit_id, call_info, vc );
- } else {
- vc_info = circuit_get_proto_data(subcircuit, proto_h223);
- if( vc_info != NULL ) {
- lc_params = find_h223_lc_params( vc_info, pinfo->p2p_dir, pinfo->fd->num );
- }
- }
-
-
- if( lc_params != NULL ) {
- if( lc_params->segmentable && lc_params->al_type != al1NotFramed ) {
- stream_t *substream;
- stream_pdu_fragment_t *frag;
-
- substream = find_stream_circ(subcircuit,pinfo->p2p_dir);
- if(substream == NULL )
- substream = stream_new_circ(subcircuit,pinfo->p2p_dir);
- frag = stream_find_frag(substream,pinfo->fd->num,pkt_offset);
-
- if(frag == NULL ) {
-#ifdef DEBUG_H223
- g_debug("%d: New H.223 VC fragment: Parent circuit %d; subcircuit %d; offset %d; len %d, end %d",
- pinfo->fd->num, orig_circuit, pinfo->circuit_id, pkt_offset, tvb_reported_length(next_tvb), end_of_mux_sdu);
-#endif
- frag = stream_add_frag(substream,pinfo->fd->num,pkt_offset,
- next_tvb,pinfo,!end_of_mux_sdu);
- } else {
-#ifdef DEBUG_H223
- g_debug("%d: Found H.223 VC fragment: Parent circuit %d; subcircuit %d; offset %d; len %d, end %d",
- pinfo->fd->num, orig_circuit, pinfo->circuit_id, pkt_offset, tvb_reported_length(next_tvb), end_of_mux_sdu);
-#endif
- }
-
- next_tvb = stream_process_reassembled(
- next_tvb, 0, pinfo,
- "Reassembled H.223 AL-PDU",
- frag, &h223_al_frag_items,
- NULL, vc_tree);
- }
-
- if(next_tvb) {
- /* fudge to pass pkt_offset down to add_h223_mux_element,
- * should it be called */
- pdu_offset = pkt_offset;
- dissect_mux_al_pdu(next_tvb, pinfo, vc_tree,/* subcircuit,*/ lc_params );
- }
- } else {
- call_dissector(data_handle,next_tvb,pinfo,vc_tree);
- }
- }
-
- /* restore the original circuit details for future PDUs */
- FINALLY {
- pinfo->ctype=orig_ctype;
- pinfo->circuit_id=orig_circuit;
- }
- ENDTRY;
-}
-
-static guint32 mux_element_sublist_size( h223_mux_element* me )
-{
- h223_mux_element *current_me = me;
- guint32 length = 0;
- while ( current_me ) {
- current_me = current_me->next;
- if ( current_me->sublist )
- length += current_me->repeat_count * mux_element_sublist_size( current_me->sublist );
- else
- length += current_me->repeat_count;
- }
- if ( length == 0 ) { /* should never happen, but to avoid infinite loops... */
- DISSECTOR_ASSERT_NOT_REACHED();
- length = 1;
- }
- return length;
-}
-
-/* dissect part of a MUX-PDU payload according to a multiplex list
- *
- * tvb buffer containing entire mux-pdu payload
- * pinfo info on the packet containing the last fragment of the MUX-PDU
- * pkt_offset offset within the block from the superdissector where the
- * MUX-PDU starts (must increase monotonically for constant
- * pinfo->fd->num)
- * pdu_tree dissection tree for the PDU
- * call_info data structure for h223 call
- * me top of mux list
- * offset offset within tvb to start work
- * endOfMuxSdu true if the end-of-sdu flag was set
- */
-static guint32 dissect_mux_payload_by_me_list( tvbuff_t *tvb, packet_info *pinfo, guint32 pkt_offset,
- proto_tree *pdu_tree,
- h223_call_info* call_info, h223_mux_element* me, guint32 offset, gboolean endOfMuxSdu )
-{
- guint32 len = tvb_reported_length(tvb);
- guint32 frag_len;
- guint32 sublist_len;
- int i;
- while ( me ) {
- if ( me->sublist ) {
- if ( me->repeat_count == 0 ) {
- for(sublist_len = mux_element_sublist_size( me->sublist );
- offset + sublist_len <= len;
- offset = dissect_mux_payload_by_me_list( tvb, pinfo, pkt_offset, pdu_tree,
- call_info, me->sublist, offset, endOfMuxSdu ) );
- } else {
- for(i = 0; i < me->repeat_count; ++i)
- offset = dissect_mux_payload_by_me_list( tvb, pinfo, pkt_offset, pdu_tree,
- call_info, me->sublist, offset, endOfMuxSdu );
- }
- } else {
- if ( me->repeat_count == 0 )
- frag_len = len - offset;
- else
- frag_len = me->repeat_count;
- if(frag_len > 0) {
- tvbuff_t *next_tvb;
- next_tvb = tvb_new_subset(tvb, offset, frag_len, frag_len);
- dissect_mux_sdu_fragment( next_tvb, pinfo, pkt_offset + offset, pdu_tree,
- call_info, me->vc, (offset+frag_len==len) && endOfMuxSdu);
- offset += frag_len;
- }
- }
- me = me->next;
- }
- return offset;
-}
-
-/* dissect the payload of a MUX-PDU
- *
- * tvb buffer containing entire mux-pdu payload
- * pinfo info on the packet containing the last fragment of the MUX-PDU
- * pkt_offset offset within the block from the superdissector where the
- * MUX-PDU starts (must increase monotonically for constant
- * pinfo->fd->num)
- * pdu_tree dissection tree for the PDU
- * call_info data structure for h223 call
- * mc multiplex code for this PDU
- * endOfMuxSdu true if the end-of-sdu flag was set
- */
-static void dissect_mux_payload( tvbuff_t *tvb, packet_info *pinfo, guint32 pkt_offset,
- proto_tree *pdu_tree,
- h223_call_info* call_info, guint8 mc, gboolean endOfMuxSdu )
-{
- guint32 len = tvb_reported_length(tvb);
-
- h223_mux_element* me = find_h223_mux_element( &(call_info->direction_data[pinfo->p2p_dir ? 0 : 1]), mc, pinfo->fd->num, pkt_offset );
-
- if( me ) {
- dissect_mux_payload_by_me_list( tvb, pinfo, pkt_offset, pdu_tree, call_info, me, 0, endOfMuxSdu );
- } else {
- /* no entry found in mux-table. ignore packet and dissect as data */
- proto_tree *vc_tree = NULL;
-
- if(pdu_tree) {
- proto_item *vc_item = proto_tree_add_item(pdu_tree, hf_h223_mux_deact, tvb, 0, len, FALSE);
- vc_tree = proto_item_add_subtree(vc_item, ett_h223_mux_deact);
- }
- call_dissector(data_handle,tvb,pinfo,vc_tree);
- }
-}
-
-/* dissect a reassembled mux-pdu
- *
- * tvb buffer containing mux-pdu, including header and closing flag
- * pinfo packet info for packet containing the end of the mux-pdu
- * pkt_offset offset within the block from the superdissector where the
- * MUX-PDU starts (must increase monotonically for constant
- * pinfo->fd->num)
- * h223_tree dissection tree for h223 protocol; a single item will be added
- * (with a sub-tree)
- * call_info h223 info structure for this h223 call
- * pdu_no index of this pdu within the call
- */
-static void dissect_mux_pdu( tvbuff_t *tvb, packet_info * pinfo,
- guint32 pkt_offset,
- proto_tree *h223_tree,
- h223_call_info *call_info)
-{
- guint32 offset = 0;
- /* actual (as opposed to reported) payload len */
- guint32 len;
- guint32 raw_hdr = 0, correct_hdr = 0;
- gint32 errors = 0;
- guint16 closing_flag = 0;
- guint8 mc = 0;
- guint8 mpl = 0;
- gboolean end_of_mux_sdu = FALSE;
- tvbuff_t *pdu_tvb;
-
- proto_item *pdu_item = NULL;
- proto_tree *pdu_tree = NULL;
-
-#ifdef DEBUG_H223_FRAGMENTATION
- g_debug("%u: dissecting complete H.223 MUX-PDU, pkt_offset %u, len %u",
- pinfo->fd->num, pkt_offset, tvb_reported_length(tvb));
-#endif
-
- switch(call_info->h223_level) {
- case 0: case 1:
- raw_hdr = tvb_get_guint8(tvb,0);
- mc = (guint8)((raw_hdr>>1) & 0xf);
- end_of_mux_sdu = raw_hdr & 1;
- offset++;
- /* closing flag is one byte long for h223 level 0, two for level 1 */
- len = mpl = tvb_length_remaining(tvb, offset)-(call_info->h223_level+1);
-
- /* XXX should ignore pdus with incorrect HECs */
- break;
-
- case 2:
- raw_hdr = tvb_get_letoh24(tvb,0);
- errors = golay_errors(raw_hdr);
- offset += 3;
- len = tvb_length_remaining(tvb,offset)-2;
-
- if(errors != -1) {
- correct_hdr = raw_hdr ^ (guint32)errors;
-
- mc = (guint8)(correct_hdr & 0xf);
- mpl = (guint8)((correct_hdr >> 4) & 0xff);
-
- /* we should never have been called if there's not enough data in
- * available. */
- DISSECTOR_ASSERT(len >= mpl);
-
- closing_flag = tvb_get_ntohs(tvb,offset+len);
- end_of_mux_sdu = (closing_flag==(0xE14D ^ 0xFFFF));
- } else {
- mc = 0;
- mpl = len;
- }
- break;
-
- case 3:
- /* XXX not implemented */
- default:
- len=0;
- DISSECTOR_ASSERT_NOT_REACHED();
- }
-
-
- if( h223_tree ) {
- if( mpl == 0 ) {
- pdu_item = proto_tree_add_item (h223_tree, hf_h223_mux_stuffing_pdu, tvb, 0, -1, FALSE);
- pdu_tree = proto_item_add_subtree (pdu_item, ett_h223_mux_stuffing_pdu);
- } else {
- pdu_item = proto_tree_add_item (h223_tree, hf_h223_mux_pdu, tvb, 0, -1, FALSE);
- pdu_tree = proto_item_add_subtree (pdu_item, ett_h223_mux_pdu);
- }
- }
-
- if( pdu_tree ) {
- proto_item *item = proto_tree_add_item (pdu_tree, hf_h223_mux_header, tvb, 0, offset, FALSE);
- proto_tree *hdr_tree = proto_item_add_subtree (item, ett_h223_mux_header);
-
- switch(call_info->h223_level) {
- case 0: case 1:
- proto_tree_add_uint(hdr_tree,hf_h223_mux_mc,tvb,0,1,mc);
- break;
-
- case 2:
- if( errors == -1 ) {
- proto_tree_add_uint_format(hdr_tree, hf_h223_mux_rawhdr, tvb,
- 0, 3, raw_hdr,
- "Raw value: 0x%06x (uncorrectable errors)", raw_hdr );
- } else {
- if( errors == 0 ) {
- proto_tree_add_uint_format(hdr_tree, hf_h223_mux_rawhdr, tvb,
- 0, 3, raw_hdr,
- "Raw value: 0x%06x (correct)", raw_hdr );
- } else {
- proto_tree_add_uint_format(hdr_tree, hf_h223_mux_rawhdr, tvb,
- 0, 3, raw_hdr,
- "Raw value: 0x%06x (errors are 0x%06x)", raw_hdr, errors );
- }
- item = proto_tree_add_uint(hdr_tree,hf_h223_mux_correctedhdr,tvb,0,3,
- correct_hdr);
- PROTO_ITEM_SET_GENERATED(item);
- proto_tree_add_uint(hdr_tree,hf_h223_mux_mc,tvb,0,1,mc);
- proto_tree_add_uint(hdr_tree,hf_h223_mux_mpl,tvb,0,2,mpl);
- }
- break;
-
- case 3:
- /* XXX not implemented */
- default:
- DISSECTOR_ASSERT_NOT_REACHED();
- }
- }
-
- if(mpl > 0) {
- pdu_tvb = tvb_new_subset(tvb, offset, len, mpl);
- if(errors != -1) {
- dissect_mux_payload(pdu_tvb,pinfo,pkt_offset+offset,pdu_tree,call_info,mc,end_of_mux_sdu);
- } else {
- call_dissector(data_handle,pdu_tvb,pinfo,pdu_tree);
- }
- offset += mpl;
- }
-
- /* any extra data in the PDU, beyond that indictated by the mpl, is
- dissected as data. */
- len -= mpl;
- if( len > 0 ) {
- tvbuff_t *next_tvb = tvb_new_subset(tvb, offset, len, len);
- proto_tree *vc_tree = NULL;
-
- if( pdu_tree ) {
- proto_item *vc_item = proto_tree_add_item(pdu_tree, hf_h223_mux_extra, next_tvb, 0, len, FALSE);
- vc_tree = proto_item_add_subtree(vc_item, ett_h223_mux_deact);
- }
- call_dissector(data_handle,next_tvb,pinfo,vc_tree);
-
- offset += len;
- }
-
- /* add the closing HDLC flag */
- if( pdu_tree )
- proto_tree_add_item(pdu_tree,hf_h223_mux_hdlc2,tvb,offset,2,FALSE);
-}
-
-
-/************************************************************************************
- *
- * MUX-PDU delineation and defragmentation
- */
-
-/* attempt to parse the header of a mux pdu */
-static gboolean attempt_mux_level0_header_parse(guint32 nbytes, guint32 hdr, guint32 *minlen)
-{
- /* level 0 isn't byte-aligned, so is a complete pain to implement */
- DISSECTOR_ASSERT_NOT_REACHED();
- nbytes = nbytes;
- hdr=hdr;
- minlen=minlen;
- return FALSE;
-}
-
-static gboolean attempt_mux_level1_header_parse(guint32 nbytes, guint32 hdr, guint32 *minlen)
-{
- /* this is untested */
- DISSECTOR_ASSERT_NOT_REACHED();
-
- if(nbytes < 2)
- return FALSE;
-
- hdr &= 0xffff;
- /* don't interpret a repeated hdlc as a header */
- if(hdr == 0xE14D)
- return FALSE;
-
- /* + 1 byte of header and 2 bytes of closing HDLC */
- *minlen = (guint8)((hdr >> 12) & 0xff) + 3;
- return TRUE;
-}
-
-static gboolean attempt_mux_level2_3_header_parse(guint32 nbytes, guint32 hdr, guint32 *minlen)
-{
- gint32 errors;
-
- if(nbytes < 3)
- return FALSE;
-
- /* + 3 bytes of header and 2 bytes of closing HDLC */
- *minlen = 5;
-
- /* bah, we get the header in the wrong order */
- hdr =
- ((hdr & 0xFF0000) >> 16) |
- (hdr & 0x00FF00) |
- ((hdr & 0x0000FF) << 16);
-
- errors = golay_errors(hdr);
- if(errors != -1) {
- hdr ^= errors;
- *minlen += ((hdr >> 4) & 0xff);
- }
-
- return TRUE;
-}
-
-static gboolean (* const attempt_mux_header_parse[])(guint32 nbytes, guint32 header_buf, guint32 *minlen) = {
- attempt_mux_level0_header_parse,
- attempt_mux_level1_header_parse,
- attempt_mux_level2_3_header_parse,
- attempt_mux_level2_3_header_parse
-};
-
-static gboolean h223_mux_check_hdlc(int h223_level, guint32 nbytes, guint32 tail_buf)
-{
- guint32 masked;
-
- switch(h223_level) {
- case 0:
- /* level 0 isn't byte-aligned, so is a complete pain to implement */
- DISSECTOR_ASSERT_NOT_REACHED();
- return FALSE;
- break;
-
- case 1:
- masked = tail_buf & 0xffff;
- return nbytes >= 2 && masked == 0xE14D;
-
- case 2: case 3:
- masked = tail_buf & 0xffff;
- return nbytes >= 2 && (masked == 0xE14D || masked == (0xE14D ^ 0xFFFF));
-
- default:
- DISSECTOR_ASSERT_NOT_REACHED();
- return FALSE;
- }
-}
-
-/* read a pdu (or the start of a pdu) from the tvb, and dissect it
- *
- * returns the number of bytes processed, or the negative of the number of
- * extra bytes needed, or zero if we don't know yet
- */
-
-static gint dissect_mux_pdu_fragment( tvbuff_t *tvb, guint32 start_offset, packet_info * pinfo,
- proto_tree *h223_tree,
- h223_call_info *call_info)
-{
- tvbuff_t *volatile next_tvb;
- volatile guint32 offset = start_offset;
- gboolean more_frags = TRUE;
-
- gboolean header_parsed = FALSE;
- guint32 header_buf = 0, tail_buf = 0;
- guint32 pdu_minlen = 0;
-
-
-#ifdef DEBUG_H223_FRAGMENTATION
- g_debug("%d: dissecting H.223 PDU, start_offset %u, %u bytes left",
- pinfo->fd->num,start_offset, tvb_reported_length_remaining( tvb, start_offset ));
-#endif
-
- while( more_frags && offset < tvb_reported_length( tvb )) {
- guint8 byte = tvb_get_guint8(tvb, offset++);
-
- /* read a byte into the header buf, if necessary */
- if((offset-start_offset) <= 4) {
- header_buf <<= 8;
- header_buf |= byte;
- }
-
- /* read the byte into the tail buf */
- tail_buf <<= 8;
- tail_buf |= byte;
-
- /* if we haven't parsed the header yet, attempt to do so now */
- if(!header_parsed)
- /* this sets current_pdu_header parsed if current_pdu_read == 3 */
- header_parsed = (attempt_mux_header_parse[call_info->h223_level])
- (offset-start_offset,header_buf,&pdu_minlen);
-
- /* if we have successfully parsed the header, we have sufficient data,
- * and we have found the closing hdlc, we are done here */
- if(header_parsed && (offset-start_offset) >= pdu_minlen) {
- if(h223_mux_check_hdlc(call_info->h223_level,offset-start_offset,tail_buf)) {
- more_frags = FALSE;
- }
- }
- }
-
- if( more_frags ) {
- if(pdu_minlen <= (offset-start_offset)) {
- /* we haven't found the closing hdlc yet, but we don't know how
- * much more we need */
-#ifdef DEBUG_H223_FRAGMENTATION
- g_debug("\tBailing, requesting more bytes");
-#endif
- return 0;
- } else {
- guint32 needed = pdu_minlen-(offset-start_offset);
-#ifdef DEBUG_H223_FRAGMENTATION
- g_debug("\tBailing, requesting %i-%i=%u more bytes", pdu_minlen,(offset-start_offset),needed);
-#endif
- return - (gint) needed;
- }
- }
-
- /* create a tvb for the fragment */
- next_tvb = tvb_new_subset(tvb, start_offset, offset-start_offset,
- offset-start_offset);
-
-
- /* we catch boundserrors on the pdu so that errors on an
- * individual pdu don't screw up the whole of the rest of the
- * stream */
- TRY {
- dissect_mux_pdu( next_tvb, pinfo, start_offset, h223_tree, call_info);
- }
-
- CATCH2(BoundsError,ReportedBoundsError) {
- if (check_col(pinfo->cinfo, COL_INFO))
- col_append_str(pinfo->cinfo, COL_INFO,
- "[Malformed Packet]");
- proto_tree_add_protocol_format(h223_tree, proto_malformed,
- tvb, 0, 0, "[Malformed Packet: %s]", pinfo->current_proto);
- }
-
- ENDTRY;
-
- return (offset-start_offset);
-}
-
-/************************************************************************************
- *
- * main dissector entry points
- */
-
-/* dissects PDUs from the tvb
- *
- * Updates desegment_offset and desegment_len if the end of the data didn't
- * line up with the end of a pdu.
- */
-static void dissect_h223 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
-{
- proto_tree *h223_tree = NULL;
- proto_item *h223_item = NULL;
- h223_call_info *call_info = NULL;
- guint32 offset = 0;
-
- /* set up the protocol and info fields in the summary pane */
- if (check_col (pinfo->cinfo, COL_PROTOCOL))
- col_set_str (pinfo->cinfo, COL_PROTOCOL, PROTO_TAG_H223);
-
- if (check_col (pinfo->cinfo, COL_INFO))
- col_clear (pinfo->cinfo, COL_INFO);
-
- /* find or create the call_info for this call */
- call_info = find_or_create_call_info(pinfo);
-
- /* add the 'h223' tree to the main tree */
- if (tree) {
- h223_item = proto_tree_add_item (tree, proto_h223, tvb, 0, -1, FALSE);
- h223_tree = proto_item_add_subtree (h223_item, ett_h223);
- }
-
- while( offset < tvb_reported_length( tvb )) {
- int res = dissect_mux_pdu_fragment( tvb, offset, pinfo,
- h223_tree, call_info);
- if(res <= 0) {
- /* the end of the tvb held the start of a PDU */
- pinfo->desegment_offset = offset;
-
- /* if res != 0, we actually know how much more data we need for a
- * PDU.
- *
- * However, if we return that, it means that we get called twice
- * for the next packet; this makes it hard to tell how far throught
- * the stream we are and we have to start messing about with
- * getting the seqno from the superdissector's private data. So we
- * don't do that.
- *
- * pinfo->desegment_len = (res == 0 ? DESEGMENT_ONE_MORE_SEGMENT : -res);
- */
- pinfo -> desegment_len = DESEGMENT_ONE_MORE_SEGMENT;
-
- if(h223_item) {
- /* shrink the h223 protocol item such that it only includes the
- * bits we dissected */
- proto_item_set_len(h223_item,offset);
- }
-
- if(offset == 0) {
- if(check_col (pinfo->cinfo, COL_INFO))
- col_set_str (pinfo->cinfo, COL_INFO, "(No complete PDUs)");
- }
- return;
- }
- offset += res;
- }
-}
-
-/* H.223 specifies that the least-significant bit is transmitted first;
- * however this is at odds with IAX which transmits bytes with the
- * first-received bit as the MSB.
- *
- * This dissector swaps the ordering of the bits in each byte before using the
- * normal entry point.
- */
-static void dissect_h223_bitswapped (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
-{
- tvbuff_t *reversed_tvb;
- guint8 *data;
- guint len;
- guint i;
-
- len = tvb_length(tvb);
- data = g_malloc(len);
- for( i=0; i<len; i++)
- data[i]=BIT_SWAP(tvb_get_guint8(tvb,i));
-
- reversed_tvb = tvb_new_real_data(data,len,tvb_reported_length(tvb));
-
- /*
- * Add the reversed 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, reversed_tvb);
-
- /* Add a freer */
- tvb_set_free_cb(reversed_tvb, g_free);
-
- /* Add the reversed data to the data source list. */
- add_new_data_source(pinfo, reversed_tvb, "Bit-swapped H.223 frame" );
-
- dissect_h223(reversed_tvb,pinfo,tree);
-}
-
-/******************************************************************************/
-
-static void h223_init_protocol (void)
-{
- circuit_chain_init();
-}
-
-
-void proto_register_h223 (void)
-{
- /* A header field is something you can search/filter on.
- *
- * We create a structure to register our fields. It consists of an
- * array of hf_register_info structures, each of which are of the format
- * {&(field id), {name, abbrev, type, display, strings, bitmask, blurb, HFILL}}.
- */
-
- static hf_register_info hf[] = {
- { &hf_h223_non_h223_data,
- { "Non-H.223 data", "h223.non-h223", FT_NONE, BASE_NONE, NULL, 0x0,
- "Initial data in stream, not a PDU", HFILL }},
-
- { &hf_h223_mux_stuffing_pdu,
- { "H.223 stuffing PDU", "h223.mux.stuffing", FT_NONE, BASE_NONE, NULL, 0x0,
- "Empty PDU used for stuffing when no data available", HFILL }},
-
- { &hf_h223_mux_pdu,
- { "H.223 MUX-PDU", "h223.mux", FT_NONE, BASE_NONE, NULL, 0x0,
- "H.223 MUX-PDU", HFILL }},
-
- { &hf_h223_mux_header,
- { "Header", "h223.mux.header", FT_NONE, BASE_NONE, NULL, 0x0,
- "H.223 MUX header", HFILL }},
-
- { &hf_h223_mux_rawhdr,
- { "Raw value", "h223.mux.rawhdr", FT_UINT24, BASE_HEX, NULL, 0x0,
- "Raw header bytes", HFILL }},
-
- { &hf_h223_mux_correctedhdr,
- { "Corrected value", "h223.mux.correctedhdr", FT_UINT24, BASE_HEX, NULL, 0x0,
- "Corrected header bytes", HFILL }},
-
- { &hf_h223_mux_mc,
- { "Multiplex Code", "h223.mux.mc", FT_UINT8, BASE_DEC, NULL, 0x0,
- "H.223 MUX multiplex code", HFILL }},
-
- { &hf_h223_mux_mpl,
- { "Multiplex Payload Length", "h223.mux.mpl", FT_UINT8, BASE_DEC, NULL, 0x0,
- "H.223 MUX multiplex Payload Length", HFILL }},
-
- { &hf_h223_mux_deact,
- { "Deactivated multiplex table entry", "h223.mux.deactivated", FT_NONE, BASE_NONE, NULL, 0x0,
- "mpl refers to an entry in the multiplex table which is not active", HFILL }},
-
- { &hf_h223_mux_vc,
- { "H.223 virtual circuit", "h223.mux.vc", FT_UINT16, BASE_DEC, NULL, 0x0,
- "H.223 Virtual Circuit", HFILL }},
-
- { &hf_h223_mux_extra,
- { "Extraneous data", "h223.mux.extra", FT_NONE, BASE_DEC, NULL, 0x0,
- "data beyond mpl", HFILL }},
-
- { &hf_h223_mux_hdlc2,
- { "HDLC flag", "h223.mux.hdlc", FT_UINT16, BASE_HEX, NULL, 0x0,
- "framing flag", HFILL }},
-
- /* fields for h.223-mux fragments */
- { &hf_h223_mux_fragment_overlap,
- { "Fragment overlap", "h223.mux.fragment.overlap", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
- "Fragment overlaps with other fragments", HFILL }},
-
- { &hf_h223_mux_fragment_overlap_conflict,
- { "Conflicting data in fragment overlap", "h223.mux.fragment.overlap.conflict", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
- "Overlapping fragments contained conflicting data", HFILL }},
-
- { &hf_h223_mux_fragment_multiple_tails,
- { "Multiple tail fragments found", "h223.mux.fragment.multipletails", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
- "Several tails were found when defragmenting the packet", HFILL }},
-
- { &hf_h223_mux_fragment_too_long_fragment,
- { "Fragment too long", "h223.mux.fragment.toolongfragment", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
- "Fragment contained data past end of packet", HFILL }},
-
- { &hf_h223_mux_fragment_error,
- { "Defragmentation error", "h223.mux.fragment.error", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
- "Defragmentation error due to illegal fragments", HFILL }},
-
- { &hf_h223_mux_fragment,
- { "H.223 MUX-PDU Fragment", "h223.mux.fragment", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
- "H.223 MUX-PDU Fragment", HFILL }},
-
- { &hf_h223_mux_fragments,
- { "H.223 MUX-PDU Fragments", "h223.mux.fragments", FT_NONE, BASE_NONE, NULL, 0x0,
- "H.223 MUX-PDU Fragments", HFILL }},
-
- { &hf_h223_mux_reassembled_in,
- { "MUX-PDU fragment, reassembled in frame", "h223.mux.reassembled_in", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
- "This H.223 MUX-PDU packet is reassembled in this frame", HFILL }},
-
- /* fields for h.223-al fragments */
- { &hf_h223_al_fragment_overlap,
- { "Fragment overlap", "h223.al.fragment.overlap", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
- "Fragment overlaps with other fragments", HFILL }},
-
- { &hf_h223_al_fragment_overlap_conflict,
- { "Conflicting data in fragment overlap", "h223.al.fragment.overlap.conflict", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
- "Overlapping fragments contained conflicting data", HFILL }},
-
- { &hf_h223_al_fragment_multiple_tails,
- { "Multiple tail fragments found", "h223.al.fragment.multipletails", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
- "Several tails were found when defragmenting the packet", HFILL }},
-
- { &hf_h223_al_fragment_too_long_fragment,
- { "Fragment too long", "h223.al.fragment.toolongfragment", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
- "Fragment contained data past end of packet", HFILL }},
-
- { &hf_h223_al_fragment_error,
- { "Defragmentation error", "h223.al.fragment.error", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
- "Defragmentation error due to illegal fragments", HFILL }},
-
- { &hf_h223_al_fragment,
- { "H.223 AL-PDU Fragment", "h223.al.fragment", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
- "H.223 AL-PDU Fragment", HFILL }},
-
- { &hf_h223_al_fragments,
- { "H.223 AL-PDU Fragments", "h223.al.fragments", FT_NONE, BASE_NONE, NULL, 0x0,
- "H.223 AL-PDU Fragments", HFILL }},
-
- { &hf_h223_al_reassembled_in,
- { "AL-PDU fragment, reassembled in frame", "h223.al.reassembled_in", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
- "This H.223 AL-PDU packet is reassembled in this frame", HFILL }},
-
- /* h223-als */
-
- { &hf_h223_al1,
- { "H.223 AL1", "h223.al1", FT_NONE, BASE_NONE, NULL, 0x0,
- "H.223 AL-PDU using AL1", HFILL }},
-
- { &hf_h223_al1_framed,
- { "H.223 AL1 framing", "h223.al1.framed", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
- "", HFILL }},
-
- { &hf_h223_al2,
- { "H.223 AL2", "h223.al2", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
- "H.223 AL-PDU using AL2", HFILL }},
-
- { &hf_h223_al2_sequenced,
- { "H.223 sequenced AL2", "h223.sequenced_al2", FT_NONE, BASE_NONE, NULL, 0x0,
- "H.223 AL-PDU using AL2 with sequence numbers", HFILL }},
-
- { &hf_h223_al2_unsequenced,
- { "H.223 unsequenced AL2", "h223.unsequenced_al2", FT_NONE, BASE_NONE, NULL, 0x0,
- "H.223 AL-PDU using AL2 without sequence numbers", HFILL }},
-
- { &hf_h223_al2_seqno,
- { "Sequence Number", "h223.al2.seqno", FT_UINT8, BASE_DEC, NULL, 0x0,
- "H.223 AL2 sequence number", HFILL }},
-
- { &hf_h223_al2_crc,
- { "CRC", "h223.al2.crc", FT_UINT8, BASE_HEX, NULL, 0x0,
- "CRC", HFILL }},
-
- { &hf_h223_al2_crc_bad,
- { "Bad CRC","h223.al2.crc_bad", FT_BOOLEAN, BASE_NONE, NULL, 0x0,
- "", HFILL }},
-
- { &hf_h223_al_payload,
- { "H.223 AL Payload", "h223.al.payload", FT_NONE, BASE_NONE, NULL, 0x0,
- "H.223 AL-PDU Payload", HFILL }},
-
- };
-
- static gint *ett[] = {
- &ett_h223,
- &ett_h223_non_h223_data,
- &ett_h223_mux_stuffing_pdu,
- &ett_h223_mux_pdu,
- &ett_h223_mux_header,
- &ett_h223_mux_deact,
- &ett_h223_mux_vc,
- &ett_h223_mux_extra,
- &ett_h223_mux_fragments,
- &ett_h223_mux_fragment,
- &ett_h223_al_fragments,
- &ett_h223_al_fragment,
- &ett_h223_al1,
- &ett_h223_al2,
- &ett_h223_al_payload
- };
-
- if (proto_h223 == -1) { /* execute protocol initialization only once */
- proto_h223 =
- proto_register_protocol ("ITU-T Recommendation H.223", "H.223", "h223");
- proto_h223_bitswapped =
- proto_register_protocol ("Bitswapped ITU-T Recommendation H.223", "H.223 (Bitswapped)", "h223_bitswapped");
-
- proto_register_field_array (proto_h223, hf, array_length (hf));
- proto_register_subtree_array (ett, array_length (ett));
- register_dissector("h223", dissect_h223, proto_h223);
- register_dissector("h223_bitswapped", dissect_h223_bitswapped, proto_h223_bitswapped);
-
- /* register our init routine to be called at the start of a capture,
- to clear out our hash tables etc */
- register_init_routine(&h223_init_protocol);
- }
-
- h245_set_h223_set_mc_handle( &h223_set_mc );
- h245_set_h223_add_lc_handle( &h223_add_lc );
-}
-
-void proto_reg_handoff_h223(void)
-{
- dissector_handle_t h223_bitswapped = find_dissector("h223_bitswapped");
- dissector_handle_t h223 = find_dissector("h223");
- data_handle = find_dissector("data");
- h245dg_handle = find_dissector("h245dg");
- srp_handle = find_dissector("srp");
-
- dissector_add_handle("tcp.port", h223);
- dissector_add_handle("tcp.port", h223_bitswapped);
- dissector_add_string("rtp_dyn_payload_type","CLEARMODE", h223_bitswapped);
- dissector_add("iax2.dataformat", AST_DATAFORMAT_H223_H245, h223_bitswapped);
-}
-/* vim:set ts=8 et: */
diff --git a/plugins/h223/packet-h223.h b/plugins/h223/packet-h223.h
deleted file mode 100644
index 9f00cfdeb6..0000000000
--- a/plugins/h223/packet-h223.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* $Id$
- *
- * Routines for H.223 packet dissection
- * 2004 Richard van der Hoff <richardv@mxtelecom.com>
- *
- * Wireshark - Network traffic analyzer
- * By Gerald Combs <gerald@wireshark.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 __PACKET_H223_H__
-#define __PACKET_H223_H__
-
-void proto_register_h223 (void);
-void proto_reg_handoff_h223(void);
-
-#endif /* __PACKET_H223_H__ */
diff --git a/plugins/h223/plugin.rc.in b/plugins/h223/plugin.rc.in
deleted file mode 100644
index 72b4de0775..0000000000
--- a/plugins/h223/plugin.rc.in
+++ /dev/null
@@ -1,34 +0,0 @@
-#include "winver.h"
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION @RC_MODULE_VERSION@
- PRODUCTVERSION @RC_VERSION@,0
- FILEFLAGSMASK 0x0L
-#ifdef _DEBUG
- FILEFLAGS VS_FF_PRERELEASE+VS_FF_DEBUG
-#else
- FILEFLAGS VS_FF_PRERELEASE
-#endif
- FILEOS VOS_NT_WINDOWS32
- FILETYPE VFT_DLL
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "CompanyName", "The Wireshark developer community, http://www.wireshark.org/\0"
- VALUE "FileDescription", "@PACKAGE@ dissector\0"
- VALUE "FileVersion", "@MODULE_VERSION@\0"
- VALUE "InternalName", "@PACKAGE@ @MODULE_VERSION@\0"
- VALUE "LegalCopyright", "Copyright © 1998 Gerald Combs <gerald@wireshark.org>, Gilbert Ramirez <gram@alumni.rice.edu> and others\0"
- VALUE "OriginalFilename", "@PLUGIN_NAME@.dll\0"
- VALUE "ProductName", "Wireshark\0"
- VALUE "ProductVersion", "@VERSION@\0"
- VALUE "Comments", "Build with @MSVC_VARIANT@\0"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END