[Freeswitch-svn] [commit] r5138 - freeswitch/branches/cparker/src/mod/event_handlers/mod_radius_cdr

Freeswitch SVN cparker at freeswitch.org
Thu May 10 17:20:54 EDT 2007


Author: cparker
Date: Thu May 10 17:20:54 2007
New Revision: 5138

Modified:
   freeswitch/branches/cparker/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c

Log:
more making it work, and getting some real channel information passed

Modified: freeswitch/branches/cparker/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c
==============================================================================
--- freeswitch/branches/cparker/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c	(original)
+++ freeswitch/branches/cparker/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c	Thu May 10 17:20:54 2007
@@ -48,13 +48,13 @@
 static switch_status_t my_on_hangup(switch_core_session_t *session)
 {
 	switch_xml_t 	cdr;
+	switch_channel_t *channel = switch_core_session_get_channel(session);
 	rc_handle 	*rad_config;
 	int             retval = 0;
 	VALUE_PAIR      *send = NULL;
 	UINT4           client_port = 0;
 	UINT4           status_type = PW_STATUS_STOP;
 
-	char		src[] = "8475551212";
 	char 		*uuid_str;
 
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[mod_radius_cdr] Entering my_on_hangup\n");
@@ -75,7 +75,6 @@
 	}	
 
 	if (switch_ivr_generate_xml_cdr(session, &cdr) == SWITCH_STATUS_SUCCESS) {
-		/*switch_channel_t *channel = switch_core_session_get_channel(session);*/
 		uuid_str = switch_core_session_get_uuid(session);
 
 		/* Some hardcoded ( for now ) defaults needed to initialize radius */
@@ -153,12 +152,66 @@
 		return SWITCH_STATUS_TERM;
 	}			
 
-	/* Add VSA */
-	if (rc_avpair_add(rad_config, &send, PW_FS_SRC, src, -1, PW_FS_PEC) == NULL) {
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "failed adding Freeswitch-Src: %s\n", src);
-		rc_destroy(rad_config);
-		return SWITCH_STATUS_TERM;
-	}			
+	/* Add VSAs */
+
+	if(channel) {
+		switch_call_cause_t	cause;
+		switch_caller_profile_t	*profile;
+
+		cause = switch_channel_get_cause(channel);
+		if (rc_avpair_add(rad_config, &send, PW_FS_HANGUPCAUSE, &cause, -1, PW_FS_PEC) == NULL) {
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "failed adding Freeswitch-Hangupcause: %d\n", cause);
+			rc_destroy(rad_config);
+			return SWITCH_STATUS_TERM;
+		}
+		
+		profile = switch_channel_get_caller_profile(channel);
+
+		if(profile) {
+			if(profile->caller_id_number) {
+				if (rc_avpair_add(rad_config, &send, PW_FS_SRC, profile->caller_id_number, -1, PW_FS_PEC) == NULL) {
+					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, 
+							"failed adding Freeswitch-Src: %s\n", profile->caller_id_number);
+					rc_destroy(rad_config);
+					return SWITCH_STATUS_TERM;
+				}
+			} 
+			if(profile->caller_id_name) {
+				if (rc_avpair_add(rad_config, &send, PW_FS_CLID, profile->caller_id_name, -1, PW_FS_PEC) == NULL) {
+					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, 
+							"failed adding Freeswitch-CLID: %s\n", profile->caller_id_name);
+					rc_destroy(rad_config);
+					return SWITCH_STATUS_TERM;
+				}
+			} 
+			if(profile->destination_number) {
+				if (rc_avpair_add(rad_config, &send, PW_FS_DST, profile->destination_number, -1, PW_FS_PEC) == NULL) {
+					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, 
+							"failed adding Freeswitch-Dst: %s\n", profile->destination_number);
+					rc_destroy(rad_config);
+					return SWITCH_STATUS_TERM;
+				}
+			} 
+			if(profile->dialplan) {
+				if (rc_avpair_add(rad_config, &send, PW_FS_DIALPLAN, profile->dialplan, -1, PW_FS_PEC) == NULL) {
+					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, 
+							"failed adding Freeswitch-Dialplan: %s\n", profile->dialplan);
+					rc_destroy(rad_config);
+					return SWITCH_STATUS_TERM;
+				}
+			} 
+			if(profile->source) {
+				if (rc_avpair_add(rad_config, &send, PW_FS_LASTAPP, profile->source, -1, PW_FS_PEC) == NULL) {
+					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, 
+							"failed adding Freeswitch-Lastapp: %s\n", profile->source);
+					rc_destroy(rad_config);
+					return SWITCH_STATUS_TERM;
+				}
+			} 
+		} else {
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "profile == NULL\n");
+		}
+	}
 
 	if(rc_acct(rad_config, client_port, send) == OK_RC) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "RADIUS Accounting OK\n");



More information about the Freeswitch-svn mailing list