mgparser 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|