@@ -51,6 +51,7 @@ const errorFields = {
5151
5252function Connection ( options , queues = { } , { onopen = noop , onend = noop , onclose = noop } = { } ) {
5353 const {
54+ sslnegotiation,
5455 ssl,
5556 max,
5657 user,
@@ -262,25 +263,29 @@ function Connection(options, queues = {}, { onopen = noop, onend = noop, onclose
262263 }
263264
264265 async function secure ( ) {
265- write ( SSLRequest )
266- const canSSL = await new Promise ( r => socket . once ( 'data' , x => r ( x [ 0 ] === 83 ) ) ) // S
267-
268- if ( ! canSSL && ssl === 'prefer' )
269- return connected ( )
270-
271- socket . removeAllListeners ( )
272- socket = tls . connect ( {
266+ if ( sslnegotiation !== 'direct' ) {
267+ write ( SSLRequest )
268+ const canSSL = await new Promise ( r => socket . once ( 'data' , x => r ( x [ 0 ] === 83 ) ) ) // S
269+
270+ if ( ! canSSL && ssl === 'prefer' )
271+ return connected ( )
272+ }
273+
274+ const options = {
273275 socket,
274276 servername : net . isIP ( socket . host ) ? undefined : socket . host ,
275- ...( ssl === 'require' || ssl === 'allow' || ssl === 'prefer'
276- ? { rejectUnauthorized : false }
277- : ssl === 'verify-full'
278- ? { }
279- : typeof ssl === 'object'
280- ? ssl
281- : { }
282- )
283- } )
277+ }
278+
279+ if ( sslnegotiation === 'direct' )
280+ options . ALPNProtocols = [ 'postgresql' ]
281+
282+ if ( ssl === 'require' || ssl === 'allow' || ssl === 'prefer' )
283+ options . rejectUnauthorized = false
284+ else if ( typeof ssl === 'object' )
285+ Object . assign ( options , ssl )
286+
287+ socket . removeAllListeners ( )
288+ socket = tls . connect ( options )
284289 socket . on ( 'secureConnect' , connected )
285290 socket . on ( 'error' , error )
286291 socket . on ( 'close' , closed )
0 commit comments