add svn properties for dir and files
svn path=/trunk/; revision=21780
This commit is contained in:
parent
12abbdb118
commit
12101aad61
|
@ -1,6 +1,6 @@
|
|||
Author :
|
||||
Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
ascolab GmbH
|
||||
http://www.ascolab.com
|
||||
|
||||
|
||||
Author :
|
||||
Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
ascolab GmbH
|
||||
http://www.ascolab.com
|
||||
|
||||
|
||||
|
|
|
@ -1,340 +1,340 @@
|
|||
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.
|
||||
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.
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
$Id: ChangeLog,v 1.1.1.1 2006/07/12 09:17:41 gergap Exp $
|
||||
|
||||
Overview of changes in OpcUa plugin:
|
||||
|
||||
Version 0.0.1:
|
||||
|
||||
* initial implementation without security
|
||||
|
||||
$Id$
|
||||
|
||||
Overview of changes in OpcUa plugin:
|
||||
|
||||
Version 0.0.1:
|
||||
|
||||
* initial implementation without security
|
||||
|
||||
|
|
|
@ -1,275 +1,275 @@
|
|||
# Doxyfile 1.4.1-KDevelop
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
PROJECT_NAME = opcua.kdevelop
|
||||
PROJECT_NUMBER = $VERSION$
|
||||
OUTPUT_DIRECTORY =
|
||||
CREATE_SUBDIRS = NO
|
||||
OUTPUT_LANGUAGE = English
|
||||
USE_WINDOWS_ENCODING = NO
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
ABBREVIATE_BRIEF = "The $name class" \
|
||||
"The $name widget" \
|
||||
"The $name file" \
|
||||
is \
|
||||
provides \
|
||||
specifies \
|
||||
contains \
|
||||
represents \
|
||||
a \
|
||||
an \
|
||||
the
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
INLINE_INHERITED_MEMB = NO
|
||||
FULL_PATH_NAMES = YES
|
||||
STRIP_FROM_PATH = /home/gergap/
|
||||
STRIP_FROM_INC_PATH =
|
||||
SHORT_NAMES = NO
|
||||
JAVADOC_AUTOBRIEF = NO
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
DETAILS_AT_TOP = NO
|
||||
INHERIT_DOCS = YES
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
TAB_SIZE = 8
|
||||
ALIASES =
|
||||
OPTIMIZE_OUTPUT_FOR_C = NO
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
SUBGROUPING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
EXTRACT_ALL = NO
|
||||
EXTRACT_PRIVATE = NO
|
||||
EXTRACT_STATIC = NO
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
EXTRACT_LOCAL_METHODS = NO
|
||||
HIDE_UNDOC_MEMBERS = NO
|
||||
HIDE_UNDOC_CLASSES = NO
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
HIDE_IN_BODY_DOCS = NO
|
||||
INTERNAL_DOCS = NO
|
||||
CASE_SENSE_NAMES = YES
|
||||
HIDE_SCOPE_NAMES = NO
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
INLINE_INFO = YES
|
||||
SORT_MEMBER_DOCS = YES
|
||||
SORT_BRIEF_DOCS = NO
|
||||
SORT_BY_SCOPE_NAME = NO
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
GENERATE_BUGLIST = YES
|
||||
GENERATE_DEPRECATEDLIST= YES
|
||||
ENABLED_SECTIONS =
|
||||
MAX_INITIALIZER_LINES = 30
|
||||
SHOW_USED_FILES = YES
|
||||
SHOW_DIRECTORIES = YES
|
||||
FILE_VERSION_FILTER =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to warning and progress messages
|
||||
#---------------------------------------------------------------------------
|
||||
QUIET = NO
|
||||
WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_NO_PARAMDOC = NO
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
WARN_LOGFILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
INPUT = /home/gergap/work/wireshark/plugins/opcua
|
||||
FILE_PATTERNS = *.c \
|
||||
*.cc \
|
||||
*.cxx \
|
||||
*.cpp \
|
||||
*.c++ \
|
||||
*.java \
|
||||
*.ii \
|
||||
*.ixx \
|
||||
*.ipp \
|
||||
*.i++ \
|
||||
*.inl \
|
||||
*.h \
|
||||
*.hh \
|
||||
*.hxx \
|
||||
*.hpp \
|
||||
*.h++ \
|
||||
*.idl \
|
||||
*.odl \
|
||||
*.cs \
|
||||
*.php \
|
||||
*.php3 \
|
||||
*.inc \
|
||||
*.m \
|
||||
*.mm \
|
||||
*.dox \
|
||||
*.C \
|
||||
*.CC \
|
||||
*.C++ \
|
||||
*.II \
|
||||
*.I++ \
|
||||
*.H \
|
||||
*.HH \
|
||||
*.H++ \
|
||||
*.CS \
|
||||
*.PHP \
|
||||
*.PHP3 \
|
||||
*.M \
|
||||
*.MM \
|
||||
*.C \
|
||||
*.H \
|
||||
*.tlh \
|
||||
*.diff \
|
||||
*.patch \
|
||||
*.moc \
|
||||
*.xpm \
|
||||
*.dox
|
||||
RECURSIVE = yes
|
||||
EXCLUDE =
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_PATTERNS =
|
||||
EXAMPLE_PATH =
|
||||
EXAMPLE_PATTERNS = *
|
||||
EXAMPLE_RECURSIVE = NO
|
||||
IMAGE_PATH =
|
||||
INPUT_FILTER =
|
||||
FILTER_PATTERNS =
|
||||
FILTER_SOURCE_FILES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to source browsing
|
||||
#---------------------------------------------------------------------------
|
||||
SOURCE_BROWSER = NO
|
||||
INLINE_SOURCES = NO
|
||||
STRIP_CODE_COMMENTS = YES
|
||||
REFERENCED_BY_RELATION = YES
|
||||
REFERENCES_RELATION = YES
|
||||
VERBATIM_HEADERS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
ALPHABETICAL_INDEX = NO
|
||||
COLS_IN_ALPHA_INDEX = 5
|
||||
IGNORE_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the HTML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_HTML = YES
|
||||
HTML_OUTPUT = html
|
||||
HTML_FILE_EXTENSION = .html
|
||||
HTML_HEADER =
|
||||
HTML_FOOTER =
|
||||
HTML_STYLESHEET =
|
||||
HTML_ALIGN_MEMBERS = YES
|
||||
GENERATE_HTMLHELP = NO
|
||||
CHM_FILE =
|
||||
HHC_LOCATION =
|
||||
GENERATE_CHI = NO
|
||||
BINARY_TOC = NO
|
||||
TOC_EXPAND = NO
|
||||
DISABLE_INDEX = NO
|
||||
ENUM_VALUES_PER_LINE = 4
|
||||
GENERATE_TREEVIEW = NO
|
||||
TREEVIEW_WIDTH = 250
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the LaTeX output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_LATEX = YES
|
||||
LATEX_OUTPUT = latex
|
||||
LATEX_CMD_NAME = latex
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
COMPACT_LATEX = NO
|
||||
PAPER_TYPE = a4wide
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER =
|
||||
PDF_HYPERLINKS = NO
|
||||
USE_PDFLATEX = NO
|
||||
LATEX_BATCHMODE = NO
|
||||
LATEX_HIDE_INDICES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the RTF output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_RTF = NO
|
||||
RTF_OUTPUT = rtf
|
||||
COMPACT_RTF = NO
|
||||
RTF_HYPERLINKS = NO
|
||||
RTF_STYLESHEET_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the man page output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_MAN = NO
|
||||
MAN_OUTPUT = man
|
||||
MAN_EXTENSION = .3
|
||||
MAN_LINKS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the XML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_XML = yes
|
||||
XML_OUTPUT = xml
|
||||
XML_SCHEMA =
|
||||
XML_DTD =
|
||||
XML_PROGRAMLISTING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options for the AutoGen Definitions output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_AUTOGEN_DEF = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the Perl module output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_PERLMOD = NO
|
||||
PERLMOD_LATEX = NO
|
||||
PERLMOD_PRETTY = YES
|
||||
PERLMOD_MAKEVAR_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the preprocessor
|
||||
#---------------------------------------------------------------------------
|
||||
ENABLE_PREPROCESSING = YES
|
||||
MACRO_EXPANSION = NO
|
||||
EXPAND_ONLY_PREDEF = NO
|
||||
SEARCH_INCLUDES = YES
|
||||
INCLUDE_PATH =
|
||||
INCLUDE_FILE_PATTERNS =
|
||||
PREDEFINED =
|
||||
EXPAND_AS_DEFINED =
|
||||
SKIP_FUNCTION_MACROS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::additions related to external references
|
||||
#---------------------------------------------------------------------------
|
||||
TAGFILES =
|
||||
GENERATE_TAGFILE = opcua.tag
|
||||
ALLEXTERNALS = NO
|
||||
EXTERNAL_GROUPS = YES
|
||||
PERL_PATH = /usr/bin/perl
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the dot tool
|
||||
#---------------------------------------------------------------------------
|
||||
CLASS_DIAGRAMS = YES
|
||||
HIDE_UNDOC_RELATIONS = YES
|
||||
HAVE_DOT = NO
|
||||
CLASS_GRAPH = YES
|
||||
COLLABORATION_GRAPH = YES
|
||||
GROUP_GRAPHS = YES
|
||||
UML_LOOK = NO
|
||||
TEMPLATE_RELATIONS = NO
|
||||
INCLUDE_GRAPH = YES
|
||||
INCLUDED_BY_GRAPH = YES
|
||||
CALL_GRAPH = NO
|
||||
GRAPHICAL_HIERARCHY = YES
|
||||
DIRECTORY_GRAPH = YES
|
||||
DOT_IMAGE_FORMAT = png
|
||||
DOT_PATH =
|
||||
DOTFILE_DIRS =
|
||||
MAX_DOT_GRAPH_WIDTH = 1024
|
||||
MAX_DOT_GRAPH_HEIGHT = 1024
|
||||
MAX_DOT_GRAPH_DEPTH = 1000
|
||||
DOT_TRANSPARENT = NO
|
||||
DOT_MULTI_TARGETS = NO
|
||||
GENERATE_LEGEND = YES
|
||||
DOT_CLEANUP = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::additions related to the search engine
|
||||
#---------------------------------------------------------------------------
|
||||
SEARCHENGINE = NO
|
||||
# Doxyfile 1.4.1-KDevelop
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
PROJECT_NAME = opcua.kdevelop
|
||||
PROJECT_NUMBER = $VERSION$
|
||||
OUTPUT_DIRECTORY =
|
||||
CREATE_SUBDIRS = NO
|
||||
OUTPUT_LANGUAGE = English
|
||||
USE_WINDOWS_ENCODING = NO
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
ABBREVIATE_BRIEF = "The $name class" \
|
||||
"The $name widget" \
|
||||
"The $name file" \
|
||||
is \
|
||||
provides \
|
||||
specifies \
|
||||
contains \
|
||||
represents \
|
||||
a \
|
||||
an \
|
||||
the
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
INLINE_INHERITED_MEMB = NO
|
||||
FULL_PATH_NAMES = YES
|
||||
STRIP_FROM_PATH = /home/gergap/
|
||||
STRIP_FROM_INC_PATH =
|
||||
SHORT_NAMES = NO
|
||||
JAVADOC_AUTOBRIEF = NO
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
DETAILS_AT_TOP = NO
|
||||
INHERIT_DOCS = YES
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
TAB_SIZE = 8
|
||||
ALIASES =
|
||||
OPTIMIZE_OUTPUT_FOR_C = NO
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
SUBGROUPING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
EXTRACT_ALL = NO
|
||||
EXTRACT_PRIVATE = NO
|
||||
EXTRACT_STATIC = NO
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
EXTRACT_LOCAL_METHODS = NO
|
||||
HIDE_UNDOC_MEMBERS = NO
|
||||
HIDE_UNDOC_CLASSES = NO
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
HIDE_IN_BODY_DOCS = NO
|
||||
INTERNAL_DOCS = NO
|
||||
CASE_SENSE_NAMES = YES
|
||||
HIDE_SCOPE_NAMES = NO
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
INLINE_INFO = YES
|
||||
SORT_MEMBER_DOCS = YES
|
||||
SORT_BRIEF_DOCS = NO
|
||||
SORT_BY_SCOPE_NAME = NO
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
GENERATE_BUGLIST = YES
|
||||
GENERATE_DEPRECATEDLIST= YES
|
||||
ENABLED_SECTIONS =
|
||||
MAX_INITIALIZER_LINES = 30
|
||||
SHOW_USED_FILES = YES
|
||||
SHOW_DIRECTORIES = YES
|
||||
FILE_VERSION_FILTER =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to warning and progress messages
|
||||
#---------------------------------------------------------------------------
|
||||
QUIET = NO
|
||||
WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_NO_PARAMDOC = NO
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
WARN_LOGFILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
INPUT = /home/gergap/work/wireshark/plugins/opcua
|
||||
FILE_PATTERNS = *.c \
|
||||
*.cc \
|
||||
*.cxx \
|
||||
*.cpp \
|
||||
*.c++ \
|
||||
*.java \
|
||||
*.ii \
|
||||
*.ixx \
|
||||
*.ipp \
|
||||
*.i++ \
|
||||
*.inl \
|
||||
*.h \
|
||||
*.hh \
|
||||
*.hxx \
|
||||
*.hpp \
|
||||
*.h++ \
|
||||
*.idl \
|
||||
*.odl \
|
||||
*.cs \
|
||||
*.php \
|
||||
*.php3 \
|
||||
*.inc \
|
||||
*.m \
|
||||
*.mm \
|
||||
*.dox \
|
||||
*.C \
|
||||
*.CC \
|
||||
*.C++ \
|
||||
*.II \
|
||||
*.I++ \
|
||||
*.H \
|
||||
*.HH \
|
||||
*.H++ \
|
||||
*.CS \
|
||||
*.PHP \
|
||||
*.PHP3 \
|
||||
*.M \
|
||||
*.MM \
|
||||
*.C \
|
||||
*.H \
|
||||
*.tlh \
|
||||
*.diff \
|
||||
*.patch \
|
||||
*.moc \
|
||||
*.xpm \
|
||||
*.dox
|
||||
RECURSIVE = yes
|
||||
EXCLUDE =
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_PATTERNS =
|
||||
EXAMPLE_PATH =
|
||||
EXAMPLE_PATTERNS = *
|
||||
EXAMPLE_RECURSIVE = NO
|
||||
IMAGE_PATH =
|
||||
INPUT_FILTER =
|
||||
FILTER_PATTERNS =
|
||||
FILTER_SOURCE_FILES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to source browsing
|
||||
#---------------------------------------------------------------------------
|
||||
SOURCE_BROWSER = NO
|
||||
INLINE_SOURCES = NO
|
||||
STRIP_CODE_COMMENTS = YES
|
||||
REFERENCED_BY_RELATION = YES
|
||||
REFERENCES_RELATION = YES
|
||||
VERBATIM_HEADERS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
ALPHABETICAL_INDEX = NO
|
||||
COLS_IN_ALPHA_INDEX = 5
|
||||
IGNORE_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the HTML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_HTML = YES
|
||||
HTML_OUTPUT = html
|
||||
HTML_FILE_EXTENSION = .html
|
||||
HTML_HEADER =
|
||||
HTML_FOOTER =
|
||||
HTML_STYLESHEET =
|
||||
HTML_ALIGN_MEMBERS = YES
|
||||
GENERATE_HTMLHELP = NO
|
||||
CHM_FILE =
|
||||
HHC_LOCATION =
|
||||
GENERATE_CHI = NO
|
||||
BINARY_TOC = NO
|
||||
TOC_EXPAND = NO
|
||||
DISABLE_INDEX = NO
|
||||
ENUM_VALUES_PER_LINE = 4
|
||||
GENERATE_TREEVIEW = NO
|
||||
TREEVIEW_WIDTH = 250
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the LaTeX output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_LATEX = YES
|
||||
LATEX_OUTPUT = latex
|
||||
LATEX_CMD_NAME = latex
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
COMPACT_LATEX = NO
|
||||
PAPER_TYPE = a4wide
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER =
|
||||
PDF_HYPERLINKS = NO
|
||||
USE_PDFLATEX = NO
|
||||
LATEX_BATCHMODE = NO
|
||||
LATEX_HIDE_INDICES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the RTF output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_RTF = NO
|
||||
RTF_OUTPUT = rtf
|
||||
COMPACT_RTF = NO
|
||||
RTF_HYPERLINKS = NO
|
||||
RTF_STYLESHEET_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the man page output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_MAN = NO
|
||||
MAN_OUTPUT = man
|
||||
MAN_EXTENSION = .3
|
||||
MAN_LINKS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the XML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_XML = yes
|
||||
XML_OUTPUT = xml
|
||||
XML_SCHEMA =
|
||||
XML_DTD =
|
||||
XML_PROGRAMLISTING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options for the AutoGen Definitions output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_AUTOGEN_DEF = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the Perl module output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_PERLMOD = NO
|
||||
PERLMOD_LATEX = NO
|
||||
PERLMOD_PRETTY = YES
|
||||
PERLMOD_MAKEVAR_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the preprocessor
|
||||
#---------------------------------------------------------------------------
|
||||
ENABLE_PREPROCESSING = YES
|
||||
MACRO_EXPANSION = NO
|
||||
EXPAND_ONLY_PREDEF = NO
|
||||
SEARCH_INCLUDES = YES
|
||||
INCLUDE_PATH =
|
||||
INCLUDE_FILE_PATTERNS =
|
||||
PREDEFINED =
|
||||
EXPAND_AS_DEFINED =
|
||||
SKIP_FUNCTION_MACROS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::additions related to external references
|
||||
#---------------------------------------------------------------------------
|
||||
TAGFILES =
|
||||
GENERATE_TAGFILE = opcua.tag
|
||||
ALLEXTERNALS = NO
|
||||
EXTERNAL_GROUPS = YES
|
||||
PERL_PATH = /usr/bin/perl
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the dot tool
|
||||
#---------------------------------------------------------------------------
|
||||
CLASS_DIAGRAMS = YES
|
||||
HIDE_UNDOC_RELATIONS = YES
|
||||
HAVE_DOT = NO
|
||||
CLASS_GRAPH = YES
|
||||
COLLABORATION_GRAPH = YES
|
||||
GROUP_GRAPHS = YES
|
||||
UML_LOOK = NO
|
||||
TEMPLATE_RELATIONS = NO
|
||||
INCLUDE_GRAPH = YES
|
||||
INCLUDED_BY_GRAPH = YES
|
||||
CALL_GRAPH = NO
|
||||
GRAPHICAL_HIERARCHY = YES
|
||||
DIRECTORY_GRAPH = YES
|
||||
DOT_IMAGE_FORMAT = png
|
||||
DOT_PATH =
|
||||
DOTFILE_DIRS =
|
||||
MAX_DOT_GRAPH_WIDTH = 1024
|
||||
MAX_DOT_GRAPH_HEIGHT = 1024
|
||||
MAX_DOT_GRAPH_DEPTH = 1000
|
||||
DOT_TRANSPARENT = NO
|
||||
DOT_MULTI_TARGETS = NO
|
||||
GENERATE_LEGEND = YES
|
||||
DOT_CLEANUP = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::additions related to the search engine
|
||||
#---------------------------------------------------------------------------
|
||||
SEARCHENGINE = NO
|
||||
|
|
|
@ -1,119 +1,119 @@
|
|||
# Makefile.am
|
||||
# Automake file for OpcUa plugin
|
||||
#
|
||||
# $Id: Makefile.am,v 1.1.1.1 2006/07/12 09:17:41 gergap Exp $
|
||||
#
|
||||
# Adapted by Gerhard Gappmeier for OpcUa
|
||||
# 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
|
||||
|
||||
plugindir = @plugindir@
|
||||
|
||||
plugin_LTLIBRARIES = opcua.la
|
||||
opcua_la_SOURCES = \
|
||||
plugin.c \
|
||||
moduleinfo.h \
|
||||
$(DISSECTOR_SRC) \
|
||||
$(DISSECTOR_INCLUDES)
|
||||
opcua_la_LDFLAGS = -module -avoid-version
|
||||
opcua_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 = \
|
||||
opcua \
|
||||
*~
|
||||
|
||||
MAINTAINERCLEANFILES = \
|
||||
Makefile.in \
|
||||
plugin.c
|
||||
|
||||
EXTRA_DIST = \
|
||||
Makefile.common \
|
||||
Makefile.nmake
|
||||
# Makefile.am
|
||||
# Automake file for OpcUa plugin
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Adapted by Gerhard Gappmeier for OpcUa
|
||||
# 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
|
||||
|
||||
plugindir = @plugindir@
|
||||
|
||||
plugin_LTLIBRARIES = opcua.la
|
||||
opcua_la_SOURCES = \
|
||||
plugin.c \
|
||||
moduleinfo.h \
|
||||
$(DISSECTOR_SRC) \
|
||||
$(DISSECTOR_INCLUDES)
|
||||
opcua_la_LDFLAGS = -module -avoid-version
|
||||
opcua_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 = \
|
||||
opcua \
|
||||
*~
|
||||
|
||||
MAINTAINERCLEANFILES = \
|
||||
Makefile.in \
|
||||
plugin.c
|
||||
|
||||
EXTRA_DIST = \
|
||||
Makefile.common \
|
||||
Makefile.nmake
|
||||
|
|
|
@ -1,41 +1,41 @@
|
|||
# Makefile.common for OpcUa plugin
|
||||
# Contains the stuff from Makefile.am and Makefile.nmake that is
|
||||
# a) common to both files and
|
||||
# b) portable between both files
|
||||
#
|
||||
# $Id: Makefile.common,v 1.3 2007/02/08 11:29:50 gergap Exp $
|
||||
#
|
||||
# Adapted by Gerhard Gappmeier for OpcUa
|
||||
# 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 = opcua
|
||||
|
||||
# the dissector sources (without any helpers)
|
||||
DISSECTOR_SRC = \
|
||||
opcua.c \
|
||||
ua_transport_layer.c \
|
||||
ua_security_layer.c \
|
||||
ua_application_layer.c \
|
||||
opcua_serviceparser.c \
|
||||
opcua_complextypeparser.c \
|
||||
opcua_enumparser.c \
|
||||
opcua_simpletypes.c \
|
||||
opcua_servicetable.c \
|
||||
opcua_hfindeces.c
|
||||
# Makefile.common for OpcUa plugin
|
||||
# Contains the stuff from Makefile.am and Makefile.nmake that is
|
||||
# a) common to both files and
|
||||
# b) portable between both files
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# Adapted by Gerhard Gappmeier for OpcUa
|
||||
# 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 = opcua
|
||||
|
||||
# the dissector sources (without any helpers)
|
||||
DISSECTOR_SRC = \
|
||||
opcua.c \
|
||||
ua_transport_layer.c \
|
||||
ua_security_layer.c \
|
||||
ua_application_layer.c \
|
||||
opcua_serviceparser.c \
|
||||
opcua_complextypeparser.c \
|
||||
opcua_enumparser.c \
|
||||
opcua_simpletypes.c \
|
||||
opcua_servicetable.c \
|
||||
opcua_hfindeces.c
|
||||
|
|
|
@ -1,79 +1,79 @@
|
|||
# Makefile.nmake
|
||||
# nmake file for OpcUa plugin
|
||||
#
|
||||
# $Id: Makefile.nmake,v 1.1.1.1 2006/07/12 09:17:41 gergap Exp $
|
||||
#
|
||||
|
||||
include ..\..\config.nmake
|
||||
|
||||
############### no need to modify below this line #########
|
||||
|
||||
include Makefile.common
|
||||
|
||||
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 ENABLE_LIBWIRESHARK
|
||||
LINK_PLUGIN_WITH=..\..\epan\libwireshark.lib ..\..\epan\dissectors\dissectors.lib
|
||||
CFLAGS=/DHAVE_WIN32_LIBWIRESHARK_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
|
||||
|
||||
DISSECTOR_OBJECTS = $(DISSECTOR_SRC:.c=.obj)
|
||||
|
||||
OBJECTS=$(DISSECTOR_OBJECTS) plugin.obj
|
||||
|
||||
opcua.dll opcua.exp opcua.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
|
||||
link -dll /out:opcua.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
|
||||
$(GLIB_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)
|
||||
!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) opcua.dll opcua.exp opcua.lib *.pdb
|
||||
|
||||
distclean: clean
|
||||
|
||||
maintainer-clean: distclean
|
||||
# Makefile.nmake
|
||||
# nmake file for OpcUa plugin
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
include ..\..\config.nmake
|
||||
|
||||
############### no need to modify below this line #########
|
||||
|
||||
include Makefile.common
|
||||
|
||||
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 ENABLE_LIBWIRESHARK
|
||||
LINK_PLUGIN_WITH=..\..\epan\libwireshark.lib ..\..\epan\dissectors\dissectors.lib
|
||||
CFLAGS=/DHAVE_WIN32_LIBWIRESHARK_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS)
|
||||
|
||||
DISSECTOR_OBJECTS = $(DISSECTOR_SRC:.c=.obj)
|
||||
|
||||
OBJECTS=$(DISSECTOR_OBJECTS) plugin.obj
|
||||
|
||||
opcua.dll opcua.exp opcua.lib : $(OBJECTS) $(LINK_PLUGIN_WITH)
|
||||
link -dll /out:opcua.dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
|
||||
$(GLIB_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)
|
||||
!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) opcua.dll opcua.exp opcua.lib *.pdb
|
||||
|
||||
distclean: clean
|
||||
|
||||
maintainer-clean: distclean
|
||||
|
|
|
@ -1,58 +1,58 @@
|
|||
OpcUa Plugin:
|
||||
=============
|
||||
|
||||
This plugin implements the dissection of the OpcUa Binary Protocol.
|
||||
Author: Gerhard Gappmeier
|
||||
ascolab GmbH
|
||||
http://www.ascolab.com
|
||||
|
||||
Overview:
|
||||
=========
|
||||
|
||||
OpcUa (OPC Unified Architecture) is a vendor and platform independent
|
||||
protocol for automation technology. It is the successor of the
|
||||
COM/DCOM based specifications OPC DA, OPC Alarm & Events, OPC HDA, etc.
|
||||
It unifies all this technologies into a single protocol.
|
||||
|
||||
The specification describes abstract services that are independent
|
||||
of the underlying protocol. For now there exist protocol mappings
|
||||
to a Binary TCP based protocol and a SOAP based Webservice.
|
||||
Also a hybrid version will be available where the Binary messages are transported
|
||||
by a single webservice command called "Invoke".
|
||||
|
||||
More information about the technology you can find on
|
||||
http://www.ascolab.com/index.php?file=ua&lang=en.
|
||||
|
||||
Protocol Mappings:
|
||||
==================
|
||||
|
||||
Binary (TCP): The fastest and most flexible version (small footprint, no XML and SOAP necessary)
|
||||
can easily be tunneled (SSH, IPSEC, etc.), redirected, ...
|
||||
SOAP version: Easy to implement with verious tools like .Net, JAVA, gSOAP, etc.
|
||||
Better to communicate through firewalls via HTTP.
|
||||
SOAP with Binary Attchment: Combines the advantages of both.
|
||||
The messages are encoded as Binary, and transported via SOAP as binary
|
||||
attachment.
|
||||
|
||||
The OPC Foundation offers a free Opc Ua stack implementation in ANSI C
|
||||
for all members. This stack implements the binary protocol as well
|
||||
as the SOAP version. It's easily portable to different kinds of operating
|
||||
systems from embedded devices to servers.
|
||||
This makes it easy to implement Opc Ua applications based on this stack
|
||||
and it is expected that the binary protocol will be the most used
|
||||
protocol.
|
||||
Nevertheless it's free to everbody to implement an own stack according
|
||||
to the specification. An own implementation of the SOAP version
|
||||
should be easy with the various SOAP toolkits.
|
||||
|
||||
For more information see http://www.opcfoundation.org
|
||||
|
||||
Known limitations:
|
||||
==================
|
||||
|
||||
* In this version the security layer contains only dummy data.
|
||||
The plugin decodes the transport layer, skips the security dummy data
|
||||
and decodes the application layer.
|
||||
Security implementation will follow when it has been implemented in the
|
||||
Opc Ua stack.
|
||||
|
||||
OpcUa Plugin:
|
||||
=============
|
||||
|
||||
This plugin implements the dissection of the OpcUa Binary Protocol.
|
||||
Author: Gerhard Gappmeier
|
||||
ascolab GmbH
|
||||
http://www.ascolab.com
|
||||
|
||||
Overview:
|
||||
=========
|
||||
|
||||
OpcUa (OPC Unified Architecture) is a vendor and platform independent
|
||||
protocol for automation technology. It is the successor of the
|
||||
COM/DCOM based specifications OPC DA, OPC Alarm & Events, OPC HDA, etc.
|
||||
It unifies all this technologies into a single protocol.
|
||||
|
||||
The specification describes abstract services that are independent
|
||||
of the underlying protocol. For now there exist protocol mappings
|
||||
to a Binary TCP based protocol and a SOAP based Webservice.
|
||||
Also a hybrid version will be available where the Binary messages are transported
|
||||
by a single webservice command called "Invoke".
|
||||
|
||||
More information about the technology you can find on
|
||||
http://www.ascolab.com/index.php?file=ua&lang=en.
|
||||
|
||||
Protocol Mappings:
|
||||
==================
|
||||
|
||||
Binary (TCP): The fastest and most flexible version (small footprint, no XML and SOAP necessary)
|
||||
can easily be tunneled (SSH, IPSEC, etc.), redirected, ...
|
||||
SOAP version: Easy to implement with verious tools like .Net, JAVA, gSOAP, etc.
|
||||
Better to communicate through firewalls via HTTP.
|
||||
SOAP with Binary Attchment: Combines the advantages of both.
|
||||
The messages are encoded as Binary, and transported via SOAP as binary
|
||||
attachment.
|
||||
|
||||
The OPC Foundation offers a free Opc Ua stack implementation in ANSI C
|
||||
for all members. This stack implements the binary protocol as well
|
||||
as the SOAP version. It's easily portable to different kinds of operating
|
||||
systems from embedded devices to servers.
|
||||
This makes it easy to implement Opc Ua applications based on this stack
|
||||
and it is expected that the binary protocol will be the most used
|
||||
protocol.
|
||||
Nevertheless it's free to everbody to implement an own stack according
|
||||
to the specification. An own implementation of the SOAP version
|
||||
should be easy with the various SOAP toolkits.
|
||||
|
||||
For more information see http://www.opcfoundation.org
|
||||
|
||||
Known limitations:
|
||||
==================
|
||||
|
||||
* In this version the security layer contains only dummy data.
|
||||
The plugin decodes the transport layer, skips the security dummy data
|
||||
and decodes the application layer.
|
||||
Security implementation will follow when it has been implemented in the
|
||||
Opc Ua stack.
|
||||
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
/* Included *after* config.h, in order to re-define these macros */
|
||||
|
||||
#ifdef PACKAGE
|
||||
#undef PACKAGE
|
||||
#endif
|
||||
|
||||
/* Name of package */
|
||||
#define PACKAGE "opcua"
|
||||
|
||||
|
||||
#ifdef VERSION
|
||||
#undef VERSION
|
||||
#endif
|
||||
|
||||
/* Version number of package */
|
||||
#define VERSION "0.0.1"
|
||||
|
||||
/* Included *after* config.h, in order to re-define these macros */
|
||||
|
||||
#ifdef PACKAGE
|
||||
#undef PACKAGE
|
||||
#endif
|
||||
|
||||
/* Name of package */
|
||||
#define PACKAGE "opcua"
|
||||
|
||||
|
||||
#ifdef VERSION
|
||||
#undef VERSION
|
||||
#endif
|
||||
|
||||
/* Version number of package */
|
||||
#define VERSION "0.0.1"
|
||||
|
||||
|
|
|
@ -1,255 +1,255 @@
|
|||
/******************************************************************************
|
||||
** $Id: opcua.c,v 1.5 2007/02/08 11:29:45 gergap Exp $
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: OpcUa Protocol Decoder.
|
||||
**
|
||||
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
** Last change by: $Author: gergap $
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <epan/packet.h>
|
||||
#include <epan/emem.h>
|
||||
#include <epan/dissectors/packet-tcp.h>
|
||||
#include <epan/prefs.h>
|
||||
#include "ua_transport_layer.h"
|
||||
#include "ua_security_layer.h"
|
||||
#include "ua_application_layer.h"
|
||||
#include "opcua_complextypeparser.h"
|
||||
#include "opcua_serviceparser.h"
|
||||
#include "opcua_enumparser.h"
|
||||
#include "opcua_simpletypes.h"
|
||||
#include "opcua_hfindeces.h"
|
||||
|
||||
/* forward reference */
|
||||
void proto_register_opcua (void);
|
||||
void proto_reg_handoff_opcua (void);
|
||||
static void dissect_opcua(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
|
||||
static void dissect_opcua_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
|
||||
|
||||
/* declare parse function pointer */
|
||||
typedef void (*FctParse)(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
|
||||
static int proto_opcua = -1;
|
||||
/** Official IANA registered port for OPC UA Binary Protocol. */
|
||||
static int global_opcua_port = 4840;
|
||||
static dissector_handle_t opcua_handle;
|
||||
|
||||
/** subtree types */
|
||||
gint ett_opcua_transport = -1;
|
||||
gint ett_opcua_extensionobject = -1;
|
||||
gint ett_opcua_nodeid = -1;
|
||||
|
||||
/** OpcUa Transport Message Types */
|
||||
enum MessageType
|
||||
{
|
||||
MSG_HELLO = 0,
|
||||
MSG_ACKNOWLEDGE,
|
||||
MSG_DISCONNECT,
|
||||
MSG_DATA_LAST_CHUNK,
|
||||
MSG_DATA,
|
||||
MSG_ABORT,
|
||||
MSG_ERROR,
|
||||
MSG_INVALID,
|
||||
MSG_UNKNOWN
|
||||
};
|
||||
|
||||
/** OpcUa Transport Message Type Names */
|
||||
static char* g_szMessageTypes[] =
|
||||
{
|
||||
"Hello message",
|
||||
"Acknowledge message",
|
||||
"Disconnect message",
|
||||
"Data message, last chunk in message.",
|
||||
"Data message, further chunks must follow.",
|
||||
"Abort message",
|
||||
"Error message",
|
||||
"Invalid message",
|
||||
"Unknown message"
|
||||
};
|
||||
|
||||
|
||||
/** Setup protocol subtree array */
|
||||
static gint *ett[] =
|
||||
{
|
||||
&ett_opcua_transport,
|
||||
&ett_opcua_extensionobject,
|
||||
&ett_opcua_nodeid,
|
||||
};
|
||||
|
||||
/** plugin entry functions.
|
||||
* This registers the OpcUa protocol.
|
||||
*/
|
||||
void proto_register_opcua(void)
|
||||
{
|
||||
module_t *opcua_module;
|
||||
|
||||
if (proto_opcua == -1)
|
||||
{
|
||||
proto_opcua = proto_register_protocol(
|
||||
"OpcUa Binary Protocol", /* name */
|
||||
"OpcUa", /* short name */
|
||||
"opcua" /* abbrev */
|
||||
);
|
||||
}
|
||||
opcua_module = prefs_register_protocol(proto_opcua, proto_reg_handoff_opcua);
|
||||
|
||||
registerTransportLayerTypes(proto_opcua);
|
||||
registerSecurityLayerTypes(proto_opcua);
|
||||
registerApplicationLayerTypes(proto_opcua);
|
||||
registerSimpleTypes(proto_opcua);
|
||||
registerEnumTypes(proto_opcua);
|
||||
registerComplexTypes();
|
||||
registerServiceTypes();
|
||||
registerFieldTypes(proto_opcua);
|
||||
|
||||
proto_register_subtree_array(ett, array_length(ett));
|
||||
}
|
||||
|
||||
/** Register sub protocol.
|
||||
* For TCP port 4840.
|
||||
*/
|
||||
void proto_reg_handoff_opcua(void)
|
||||
{
|
||||
static int Initialized=FALSE;
|
||||
|
||||
if (!Initialized)
|
||||
{
|
||||
opcua_handle = create_dissector_handle(dissect_opcua, proto_opcua);
|
||||
dissector_add("tcp.port", global_opcua_port, opcua_handle);
|
||||
}
|
||||
}
|
||||
|
||||
/** header length that is needed to compute
|
||||
* the pdu length.
|
||||
* @see get_opcua_message_len
|
||||
*/
|
||||
#define FRAME_HEADER_LEN 8
|
||||
|
||||
/** returns the length of an OpcUa message.
|
||||
* This function reads the length information from
|
||||
* the transport header.
|
||||
*/
|
||||
static guint get_opcua_message_len(packet_info *pinfo, tvbuff_t *tvb, int offset)
|
||||
{
|
||||
gint32 plen;
|
||||
|
||||
/* the message length starts at offset 4 */
|
||||
plen = tvb_get_letohl(tvb, offset + 4);
|
||||
|
||||
return plen;
|
||||
}
|
||||
|
||||
/** The main OpcUa dissector functions.
|
||||
* It uses tcp_dissect_pdus from packet-tcp.h
|
||||
* to reassemble the TCP data.
|
||||
*/
|
||||
static void dissect_opcua(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
||||
{
|
||||
tcp_dissect_pdus(tvb, pinfo, tree, TRUE, FRAME_HEADER_LEN,
|
||||
get_opcua_message_len, dissect_opcua_message);
|
||||
}
|
||||
|
||||
/** The OpcUa message dissector.
|
||||
* This method dissects full OpcUa messages.
|
||||
* It gets only called with reassembled data
|
||||
* from tcp_dissect_pdus.
|
||||
*/
|
||||
static void dissect_opcua_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
||||
{
|
||||
FctParse pfctParse = NULL;
|
||||
enum MessageType msgtype = MSG_INVALID;
|
||||
|
||||
if (check_col(pinfo->cinfo, COL_PROTOCOL))
|
||||
{
|
||||
col_set_str(pinfo->cinfo, COL_PROTOCOL, "OpcUa");
|
||||
}
|
||||
|
||||
/* parse message type */
|
||||
if (tvb->real_data[0] == 'U' && tvb->real_data[1] == 'A')
|
||||
{
|
||||
if (tvb->real_data[2] == 'T')
|
||||
{
|
||||
switch(tvb->real_data[3])
|
||||
{
|
||||
case 'H': msgtype = MSG_HELLO;
|
||||
pfctParse = parseHello;
|
||||
break;
|
||||
case 'A': msgtype = MSG_ACKNOWLEDGE;
|
||||
pfctParse = parseAcknowledge;
|
||||
break;
|
||||
case 'D': msgtype = MSG_DISCONNECT;
|
||||
pfctParse = parseDisconnect;
|
||||
break;
|
||||
default: msgtype = MSG_INVALID;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (tvb->real_data[2] == 'M')
|
||||
{
|
||||
switch(tvb->real_data[3])
|
||||
{
|
||||
case 'G': msgtype = MSG_DATA_LAST_CHUNK;
|
||||
pfctParse = parseData;
|
||||
break;
|
||||
case 'C': msgtype = MSG_DATA;
|
||||
pfctParse = parseData;
|
||||
break;
|
||||
case 'A': msgtype = MSG_ABORT;
|
||||
pfctParse = parseAbort;
|
||||
break;
|
||||
case 'E': msgtype = MSG_ERROR;
|
||||
pfctParse = parseError;
|
||||
break;
|
||||
default: msgtype = MSG_INVALID;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
msgtype = MSG_UNKNOWN;
|
||||
}
|
||||
|
||||
/* Clear out stuff in the info column */
|
||||
if(check_col(pinfo->cinfo, COL_INFO))
|
||||
{
|
||||
col_set_str(pinfo->cinfo, COL_INFO, g_szMessageTypes[msgtype]);
|
||||
}
|
||||
|
||||
if (tree && pfctParse)
|
||||
{
|
||||
gint offset = 0;
|
||||
|
||||
/* we are being asked for details */
|
||||
proto_item *ti = NULL;
|
||||
proto_tree *transport_tree = NULL;
|
||||
|
||||
ti = proto_tree_add_item(tree, proto_opcua, tvb, 0, -1, FALSE);
|
||||
transport_tree = proto_item_add_subtree(ti, ett_opcua_transport);
|
||||
|
||||
/* call the transport message dissector */
|
||||
(*pfctParse)(transport_tree, tvb, &offset);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
** $Id$
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: OpcUa Protocol Decoder.
|
||||
**
|
||||
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
** Last change by: $Author: gergap $
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <epan/packet.h>
|
||||
#include <epan/emem.h>
|
||||
#include <epan/dissectors/packet-tcp.h>
|
||||
#include <epan/prefs.h>
|
||||
#include "ua_transport_layer.h"
|
||||
#include "ua_security_layer.h"
|
||||
#include "ua_application_layer.h"
|
||||
#include "opcua_complextypeparser.h"
|
||||
#include "opcua_serviceparser.h"
|
||||
#include "opcua_enumparser.h"
|
||||
#include "opcua_simpletypes.h"
|
||||
#include "opcua_hfindeces.h"
|
||||
|
||||
/* forward reference */
|
||||
void proto_register_opcua (void);
|
||||
void proto_reg_handoff_opcua (void);
|
||||
static void dissect_opcua(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
|
||||
static void dissect_opcua_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
|
||||
|
||||
/* declare parse function pointer */
|
||||
typedef void (*FctParse)(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
|
||||
static int proto_opcua = -1;
|
||||
/** Official IANA registered port for OPC UA Binary Protocol. */
|
||||
static int global_opcua_port = 4840;
|
||||
static dissector_handle_t opcua_handle;
|
||||
|
||||
/** subtree types */
|
||||
gint ett_opcua_transport = -1;
|
||||
gint ett_opcua_extensionobject = -1;
|
||||
gint ett_opcua_nodeid = -1;
|
||||
|
||||
/** OpcUa Transport Message Types */
|
||||
enum MessageType
|
||||
{
|
||||
MSG_HELLO = 0,
|
||||
MSG_ACKNOWLEDGE,
|
||||
MSG_DISCONNECT,
|
||||
MSG_DATA_LAST_CHUNK,
|
||||
MSG_DATA,
|
||||
MSG_ABORT,
|
||||
MSG_ERROR,
|
||||
MSG_INVALID,
|
||||
MSG_UNKNOWN
|
||||
};
|
||||
|
||||
/** OpcUa Transport Message Type Names */
|
||||
static char* g_szMessageTypes[] =
|
||||
{
|
||||
"Hello message",
|
||||
"Acknowledge message",
|
||||
"Disconnect message",
|
||||
"Data message, last chunk in message.",
|
||||
"Data message, further chunks must follow.",
|
||||
"Abort message",
|
||||
"Error message",
|
||||
"Invalid message",
|
||||
"Unknown message"
|
||||
};
|
||||
|
||||
|
||||
/** Setup protocol subtree array */
|
||||
static gint *ett[] =
|
||||
{
|
||||
&ett_opcua_transport,
|
||||
&ett_opcua_extensionobject,
|
||||
&ett_opcua_nodeid,
|
||||
};
|
||||
|
||||
/** plugin entry functions.
|
||||
* This registers the OpcUa protocol.
|
||||
*/
|
||||
void proto_register_opcua(void)
|
||||
{
|
||||
module_t *opcua_module;
|
||||
|
||||
if (proto_opcua == -1)
|
||||
{
|
||||
proto_opcua = proto_register_protocol(
|
||||
"OpcUa Binary Protocol", /* name */
|
||||
"OpcUa", /* short name */
|
||||
"opcua" /* abbrev */
|
||||
);
|
||||
}
|
||||
opcua_module = prefs_register_protocol(proto_opcua, proto_reg_handoff_opcua);
|
||||
|
||||
registerTransportLayerTypes(proto_opcua);
|
||||
registerSecurityLayerTypes(proto_opcua);
|
||||
registerApplicationLayerTypes(proto_opcua);
|
||||
registerSimpleTypes(proto_opcua);
|
||||
registerEnumTypes(proto_opcua);
|
||||
registerComplexTypes();
|
||||
registerServiceTypes();
|
||||
registerFieldTypes(proto_opcua);
|
||||
|
||||
proto_register_subtree_array(ett, array_length(ett));
|
||||
}
|
||||
|
||||
/** Register sub protocol.
|
||||
* For TCP port 4840.
|
||||
*/
|
||||
void proto_reg_handoff_opcua(void)
|
||||
{
|
||||
static int Initialized=FALSE;
|
||||
|
||||
if (!Initialized)
|
||||
{
|
||||
opcua_handle = create_dissector_handle(dissect_opcua, proto_opcua);
|
||||
dissector_add("tcp.port", global_opcua_port, opcua_handle);
|
||||
}
|
||||
}
|
||||
|
||||
/** header length that is needed to compute
|
||||
* the pdu length.
|
||||
* @see get_opcua_message_len
|
||||
*/
|
||||
#define FRAME_HEADER_LEN 8
|
||||
|
||||
/** returns the length of an OpcUa message.
|
||||
* This function reads the length information from
|
||||
* the transport header.
|
||||
*/
|
||||
static guint get_opcua_message_len(packet_info *pinfo, tvbuff_t *tvb, int offset)
|
||||
{
|
||||
gint32 plen;
|
||||
|
||||
/* the message length starts at offset 4 */
|
||||
plen = tvb_get_letohl(tvb, offset + 4);
|
||||
|
||||
return plen;
|
||||
}
|
||||
|
||||
/** The main OpcUa dissector functions.
|
||||
* It uses tcp_dissect_pdus from packet-tcp.h
|
||||
* to reassemble the TCP data.
|
||||
*/
|
||||
static void dissect_opcua(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
||||
{
|
||||
tcp_dissect_pdus(tvb, pinfo, tree, TRUE, FRAME_HEADER_LEN,
|
||||
get_opcua_message_len, dissect_opcua_message);
|
||||
}
|
||||
|
||||
/** The OpcUa message dissector.
|
||||
* This method dissects full OpcUa messages.
|
||||
* It gets only called with reassembled data
|
||||
* from tcp_dissect_pdus.
|
||||
*/
|
||||
static void dissect_opcua_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
||||
{
|
||||
FctParse pfctParse = NULL;
|
||||
enum MessageType msgtype = MSG_INVALID;
|
||||
|
||||
if (check_col(pinfo->cinfo, COL_PROTOCOL))
|
||||
{
|
||||
col_set_str(pinfo->cinfo, COL_PROTOCOL, "OpcUa");
|
||||
}
|
||||
|
||||
/* parse message type */
|
||||
if (tvb->real_data[0] == 'U' && tvb->real_data[1] == 'A')
|
||||
{
|
||||
if (tvb->real_data[2] == 'T')
|
||||
{
|
||||
switch(tvb->real_data[3])
|
||||
{
|
||||
case 'H': msgtype = MSG_HELLO;
|
||||
pfctParse = parseHello;
|
||||
break;
|
||||
case 'A': msgtype = MSG_ACKNOWLEDGE;
|
||||
pfctParse = parseAcknowledge;
|
||||
break;
|
||||
case 'D': msgtype = MSG_DISCONNECT;
|
||||
pfctParse = parseDisconnect;
|
||||
break;
|
||||
default: msgtype = MSG_INVALID;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (tvb->real_data[2] == 'M')
|
||||
{
|
||||
switch(tvb->real_data[3])
|
||||
{
|
||||
case 'G': msgtype = MSG_DATA_LAST_CHUNK;
|
||||
pfctParse = parseData;
|
||||
break;
|
||||
case 'C': msgtype = MSG_DATA;
|
||||
pfctParse = parseData;
|
||||
break;
|
||||
case 'A': msgtype = MSG_ABORT;
|
||||
pfctParse = parseAbort;
|
||||
break;
|
||||
case 'E': msgtype = MSG_ERROR;
|
||||
pfctParse = parseError;
|
||||
break;
|
||||
default: msgtype = MSG_INVALID;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
msgtype = MSG_UNKNOWN;
|
||||
}
|
||||
|
||||
/* Clear out stuff in the info column */
|
||||
if(check_col(pinfo->cinfo, COL_INFO))
|
||||
{
|
||||
col_set_str(pinfo->cinfo, COL_INFO, g_szMessageTypes[msgtype]);
|
||||
}
|
||||
|
||||
if (tree && pfctParse)
|
||||
{
|
||||
gint offset = 0;
|
||||
|
||||
/* we are being asked for details */
|
||||
proto_item *ti = NULL;
|
||||
proto_tree *transport_tree = NULL;
|
||||
|
||||
ti = proto_tree_add_item(tree, proto_opcua, tvb, 0, -1, FALSE);
|
||||
transport_tree = proto_item_add_subtree(ti, ett_opcua_transport);
|
||||
|
||||
/* call the transport message dissector */
|
||||
(*pfctParse)(transport_tree, tvb, &offset);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -30,8 +30,8 @@
|
|||
|
||||
#include "opcua_enumparser.h"
|
||||
|
||||
|
||||
/** NodeClass enum table */
|
||||
|
||||
/** NodeClass enum table */
|
||||
static const value_string g_NodeClassTable[] = {
|
||||
{ 0, "Node" },
|
||||
{ 1, "Object" },
|
||||
|
@ -41,118 +41,118 @@ static const value_string g_NodeClassTable[] = {
|
|||
{ 16, "VariableType" },
|
||||
{ 32, "ReferenceType" },
|
||||
{ 64, "DataType" },
|
||||
{ 128, "View" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_NodeClass = -1;
|
||||
|
||||
void parseNodeClass(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_NodeClass, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** IdType enum table */
|
||||
{ 128, "View" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_NodeClass = -1;
|
||||
|
||||
void parseNodeClass(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_NodeClass, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** IdType enum table */
|
||||
static const value_string g_IdTypeTable[] = {
|
||||
{ 0, "Numeric" },
|
||||
{ 1, "String" },
|
||||
{ 2, "Uri" },
|
||||
{ 3, "Guid" },
|
||||
{ 4, "Opaque" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_IdType = -1;
|
||||
|
||||
void parseIdType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_IdType, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** MessageSecurityMode enum table */
|
||||
{ 4, "Opaque" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_IdType = -1;
|
||||
|
||||
void parseIdType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_IdType, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** MessageSecurityMode enum table */
|
||||
static const value_string g_MessageSecurityModeTable[] = {
|
||||
{ 0, "None" },
|
||||
{ 1, "Sign" },
|
||||
{ 2, "SignAndEncrypt" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_MessageSecurityMode = -1;
|
||||
|
||||
void parseMessageSecurityMode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_MessageSecurityMode, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** UserTokenType enum table */
|
||||
{ 2, "SignAndEncrypt" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_MessageSecurityMode = -1;
|
||||
|
||||
void parseMessageSecurityMode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_MessageSecurityMode, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** UserTokenType enum table */
|
||||
static const value_string g_UserTokenTypeTable[] = {
|
||||
{ 0, "Default" },
|
||||
{ 1, "UserName" },
|
||||
{ 2, "Certificate" },
|
||||
{ 3, "IssuedToken" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_UserTokenType = -1;
|
||||
|
||||
void parseUserTokenType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_UserTokenType, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** ServerDescriptionType enum table */
|
||||
{ 3, "IssuedToken" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_UserTokenType = -1;
|
||||
|
||||
void parseUserTokenType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_UserTokenType, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** ServerDescriptionType enum table */
|
||||
static const value_string g_ServerDescriptionTypeTable[] = {
|
||||
{ 0, "Standard" },
|
||||
{ 1, "Discovery" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_ServerDescriptionType = -1;
|
||||
|
||||
void parseServerDescriptionType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_ServerDescriptionType, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** SecurityTokenRequestType enum table */
|
||||
{ 1, "Discovery" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_ServerDescriptionType = -1;
|
||||
|
||||
void parseServerDescriptionType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_ServerDescriptionType, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** SecurityTokenRequestType enum table */
|
||||
static const value_string g_SecurityTokenRequestTypeTable[] = {
|
||||
{ 0, "Issue" },
|
||||
{ 1, "Renew" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_SecurityTokenRequestType = -1;
|
||||
|
||||
void parseSecurityTokenRequestType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_SecurityTokenRequestType, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** ComplianceLevel enum table */
|
||||
{ 1, "Renew" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_SecurityTokenRequestType = -1;
|
||||
|
||||
void parseSecurityTokenRequestType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_SecurityTokenRequestType, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** ComplianceLevel enum table */
|
||||
static const value_string g_ComplianceLevelTable[] = {
|
||||
{ 0, "Untested" },
|
||||
{ 1, "Partial" },
|
||||
{ 2, "SelfTested" },
|
||||
{ 3, "Certified" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_ComplianceLevel = -1;
|
||||
|
||||
void parseComplianceLevel(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_ComplianceLevel, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** RedundancySupport enum table */
|
||||
{ 3, "Certified" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_ComplianceLevel = -1;
|
||||
|
||||
void parseComplianceLevel(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_ComplianceLevel, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** RedundancySupport enum table */
|
||||
static const value_string g_RedundancySupportTable[] = {
|
||||
{ 1, "None" },
|
||||
{ 2, "Cold" },
|
||||
{ 3, "Warm" },
|
||||
{ 4, "Hot" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_RedundancySupport = -1;
|
||||
|
||||
void parseRedundancySupport(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_RedundancySupport, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** ServerState enum table */
|
||||
{ 4, "Hot" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_RedundancySupport = -1;
|
||||
|
||||
void parseRedundancySupport(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_RedundancySupport, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** ServerState enum table */
|
||||
static const value_string g_ServerStateTable[] = {
|
||||
{ 1, "Running" },
|
||||
{ 2, "Failed" },
|
||||
|
@ -161,31 +161,31 @@ static const value_string g_ServerStateTable[] = {
|
|||
{ 5, "Shutdown" },
|
||||
{ 6, "Test" },
|
||||
{ 7, "CommunicationFault" },
|
||||
{ 8, "Unknown" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_ServerState = -1;
|
||||
|
||||
void parseServerState(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_ServerState, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** ExceptionDeviationType enum table */
|
||||
{ 8, "Unknown" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_ServerState = -1;
|
||||
|
||||
void parseServerState(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_ServerState, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** ExceptionDeviationType enum table */
|
||||
static const value_string g_ExceptionDeviationTypeTable[] = {
|
||||
{ 1, "AbsoluteValue" },
|
||||
{ 2, "PercentOfRange" },
|
||||
{ 3, "PercentOfValue" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_ExceptionDeviationType = -1;
|
||||
|
||||
void parseExceptionDeviationType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_ExceptionDeviationType, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** ColorsDataType enum table */
|
||||
{ 3, "PercentOfValue" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_ExceptionDeviationType = -1;
|
||||
|
||||
void parseExceptionDeviationType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_ExceptionDeviationType, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** ColorsDataType enum table */
|
||||
static const value_string g_ColorsDataTypeTable[] = {
|
||||
{ 1, "Red" },
|
||||
{ 2, "Orange" },
|
||||
|
@ -193,17 +193,17 @@ static const value_string g_ColorsDataTypeTable[] = {
|
|||
{ 4, "Green" },
|
||||
{ 5, "Blue" },
|
||||
{ 6, "DarkBlue" },
|
||||
{ 7, "Violet" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_ColorsDataType = -1;
|
||||
|
||||
void parseColorsDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_ColorsDataType, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** DiagnosticsMasks enum table */
|
||||
{ 7, "Violet" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_ColorsDataType = -1;
|
||||
|
||||
void parseColorsDataType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_ColorsDataType, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** DiagnosticsMasks enum table */
|
||||
static const value_string g_DiagnosticsMasksTable[] = {
|
||||
{ 1, "ServiceSymbolicId" },
|
||||
{ 2, "ServiceLocalizedText" },
|
||||
|
@ -228,45 +228,45 @@ static const value_string g_DiagnosticsMasksTable[] = {
|
|||
{ 528, "InnerDiagnostics" },
|
||||
{ 99, "SymbolicIdAndText" },
|
||||
{ 239, "NoInnerStatus" },
|
||||
{ 1023, "All" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_DiagnosticsMasks = -1;
|
||||
|
||||
void parseDiagnosticsMasks(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_DiagnosticsMasks, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** EnumeratedTestType enum table */
|
||||
{ 1023, "All" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_DiagnosticsMasks = -1;
|
||||
|
||||
void parseDiagnosticsMasks(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_DiagnosticsMasks, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** EnumeratedTestType enum table */
|
||||
static const value_string g_EnumeratedTestTypeTable[] = {
|
||||
{ 1, "Red" },
|
||||
{ 4, "Yellow" },
|
||||
{ 5, "Green" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_EnumeratedTestType = -1;
|
||||
|
||||
void parseEnumeratedTestType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_EnumeratedTestType, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** BrowseDirection enum table */
|
||||
{ 5, "Green" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_EnumeratedTestType = -1;
|
||||
|
||||
void parseEnumeratedTestType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_EnumeratedTestType, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** BrowseDirection enum table */
|
||||
static const value_string g_BrowseDirectionTable[] = {
|
||||
{ 1, "Forward" },
|
||||
{ 2, "Inverse" },
|
||||
{ 3, "Both" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_BrowseDirection = -1;
|
||||
|
||||
void parseBrowseDirection(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_BrowseDirection, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** FilterOperator enum table */
|
||||
{ 3, "Both" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_BrowseDirection = -1;
|
||||
|
||||
void parseBrowseDirection(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_BrowseDirection, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** FilterOperator enum table */
|
||||
static const value_string g_FilterOperatorTable[] = {
|
||||
{ 1, "Equals" },
|
||||
{ 2, "IsNull" },
|
||||
|
@ -282,132 +282,132 @@ static const value_string g_FilterOperatorTable[] = {
|
|||
{ 12, "Or" },
|
||||
{ 13, "InView" },
|
||||
{ 14, "OfType" },
|
||||
{ 15, "RelatedTo" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_FilterOperator = -1;
|
||||
|
||||
void parseFilterOperator(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_FilterOperator, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** TimestampsToReturn enum table */
|
||||
{ 15, "RelatedTo" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_FilterOperator = -1;
|
||||
|
||||
void parseFilterOperator(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_FilterOperator, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** TimestampsToReturn enum table */
|
||||
static const value_string g_TimestampsToReturnTable[] = {
|
||||
{ 1, "Source" },
|
||||
{ 2, "Server" },
|
||||
{ 3, "Both" },
|
||||
{ 4, "Neither" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_TimestampsToReturn = -1;
|
||||
|
||||
void parseTimestampsToReturn(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_TimestampsToReturn, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** MonitoringMode enum table */
|
||||
{ 4, "Neither" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_TimestampsToReturn = -1;
|
||||
|
||||
void parseTimestampsToReturn(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_TimestampsToReturn, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** MonitoringMode enum table */
|
||||
static const value_string g_MonitoringModeTable[] = {
|
||||
{ 0, "Disabled" },
|
||||
{ 1, "Sampling" },
|
||||
{ 2, "Reporting" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_MonitoringMode = -1;
|
||||
|
||||
void parseMonitoringMode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_MonitoringMode, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** DataChangeTrigger enum table */
|
||||
{ 2, "Reporting" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_MonitoringMode = -1;
|
||||
|
||||
void parseMonitoringMode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_MonitoringMode, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** DataChangeTrigger enum table */
|
||||
static const value_string g_DataChangeTriggerTable[] = {
|
||||
{ 0, "Status" },
|
||||
{ 1, "StatusValue" },
|
||||
{ 2, "StatusValueTimestamp" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_DataChangeTrigger = -1;
|
||||
|
||||
void parseDataChangeTrigger(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_DataChangeTrigger, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** DeadbandType enum table */
|
||||
{ 2, "StatusValueTimestamp" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_DataChangeTrigger = -1;
|
||||
|
||||
void parseDataChangeTrigger(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_DataChangeTrigger, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** DeadbandType enum table */
|
||||
static const value_string g_DeadbandTypeTable[] = {
|
||||
{ 0, "None" },
|
||||
{ 1, "Absolute" },
|
||||
{ 2, "Percentage" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_DeadbandType = -1;
|
||||
|
||||
void parseDeadbandType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_DeadbandType, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
{ 2, "Percentage" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_DeadbandType = -1;
|
||||
|
||||
void parseDeadbandType(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_tree_add_item(tree, hf_opcua_DeadbandType, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
/** header field definitions */
|
||||
static hf_register_info hf[] =
|
||||
{
|
||||
{ &hf_opcua_NodeClass,
|
||||
{ "NodeClass", "", FT_UINT32, BASE_HEX, VALS(g_NodeClassTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_IdType,
|
||||
{ "IdType", "", FT_UINT32, BASE_HEX, VALS(g_IdTypeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_MessageSecurityMode,
|
||||
{ "MessageSecurityMode", "", FT_UINT32, BASE_HEX, VALS(g_MessageSecurityModeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_UserTokenType,
|
||||
{ "UserTokenType", "", FT_UINT32, BASE_HEX, VALS(g_UserTokenTypeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_ServerDescriptionType,
|
||||
{ "ServerDescriptionType", "", FT_UINT32, BASE_HEX, VALS(g_ServerDescriptionTypeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_SecurityTokenRequestType,
|
||||
{ "SecurityTokenRequestType", "", FT_UINT32, BASE_HEX, VALS(g_SecurityTokenRequestTypeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_ComplianceLevel,
|
||||
{ "ComplianceLevel", "", FT_UINT32, BASE_HEX, VALS(g_ComplianceLevelTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_RedundancySupport,
|
||||
{ "RedundancySupport", "", FT_UINT32, BASE_HEX, VALS(g_RedundancySupportTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_ServerState,
|
||||
{ "ServerState", "", FT_UINT32, BASE_HEX, VALS(g_ServerStateTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_ExceptionDeviationType,
|
||||
{ "ExceptionDeviationType", "", FT_UINT32, BASE_HEX, VALS(g_ExceptionDeviationTypeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_ColorsDataType,
|
||||
{ "ColorsDataType", "", FT_UINT32, BASE_HEX, VALS(g_ColorsDataTypeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_DiagnosticsMasks,
|
||||
{ "DiagnosticsMasks", "", FT_UINT32, BASE_HEX, VALS(g_DiagnosticsMasksTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_EnumeratedTestType,
|
||||
{ "EnumeratedTestType", "", FT_UINT32, BASE_HEX, VALS(g_EnumeratedTestTypeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_BrowseDirection,
|
||||
{ "BrowseDirection", "", FT_UINT32, BASE_HEX, VALS(g_BrowseDirectionTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_FilterOperator,
|
||||
{ "FilterOperator", "", FT_UINT32, BASE_HEX, VALS(g_FilterOperatorTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_TimestampsToReturn,
|
||||
{ "TimestampsToReturn", "", FT_UINT32, BASE_HEX, VALS(g_TimestampsToReturnTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_MonitoringMode,
|
||||
{ "MonitoringMode", "", FT_UINT32, BASE_HEX, VALS(g_MonitoringModeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_DataChangeTrigger,
|
||||
{ "DataChangeTrigger", "", FT_UINT32, BASE_HEX, VALS(g_DataChangeTriggerTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_DeadbandType,
|
||||
{ "DeadbandType", "", FT_UINT32, BASE_HEX, VALS(g_DeadbandTypeTable), 0x0, "", HFILL }
|
||||
{
|
||||
{ &hf_opcua_NodeClass,
|
||||
{ "NodeClass", "", FT_UINT32, BASE_HEX, VALS(g_NodeClassTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_IdType,
|
||||
{ "IdType", "", FT_UINT32, BASE_HEX, VALS(g_IdTypeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_MessageSecurityMode,
|
||||
{ "MessageSecurityMode", "", FT_UINT32, BASE_HEX, VALS(g_MessageSecurityModeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_UserTokenType,
|
||||
{ "UserTokenType", "", FT_UINT32, BASE_HEX, VALS(g_UserTokenTypeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_ServerDescriptionType,
|
||||
{ "ServerDescriptionType", "", FT_UINT32, BASE_HEX, VALS(g_ServerDescriptionTypeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_SecurityTokenRequestType,
|
||||
{ "SecurityTokenRequestType", "", FT_UINT32, BASE_HEX, VALS(g_SecurityTokenRequestTypeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_ComplianceLevel,
|
||||
{ "ComplianceLevel", "", FT_UINT32, BASE_HEX, VALS(g_ComplianceLevelTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_RedundancySupport,
|
||||
{ "RedundancySupport", "", FT_UINT32, BASE_HEX, VALS(g_RedundancySupportTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_ServerState,
|
||||
{ "ServerState", "", FT_UINT32, BASE_HEX, VALS(g_ServerStateTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_ExceptionDeviationType,
|
||||
{ "ExceptionDeviationType", "", FT_UINT32, BASE_HEX, VALS(g_ExceptionDeviationTypeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_ColorsDataType,
|
||||
{ "ColorsDataType", "", FT_UINT32, BASE_HEX, VALS(g_ColorsDataTypeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_DiagnosticsMasks,
|
||||
{ "DiagnosticsMasks", "", FT_UINT32, BASE_HEX, VALS(g_DiagnosticsMasksTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_EnumeratedTestType,
|
||||
{ "EnumeratedTestType", "", FT_UINT32, BASE_HEX, VALS(g_EnumeratedTestTypeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_BrowseDirection,
|
||||
{ "BrowseDirection", "", FT_UINT32, BASE_HEX, VALS(g_BrowseDirectionTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_FilterOperator,
|
||||
{ "FilterOperator", "", FT_UINT32, BASE_HEX, VALS(g_FilterOperatorTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_TimestampsToReturn,
|
||||
{ "TimestampsToReturn", "", FT_UINT32, BASE_HEX, VALS(g_TimestampsToReturnTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_MonitoringMode,
|
||||
{ "MonitoringMode", "", FT_UINT32, BASE_HEX, VALS(g_MonitoringModeTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_DataChangeTrigger,
|
||||
{ "DataChangeTrigger", "", FT_UINT32, BASE_HEX, VALS(g_DataChangeTriggerTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_DeadbandType,
|
||||
{ "DeadbandType", "", FT_UINT32, BASE_HEX, VALS(g_DeadbandTypeTable), 0x0, "", HFILL }
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -1,32 +1,32 @@
|
|||
/******************************************************************************
|
||||
** $Id$
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: This file contains protocol field information.
|
||||
**
|
||||
** This file was autogenerated on 8.5.2007 18:53:26.
|
||||
** DON'T MODIFY THIS FILE!
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <epan/packet.h>
|
||||
/******************************************************************************
|
||||
** $Id$
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: This file contains protocol field information.
|
||||
**
|
||||
** This file was autogenerated on 8.5.2007 18:53:26.
|
||||
** DON'T MODIFY THIS FILE!
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <epan/packet.h>
|
||||
|
||||
int hf_opcua_TestId = -1;
|
||||
int hf_opcua_Iteration = -1;
|
||||
|
@ -301,11 +301,11 @@ int hf_opcua_RevisedSamplingInterval = -1;
|
|||
int hf_opcua_RevisedQueueSize = -1;
|
||||
int hf_opcua_MonitorItemId = -1;
|
||||
int hf_opcua_PublishTime = -1;
|
||||
int hf_opcua_AvailableSequenceNumbersRanges = -1;
|
||||
|
||||
/** header field definitions */
|
||||
static hf_register_info hf[] =
|
||||
{
|
||||
int hf_opcua_AvailableSequenceNumbersRanges = -1;
|
||||
|
||||
/** header field definitions */
|
||||
static hf_register_info hf[] =
|
||||
{
|
||||
|
||||
{ &hf_opcua_TestId, { "TestId", "", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL } },
|
||||
{ &hf_opcua_Iteration, { "Iteration", "", FT_INT32, BASE_DEC, NULL, 0x0, "", HFILL } },
|
||||
|
@ -580,11 +580,11 @@ static hf_register_info hf[] =
|
|||
{ &hf_opcua_RevisedQueueSize, { "RevisedQueueSize", "", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL } },
|
||||
{ &hf_opcua_MonitorItemId, { "MonitorItemId", "", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL } },
|
||||
{ &hf_opcua_PublishTime, { "PublishTime", "", FT_ABSOLUTE_TIME, BASE_NONE, NULL, 0x0, "", HFILL } },
|
||||
{ &hf_opcua_AvailableSequenceNumbersRanges, { "AvailableSequenceNumbersRanges", "", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL } }
|
||||
};
|
||||
|
||||
/** Register field types. */
|
||||
void registerFieldTypes(int proto)
|
||||
{
|
||||
proto_register_field_array(proto, hf, array_length(hf));
|
||||
}
|
||||
{ &hf_opcua_AvailableSequenceNumbersRanges, { "AvailableSequenceNumbersRanges", "", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL } }
|
||||
};
|
||||
|
||||
/** Register field types. */
|
||||
void registerFieldTypes(int proto)
|
||||
{
|
||||
proto_register_field_array(proto, hf, array_length(hf));
|
||||
}
|
||||
|
|
|
@ -1,32 +1,32 @@
|
|||
/******************************************************************************
|
||||
** $Id$
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: This file contains protocol field handles.
|
||||
**
|
||||
** This file was autogenerated on 8.5.2007 18:53:26.
|
||||
** DON'T MODIFY THIS FILE!
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <epan/packet.h>
|
||||
/******************************************************************************
|
||||
** $Id$
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: This file contains protocol field handles.
|
||||
**
|
||||
** This file was autogenerated on 8.5.2007 18:53:26.
|
||||
** DON'T MODIFY THIS FILE!
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <epan/packet.h>
|
||||
|
||||
extern int hf_opcua_TestId;
|
||||
extern int hf_opcua_Iteration;
|
||||
|
@ -301,7 +301,7 @@ extern int hf_opcua_RevisedSamplingInterval;
|
|||
extern int hf_opcua_RevisedQueueSize;
|
||||
extern int hf_opcua_MonitorItemId;
|
||||
extern int hf_opcua_PublishTime;
|
||||
extern int hf_opcua_AvailableSequenceNumbersRanges;
|
||||
|
||||
/** Register field types. */
|
||||
void registerFieldTypes(int proto);
|
||||
extern int hf_opcua_AvailableSequenceNumbersRanges;
|
||||
|
||||
/** Register field types. */
|
||||
void registerFieldTypes(int proto);
|
||||
|
|
|
@ -1,44 +1,44 @@
|
|||
/******************************************************************************
|
||||
** $Id$
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: Parser type definitions.
|
||||
**
|
||||
** This file was autogenerated on 8.5.2007 18:53:26.
|
||||
** DON'T MODIFY THIS FILE!
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <epan/packet.h>
|
||||
|
||||
/* declare service parser function prototype */
|
||||
typedef void (*fctServiceParser)(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
/* declare enum parser function prototype */
|
||||
typedef void (*fctEnumParser)(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
/* declare type parser function prototype */
|
||||
typedef void (*fctComplexTypeParser)(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
/* declare type parser function prototype */
|
||||
typedef void (*fctSimpleTypeParser)(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
|
||||
typedef struct _ParserEntry
|
||||
{
|
||||
int iRequestId;
|
||||
fctServiceParser pParser;
|
||||
} ParserEntry;
|
||||
/******************************************************************************
|
||||
** $Id$
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: Parser type definitions.
|
||||
**
|
||||
** This file was autogenerated on 8.5.2007 18:53:26.
|
||||
** DON'T MODIFY THIS FILE!
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <epan/packet.h>
|
||||
|
||||
/* declare service parser function prototype */
|
||||
typedef void (*fctServiceParser)(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
/* declare enum parser function prototype */
|
||||
typedef void (*fctEnumParser)(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
/* declare type parser function prototype */
|
||||
typedef void (*fctComplexTypeParser)(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
/* declare type parser function prototype */
|
||||
typedef void (*fctSimpleTypeParser)(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
|
||||
typedef struct _ParserEntry
|
||||
{
|
||||
int iRequestId;
|
||||
fctServiceParser pParser;
|
||||
} ParserEntry;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,36 +1,36 @@
|
|||
/******************************************************************************
|
||||
** $Id$
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: Service table and service dispatcher.
|
||||
**
|
||||
** This file was autogenerated on 8.5.2007 18:53:26.
|
||||
** DON'T MODIFY THIS FILE!
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <epan/packet.h>
|
||||
#include "opcua_identifiers.h"
|
||||
#include "opcua_serviceparser.h"
|
||||
|
||||
ParserEntry g_arParserTable[] = {
|
||||
/******************************************************************************
|
||||
** $Id$
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: Service table and service dispatcher.
|
||||
**
|
||||
** This file was autogenerated on 8.5.2007 18:53:26.
|
||||
** DON'T MODIFY THIS FILE!
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <epan/packet.h>
|
||||
#include "opcua_identifiers.h"
|
||||
#include "opcua_serviceparser.h"
|
||||
|
||||
ParserEntry g_arParserTable[] = {
|
||||
{ 1358, parseTestStackRequest },
|
||||
{ 1363, parseTestStackResponse },
|
||||
{ 1368, parseTestStackExRequest },
|
||||
|
@ -107,11 +107,11 @@ ParserEntry g_arParserTable[] = {
|
|||
{ 2080, parseTransferSubscriptionsResponse },
|
||||
{ 2085, parseDeleteSubscriptionsRequest },
|
||||
{ 2090, parseDeleteSubscriptionsResponse }
|
||||
|
||||
};
|
||||
const int g_NumServices = sizeof(g_arParserTable) / sizeof(ParserEntry);
|
||||
|
||||
/** Service type table */
|
||||
|
||||
};
|
||||
const int g_NumServices = sizeof(g_arParserTable) / sizeof(ParserEntry);
|
||||
|
||||
/** Service type table */
|
||||
const value_string g_requesttypes[] = {
|
||||
{ 1358, "TestStackRequest" },
|
||||
{ 1363, "TestStackResponse" },
|
||||
|
@ -188,22 +188,22 @@ const value_string g_requesttypes[] = {
|
|||
{ 2075, "TransferSubscriptionsRequest" },
|
||||
{ 2080, "TransferSubscriptionsResponse" },
|
||||
{ 2085, "DeleteSubscriptionsRequest" },
|
||||
{ 2090, "DeleteSubscriptionsResponse" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
/** Dispatch all services to a special parser function. */
|
||||
void dispatchService(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int ServiceId)
|
||||
{
|
||||
int index = 0;
|
||||
|
||||
while (index < g_NumServices)
|
||||
{
|
||||
if (g_arParserTable[index].iRequestId == ServiceId)
|
||||
{
|
||||
(*g_arParserTable[index].pParser)(tree, tvb, pOffset);
|
||||
break;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
}
|
||||
{ 2090, "DeleteSubscriptionsResponse" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
/** Dispatch all services to a special parser function. */
|
||||
void dispatchService(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int ServiceId)
|
||||
{
|
||||
int index = 0;
|
||||
|
||||
while (index < g_NumServices)
|
||||
{
|
||||
if (g_arParserTable[index].iRequestId == ServiceId)
|
||||
{
|
||||
(*g_arParserTable[index].pParser)(tree, tvb, pOffset);
|
||||
break;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,56 +1,56 @@
|
|||
/******************************************************************************
|
||||
** $Id: opcua_simpletypes.h,v 1.1 2007/02/08 11:26:55 gergap Exp $
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: Implementation of OpcUa built-in type parsers.
|
||||
** This contains all the simple types and some complex types.
|
||||
**
|
||||
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
** Last change by: $Author: gergap $
|
||||
**
|
||||
******************************************************************************/
|
||||
#include "opcua_identifiers.h"
|
||||
|
||||
/* simple types */
|
||||
void parseBoolean(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseByte(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseSByte(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseUInt16(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseInt16(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseUInt32(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseInt32(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseUInt64(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseInt64(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseString(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseGuid(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseByteString(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseXmlElement(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseFloat(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseDouble(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseDateTime(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseStatusCode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
/* complex types */
|
||||
void parseLocalizedText(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
void parseNodeId(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
void parseDiagnosticInfo(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
void parseExtensionObject(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
void parseQualifiedName(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
void parseDataValue(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
void parseVariant(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
void parseExpandedNodeId(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
void parseArraySimple(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex, fctSimpleTypeParser pParserFunction);
|
||||
void parseArrayEnum(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, fctEnumParser pParserFunction);
|
||||
void parseArrayComplex(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName, fctComplexTypeParser pParserFunction);
|
||||
void registerSimpleTypes(int proto);
|
||||
/******************************************************************************
|
||||
** $Id$
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: Implementation of OpcUa built-in type parsers.
|
||||
** This contains all the simple types and some complex types.
|
||||
**
|
||||
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
** Last change by: $Author: gergap $
|
||||
**
|
||||
******************************************************************************/
|
||||
#include "opcua_identifiers.h"
|
||||
|
||||
/* simple types */
|
||||
void parseBoolean(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseByte(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseSByte(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseUInt16(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseInt16(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseUInt32(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseInt32(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseUInt64(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseInt64(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseString(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseGuid(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseByteString(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseXmlElement(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseFloat(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseDouble(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseDateTime(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
void parseStatusCode(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex);
|
||||
/* complex types */
|
||||
void parseLocalizedText(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
void parseNodeId(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
void parseDiagnosticInfo(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
void parseExtensionObject(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
void parseQualifiedName(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
void parseDataValue(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
void parseVariant(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
void parseExpandedNodeId(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
void parseArraySimple(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int hfIndex, fctSimpleTypeParser pParserFunction);
|
||||
void parseArrayEnum(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, fctEnumParser pParserFunction);
|
||||
void parseArrayComplex(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName, fctComplexTypeParser pParserFunction);
|
||||
void registerSimpleTypes(int proto);
|
||||
|
|
|
@ -1,122 +1,122 @@
|
|||
/******************************************************************************
|
||||
** $Id: ua_application_layer.c,v 1.3 2007/02/08 11:31:56 gergap Exp $
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: OpcUa Application Layer Decoder.
|
||||
**
|
||||
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
** Last change by: $Author: gergap $
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <epan/packet.h>
|
||||
#include "opcua_simpletypes.h"
|
||||
|
||||
/** NodeId encoding mask table */
|
||||
static const value_string g_nodeidmasks[] = {
|
||||
{ 0, "Two byte encoded Numeric" },
|
||||
{ 1, "Four byte encoded Numeric" },
|
||||
{ 2, "Numeric of arbitrary length" },
|
||||
{ 3, "String" },
|
||||
{ 4, "URI" },
|
||||
{ 5, "GUID" },
|
||||
{ 6, "ByteString" },
|
||||
{ 0x80, "UriMask" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
/** Service type table */
|
||||
extern const value_string g_requesttypes[];
|
||||
|
||||
static int hf_opcua_nodeid_encodingmask = -1;
|
||||
static int hf_opcua_app_nsid = -1;
|
||||
static int hf_opcua_app_numeric = -1;
|
||||
|
||||
/** header field definitions */
|
||||
static hf_register_info hf[] =
|
||||
{
|
||||
{ &hf_opcua_nodeid_encodingmask,
|
||||
{ "NodeId EncodingMask", "application.nodeid.encodingmask", FT_UINT8, BASE_HEX, VALS(g_nodeidmasks), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_app_nsid,
|
||||
{ "NodeId EncodingMask", "application.nodeid.nsid", FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_app_numeric,
|
||||
{ "NodeId Identifier Numeric", "application.nodeid.numeric", FT_UINT32, BASE_DEC, VALS(g_requesttypes), 0x0, "", HFILL }
|
||||
}
|
||||
};
|
||||
|
||||
/** Register application layer types. */
|
||||
void registerApplicationLayerTypes(int proto)
|
||||
{
|
||||
proto_register_field_array(proto, hf, array_length(hf));
|
||||
}
|
||||
|
||||
/** Parses an OpcUa Service NodeId and returns the service type.
|
||||
* In this cases the NodeId is always from type numeric and NSId = 0.
|
||||
*/
|
||||
int parseServiceNodeId(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
|
||||
{
|
||||
gint iOffset = *pOffset;
|
||||
guint8 EncodingMask, NSId = 0;
|
||||
guint32 Numeric = 0;
|
||||
|
||||
szFieldName = 0; /* avoid warning */
|
||||
|
||||
EncodingMask = tvb_get_guint8(tvb, iOffset);
|
||||
proto_tree_add_item(tree, hf_opcua_nodeid_encodingmask, tvb, iOffset, 1, TRUE);
|
||||
iOffset++;
|
||||
|
||||
switch(EncodingMask)
|
||||
{
|
||||
case 0x00: /* two byte node id */
|
||||
Numeric = tvb_get_guint8(tvb, iOffset);
|
||||
proto_tree_add_item(tree, hf_opcua_app_numeric, tvb, iOffset, 1, TRUE);
|
||||
iOffset+=1;
|
||||
break;
|
||||
case 0x01: /* four byte node id */
|
||||
NSId = tvb_get_guint8(tvb, iOffset);
|
||||
proto_tree_add_item(tree, hf_opcua_app_nsid, tvb, iOffset, 1, TRUE);
|
||||
iOffset+=1;
|
||||
Numeric = tvb_get_letohs(tvb, iOffset);
|
||||
proto_tree_add_item(tree, hf_opcua_app_numeric, tvb, iOffset, 2, TRUE);
|
||||
iOffset+=2;
|
||||
break;
|
||||
case 0x02: /* numeric, that does not fit into four bytes */
|
||||
NSId = tvb_get_letohl(tvb, iOffset);
|
||||
proto_tree_add_item(tree, hf_opcua_app_nsid, tvb, iOffset, 4, TRUE);
|
||||
iOffset+=4;
|
||||
Numeric = tvb_get_letohl(tvb, iOffset);
|
||||
proto_tree_add_item(tree, hf_opcua_app_numeric, tvb, iOffset, 4, TRUE);
|
||||
iOffset+=4;
|
||||
break;
|
||||
case 0x03: /* string */
|
||||
case 0x04: /* uri */
|
||||
case 0x05: /* guid */
|
||||
case 0x06: /* byte string */
|
||||
/* NOT USED */
|
||||
break;
|
||||
};
|
||||
|
||||
*pOffset = iOffset;
|
||||
|
||||
return Numeric;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
** $Id$
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: OpcUa Application Layer Decoder.
|
||||
**
|
||||
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
** Last change by: $Author: gergap $
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <epan/packet.h>
|
||||
#include "opcua_simpletypes.h"
|
||||
|
||||
/** NodeId encoding mask table */
|
||||
static const value_string g_nodeidmasks[] = {
|
||||
{ 0, "Two byte encoded Numeric" },
|
||||
{ 1, "Four byte encoded Numeric" },
|
||||
{ 2, "Numeric of arbitrary length" },
|
||||
{ 3, "String" },
|
||||
{ 4, "URI" },
|
||||
{ 5, "GUID" },
|
||||
{ 6, "ByteString" },
|
||||
{ 0x80, "UriMask" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
/** Service type table */
|
||||
extern const value_string g_requesttypes[];
|
||||
|
||||
static int hf_opcua_nodeid_encodingmask = -1;
|
||||
static int hf_opcua_app_nsid = -1;
|
||||
static int hf_opcua_app_numeric = -1;
|
||||
|
||||
/** header field definitions */
|
||||
static hf_register_info hf[] =
|
||||
{
|
||||
{ &hf_opcua_nodeid_encodingmask,
|
||||
{ "NodeId EncodingMask", "application.nodeid.encodingmask", FT_UINT8, BASE_HEX, VALS(g_nodeidmasks), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_app_nsid,
|
||||
{ "NodeId EncodingMask", "application.nodeid.nsid", FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_app_numeric,
|
||||
{ "NodeId Identifier Numeric", "application.nodeid.numeric", FT_UINT32, BASE_DEC, VALS(g_requesttypes), 0x0, "", HFILL }
|
||||
}
|
||||
};
|
||||
|
||||
/** Register application layer types. */
|
||||
void registerApplicationLayerTypes(int proto)
|
||||
{
|
||||
proto_register_field_array(proto, hf, array_length(hf));
|
||||
}
|
||||
|
||||
/** Parses an OpcUa Service NodeId and returns the service type.
|
||||
* In this cases the NodeId is always from type numeric and NSId = 0.
|
||||
*/
|
||||
int parseServiceNodeId(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName)
|
||||
{
|
||||
gint iOffset = *pOffset;
|
||||
guint8 EncodingMask, NSId = 0;
|
||||
guint32 Numeric = 0;
|
||||
|
||||
szFieldName = 0; /* avoid warning */
|
||||
|
||||
EncodingMask = tvb_get_guint8(tvb, iOffset);
|
||||
proto_tree_add_item(tree, hf_opcua_nodeid_encodingmask, tvb, iOffset, 1, TRUE);
|
||||
iOffset++;
|
||||
|
||||
switch(EncodingMask)
|
||||
{
|
||||
case 0x00: /* two byte node id */
|
||||
Numeric = tvb_get_guint8(tvb, iOffset);
|
||||
proto_tree_add_item(tree, hf_opcua_app_numeric, tvb, iOffset, 1, TRUE);
|
||||
iOffset+=1;
|
||||
break;
|
||||
case 0x01: /* four byte node id */
|
||||
NSId = tvb_get_guint8(tvb, iOffset);
|
||||
proto_tree_add_item(tree, hf_opcua_app_nsid, tvb, iOffset, 1, TRUE);
|
||||
iOffset+=1;
|
||||
Numeric = tvb_get_letohs(tvb, iOffset);
|
||||
proto_tree_add_item(tree, hf_opcua_app_numeric, tvb, iOffset, 2, TRUE);
|
||||
iOffset+=2;
|
||||
break;
|
||||
case 0x02: /* numeric, that does not fit into four bytes */
|
||||
NSId = tvb_get_letohl(tvb, iOffset);
|
||||
proto_tree_add_item(tree, hf_opcua_app_nsid, tvb, iOffset, 4, TRUE);
|
||||
iOffset+=4;
|
||||
Numeric = tvb_get_letohl(tvb, iOffset);
|
||||
proto_tree_add_item(tree, hf_opcua_app_numeric, tvb, iOffset, 4, TRUE);
|
||||
iOffset+=4;
|
||||
break;
|
||||
case 0x03: /* string */
|
||||
case 0x04: /* uri */
|
||||
case 0x05: /* guid */
|
||||
case 0x06: /* byte string */
|
||||
/* NOT USED */
|
||||
break;
|
||||
};
|
||||
|
||||
*pOffset = iOffset;
|
||||
|
||||
return Numeric;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
/******************************************************************************
|
||||
** $Id: ua_application_layer.h,v 1.3 2007/02/08 12:19:58 gergap Exp $
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: OpcUa Application Layer Decoder.
|
||||
**
|
||||
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
** Last change by: $Author: gergap $
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
void registerApplicationLayerTypes(int proto);
|
||||
|
||||
/* Ua type parsers */
|
||||
int parseServiceNodeId(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
/******************************************************************************
|
||||
** $Id$
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: OpcUa Application Layer Decoder.
|
||||
**
|
||||
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
** Last change by: $Author: gergap $
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
void registerApplicationLayerTypes(int proto);
|
||||
|
||||
/* Ua type parsers */
|
||||
int parseServiceNodeId(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, char *szFieldName);
|
||||
|
|
|
@ -1,99 +1,99 @@
|
|||
/******************************************************************************
|
||||
** $Id: ua_security_layer.c,v 1.2 2007/02/08 12:16:59 gergap Exp $
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: OpcUa Security Layer Decoder.
|
||||
**
|
||||
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
** Last change by: $Author: gergap $
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <epan/packet.h>
|
||||
#include "ua_application_layer.h"
|
||||
#include "opcua_simpletypes.h"
|
||||
|
||||
/** NodeClass enum table */
|
||||
/******************************************************************************
|
||||
** $Id$
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: OpcUa Security Layer Decoder.
|
||||
**
|
||||
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
** Last change by: $Author: gergap $
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <epan/packet.h>
|
||||
#include "ua_application_layer.h"
|
||||
#include "opcua_simpletypes.h"
|
||||
|
||||
/** NodeClass enum table */
|
||||
static const value_string g_SecSigTable[] = {
|
||||
{ 0, "GetSecurityPolcies" },
|
||||
{ 1, "OpenSecureChannel" },
|
||||
{ 2, "CloseSecureChannel" },
|
||||
{ 3, "Message" },
|
||||
{ 3, "Message" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static int hf_opcua_SecuritySigEnum = -1;
|
||||
|
||||
static int hf_opcua_security_sig = -1;
|
||||
static int hf_opcua_security_policy = -1;
|
||||
static int hf_opcua_security_channel = -1;
|
||||
static int hf_opcua_security_token = -1;
|
||||
|
||||
static hf_register_info hf[] =
|
||||
{
|
||||
{ &hf_opcua_security_sig,
|
||||
{ "Security Signature", "security.sig", FT_UINT16, BASE_HEX, VALS(g_SecSigTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_security_policy,
|
||||
{ "Security Policy", "security.policy", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_security_channel,
|
||||
{ "Secure Channel Id", "security.channel", FT_GUID, BASE_NONE, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_security_token,
|
||||
{ "Security Token Id", "security.token", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }
|
||||
}
|
||||
};
|
||||
|
||||
/** Register security layer types. */
|
||||
void registerSecurityLayerTypes(int proto)
|
||||
{
|
||||
proto_register_field_array(proto, hf, array_length(hf));
|
||||
}
|
||||
|
||||
|
||||
/* Security Layer: message parsers
|
||||
* Only works for Security Policy "NoSecurity" at the moment.
|
||||
*/
|
||||
void parseSecurityLayer(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
guint16 Sig;
|
||||
|
||||
Sig = tvb_get_letohs(tvb, pOffset[0]);
|
||||
proto_tree_add_item(tree, hf_opcua_security_sig, tvb, *pOffset, 2, TRUE); *pOffset+=2;
|
||||
|
||||
switch (Sig)
|
||||
{
|
||||
case 0: /* GetSecurityPolicies */
|
||||
break;
|
||||
case 1: /* OpenSecureChannel */
|
||||
parseGuid(tree, tvb, pOffset, hf_opcua_security_channel);
|
||||
parseString(tree, tvb, pOffset, hf_opcua_security_policy);
|
||||
break;
|
||||
case 2: /* CloseSecureChannel */
|
||||
parseGuid(tree, tvb, pOffset, hf_opcua_security_channel);
|
||||
parseString(tree, tvb, pOffset, hf_opcua_security_token);
|
||||
break;
|
||||
case 3: /* Other Services Messages */
|
||||
parseGuid(tree, tvb, pOffset, hf_opcua_security_channel);
|
||||
parseString(tree, tvb, pOffset, hf_opcua_security_token);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
static int hf_opcua_SecuritySigEnum = -1;
|
||||
|
||||
static int hf_opcua_security_sig = -1;
|
||||
static int hf_opcua_security_policy = -1;
|
||||
static int hf_opcua_security_channel = -1;
|
||||
static int hf_opcua_security_token = -1;
|
||||
|
||||
static hf_register_info hf[] =
|
||||
{
|
||||
{ &hf_opcua_security_sig,
|
||||
{ "Security Signature", "security.sig", FT_UINT16, BASE_HEX, VALS(g_SecSigTable), 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_security_policy,
|
||||
{ "Security Policy", "security.policy", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_security_channel,
|
||||
{ "Secure Channel Id", "security.channel", FT_GUID, BASE_NONE, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_security_token,
|
||||
{ "Security Token Id", "security.token", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }
|
||||
}
|
||||
};
|
||||
|
||||
/** Register security layer types. */
|
||||
void registerSecurityLayerTypes(int proto)
|
||||
{
|
||||
proto_register_field_array(proto, hf, array_length(hf));
|
||||
}
|
||||
|
||||
|
||||
/* Security Layer: message parsers
|
||||
* Only works for Security Policy "NoSecurity" at the moment.
|
||||
*/
|
||||
void parseSecurityLayer(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
guint16 Sig;
|
||||
|
||||
Sig = tvb_get_letohs(tvb, pOffset[0]);
|
||||
proto_tree_add_item(tree, hf_opcua_security_sig, tvb, *pOffset, 2, TRUE); *pOffset+=2;
|
||||
|
||||
switch (Sig)
|
||||
{
|
||||
case 0: /* GetSecurityPolicies */
|
||||
break;
|
||||
case 1: /* OpenSecureChannel */
|
||||
parseGuid(tree, tvb, pOffset, hf_opcua_security_channel);
|
||||
parseString(tree, tvb, pOffset, hf_opcua_security_policy);
|
||||
break;
|
||||
case 2: /* CloseSecureChannel */
|
||||
parseGuid(tree, tvb, pOffset, hf_opcua_security_channel);
|
||||
parseString(tree, tvb, pOffset, hf_opcua_security_token);
|
||||
break;
|
||||
case 3: /* Other Services Messages */
|
||||
parseGuid(tree, tvb, pOffset, hf_opcua_security_channel);
|
||||
parseString(tree, tvb, pOffset, hf_opcua_security_token);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,25 +1,25 @@
|
|||
/******************************************************************************
|
||||
** $Id: ua_security_layer.h,v 1.2 2007/02/08 12:19:58 gergap Exp $
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: OpcUa Security Layer Decoder.
|
||||
**
|
||||
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
** Last change by: $Author: gergap $
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
void registerSecurityLayerTypes(int proto);
|
||||
void parseSecurityLayer(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
/******************************************************************************
|
||||
** $Id$
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: OpcUa Security Layer Decoder.
|
||||
**
|
||||
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
** Last change by: $Author: gergap $
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
void registerSecurityLayerTypes(int proto);
|
||||
void parseSecurityLayer(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
|
|
|
@ -1,211 +1,211 @@
|
|||
/******************************************************************************
|
||||
** $Id: ua_transport_layer.c,v 1.3 2007/02/08 12:17:50 gergap Exp $
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: OpcUa Transport Layer Decoder.
|
||||
**
|
||||
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
** Last change by: $Author: gergap $
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <epan/packet.h>
|
||||
#include "ua_security_layer.h"
|
||||
#include "ua_application_layer.h"
|
||||
#include "opcua_simpletypes.h"
|
||||
#include <string.h>
|
||||
#include <epan/emem.h>
|
||||
|
||||
void dispatchService(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int ServiceId);
|
||||
|
||||
static int hf_opcua_transport_sig = -1;
|
||||
static int hf_opcua_transport_len = -1;
|
||||
static int hf_opcua_transport_ver = -1;
|
||||
static int hf_opcua_transport_cid = -1;
|
||||
static int hf_opcua_transport_lifetime = -1;
|
||||
static int hf_opcua_transport_sbl = -1;
|
||||
static int hf_opcua_transport_rbl = -1;
|
||||
static int hf_opcua_transport_endpoint = -1;
|
||||
static int hf_opcua_transport_rlifetime = -1;
|
||||
static int hf_opcua_transport_rsbl = -1;
|
||||
static int hf_opcua_transport_rrbl = -1;
|
||||
static int hf_opcua_transport_altendpoint = -1;
|
||||
static int hf_opcua_transport_rqid = -1;
|
||||
static int hf_opcua_transport_status = -1;
|
||||
extern gint ett_opcua_nodeid;
|
||||
|
||||
static hf_register_info hf[] =
|
||||
{
|
||||
{ &hf_opcua_transport_sig,
|
||||
/* full name , abbreviation , type , display , strings, bitmask, blurb, id, parent, ref_count, bitshift */
|
||||
{ "Signature", "transport.sig", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_len,
|
||||
{ "Message Length", "transport.len", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_ver,
|
||||
{ "Version", "transport.ver", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_cid,
|
||||
{ "ConnectionId", "transport.cid", FT_GUID, BASE_NONE, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_lifetime,
|
||||
{ "Lifetime", "transport.lifetime", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_sbl,
|
||||
{ "SendBufferLength", "transport.sbl", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_rbl,
|
||||
{ "ReceiveBufferLength", "transport.rbl", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_endpoint,
|
||||
{ "EndPoint", "transport.endpoint", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_rlifetime,
|
||||
{ "Revised Lifetime", "transport.rlifetime", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_rsbl,
|
||||
{ "Revised SendBufferLength", "transport.rsbl", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_rrbl,
|
||||
{ "Revised ReceiveBufferLength", "transport.rrbl", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_altendpoint,
|
||||
{ "Alternate EndPoint", "transport.altendpoint", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_rqid,
|
||||
{ "RequestId", "transport.rqid", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_status,
|
||||
{ "StatusCode", "transport.status", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
}
|
||||
};
|
||||
|
||||
/** subtree types */
|
||||
extern gint ett_opcua_extensionobject;
|
||||
|
||||
/** Register transport layer types. */
|
||||
void registerTransportLayerTypes(int proto)
|
||||
{
|
||||
proto_register_field_array(proto, hf, array_length(hf));
|
||||
}
|
||||
|
||||
/** helper functions for adding strings,
|
||||
* that are not zero terminated.
|
||||
*/
|
||||
void addString(proto_tree *tree,
|
||||
int hfindex,
|
||||
tvbuff_t *tvb,
|
||||
gint start,
|
||||
gint length,
|
||||
const char *value)
|
||||
{
|
||||
char *szValue = ep_alloc(256);
|
||||
|
||||
if (szValue)
|
||||
{
|
||||
if (length > 255) length = 255;
|
||||
/* copy non null terminated string data */
|
||||
strncpy(szValue, value, length);
|
||||
/* set null terminator */
|
||||
szValue[length] = 0;
|
||||
|
||||
proto_tree_add_string(tree, hfindex, tvb, start, length, szValue);
|
||||
}
|
||||
}
|
||||
|
||||
/* Transport Layer: message parsers */
|
||||
void parseHello(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
addString(tree, hf_opcua_transport_sig, tvb, *pOffset, 4, tvb->real_data); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_len, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_ver, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_cid, tvb, *pOffset, 16, TRUE); *pOffset+=16;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_lifetime, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_sbl, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_rbl, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
parseString(tree, tvb, pOffset, hf_opcua_transport_endpoint);
|
||||
}
|
||||
|
||||
void parseAcknowledge(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
addString(tree, hf_opcua_transport_sig, tvb, *pOffset, 4, tvb->real_data); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_len, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_cid, tvb, *pOffset, 16, TRUE); *pOffset+=16;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_rlifetime, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_rsbl, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_rrbl, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
parseString(tree, tvb, pOffset, hf_opcua_transport_altendpoint);
|
||||
}
|
||||
|
||||
void parseDisconnect(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
addString(tree, hf_opcua_transport_sig, tvb, *pOffset, 4, tvb->real_data); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_len, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_cid, tvb, *pOffset, 16, TRUE); *pOffset+=16;
|
||||
}
|
||||
|
||||
void parseData(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_item *ti;
|
||||
proto_tree *encobj_tree;
|
||||
proto_tree *nodeid_tree;
|
||||
int ServiceId = 0;
|
||||
|
||||
addString(tree, hf_opcua_transport_sig, tvb, *pOffset, 4, tvb->real_data); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_len, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_cid, tvb, *pOffset, 16, TRUE); *pOffset+=16;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_rqid, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
|
||||
/* message data contains the security layer */
|
||||
parseSecurityLayer(tree, tvb, pOffset);
|
||||
|
||||
/* AT THE MOMENT NO SECURITY IS IMPLEMENTED IN UA.
|
||||
* WE CAN JUST JUMP INTO THE APPLICATION LAYER DATA.
|
||||
* THIS WILL CHAHNGE IN THE FUTURE. */
|
||||
|
||||
/* add encodeable object subtree */
|
||||
ti = proto_tree_add_text(tree, tvb, 0, -1, "Message : Encodeable Object");
|
||||
encobj_tree = proto_item_add_subtree(ti, ett_opcua_extensionobject);
|
||||
|
||||
/* add nodeid subtree */
|
||||
ti = proto_tree_add_text(encobj_tree, tvb, 0, -1, "TypeId : ExpandedNodeId");
|
||||
nodeid_tree = proto_item_add_subtree(ti, ett_opcua_nodeid);
|
||||
ServiceId = parseServiceNodeId(nodeid_tree, tvb, pOffset, "NodeId") - 1;
|
||||
|
||||
dispatchService(encobj_tree, tvb, pOffset, ServiceId);
|
||||
}
|
||||
|
||||
void parseAbort(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
addString(tree, hf_opcua_transport_sig, tvb, *pOffset, 4, tvb->real_data); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_len, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_cid, tvb, *pOffset, 16, TRUE); *pOffset+=16;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_rqid, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
void parseError(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
addString(tree, hf_opcua_transport_sig, tvb, *pOffset, 4, tvb->real_data); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_len, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_cid, tvb, *pOffset, 16, TRUE); *pOffset+=16;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_rqid, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_status, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
/******************************************************************************
|
||||
** $Id$
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: OpcUa Transport Layer Decoder.
|
||||
**
|
||||
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
** Last change by: $Author: gergap $
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <gmodule.h>
|
||||
#include <epan/packet.h>
|
||||
#include "ua_security_layer.h"
|
||||
#include "ua_application_layer.h"
|
||||
#include "opcua_simpletypes.h"
|
||||
#include <string.h>
|
||||
#include <epan/emem.h>
|
||||
|
||||
void dispatchService(proto_tree *tree, tvbuff_t *tvb, gint *pOffset, int ServiceId);
|
||||
|
||||
static int hf_opcua_transport_sig = -1;
|
||||
static int hf_opcua_transport_len = -1;
|
||||
static int hf_opcua_transport_ver = -1;
|
||||
static int hf_opcua_transport_cid = -1;
|
||||
static int hf_opcua_transport_lifetime = -1;
|
||||
static int hf_opcua_transport_sbl = -1;
|
||||
static int hf_opcua_transport_rbl = -1;
|
||||
static int hf_opcua_transport_endpoint = -1;
|
||||
static int hf_opcua_transport_rlifetime = -1;
|
||||
static int hf_opcua_transport_rsbl = -1;
|
||||
static int hf_opcua_transport_rrbl = -1;
|
||||
static int hf_opcua_transport_altendpoint = -1;
|
||||
static int hf_opcua_transport_rqid = -1;
|
||||
static int hf_opcua_transport_status = -1;
|
||||
extern gint ett_opcua_nodeid;
|
||||
|
||||
static hf_register_info hf[] =
|
||||
{
|
||||
{ &hf_opcua_transport_sig,
|
||||
/* full name , abbreviation , type , display , strings, bitmask, blurb, id, parent, ref_count, bitshift */
|
||||
{ "Signature", "transport.sig", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_len,
|
||||
{ "Message Length", "transport.len", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_ver,
|
||||
{ "Version", "transport.ver", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_cid,
|
||||
{ "ConnectionId", "transport.cid", FT_GUID, BASE_NONE, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_lifetime,
|
||||
{ "Lifetime", "transport.lifetime", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_sbl,
|
||||
{ "SendBufferLength", "transport.sbl", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_rbl,
|
||||
{ "ReceiveBufferLength", "transport.rbl", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_endpoint,
|
||||
{ "EndPoint", "transport.endpoint", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_rlifetime,
|
||||
{ "Revised Lifetime", "transport.rlifetime", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_rsbl,
|
||||
{ "Revised SendBufferLength", "transport.rsbl", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_rrbl,
|
||||
{ "Revised ReceiveBufferLength", "transport.rrbl", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_altendpoint,
|
||||
{ "Alternate EndPoint", "transport.altendpoint", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_rqid,
|
||||
{ "RequestId", "transport.rqid", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
},
|
||||
{ &hf_opcua_transport_status,
|
||||
{ "StatusCode", "transport.status", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }
|
||||
}
|
||||
};
|
||||
|
||||
/** subtree types */
|
||||
extern gint ett_opcua_extensionobject;
|
||||
|
||||
/** Register transport layer types. */
|
||||
void registerTransportLayerTypes(int proto)
|
||||
{
|
||||
proto_register_field_array(proto, hf, array_length(hf));
|
||||
}
|
||||
|
||||
/** helper functions for adding strings,
|
||||
* that are not zero terminated.
|
||||
*/
|
||||
void addString(proto_tree *tree,
|
||||
int hfindex,
|
||||
tvbuff_t *tvb,
|
||||
gint start,
|
||||
gint length,
|
||||
const char *value)
|
||||
{
|
||||
char *szValue = ep_alloc(256);
|
||||
|
||||
if (szValue)
|
||||
{
|
||||
if (length > 255) length = 255;
|
||||
/* copy non null terminated string data */
|
||||
strncpy(szValue, value, length);
|
||||
/* set null terminator */
|
||||
szValue[length] = 0;
|
||||
|
||||
proto_tree_add_string(tree, hfindex, tvb, start, length, szValue);
|
||||
}
|
||||
}
|
||||
|
||||
/* Transport Layer: message parsers */
|
||||
void parseHello(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
addString(tree, hf_opcua_transport_sig, tvb, *pOffset, 4, tvb->real_data); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_len, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_ver, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_cid, tvb, *pOffset, 16, TRUE); *pOffset+=16;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_lifetime, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_sbl, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_rbl, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
parseString(tree, tvb, pOffset, hf_opcua_transport_endpoint);
|
||||
}
|
||||
|
||||
void parseAcknowledge(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
addString(tree, hf_opcua_transport_sig, tvb, *pOffset, 4, tvb->real_data); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_len, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_cid, tvb, *pOffset, 16, TRUE); *pOffset+=16;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_rlifetime, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_rsbl, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_rrbl, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
parseString(tree, tvb, pOffset, hf_opcua_transport_altendpoint);
|
||||
}
|
||||
|
||||
void parseDisconnect(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
addString(tree, hf_opcua_transport_sig, tvb, *pOffset, 4, tvb->real_data); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_len, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_cid, tvb, *pOffset, 16, TRUE); *pOffset+=16;
|
||||
}
|
||||
|
||||
void parseData(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
proto_item *ti;
|
||||
proto_tree *encobj_tree;
|
||||
proto_tree *nodeid_tree;
|
||||
int ServiceId = 0;
|
||||
|
||||
addString(tree, hf_opcua_transport_sig, tvb, *pOffset, 4, tvb->real_data); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_len, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_cid, tvb, *pOffset, 16, TRUE); *pOffset+=16;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_rqid, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
|
||||
/* message data contains the security layer */
|
||||
parseSecurityLayer(tree, tvb, pOffset);
|
||||
|
||||
/* AT THE MOMENT NO SECURITY IS IMPLEMENTED IN UA.
|
||||
* WE CAN JUST JUMP INTO THE APPLICATION LAYER DATA.
|
||||
* THIS WILL CHAHNGE IN THE FUTURE. */
|
||||
|
||||
/* add encodeable object subtree */
|
||||
ti = proto_tree_add_text(tree, tvb, 0, -1, "Message : Encodeable Object");
|
||||
encobj_tree = proto_item_add_subtree(ti, ett_opcua_extensionobject);
|
||||
|
||||
/* add nodeid subtree */
|
||||
ti = proto_tree_add_text(encobj_tree, tvb, 0, -1, "TypeId : ExpandedNodeId");
|
||||
nodeid_tree = proto_item_add_subtree(ti, ett_opcua_nodeid);
|
||||
ServiceId = parseServiceNodeId(nodeid_tree, tvb, pOffset, "NodeId") - 1;
|
||||
|
||||
dispatchService(encobj_tree, tvb, pOffset, ServiceId);
|
||||
}
|
||||
|
||||
void parseAbort(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
addString(tree, hf_opcua_transport_sig, tvb, *pOffset, 4, tvb->real_data); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_len, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_cid, tvb, *pOffset, 16, TRUE); *pOffset+=16;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_rqid, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
||||
void parseError(proto_tree *tree, tvbuff_t *tvb, gint *pOffset)
|
||||
{
|
||||
addString(tree, hf_opcua_transport_sig, tvb, *pOffset, 4, tvb->real_data); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_len, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_cid, tvb, *pOffset, 16, TRUE); *pOffset+=16;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_rqid, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
proto_tree_add_item(tree, hf_opcua_transport_status, tvb, *pOffset, 4, TRUE); *pOffset+=4;
|
||||
}
|
||||
|
|
|
@ -1,32 +1,32 @@
|
|||
/******************************************************************************
|
||||
** $Id: ua_transport_layer.h,v 1.3 2007/02/08 12:19:58 gergap Exp $
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: OpcUa Transport Layer Decoder.
|
||||
**
|
||||
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
** Last change by: $Author: gergap $
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
/* Transport Layer: message parsers */
|
||||
void parseHello(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
void parseAcknowledge(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
void parseDisconnect(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
void parseData(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
void parseAbort(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
void parseError(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
void registerTransportLayerTypes(int proto);
|
||||
|
||||
/******************************************************************************
|
||||
** $Id$
|
||||
**
|
||||
** Copyright (C) 2006-2007 ascolab GmbH. All Rights Reserved.
|
||||
** Web: http://www.ascolab.com
|
||||
**
|
||||
** 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 file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
**
|
||||
** Project: OpcUa Wireshark Plugin
|
||||
**
|
||||
** Description: OpcUa Transport Layer Decoder.
|
||||
**
|
||||
** Author: Gerhard Gappmeier <gerhard.gappmeier@ascolab.com>
|
||||
** Last change by: $Author: gergap $
|
||||
**
|
||||
******************************************************************************/
|
||||
|
||||
/* Transport Layer: message parsers */
|
||||
void parseHello(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
void parseAcknowledge(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
void parseDisconnect(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
void parseData(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
void parseAbort(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
void parseError(proto_tree *tree, tvbuff_t *tvb, gint *pOffset);
|
||||
void registerTransportLayerTypes(int proto);
|
||||
|
||||
|
|
Loading…
Reference in New Issue