em-proxy 0.1.6 → 0.1.7

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/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gemspec
3
+ gemspec
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- em-proxy (0.1.5)
4
+ em-proxy (0.1.6)
5
5
  eventmachine
6
6
 
7
7
  GEM
@@ -19,6 +19,7 @@ GEM
19
19
  eventmachine
20
20
  eventmachine (1.0.0.beta.4)
21
21
  http_parser.rb (0.5.3)
22
+ rake (0.9.2.2)
22
23
  rspec (2.7.0)
23
24
  rspec-core (~> 2.7.0)
24
25
  rspec-expectations (~> 2.7.0)
@@ -35,4 +36,5 @@ DEPENDENCIES
35
36
  ansi
36
37
  em-http-request
37
38
  em-proxy!
39
+ rake
38
40
  rspec
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "em-proxy"
6
- s.version = "0.1.6"
6
+ s.version = "0.1.7"
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["Ilya Grigorik"]
9
9
  s.email = ["ilya@igvita.com"]
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.add_development_dependency "rspec"
18
18
  s.add_development_dependency "em-http-request"
19
19
  s.add_development_dependency "ansi"
20
+ s.add_development_dependency "rake"
20
21
 
21
22
  s.files = `git ls-files`.split("\n")
22
23
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -1,17 +1,17 @@
1
1
  require 'lib/em-proxy'
2
2
 
3
- Proxy.start(:host => "0.0.0.0", :port => 80, :debug => true) do |conn|
3
+ Proxy.start(:host => "0.0.0.0", :port => 8000, :debug => true) do |conn|
4
4
  @start = Time.now
5
5
  @data = Hash.new("")
6
6
 
7
- conn.server :test, :host => "127.0.0.1", :port => 81 # production, will render resposne
8
- conn.server :prod, :host => "127.0.0.1", :port => 82 # testing, internal only
7
+ conn.server :prod, :host => "127.0.0.1", :port => 8100 # production, will render resposne
8
+ conn.server :test, :host => "127.0.0.1", :port => 8200 # testing, internal only
9
9
 
10
10
  conn.on_data do |data|
11
11
  # rewrite User-Agent
12
12
  data.gsub(/User-Agent: .*?\r\n/, "User-Agent: em-proxy/0.1\r\n")
13
13
  end
14
-
14
+
15
15
  conn.on_response do |server, resp|
16
16
  # only render response from production
17
17
  @data[server] += resp
@@ -21,16 +21,17 @@ Proxy.start(:host => "0.0.0.0", :port => 80, :debug => true) do |conn|
21
21
  conn.on_finish do |name|
22
22
  p [:on_finish, name, Time.now - @start]
23
23
  p @data
24
+ :close if name == :prod
24
25
  end
25
26
  end
26
27
 
27
28
  #
28
- # ruby examples/appserver.rb 81
29
- # ruby examples/appserver.rb 82
29
+ # ruby examples/appserver.rb 8100 1
30
+ # ruby examples/appserver.rb 8200 3
30
31
  # ruby examples/line_interceptor.rb
31
- # curl localhost
32
+ # curl localhost:8000
32
33
  #
33
34
  # > [:on_finish, 1.008561]
34
35
  # > {:prod=>"HTTP/1.1 200 OK\r\nConnection: close\r\nDate: Fri, 01 May 2009 04:20:00 GMT\r\nContent-Type: text/plain\r\n\r\nhello world: 0",
35
36
  # :test=>"HTTP/1.1 200 OK\r\nConnection: close\r\nDate: Fri, 01 May 2009 04:20:00 GMT\r\nContent-Type: text/plain\r\n\r\nhello world: 1"}
36
- #
37
+ #
@@ -2,8 +2,9 @@ require 'em-proxy'
2
2
  require 'http/parser' # gem install http_parser.rb
3
3
  require 'uuid' # gem install uuid
4
4
 
5
- # > ruby em-proxy-http.rb
5
+ # > ruby http_proxy.rb
6
6
  # > curl --proxy localhost:9889 www.google.com
7
+ # > curl --proxy x.x.x.x:9889 www.google.com - bind ip example
7
8
 
8
9
  host = "0.0.0.0"
9
10
  port = 9889
