@@ -6,16 +6,10 @@ class Net::LDAP::Connection #:nodoc:
66 LdapVersion = 3
77 MaxSaslChallenges = 10
88
9- def initialize ( server )
9+ def initialize ( server = { } )
10+ @server = server
1011 @instrumentation_service = server [ :instrumentation_service ]
1112
12- if server [ :socket ]
13- prepare_socket ( server )
14- else
15- server [ :hosts ] = [ [ server [ :host ] , server [ :port ] ] ] if server [ :hosts ] . nil?
16- open_connection ( server )
17- end
18-
1913 yield self if block_given?
2014 end
2115
@@ -195,7 +189,7 @@ def message_queue
195189 def read ( syntax = Net ::LDAP ::AsnSyntax )
196190 ber_object =
197191 instrument "read.net_ldap_connection" , :syntax => syntax do |payload |
198- @conn . read_ber ( syntax ) do |id , content_length |
192+ socket . read_ber ( syntax ) do |id , content_length |
199193 payload [ :object_type_id ] = id
200194 payload [ :content_length ] = content_length
201195 end
@@ -225,7 +219,7 @@ def read(syntax = Net::LDAP::AsnSyntax)
225219 def write ( request , controls = nil , message_id = next_msgid )
226220 instrument "write.net_ldap_connection" do |payload |
227221 packet = [ message_id . to_ber , request , controls ] . compact . to_ber_sequence
228- payload [ :content_length ] = @conn . write ( packet )
222+ payload [ :content_length ] = socket . write ( packet )
229223 end
230224 end
231225 private :write
@@ -600,4 +594,18 @@ def delete(args)
600594
601595 pdu
602596 end
597+
598+ private
599+
600+ # Returns a Socket like object used internally to communicate with LDAP server
601+ #
602+ # Typically a TCPSocket, but can be a OpenSSL::SSL::SSLSocket
603+ def socket
604+ return @conn if defined? @conn
605+
606+ # First refactoring uses the existing methods open_connection and
607+ # prepare_socket to set @conn. Next cleanup would centralize connection
608+ # handling here.
609+ open_connection ( @server )
610+ end
603611end # class Connection
0 commit comments