SMSC CDRs (Kannel) and cdrtypenum option on cdr sftp import script, RT10991
[freeside.git] / FS / FS / cdr / kannel.pm
1 package FS::cdr::kannel;
2
3 use strict;
4 use vars qw( @ISA %info );
5 use FS::cdr qw( _cdr_date_parser_maker );
6
7 @ISA = qw(FS::cdr);
8
9 %info = (
10   'name'          => 'Kannel',
11   'weight'        => 25,
12   'header'        => 1,
13   'type'          => 'csv',
14   'row_callback'  => sub { my $row = shift;
15                         return ' ' if $row =~ /.*Log (begins|ends)$/;
16                         die "invalid row format" unless
17                             $row =~ /^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) ([A-Za-z ]+) (\[SMSC:\w+\] \[SVC:\w*\] \[ACT:\w*\] \[BINF:\w*\] \[FID:\w*\]) \[from:(|\+)(\d+)\] \[to:(|\+)(\d+)\] (\[flags:.*?\]) \[msg:(\d+):(.*?)\] (\[udh:.*?\])$/;
18                         $row = "$1,$2,$3,$5,$7,$8,$9,$11";
19                         $row;
20                      },
21   'import_fields' => [
22         _cdr_date_parser_maker('startdate'),
23         'disposition',
24         'userfield', # [SMSC: ... FID...], five fields
25         'src',
26         'dst',
27
28         sub { my($cdr, $flags) = @_;
29             $cdr->userfield($cdr->userfield." $flags");
30         },
31
32         # setting billsec to the msg length as we need billsec set non-zero
33         'billsec', 
34
35         sub { my($cdr, $udh) = @_;
36             $cdr->userfield($cdr->userfield." $udh");
37         },
38   ],
39 );
40
41 sub skip { map {''} (1..$_[0]) }
42
43 1;