mgparser 0.1.1 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/mgparser +90 -127
- data/lib/optparser.rb +4 -6
- data/lib/version.rb +1 -1
- metadata +3 -3
data/bin/mgparser
CHANGED
@@ -7,6 +7,7 @@ require 'snmp'
|
|
7
7
|
require 'optparse'
|
8
8
|
require 'ostruct'
|
9
9
|
|
10
|
+
require 'call'
|
10
11
|
require 'optparser'
|
11
12
|
require 'snmp_gw'
|
12
13
|
|
@@ -14,137 +15,99 @@ $options = Option.parse(ARGV)
|
|
14
15
|
$causes = {"1" => "Unallocated (unassigned) number",
|
15
16
|
"2" => "No route to specified transit network (national use)",
|
16
17
|
"3" => "No route to destination",
|
17
|
-
"4" => "
|
18
|
-
"5" => "
|
19
|
-
"6" => "
|
20
|
-
"
|
21
|
-
"
|
22
|
-
"
|
18
|
+
"4" => "Send special information tone",
|
19
|
+
"5" => "Misdialed trunk prefix (national use)",
|
20
|
+
"6" => "Channel unacceptable",
|
21
|
+
"7" => "Call awarded, being delivered in an established channel",
|
22
|
+
"8" => "Preemption",
|
23
|
+
"9" => "Preemption - circuit reserved for reuse",
|
24
|
+
"16" => "Normal hangup (one of the endpoints requested it, if not, there are line problems)",
|
25
|
+
"17" => "User busy",
|
26
|
+
"18" => "No user responding",
|
27
|
+
"19" => "No answer from user (user alerted)",
|
28
|
+
"20" => "Subscriber absent",
|
29
|
+
"21" => "Call rejected",
|
30
|
+
"22" => "Number changed",
|
31
|
+
"26" => "Non-selected user clearing",
|
32
|
+
"27" => "Destination out of order",
|
33
|
+
"28" => "Invalid number format (address incomplete)",
|
34
|
+
"29" => "Facilities rejected",
|
35
|
+
"30" => "Response to STATUS INQUIRY",
|
36
|
+
"31" => "Normal unspecified (destination could be busy)",
|
37
|
+
"34" => "No circuit/channel available",
|
38
|
+
"35" => "Call queued",
|
39
|
+
"38" => "Network out of order(check your local ISDN connectionsline and line status)",
|
40
|
+
"39" => "Permanent frame mode connection out-of-service",
|
41
|
+
"40" => "Permanent frame mode connection operational",
|
42
|
+
"41" => "Temporary failure",
|
43
|
+
"42" => "Switching equipment congestion",
|
44
|
+
"43" => "Access information discarded",
|
45
|
+
"44" => "Requested circuit/channel not available",
|
46
|
+
"46" => "Precedence call blocked",
|
47
|
+
"47" => "Resource unavailable, unspecified",
|
48
|
+
"49" => "Quality of service not available",
|
49
|
+
"50" => "Requested facility not subscribed",
|
50
|
+
"52" => "Outgoing calls barred",
|
51
|
+
"53" => "Outgoing calls barred within cug",
|
52
|
+
"54" => "Incoming calls barre",
|
53
|
+
"55" => "Incoming calls barred within cug",
|
54
|
+
"57" => "Bearer capability not authorized",
|
55
|
+
"58" => "Bearer capability not presently available",
|
56
|
+
"62" => "Inconsistency in outgoing information element",
|
57
|
+
"63" => "Service or option not available. unspecified",
|
58
|
+
"65" => "Bearer capability not implemented",
|
59
|
+
"66" => "Channel type not implemented",
|
60
|
+
"69" => "Requested facility not implemented",
|
61
|
+
"70" => "Only restricted digital information bearer capability is available",
|
62
|
+
"79" => "Service or option not implemented unspecified",
|
63
|
+
"81" => "Invalid call reference value",
|
64
|
+
"82" => "Identified channel does not exist",
|
65
|
+
"83" => "A suspended call exists, but this call identify does not. this cause indicates that a call resume has been attempted with a call identity which differs from that in use for any presently suspended call(s)",
|
66
|
+
"84" => "Call identity in use",
|
67
|
+
"85" => "No call suspended",
|
68
|
+
"86" => "Call having the requested call identity has been cleared",
|
69
|
+
"87" => "User not a member of cug",
|
70
|
+
"88" => "Incompatible destination",
|
71
|
+
"90" => "Non-existent cug",
|
72
|
+
"91" => "Invalid transit network selection (national use)",
|
73
|
+
"95" => "Invalid message, unspecified",
|
74
|
+
"96" => "Mandatory information element is missing",
|
75
|
+
"97" => "Message type non-existent or not implemented",
|
76
|
+
"98" => "Message not compatible with call state or message type non-existent",
|
77
|
+
"99" => "Information element / parameter non-existent or not implemented",
|
78
|
+
"100" => "Invalid information element contents",
|
79
|
+
"101" => "Message not compatible with call state",
|
80
|
+
"102" => "Recovery on timer expiry",
|
81
|
+
"103" => "Parameter non-existent or not implemented - passed on (national use)",
|
82
|
+
"110" => "Message with unrecognized parameter discarded",
|
83
|
+
"111" => "Protocol error, unspecified",
|
84
|
+
"127" => "Intel-working, unspecified"
|
23
85
|
}
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
86
|
+
|
87
|
+
if $options.list[:logfile]
|
88
|
+
if FileTest::exist?($options.list[:logfile])
|
89
|
+
data = IO.readlines($options.list[:logfile])
|
90
|
+
call = Call.new(data)
|
91
|
+
else
|
92
|
+
puts "File not found"
|
29
93
|
end
|
94
|
+
else
|
95
|
+
module SyslogServer
|
30
96
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
@callprogr_counter = 0
|
35
|
-
@matched = 0
|
36
|
-
|
37
|
-
trace.each do |line|
|
38
|
-
|
39
|
-
if line =~ /Unicast RECV Setup/
|
40
|
-
@inbound = true
|
41
|
-
|
42
|
-
elsif line =~ /CallRouter \[.*\] Src=/
|
43
|
-
@caller = line.scan(/e164=(\d{1,})/).first
|
44
|
-
|
45
|
-
elsif line =~ /CallRouter \[.*\] Dst\d\/2/
|
46
|
-
@called = line.scan(/e164=(\d{1,})/).first
|
47
|
-
|
48
|
-
|
49
|
-
elsif line =~ /UseNextDestination - Call \d{1,}-\d{1,}/
|
50
|
-
id = line.scan(/UseNextDestination - Call \d{1,}-(\d{1,})/).first
|
51
|
-
if @matched < 1
|
52
|
-
if @inbound == true
|
53
|
-
@matched += 1
|
54
|
-
else
|
55
|
-
puts "Call ID: #{id} - Caller: #{@caller}"
|
56
|
-
puts "Call ID: #{id} - Called: #{@called}"
|
57
|
-
end
|
58
|
-
else
|
59
|
-
puts "Call ID: #{id} - Caller: #{@caller}"
|
60
|
-
puts "Call ID: #{id} - Called: #{@called}"
|
61
|
-
@matched = 0
|
62
|
-
end
|
63
|
-
|
64
|
-
elsif line =~ /CallManager \[.*\] C\d{1,} - Send CallSetupA/
|
65
|
-
id = line.scan(/C(\d{1,})/).first
|
66
|
-
if @inbound == true
|
67
|
-
puts "Call ID: #{id} - <== ISDN setup received"
|
68
|
-
else
|
69
|
-
puts "Call ID: #{id} - ==> ISDN setup sent"
|
70
|
-
end
|
71
|
-
@inbound = false
|
72
|
-
|
73
|
-
elsif line =~ /"Proceeding Indication" .* for state CallSetup./
|
74
|
-
@progress_indication = true
|
75
|
-
|
76
|
-
elsif line =~ /CallManager \[.*\] C\d{1,} - CallProgressA\(2\)/
|
77
|
-
@callprogr_counter += 1
|
78
|
-
id = line.scan(/C(\d{1,})/).first
|
79
|
-
|
80
|
-
if @progress_indication == true
|
81
|
-
#puts "Call ID: #{id} - <== \"Proceeding indication\" received from operator"
|
82
|
-
@progress_indication = false
|
83
|
-
else
|
84
|
-
if @callprogr_counter >= 3
|
85
|
-
puts "Call ID: #{id} - <== The call will be probably answered by operator\'s voicemail or is being forwarded"
|
86
|
-
@callprogr_counter = 0
|
87
|
-
else
|
88
|
-
puts "Call ID: #{id} - <== \"Call Progress\" received from operator"
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
elsif line =~ /CallManager \[.*\] C\d{1,} - CallProgressA\(3\)/
|
93
|
-
id = line.scan(/C(\d{1,})/).first
|
94
|
-
puts "Call ID: #{id} - ==> \"Call Progress\" sent to the operator"
|
95
|
-
|
96
|
-
|
97
|
-
elsif line =~ /CallManager \[.*\] C\d{1,} - CallProgressA\(1\)/
|
98
|
-
id = line.scan(/C(\d{1,})/).first
|
99
|
-
puts "Call ID: #{id} - <== Destination number is ringing"
|
100
|
-
|
101
|
-
|
102
|
-
elsif line =~ /CallManager \[.*\] C\d{1,} - CallConnectA/
|
103
|
-
id = line.scan(/C(\d{1,})/).first
|
104
|
-
puts "Call ID: #{id} - Call has been answered!"
|
97
|
+
def post_init
|
98
|
+
puts "Media Gateway is connected!"
|
99
|
+
end
|
105
100
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
@isdn_inbound_disconnect = true
|
110
|
-
|
111
|
-
|
112
|
-
elsif line =~ /CallManager \[.*\] C\d{1,} - Send CallReleaseA\(\d{1,}\)/
|
113
|
-
id = line.scan(/C(\d{1,})/).first
|
114
|
-
cause = line.scan(/Send CallReleaseA\((\d{1,})/).first
|
115
|
-
|
116
|
-
if @isdn_inbound_disconnect == true
|
117
|
-
puts "Call ID: #{id} - <== Operator requested hangup with cause: \"#{$causes[cause.first]}\""
|
118
|
-
@isdn_inbound_disconnect = false
|
119
|
-
else
|
120
|
-
puts "Call ID: #{id} - ==> Gateway sent hangup with cause: \"#{$causes[cause.first]}\""
|
121
|
-
end
|
122
|
-
|
123
|
-
end
|
101
|
+
def receive_data(data)
|
102
|
+
call = Call.new(data)
|
103
|
+
end
|
124
104
|
end
|
125
|
-
|
126
|
-
end
|
127
|
-
end
|
128
105
|
|
129
|
-
#We initialize eventmachine
|
130
|
-
EventMachine::run do
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
106
|
+
#We initialize eventmachine
|
107
|
+
EventMachine::run do
|
108
|
+
host = UDPSocket.open {|s| s.connect($options.list[:ipaddr],30000); s.addr.last }
|
109
|
+
port = $options.list[:port]
|
110
|
+
snmpgw = SnmpGw.new($options.list[:port],$options.list[:ipaddr],$options.list[:snmp])
|
111
|
+
EventMachine::open_datagram_socket host, port, SyslogServer
|
112
|
+
end
|
135
113
|
end
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
#class Parser
|
140
|
-
# def initialize(file)
|
141
|
-
# if FileTest::exist?(file)
|
142
|
-
# file_lines = IO.readlines(file)
|
143
|
-
# analyzer(file_lines)
|
144
|
-
# else
|
145
|
-
# puts "File not found"
|
146
|
-
# end
|
147
|
-
# end
|
148
|
-
#
|
149
|
-
#parser = Parser.new(ARGV.first)
|
150
|
-
#parser
|
data/lib/optparser.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
require "version"
|
3
3
|
|
4
|
+
class Option
|
5
|
+
|
4
6
|
#
|
5
7
|
# Return a structure describing the options.
|
6
8
|
#
|
@@ -44,10 +46,6 @@
|
|
44
46
|
options.list[:logfile] = logfile
|
45
47
|
end
|
46
48
|
|
47
|
-
# Boolean switch.
|
48
|
-
opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
49
|
-
options.verbose = v
|
50
|
-
end
|
51
49
|
|
52
50
|
opts.separator ""
|
53
51
|
opts.separator "Common options:"
|
@@ -61,7 +59,7 @@
|
|
61
59
|
|
62
60
|
# Another typical switch to print the version.
|
63
61
|
opts.on_tail("--version", "Show version") do
|
64
|
-
puts
|
62
|
+
puts Mgparser::VERSION::STRING
|
65
63
|
exit
|
66
64
|
end
|
67
65
|
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mgparser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 3
|
10
|
+
version: 0.1.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Dawid Pogorzelski
|