Constants
| VERSION_LINE | = | /^SSH-/ |
| For processing the version header. The version reported by the server must match this pattern. | ||
| REQUIRED_VERSION_PATTERN | = | /^SSH-(1.99|2.0)-/ |
| Only versions matching this pattern are supported by Net::SSH. | ||
Attributes
| [R] | header_lines | An array of lines returned by the server prior to reporting the version. |
Public Class methods
Creates a new VersionNegotiator object that logs to the given logger instance.
[ show source ]
# File lib/net/ssh/transport/version-negotiator.rb, line 40
40: def initialize( logger )
41: @logger = logger
42: end
Public Instance methods
Negotiate version information over the given socket. This will return the version reported by the server.
[ show source ]
# File lib/net/ssh/transport/version-negotiator.rb, line 46
46: def negotiate( socket, version )
47: server_version = ""
48: @header_lines = []
49:
50: loop do
51: server_version = socket.readline
52: break if server_version.nil? || VERSION_LINE.match( server_version )
53: @header_lines << server_version
54: end
55:
56: if !REQUIRED_VERSION_PATTERN.match( server_version )
57: raise Net::SSH::Exception,
58: "incompatible ssh version #{server_version.inspect}"
59: end
60:
61: if @logger.debug?
62: @logger.debug "remote server is #{server_version.chomp.inspect}"
63: end
64: socket.print "#{version}\r\n"
65:
66: return server_version.chomp
67: end