rtunnel 0.3.6 → 0.3.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/History.txt CHANGED
File without changes
data/README.txt CHANGED
File without changes
data/bin/rtunnel_client CHANGED
File without changes
data/bin/rtunnel_server CHANGED
File without changes
data/lib/core.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module RTunnel
2
- VERSION = '0.3.6'
2
+ VERSION = '0.3.7'
3
3
 
4
4
  DEFAULT_CONTROL_PORT = 19050
5
5
  PING_TIMEOUT = 10
File without changes
File without changes
data/lib/server.rb CHANGED
@@ -16,9 +16,11 @@ module RTunnel
16
16
  # listens for incoming connections to tunnel
17
17
  class RemoteListenServer < GServer
18
18
  CONNECTIONS = SyncHash.new
19
+ CONTROL_CONNECTION_MAPPING = SyncHash.new
19
20
 
20
- def initialize(port, host = DEFAULT_HOST)
21
+ def initialize(port, host, control_connection)
21
22
  super(port, host, 10)
23
+ @control_connection = control_connection
22
24
  end
23
25
 
24
26
  def serve(sock)
@@ -26,6 +28,7 @@ module RTunnel
26
28
 
27
29
  conn_id = UUID.t
28
30
  CONNECTIONS[conn_id] = sock
31
+ CONTROL_CONNECTION_MAPPING[conn_id] = @control_connection
29
32
  begin
30
33
  ControlServer.new_tunnel(conn_id)
31
34
 
@@ -36,9 +39,11 @@ module RTunnel
36
39
  D "error talking on control connection, dropping incoming connection: #{$!.inspect}"
37
40
  end
38
41
 
39
- CONNECTIONS.delete conn_id
40
42
  ControlServer.close_tunnel(conn_id)
41
43
 
44
+ CONNECTIONS.delete conn_id
45
+ CONTROL_CONNECTION_MAPPING.delete conn_id
46
+
42
47
  D "sock closed"
43
48
  rescue
44
49
  p $!
@@ -47,32 +52,40 @@ module RTunnel
47
52
  end
48
53
 
49
54
  class ControlServer < GServer
50
- @@control_connection = nil
51
- @@remote_listen_server = nil
55
+ @@control_connections = []
56
+ @@remote_listen_servers = []
52
57
 
53
58
  @@m = Mutex.new
54
59
 
55
60
  attr_accessor :ping_interval
56
61
 
57
- def self.new_tunnel(conn_id)
58
- D "sending create connection command: #{conn_id}"
62
+ class << self
63
+ def new_tunnel(conn_id)
64
+ D "sending create connection command: #{conn_id}"
59
65
 
60
- @@m.synchronize { @@control_connection.write CreateConnectionCommand.new(conn_id) }
61
- end
66
+ @@m.synchronize { control_connection_for(conn_id).write CreateConnectionCommand.new(conn_id) }
67
+ end
62
68
 
63
- def self.send_data(conn_id, data)
64
- @@m.synchronize { @@control_connection.write SendDataCommand.new(conn_id, data) }
65
- end
69
+ def send_data(conn_id, data)
70
+ @@m.synchronize { control_connection_for(conn_id).write SendDataCommand.new(conn_id, data) }
71
+ end
72
+
73
+ def close_tunnel(conn_id)
74
+ D "sending close connection command"
66
75
 
67
- def self.close_tunnel(conn_id)
68
- D "sending close connection command"
76
+ @@m.synchronize { control_connection_for(conn_id).write CloseConnectionCommand.new(conn_id) }
77
+ end
69
78
 
70
- @@m.synchronize { @@control_connection.write CloseConnectionCommand.new(conn_id) }
79
+ private
80
+
81
+ def control_connection_for(conn_id)
82
+ RemoteListenServer::CONTROL_CONNECTION_MAPPING[conn_id]
83
+ end
71
84
  end
72
85
 
73
86
  def serve(sock)
74
87
  D "new control connection"
75
- @@control_connection = sock
88
+ @@control_connections << sock
76
89
  sock.sync = true
77
90
 
78
91
  cmd_queue = ""
@@ -84,8 +97,13 @@ module RTunnel
84
97
  case cmd
85
98
  when RemoteListenCommand
86
99
  @@m.synchronize do
87
- @@remote_listen_server.stop if @@remote_listen_server
88
- (@@remote_listen_server = RemoteListenServer.new(*cmd.address.split(/:/).reverse)).start
100
+ addr, port = cmd.address.split(/:/)
101
+ if rls = @@remote_listen_servers.detect {|s| s.port == port.to_i }
102
+ rls.stop
103
+ @@remote_listen_servers.delete rls
104
+ end
105
+ (new_rls = RemoteListenServer.new(port, addr, sock)).start
106
+ @@remote_listen_servers << new_rls
89
107
  end
90
108
  D "listening for remote connections on #{cmd.address}"
91
109
  when SendDataCommand
@@ -106,12 +124,15 @@ module RTunnel
106
124
  end
107
125
  end
108
126
 
109
- @@m.synchronize { @@control_connection.write PingCommand.new }
127
+ # TODO: only do this every ping_interval instead of after each socket read
128
+ @@m.synchronize { @@control_connections.each {|cc| cc.write PingCommand.new } }
110
129
  end
