{

"diameter_agent": {
	"request_processors": [
		{
			"id": "VoiceInit",
			"filters": [
				"*string:~*vars.*cmd:CCR", 
				"*string:~*req.CC-Request-Type:1",
				"*string:~*req.Service-Context-Id:voice"
			],
			"flags": ["*authorize", "*accounts"],
			"request_fields":[
				{"tag": "ToR", "path": "*cgreq.ToR", "type": "*constant", "value": "*voice"},
				{
					"tag": "OriginID", "path": "*cgreq.OriginID",
					"type": "*variable", "mandatory": true, 
					"value": "~*req.Service-Information.IMS-Information.User-Session-Id"
				},
				{
					"tag": "OriginHost", "path": "*cgreq.OriginHost",
					"type": "*variable", "mandatory": true, 
					"value": "~*vars.OriginHost"
				},
				{
					"tag": "Source", "path": "*cgreq.Source",
					"type": "*constant", "value": "DiameterAgent"
				},
				{
					"tag": "RequestType", "path": "*cgreq.RequestType",
					"type": "*constant", "value": "*prepaid"
				},
				{
					"tag": "Account", "path": "*cgreq.Account",
					"type": "*variable", "mandatory": true,
					"value": "~*req.Service-Information.IMS-Information.Calling-Party-Address[0]:s/tel:\\+(\\d+)/${1}/"
				},
				{
					"tag": "Account", "path": "*cgreq.Account",
					"filters":["*string:~*req.Service-Information.IMS-Information.Role-Of-Node:2"],
					"type": "*variable", "mandatory": true,  
					"value": "~*req.Service-Information.IMS-Information.Requested-Party-Address:s/tel:(\\+?\\d+)/${1}/:s/sip:(\\+?\\d+)/${1}/:s/^\\+49(\\d+)/int${1}/:s/^0049(\\d+)/int${1}/:s/^49(\\d+)/int${1}/:s/^00(\\d+)/+${1}/:s/^[\\+]?(\\d+)/int${1}/:s/int(\\d+)/49${1}/"
				},
				{
					"tag": "Destination", "path": "*cgreq.Destination",
					"type": "*variable", "mandatory": true,
					"value": "~*req.Service-Information.IMS-Information.Called-Party-Address:s/tel:(\\+?\\d+)/${1}/:s/^\\+49(\\d+)/int${1}/:s/^0049(\\d+)/int${1}/:s/^49(\\d+)/int${1}/:s/^00(\\d+)/+${1}/:s/^[\\+]?(\\d+)/int${1}/:s/int(\\d+)/+49${1}/"
				},
				{
					"tag": "Destination", "path": "*cgreq.Destination",
					"filters": [
						"*prefix:~*req.Service-Information.IMS-Information.Called-Party-Address:tel:+",
						"*notprefix:~*req.Service-Information.IMS-Information.Called-Party-Address:tel:+49"
					],
					"type": "*variable", "mandatory": true,
					"value": "~*req.Service-Information.IMS-Information.Called-Party-Address:s/tel:(\\+?\\d+)/${1}/:s/^\\+(\\d+)/int${1}/:s/^[\\+]?(\\d+)/int${1}/:s/int(\\d+)/+00${1}/"
				},
				{
					"tag": "SetupTime", "path": "*cgreq.SetupTime",
					"type": "*variable", "mandatory": true, 
					"value": "~*req.Event-Timestamp"
				},
				{
					"tag": "SetupTime", "path": "*cgreq.SetupTime",
					"type": "*variable", "mandatory": true,
					"filters": ["*exists:~*req.Service-Information.IMS-Information.Time-Stamps.SIP-Request-Timestamp:"],
					"value": "~*req.Service-Information.IMS-Information.Time-Stamps.SIP-Request-Timestamp"
				},
				{
					"tag": "Usage", "path": "*cgreq.Usage",
					"type": "*constant", "mandatory": true, 
					"value": "10s"
				},
				{
					"tag": "IMSI", "path": "*cgreq.IMSI",
					"type": "*variable", "value": "~*req.User-Name"
				}
			],
			"reply_fields":[
				{"tag": "CCATemplate", "type": "*template", "value": "*cca"},
				{
					"tag": "GrantedUnitsError",  
					"path": "*rep.Granted-Service-Unit.CC-Time",
					"filters": ["*notempty:~*cgrep.Error:"],
					"type": "*constant", "blocker": true,
					"value": "0"
				},
				{
					"tag": "GrantedUnitsUnlimited",
					"path": "*rep.Granted-Service-Unit.CC-Time",
						"filters": ["*eq:~*cgrep.MaxUsage:-1"],
						"blocker": true,
					"type": "*constant", "value": "10"},
				{"tag": "GrantedUnits", "path": "*rep.Granted-Service-Unit.CC-Time",
					"type": "*variable", "mandatory": true,
					"value": "~*cgrep.MaxUsage{*duration_seconds}"}
			]
		},
		{
			"id": "VoiceUpdate1",
			"filters": [
				"*string:~*vars.*cmd:CCR", 
				"*string:~*req.CC-Request-Type:2",
				"*eq:~*req.CC-Request-Number:1",
				"*string:~*req.Service-Context-Id:voice",
			],
			"flags": ["*initiate", "*accounts"],
			"request_fields":[
				{
					"tag": "OriginID", "path": "*cgreq.OriginID",
					"type": "*variable", "mandatory": true,
					"value": "~*req.Service-Information.IMS-Information.User-Session-Id"},
				{
					"tag": "OriginHost", "path": "*cgreq.OriginHost",
					"type": "*variable", "value": "~*vars.OriginHost"
				},
				{
					"tag": "Source", "path": "*cgreq.Source",
					"type": "*constant","value": "DiameterAgent"
				},
				{
					"tag": "RequestType", "path": "*cgreq.RequestType",
					"type": "*constant", "value": "*prepaid"
				},
				{
					"tag": "Account", "path": "*cgreq.Account",
					"type": "*variable", "mandatory": true,
					"value": "~*req.Service-Information.IMS-Information.Calling-Party-Address[0]:s/tel:\\+(\\d+)/${1}/"
				},
				{
					"tag": "Account", "path": "*cgreq.Account",
					"filters":["*string:~*req.Service-Information.IMS-Information.Role-Of-Node:2"],
					"type": "*variable", "mandatory": true,  
					"value": "~*req.Service-Information.IMS-Information.Requested-Party-Address:s/tel:(\\+?\\d+)/${1}/:s/sip:(\\+?\\d+)/${1}/:s/^\\+49(\\d+)/int${1}/:s/^0049(\\d+)/int${1}/:s/^49(\\d+)/int${1}/:s/^00(\\d+)/+${1}/:s/^[\\+]?(\\d+)/int${1}/:s/int(\\d+)/49${1}/"
				},
				{
					"tag": "Destination", "path": "*cgreq.Destination",
					"type": "*variable", "mandatory": true,
					"value": "~*req.Service-Information.IMS-Information.Called-Party-Address:s/tel:(\\+?\\d+)/${1}/:s/^\\+49(\\d+)/int${1}/:s/^0049(\\d+)/int${1}/:s/^49(\\d+)/int${1}/:s/^00(\\d+)/+${1}/:s/^[\\+]?(\\d+)/int${1}/:s/int(\\d+)/+49${1}/"
				},
				{
					"tag": "Destination", "path": "*cgreq.Destination",
					"filters": [
						"*prefix:~*req.Service-Information.IMS-Information.Called-Party-Address:tel:+",
						"*notprefix:~*req.Service-Information.IMS-Information.Called-Party-Address:tel:+49"
					],
					"type": "*variable", "mandatory": true,
					"value": "~*req.Service-Information.IMS-Information.Called-Party-Address:s/tel:(\\+?\\d+)/${1}/:s/^\\+(\\d+)/int${1}/:s/^[\\+]?(\\d+)/int${1}/:s/int(\\d+)/+00${1}/"
				},
				{
					"tag": "SetupTime", "path": "*cgreq.SetupTime",
					"filters": ["*exists:~*req.Service-Information.IMS-Information.Time-Stamps.SIP-Request-Timestamp:"],
					"type": "*variable", "mandatory": true,
					"value": "~*req.Service-Information.IMS-Information.Time-Stamps.SIP-Request-Timestamp"
				},
				{
					"tag": "AnswerTime", "path": "*cgreq.AnswerTime",
					"type": "*variable", "mandatory": true, 
					"value": "~*req.Event-Timestamp"
				},
				{
					"tag": "Usage", "path": "*cgreq.Usage",
					"type": "*constant", "value": "10s"
				},
				{
					"tag": "IMSI", "path": "*cgreq.IMSI",
					"type": "*variable", "mandatory": true, 
					"value": "~*req.User-Name"
				}
			],
			"reply_fields":[
				{"tag": "CCATemplate", "type": "*template", "value": "*cca"},
				{
					"tag": "GrantedUnitsError",
					"filters": ["*notempty:~*cgrep.Error:"],
					"path": "*rep.Granted-Service-Unit.CC-Time", "blocker": true,
					"type": "*constant", "value": "0"
				},
				{
					"tag": "GrantedUnitsUnlimited",  
					"filters": ["*eq:~*cgrep.MaxUsage:-1"],
					"path": "*rep.Granted-Service-Unit.CC-Time", "blocker": true,
					"type": "*constant", "value": "10"
				},
				{
					"tag": "GrantedUnits", "path": "*rep.Granted-Service-Unit.CC-Time",
					"type": "*variable", "mandatory": true,
					"value": "~*cgrep.MaxUsage{*duration_seconds}"
				}
                        ]
		},
		{
			"id": "VoiceUpdate2",
			"filters": [
				"*string:~*vars.*cmd:CCR",
				"*string:~*req.Service-Context-Id:voice",
				"*string:~*req.CC-Request-Type:2",
				"*gte:~*req.CC-Request-Number:2"
			],
			"flags": ["*update", "*accounts"],
			"request_fields":[
				{
					"tag": "OriginID", "path": "*cgreq.OriginID",
					"type": "*variable", "mandatory": true,
					"value": "~*req.Service-Information.IMS-Information.User-Session-Id"
				},
				{
					"tag": "OriginHost", "path": "*cgreq.OriginHost",
					"type": "*variable", "value": "~*vars.OriginHost"
				},
				{
					"tag": "Usage", "path": "*cgreq.Usage",
					"type": "*constant", "value": "10s"
				},
			],
			"reply_fields":[
				{"tag": "CCATemplate", "type": "*template", "value": "*cca"},
				{
					"tag": "GrantedUnitsOnError", 
					"filters": ["*notempty:~*cgrep.Error:"],
					"path": "*rep.Granted-Service-Unit.CC-Time", "blocker": true,
					"type": "*constant", "value": "0"
				},
				{
					"tag": "GrantedUnitsUnlimited",  
					"filters": ["*eq:~*cgrep.MaxUsage:-1"],
					"path": "*rep.Granted-Service-Unit.CC-Time", "blocker": true,
					"type": "*constant", "value": "10"
				},
				{
					"tag": "GrantedUnits", "path": "*rep.Granted-Service-Unit.CC-Time",
					"type": "*variable", "mandatory": true,
					"value": "~*cgrep.MaxUsage{*duration_seconds}"
				}
			]
		},
		{
			"id": "VoiceTerminate",
			"filters": [
				"*string:~*vars.*cmd:CCR",
				"*string:~*req.Service-Context-Id:voice",
				"*string:~*req.CC-Request-Type:3"
			],
			"flags": ["*terminate", "*accounts", "*cdrs"],
			"request_fields":[
				{
					"tag": "OriginID", "path": "*cgreq.OriginID",
					"type": "*variable", "mandatory": true,
					"value": "~*req.Service-Information.IMS-Information.User-Session-Id"
				},
				{
					"tag": "OriginHost", "path": "*cgreq.OriginHost",
					"type": "*variable", "value": "~*vars.OriginHost"
				},
				{
					"tag": "Usage", "path": "*cgreq.Usage",
					"filters": ["*exists:~*req.Service-Information.IMS-Information.Time-Stamps.SIP-Response-Timestamp:"],
					"type": "*usage_difference", "mandatory": true,
					"value": "~*req.Event-Timestamp;~*req.Service-Information.IMS-Information.Time-Stamps.SIP-Response-Timestamp"},
				{
					"tag": "Usage", "path": "*cgreq.Usage",
					"filters": ["*notexists:~*req.Service-Information.IMS-Information.Time-Stamps.SIP-Response-Timestamp:"],
					"type": "*constant", "value": "0s"
				},
			],
			"reply_fields":[
				{"tag": "CCATemplate", "type": "*template", "value": "*cca"},
				{"tag": "ResultCode",  "filters": ["*notempty:~*cgrep.Error:"],
					"path": "*rep.Result-Code", "blocker": true,
					"type": "*constant", "value": "5030"},
				{"tag": "ResultCode", "path": "*rep.Result-Code",
					"type": "*constant", "value": "2001"}
			]
		},
	]
}

}