@@ -17,7 +18,8 @@ Proxy.start(:host => host, :port => port) do |conn|
17
18
  puts "New session: #{session} (#{h.inspect})"
18
19
 
19
20
  host, port = h['Host'].split(':')
20
- conn.server session, :host => host, :port => (port || 80)
21
+ conn.server session, :host => host, :port => (port || 80) #, :bind_host => conn.sock[0] - # for bind ip
22
+
21
23
  conn.relay_to_servers @buffer
22
24
 
23
25
  @buffer.clear
@@ -43,7 +43,7 @@ module EventMachine
43
43
  # initialize connections to backend servers
44
44
  #
45
45
  def server(name, opts)
46
- srv = EventMachine::connect(opts[:host], opts[:port], EventMachine::ProxyServer::Backend, @debug) do |c|
46
+ srv = EventMachine::bind_connect(opts[:bind_host], opts[:bind_port], opts[:host], opts[:port], EventMachine::ProxyServer::Backend, @debug) do |c|
47
47
  c.name = name
48
48
  c.plexer = self
49
49
  c.proxy_incoming_to(self, 10240) if opts[:relay_server]
@@ -57,8 +57,20 @@ module EventMachine
57
57
  # [ip, port] of the connected client
58
58
  #
59
59
  def peer
60
- peername = get_peername
61
- @peer ||= peername ? Socket.unpack_sockaddr_in(peername).reverse : nil
60
+ @peer ||= begin
61
+ peername = get_peername
62
+ peername ? Socket.unpack_sockaddr_in(peername).reverse : nil
63
+ end
64
+ end
65
+
66
+ #
67
+ # [ip, port] of the local server connect
68
+ #
69
+ def sock
70
+ @sock ||= begin
71
+ sockname = get_sockname
72
+ sockname ? Socket.unpack_sockaddr_in(sockname).reverse : nil
73
+ end
62
74
  end
63
75
 
64
76
  #
@@ -95,7 +107,7 @@ module EventMachine
95
107
  end
96
108
 
97
109
  # if all connections are terminated downstream, then notify client
98
- if @servers.values.compact.size.zero? and close != :keep
110
+ if (@servers.values.compact.size.zero? && close != :keep) || (close == :close)
99
111
  close_connection_after_writing
100
112
  end
101
113
  end
@@ -133,7 +133,7 @@ describe Proxy do
133
133
  lambda {
134
134
  EM.run do
135
135
  EventMachine.add_timer(0.1) do
136
- http =EventMachine::HttpRequest.new('http://127.0.0.1:8080/').get({:timeout => 1})
136
+ http = EventMachine::HttpRequest.new('http://127.0.0.1:8080/').get({:timeout => 1})
137
137
  http.callback { EventMachine.stop }
138
138
  end
139
139
 
@@ -151,7 +151,7 @@ describe Proxy do
151
151
  lambda {
152
152
  EM.run do
153
153
  EventMachine.add_timer(0.1) do
154
- http =EventMachine::HttpRequest.new('http://127.0.0.1:8080/').get({:timeout => 1})
154
+ http = EventMachine::HttpRequest.new('http://127.0.0.1:8080/').get({:timeout => 1})
155
155
  http.callback { EventMachine.stop }
156
156
  end
157
157
 
@@ -164,4 +164,4 @@ describe Proxy do
164
164
  end
165
165
  }.should_not raise_error
166
166
  end
167
- end
167
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: em-proxy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-27 00:00:00.000000000 Z
12
+ date: 2012-10-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: eventmachine
16
- requirement: &2156629200 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2156629200
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: rspec
27
- requirement: &2156628760 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *2156628760
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: em-http-request
38
- requirement: &2156628320 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: '0'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *2156628320
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: ansi
49
- requirement: &2156627720 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,7 +69,28 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *2156627720
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rake
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
58
94
  description: EventMachine Proxy DSL
59
95
  email:
60
96
  - ilya@igvita.com
@@ -112,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
148
  version: '0'
113
149
  requirements: []
114
150
  rubyforge_project: em-proxy
115
- rubygems_version: 1.8.10
151
+ rubygems_version: 1.8.24
116
152
  signing_key:
117
153
  specification_version: 3
118
154
  summary: EventMachine Proxy DSL