changeset 885:b7002bcc92a5

Converted to UNIX line ending
author Sebastien Decugis <sdecugis@freediameter.net>
date Wed, 14 Nov 2012 12:35:47 +0100
parents 277aa200033b
children 4e2b4eef5908
files CTestConfig.cmake INSTALL.OSX extensions/dict_dcca/dict_dcca.c
diffstat 3 files changed, 1566 insertions(+), 1566 deletions(-) [+]
line wrap: on
line diff
--- a/CTestConfig.cmake	Wed Nov 14 11:50:14 2012 +0100
+++ b/CTestConfig.cmake	Wed Nov 14 12:35:47 2012 +0100
@@ -1,10 +1,10 @@
-# Configuration for sumitting the test result.
-# Check http://www.freediameter.net/CDash for detail.
-
-set(CTEST_PROJECT_NAME "freeDiameter")
-set(CTEST_NIGHTLY_START_TIME "00:00:00 JST")
-
-set(CTEST_DROP_METHOD "http")
-set(CTEST_DROP_SITE "www.freediameter.net")
-set(CTEST_DROP_LOCATION "/CDash/submit.php?project=freeDiameter")
-set(CTEST_DROP_SITE_CDASH TRUE)
+# Configuration for sumitting the test result.
+# Check http://www.freediameter.net/CDash for detail.
+
+set(CTEST_PROJECT_NAME "freeDiameter")
+set(CTEST_NIGHTLY_START_TIME "00:00:00 JST")
+
+set(CTEST_DROP_METHOD "http")
+set(CTEST_DROP_SITE "www.freediameter.net")
+set(CTEST_DROP_LOCATION "/CDash/submit.php?project=freeDiameter")
+set(CTEST_DROP_SITE_CDASH TRUE)
--- a/INSTALL.OSX	Wed Nov 14 11:50:14 2012 +0100
+++ b/INSTALL.OSX	Wed Nov 14 12:35:47 2012 +0100
@@ -1,84 +1,84 @@
-See INSTALL file for general instructions on building freeDiameter.
-
-------------------
-QUICK INSTRUCTIONS
-------------------
-
-Starting from version 1.1.5, freeDiameter is available through Homebrew:
-
-1) Install Homebrew
-   a) Install Command Line Tools for Xcode or Xcode:
-      - Command Line Tools (your OS X Version) for Xcode:
-         https://developer.apple.com/downloads (Free Apple Developer ID Registration Required)
-      - or Xcode: 
-         https://itunes.apple.com/us/app/xcode/id497799835 (Free App Store Account Required)
-
-   b) Install Homebrew
-     $ ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
-
-2) Install freeDiameter 
-     $ brew install freediameter-server
-
-   After installation is done "Cavets" section will provide information 
-   how to start freeDiameterd through launchd at system startup.
-
-   To view this information again: 
-     $ brew cavets freediameter-server
-
-   To learn more about freeDiameter configuration options, read:
-      http://www.freediameter.net/trac/wiki/Configuration
-
-   For more information on available extension and how to configure them, read:
-      http://www.freediameter.net/trac/wiki/Extensions
-
-------------
-FROM SOURCES
-------------
-
-1) Install Homebrew:
-   See QUICK INSTRUCTIONS Step #1 above.
-
-2) Install dependencies:
-    $ brew install mercurial cmake gnutls postgres mysql libidn
-
-   Notes: 
-    * GNU IDN (libidn) is optional, see bellow
-    * When libusrsctp package is available, you can use it as well.
-
-3) Retrieve source code:
-    $ hg clone http://www.freediameter.net/hg/freeDiameter
-
-4) Enter source folder:
-    $ cd freeDiameter
-
-5) Create build folder:
-    $ mkdir freeDiameter-build
-
-6) Enter build folder:
-    $ cd freeDiameter-build
-
-7) Configure:
-    $ cmake .. -DDISABLE_SCTP:BOOL=ON
-    
-   or for ncurses-based configuration:
-    $ ccmake .. -DDISABLE_SCTP:BOOL=ON
-
-   Notes:
-    * If you have installed libusrsctp, you can turn off the DISABLE_SCTP switch.
-    * GNU IDN (Support for International Domain Names) can be disabled with:
-       -DDIAMID_IDNA_IGNORE=ON or -DDIAMID_IDNA_REJECT=ON
-    * For more information on available configuration options read: 
-       http://www.freediameter.net/trac/wiki/Installation
-
-8) Compile:
-    $ make
-
-9) Install (might require to be root):
-    $ make install
-
-------------------------------------------------
-
-These instructions have been tested on OS X:
-   - 10.6.8 (Snow Leopard)
-   - 10.7.5 (Lion)
-   - 10.8.2 (Mountain Lion)
+See INSTALL file for general instructions on building freeDiameter.
+
+------------------
+QUICK INSTRUCTIONS
+------------------
+
+Starting from version 1.1.5, freeDiameter is available through Homebrew:
+
+1) Install Homebrew
+   a) Install Command Line Tools for Xcode or Xcode:
+      - Command Line Tools (your OS X Version) for Xcode:
+         https://developer.apple.com/downloads (Free Apple Developer ID Registration Required)
+      - or Xcode: 
+         https://itunes.apple.com/us/app/xcode/id497799835 (Free App Store Account Required)
+
+   b) Install Homebrew
+     $ ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
+
+2) Install freeDiameter 
+     $ brew install freediameter-server
+
+   After installation is done "Cavets" section will provide information 
+   how to start freeDiameterd through launchd at system startup.
+
+   To view this information again: 
+     $ brew cavets freediameter-server
+
+   To learn more about freeDiameter configuration options, read:
+      http://www.freediameter.net/trac/wiki/Configuration
+
+   For more information on available extension and how to configure them, read:
+      http://www.freediameter.net/trac/wiki/Extensions
+
+------------
+FROM SOURCES
+------------
+
+1) Install Homebrew:
+   See QUICK INSTRUCTIONS Step #1 above.
+
+2) Install dependencies:
+    $ brew install mercurial cmake gnutls postgres mysql libidn
+
+   Notes: 
+    * GNU IDN (libidn) is optional, see bellow
+    * When libusrsctp package is available, you can use it as well.
+
+3) Retrieve source code:
+    $ hg clone http://www.freediameter.net/hg/freeDiameter
+
+4) Enter source folder:
+    $ cd freeDiameter
+
+5) Create build folder:
+    $ mkdir freeDiameter-build
+
+6) Enter build folder:
+    $ cd freeDiameter-build
+
+7) Configure:
+    $ cmake .. -DDISABLE_SCTP:BOOL=ON
+    
+   or for ncurses-based configuration:
+    $ ccmake .. -DDISABLE_SCTP:BOOL=ON
+
+   Notes:
+    * If you have installed libusrsctp, you can turn off the DISABLE_SCTP switch.
+    * GNU IDN (Support for International Domain Names) can be disabled with:
+       -DDIAMID_IDNA_IGNORE=ON or -DDIAMID_IDNA_REJECT=ON
+    * For more information on available configuration options read: 
+       http://www.freediameter.net/trac/wiki/Installation
+
+8) Compile:
+    $ make
+
+9) Install (might require to be root):
+    $ make install
+
+------------------------------------------------
+
+These instructions have been tested on OS X:
+   - 10.6.8 (Snow Leopard)
+   - 10.7.5 (Lion)
+   - 10.8.2 (Mountain Lion)
--- a/extensions/dict_dcca/dict_dcca.c	Wed Nov 14 11:50:14 2012 +0100
+++ b/extensions/dict_dcca/dict_dcca.c	Wed Nov 14 12:35:47 2012 +0100
@@ -1,1472 +1,1472 @@
-/****************
- Contributed by: Konstantin Chekushin <koch@lmt.lv> and Thomas Klausner <tk@giga.or.at>
- License: same as freeDiameter
-****************/
-
-
-/* 
- * Dictionary definitions of objects specified in DCCA (rfc4006).
- */
-#include <freeDiameter/extension.h>
-
-
-/* The content of this file follows the same structure as dict_base_proto.c */
-
-#define CHECK_dict_new( _type, _data, _parent, _ref )			\
-    CHECK_FCT(  fd_dict_new( fd_g_config->cnf_dict, (_type), (_data), (_parent), (_ref))  );
-
-#define CHECK_dict_search( _type, _criteria, _what, _result )		\
-    CHECK_FCT(  fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) );
-
-struct local_rules_definition {
-    char 			*avp_name;
-    enum rule_position	position;
-    int 			min;
-    int			max;
-};
-
-#define RULE_ORDER( _position ) ((((_position) == RULE_FIXED_HEAD) || ((_position) == RULE_FIXED_TAIL)) ? 1 : 0 )
-
-#define PARSE_loc_rules( _rulearray, _parent) {				\
-	int __ar;							\
-	for (__ar=0; __ar < sizeof(_rulearray) / sizeof((_rulearray)[0]); __ar++) { \
-	    struct dict_rule_data __data = { NULL,			\
-					     (_rulearray)[__ar].position, \
-					     0,				\
-					     (_rulearray)[__ar].min,	\
-					     (_rulearray)[__ar].max};	\
-	    __data.rule_order = RULE_ORDER(__data.rule_position);	\
-	    CHECK_FCT(  fd_dict_search(					\
-			    fd_g_config->cnf_dict,			\
-			    DICT_AVP,					\
-			    AVP_BY_NAME,				\
-			    (_rulearray)[__ar].avp_name,		\
-			    &__data.rule_avp, 0 ) );			\
-	    if ( !__data.rule_avp ) {					\
-		TRACE_DEBUG(INFO, "AVP Not found: '%s'", (_rulearray)[__ar].avp_name );	\
-		return ENOENT;						\
-	    }								\
-	    CHECK_FCT_DO( fd_dict_new( fd_g_config->cnf_dict, DICT_RULE, &__data, _parent, NULL), \
-			  {						\
-			      TRACE_DEBUG(INFO, "Error on rule with AVP '%s'", \
-					  (_rulearray)[__ar].avp_name ); \
-			      return EINVAL;				\
-			  } );						\
-	}								\
-    }
-
-#define enumval_def_u32( _val_, _str_ )		\
-    { _str_, 		{ .u32 = _val_ }}
-
-#define enumval_def_os( _len_, _val_, _str_ )				\
-    { _str_, 		{ .os = { .data = (unsigned char *)_val_, .len = _len_ }}}
-
-
-static int dict_dcca_entry(char * conffile)
-{
-    struct dict_object * dcca;
-    TRACE_ENTRY("%p", conffile);		
-	
-    /* Applications section */
-    {
-	/* DCCA */
-	{
-	    struct dict_application_data data = {        4, "Diameter Credit Control Application" 			};
-	    CHECK_dict_new( DICT_APPLICATION, &data, NULL, &dcca);
-	}                                
-    }
-	
-    /* Result codes */
-    {
-        struct dict_object *ResultCodeType;
-        CHECK_dict_search(DICT_TYPE, TYPE_BY_NAME, "Enumerated*(Result-Code)", &ResultCodeType);
-
-        {
-            struct dict_enumval_data error_code = {"END_USER_SERVICE_DENIED",
-						   { .u32 = 4010}};
-            CHECK_dict_new(DICT_ENUMVAL, &error_code, ResultCodeType, NULL);
-        }
-        {
-            struct dict_enumval_data error_code = {"CREDIT_CONTROL_NOT_APPLICABLE",
-						   { .u32 = 4011}};
-            CHECK_dict_new(DICT_ENUMVAL, &error_code, ResultCodeType, NULL);
-        }
-
-    }
-
-
-	
-    /* AVP section */
-    {
-	struct dict_object * Address_type;
-	struct dict_object * UTF8String_type;
-	struct dict_object * DiameterIdentity_type;
-	struct dict_object * DiameterURI_type;
-	struct dict_object * Time_type;
-	struct dict_object * IPFilterRule_type;
-
-	CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Address", &Address_type);
-	CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "UTF8String", &UTF8String_type);
-	CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterIdentity", &DiameterIdentity_type);
-	CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterURI", &DiameterURI_type);
-	CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Time", &Time_type);
-	CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "IPFilterRule", &IPFilterRule_type);
-                
-                
-	/* CC-Correlation-Id */
-	{
-	    /* 
-	       OctetString. 
-	    */
-	    struct dict_avp_data    data = { 
-		411,                                    /* Code */
-		0,                                      /* Vendor */
-		"CC-Correlation-Id",                    /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_OCTETSTRING                    /* base type of data */
-	    };
-
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}
-                
-	/* CC-Input-Octets */
-	{
-	    /* 
-	       Unsigned64. 
-	    */
-	    struct dict_avp_data data = { 
-		412,                                    /* Code */
-		0,                                      /* Vendor */
-		"CC-Input-Octets",                      /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_UNSIGNED64                     /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}
-                
-	/* CC-Output-Octets */
-	{
-	    /* 
-	       Unsigned64. 
-	    */
-	    struct dict_avp_data data = { 
-		414,                                    /* Code */
-		0,                                      /* Vendor */
-		"CC-Output-Octets",                     /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_UNSIGNED64                     /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}
-                
-	/* CC-Request-Number */
-	{
-	    /* 
-	       Unsigned32. 
-	    */
-	    struct dict_avp_data data = { 
-		415,                                    /* Code */
-		0,                                      /* Vendor */
-		"CC-Request-Number",                    /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_UNSIGNED32                     /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}
-
-	/* CC-Request-Type */
-	{
-	    /* 
-	       Enumerated. 
-	    */
-
-	    struct dict_object              *type;
-	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(CC-Request-Type)", NULL, NULL, NULL };
-	    struct dict_enumval_data        t_1 = { "INITIAL_REQUEST", { .i32 = 1 }};
-	    struct dict_enumval_data        t_2 = { "UPDATE_REQUEST", { .i32 = 2 }};
-	    struct dict_enumval_data        t_3 = { "TERMINATION_REQUEST", { .i32 = 3 }};
-	    struct dict_enumval_data        t_4 = { "EVENT_REQUEST", { .i32 = 4 }};
-                  
-
-	    struct dict_avp_data    data = { 
-		416,                                    /* Code */
-		0,                                      /* Vendor */
-		"CC-Request-Type",                      /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_INTEGER32                      /* base type of data */
-	    };
-	    /* Create the Enumerated type, and then the AVP */
-	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL);
-	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
-	}
-                
-
-	/* CC-Service-Specific-Units */
-	{
-	    /* 
-	       Unsigned64. 
-	    */
-	    struct dict_avp_data data = { 
-		417,                                    /* Code */
-		0,                                      /* Vendor */
-		"CC-Service-Specific-Units",            /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_UNSIGNED64                     /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}
-   
-	/* CC-Session-Failover */
-	{
-	    /* 
-	       Enumerated. 
-	    */
-
-	    struct dict_object              *type;
-	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(CC-Session-Failover)" , NULL, NULL, NULL };
-	    struct dict_enumval_data        t_1 = { "FAILOVER_NOT_SUPPORTED", { .i32 = 0 }};
-	    struct dict_enumval_data        t_2 = { "FAILOVER_SUPPORTED", { .i32 = 1 }};
-                  
-
-	    struct dict_avp_data    data = { 
-		418,                                    /* Code */
-		0,                                      /* Vendor */
-		"CC-Session-Failover",                  /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_INTEGER32                      /* base type of data */
-	    };
-	    /* Create the Enumerated type, and then the AVP */
-	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);                  
-	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
-	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
-	}
-                
-	/* CC-Sub-Session-Id */
-	{
-	    /* 
-	       Unsigned64. 
-	    */
-	    struct dict_avp_data data = { 
-		419,                                    /* Code */
-		0,                                      /* Vendor */
-		"CC-Sub-Session-Id",                    /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_UNSIGNED64                     /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}
-                
-	/* CC-Time */
-	{
-	    /* 
-	       Unsigned32. 
-	    */
-	    struct dict_avp_data data = { 
-		420,                                    /* Code */
-		0,                                      /* Vendor */
-		"CC-Time",                              /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_UNSIGNED32                     /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}
-                                     
-	/* CC-Total-Octets */
-	{
-	    /* 
-	       Unsigned64. 
-	    */
-	    struct dict_avp_data data = { 
-		421,                                    /* Code */
-		0,                                      /* Vendor */
-		"CC-Total-Octets",                      /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_UNSIGNED64                     /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}
-                
-	/* CC-Unit-Type */
-	{
-	    /* 
-	       Enumerated. 
-	    */
-
-	    struct dict_object              *type;
-	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(CC-Unit-Type)" , NULL, NULL, NULL };
-	    struct dict_enumval_data        t_1 = { "TIME", { .i32 = 0 }};
-	    struct dict_enumval_data        t_2 = { "MONEY", { .i32 = 1 }};
-	    struct dict_enumval_data        t_3 = { "TOTAL-OCTETS", { .i32 = 2 }};
-	    struct dict_enumval_data        t_4 = { "INPUT-OCTETS", { .i32 = 3 }};
-	    struct dict_enumval_data        t_5 = { "OUTPUT-OCTETS", { .i32 = 4 }};
-	    struct dict_enumval_data        t_6 = { "SERVICE-SPECIFIC-UNITS", { .i32 = 5 }};
-                  
-
-	    struct dict_avp_data    data = { 
-		454,                                    /* Code */
-		0,                                      /* Vendor */
-		"CC-Unit-Type",                         /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_INTEGER32                      /* base type of data */
-	    };
-	    /* Create the Enumerated type, and then the AVP */
-	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);   
-	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); 
-	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL); 
-	    CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL); 
-	    CHECK_dict_new( DICT_ENUMVAL, &t_5 , type, NULL); 
-	    CHECK_dict_new( DICT_ENUMVAL, &t_6 , type, NULL); 
-	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
-	}
-
-	/* Check-Balance-Result */
-	{
-	    /* 
-	       Enumerated. 
-	    */
-
-	    struct dict_object              *type;
-	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Check-Balance-Result)" , NULL, NULL, NULL };
-	    struct dict_enumval_data        t_1 = { "ENOUGH_CREDIT", { .i32 = 0 }};
-	    struct dict_enumval_data        t_2 = { "NO_CREDIT", { .i32 = 1 }};
-                  
-
-	    struct dict_avp_data    data = { 
-		422,                                    /* Code */
-		0,                                      /* Vendor */
-		"Check-Balance-Result",                 /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_INTEGER32                      /* base type of data */
-	    };
-	    /* Create the Enumerated type, and then the AVP */
-	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);  
-	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); 
-	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
-	}
-                
-	/* Cost-Unit */
-	{
-	    /* 
-	       UTF8String. 
-	    */
-	    struct dict_avp_data    data = { 
-		424,                                    /* Code */
-		0,                                      /* Vendor */
-		"Cost-Unit",                            /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_OCTETSTRING                    /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL);
-	} 
-                
-	/* Credit-Control */
-	{
-	    /* 
-	       Enumerated. 
-	    */
-
-	    struct dict_object              *type;
-	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Credit-Control)" , NULL, NULL, NULL };
-	    struct dict_enumval_data        t_1 = { "CREDIT_AUTHORIZATION", { .i32 = 0 }};
-	    struct dict_enumval_data        t_2 = { "RE_AUTHORIZATION", { .i32 = 1 }};
-                  
-	    struct dict_avp_data    data = { 
-		426,                                    /* Code */
-		0,                                      /* Vendor */
-		"Credit-Control",                       /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_INTEGER32                      /* base type of data */
-	    };
-	    /* Create the Enumerated type, and then the AVP */
-	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL); 
-	    CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
-	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
-	}
-   
-	/* Credit-Control-Failure-Handling */
-	{
-	    /* 
-	       Enumerated. 
-	    */
-
-	    struct dict_object              *type;
-	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Credit-Control-Failure-Handling)" , NULL, NULL, NULL };
-	    struct dict_enumval_data        t_1 = { "TERMINATE", { .i32 = 0 }};
-	    struct dict_enumval_data        t_2 = { "CONTINUE", { .i32 = 1 }};
-	    struct dict_enumval_data        t_3 = { "RETRY_AND_TERMINATE", { .i32 = 2 }};
-                  
-	    struct dict_avp_data    data = { 
-		427,                                    /* Code */
-		0,                                      /* Vendor */
-		"Credit-Control-Failure-Handling",      /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_INTEGER32                      /* base type of data */
-	    };
-	    /* Create the Enumerated type, and then the AVP */
-	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);   
-	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
-	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
-	}
-
-	/* Currency-Code */
-	{
-	    /* 
-	       Unsigned32. 
-	    */
-	    struct dict_avp_data data = { 
-		425,                                    /* Code */
-		0,                                      /* Vendor */
-		"Currency-Code",                        /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_UNSIGNED32                     /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}
-
-	/* Direct-Debiting-Failure-Handling */
-	{
-	    /* 
-	       Enumerated. 
-	    */
-
-	    struct dict_object              *type;
-	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Direct-Debiting-Failure-Handling)" , NULL, NULL, NULL };
-	    struct dict_enumval_data        t_1 = { "TERMINATE_OR_BUFFER", { .i32 = 0 }};
-	    struct dict_enumval_data        t_2 = { "CONTINUE", { .i32 = 1 }};
-                  
-	    struct dict_avp_data    data = { 
-		428,                                    /* Code */
-		0,                                      /* Vendor */
-		"Direct-Debiting-Failure-Handling",     /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_INTEGER32                      /* base type of data */
-	    };
-	    /* Create the Enumerated type, and then the AVP */
-	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); 
-	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
-	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
-	}
-
-	/* Exponent */
-	{
-	    /* 
-	       Integer32. 
-	    */
-	    struct dict_avp_data data = { 
-		429,                                    /* Code */
-		0,                                      /* Vendor */
-		"Exponent",                             /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_INTEGER32                      /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}
-                
-	/* Final-Unit-Action */
-	{
-	    /* 
-	       Enumerated. 
-	    */
-
-	    struct dict_object              *type;
-	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Final-Unit-Action)" , NULL, NULL, NULL };
-	    struct dict_enumval_data        t_1 = { "TERMINATE", { .i32 = 0 }};
-	    struct dict_enumval_data        t_2 = { "REDIRECT", { .i32 = 1 }};
-	    struct dict_enumval_data        t_3 = { "RESTRICT_ACCESS", { .i32 = 2 }};
-                  
-	    struct dict_avp_data    data = { 
-		449,                                    /* Code */
-		0,                                      /* Vendor */
-		"Final-Unit-Action",                    /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_INTEGER32                      /* base type of data */
-	    };
-	    /* Create the Enumerated type, and then the AVP */
-	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);  
-	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); 
-	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL); 
-	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
-	}
-
-	/* G-S-U-Pool-Identifier */
-	{
-	    /* 
-	       Unsigned32. 
-	    */
-	    struct dict_avp_data data = { 
-		453,                                    /* Code */
-		0,                                      /* Vendor */
-		"G-S-U-Pool-Identifier",                /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_UNSIGNED32                     /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}
-                
-	/* Multiple-Services-Indicator */
-	{
-	    /* 
-	       Enumerated. 
-	    */
-
-	    struct dict_object              *type;
-	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Multiple-Services-Indicator)" , NULL, NULL, NULL };
-	    struct dict_enumval_data        t_1 = { "MULTIPLE_SERVICES_NOT_SUPPORTED", { .i32 = 0 }};
-	    struct dict_enumval_data        t_2 = { "MULTIPLE_SERVICES_SUPPORTED", { .i32 = 1 }};
-                  
-	    struct dict_avp_data    data = { 
-		455,                                    /* Code */
-		0,                                      /* Vendor */
-		"Multiple-Services-Indicator",          /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_INTEGER32                      /* base type of data */
-	    };
-	    /* Create the Enumerated type, and then the AVP */
-	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); 
-	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
-	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
-	}
-                
-	/* Rating-Group */
-	{
-	    /* 
-	       Unsigned32. 
-	    */
-	    struct dict_avp_data data = { 
-		432,                                    /* Code */
-		0,                                      /* Vendor */
-		"Rating-Group",                         /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_UNSIGNED32                     /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}
-                                      
-	/* Redirect-Address-Type */
-	{
-	    /* 
-	       Enumerated. 
-	    */
-
-	    struct dict_object              *type;
-	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Redirect-Address-Type)" , NULL, NULL, NULL };
-	    struct dict_enumval_data        t_1 = { "IPV4_ADDRESS", { .i32 = 0 }};
-	    struct dict_enumval_data        t_2 = { "IPV6_ADDRESS", { .i32 = 1 }};
-	    struct dict_enumval_data        t_3 = { "URL", { .i32 = 2 }};
-	    struct dict_enumval_data        t_4 = { "SIP_URI", { .i32 = 3 }};
-                  
-	    struct dict_avp_data    data = { 
-		433,                                    /* Code */
-		0,                                      /* Vendor */
-		"Redirect-Address-Type",                /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_INTEGER32                      /* base type of data */
-	    };
-	    /* Create the Enumerated type, and then the AVP */
-	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);  
-	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); 
-	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL); 
-	    CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL); 
-	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
-	}           
-
-	/* Redirect-Server-Address */
-	{
-	    /* 
-	       UTF8String. 
-	    */
-	    struct dict_avp_data    data = { 
-		435,                                    /* Code */
-		0,                                      /* Vendor */
-		"Redirect-Server-Address",              /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_OCTETSTRING                    /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL);
-	}
-                
-	/* Requested-Action */
-	{
-	    /* 
-	       Enumerated. 
-	    */
-
-	    struct dict_object              *type;
-	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Requested-Action)" , NULL, NULL, NULL };
-	    struct dict_enumval_data        t_1 = { "DIRECT_DEBITING", { .i32 = 0 }};
-	    struct dict_enumval_data        t_2 = { "REFUND_ACCOUNT", { .i32 = 1 }};
-	    struct dict_enumval_data        t_3 = { "CHECK_BALANCE", { .i32 = 2 }};
-	    struct dict_enumval_data        t_4 = { "PRICE_ENQUIRY", { .i32 = 3 }};
-                  
-	    struct dict_avp_data    data = { 
-		436,                                    /* Code */
-		0,                                      /* Vendor */
-		"Requested-Action",                     /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_INTEGER32                      /* base type of data */
-	    };
-	    /* Create the Enumerated type, and then the AVP */
-	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); 
-	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL);
-	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
-	}
-                                    
-	/* Restriction-Filter-Rule */
-	{
-	    /* 
-	       IPFiltrRule. 
-	    */
-	    struct dict_avp_data    data = { 
-		438,                                    /* Code */
-		0,                                      /* Vendor */
-		"Restriction-Filter-Rule",              /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_OCTETSTRING                    /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , IPFilterRule_type, NULL);
-	}
-	/*Service-Context-Id  */
-	{
-	    /* 
-	       UTF8String. 
-	    */
-	    struct dict_avp_data    data = { 
-		461,                                    /* Code */
-		0,                                      /* Vendor */
-		"Service-Context-Id",                   /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_OCTETSTRING                    /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL);
-	}
-
-	/* Service-Identifier */
-	{
-	    /* 
-	       Unsigned32. 
-	    */
-	    struct dict_avp_data data = { 
-		439,                                    /* Code */
-		0,                                      /* Vendor */
-		"Service-Identifier",                   /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_UNSIGNED32                     /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}                       
-                               
-	/* Service-Parameter-Type */
-	{
-	    /* 
-	       Unsigned32. 
-	    */
-	    struct dict_avp_data data = { 
-		441,                                    /* Code */
-		0,                                      /* Vendor */
-		"Service-Parameter-Type",               /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_UNSIGNED32                     /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}
-                
-	/* Service-Parameter-Value */
-	{
-	    /* 
-	       OctetString. 
-	    */
-	    struct dict_avp_data data = { 
-		442,                                    /* Code */
-		0,                                      /* Vendor */
-		"Service-Parameter-Value",              /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_OCTETSTRING                    /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}
-
-	/* Subscription-Id-Data */
-	{
-	    /* 
-	       UTF8String. 
-	    */
-	    struct dict_avp_data    data = { 
-		444,                                    /* Code */
-		0,                                      /* Vendor */
-		"Subscription-Id-Data",                 /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_OCTETSTRING                    /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL);
-	}            
-    
-	/* Subscription-Id-Type */
-	{
-	    /* 
-	       Enumerated. 
-	    */
-
-	    struct dict_object              *type;
-	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Subscription-Id-Type)" , NULL, NULL, NULL };
-	    struct dict_enumval_data        t_1 = { "END_USER_E164", { .i32 = 0 }};
-	    struct dict_enumval_data        t_2 = { "END_USER_IMSI", { .i32 = 1 }};
-	    struct dict_enumval_data        t_3 = { "END_USER_SIP_URI", { .i32 = 2 }};
-	    struct dict_enumval_data        t_4 = { "END_USER_NAI", { .i32 = 3 }};
-                  
-	    struct dict_avp_data    data = { 
-		450,                                    /* Code */
-		0,                                      /* Vendor */
-		"Subscription-Id-Type",                 /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_INTEGER32                      /* base type of data */
-	    };
-	    /* Create the Enumerated type, and then the AVP */
-	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); 
-	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL);
-	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
-	}
-                
-	/* Tariff-Change-Usage */
-	{
-	    /* 
-	       Enumerated. 
-	    */
-
-	    struct dict_object              *type;
-	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Tariff-Change-Usage)" , NULL, NULL, NULL };
-	    struct dict_enumval_data        t_1 = { "UNIT_BEFORE_TARIFF_CHANGE", { .i32 = 0 }};
-	    struct dict_enumval_data        t_2 = { "UNIT_AFTER_TARIFF_CHANGE", { .i32 = 1 }};
-	    struct dict_enumval_data        t_3 = { "UNIT_INDETERMINATE", { .i32 = 2 }};
-                  
-	    struct dict_avp_data    data = { 
-		452,                                    /* Code */
-		0,                                      /* Vendor */
-		"Tariff-Change-Usage",                  /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_INTEGER32                      /* base type of data */
-	    };
-	    /* Create the Enumerated type, and then the AVP */
-	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); 
-	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
-	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
-	}
-                
-	/* Tariff-Time-Change */
-	{
-	    /*
-	      Time. 
-	    */
-	    struct dict_avp_data data = { 
-		451,                                    /* Code */
-		0,                                      /* Vendor */
-		"Tariff-Time-Change",                   /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_OCTETSTRING                    /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , Time_type, NULL);
-	}
-
-	/* User-Equipment-Info-Type */
-	{
-	    /* 
-	       Enumerated. 
-	    */
-
-	    struct dict_object              *type;
-	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(User-Equipment-Info-Type)" , NULL, NULL, NULL };
-	    struct dict_enumval_data        t_1 = { "IMEISV", { .i32 = 0 }};
-	    struct dict_enumval_data        t_2 = { "MAC", { .i32 = 1 }};
-	    struct dict_enumval_data        t_3 = { "EUI64", { .i32 = 2 }};
-                  
-	    struct dict_avp_data    data = { 
-		459,                                    /* Code */
-		0,                                      /* Vendor */
-		"User-Equipment-Info-Type",             /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_INTEGER32                      /* base type of data */
-	    };
-	    /* Create the Enumerated type, and then the AVP */
-	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
-	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
-	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
-	}                           
-   
-	/* User-Equipment-Info-Value */
-	{
-	    /* 
-	       OctetString. 
-	    */
-	    struct dict_avp_data data = { 
-		460,                                    /* Code */
-		0,                                      /* Vendor */
-		"User-Equipment-Info-Value",            /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_OCTETSTRING                    /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}
-
-	/* Value-Digits */
-	{
-	    /* 
-	       Integer64. 
-	    */
-	    struct dict_avp_data data = { 
-		447,                                    /* Code */
-		0,                                      /* Vendor */
-		"Value-Digits",                         /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_INTEGER64                      /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}                         
-                 
-	/* Validity-Time */
-	{
-	    /* 
-	       Unsigned32. 
-	    */
-	    struct dict_avp_data data = { 
-		448,                                    /* Code */
-		0,                                      /* Vendor */
-		"Validity-Time",                        /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_UNSIGNED32                     /* base type of data */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
-	}
-
-
-	/* Grouped AVPs below since they have dependencies on types above */
-
-	/* Redirect-Server */
-	{
-	    /*
-	      Grouped
-	    */
-	    struct dict_object * avp;
-	    struct dict_avp_data data = {
-		434,                                    /* Code */
-		0,                                      /* Vendor */
-		"Redirect-Server",                      /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_GROUPED                        /* base type of data */
-	    };
-	    struct local_rules_definition rules[] = {
-		{  "Redirect-Address-Type",	RULE_REQUIRED,	-1, 1 },
-		{  "Redirect-Server-Address",	RULE_REQUIRED,	-1, 1 }
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
-	    PARSE_loc_rules( rules, avp );
-	}
-
-	/* Service-Parameter-Info */
-	{
-	    /*
-	      Grouped
-	    */
-	    struct dict_object * avp;
-	    struct dict_avp_data data = {
-		440,                                    /* Code */
-		0,                                      /* Vendor */
-		"Service-Parameter-Info",               /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_GROUPED                        /* base type of data */
-	    };
-	    struct local_rules_definition rules[] = {
-		{  "Service-Parameter-Type",	RULE_REQUIRED,	-1, 1 },
-		{  "Service-Parameter-Value",	RULE_REQUIRED,	-1, 1 }
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
-	    PARSE_loc_rules( rules, avp );
-	}                        
-
-	/* Subscription-Id */
-	{
-	    /*
-	      Grouped
-	    */
-	    struct dict_object * avp;
-	    struct dict_avp_data data = {
-		443,                                    /* Code */
-		0,                                      /* Vendor */
-		"Subscription-Id",                      /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_GROUPED                        /* base type of data */
-	    };
-	    struct local_rules_definition rules[] = {
-		{  "Subscription-Id-Type",	RULE_REQUIRED,	-1, 1 },
-		{  "Subscription-Id-Data",	RULE_REQUIRED,	-1, 1 }
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
-	    PARSE_loc_rules( rules, avp );
-	}
-                                     
-	/* Unit-Value */
-	{
-	    /*
-	      Grouped
-	    */
-	    struct dict_object * avp;
-	    struct dict_avp_data data = {
-		445,                                    /* Code */
-		0,                                      /* Vendor */
-		"Unit-Value",                           /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_GROUPED                        /* base type of data */
-	    };
-	    struct local_rules_definition rules[] = {
-		{  "Value-Digits",	RULE_REQUIRED,	-1, 1 },
-		{  "Exponent",		RULE_OPTIONAL,	-1, 1 }
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
-	    PARSE_loc_rules( rules, avp );
-	}
-
-	/* User-Equipment-Info */
-	{
-	    /*
-	      Grouped
-	    */
-	    struct dict_object * avp;
-	    struct dict_avp_data data = {
-		458,                                    /* Code */
-		0,                                      /* Vendor */
-		"User-Equipment-Info",                  /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_GROUPED                        /* base type of data */
-	    };
-	    struct local_rules_definition rules[] = {
-		{  "User-Equipment-Info-Type",	RULE_REQUIRED,	-1, 1 },
-		{  "User-Equipment-Info-Value",	RULE_REQUIRED,	-1, 1 }
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
-	    PARSE_loc_rules( rules, avp );
-	}
-
-	/* grouped AVPs using grouped AVPs */ 
-
-	/* CC-Money */
-	{
-	    /*
-	      Grouped
-	    */
-	    struct dict_object * avp;
-	    struct dict_avp_data data = {
-		413,                                    /* Code */
-		0,                                      /* Vendor */
-		"CC-Money",                             /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_GROUPED                        /* base type of data */
-	    };
-	    struct local_rules_definition rules[] = {
-		{  "Unit-Value",	RULE_REQUIRED,	-1, 1 },
-		{  "Currency-Code",	RULE_OPTIONAL,	-1, 1 }
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
-	    PARSE_loc_rules( rules, avp );
-	}
-
-	/* Cost-Information */
-	{
-	    /*
-	      Grouped
-	    */
-	    struct dict_object * avp;
-	    struct dict_avp_data data = {
-		423,                                    /* Code */
-		0,                                      /* Vendor */
-		"Cost-Information",                     /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_GROUPED                        /* base type of data */
-	    };
-	    struct local_rules_definition rules[] = {
-		{  "Unit-Value",	RULE_REQUIRED,	-1, 1 },
-		{  "Currency-Code",	RULE_REQUIRED,	-1, 1 },
-		{  "Cost-Unit",		RULE_OPTIONAL,	-1, 1 }
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
-	    PARSE_loc_rules( rules, avp );
-	}
-
-	/* Final-Unit-Indication */
-	{
-	    /*
-	      Grouped
-	    */
-	    struct dict_object * avp;
-	    struct dict_avp_data data = {
-		430,                                    /* Code */
-		0,                                      /* Vendor */
-		"Final-Unit-Indication",                /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_GROUPED                        /* base type of data */
-	    };
-	    struct local_rules_definition rules[] = {
-		{  "Final-Unit-Action",		RULE_REQUIRED,	-1, 1 },
-		{  "Restriction-Filter-Rule",	RULE_OPTIONAL,	-1, -1 },
-		{  "Filter-Id",			RULE_OPTIONAL,	-1, -1 },
-		{  "Redirect-Server",		RULE_OPTIONAL,	-1, 1 },
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
-	    PARSE_loc_rules( rules, avp );
-	}
-                
-	/* Granted-Service-Unit */
-	{
-	    /*
-	      Grouped
-	    */
-	    struct dict_object * avp;
-	    struct dict_avp_data data = {
-		431,                                    /* Code */
-		0,                                      /* Vendor */
-		"Granted-Service-Unit",                 /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_GROUPED                        /* base type of data */
-	    };
-	    struct local_rules_definition rules[] = {
-		{  "Tariff-Time-Change",	RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Time",	       		RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Money",			RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Total-Octets",		RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Input-Octets",		RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Output-Octets",		RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Service-Specific-Units",	RULE_OPTIONAL,	-1, 1 }
-		/* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
-	    PARSE_loc_rules( rules, avp );
-	}
-
-	/* G-S-U-Pool-Reference */
-	{
-	    /*
-	      Grouped
-	    */
-	    struct dict_object * avp;
-	    struct dict_avp_data data = {
-		457,                                    /* Code */
-		0,                                      /* Vendor */
-		"G-S-U-Pool-Reference",                 /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_GROUPED                        /* base type of data */
-	    };
-	    struct local_rules_definition rules[] = {
-		{  "G-S-U-Pool-Identifier",	RULE_REQUIRED,	-1, 1 },
-		{  "CC-Unit-Type",		RULE_REQUIRED,	-1, 1 },
-		{  "Unit-Value",		RULE_REQUIRED,	-1, 1 }
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
-	    PARSE_loc_rules( rules, avp );
-	}                     
-
-	/* Requested-Service-Unit */
-	{
-	    /*
-	      Grouped
-	    */
-	    struct dict_object * avp;
-	    struct dict_avp_data data = {
-		437,                                    /* Code */
-		0,                                      /* Vendor */
-		"Requested-Service-Unit",               /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_GROUPED                        /* base type of data */
-	    };
-	    struct local_rules_definition rules[] = {
-		{  "CC-Time",	       		RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Money",			RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Total-Octets",		RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Input-Octets",		RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Output-Octets",		RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Service-Specific-Units",	RULE_OPTIONAL,	-1, 1 }
-		/* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
-	    PARSE_loc_rules( rules, avp );
-	}
-
-	/* Used-Service-Unit */
-	{
-	    /*
-	      Grouped
-	    */
-	    struct dict_object * avp;
-	    struct dict_avp_data data = {
-		446,                                    /* Code */
-		0,                                      /* Vendor */
-		"Used-Service-Unit",                    /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_GROUPED                        /* base type of data */
-	    };
-	    struct local_rules_definition rules[] = {
-		{  "Tariff-Change-Usage",	RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Time",	       		RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Money",			RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Total-Octets",		RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Input-Octets",		RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Output-Octets",		RULE_OPTIONAL,	-1, 1 },
-		{  "CC-Service-Specific-Units",	RULE_OPTIONAL,	-1, 1 }
-		/* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
-	    PARSE_loc_rules( rules, avp );
-	}
-
-	/* at least three levels of grouping */
-	/* Multiple-Services-Credit-Control */
-	{
-	    /*
-	      Grouped
-	    */
-	    struct dict_object * avp;
-	    struct dict_avp_data data = {
-		456,                                    /* Code */
-		0,                                      /* Vendor */
-		"Multiple-Services-Credit-Control",     /* Name */
-		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
-		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
-		AVP_TYPE_GROUPED                        /* base type of data */
-	    };
-	    struct local_rules_definition rules[] = {
-		{  "Granted-Service-Unit",	RULE_OPTIONAL,	-1, 1 },
-		{  "Requested-Service-Unit",	RULE_OPTIONAL,	-1, 1 },
-		{  "Used-Service-Unit",		RULE_OPTIONAL,	-1, -1 },
-		{  "Tariff-Change-Usage",	RULE_OPTIONAL,	-1, 1 },
-		{  "Service-Identifier",	RULE_OPTIONAL,	-1, -1 },
-		{  "Rating-Group",		RULE_OPTIONAL,	-1, 1 },
-		{  "G-S-U-Pool-Reference",	RULE_OPTIONAL,	-1, -1 },
-		{  "Validity-Time",		RULE_OPTIONAL,	-1, 1 },
-		{  "Result-Code",		RULE_OPTIONAL,	-1, 1 },
-		{  "Final-Unit-Indication",	RULE_OPTIONAL,	-1, 1 }
-		/* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */
-	    };
-	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
-	    PARSE_loc_rules( rules, avp );
-	}
-                
-
-    }
-
-
-    /* Commands section */
-    {
-	/* Credit-Control-Request (CCR) Command */
-	{
-	    /*
-	      From RFC 4006:
-
-	      3.1.  Credit-Control-Request (CCR) Command
-		  
-	      The Credit-Control-Request message (CCR) is indicated by the
-	      command-code field being set to 272 and the 'R' bit being set in the
-	      Command Flags field.  It is used between the Diameter credit-control
-	      client and the credit-control server to request credit authorization
-	      for a given service.
-		  
-	      The Auth-Application-Id MUST be set to the value 4, indicating the
-	      Diameter credit-control application.
-		  
-	      Message Format
-		  
-	      <Credit-Control-Request> ::= < Diameter Header: 272, REQ, PXY >
-			 	          < Session-Id >
-			 	          { Origin-Host }
-			 	          { Origin-Realm }
-			 	          { Destination-Realm }
-			 	          { Auth-Application-Id }
-			 	          { Service-Context-Id }
-			 	          { CC-Request-Type }
-			 	          { CC-Request-Number }
-			 	          [ Destination-Host ]
-			 	          [ User-Name ]
-			 	          [ CC-Sub-Session-Id ]
-			 	          [ Acct-Multi-Session-Id ]
-			 	          [ Origin-State-Id ]
-			 	          [ Event-Timestamp ]
-			 	         *[ Subscription-Id ]
-			 	          [ Service-Identifier ]
-			 	          [ Termination-Cause ]
-			 	          [ Requested-Service-Unit ]
-			 	          [ Requested-Action ]
-			 	         *[ Used-Service-Unit ]
-			 	          [ Multiple-Services-Indicator ]
-			 	         *[ Multiple-Services-Credit-Control ]
-			 	         *[ Service-Parameter-Info ]
-			 	          [ CC-Correlation-Id ]
-			 	          [ User-Equipment-Info ]
-			 	         *[ Proxy-Info ]
-			 	         *[ Route-Record ]
-			 	         *[ AVP ]
-			 	          		  
-	      10.1.  Credit-Control AVP Table
-		  
-	      The table in this section is used to represent which credit-control
-	      applications specific AVPs defined in this document are to be present
-	      in the credit-control messages.
-		  
-	      +-----------+
-	      |  Command  |
-	      |   Code    |
-	      |-----+-----+
-	      Attribute Name                | CCR | CCA |
-	      ------------------------------|-----+-----+
-	      Acct-Multi-Session-Id         | 0-1 | 0-1 |
-	      Auth-Application-Id           | 1   | 1   |
-	      CC-Correlation-Id             | 0-1 | 0   |
-	      CC-Session-Failover           | 0   | 0-1 |
-	      CC-Request-Number             | 1   | 1   |
-	      CC-Request-Type               | 1   | 1   |
-	      CC-Sub-Session-Id             | 0-1 | 0-1 |
-	      Check-Balance-Result          | 0   | 0-1 |
-	      Cost-Information              | 0   | 0-1 |
-	      Credit-Control-Failure-       | 0   | 0-1 |
-	      Handling                      |     |     |
-	      Destination-Host              | 0-1 | 0   |
-	      Destination-Realm             | 1   | 0   |
-	      Direct-Debiting-Failure-      | 0   | 0-1 |
-	      Handling                      |     |     |
-	      Event-Timestamp               | 0-1 | 0-1 |
-	      Failed-AVP                    | 0   | 0+  |
-	      Final-Unit-Indication         | 0   | 0-1 |
-	      Granted-Service-Unit          | 0   | 0-1 |
-	      Multiple-Services-Credit-     | 0+  | 0+  |
-	      Control                       |     |     |
-	      Multiple-Services-Indicator   | 0-1 | 0   |
-	      Origin-Host                   | 1   | 1   |
-	      Origin-Realm                  | 1   | 1   |
-	      Origin-State-Id               | 0-1 | 0-1 |
-	      Proxy-Info                    | 0+  | 0+  |
-	      Redirect-Host                 | 0   | 0+  |
-	      Redirect-Host-Usage           | 0   | 0-1 |
-	      Redirect-Max-Cache-Time       | 0   | 0-1 |
-	      Requested-Action              | 0-1 | 0   |
-	      Requested-Service-Unit        | 0-1 | 0   |
-	      Route-Record                  | 0+  | 0+  |
-	      Result-Code                   | 0   | 1   |
-	      Service-Context-Id            | 1   | 0   |
-	      Service-Identifier            | 0-1 | 0   |
-	      Service-Parameter-Info        | 0+  | 0   |
-	      Session-Id                    | 1   | 1   |
-	      Subscription-Id               | 0+  | 0   |
-	      Termination-Cause             | 0-1 | 0   |
-	      User-Equipment-Info           | 0-1 | 0   |
-	      Used-Service-Unit             | 0+  | 0   |
-	      User-Name                     | 0-1 | 0-1 |
-	      Validity-Time                 | 0   | 0-1 |
-	      ------------------------------|-----+-----+
-		  
-
-	    */
-	    struct dict_object * cmd;
-	    struct dict_cmd_data data = { 
-		272, 					/* Code */
-		"Credit-Control-Request", 		/* Name */
-		CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE, 	/* Fixed flags */
-		CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE 			/* Fixed flag values */
-	    };
-	    struct local_rules_definition rules[] = 
-		{ 	 
-		    { "Session-Id", RULE_FIXED_HEAD, -1, 1 },
-		    { "Origin-Host", RULE_REQUIRED, -1, 1 },
-		    { "Origin-Realm", RULE_REQUIRED, -1, 1 },
-		    { "Destination-Realm", RULE_REQUIRED, -1, 1 },
-		    { "Auth-Application-Id", RULE_REQUIRED, -1, 1 },
-		    { "Service-Context-Id", RULE_REQUIRED, -1, 1 },
-		    { "CC-Request-Type", RULE_REQUIRED, -1, 1 },
-		    { "CC-Request-Number", RULE_REQUIRED, -1, 1 },
-		    { "Destination-Host", RULE_OPTIONAL, -1, 1 },
-		    { "User-Name", RULE_OPTIONAL, -1, 1 },
-		    { "CC-Sub-Session-Id", RULE_OPTIONAL, -1, 1 },
-		    { "Acct-Multi-Session-Id", RULE_OPTIONAL, -1, 1 },
-		    { "Origin-State-Id", RULE_OPTIONAL, -1, 1 },
-		    { "Event-Timestamp", RULE_OPTIONAL, -1, 1 },
-		    { "Subscription-Id", RULE_OPTIONAL, -1, -1 },
-		    { "Service-Identifier", RULE_OPTIONAL, -1, 1 },
-		    { "Termination-Cause", RULE_OPTIONAL, -1, 1 },
-		    { "Requested-Service-Unit", RULE_OPTIONAL, -1, 1 },
-		    { "Requested-Action", RULE_OPTIONAL, -1, 1 },
-		    { "Used-Service-Unit", RULE_OPTIONAL, -1, -1 },
-		    { "Multiple-Services-Indicator", RULE_OPTIONAL, -1, 1 },
-		    { "Multiple-Services-Credit-Control", RULE_OPTIONAL, -1, -1 },
-		    { "Service-Parameter-Info", RULE_OPTIONAL, -1, -1 },
-		    { "CC-Correlation-Id", RULE_OPTIONAL, -1, 1 },
-		    { "User-Equipment-Info", RULE_OPTIONAL, -1, 1 },
-		    { "Proxy-Info", RULE_OPTIONAL, -1, -1 },
-		    { "Route-Record", RULE_OPTIONAL, -1, -1 }
-		    /* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */
-		};
-
-	    CHECK_dict_new( DICT_COMMAND, &data, dcca, &cmd);
-	    PARSE_loc_rules( rules, cmd );
-	}
-
-	/* Credit-Control-Answer (CCA) Command */
-	{
-	    /*
-	      From RFC 4006:
-	      3.2.  Credit-Control-Answer (CCA) Command
-		  
-	      The Credit-Control-Answer message (CCA) is indicated by the command-
-	      code field being set to 272 and the 'R' bit being cleared in the
-	      Command Flags field.  It is used between the credit-control server
-	      and the Diameter credit-control client to acknowledge a Credit-
-	      Control-Request command.
-		  
-	      Message Format
-		  
-	      <Credit-Control-Answer> ::= < Diameter Header: 272, PXY >
-			 	          < Session-Id >
-			 	          { Result-Code }
-			 	          { Origin-Host }
-			 	          { Origin-Realm }
-			 	          { Auth-Application-Id }
-			 	          { CC-Request-Type }
-			 	          { CC-Request-Number }
-			 	          [ User-Name ]
-			 	          [ CC-Session-Failover ]
-			 	          [ CC-Sub-Session-Id ]
-			 	          [ Acct-Multi-Session-Id ]
-			 	          [ Origin-State-Id ]
-			 	          [ Event-Timestamp ]
-			 	          [ Granted-Service-Unit ]
-			 	         *[ Multiple-Services-Credit-Control ]
-			 	          [ Cost-Information]
-			 	          [ Final-Unit-Indication ]
-			 	          [ Check-Balance-Result ]
-			 	          [ Credit-Control-Failure-Handling ]
-			 	          [ Direct-Debiting-Failure-Handling ]
-			 	          [ Validity-Time]
-			 	         *[ Redirect-Host]
-			 	          [ Redirect-Host-Usage ]
-			 	          [ Redirect-Max-Cache-Time ]
-			 	         *[ Proxy-Info ]
-			 	         *[ Route-Record ]
-			 	         *[ Failed-AVP ]
-			 	         *[ AVP ]
-			 	          		  
-	      */
-	    struct dict_object * cmd;
-	    struct dict_cmd_data data = { 
-		272, 					/* Code */
-		"Credit-Control-Answer", 		/* Name */
-		CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR,	/* Fixed flags */
-		CMD_FLAG_PROXIABLE 			/* Fixed flag values */
-	    };
-	    struct local_rules_definition rules[] = 
-		{ 	 
-		    { "Session-Id", RULE_FIXED_HEAD, -1, 1 },
-		    { "Result-Code", RULE_REQUIRED, -1, 1 },
-		    { "Origin-Host", RULE_REQUIRED, -1, 1 },
-		    { "Origin-Realm", RULE_REQUIRED, -1, 1 },
-		    { "Auth-Application-Id", RULE_REQUIRED, -1, 1 },
-		    { "CC-Request-Type", RULE_REQUIRED, -1, 1 },
-		    { "CC-Request-Number", RULE_REQUIRED, -1, 1 },
-		    { "User-Name", RULE_OPTIONAL, -1, 1 },
-		    { "CC-Session-Failover", RULE_OPTIONAL, -1, 1 },
-		    { "CC-Sub-Session-Id", RULE_OPTIONAL, -1, 1 },
-		    { "Acct-Multi-Session-Id", RULE_OPTIONAL, -1, 1 },
-		    { "Origin-State-Id", RULE_OPTIONAL, -1, 1 },
-		    { "Event-Timestamp", RULE_OPTIONAL, -1, 1 },
-		    { "Granted-Service-Unit", RULE_OPTIONAL, -1, 1 },
-		    { "Multiple-Services-Credit-Control", RULE_OPTIONAL, -1, -1 },
-		    { "Cost-Information", RULE_OPTIONAL, -1, 1 },
-		    { "Final-Unit-Indication", RULE_OPTIONAL, -1, 1 },
-		    { "Check-Balance-Result", RULE_OPTIONAL, -1, 1 },
-		    { "Credit-Control-Failure-Handling", RULE_OPTIONAL, -1, 1 },
-		    { "Direct-Debiting-Failure-Handling", RULE_OPTIONAL, -1, 1 },
-		    { "Validity-Time", RULE_OPTIONAL, -1, 1 },
-		    { "Redirect-Host", RULE_OPTIONAL, -1, -1 },
-		    { "Redirect-Host-Usage", RULE_OPTIONAL, -1, 1 },
-		    { "Redirect-Max-Cache-Time", RULE_OPTIONAL, -1, 1 },
-		    { "Proxy-Info", RULE_OPTIONAL, -1, -1 },
-		    { "Route-Record", RULE_OPTIONAL, -1, -1 },
-		    { "Failed-AVP", RULE_OPTIONAL, -1, -1 }
-		    /* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */
-		};
-
-	    CHECK_dict_new( DICT_COMMAND, &data, dcca, &cmd);
-	    PARSE_loc_rules( rules, cmd );
-	}
-    }
-    TRACE_DEBUG(INFO, "Extension 'Dictionary definitions for DCCA (rfc4006)' initialized");
-    return 0;
-}
-
-/* needs dict_nasreq for Filter-Id */
-EXTENSION_ENTRY("dict_dcca", dict_dcca_entry, "dict_nasreq");
+/****************
+ Contributed by: Konstantin Chekushin <koch@lmt.lv> and Thomas Klausner <tk@giga.or.at>
+ License: same as freeDiameter
+****************/
+
+
+/* 
+ * Dictionary definitions of objects specified in DCCA (rfc4006).
+ */
+#include <freeDiameter/extension.h>
+
+
+/* The content of this file follows the same structure as dict_base_proto.c */
+
+#define CHECK_dict_new( _type, _data, _parent, _ref )			\
+    CHECK_FCT(  fd_dict_new( fd_g_config->cnf_dict, (_type), (_data), (_parent), (_ref))  );
+
+#define CHECK_dict_search( _type, _criteria, _what, _result )		\
+    CHECK_FCT(  fd_dict_search( fd_g_config->cnf_dict, (_type), (_criteria), (_what), (_result), ENOENT) );
+
+struct local_rules_definition {
+    char 			*avp_name;
+    enum rule_position	position;
+    int 			min;
+    int			max;
+};
+
+#define RULE_ORDER( _position ) ((((_position) == RULE_FIXED_HEAD) || ((_position) == RULE_FIXED_TAIL)) ? 1 : 0 )
+
+#define PARSE_loc_rules( _rulearray, _parent) {				\
+	int __ar;							\
+	for (__ar=0; __ar < sizeof(_rulearray) / sizeof((_rulearray)[0]); __ar++) { \
+	    struct dict_rule_data __data = { NULL,			\
+					     (_rulearray)[__ar].position, \
+					     0,				\
+					     (_rulearray)[__ar].min,	\
+					     (_rulearray)[__ar].max};	\
+	    __data.rule_order = RULE_ORDER(__data.rule_position);	\
+	    CHECK_FCT(  fd_dict_search(					\
+			    fd_g_config->cnf_dict,			\
+			    DICT_AVP,					\
+			    AVP_BY_NAME,				\
+			    (_rulearray)[__ar].avp_name,		\
+			    &__data.rule_avp, 0 ) );			\
+	    if ( !__data.rule_avp ) {					\
+		TRACE_DEBUG(INFO, "AVP Not found: '%s'", (_rulearray)[__ar].avp_name );	\
+		return ENOENT;						\
+	    }								\
+	    CHECK_FCT_DO( fd_dict_new( fd_g_config->cnf_dict, DICT_RULE, &__data, _parent, NULL), \
+			  {						\
+			      TRACE_DEBUG(INFO, "Error on rule with AVP '%s'", \
+					  (_rulearray)[__ar].avp_name ); \
+			      return EINVAL;				\
+			  } );						\
+	}								\
+    }
+
+#define enumval_def_u32( _val_, _str_ )		\
+    { _str_, 		{ .u32 = _val_ }}
+
+#define enumval_def_os( _len_, _val_, _str_ )				\
+    { _str_, 		{ .os = { .data = (unsigned char *)_val_, .len = _len_ }}}
+
+
+static int dict_dcca_entry(char * conffile)
+{
+    struct dict_object * dcca;
+    TRACE_ENTRY("%p", conffile);		
+	
+    /* Applications section */
+    {
+	/* DCCA */
+	{
+	    struct dict_application_data data = {        4, "Diameter Credit Control Application" 			};
+	    CHECK_dict_new( DICT_APPLICATION, &data, NULL, &dcca);
+	}                                
+    }
+	
+    /* Result codes */
+    {
+        struct dict_object *ResultCodeType;
+        CHECK_dict_search(DICT_TYPE, TYPE_BY_NAME, "Enumerated*(Result-Code)", &ResultCodeType);
+
+        {
+            struct dict_enumval_data error_code = {"END_USER_SERVICE_DENIED",
+						   { .u32 = 4010}};
+            CHECK_dict_new(DICT_ENUMVAL, &error_code, ResultCodeType, NULL);
+        }
+        {
+            struct dict_enumval_data error_code = {"CREDIT_CONTROL_NOT_APPLICABLE",
+						   { .u32 = 4011}};
+            CHECK_dict_new(DICT_ENUMVAL, &error_code, ResultCodeType, NULL);
+        }
+
+    }
+
+
+	
+    /* AVP section */
+    {
+	struct dict_object * Address_type;
+	struct dict_object * UTF8String_type;
+	struct dict_object * DiameterIdentity_type;
+	struct dict_object * DiameterURI_type;
+	struct dict_object * Time_type;
+	struct dict_object * IPFilterRule_type;
+
+	CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Address", &Address_type);
+	CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "UTF8String", &UTF8String_type);
+	CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterIdentity", &DiameterIdentity_type);
+	CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "DiameterURI", &DiameterURI_type);
+	CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "Time", &Time_type);
+	CHECK_dict_search( DICT_TYPE, TYPE_BY_NAME, "IPFilterRule", &IPFilterRule_type);
+                
+                
+	/* CC-Correlation-Id */
+	{
+	    /* 
+	       OctetString. 
+	    */
+	    struct dict_avp_data    data = { 
+		411,                                    /* Code */
+		0,                                      /* Vendor */
+		"CC-Correlation-Id",                    /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_OCTETSTRING                    /* base type of data */
+	    };
+
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}
+                
+	/* CC-Input-Octets */
+	{
+	    /* 
+	       Unsigned64. 
+	    */
+	    struct dict_avp_data data = { 
+		412,                                    /* Code */
+		0,                                      /* Vendor */
+		"CC-Input-Octets",                      /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_UNSIGNED64                     /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}
+                
+	/* CC-Output-Octets */
+	{
+	    /* 
+	       Unsigned64. 
+	    */
+	    struct dict_avp_data data = { 
+		414,                                    /* Code */
+		0,                                      /* Vendor */
+		"CC-Output-Octets",                     /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_UNSIGNED64                     /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}
+                
+	/* CC-Request-Number */
+	{
+	    /* 
+	       Unsigned32. 
+	    */
+	    struct dict_avp_data data = { 
+		415,                                    /* Code */
+		0,                                      /* Vendor */
+		"CC-Request-Number",                    /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_UNSIGNED32                     /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}
+
+	/* CC-Request-Type */
+	{
+	    /* 
+	       Enumerated. 
+	    */
+
+	    struct dict_object              *type;
+	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(CC-Request-Type)", NULL, NULL, NULL };
+	    struct dict_enumval_data        t_1 = { "INITIAL_REQUEST", { .i32 = 1 }};
+	    struct dict_enumval_data        t_2 = { "UPDATE_REQUEST", { .i32 = 2 }};
+	    struct dict_enumval_data        t_3 = { "TERMINATION_REQUEST", { .i32 = 3 }};
+	    struct dict_enumval_data        t_4 = { "EVENT_REQUEST", { .i32 = 4 }};
+                  
+
+	    struct dict_avp_data    data = { 
+		416,                                    /* Code */
+		0,                                      /* Vendor */
+		"CC-Request-Type",                      /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_INTEGER32                      /* base type of data */
+	    };
+	    /* Create the Enumerated type, and then the AVP */
+	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL);
+	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
+	}
+                
+
+	/* CC-Service-Specific-Units */
+	{
+	    /* 
+	       Unsigned64. 
+	    */
+	    struct dict_avp_data data = { 
+		417,                                    /* Code */
+		0,                                      /* Vendor */
+		"CC-Service-Specific-Units",            /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_UNSIGNED64                     /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}
+   
+	/* CC-Session-Failover */
+	{
+	    /* 
+	       Enumerated. 
+	    */
+
+	    struct dict_object              *type;
+	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(CC-Session-Failover)" , NULL, NULL, NULL };
+	    struct dict_enumval_data        t_1 = { "FAILOVER_NOT_SUPPORTED", { .i32 = 0 }};
+	    struct dict_enumval_data        t_2 = { "FAILOVER_SUPPORTED", { .i32 = 1 }};
+                  
+
+	    struct dict_avp_data    data = { 
+		418,                                    /* Code */
+		0,                                      /* Vendor */
+		"CC-Session-Failover",                  /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_INTEGER32                      /* base type of data */
+	    };
+	    /* Create the Enumerated type, and then the AVP */
+	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);                  
+	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
+	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
+	}
+                
+	/* CC-Sub-Session-Id */
+	{
+	    /* 
+	       Unsigned64. 
+	    */
+	    struct dict_avp_data data = { 
+		419,                                    /* Code */
+		0,                                      /* Vendor */
+		"CC-Sub-Session-Id",                    /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_UNSIGNED64                     /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}
+                
+	/* CC-Time */
+	{
+	    /* 
+	       Unsigned32. 
+	    */
+	    struct dict_avp_data data = { 
+		420,                                    /* Code */
+		0,                                      /* Vendor */
+		"CC-Time",                              /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_UNSIGNED32                     /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}
+                                     
+	/* CC-Total-Octets */
+	{
+	    /* 
+	       Unsigned64. 
+	    */
+	    struct dict_avp_data data = { 
+		421,                                    /* Code */
+		0,                                      /* Vendor */
+		"CC-Total-Octets",                      /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_UNSIGNED64                     /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}
+                
+	/* CC-Unit-Type */
+	{
+	    /* 
+	       Enumerated. 
+	    */
+
+	    struct dict_object              *type;
+	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(CC-Unit-Type)" , NULL, NULL, NULL };
+	    struct dict_enumval_data        t_1 = { "TIME", { .i32 = 0 }};
+	    struct dict_enumval_data        t_2 = { "MONEY", { .i32 = 1 }};
+	    struct dict_enumval_data        t_3 = { "TOTAL-OCTETS", { .i32 = 2 }};
+	    struct dict_enumval_data        t_4 = { "INPUT-OCTETS", { .i32 = 3 }};
+	    struct dict_enumval_data        t_5 = { "OUTPUT-OCTETS", { .i32 = 4 }};
+	    struct dict_enumval_data        t_6 = { "SERVICE-SPECIFIC-UNITS", { .i32 = 5 }};
+                  
+
+	    struct dict_avp_data    data = { 
+		454,                                    /* Code */
+		0,                                      /* Vendor */
+		"CC-Unit-Type",                         /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_INTEGER32                      /* base type of data */
+	    };
+	    /* Create the Enumerated type, and then the AVP */
+	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);   
+	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); 
+	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL); 
+	    CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL); 
+	    CHECK_dict_new( DICT_ENUMVAL, &t_5 , type, NULL); 
+	    CHECK_dict_new( DICT_ENUMVAL, &t_6 , type, NULL); 
+	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
+	}
+
+	/* Check-Balance-Result */
+	{
+	    /* 
+	       Enumerated. 
+	    */
+
+	    struct dict_object              *type;
+	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Check-Balance-Result)" , NULL, NULL, NULL };
+	    struct dict_enumval_data        t_1 = { "ENOUGH_CREDIT", { .i32 = 0 }};
+	    struct dict_enumval_data        t_2 = { "NO_CREDIT", { .i32 = 1 }};
+                  
+
+	    struct dict_avp_data    data = { 
+		422,                                    /* Code */
+		0,                                      /* Vendor */
+		"Check-Balance-Result",                 /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_INTEGER32                      /* base type of data */
+	    };
+	    /* Create the Enumerated type, and then the AVP */
+	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);  
+	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); 
+	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
+	}
+                
+	/* Cost-Unit */
+	{
+	    /* 
+	       UTF8String. 
+	    */
+	    struct dict_avp_data    data = { 
+		424,                                    /* Code */
+		0,                                      /* Vendor */
+		"Cost-Unit",                            /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_OCTETSTRING                    /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL);
+	} 
+                
+	/* Credit-Control */
+	{
+	    /* 
+	       Enumerated. 
+	    */
+
+	    struct dict_object              *type;
+	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Credit-Control)" , NULL, NULL, NULL };
+	    struct dict_enumval_data        t_1 = { "CREDIT_AUTHORIZATION", { .i32 = 0 }};
+	    struct dict_enumval_data        t_2 = { "RE_AUTHORIZATION", { .i32 = 1 }};
+                  
+	    struct dict_avp_data    data = { 
+		426,                                    /* Code */
+		0,                                      /* Vendor */
+		"Credit-Control",                       /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_INTEGER32                      /* base type of data */
+	    };
+	    /* Create the Enumerated type, and then the AVP */
+	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_1, type, NULL); 
+	    CHECK_dict_new( DICT_ENUMVAL, &t_2, type, NULL);
+	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
+	}
+   
+	/* Credit-Control-Failure-Handling */
+	{
+	    /* 
+	       Enumerated. 
+	    */
+
+	    struct dict_object              *type;
+	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Credit-Control-Failure-Handling)" , NULL, NULL, NULL };
+	    struct dict_enumval_data        t_1 = { "TERMINATE", { .i32 = 0 }};
+	    struct dict_enumval_data        t_2 = { "CONTINUE", { .i32 = 1 }};
+	    struct dict_enumval_data        t_3 = { "RETRY_AND_TERMINATE", { .i32 = 2 }};
+                  
+	    struct dict_avp_data    data = { 
+		427,                                    /* Code */
+		0,                                      /* Vendor */
+		"Credit-Control-Failure-Handling",      /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_INTEGER32                      /* base type of data */
+	    };
+	    /* Create the Enumerated type, and then the AVP */
+	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);   
+	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
+	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
+	}
+
+	/* Currency-Code */
+	{
+	    /* 
+	       Unsigned32. 
+	    */
+	    struct dict_avp_data data = { 
+		425,                                    /* Code */
+		0,                                      /* Vendor */
+		"Currency-Code",                        /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_UNSIGNED32                     /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}
+
+	/* Direct-Debiting-Failure-Handling */
+	{
+	    /* 
+	       Enumerated. 
+	    */
+
+	    struct dict_object              *type;
+	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Direct-Debiting-Failure-Handling)" , NULL, NULL, NULL };
+	    struct dict_enumval_data        t_1 = { "TERMINATE_OR_BUFFER", { .i32 = 0 }};
+	    struct dict_enumval_data        t_2 = { "CONTINUE", { .i32 = 1 }};
+                  
+	    struct dict_avp_data    data = { 
+		428,                                    /* Code */
+		0,                                      /* Vendor */
+		"Direct-Debiting-Failure-Handling",     /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_INTEGER32                      /* base type of data */
+	    };
+	    /* Create the Enumerated type, and then the AVP */
+	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); 
+	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
+	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
+	}
+
+	/* Exponent */
+	{
+	    /* 
+	       Integer32. 
+	    */
+	    struct dict_avp_data data = { 
+		429,                                    /* Code */
+		0,                                      /* Vendor */
+		"Exponent",                             /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_INTEGER32                      /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}
+                
+	/* Final-Unit-Action */
+	{
+	    /* 
+	       Enumerated. 
+	    */
+
+	    struct dict_object              *type;
+	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Final-Unit-Action)" , NULL, NULL, NULL };
+	    struct dict_enumval_data        t_1 = { "TERMINATE", { .i32 = 0 }};
+	    struct dict_enumval_data        t_2 = { "REDIRECT", { .i32 = 1 }};
+	    struct dict_enumval_data        t_3 = { "RESTRICT_ACCESS", { .i32 = 2 }};
+                  
+	    struct dict_avp_data    data = { 
+		449,                                    /* Code */
+		0,                                      /* Vendor */
+		"Final-Unit-Action",                    /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_INTEGER32                      /* base type of data */
+	    };
+	    /* Create the Enumerated type, and then the AVP */
+	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);  
+	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); 
+	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL); 
+	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
+	}
+
+	/* G-S-U-Pool-Identifier */
+	{
+	    /* 
+	       Unsigned32. 
+	    */
+	    struct dict_avp_data data = { 
+		453,                                    /* Code */
+		0,                                      /* Vendor */
+		"G-S-U-Pool-Identifier",                /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_UNSIGNED32                     /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}
+                
+	/* Multiple-Services-Indicator */
+	{
+	    /* 
+	       Enumerated. 
+	    */
+
+	    struct dict_object              *type;
+	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Multiple-Services-Indicator)" , NULL, NULL, NULL };
+	    struct dict_enumval_data        t_1 = { "MULTIPLE_SERVICES_NOT_SUPPORTED", { .i32 = 0 }};
+	    struct dict_enumval_data        t_2 = { "MULTIPLE_SERVICES_SUPPORTED", { .i32 = 1 }};
+                  
+	    struct dict_avp_data    data = { 
+		455,                                    /* Code */
+		0,                                      /* Vendor */
+		"Multiple-Services-Indicator",          /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_INTEGER32                      /* base type of data */
+	    };
+	    /* Create the Enumerated type, and then the AVP */
+	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); 
+	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
+	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
+	}
+                
+	/* Rating-Group */
+	{
+	    /* 
+	       Unsigned32. 
+	    */
+	    struct dict_avp_data data = { 
+		432,                                    /* Code */
+		0,                                      /* Vendor */
+		"Rating-Group",                         /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_UNSIGNED32                     /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}
+                                      
+	/* Redirect-Address-Type */
+	{
+	    /* 
+	       Enumerated. 
+	    */
+
+	    struct dict_object              *type;
+	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Redirect-Address-Type)" , NULL, NULL, NULL };
+	    struct dict_enumval_data        t_1 = { "IPV4_ADDRESS", { .i32 = 0 }};
+	    struct dict_enumval_data        t_2 = { "IPV6_ADDRESS", { .i32 = 1 }};
+	    struct dict_enumval_data        t_3 = { "URL", { .i32 = 2 }};
+	    struct dict_enumval_data        t_4 = { "SIP_URI", { .i32 = 3 }};
+                  
+	    struct dict_avp_data    data = { 
+		433,                                    /* Code */
+		0,                                      /* Vendor */
+		"Redirect-Address-Type",                /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_INTEGER32                      /* base type of data */
+	    };
+	    /* Create the Enumerated type, and then the AVP */
+	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);  
+	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL); 
+	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL); 
+	    CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL); 
+	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
+	}           
+
+	/* Redirect-Server-Address */
+	{
+	    /* 
+	       UTF8String. 
+	    */
+	    struct dict_avp_data    data = { 
+		435,                                    /* Code */
+		0,                                      /* Vendor */
+		"Redirect-Server-Address",              /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_OCTETSTRING                    /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL);
+	}
+                
+	/* Requested-Action */
+	{
+	    /* 
+	       Enumerated. 
+	    */
+
+	    struct dict_object              *type;
+	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Requested-Action)" , NULL, NULL, NULL };
+	    struct dict_enumval_data        t_1 = { "DIRECT_DEBITING", { .i32 = 0 }};
+	    struct dict_enumval_data        t_2 = { "REFUND_ACCOUNT", { .i32 = 1 }};
+	    struct dict_enumval_data        t_3 = { "CHECK_BALANCE", { .i32 = 2 }};
+	    struct dict_enumval_data        t_4 = { "PRICE_ENQUIRY", { .i32 = 3 }};
+                  
+	    struct dict_avp_data    data = { 
+		436,                                    /* Code */
+		0,                                      /* Vendor */
+		"Requested-Action",                     /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_INTEGER32                      /* base type of data */
+	    };
+	    /* Create the Enumerated type, and then the AVP */
+	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); 
+	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL);
+	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
+	}
+                                    
+	/* Restriction-Filter-Rule */
+	{
+	    /* 
+	       IPFiltrRule. 
+	    */
+	    struct dict_avp_data    data = { 
+		438,                                    /* Code */
+		0,                                      /* Vendor */
+		"Restriction-Filter-Rule",              /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_OCTETSTRING                    /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , IPFilterRule_type, NULL);
+	}
+	/*Service-Context-Id  */
+	{
+	    /* 
+	       UTF8String. 
+	    */
+	    struct dict_avp_data    data = { 
+		461,                                    /* Code */
+		0,                                      /* Vendor */
+		"Service-Context-Id",                   /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_OCTETSTRING                    /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL);
+	}
+
+	/* Service-Identifier */
+	{
+	    /* 
+	       Unsigned32. 
+	    */
+	    struct dict_avp_data data = { 
+		439,                                    /* Code */
+		0,                                      /* Vendor */
+		"Service-Identifier",                   /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_UNSIGNED32                     /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}                       
+                               
+	/* Service-Parameter-Type */
+	{
+	    /* 
+	       Unsigned32. 
+	    */
+	    struct dict_avp_data data = { 
+		441,                                    /* Code */
+		0,                                      /* Vendor */
+		"Service-Parameter-Type",               /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_UNSIGNED32                     /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}
+                
+	/* Service-Parameter-Value */
+	{
+	    /* 
+	       OctetString. 
+	    */
+	    struct dict_avp_data data = { 
+		442,                                    /* Code */
+		0,                                      /* Vendor */
+		"Service-Parameter-Value",              /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_OCTETSTRING                    /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}
+
+	/* Subscription-Id-Data */
+	{
+	    /* 
+	       UTF8String. 
+	    */
+	    struct dict_avp_data    data = { 
+		444,                                    /* Code */
+		0,                                      /* Vendor */
+		"Subscription-Id-Data",                 /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_OCTETSTRING                    /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , UTF8String_type, NULL);
+	}            
+    
+	/* Subscription-Id-Type */
+	{
+	    /* 
+	       Enumerated. 
+	    */
+
+	    struct dict_object              *type;
+	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Subscription-Id-Type)" , NULL, NULL, NULL };
+	    struct dict_enumval_data        t_1 = { "END_USER_E164", { .i32 = 0 }};
+	    struct dict_enumval_data        t_2 = { "END_USER_IMSI", { .i32 = 1 }};
+	    struct dict_enumval_data        t_3 = { "END_USER_SIP_URI", { .i32 = 2 }};
+	    struct dict_enumval_data        t_4 = { "END_USER_NAI", { .i32 = 3 }};
+                  
+	    struct dict_avp_data    data = { 
+		450,                                    /* Code */
+		0,                                      /* Vendor */
+		"Subscription-Id-Type",                 /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_INTEGER32                      /* base type of data */
+	    };
+	    /* Create the Enumerated type, and then the AVP */
+	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); 
+	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_4 , type, NULL);
+	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
+	}
+                
+	/* Tariff-Change-Usage */
+	{
+	    /* 
+	       Enumerated. 
+	    */
+
+	    struct dict_object              *type;
+	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(Tariff-Change-Usage)" , NULL, NULL, NULL };
+	    struct dict_enumval_data        t_1 = { "UNIT_BEFORE_TARIFF_CHANGE", { .i32 = 0 }};
+	    struct dict_enumval_data        t_2 = { "UNIT_AFTER_TARIFF_CHANGE", { .i32 = 1 }};
+	    struct dict_enumval_data        t_3 = { "UNIT_INDETERMINATE", { .i32 = 2 }};
+                  
+	    struct dict_avp_data    data = { 
+		452,                                    /* Code */
+		0,                                      /* Vendor */
+		"Tariff-Change-Usage",                  /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_INTEGER32                      /* base type of data */
+	    };
+	    /* Create the Enumerated type, and then the AVP */
+	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL); 
+	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
+	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
+	}
+                
+	/* Tariff-Time-Change */
+	{
+	    /*
+	      Time. 
+	    */
+	    struct dict_avp_data data = { 
+		451,                                    /* Code */
+		0,                                      /* Vendor */
+		"Tariff-Time-Change",                   /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_OCTETSTRING                    /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , Time_type, NULL);
+	}
+
+	/* User-Equipment-Info-Type */
+	{
+	    /* 
+	       Enumerated. 
+	    */
+
+	    struct dict_object              *type;
+	    struct dict_type_data           tdata = { AVP_TYPE_INTEGER32, "Enumerated(User-Equipment-Info-Type)" , NULL, NULL, NULL };
+	    struct dict_enumval_data        t_1 = { "IMEISV", { .i32 = 0 }};
+	    struct dict_enumval_data        t_2 = { "MAC", { .i32 = 1 }};
+	    struct dict_enumval_data        t_3 = { "EUI64", { .i32 = 2 }};
+                  
+	    struct dict_avp_data    data = { 
+		459,                                    /* Code */
+		0,                                      /* Vendor */
+		"User-Equipment-Info-Type",             /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_INTEGER32                      /* base type of data */
+	    };
+	    /* Create the Enumerated type, and then the AVP */
+	    CHECK_dict_new( DICT_TYPE, &tdata , NULL, &type);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_1 , type, NULL);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_2 , type, NULL);
+	    CHECK_dict_new( DICT_ENUMVAL, &t_3 , type, NULL);
+	    CHECK_dict_new( DICT_AVP, &data , type, NULL);
+	}                           
+   
+	/* User-Equipment-Info-Value */
+	{
+	    /* 
+	       OctetString. 
+	    */
+	    struct dict_avp_data data = { 
+		460,                                    /* Code */
+		0,                                      /* Vendor */
+		"User-Equipment-Info-Value",            /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_OCTETSTRING                    /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}
+
+	/* Value-Digits */
+	{
+	    /* 
+	       Integer64. 
+	    */
+	    struct dict_avp_data data = { 
+		447,                                    /* Code */
+		0,                                      /* Vendor */
+		"Value-Digits",                         /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_INTEGER64                      /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}                         
+                 
+	/* Validity-Time */
+	{
+	    /* 
+	       Unsigned32. 
+	    */
+	    struct dict_avp_data data = { 
+		448,                                    /* Code */
+		0,                                      /* Vendor */
+		"Validity-Time",                        /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_UNSIGNED32                     /* base type of data */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, NULL);
+	}
+
+
+	/* Grouped AVPs below since they have dependencies on types above */
+
+	/* Redirect-Server */
+	{
+	    /*
+	      Grouped
+	    */
+	    struct dict_object * avp;
+	    struct dict_avp_data data = {
+		434,                                    /* Code */
+		0,                                      /* Vendor */
+		"Redirect-Server",                      /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_GROUPED                        /* base type of data */
+	    };
+	    struct local_rules_definition rules[] = {
+		{  "Redirect-Address-Type",	RULE_REQUIRED,	-1, 1 },
+		{  "Redirect-Server-Address",	RULE_REQUIRED,	-1, 1 }
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
+	    PARSE_loc_rules( rules, avp );
+	}
+
+	/* Service-Parameter-Info */
+	{
+	    /*
+	      Grouped
+	    */
+	    struct dict_object * avp;
+	    struct dict_avp_data data = {
+		440,                                    /* Code */
+		0,                                      /* Vendor */
+		"Service-Parameter-Info",               /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_GROUPED                        /* base type of data */
+	    };
+	    struct local_rules_definition rules[] = {
+		{  "Service-Parameter-Type",	RULE_REQUIRED,	-1, 1 },
+		{  "Service-Parameter-Value",	RULE_REQUIRED,	-1, 1 }
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
+	    PARSE_loc_rules( rules, avp );
+	}                        
+
+	/* Subscription-Id */
+	{
+	    /*
+	      Grouped
+	    */
+	    struct dict_object * avp;
+	    struct dict_avp_data data = {
+		443,                                    /* Code */
+		0,                                      /* Vendor */
+		"Subscription-Id",                      /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_GROUPED                        /* base type of data */
+	    };
+	    struct local_rules_definition rules[] = {
+		{  "Subscription-Id-Type",	RULE_REQUIRED,	-1, 1 },
+		{  "Subscription-Id-Data",	RULE_REQUIRED,	-1, 1 }
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
+	    PARSE_loc_rules( rules, avp );
+	}
+                                     
+	/* Unit-Value */
+	{
+	    /*
+	      Grouped
+	    */
+	    struct dict_object * avp;
+	    struct dict_avp_data data = {
+		445,                                    /* Code */
+		0,                                      /* Vendor */
+		"Unit-Value",                           /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_GROUPED                        /* base type of data */
+	    };
+	    struct local_rules_definition rules[] = {
+		{  "Value-Digits",	RULE_REQUIRED,	-1, 1 },
+		{  "Exponent",		RULE_OPTIONAL,	-1, 1 }
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
+	    PARSE_loc_rules( rules, avp );
+	}
+
+	/* User-Equipment-Info */
+	{
+	    /*
+	      Grouped
+	    */
+	    struct dict_object * avp;
+	    struct dict_avp_data data = {
+		458,                                    /* Code */
+		0,                                      /* Vendor */
+		"User-Equipment-Info",                  /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_GROUPED                        /* base type of data */
+	    };
+	    struct local_rules_definition rules[] = {
+		{  "User-Equipment-Info-Type",	RULE_REQUIRED,	-1, 1 },
+		{  "User-Equipment-Info-Value",	RULE_REQUIRED,	-1, 1 }
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
+	    PARSE_loc_rules( rules, avp );
+	}
+
+	/* grouped AVPs using grouped AVPs */ 
+
+	/* CC-Money */
+	{
+	    /*
+	      Grouped
+	    */
+	    struct dict_object * avp;
+	    struct dict_avp_data data = {
+		413,                                    /* Code */
+		0,                                      /* Vendor */
+		"CC-Money",                             /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_GROUPED                        /* base type of data */
+	    };
+	    struct local_rules_definition rules[] = {
+		{  "Unit-Value",	RULE_REQUIRED,	-1, 1 },
+		{  "Currency-Code",	RULE_OPTIONAL,	-1, 1 }
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
+	    PARSE_loc_rules( rules, avp );
+	}
+
+	/* Cost-Information */
+	{
+	    /*
+	      Grouped
+	    */
+	    struct dict_object * avp;
+	    struct dict_avp_data data = {
+		423,                                    /* Code */
+		0,                                      /* Vendor */
+		"Cost-Information",                     /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_GROUPED                        /* base type of data */
+	    };
+	    struct local_rules_definition rules[] = {
+		{  "Unit-Value",	RULE_REQUIRED,	-1, 1 },
+		{  "Currency-Code",	RULE_REQUIRED,	-1, 1 },
+		{  "Cost-Unit",		RULE_OPTIONAL,	-1, 1 }
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
+	    PARSE_loc_rules( rules, avp );
+	}
+
+	/* Final-Unit-Indication */
+	{
+	    /*
+	      Grouped
+	    */
+	    struct dict_object * avp;
+	    struct dict_avp_data data = {
+		430,                                    /* Code */
+		0,                                      /* Vendor */
+		"Final-Unit-Indication",                /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_GROUPED                        /* base type of data */
+	    };
+	    struct local_rules_definition rules[] = {
+		{  "Final-Unit-Action",		RULE_REQUIRED,	-1, 1 },
+		{  "Restriction-Filter-Rule",	RULE_OPTIONAL,	-1, -1 },
+		{  "Filter-Id",			RULE_OPTIONAL,	-1, -1 },
+		{  "Redirect-Server",		RULE_OPTIONAL,	-1, 1 },
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
+	    PARSE_loc_rules( rules, avp );
+	}
+                
+	/* Granted-Service-Unit */
+	{
+	    /*
+	      Grouped
+	    */
+	    struct dict_object * avp;
+	    struct dict_avp_data data = {
+		431,                                    /* Code */
+		0,                                      /* Vendor */
+		"Granted-Service-Unit",                 /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_GROUPED                        /* base type of data */
+	    };
+	    struct local_rules_definition rules[] = {
+		{  "Tariff-Time-Change",	RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Time",	       		RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Money",			RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Total-Octets",		RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Input-Octets",		RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Output-Octets",		RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Service-Specific-Units",	RULE_OPTIONAL,	-1, 1 }
+		/* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
+	    PARSE_loc_rules( rules, avp );
+	}
+
+	/* G-S-U-Pool-Reference */
+	{
+	    /*
+	      Grouped
+	    */
+	    struct dict_object * avp;
+	    struct dict_avp_data data = {
+		457,                                    /* Code */
+		0,                                      /* Vendor */
+		"G-S-U-Pool-Reference",                 /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_GROUPED                        /* base type of data */
+	    };
+	    struct local_rules_definition rules[] = {
+		{  "G-S-U-Pool-Identifier",	RULE_REQUIRED,	-1, 1 },
+		{  "CC-Unit-Type",		RULE_REQUIRED,	-1, 1 },
+		{  "Unit-Value",		RULE_REQUIRED,	-1, 1 }
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
+	    PARSE_loc_rules( rules, avp );
+	}                     
+
+	/* Requested-Service-Unit */
+	{
+	    /*
+	      Grouped
+	    */
+	    struct dict_object * avp;
+	    struct dict_avp_data data = {
+		437,                                    /* Code */
+		0,                                      /* Vendor */
+		"Requested-Service-Unit",               /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_GROUPED                        /* base type of data */
+	    };
+	    struct local_rules_definition rules[] = {
+		{  "CC-Time",	       		RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Money",			RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Total-Octets",		RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Input-Octets",		RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Output-Octets",		RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Service-Specific-Units",	RULE_OPTIONAL,	-1, 1 }
+		/* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
+	    PARSE_loc_rules( rules, avp );
+	}
+
+	/* Used-Service-Unit */
+	{
+	    /*
+	      Grouped
+	    */
+	    struct dict_object * avp;
+	    struct dict_avp_data data = {
+		446,                                    /* Code */
+		0,                                      /* Vendor */
+		"Used-Service-Unit",                    /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_GROUPED                        /* base type of data */
+	    };
+	    struct local_rules_definition rules[] = {
+		{  "Tariff-Change-Usage",	RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Time",	       		RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Money",			RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Total-Octets",		RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Input-Octets",		RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Output-Octets",		RULE_OPTIONAL,	-1, 1 },
+		{  "CC-Service-Specific-Units",	RULE_OPTIONAL,	-1, 1 }
+		/* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
+	    PARSE_loc_rules( rules, avp );
+	}
+
+	/* at least three levels of grouping */
+	/* Multiple-Services-Credit-Control */
+	{
+	    /*
+	      Grouped
+	    */
+	    struct dict_object * avp;
+	    struct dict_avp_data data = {
+		456,                                    /* Code */
+		0,                                      /* Vendor */
+		"Multiple-Services-Credit-Control",     /* Name */
+		AVP_FLAG_VENDOR | AVP_FLAG_MANDATORY,   /* Fixed flags */
+		AVP_FLAG_MANDATORY,                     /* Fixed flag values */
+		AVP_TYPE_GROUPED                        /* base type of data */
+	    };
+	    struct local_rules_definition rules[] = {
+		{  "Granted-Service-Unit",	RULE_OPTIONAL,	-1, 1 },
+		{  "Requested-Service-Unit",	RULE_OPTIONAL,	-1, 1 },
+		{  "Used-Service-Unit",		RULE_OPTIONAL,	-1, -1 },
+		{  "Tariff-Change-Usage",	RULE_OPTIONAL,	-1, 1 },
+		{  "Service-Identifier",	RULE_OPTIONAL,	-1, -1 },
+		{  "Rating-Group",		RULE_OPTIONAL,	-1, 1 },
+		{  "G-S-U-Pool-Reference",	RULE_OPTIONAL,	-1, -1 },
+		{  "Validity-Time",		RULE_OPTIONAL,	-1, 1 },
+		{  "Result-Code",		RULE_OPTIONAL,	-1, 1 },
+		{  "Final-Unit-Indication",	RULE_OPTIONAL,	-1, 1 }
+		/* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */
+	    };
+	    CHECK_dict_new( DICT_AVP, &data , NULL, &avp);
+	    PARSE_loc_rules( rules, avp );
+	}
+                
+
+    }
+
+
+    /* Commands section */
+    {
+	/* Credit-Control-Request (CCR) Command */
+	{
+	    /*
+	      From RFC 4006:
+
+	      3.1.  Credit-Control-Request (CCR) Command
+		  
+	      The Credit-Control-Request message (CCR) is indicated by the
+	      command-code field being set to 272 and the 'R' bit being set in the
+	      Command Flags field.  It is used between the Diameter credit-control
+	      client and the credit-control server to request credit authorization
+	      for a given service.
+		  
+	      The Auth-Application-Id MUST be set to the value 4, indicating the
+	      Diameter credit-control application.
+		  
+	      Message Format
+		  
+	      <Credit-Control-Request> ::= < Diameter Header: 272, REQ, PXY >
+			 	          < Session-Id >
+			 	          { Origin-Host }
+			 	          { Origin-Realm }
+			 	          { Destination-Realm }
+			 	          { Auth-Application-Id }
+			 	          { Service-Context-Id }
+			 	          { CC-Request-Type }
+			 	          { CC-Request-Number }
+			 	          [ Destination-Host ]
+			 	          [ User-Name ]
+			 	          [ CC-Sub-Session-Id ]
+			 	          [ Acct-Multi-Session-Id ]
+			 	          [ Origin-State-Id ]
+			 	          [ Event-Timestamp ]
+			 	         *[ Subscription-Id ]
+			 	          [ Service-Identifier ]
+			 	          [ Termination-Cause ]
+			 	          [ Requested-Service-Unit ]
+			 	          [ Requested-Action ]
+			 	         *[ Used-Service-Unit ]
+			 	          [ Multiple-Services-Indicator ]
+			 	         *[ Multiple-Services-Credit-Control ]
+			 	         *[ Service-Parameter-Info ]
+			 	          [ CC-Correlation-Id ]
+			 	          [ User-Equipment-Info ]
+			 	         *[ Proxy-Info ]
+			 	         *[ Route-Record ]
+			 	         *[ AVP ]
+			 	          		  
+	      10.1.  Credit-Control AVP Table
+		  
+	      The table in this section is used to represent which credit-control
+	      applications specific AVPs defined in this document are to be present
+	      in the credit-control messages.
+		  
+	      +-----------+
+	      |  Command  |
+	      |   Code    |
+	      |-----+-----+
+	      Attribute Name                | CCR | CCA |
+	      ------------------------------|-----+-----+
+	      Acct-Multi-Session-Id         | 0-1 | 0-1 |
+	      Auth-Application-Id           | 1   | 1   |
+	      CC-Correlation-Id             | 0-1 | 0   |
+	      CC-Session-Failover           | 0   | 0-1 |
+	      CC-Request-Number             | 1   | 1   |
+	      CC-Request-Type               | 1   | 1   |
+	      CC-Sub-Session-Id             | 0-1 | 0-1 |
+	      Check-Balance-Result          | 0   | 0-1 |
+	      Cost-Information              | 0   | 0-1 |
+	      Credit-Control-Failure-       | 0   | 0-1 |
+	      Handling                      |     |     |
+	      Destination-Host              | 0-1 | 0   |
+	      Destination-Realm             | 1   | 0   |
+	      Direct-Debiting-Failure-      | 0   | 0-1 |
+	      Handling                      |     |     |
+	      Event-Timestamp               | 0-1 | 0-1 |
+	      Failed-AVP                    | 0   | 0+  |
+	      Final-Unit-Indication         | 0   | 0-1 |
+	      Granted-Service-Unit          | 0   | 0-1 |
+	      Multiple-Services-Credit-     | 0+  | 0+  |
+	      Control                       |     |     |
+	      Multiple-Services-Indicator   | 0-1 | 0   |
+	      Origin-Host                   | 1   | 1   |
+	      Origin-Realm                  | 1   | 1   |
+	      Origin-State-Id               | 0-1 | 0-1 |
+	      Proxy-Info                    | 0+  | 0+  |
+	      Redirect-Host                 | 0   | 0+  |
+	      Redirect-Host-Usage           | 0   | 0-1 |
+	      Redirect-Max-Cache-Time       | 0   | 0-1 |
+	      Requested-Action              | 0-1 | 0   |
+	      Requested-Service-Unit        | 0-1 | 0   |
+	      Route-Record                  | 0+  | 0+  |
+	      Result-Code                   | 0   | 1   |
+	      Service-Context-Id            | 1   | 0   |
+	      Service-Identifier            | 0-1 | 0   |
+	      Service-Parameter-Info        | 0+  | 0   |
+	      Session-Id                    | 1   | 1   |
+	      Subscription-Id               | 0+  | 0   |
+	      Termination-Cause             | 0-1 | 0   |
+	      User-Equipment-Info           | 0-1 | 0   |
+	      Used-Service-Unit             | 0+  | 0   |
+	      User-Name                     | 0-1 | 0-1 |
+	      Validity-Time                 | 0   | 0-1 |
+	      ------------------------------|-----+-----+
+		  
+
+	    */
+	    struct dict_object * cmd;
+	    struct dict_cmd_data data = { 
+		272, 					/* Code */
+		"Credit-Control-Request", 		/* Name */
+		CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE, 	/* Fixed flags */
+		CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE 			/* Fixed flag values */
+	    };
+	    struct local_rules_definition rules[] = 
+		{ 	 
+		    { "Session-Id", RULE_FIXED_HEAD, -1, 1 },
+		    { "Origin-Host", RULE_REQUIRED, -1, 1 },
+		    { "Origin-Realm", RULE_REQUIRED, -1, 1 },
+		    { "Destination-Realm", RULE_REQUIRED, -1, 1 },
+		    { "Auth-Application-Id", RULE_REQUIRED, -1, 1 },
+		    { "Service-Context-Id", RULE_REQUIRED, -1, 1 },
+		    { "CC-Request-Type", RULE_REQUIRED, -1, 1 },
+		    { "CC-Request-Number", RULE_REQUIRED, -1, 1 },
+		    { "Destination-Host", RULE_OPTIONAL, -1, 1 },
+		    { "User-Name", RULE_OPTIONAL, -1, 1 },
+		    { "CC-Sub-Session-Id", RULE_OPTIONAL, -1, 1 },
+		    { "Acct-Multi-Session-Id", RULE_OPTIONAL, -1, 1 },
+		    { "Origin-State-Id", RULE_OPTIONAL, -1, 1 },
+		    { "Event-Timestamp", RULE_OPTIONAL, -1, 1 },
+		    { "Subscription-Id", RULE_OPTIONAL, -1, -1 },
+		    { "Service-Identifier", RULE_OPTIONAL, -1, 1 },
+		    { "Termination-Cause", RULE_OPTIONAL, -1, 1 },
+		    { "Requested-Service-Unit", RULE_OPTIONAL, -1, 1 },
+		    { "Requested-Action", RULE_OPTIONAL, -1, 1 },
+		    { "Used-Service-Unit", RULE_OPTIONAL, -1, -1 },
+		    { "Multiple-Services-Indicator", RULE_OPTIONAL, -1, 1 },
+		    { "Multiple-Services-Credit-Control", RULE_OPTIONAL, -1, -1 },
+		    { "Service-Parameter-Info", RULE_OPTIONAL, -1, -1 },
+		    { "CC-Correlation-Id", RULE_OPTIONAL, -1, 1 },
+		    { "User-Equipment-Info", RULE_OPTIONAL, -1, 1 },
+		    { "Proxy-Info", RULE_OPTIONAL, -1, -1 },
+		    { "Route-Record", RULE_OPTIONAL, -1, -1 }
+		    /* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */
+		};
+
+	    CHECK_dict_new( DICT_COMMAND, &data, dcca, &cmd);
+	    PARSE_loc_rules( rules, cmd );
+	}
+
+	/* Credit-Control-Answer (CCA) Command */
+	{
+	    /*
+	      From RFC 4006:
+	      3.2.  Credit-Control-Answer (CCA) Command
+		  
+	      The Credit-Control-Answer message (CCA) is indicated by the command-
+	      code field being set to 272 and the 'R' bit being cleared in the
+	      Command Flags field.  It is used between the credit-control server
+	      and the Diameter credit-control client to acknowledge a Credit-
+	      Control-Request command.
+		  
+	      Message Format
+		  
+	      <Credit-Control-Answer> ::= < Diameter Header: 272, PXY >
+			 	          < Session-Id >
+			 	          { Result-Code }
+			 	          { Origin-Host }
+			 	          { Origin-Realm }
+			 	          { Auth-Application-Id }
+			 	          { CC-Request-Type }
+			 	          { CC-Request-Number }
+			 	          [ User-Name ]
+			 	          [ CC-Session-Failover ]
+			 	          [ CC-Sub-Session-Id ]
+			 	          [ Acct-Multi-Session-Id ]
+			 	          [ Origin-State-Id ]
+			 	          [ Event-Timestamp ]
+			 	          [ Granted-Service-Unit ]
+			 	         *[ Multiple-Services-Credit-Control ]
+			 	          [ Cost-Information]
+			 	          [ Final-Unit-Indication ]
+			 	          [ Check-Balance-Result ]
+			 	          [ Credit-Control-Failure-Handling ]
+			 	          [ Direct-Debiting-Failure-Handling ]
+			 	          [ Validity-Time]
+			 	         *[ Redirect-Host]
+			 	          [ Redirect-Host-Usage ]
+			 	          [ Redirect-Max-Cache-Time ]
+			 	         *[ Proxy-Info ]
+			 	         *[ Route-Record ]
+			 	         *[ Failed-AVP ]
+			 	         *[ AVP ]
+			 	          		  
+	      */
+	    struct dict_object * cmd;
+	    struct dict_cmd_data data = { 
+		272, 					/* Code */
+		"Credit-Control-Answer", 		/* Name */
+		CMD_FLAG_REQUEST | CMD_FLAG_PROXIABLE | CMD_FLAG_ERROR,	/* Fixed flags */
+		CMD_FLAG_PROXIABLE 			/* Fixed flag values */
+	    };
+	    struct local_rules_definition rules[] = 
+		{ 	 
+		    { "Session-Id", RULE_FIXED_HEAD, -1, 1 },
+		    { "Result-Code", RULE_REQUIRED, -1, 1 },
+		    { "Origin-Host", RULE_REQUIRED, -1, 1 },
+		    { "Origin-Realm", RULE_REQUIRED, -1, 1 },
+		    { "Auth-Application-Id", RULE_REQUIRED, -1, 1 },
+		    { "CC-Request-Type", RULE_REQUIRED, -1, 1 },
+		    { "CC-Request-Number", RULE_REQUIRED, -1, 1 },
+		    { "User-Name", RULE_OPTIONAL, -1, 1 },
+		    { "CC-Session-Failover", RULE_OPTIONAL, -1, 1 },
+		    { "CC-Sub-Session-Id", RULE_OPTIONAL, -1, 1 },
+		    { "Acct-Multi-Session-Id", RULE_OPTIONAL, -1, 1 },
+		    { "Origin-State-Id", RULE_OPTIONAL, -1, 1 },
+		    { "Event-Timestamp", RULE_OPTIONAL, -1, 1 },
+		    { "Granted-Service-Unit", RULE_OPTIONAL, -1, 1 },
+		    { "Multiple-Services-Credit-Control", RULE_OPTIONAL, -1, -1 },
+		    { "Cost-Information", RULE_OPTIONAL, -1, 1 },
+		    { "Final-Unit-Indication", RULE_OPTIONAL, -1, 1 },
+		    { "Check-Balance-Result", RULE_OPTIONAL, -1, 1 },
+		    { "Credit-Control-Failure-Handling", RULE_OPTIONAL, -1, 1 },
+		    { "Direct-Debiting-Failure-Handling", RULE_OPTIONAL, -1, 1 },
+		    { "Validity-Time", RULE_OPTIONAL, -1, 1 },
+		    { "Redirect-Host", RULE_OPTIONAL, -1, -1 },
+		    { "Redirect-Host-Usage", RULE_OPTIONAL, -1, 1 },
+		    { "Redirect-Max-Cache-Time", RULE_OPTIONAL, -1, 1 },
+		    { "Proxy-Info", RULE_OPTIONAL, -1, -1 },
+		    { "Route-Record", RULE_OPTIONAL, -1, -1 },
+		    { "Failed-AVP", RULE_OPTIONAL, -1, -1 }
+		    /* plus any additional AVPs { "AVP", RULE_OPTIONAL, -1, -1 } */
+		};
+
+	    CHECK_dict_new( DICT_COMMAND, &data, dcca, &cmd);
+	    PARSE_loc_rules( rules, cmd );
+	}
+    }
+    TRACE_DEBUG(INFO, "Extension 'Dictionary definitions for DCCA (rfc4006)' initialized");
+    return 0;
+}
+
+/* needs dict_nasreq for Filter-Id */
+EXTENSION_ENTRY("dict_dcca", dict_dcca_entry, "dict_nasreq");
"Welcome to our mercurial repository"