Minor changes for MikeJ's switch_strlen_zero() and a minor refactor of BaseCDR::BaseCDR(switch_mod_cdr_newchannel_t*). Added a sample config file, perhaps somebody can edit the makefile to copy this into the configuration when this module is enabled for build.

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4415 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Yossi Neiman 2007-02-28 22:28:03 +00:00
parent a99973ca7c
commit 4a2940d81b
2 changed files with 74 additions and 47 deletions

View File

@ -89,76 +89,71 @@ BaseCDR::BaseCDR(switch_mod_cdr_newchannel_t *newchannel)
calltransferdate = newchannel->callerprofile->times->transferred; calltransferdate = newchannel->callerprofile->times->transferred;
callenddate = newchannel->callerprofile->times->hungup; callenddate = newchannel->callerprofile->times->hungup;
if(newchannel->callerprofile->caller_id_name != 0) if(!switch_strlen_zero(newchannel->callerprofile->caller_id_name))
{
strncpy(clid,newchannel->callerprofile->caller_id_name,strlen(newchannel->callerprofile->caller_id_name)); strncpy(clid,newchannel->callerprofile->caller_id_name,strlen(newchannel->callerprofile->caller_id_name));
strncat(clid," <",2);
if(newchannel->callerprofile->caller_id_number != 0 )
strncat(clid,newchannel->callerprofile->caller_id_number,strlen(clid)+strlen(newchannel->callerprofile->caller_id_number));
strncat(clid,">",1);
}
// Get the ANI information if it's set // Get the ANI information if it's set
if(newchannel->callerprofile->ani != 0) if(!switch_strlen_zero(newchannel->callerprofile->ani))
strncpy(ani,newchannel->callerprofile->ani,strlen(newchannel->callerprofile->ani)); strncpy(ani,newchannel->callerprofile->ani,strlen(newchannel->callerprofile->ani));
if(newchannel->callerprofile->aniii != 0) if(!switch_strlen_zero(newchannel->callerprofile->aniii))
strncpy(aniii,newchannel->callerprofile->aniii,strlen(newchannel->callerprofile->aniii)); strncpy(aniii,newchannel->callerprofile->aniii,strlen(newchannel->callerprofile->aniii));
if(newchannel->callerprofile->dialplan != 0) if(!switch_strlen_zero(newchannel->callerprofile->dialplan))
strncpy(dialplan,newchannel->callerprofile->dialplan,strlen(newchannel->callerprofile->dialplan)); strncpy(dialplan,newchannel->callerprofile->dialplan,strlen(newchannel->callerprofile->dialplan));
if(newchannel->callerprofile->network_addr != 0) if(!switch_strlen_zero(newchannel->callerprofile->network_addr))
strncpy(network_addr,newchannel->callerprofile->network_addr,strlen(newchannel->callerprofile->network_addr)); strncpy(network_addr,newchannel->callerprofile->network_addr,strlen(newchannel->callerprofile->network_addr));
}
//switch_caller_profile_t *originateprofile = switch_channel_get_originator_caller_profile(newchannel->channel->callerprofile);
// Were we the receiver of the call? // Were we the receiver of the call?
if(newchannel->callerprofile->originator_caller_profile) if(newchannel->callerprofile->originator_caller_profile)
{ {
originated = 0; originated = 0;
if(newchannel->callerprofile->originator_caller_profile->uuid != 0) if(!switch_strlen_zero(newchannel->callerprofile->originator_caller_profile->uuid))
strncpy(destuuid,newchannel->callerprofile->originator_caller_profile->uuid,strlen(newchannel->callerprofile->originator_caller_profile->uuid)); strncpy(destuuid,newchannel->callerprofile->originator_caller_profile->uuid,strlen(newchannel->callerprofile->originator_caller_profile->uuid));
if(newchannel->callerprofile)
{ if(!switch_strlen_zero(newchannel->callerprofile->destination_number))
if(newchannel->callerprofile->destination_number)
strncpy(src,newchannel->callerprofile->destination_number,strlen(newchannel->callerprofile->destination_number)); strncpy(src,newchannel->callerprofile->destination_number,strlen(newchannel->callerprofile->destination_number));
if(newchannel->callerprofile->caller_id_number != 0) if(!switch_strlen_zero(newchannel->callerprofile->caller_id_number))
strncpy(dst,newchannel->callerprofile->caller_id_number,strlen(newchannel->callerprofile->caller_id_number)); strncpy(dst,newchannel->callerprofile->caller_id_number,strlen(newchannel->callerprofile->caller_id_number));
} }
}
else else
{ {
//originateprofile = switch_channel_get_originatee_profile(newchannel->channel->callerprofile); //originateprofile = switch_channel_get_originatee_profile(newchannel->channel->callerprofile);
// Or were we maybe we were the caller? // Or were we maybe we were the caller?
if(newchannel->callerprofile->originatee_caller_profile) if(newchannel->callerprofile->originatee_caller_profile)
{ {
if (newchannel->callerprofile) { if(!switch_strlen_zero(newchannel->callerprofile->caller_id_number))
if(newchannel->callerprofile->caller_id_number != 0)
strncpy(src,newchannel->callerprofile->caller_id_number,strlen(newchannel->callerprofile->caller_id_number)); strncpy(src,newchannel->callerprofile->caller_id_number,strlen(newchannel->callerprofile->caller_id_number));
if(newchannel->callerprofile->destination_number != 0) if(!switch_strlen_zero(newchannel->callerprofile->destination_number))
strncpy(dst,newchannel->callerprofile->destination_number,strlen(newchannel->callerprofile->destination_number)); strncpy(dst,newchannel->callerprofile->destination_number,strlen(newchannel->callerprofile->destination_number));
} if(!switch_strlen_zero(newchannel->callerprofile->originatee_caller_profile->chan_name))
if(newchannel->callerprofile->originatee_caller_profile->chan_name != 0)
strncpy(dstchannel,newchannel->callerprofile->originatee_caller_profile->chan_name,strlen(newchannel->callerprofile->originatee_caller_profile->chan_name)); strncpy(dstchannel,newchannel->callerprofile->originatee_caller_profile->chan_name,strlen(newchannel->callerprofile->originatee_caller_profile->chan_name));
} }
} }
}
if(!switch_strlen_zero(newchannel->callerprofile->uuid))
strncpy(myuuid,newchannel->callerprofile->uuid,strlen(newchannel->callerprofile->uuid)); strncpy(myuuid,newchannel->callerprofile->uuid,strlen(newchannel->callerprofile->uuid));
if(!switch_strlen_zero(newchannel->callerprofile->chan_name))
strncpy(srcchannel,newchannel->callerprofile->chan_name,strlen(newchannel->callerprofile->chan_name)); strncpy(srcchannel,newchannel->callerprofile->chan_name,strlen(newchannel->callerprofile->chan_name));
if(switch_channel_test_flag(newchannel->channel,CF_ANSWERED)) if(switch_channel_test_flag(newchannel->channel,CF_ANSWERED))
{ {
disposition=1; disposition=1;
if(callstartdate) if(callstartdate && callanswerdate)
{
if(callenddate)
billusec = callenddate - callanswerdate; billusec = callenddate - callanswerdate;
else else if(calltransferdate)
billusec = callenddate - calltransferdate; billusec = calltransferdate - callanswerdate;
}
} }
else if(switch_channel_test_flag(newchannel->channel,CF_TRANSFER)) else if(switch_channel_test_flag(newchannel->channel,CF_TRANSFER))
{ {
disposition=1; disposition=1;
billusec = callenddate - calltransferdate; if(callanswerdate && calltransferdate)
billusec = calltransferdate - callanswerdate;
} }
else else
{ {
@ -170,12 +165,12 @@ BaseCDR::BaseCDR(switch_mod_cdr_newchannel_t *newchannel)
hangupcause = switch_channel_get_cause(newchannel->channel); hangupcause = switch_channel_get_cause(newchannel->channel);
hangupcause_text = switch_channel_cause2str(hangupcause); hangupcause_text = switch_channel_cause2str(hangupcause);
if(newchannel->callerextension != 0) if(newchannel->callerextension)
if(newchannel->callerextension->last_application != 0) if(!newchannel->callerextension->last_application)
{ {
if(newchannel->callerextension->last_application->application_name != 0) if(!switch_strlen_zero(newchannel->callerextension->last_application->application_name))
strncpy(lastapp,newchannel->callerextension->last_application->application_name,strlen(newchannel->callerextension->last_application->application_name)); strncpy(lastapp,newchannel->callerextension->last_application->application_name,strlen(newchannel->callerextension->last_application->application_name));
if(newchannel->callerextension->last_application->application_data != 0) if(!switch_strlen_zero(newchannel->callerextension->last_application->application_data))
strncpy(lastdata,newchannel->callerextension->last_application->application_data,strlen(newchannel->callerextension->last_application->application_data)); strncpy(lastdata,newchannel->callerextension->last_application->application_data,strlen(newchannel->callerextension->last_application->application_data));
} }
@ -320,7 +315,7 @@ void BaseCDR::process_channel_variables(const std::list<std::string>& stringlist
std::pair<std::string,std::string> temppair; std::pair<std::string,std::string> temppair;
temppair.first = *iItr; temppair.first = *iItr;
if(tempvariable != 0) if(!switch_strlen_zero(tempvariable))
temppair.second = tempvariable; temppair.second = tempvariable;
chanvars_fixed.push_back(temppair); chanvars_fixed.push_back(temppair);
@ -359,7 +354,7 @@ void BaseCDR::process_channel_variables(const std::list<std::string>& stringlist
char *tempvariable; char *tempvariable;
tempvariable = switch_channel_get_variable(channel,tempstring); tempvariable = switch_channel_get_variable(channel,tempstring);
if(tempvariable != 0) if(!switch_strlen_zero(tempvariable))
chanvars_supp[*iItr] = tempvariable; chanvars_supp[*iItr] = tempvariable;
} }
} }

View File

@ -0,0 +1,32 @@
<!-- Please see the information in src/mod/event_handlers/mod_cdr/README for an explanation of these settings. -->
<configuration name="mod_cdr.conf" description="CDR Configuration">
<pddcdr>
<param name="path" value="/tmp/pddcdr"/>
<param name="chanvars" value="foo,accountcode"/>
<param name="chanvars_fixed" value="*"/>
</pddcdr>
<!--
<mysqlcdr>
<param name="hostname" value=""/>
<param name="username" value=""/>
<param name="password" value=""/>
<param name="dbname" value=""/>
<param name="chanvars_supp" value="*"/>
</mysqlcdr>
<xmlcdr>
<param name="path" value="/tmp/xmlcdr"/>
</xmlcdr>
-->
<csvcdr>
<param name="path" value="/tmp/csvcdr"/>
</csvcdr>
<sqlitecdr>
<param name="path" value="/tmp/sqlitecdr"/>
<param name="chanvars_fixed" value="The_Kow=i,username=s"/>
<param name="chanvars_supp" value="*"/>
<param name="repeat_fixed_in_supp" value="1"/>
<param name="timezone" value="utc"/>
</sqlitecdr>
</configuration>