Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use diagnostics;
- use strict;
- use warnings;
- use Data::Dumper;
- my $pdu ="A1 34 02 01 03 02 01 15 30 2C 55 04 01 11 00 12 A0 24 B0 22
- 6B 11 30 0F 80 04 30 30 37 35 A1 07 30 05 80 03 31 31 31 63
- 07 30 05 80 03 31 31 31 4E 01 01 0A 01 16";
- $pdu =~s/\s//g; # убираем пробелы
- $pdu =pack ("H*", $pdu); # превращаем строку в бинарник
- # use Net::CSTA::ASN qw(CSTAapdu);
- # print Dumper($CSTAapdu->decode($pdu) or die $CSTAapdu->error);
- use Convert::ASN1;
- # parse ASN.1 desciptions
- my $asn = Convert::ASN1->new;
- $asn->prepare(<<ASN1) or die "prepare: ", $asn->error;
- ROIVapdu ::= [1] IMPLICIT SEQUENCE {
- invokeID INTEGER, -- no. de sequencia
- serviceID INTEGER, -- no. da operacao a ser realizada
- serviceArgs ANY DEFINED BY serviceID -- Uma das estruturas abaixo
- }
- ASN1
- my $out=$asn->decode($pdu) or die $asn->error;
- my $pdu2=$out->{serviceArgs};
- #print Dumper($out);
- $asn->prepare(<<ASN1) or die "prepare: ", $asn->error;
- CSTAEventReportArgument ::= SEQUENCE
- { crossRefIdentifier MonitorCrossRefID,
- eventSpecificInfo EventSpecificInfo}
- EventSpecificInfo ::= CHOICE
- { callControlEvents [0] CallControlEvents
- -- callAssociatedEvents [1] CallAssociatedEvents,
- -- mediaAttachmentEvents [2] MediaAttachmentEvents,
- -- physicalDeviceFeatureEvents [3] PhysicalDeviceFeatureEvents,
- -- logicalDeviceFeatureEvents [4] LogicalDeviceFeatureEvents,
- -- deviceMaintenanceEvents [5] DeviceMaintenanceEvents,
- -- voiceUnitEvents [6] VoiceUnitEvents,
- -- vendorSpecEvents [7] VendorSpecEvents
- }
- MonitorCrossRefID ::= [APPLICATION 21] IMPLICIT OCTET STRING
- CallControlEvents ::= CHOICE
- {
- -- bridged [ 0] IMPLICIT BridgedEvent,
- -- callCleared [ 1] IMPLICIT CallClearedEvent,
- -- conferenced [ 2] IMPLICIT ConferencedEvent,
- -- connectionCleared [ 3] IMPLICIT ConnectionClearedEvent,
- -- delivered [ 4] IMPLICIT DeliveredEvent,
- -- digitsDialed [ 5] IMPLICIT DigitsDialedEvent,
- -- diverted [ 6] IMPLICIT DivertedEvent,
- -- established [ 7] IMPLICIT EstablishedEvent,
- -- failed [ 8] IMPLICIT FailedEvent,
- -- held [ 9] IMPLICIT HeldEvent,
- -- networkCapabilitiesChanged [10] IMPLICIT NetworkCapabilitiesChangedEvent,
- -- networkReached [11] IMPLICIT NetworkReachedEvent,
- -- offered [12] IMPLICIT OfferedEvent,
- -- originated [13] IMPLICIT OriginatedEvent,
- -- queued [14] IMPLICIT QueuedEvent,
- -- retrieved [15] IMPLICIT RetrievedEvent,
- serviceInitiated [16] IMPLICIT ServiceInitiatedEvent
- -- transferred [17] IMPLICIT TransferredEvent
- }
- ServiceInitiatedEvent ::=
- SEQUENCE
- { initiatedConnection ConnectionID,
- initiatingDevice SubjectDeviceID,
- localConnectionInfo LocalConnectionState OPTIONAL,
- -- correlatorData [0] IMPLICIT CorrelatorData OPTIONAL,
- cause EventCause
- -- servicesPermitted [1] IMPLICIT ServicesPermitted OPTIONAL,
- -- mediaCallCharacteristics [2] IMPLICIT MediaCallCharacteristics OPTIONAL,
- -- callCharacteristics [3] IMPLICIT CallCharacteristics OPTIONAL,
- -- initiatedConnectionInfo [4] IMPLICIT ConnectionInformation OPTIONAL,
- -- networkCallingDevice NetworkCallingDeviceID OPTIONAL,
- -- networkCalledDevice NetworkCalledDeviceID OPTIONAL,
- -- associatedCallingDevice AssociatedCallingDeviceID OPTIONAL,
- -- callLinkageData [5] IMPLICIT CallLinkageData OPTIONAL,
- -- extensions CSTACommonArguments OPTIONAL
- }
- ConnectionID ::= [APPLICATION 11] CHOICE
- { callID [0] IMPLICIT CallID,
- deviceID [1] LocalDeviceID,
- both SEQUENCE
- { callID [0] IMPLICIT CallID,
- deviceID [1] LocalDeviceID
- }
- }
- CallID ::= OCTET STRING
- LocalDeviceID ::= CHOICE
- { staticID DeviceID
- -- dynamicID [3] IMPLICIT OCTET STRING
- }
- SubjectDeviceID ::= [APPLICATION 3] CHOICE
- {deviceIdentifier DeviceID,
- notKnown [7] IMPLICIT NULL}
- DeviceID ::= SEQUENCE
- { deviceIdentifier CHOICE
- { dialingNumber [0] IMPLICIT NumberDigits,
- deviceNumber [1] IMPLICIT DeviceNumber
- -- implicitPublic [2] IMPLICIT NumberDigits,
- -- explicitPublic [3] PublicTON,
- -- implicitPrivate [4] IMPLICIT NumberDigits,
- -- explicitPrivate [5] PrivateTON,
- -- other [6] IMPLICIT OtherPlan
- }
- --,
- -- mediaCallCharacteristics MediaCallCharacteristics OPTIONAL
- }
- NumberDigits ::= IA5String
- DeviceNumber ::= INTEGER
- LocalConnectionState ::= [APPLICATION 14] IMPLICIT ENUMERATED
- { null (0),
- initiated (1),
- alerting (2),
- connected (3),
- hold (4),
- queued (5),
- fail (6)}
- EventCause ::= ENUMERATED
- -- a general list of cause codes
- -- Present in Added in Added in
- -- Version 1 Version 2 Version 3
- { aCDBusy (57),
- aCDForward (58),
- aCDSaturated (59),
- activeParticipation (1),
- alertTimeExpired (60),
- alternate (2),
- autoWork (61),
- blocked (35),
- busy (3),
- callBack (4),
- callCancelled (5),
- callForward (9),
- callForwardImmediate (6),
- callForwardBusy (7),
- callForwardNoAnswer (8),
- callNotAnswered (10),
- callPickup (11),
- campOn (12),
- campOnTrunks (62),
- characterCountReached (36),
- conference (63),
- consultation (37),
- destDetected (64),
- destNotObtainable (13),
- destOutOfOrder (65),
- distributed (38),
- distributionDelay (66),
- doNotDisturb (14),
- dTMFDigitDetected (39),
- durationExceeded (40),
- endOfMessageDetected (41),
- enteringDistribution (42),
- forcedPause (43),
- forcedTransition (67),
- incompatibleDestination (15),
- intrude (68),
- invalidAccountCode (16),
- invalidNumberFormat (69),
- joinCall (70),
- keyOperation (17),
- keyOperationInUse (71),
- lockout (18),
- maintenance (19),
- makeCall (44),
- makePredictiveCall (72),
- messageDurationExceeded (73),
- messageSizeExceeded (45),
- multipleAlerting (74),
- multipleQueuing (75),
- networkCongestion (20),
- networkDialling (76),
- networkNotObtainable (21),
- networkOutOfOrder (77),
- networkSignal (46),
- newCall (22),
- nextMessage (47),
- noAvailableAgents (23),
- normal (78),
- normalClearing (48),
- noSpeechDetected (49),
- notAvaliableBearerService (79),
- notSupportedBearerService (80),
- numberChanged (50),
- numberUnallocated (81),
- overflow (26),
- override (24),
- park (25),
- queueCleared (82),
- recall (27),
- redirected (28),
- remainsInQueue (83),
- reorderTone (29),
- reserved (84),
- resourcesNotAvailable (30),
- selectedTrunkBusy (85),
- silentParticipation (31),
- singleStepConference (51),
- singleStepTransfer (52),
- speechDetected (53),
- suspend (86),
- switchingFunctionTerminated (54),
- terminationCharacterReceived (55),
- timeout (56),
- transfer (32),
- trunksBusy (33),
- unauthorisedBearerService (87)}
- -- voiceUnitInitiator (34) }
- ASN1
- #$pdu2 = unpack ("H*", $pdu2);
- #print $pdu2;
- my $obj = $asn->find('CSTAEventReportArgument');
- my $out2= $obj->decode($pdu2) or die $asn->error;
- print Dumper($out2);
- print "initiatingDevice:",$out2->{eventSpecificInfo}->{callControlEvents}->{serviceInitiated}->{initiatingDevice}->{deviceIdentifier}->{deviceIdentifier}->{dialingNumber};
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement