1.一种可控组播CDR消息定时上报的实现方法,其特征在于,针对每个CDR消息建立一个结构、建立一个所述结构相对应的首尾相连的双向链表、一个数组CDRTimer以及两个全局变量;所述结构包含消息标识,所述消息标识包含未上报、已上报和忽略三个值;所述两个全局变量为上报时间间隔和短时间的鉴定值;所述可控组播CDR消息定时上报的实现方法至少包括以下步骤:步骤S1:向CDR链表写CDR消息;当一个加入报文的CDR消息被记录后,又在所述短时间的鉴定值内收到了离开报文,设置加入报文的CDR消息为忽略,不进行上报,对于该离开报文也不进行记录;
步骤S2:对于记录的CDR消息,当定时器超时上报时,读取CDR消息生成时间,并求出CDR消息生成时间与当前时间的差值;当差值大于所述短时间的鉴定值时,上报该CDR消息;否则等待下一轮定时器超时再进行上报;其中所述超时是指超过所述上报时间间隔;
所述步骤S2包括以下步骤:
步骤S21:判断CDR链表是否遍历完;如果是,则流程结束;如果否,转入步骤S22;
步骤S22:获取系统的当前时间;
步骤23:判断CDR消息是否未上报;如果否,转入步骤S21;如果是,转入步骤S24;
步骤S24:判断CDR消息生成时间和当前时间的差值是否大于所述短时间的鉴定值;如果否,转入步骤S21;如果是,转入步骤S25;
步骤S25:修改CDR消息的消息标识为已上报,并上报该CDR消息。
2.根据权利要求1所述的可控组播CDR消息定时上报的实现方法,其特征在于:所述步骤S1又包括以下步骤:接收IGMP报文,判断报文类型;
若是加入报文,则判断该加入报文的CDR消息是否存在于数组CDRTimer中,若是,则流程结束;若否,则将该加入报文的CDR消息加入数组CDRTimer中,再将该加入报文的CDR消息加入到CDR链表中;
若是离开报文,则判断该离开报文的CDR消息相对应的加入报文的CDR消息是否在数组CDRTimer中,若否,则流程结束;若是,则判断加入报文和离开报文的时间间隔是否大于所述短时间的鉴定值,如果大于,则将该离开报文的CDR消息加入到CDR链表中,并标识为未上报,再删除数组CDRTimer中对应的加入报文的CDR消息;如果小于,则将该离开报文的CDR消息对应的CDR链表中的加入报文的CDR消息的消息标识设置为忽略,再删除数组CDRTimer中对应的加入报文的CDR消息。
3.根据权利要求1所述的可控组播CDR消息定时上报的实现方法,其特征在于:所述数组CDRTimer用于临时存储CDR消息,仅用于记录第一次加入和离开的CDR消息。
4.根据权利要求1所述的可控组播CDR消息定时上报的实现方法,其特征在于:所述上报时间间隔和短时间的鉴定值由用户输入。
5.根据权利要求1所述的可控组播CDR消息定时上报的实现方法,其特征在于:所述CDR消息的结构包含IGMP请求类型、请求时间、请求频道权限、用户标识、申请成功或失败、离开方式和消息标识。
6.根据权利要求1所述的可控组播CDR消息定时上报的实现方法,其特征在于:所述步骤S2通过定时器上报处理函数完成。