<!-- Module Developer's Guide -->

<chapter>
    <chapterinfo>
	<revhistory>
	    <revision>
		<revnumber>$Revision: 1.2 $</revnumber>
		<date>$Date: 2004/08/24 09:00:45 $</date>
	    </revision>
	</revhistory>
    </chapterinfo>
    <title>Developer's Guide</title>
    <para>
	The module does not provide any sort of <acronym>API</acronym> to use in other &ser; modules.	
    </para>
    <section>
	<title>Defines</title>
	<itemizedlist>
	    <listitem>
		<para>
		    ACK_TAG enables stricter matching of acknowledgments including to-tags. Without
		    it, to-tags are ignored. It is disabled by default for two reasons: 
		</para>
		<itemizedlist>
		    <listitem>
			<para>
			    It eliminates an unlikely race condition in which transaction's to-tag
			    is being rewritten by a 200 OK whereas an ACK is being looked up by
			    to-tag.
			</para>
		    </listitem>
		</itemizedlist>
		<itemizedlist>
		    <listitem>
			<para>
			    It makes &uac;s happy who set wrong to-tags.
			</para>
		    </listitem>
		</itemizedlist>
		<para>
		    It should not make a difference, as there may be only one
		    negative reply sent upstream and 200/ACKs are not matched
		    as they constitute another transaction. It will make no
		    difference at all when the new magic cookie matching is
		    enabled anyway.
		</para>
	    </listitem>
	    <listitem>
		<para>
		    CANCEL_TAG similarly enables strict matching of CANCELs 
		    including to-tags--act of mercy to &uac;s, who screw up
		    the to-tags (however, it still depends on how forgiving
		    the downstream UAS is). Like with ACK_TAG, all this
		    complex transactions matching goes with &rfc3261;'s
		    magic cookie away anyway.
		</para>
	    </listitem>
	</itemizedlist>
    </section>
    <section>
	<title>Functions</title>
	<section>
	    <title>
		<function moreinfo="none">register_tmcb(cb_type, cb_func)</function>
	    </title>
	    <para>
		For programmatic use only--register a function to be called back on an event. See
		t_hooks.h for more details.
	    </para>
	    <para>Meaning of the parameters is as follows:</para>
	    <itemizedlist>
		<listitem>
		    <para><emphasis>cb_type</emphasis> - Callback type.
		    </para>
		</listitem>
		<listitem>
		    <para><emphasis>cb_func</emphasis> - Callback function.
		    </para>
		</listitem>
	    </itemizedlist>
	</section>

	<section>
	    <title>
		<function moreinfo="none">load_tm(*import_structure)</function>
	    </title>
	    <para>
		For programmatic use only--import exported <acronym>TM</acronym> functions.
		See the acc module for an example of use.
	    </para>
	    <para>Meaning of the parameters is as follows:</para>
	    <itemizedlist>
		<listitem>
		    <para><emphasis>import_structure</emphasis> - Pointer to the import structure.
		    </para>
		</listitem>
	    </itemizedlist>
	</section>
    </section>
</chapter>

<!-- Keep this element at the end of the file
Local Variables:
sgml-parent-document: ("tm.sgml" "book" "chapter")
End:
-->
