aboutsummaryrefslogtreecommitdiff
path: root/misc/monitorCallerID.pl
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-07-16 18:54:19 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-07-16 18:54:19 +0200
commit2074fe653b9668023f568770de6155d7ea87434b (patch)
tree3fc10fbdf1a5d572fa141271ef13031f1e8d0c18 /misc/monitorCallerID.pl
parent9b7332658e40e7133dfc7e8263657edd14b2b406 (diff)
perltidy
Diffstat (limited to 'misc/monitorCallerID.pl')
-rw-r--r--misc/monitorCallerID.pl310
1 files changed, 174 insertions, 136 deletions
diff --git a/misc/monitorCallerID.pl b/misc/monitorCallerID.pl
index 2ec0ea4..7980811 100644
--- a/misc/monitorCallerID.pl
+++ b/misc/monitorCallerID.pl
@@ -1,136 +1,174 @@
-use POSIX;
-use Carp;
-#use Data::Dumper;
-use IO::Socket;
-sub decode_msg_header {
- my $bin = shift;
- my $len = unpack('n', $bin);
- return $len;
-}
-sub encode_msg_header {
- my $len = shift;
-# print("len: [$len]\n");
- die "Message larger than allowed!" unless ($len <= 240);
- my $bin = pack('n', $len);
- return $bin;
-}
-sub convert_to_hex {
- my $pdu = $_[0];
- my $hexdata = unpack('H*', $pdu);
- $hexdata =~ tr/a-z/A-Z/;
- $hexdata =~ s/(..)/$1 /g;
- $hexdata =~ s/ $//g;
- return $hexdata;
-}
-sub send_pdu {
- my $pdu = $_[0];
- my $header = encode_msg_header(length($pdu));
- $socket->write($header);
- $headerdata = convert_to_hex($header);
-# print("SENT HEADER: [$headerdata]\n");
- $socket->write($pdu);
- $hexdata = convert_to_hex($pdu);
-# print("SENT: [$hexdata]\n");
-}
-sub csta_connect {
- my %args = %{$_[0]};
- open_csta_socket($args{host}, $args{port});
- # A-ASSOCIATE Request
- my $pdu = "602380020780A10706052B0C00815ABE14281206072B0C00821D8148A007A0050303000800";
- $pdu = pack('H*', $pdu);
- send_pdu($pdu);
- # A-ASSOCIATE Result
- receive_stuff();
-}
-sub open_csta_socket {
- my $host = shift;
- my $port = shift;
-# print("trying to open a connection to $host on port $port\n");
- $socket = new IO::Socket::INET(
- PeerAddr => $host,
- PeerPort => $port,
- Blocking => 1,
- Proto => 'tcp') || die "Error creating socket: $!\n";
- $socket->autoflush(1);
- print("opened a connection to $host on port $port\n");
-}
-sub receive_stuff {
- my $header = '';
- my $pdu = '';
- my $nbytes = $socket->sysread($header, 2);
- if ($nbytes==1) { # фрагмент пакета
-# print("RECEIVED fragment".chr(7)."\n");
- $nbytes2= $socket->sysread($header2, 1);
- $header = $header.$header2;
- $nbytes = 2;
- }
- croak "Didn't receive the specified amount of data (2 bytes)!\n".chr(7) unless ($nbytes == 2);
-# print("Received 2 bytes, assuming it's a data length\n");
- my $len = decode_msg_header($header);
-# print("Waiting for [$len] bytes of ASN1 data now\n");
- $nbytes = $socket->sysread($pdu, $len);
- if ($nbytes<$len) { # фрагмент пакета
-# print("RECEIVED fragment".chr(7)."\n");
- $nbytes2= $socket->sysread($pdu2, $len-$nbytes);
- $pdu = $pdu.$pdu2;
- $nbytes = $nbytes + $nbytes2;
- }
- croak "Didn't receive the specified amount of data ($len bytes)!\n".chr(7) unless ($nbytes == $len);
- my $hexdata = convert_to_hex($pdu);
-# print("RECEIVED:[$hexdata]\n");
- return $pdu;
-}
-sub main_loop {
- while (1) {
- my $pdu = receive_stuff();
- my $hexdata = convert_to_hex($pdu);
- # If SystemStatus Request
- if ($hexdata =~/A1 0C 02 01 .. 02 02 00 D3 30 03 0A 01 02/) {
- # SystemStatus Response
- my $pdu = "A20B0201".substr($hexdata, 12, 2)."3006020200D30500";
- $pdu = pack('H*', $pdu);
- send_pdu($pdu);
- }
- # If SystemStatus Request 2
- elsif ($hexdata =~/A1 0D 02 02 .. .. 02 02 00 D3 30 03 0A 01 02/){
- # SystemStatus Response 2
- my $pdu = "A20C0202".substr($hexdata, 12, 2).substr($hexdata, 15, 2)."3006020200D30500";
- $pdu = pack('H*', $pdu);
- send_pdu($pdu);
- }
- # if localConnectionInfo=alerting and cause=newCall|distributed
- elsif ($hexdata =~m/4E 01 02 0A 01 [12]6/) {
- # звонок от
- if ($hexdata =~m/61 .. 30 .. 80 /) {
- $num = hex(substr($', 0, 2));
- $str = substr($', 3, $num*3);
- $str =~s/\s//g;
- $CallerID=pack ("H*", $str);
- } else {
- $CallerID="CO".substr($hexdata, length($hexdata)-2, 2);
- }
- # звонок кому
- if ($hexdata =~m/63 .. 30 .. 80 /) {
- $num = hex(substr($', 0, 2));
- $str = substr($', 3, $num*3);
- $str =~s/\s//g;
- $CalledID=pack ("H*", $str);
- }
- print strftime("%H:%M:%S ", localtime);
- print("Call to:$CalledID from:$CallerID\n");
- }
- }
-}
-sub MonitorStart{
- my $ext = shift;
- $ext =~s/(.)/sprintf("%02x",ord($1))/eg;
- my $pdu = "A111020178020147300930058003".$ext."A000";
- $pdu = pack('H*', $pdu);
- send_pdu($pdu);
- $pdu = receive_stuff();
-}
-csta_connect({'host'=>'192.168.0.101', 'port'=>33333});
-for ($ext_num = 101; $ext_num <=156; $ext_num++){
- MonitorStart($ext_num);
-}
-main_loop();
+use POSIX;
+use Carp;
+
+#use Data::Dumper;
+use IO::Socket;
+
+sub decode_msg_header {
+ my $bin = shift;
+ my $len = unpack( 'n', $bin );
+ return $len;
+}
+
+sub encode_msg_header {
+ my $len = shift;
+
+ # print("len: [$len]\n");
+ die "Message larger than allowed!" unless ( $len <= 240 );
+ my $bin = pack( 'n', $len );
+ return $bin;
+}
+
+sub convert_to_hex {
+ my $pdu = $_[0];
+ my $hexdata = unpack( 'H*', $pdu );
+ $hexdata =~ tr/a-z/A-Z/;
+ $hexdata =~ s/(..)/$1 /g;
+ $hexdata =~ s/ $//g;
+ return $hexdata;
+}
+
+sub send_pdu {
+ my $pdu = $_[0];
+ my $header = encode_msg_header( length($pdu) );
+ $socket->write($header);
+ $headerdata = convert_to_hex($header);
+
+ # print("SENT HEADER: [$headerdata]\n");
+ $socket->write($pdu);
+ $hexdata = convert_to_hex($pdu);
+
+ # print("SENT: [$hexdata]\n");
+}
+
+sub csta_connect {
+ my %args = %{ $_[0] };
+ open_csta_socket( $args{host}, $args{port} );
+
+ # A-ASSOCIATE Request
+ my $pdu =
+"602380020780A10706052B0C00815ABE14281206072B0C00821D8148A007A0050303000800";
+ $pdu = pack( 'H*', $pdu );
+ send_pdu($pdu);
+
+ # A-ASSOCIATE Result
+ receive_stuff();
+}
+
+sub open_csta_socket {
+ my $host = shift;
+ my $port = shift;
+
+ # print("trying to open a connection to $host on port $port\n");
+ $socket = new IO::Socket::INET(
+ PeerAddr => $host,
+ PeerPort => $port,
+ Blocking => 1,
+ Proto => 'tcp'
+ ) || die "Error creating socket: $!\n";
+ $socket->autoflush(1);
+ print("opened a connection to $host on port $port\n");
+}
+
+sub receive_stuff {
+ my $header = '';
+ my $pdu = '';
+ my $nbytes = $socket->sysread( $header, 2 );
+ if ( $nbytes == 1 ) { # фрагмент пакета
+
+ # print("RECEIVED fragment".chr(7)."\n");
+ $nbytes2 = $socket->sysread( $header2, 1 );
+ $header = $header . $header2;
+ $nbytes = 2;
+ }
+ croak "Didn't receive the specified amount of data (2 bytes)!\n" . chr(7)
+ unless ( $nbytes == 2 );
+
+ # print("Received 2 bytes, assuming it's a data length\n");
+ my $len = decode_msg_header($header);
+
+ # print("Waiting for [$len] bytes of ASN1 data now\n");
+ $nbytes = $socket->sysread( $pdu, $len );
+ if ( $nbytes < $len ) { # фрагмент пакета
+
+ # print("RECEIVED fragment".chr(7)."\n");
+ $nbytes2 = $socket->sysread( $pdu2, $len - $nbytes );
+ $pdu = $pdu . $pdu2;
+ $nbytes = $nbytes + $nbytes2;
+ }
+ croak "Didn't receive the specified amount of data ($len bytes)!\n" . chr(7)
+ unless ( $nbytes == $len );
+ my $hexdata = convert_to_hex($pdu);
+
+ # print("RECEIVED:[$hexdata]\n");
+ return $pdu;
+}
+
+sub main_loop {
+ while (1) {
+ my $pdu = receive_stuff();
+ my $hexdata = convert_to_hex($pdu);
+
+ # If SystemStatus Request
+ if ( $hexdata =~ /A1 0C 02 01 .. 02 02 00 D3 30 03 0A 01 02/ ) {
+
+ # SystemStatus Response
+ my $pdu =
+ "A20B0201" . substr( $hexdata, 12, 2 ) . "3006020200D30500";
+ $pdu = pack( 'H*', $pdu );
+ send_pdu($pdu);
+ }
+
+ # If SystemStatus Request 2
+ elsif ( $hexdata =~ /A1 0D 02 02 .. .. 02 02 00 D3 30 03 0A 01 02/ ) {
+
+ # SystemStatus Response 2
+ my $pdu =
+ "A20C0202"
+ . substr( $hexdata, 12, 2 )
+ . substr( $hexdata, 15, 2 )
+ . "3006020200D30500";
+ $pdu = pack( 'H*', $pdu );
+ send_pdu($pdu);
+ }
+
+ # if localConnectionInfo=alerting and cause=newCall|distributed
+ elsif ( $hexdata =~ m/4E 01 02 0A 01 [12]6/ ) {
+
+ # звонок от
+ if ( $hexdata =~ m/61 .. 30 .. 80 / ) {
+ $num = hex( substr( $', 0, 2 ) );
+ $str = substr( $', 3, $num * 3 );
+ $str =~ s/\s//g;
+ $CallerID = pack( "H*", $str );
+ }
+ else {
+ $CallerID = "CO" . substr( $hexdata, length($hexdata) - 2, 2 );
+ }
+
+ # звонок кому
+ if ( $hexdata =~ m/63 .. 30 .. 80 / ) {
+ $num = hex( substr( $', 0, 2 ) );
+ $str = substr( $', 3, $num * 3 );
+ $str =~ s/\s//g;
+ $CalledID = pack( "H*", $str );
+ }
+ print strftime( "%H:%M:%S ", localtime );
+ print("Call to:$CalledID from:$CallerID\n");
+ }
+ }
+}
+
+sub MonitorStart {
+ my $ext = shift;
+ $ext =~ s/(.)/sprintf("%02x",ord($1))/eg;
+ my $pdu = "A111020178020147300930058003" . $ext . "A000";
+ $pdu = pack( 'H*', $pdu );
+ send_pdu($pdu);
+ $pdu = receive_stuff();
+}
+csta_connect( { 'host' => '192.168.0.101', 'port' => 33333 } );
+for ( $ext_num = 101 ; $ext_num <= 156 ; $ext_num++ ) {
+ MonitorStart($ext_num);
+}
+main_loop();