111
130
  rescue
112
131
  D $!.inspect
113
132
  D $!.backtrace.join("\n")
114
133
  raise
134
+ ensure
135
+ @@control_connections.delete sock
115
136
  end
116
137
 
117
138
  def stopping
@@ -151,4 +172,4 @@ module RTunnel
151
172
  ControlServer.stop(@control_server.port, @control_server.host)
152
173
  end
153
174
  end
154
- end
175
+ end
data/rtunnel_client.rb CHANGED
File without changes
data/rtunnel_server.rb CHANGED
File without changes
metadata CHANGED
@@ -1,68 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.4
3
- specification_version: 1
4
2
  name: rtunnel
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.3.6
7
- date: 2008-02-12 00:00:00 +07:00
8
- summary: The author was too lazy to write a summary
9
- require_paths:
10
- - lib
11
- email: ryand-ruby@zenspider.com
12
- homepage: http://www.zenspider.com/ZSS/Products/rtunnel/
13
- rubyforge_project: coderrr
14
- description: "OkExtensions by steved http://code.google.com/p/rtunnel == DESCRIPTION: http://code.google.com/p/rtunnel"
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 0.3.7
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
- - Ryan Davis
31
- files:
32
- - History.txt
33
- - Manifest.txt
34
- - README.txt
35
- - rtunnel_client.rb
36
- - rtunnel_server.rb
37
- - bin/rtunnel_client
38
- - bin/rtunnel_server
39
- - lib/rtunnel_client_cmd.rb
40
- - lib/rtunnel_server_cmd.rb
41
- - lib/client.rb
42
- - lib/core.rb
43
- - lib/server.rb
44
- - lib/cmds.rb
45
- test_files: []
46
-
47
- rdoc_options:
48
- - --main
49
- - README.txt
50
- extra_rdoc_files:
51
- - History.txt
52
- - Manifest.txt
53
- - README.txt
54
- executables:
55
- - rtunnel_client
56
- - rtunnel_server
57
- extensions: []
58
-
59
- requirements: []
7
+ - coderrr
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
60
11
 
12
+ date: 2008-09-15 00:00:00 +07:00
13
+ default_executable:
61
14
  dependencies:
62
15
  - !ruby/object:Gem::Dependency
63
16
  name: uuidtools
17
+ type: :runtime
64
18
  version_requirement:
65
- version_requirements: !ruby/object:Gem::Version::Requirement
19
+ version_requirements: !ruby/object:Gem::Requirement
66
20
  requirements:
67
21
  - - ">="
68
22
  - !ruby/object:Gem::Version
@@ -70,8 +24,9 @@ dependencies:
70
24
  version:
71
25
  - !ruby/object:Gem::Dependency
72
26
  name: facets
27
+ type: :runtime
73
28
  version_requirement:
74
- version_requirements: !ruby/object:Gem::Version::Requirement
29
+ version_requirements: !ruby/object:Gem::Requirement
75
30
  requirements:
76
31
  - - ">="
77
32
  - !ruby/object:Gem::Version
@@ -79,10 +34,65 @@ dependencies:
79
34
  version:
80
35
  - !ruby/object:Gem::Dependency
81
36
  name: hoe
37
+ type: :runtime
82
38
  version_requirement:
83
- version_requirements: !ruby/object:Gem::Version::Requirement
39
+ version_requirements: !ruby/object:Gem::Requirement
84
40
  requirements:
85
41
  - - ">="
86
42
  - !ruby/object:Gem::Version
87
- version: 1.3.0
43
+ version: 1.5.3
88
44
  version:
45
+ description: "OkExtensions by steved http://code.google.com/p/rtunnel == DESCRIPTION: http://code.google.com/p/rtunnel"
46
+ email: coderrr.contact@gmail.com
47
+ executables:
48
+ - rtunnel_client
49
+ - rtunnel_server
50
+ extensions: []
51
+
52
+ extra_rdoc_files:
53
+ - History.txt
54
+ - Manifest.txt
55
+ - README.txt
56
+ files:
57
+ - History.txt
58
+ - Manifest.txt
59
+ - README.txt
60
+ - rtunnel_client.rb
61
+ - rtunnel_server.rb
62
+ - bin/rtunnel_client
63
+ - bin/rtunnel_server
64
+ - lib/rtunnel_client_cmd.rb
65
+ - lib/rtunnel_server_cmd.rb
66
+ - lib/client.rb
67
+ - lib/core.rb
68
+ - lib/server.rb
69
+ - lib/cmds.rb
70
+ has_rdoc: true
71
+ homepage: http://code.google.com/p/rtunnel
72
+ post_install_message:
73
+ rdoc_options:
74
+ - --main
75
+ - README.txt
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: "0"
83
+ version:
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: "0"
89
+ version:
90
+ requirements: []
91
+
92
+ rubyforge_project: coderrr
93
+ rubygems_version: 1.2.0
94
+ signing_key:
95
+ specification_version: 2
96
+ summary: http://code.google.com/p/rtunnel
97
+ test_files: []
98
+