Class VirtP2V::Connection
In: lib/virt-p2v/connection.rb
lib/virt-p2v/connection.rb
Parent: Object

Methods

Classes and Modules

Class VirtP2V::Connection::InvalidCredentialsError
Class VirtP2V::Connection::InvalidHostnameError
Class VirtP2V::Connection::NotConnectedError
Class VirtP2V::Connection::ProtocolError
Class VirtP2V::Connection::RemoteError

Public Class methods

[Source]

    # File lib/virt-p2v/connection.rb, line 37
37:     def initialize(hostname, username, password)
38:         @mutex = Mutex.new
39:         @connection_listeners = []
40: 
41:         @hostname = hostname
42:         @username = username
43:         @password = password
44: 
45:         @buffer = ""
46: 
47:         @session = nil
48:         @channel = nil
49:     end

[Source]

    # File lib/virt-p2v/connection.rb, line 37
37:     def initialize(hostname, username, password)
38:         @mutex = Mutex.new
39:         @connection_listeners = []
40: 
41:         @hostname = hostname
42:         @username = username
43:         @password = password
44: 
45:         @buffer = ""
46: 
47:         @session = nil
48:         @channel = nil
49:     end

Public Instance methods

[Source]

     # File lib/virt-p2v/connection.rb, line 110
110:     def close
111:         unless @channel.nil?
112:             @channel.close
113:             @channel = nil
114:         end
115:         unless @session.nil?
116:             @session.close
117:             @session = nil
118:         end
119: 
120:         @buffer = ''
121:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 110
110:     def close
111:         unless @channel.nil?
112:             @channel.close
113:             @channel = nil
114:         end
115:         unless @session.nil?
116:             @session.close
117:             @session = nil
118:         end
119: 
120:         @buffer = ''
121:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 51
 51:     def connect(&cb)
 52:         run(cb) {
 53:             begin
 54:                 @session = Libssh2.connect(@hostname, @username, @password) \
 55:                     if @session.nil?
 56: 
 57:                 @channel = @session.exec('LANG=C virt-p2v-server') \
 58:                     if @channel.nil?
 59:             #rescue Libssh2::Session::InvalidHostnameError
 60:             #    raise InvalidHostnameError
 61:             #rescue Libssh2::Session::InvalidCredentialsError
 62:             #    raise InvalidCredentialsError
 63:             #rescue => ex
 64:             #    raise RemoteError.new(ex.message)
 65:             end
 66: 
 67:             begin
 68:                 line = @channel.read(64)
 69: 
 70:                 if line !~ /^VIRT_P2V_SERVER /
 71:                     raise RemoteError.new("Unexpected response: #{line}")
 72:                 end
 73:             rescue Libssh2::Channel::ApplicationError => ex
 74:                 if ex.message =~ /command not found/
 75:                     raise RemoteError.new(
 76:                         "virt-p2v-server is not installed on #{@hostname}")
 77:                 else
 78:                     raise RemoteError.new(ex.message)
 79:                 end
 80:             end
 81: 
 82:             begin
 83:                 i = 0;
 84:                 listener_result = lambda { |result|
 85:                     if result.kind_of?(Exception)
 86:                         cb.call(result)
 87:                     else
 88:                         i += 1
 89:                         if i == @connection_listeners.length
 90:                             cb.call(true)
 91:                         else
 92:                             Gtk.queue {
 93:                                 @connection_listeners[i].call(listener_result)
 94:                             }
 95:                         end
 96:                     end
 97:                 }
 98:                 Gtk.queue { @connection_listeners[0].call(listener_result) }
 99:             rescue => ex
100:                 @channel.close unless @channel.nil?
101:                 raise ex
102:             end
103:         }
104:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 51
 51:     def connect(&cb)
 52:         run(cb) {
 53:             begin
 54:                 @session = Libssh2.connect(@hostname, @username, @password) \
 55:                     if @session.nil?
 56: 
 57:                 @channel = @session.exec('LANG=C virt-p2v-server') \
 58:                     if @channel.nil?
 59:             #rescue Libssh2::Session::InvalidHostnameError
 60:             #    raise InvalidHostnameError
 61:             #rescue Libssh2::Session::InvalidCredentialsError
 62:             #    raise InvalidCredentialsError
 63:             #rescue => ex
 64:             #    raise RemoteError.new(ex.message)
 65:             end
 66: 
 67:             begin
 68:                 line = @channel.read(64)
 69: 
 70:                 if line !~ /^VIRT_P2V_SERVER /
 71:                     raise RemoteError.new("Unexpected response: #{line}")
 72:                 end
 73:             rescue Libssh2::Channel::ApplicationError => ex
 74:                 if ex.message =~ /command not found/
 75:                     raise RemoteError.new(
 76:                         "virt-p2v-server is not installed on #{@hostname}")
 77:                 else
 78:                     raise RemoteError.new(ex.message)
 79:                 end
 80:             end
 81: 
 82:             begin
 83:                 i = 0;
 84:                 listener_result = lambda { |result|
 85:                     if result.kind_of?(Exception)
 86:                         cb.call(result)
 87:                     else
 88:                         i += 1
 89:                         if i == @connection_listeners.length
 90:                             cb.call(true)
 91:                         else
 92:                             Gtk.queue {
 93:                                 @connection_listeners[i].call(listener_result)
 94:                             }
 95:                         end
 96:                     end
 97:                 }
 98:                 Gtk.queue { @connection_listeners[0].call(listener_result) }
 99:             rescue => ex
100:                 @channel.close unless @channel.nil?
101:                 raise ex
102:             end
103:         }
104:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 106
106:     def connected?
107:         return !@channel.nil?
108:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 106
106:     def connected?
107:         return !@channel.nil?
108:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 191
191:     def container(type, &cb)
192:         raise NotConnectedError if @channel.nil?
193: 
194:         run(cb) {
195:             @channel.write("CONTAINER #{type}\n")
196:             result = parse_return
197: 
198:             Gtk.queue { cb.call(result) }
199:         }
200:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 191
191:     def container(type, &cb)
192:         raise NotConnectedError if @channel.nil?
193: 
194:         run(cb) {
195:             @channel.write("CONTAINER #{type}\n")
196:             result = parse_return
197: 
198:             Gtk.queue { cb.call(result) }
199:         }
200:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 158
158:     def convert(&cb)
159:         raise NotConnectedError if @channel.nil?
160: 
161:         run(cb) {
162:             @channel.write("CONVERT\n")
163:             result = parse_return
164: 
165:             Gtk.queue { cb.call(result) }
166:         }
167:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 158
158:     def convert(&cb)
159:         raise NotConnectedError if @channel.nil?
160: 
161:         run(cb) {
162:             @channel.write("CONVERT\n")
163:             result = parse_return
164: 
165:             Gtk.queue { cb.call(result) }
166:         }
167:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 123
123:     def lang(lang, &cb)
124:         raise NotConnectedError if @channel.nil?
125: 
126:         run(cb) {
127:             @channel.write("LANG #{lang}\n")
128:             result = parse_return
129: 
130:             Gtk.queue { cb.call(result) }
131:         }
132:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 123
123:     def lang(lang, &cb)
124:         raise NotConnectedError if @channel.nil?
125: 
126:         run(cb) {
127:             @channel.write("LANG #{lang}\n")
128:             result = parse_return
129: 
130:             Gtk.queue { cb.call(result) }
131:         }
132:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 169
169:     def list_profiles(&cb)
170:         raise NotConnectedError if @channel.nil?
171: 
172:         run(cb) {
173:             @channel.write("LIST_PROFILES\n")
174:             result = parse_return
175: 
176:             Gtk.queue { cb.call(result) }
177:         }
178:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 169
169:     def list_profiles(&cb)
170:         raise NotConnectedError if @channel.nil?
171: 
172:         run(cb) {
173:             @channel.write("LIST_PROFILES\n")
174:             result = parse_return
175: 
176:             Gtk.queue { cb.call(result) }
177:         }
178:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 134
134:     def metadata(meta, &cb)
135:         raise NotConnectedError if @channel.nil?
136: 
137:         run(cb) {
138:             payload = YAML::dump(meta)
139:             @channel.write("METADATA #{payload.length}\n");
140:             @channel.write(payload)
141:             result = parse_return
142: 
143:             Gtk.queue { cb.call(result) }
144:         }
145:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 134
134:     def metadata(meta, &cb)
135:         raise NotConnectedError if @channel.nil?
136: 
137:         run(cb) {
138:             payload = YAML::dump(meta)
139:             @channel.write("METADATA #{payload.length}\n");
140:             @channel.write(payload)
141:             result = parse_return
142: 
143:             Gtk.queue { cb.call(result) }
144:         }
145:     end

