@@ -6,16 +6,10 @@ class Net::LDAP::Connection #:nodoc:
6
6
LdapVersion = 3
7
7
MaxSaslChallenges = 10
8
8
9
- def initialize ( server )
9
+ def initialize ( server = { } )
10
+ @server = server
10
11
@instrumentation_service = server [ :instrumentation_service ]
11
12
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
-
19
13
yield self if block_given?
20
14
end
21
15
@@ -195,7 +189,7 @@ def message_queue
195
189
def read ( syntax = Net ::LDAP ::AsnSyntax )
196
190
ber_object =
197
191
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 |
199
193
payload [ :object_type_id ] = id
200
194
payload [ :content_length ] = content_length
201
195
end
@@ -225,7 +219,7 @@ def read(syntax = Net::LDAP::AsnSyntax)
225
219
def write ( request , controls = nil , message_id = next_msgid )
226
220
instrument "write.net_ldap_connection" do |payload |
227
221
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 )
229
223
end
230
224
end
231
225
private :write
@@ -600,4 +594,18 @@ def delete(args)
600
594
601
595
pdu
602
596
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
603
611
end # class Connection
0 commit comments