From 3ac1841c72d688159124d2d7bc3f7177cd16ff0e Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 16 Feb 2018 04:39:30 +0100 Subject: excude misc from build --- misc/OGM.pl | 452 ------------------------------------------------------------ 1 file changed, 452 deletions(-) delete mode 100644 misc/OGM.pl (limited to 'misc/OGM.pl') diff --git a/misc/OGM.pl b/misc/OGM.pl deleted file mode 100644 index 0d4e973..0000000 --- a/misc/OGM.pl +++ /dev/null @@ -1,452 +0,0 @@ -#ver 0.06 (C)Cyr -use strict; -use warnings; -use diagnostics; -use IO::Socket; -use Convert::ASN1; - -#use Data::Dumper; -use Carp; -use POSIX; -my $CSTAapdu; -my $socket; -my %calls; - -sub decode_msg_header { - my $bin = shift; - my $len = unpack( 'n', $bin ); - return $len; -} - -sub encode_msg_header { - my $len = shift; - 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); - $socket->write($pdu); - - # my $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 - $pdu = receive_stuff(); - my $hexdata = convert_to_hex($pdu); - if ( $hexdata =~ /A2 03 02 01 01/ ) { - print "rejected-permanent\n"; - exit 0; - } - - #SystemStatus Request - $pdu = receive_stuff(); - my $out = $CSTAapdu->decode($pdu); - my $invokeID = $out->{svcRequest}->{invokeID}; - SystemStatusResult($invokeID); -} - -sub open_csta_socket { - my $host = shift; - my $port = shift; - $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 ) { # фрагмент пакета - my $header2; - my $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 ); - my $len = decode_msg_header($header); - $nbytes = $socket->sysread( $pdu, $len ); - if ( $nbytes < $len ) { # фрагмент пакета - my $pdu2; - my $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 SystemStatusResult { - my $invokeID = shift; - my $pdu = $CSTAapdu->encode( - { - svcResult => { - invokeID => $invokeID, - result => { serviceID => 211, serviceResult => { noData => 1 } } - } - } - ); - send_pdu($pdu); # send SystemStatus Result -} - -sub playOGM { - my $ogmId = shift; - if ( !$ogmId ) { $ogmId = 10 } - my $connectionID = shift; - my $pdu = $CSTAapdu->encode( - { - svcRequest => { - invokeID => 11, - serviceID => 51, - serviceArgs => { - privateData => { - private => { - kmeResourceControl => { - ogmStart => { - connection => $connectionID, - ogmId => $ogmId - } - } - } - } - } - } - } - ); - send_pdu($pdu); -} - -sub numberOfMsgPort { - - #EscapeArgument.privateData.private.kmeSystemData.getSystemData.request - my $pdu = $CSTAapdu->encode( - { - svcRequest => { - invokeID => 8, - serviceID => 51, - serviceArgs => { - privateData => { - private => { - kmeSystemData => { - getSystemData => - { request => { systemData => 18 } } - } - } - } - } - } - } - ); - send_pdu($pdu); - while (1) { - $pdu = receive_stuff(); - my $out = $CSTAapdu->decode($pdu); - if ( - defined $out->{svcRequest}->{serviceArgs}->{privateData}->{private} - ->{kmeSystemData}->{systemDataLinkedReply}->{sysData} - ->{numberOfMsgPort} ) - { - my $MsgPorts = - $out->{svcRequest}->{serviceArgs}->{privateData}->{private} - ->{kmeSystemData}->{systemDataLinkedReply}->{sysData} - ->{numberOfMsgPort}; - return $MsgPorts; - } - } -} - -sub answer { - my $callerID = shift; - my $connectionID = shift; - my $MsgPorts = numberOfMsgPort(); - - #берём трубку - my $pdu = $CSTAapdu->encode( - { - svcRequest => { - invokeID => 10, - serviceID => 2, - serviceArgs => { callToBeAnswered => $connectionID } - } - } - ); - send_pdu($pdu); - my $callID = $connectionID->{both}->{callID}; - print "answered callID:", $callID, " callerID:", $callerID, "\n"; - my $numberOfFreePort = $MsgPorts->{numberOfFreePort}; - print "numberOfFreePort:", $numberOfFreePort, "\n"; - if ( !$numberOfFreePort ) { - my $pdu = $CSTAapdu->encode( - { - svcRequest => { - invokeID => 13, - serviceID => 5, - serviceArgs => { connectionToBeCleared => $connectionID } - } - } - ); - send_pdu($pdu); - print "connection callID:", $callID, " cleared\n"; - next; - } - my $digits = [ split( '', $callerID ) ]; - $calls{$callID} = $digits; - print "digits in the array:", scalar @{ $calls{$callID} }, "\n"; - my $digit = shift @{ $calls{$callID} }; - playOGM( $digit, $connectionID ); -} - -# parse ASN.1 desciptions -my $asn = Convert::ASN1->new; -$asn->prepare_file('d:\111\asn_perl\kxtde.asn') or die "prepare: ", $asn->error; -my %serviceArgs = ( - 2 => 'AnswerCallArgument', - 5 => 'ClearConnectionArgument', - 21 => 'CSTAEventReportArgument', - 51 => 'EscapeArgument', - - # 10=> 'MakeCallArgument', - 71 => 'MonitorStartArgument', - 211 => 'SystemStatusArg' -); -foreach ( keys %serviceArgs ) { - $asn->registertype( 'serviceArgs', $_, $asn->find( $serviceArgs{$_} ) ); -} -my %serviceResults = ( - 51 => 'EscapeResult', - - # 10=> 'MakeCallResult', - 71 => 'MonitorStartResult', - 211 => 'SystemStatusRes' -); -foreach ( keys %serviceResults ) { - $asn->registertype( 'serviceResult', $_, - $asn->find( $serviceResults{$_} ) ); -} -$CSTAapdu = $asn->find('CSTAapdu'); -csta_connect( { 'host' => '192.168.0.101', 'port' => 33333 } ); -my $Number = 177; # ! ICD номер -my $MsgPorts = numberOfMsgPort(); -print "numberOfMsgPort:", $MsgPorts->{numberOfMsgPort}, "\n"; - -#EscapeArgument.privateData.private.kmeSystemData.setSystemData -my $pdu = $CSTAapdu->encode( - { - svcRequest => { - invokeID => 9, - serviceID => 51, - serviceArgs => { - privateData => { - private => { - kmeSystemData => { - setSystemData => { - acdQueue => { - device => { - deviceIdentifier => - { dialingNumber => $Number } - }, - attribute => { acdMode => 1 } - } - } - } - } - } - } - } - } -); -send_pdu($pdu); - -#EscapeArgument.privateData.private.kmeSystemData.setSystemData -$pdu = $CSTAapdu->encode( - { - svcRequest => { - invokeID => 9, - serviceID => 51, - serviceArgs => { - privateData => { - private => { - kmeSystemData => { - setSystemData => { - acdQueue => { - device => { - deviceIdentifier => - { dialingNumber => $Number } - }, - attribute => { ctiWaitTime => 20 } - } - } - } - } - } - } - } - } -); -send_pdu($pdu); - -#monitor -$pdu = $CSTAapdu->encode( - { - svcRequest => { - invokeID => 9, - serviceID => 71, - serviceArgs => { - monitorObject => { - deviceObject => - { deviceIdentifier => { dialingNumber => $Number } } - }, - requestedMonitorFilter => {} - } - } - } -); -send_pdu($pdu); -while (1) { - $pdu = receive_stuff(); - - #Convert::ASN1::asn_dump($pdu); - my $out = $CSTAapdu->decode($pdu); - - # $Data::Dumper::Indent=1; - # $Data::Dumper::Pair=' '; - # $Data::Dumper::Quotekeys=0; - # $Data::Dumper::Varname='CSTAapdu'; - #print Dumper($out); - if ( defined $out->{svcRequest} ) { - my $serviceID = $out->{svcRequest}->{serviceID}; - my $invokeID = $out->{svcRequest}->{invokeID}; - my $serviceArgs = $out->{svcRequest}->{serviceArgs}; - if ( $serviceID == 21 ) { - if ( - defined $serviceArgs->{eventSpecificInfo}->{callControlEvents} - ->{delivered} ) - { - my $connectionID = - $serviceArgs->{eventSpecificInfo}->{callControlEvents} - ->{delivered}->{connection}; - if ( - defined $serviceArgs->{eventSpecificInfo} - ->{callControlEvents}->{delivered}->{callingDevice} - ->{deviceIdentifier}->{deviceIdentifier}->{dialingNumber} ) - { - my $callerID = - $serviceArgs->{eventSpecificInfo}->{callControlEvents} - ->{delivered}->{callingDevice}->{deviceIdentifier} - ->{deviceIdentifier}->{dialingNumber}; - answer( $callerID, $connectionID ); - } - elsif ( $serviceArgs->{eventSpecificInfo}->{callControlEvents} - ->{delivered}->{extensions}->{privateData}[0]->{private} - ->{kmeAdditionalData}->{device}->{deviceIdentifier} - ->{other} ) - { - my $callerID = - $serviceArgs->{eventSpecificInfo}->{callControlEvents} - ->{delivered}->{extensions}->{privateData}[0]->{private} - ->{kmeAdditionalData}->{device}->{deviceIdentifier} - ->{other}; - substr( $callerID, 0, 1 ) = ""; - answer( $callerID, $connectionID ); - } - else { print "not number\n" } - } - elsif ( $serviceArgs->{eventSpecificInfo}->{callControlEvents} - ->{transferred} ) - { - my $callID = - $serviceArgs->{eventSpecificInfo}->{callControlEvents} - ->{transferred}->{transferredConnections}[0]->{newConnection} - ->{both}->{callID}; - my $oldCallID = - $serviceArgs->{eventSpecificInfo}->{callControlEvents} - ->{transferred}->{primaryOldCall}->{both}->{callID}; - $calls{$callID} = $calls{$oldCallID}; - delete $calls{$oldCallID}; - print "transferred: new callID:", $callID, "\n"; - } - elsif ( - defined $serviceArgs->{eventSpecificInfo}->{vendorSpecEvents} - ->{privateEvent}->{privateData}->{private}->{kmePrivateEvent} - ->{ogmStatus} ) - { - my $ogmStatus = - $serviceArgs->{eventSpecificInfo}->{vendorSpecEvents} - ->{privateEvent}->{privateData}->{private}->{kmePrivateEvent} - ->{ogmStatus}; - print "ogmPortNumber:", - $ogmStatus->{ogmPortNumber}->{deviceIdentifier} - ->{deviceNumber} & 0xFFFF; - print " ogmId:", $ogmStatus->{ogmId}; - if ( $ogmStatus->{state} ) { - print " state:stop\n"; - my $connectionID = $ogmStatus->{connection}; - my $callID = $connectionID->{both}->{callID}; - if ( scalar @{ $calls{$callID} } ) { - print "digits in the array:", - scalar @{ $calls{$callID} }, "\n"; - my $digit = shift @{ $calls{$callID} }; - playOGM( $digit, $connectionID ); - } - else { - delete $calls{$callID}; - - # кладём трубку - my $pdu = $CSTAapdu->encode( - { - svcRequest => { - invokeID => 13, - serviceID => 5, - serviceArgs => { - connectionToBeCleared => $connectionID - } - } - } - ); - send_pdu($pdu); - print "connection callID:", $callID, " cleared\n"; - } - } - else { print " state:start\n" } - } - } - elsif ( $serviceID == 211 ) { # if SystemStatus Request - SystemStatusResult($invokeID); - } - - } -} -- cgit v1.2.3