<refentry id="libnetdude-libnd-packet-iterator">
<refmeta>
<refentrytitle id="top_of_page">libnd_packet_iterator</refentrytitle>
<manvolnum>3</manvolnum>
<refmiscinfo>LIBNETDUDE Library</refmiscinfo>
</refmeta>

<refnamediv>
<refname>libnd_packet_iterator</refname>
<refpurpose></refpurpose>
<!--[<xref linkend="desc" endterm="desc.title"/>]-->
</refnamediv>

<refsynopsisdiv id="synopsis">
<title id="synopsis.title">Synopsis</title>

<synopsis>



enum        <link linkend="LND-PacketIteratorMode">LND_PacketIteratorMode</link>;
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-pit-init">libnd_pit_init</link>                  (<link linkend="LND-PacketIterator">LND_PacketIterator</link> *pit,
                                             <link linkend="LND-Trace">LND_Trace</link> *trace);
<link linkend="gboolean">gboolean</link>    <link linkend="libnd-pit-init-mode">libnd_pit_init_mode</link>             (<link linkend="LND-PacketIterator">LND_PacketIterator</link> *pit,
                                             <link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-PacketIteratorMode">LND_PacketIteratorMode</link> mode);
<link linkend="void">void</link>        <link linkend="libnd-pit-cleanup">libnd_pit_cleanup</link>               (<link linkend="LND-PacketIterator">LND_PacketIterator</link> *pit);
<link linkend="LND-Packet">LND_Packet</link>* <link linkend="libnd-pit-get">libnd_pit_get</link>                   (<link linkend="LND-PacketIterator">LND_PacketIterator</link> *pit);
<link linkend="LND-Packet">LND_Packet</link>* <link linkend="libnd-pit-next">libnd_pit_next</link>                  (<link linkend="LND-PacketIterator">LND_PacketIterator</link> *pit);
<link linkend="guint64">guint64</link>     <link linkend="libnd-pit-get-count">libnd_pit_get_count</link>             (<link linkend="LND-PacketIterator">LND_PacketIterator</link> *pit);
<link linkend="void">void</link>        <link linkend="libnd-pit-skip-filtered">libnd_pit_skip_filtered</link>         (<link linkend="LND-PacketIterator">LND_PacketIterator</link> *pit,
                                             <link linkend="gboolean">gboolean</link> skip_filtered);
<link linkend="void">void</link>        <link linkend="libnd-pit-drop-current">libnd_pit_drop_current</link>          (<link linkend="LND-PacketIterator">LND_PacketIterator</link> *pit);
<link linkend="LND-PacketIteratorObserver">LND_PacketIteratorObserver</link>* <link linkend="libnd-pit-observer-new">libnd_pit_observer_new</link>
                                            (void);
<link linkend="void">void</link>        <link linkend="libnd-pit-observer-free">libnd_pit_observer_free</link>         (<link linkend="LND-PacketIteratorObserver">LND_PacketIteratorObserver</link> *ob);
<link linkend="void">void</link>        <link linkend="libnd-pit-add-observer">libnd_pit_add_observer</link>          (<link linkend="LND-PacketIteratorObserver">LND_PacketIteratorObserver</link> *ob);
<link linkend="void">void</link>        <link linkend="libnd-pit-del-observer">libnd_pit_del_observer</link>          (<link linkend="LND-PacketIteratorObserver">LND_PacketIteratorObserver</link> *ob);
</synopsis>
</refsynopsisdiv>









<refsect1 id="desc">
<title id="desc.title">Description</title>
<para>

</para>
</refsect1>

<refsect1 id="details">
<title id="details.title">Details</title>
<refsect2>
<title><anchor id="LND-PacketIteratorMode" role="enum">enum LND_PacketIteratorMode</title>
<indexterm><primary>LND_PacketIteratorMode</primary></indexterm><programlisting>typedef enum {

  /* Iterate over selected packets only, in read-only or
   * read-write mode.
   */
  LND_PACKET_IT_SEL_R,
  LND_PACKET_IT_SEL_RW,

  /* Iterate over all packets in currently loaded
   * trace part, read-only or read-write.
   */
  LND_PACKET_IT_PART_R,
  LND_PACKET_IT_PART_RW,
  
  /* Iterate over an area in the trace, starting at
   * currently loaded part and going arbitrarily far.
   * Comes in read-only and read-write flavours.
   */
  LND_PACKET_IT_AREA_R,
  LND_PACKET_IT_AREA_RW,

} LND_PacketIteratorMode;
</programlisting>
<para>

</para></refsect2>
<refsect2>
<title><anchor id="libnd-pit-init" role="function">libnd_pit_init ()</title>
<indexterm><primary>libnd_pit_init</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_pit_init                  (<link linkend="LND-PacketIterator">LND_PacketIterator</link> *pit,
                                             <link linkend="LND-Trace">LND_Trace</link> *trace);</programlisting>
<para>
Initializes the packet iterator pointed to by <parameter>pit</parameter> to
the iterator mode and possibly the trace area (if the
trace's iterator mode is one of the area iterator modes)
currently used by <parameter>trace</parameter>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>pit</parameter>&nbsp;:</term>
<listitem><simpara> iterator to initialize.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> trace whose packets are to be iterated.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> when iterator initialization was
successful, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> otherwise.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-pit-init-mode" role="function">libnd_pit_init_mode ()</title>
<indexterm><primary>libnd_pit_init_mode</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link>    libnd_pit_init_mode             (<link linkend="LND-PacketIterator">LND_PacketIterator</link> *pit,
                                             <link linkend="LND-Trace">LND_Trace</link> *trace,
                                             <link linkend="LND-PacketIteratorMode">LND_PacketIteratorMode</link> mode);</programlisting>
<para>
The function prepares <parameter>pit</parameter> to iterate over <parameter>trace</parameter> using <parameter>mode</parameter>.
If the mode is a trace area iterator, the trace's current
trace area is used.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>pit</parameter>&nbsp;:</term>
<listitem><simpara> packet iterator to initialize.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>trace</parameter>&nbsp;:</term>
<listitem><simpara> the trace that will be iterated over.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>mode</parameter>&nbsp;:</term>
<listitem><simpara> the mode to use for iteration.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> <link linkend="TRUE:CAPS"><literal>TRUE</literal></link> when iterator initialization was
successful, <link linkend="FALSE:CAPS"><literal>FALSE</literal></link> otherwise.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-pit-cleanup" role="function">libnd_pit_cleanup ()</title>
<indexterm><primary>libnd_pit_cleanup</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_pit_cleanup               (<link linkend="LND-PacketIterator">LND_PacketIterator</link> *pit);</programlisting>
<para>
This function releases any state created by <parameter>pit</parameter>. It does not free
<parameter>pit</parameter> itself, as packet iterators are conveniently used from the function
call stack. You *must* call this function if you abort an iteration
prematurely, that is, if you don't just break out of a for-loop when
<link linkend="libnd-pit-get"><function>libnd_pit_get()</function></link> returns <link linkend="NULL:CAPS"><literal>NULL</literal></link>. In this and only in this case is the
cleanup performed automatically.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>pit</parameter>&nbsp;:</term>
<listitem><simpara> iterator to clean up.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-pit-get" role="function">libnd_pit_get ()</title>
<indexterm><primary>libnd_pit_get</primary></indexterm><programlisting><link linkend="LND-Packet">LND_Packet</link>* libnd_pit_get                   (<link linkend="LND-PacketIterator">LND_PacketIterator</link> *pit);</programlisting>
<para>
Accessor function, returns the packet the iterator currently
points to.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>pit</parameter>&nbsp;:</term>
<listitem><simpara> iterator to retrieve current packet from.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> currently iterated packet.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-pit-next" role="function">libnd_pit_next ()</title>
<indexterm><primary>libnd_pit_next</primary></indexterm><programlisting><link linkend="LND-Packet">LND_Packet</link>* libnd_pit_next                  (<link linkend="LND-PacketIterator">LND_PacketIterator</link> *pit);</programlisting>
<para>
This function advances the iterator, and returns that packet. If there are
no more packets, <link linkend="NULL:CAPS"><literal>NULL</literal></link> is returned. Upon advancing the iterator,
the progressbar and the packet's tcpdump line automatically
get updated.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>pit</parameter>&nbsp;:</term>
<listitem><simpara> iterator to advance
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> next packet.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-pit-get-count" role="function">libnd_pit_get_count ()</title>
<indexterm><primary>libnd_pit_get_count</primary></indexterm><programlisting><link linkend="guint64">guint64</link>     libnd_pit_get_count             (<link linkend="LND-PacketIterator">LND_PacketIterator</link> *pit);</programlisting>
<para>
</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>pit</parameter>&nbsp;:</term>
<listitem><simpara> iterator to get current count from.
</simpara></listitem></varlistentry>
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> the number of packets iterated using <parameter>pit</parameter>.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-pit-skip-filtered" role="function">libnd_pit_skip_filtered ()</title>
<indexterm><primary>libnd_pit_skip_filtered</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_pit_skip_filtered         (<link linkend="LND-PacketIterator">LND_PacketIterator</link> *pit,
                                             <link linkend="gboolean">gboolean</link> skip_filtered);</programlisting>
<para>
The function enables or disables skipping of filtered packets for
the given iterator. By default, filtered packets are skipped!</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>pit</parameter>&nbsp;:</term>
<listitem><simpara> iterator to adjust.
</simpara></listitem></varlistentry>
<varlistentry><term><parameter>skip_filtered</parameter>&nbsp;:</term>
<listitem><simpara> whether to skip or not.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-pit-drop-current" role="function">libnd_pit_drop_current ()</title>
<indexterm><primary>libnd_pit_drop_current</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_pit_drop_current          (<link linkend="LND-PacketIterator">LND_PacketIterator</link> *pit);</programlisting>
<para>
This function only makes sense in iteration mode LND_PACKET_IT_AREA_RW.
Calling it during iteration causes the current packet not to be written
out. This only applies to the current packet -- the corresponding flag
is reset in every iteration.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>pit</parameter>&nbsp;:</term>
<listitem><simpara> packet iterator.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-pit-observer-new" role="function">libnd_pit_observer_new ()</title>
<indexterm><primary>libnd_pit_observer_new</primary></indexterm><programlisting><link linkend="LND-PacketIteratorObserver">LND_PacketIteratorObserver</link>* libnd_pit_observer_new
                                            (void);</programlisting>
<para>
The function allocates a new, empty iterator observer. You should
then fill in callbacks for the events you're interested in,
and register it using <link linkend="libnd-pit-add-observer"><function>libnd_pit_add_observer()</function></link>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><emphasis>Returns</emphasis>&nbsp;:</term><listitem><simpara> new observer.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-pit-observer-free" role="function">libnd_pit_observer_free ()</title>
<indexterm><primary>libnd_pit_observer_free</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_pit_observer_free         (<link linkend="LND-PacketIteratorObserver">LND_PacketIteratorObserver</link> *ob);</programlisting>
<para>
The function releases all memory associated with <parameter>ob</parameter>.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>ob</parameter>&nbsp;:</term>
<listitem><simpara> observer to delete.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-pit-add-observer" role="function">libnd_pit_add_observer ()</title>
<indexterm><primary>libnd_pit_add_observer</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_pit_add_observer          (<link linkend="LND-PacketIteratorObserver">LND_PacketIteratorObserver</link> *ob);</programlisting>
<para>
The function registers the new observer for notifications about
future iterations.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>ob</parameter>&nbsp;:</term>
<listitem><simpara> new observer to register.
</simpara></listitem></varlistentry>
</variablelist></refsect2>
<refsect2>
<title><anchor id="libnd-pit-del-observer" role="function">libnd_pit_del_observer ()</title>
<indexterm><primary>libnd_pit_del_observer</primary></indexterm><programlisting><link linkend="void">void</link>        libnd_pit_del_observer          (<link linkend="LND-PacketIteratorObserver">LND_PacketIteratorObserver</link> *ob);</programlisting>
<para>
The function stops iterator operations from being reported to
<parameter>ob</parameter>. It does not release <parameter>ob</parameter>'s memory, use <link linkend="libnd-pit-observer-free"><function>libnd_pit_observer_free()</function></link>
for that.</para>
<para>

</para><variablelist role="params">
<varlistentry><term><parameter>ob</parameter>&nbsp;:</term>
<listitem><simpara> observer to drop.
</simpara></listitem></varlistentry>
</variablelist></refsect2>

</refsect1>




</refentry>
