DIY-pcap 0.3.6 → 0.3.8
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/diy/controller.rb +12 -9
- data/lib/diy/utils.rb +1 -1
- data/lib/diy/version.rb +1 -1
- data/lib/diy/worker.rb +56 -8
- metadata +9 -7
data/lib/diy/controller.rb
CHANGED
@@ -45,14 +45,15 @@ module DIY
|
|
45
45
|
DIY::Logger.info @offline.mac_learner.dump
|
46
46
|
break
|
47
47
|
end
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
48
|
+
begin
|
49
|
+
@offline.next_pcap
|
50
|
+
client.terminal
|
51
|
+
server.terminal
|
52
|
+
rescue EOFError
|
53
|
+
client.terminal
|
54
|
+
server.terminal
|
55
|
+
break
|
56
|
+
end
|
56
57
|
#~ client,server = @client, @server
|
57
58
|
rescue EOFError
|
58
59
|
client.terminal
|
@@ -90,8 +91,9 @@ module DIY
|
|
90
91
|
end
|
91
92
|
|
92
93
|
recv_pkt_proc_set( pkts )
|
94
|
+
@ready = false
|
93
95
|
server.ready(&@recv_pkt_proc)
|
94
|
-
|
96
|
+
@ready = true
|
95
97
|
client_send(client, pkts)
|
96
98
|
wait_recv_ok(pkts)
|
97
99
|
server.terminal
|
@@ -103,6 +105,7 @@ module DIY
|
|
103
105
|
# 不重新赋值, 防止 DRb 回收
|
104
106
|
@recv_pkt_proc ||= lambda do |recv_pkt|
|
105
107
|
begin
|
108
|
+
next unless @ready # strip this recv pkt unless it's ready to.
|
106
109
|
next if @error_flag # error accur waiting other thread do with it
|
107
110
|
@recv_pkt_keeper = Packet.new(recv_pkt)
|
108
111
|
@strategy.call(@queue_keeper.first, @recv_pkt_keeper, @queue_keeper)
|
data/lib/diy/utils.rb
CHANGED
data/lib/diy/version.rb
CHANGED
data/lib/diy/worker.rb
CHANGED
@@ -30,7 +30,10 @@ module DIY
|
|
30
30
|
@recv_t = Thread.new do
|
31
31
|
DIY::Logger.info "start thread recving pkt..."
|
32
32
|
@live.loop do |this, pkt|
|
33
|
-
|
33
|
+
if ! @start
|
34
|
+
@recv_stop_flag = true
|
35
|
+
next
|
36
|
+
end
|
34
37
|
@queue.push(pkt.body)
|
35
38
|
end
|
36
39
|
DIY::Logger.debug "worker: stopped loop recv"
|
@@ -45,7 +48,15 @@ module DIY
|
|
45
48
|
begin
|
46
49
|
pkt = @queue.pop
|
47
50
|
#~ DIY::Logger.info "callback: #{pkt}"
|
48
|
-
|
51
|
+
|
52
|
+
if ! @start
|
53
|
+
@callback_stop_flag = true
|
54
|
+
next
|
55
|
+
end
|
56
|
+
|
57
|
+
if @block and pkt
|
58
|
+
@block.call(pkt)
|
59
|
+
end
|
49
60
|
rescue DRb::DRbConnError
|
50
61
|
DIY::Logger.info "closed connection by controller"
|
51
62
|
@start = false
|
@@ -61,24 +72,22 @@ module DIY
|
|
61
72
|
|
62
73
|
#收包
|
63
74
|
def ready(&block)
|
64
|
-
|
75
|
+
stopping
|
65
76
|
DIY::Logger.info("start recv pkt")
|
66
77
|
@block = block
|
67
|
-
|
68
|
-
@start = true
|
78
|
+
start
|
69
79
|
end
|
70
80
|
|
71
81
|
# 停止收发
|
72
82
|
def terminal
|
73
83
|
DIY::Logger.info("stop recv pkt")
|
74
|
-
|
75
|
-
@queue.clear
|
84
|
+
pause
|
76
85
|
end
|
77
86
|
|
78
87
|
# 停止线程
|
79
88
|
def stop
|
80
89
|
@running = false
|
81
|
-
|
90
|
+
pause
|
82
91
|
@live.break
|
83
92
|
Utils.wait_until { @recv_t && ! @recv_t.alive? }
|
84
93
|
Utils.wait_until { @callback_t && ! @callback_t.alive? }
|
@@ -92,6 +101,45 @@ module DIY
|
|
92
101
|
def inspect
|
93
102
|
"<Worker: #{@live.net}>"
|
94
103
|
end
|
104
|
+
|
105
|
+
private
|
106
|
+
def stopping
|
107
|
+
pause
|
108
|
+
while ! paused?
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def pause
|
113
|
+
@start = false
|
114
|
+
@recv_stop_flag = false
|
115
|
+
@callback_stop_flag = false
|
116
|
+
@queue.clear
|
117
|
+
@queue.push nil
|
118
|
+
end
|
119
|
+
|
120
|
+
def start
|
121
|
+
@start = true
|
122
|
+
end
|
123
|
+
|
124
|
+
def paused?
|
125
|
+
! @start and recv_stop? and callback_stop?
|
126
|
+
end
|
127
|
+
|
128
|
+
def recv_stop
|
129
|
+
@recv_stop_flag = true
|
130
|
+
end
|
131
|
+
|
132
|
+
def recv_stop?
|
133
|
+
@recv_stop_flag
|
134
|
+
end
|
135
|
+
|
136
|
+
def callback_stop
|
137
|
+
@callback_stop_flag = true
|
138
|
+
end
|
139
|
+
|
140
|
+
def callback_stop?
|
141
|
+
@callback_stop_flag
|
142
|
+
end
|
95
143
|
|
96
144
|
end
|
97
145
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: DIY-pcap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 3
|
5
|
+
prerelease:
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
9
|
+
- 8
|
10
|
+
version: 0.3.8
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- yafei Lee
|
@@ -14,8 +15,7 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2012-10-
|
18
|
-
default_executable:
|
18
|
+
date: 2012-10-29 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: ffi-pcap
|
@@ -25,6 +25,7 @@ dependencies:
|
|
25
25
|
requirements:
|
26
26
|
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
+
hash: 23
|
28
29
|
segments:
|
29
30
|
- 0
|
30
31
|
- 2
|
@@ -149,7 +150,6 @@ files:
|
|
149
150
|
- spec/spec_helper.rb
|
150
151
|
- spec/utils_spec.rb
|
151
152
|
- spec/worker_spec.rb
|
152
|
-
has_rdoc: true
|
153
153
|
homepage: ""
|
154
154
|
licenses: []
|
155
155
|
|
@@ -163,6 +163,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
163
163
|
requirements:
|
164
164
|
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
+
hash: 3
|
166
167
|
segments:
|
167
168
|
- 0
|
168
169
|
version: "0"
|
@@ -171,13 +172,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
171
172
|
requirements:
|
172
173
|
- - ">="
|
173
174
|
- !ruby/object:Gem::Version
|
175
|
+
hash: 3
|
174
176
|
segments:
|
175
177
|
- 0
|
176
178
|
version: "0"
|
177
179
|
requirements: []
|
178
180
|
|
179
181
|
rubyforge_project:
|
180
|
-
rubygems_version: 1.
|
182
|
+
rubygems_version: 1.8.24
|
181
183
|
signing_key:
|
182
184
|
specification_version: 3
|
183
185
|
summary: DIY pcap send and recv
|