[Source]

    # File lib/virt-p2v/connection.rb, line 33
33:     def on_connect(&cb)
34:         @connection_listeners << cb
35:     end

[Source]

    # File lib/virt-p2v/connection.rb, line 33
33:     def on_connect(&cb)
34:         @connection_listeners << cb
35:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 147
147:     def path(length, path, &cb)
148:         raise NotConnectedError if @channel.nil?
149: 
150:         run(cb) {
151:             @channel.write("PATH #{length} #{path}\n")
152:             result = parse_return
153: 
154:             Gtk.queue { cb.call(result) }
155:         }
156:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 147
147:     def path(length, path, &cb)
148:         raise NotConnectedError if @channel.nil?
149: 
150:         run(cb) {
151:             @channel.write("PATH #{length} #{path}\n")
152:             result = parse_return
153: 
154:             Gtk.queue { cb.call(result) }
155:         }
156:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 202
202:     def send_data(io, length, progress, &completion)
203:         raise NotConnectedError if @channel.nil?
204: 
205:         run(completion) {
206:             @channel.write("DATA #{length}\n")
207:             @channel.send_data(io) { |total|
208:                 Gtk.queue { progress.call(total) }
209:             }
210: 
211:             result = parse_return
212: 
213:             Gtk.queue { progress.call(length); completion.call(result) }
214:         }
215:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 202
202:     def send_data(io, length, progress, &completion)
203:         raise NotConnectedError if @channel.nil?
204: 
205:         run(completion) {
206:             @channel.write("DATA #{length}\n")
207:             @channel.send_data(io) { |total|
208:                 Gtk.queue { progress.call(total) }
209:             }
210: 
211:             result = parse_return
212: 
213:             Gtk.queue { progress.call(length); completion.call(result) }
214:         }
215:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 180
180:     def set_profile(profile, &cb)
181:         raise NotConnectedError if @channel.nil?
182: 
183:         run(cb) {
184:             @channel.write("SET_PROFILE #{profile}\n")
185:             result = parse_return
186: 
187:             Gtk.queue { cb.call(result) }
188:         }
189:     end

[Source]

     # File lib/virt-p2v/connection.rb, line 180
180:     def set_profile(profile, &cb)
181:         raise NotConnectedError if @channel.nil?
182: 
183:         run(cb) {
184:             @channel.write("SET_PROFILE #{profile}\n")
185:             result = parse_return
186: 
187:             Gtk.queue { cb.call(result) }
188:         }
189:     end

[Validate]