This file describes the content of the "contrib" directory. 
For information about the freeDiameter project, please refer
to top-level README file.

- update_copyright.sh : This script will simply update the copyright information
        in all source files in the freeDiameter mercurial repository, based
	on the last modification time. Thought I might share it if other people find
	it useful for their own project...


- debian : This directory contains the packaging information to create native Debian / Ubuntu 
	packages. It requires debhelper >= 7.3.9 (support for cmake). To use, simply link the
	debian folder from the main freeDiameter folder, then use your building script as
	usual ('dh binary' or 'pdebuild' or ...).
	If you simply intend to use freeDiameter package, the relevant information is located
	at: http://www.freediameter.net/trac/wiki/DebRepository


- PKI : This directory contains useful material related to establishing a 
        Public Key Infrastructure (PKI) for deploying x509 certificates 
	and use these for TLS authentication of the freeDiameter nodes.
	
        IMPORTANT: Please note that these solutions are NOT suitable 
	for use in a production environment! It allows easy deployment of 
	certificates for tests, and that is their sole purpose.
    
        The directory contains:
	
    - ca_script: a simple Makefile allowing you to generate a self-signed certificate (root)
                and then issue new certificates and private keys for your users.
		Run "make" without argument to get the help.
		
    - ca_script2: An evolution of the previous Makefile. This one allows you
    		to create a hierarchy of CA and certificates. 

    - phpki-0.82.patch : This patch is to be applied to PHPki to customize the use for freeDiameter.
                PHPki (http://sourceforge.net/projects/phpki/) is a PHP-based web interface
		that provides more or less the same services as ca_script.


- OpenWRT : This directory contains the scripts and documentation related to 
	the integration of freeDiameter RADIUS/Diameter gateway component in the openWRT
	distribution (http://openwrt.org) -- the goal is to give the access point the 
	ability to "talk" Diameter instead of RADIUS.
				

- nightly_tests : This directory contains the scripts and documentation for the nightly 
	tests run on freeDiameter. The results are published at the following URL:
	http://www.freediameter.net/CDash/index.php?project=freeDiameter


- dict_legacy: XML and DTD files for the dict_legacy_xml.fdx extension.

- dict_dcca: partial implementations of the DCCA dictionary

- dict_gx: untested implementation of the Gx interface.

- test_Gx: a responder on the Gx interface that always send SUCCESS status.

- wireshark: This contains some information on how to use Wireshark to monitor Diameter
	exchange protected with TLS. It involves patching the wireshark software.
