
    *hu                        S r SSKrSSKrSSKrSSKrSSKJrJr  SSKJ	r	  SSK
JrJrJrJrJrJr   SSKr\R$                  \R&                  \R(                  \R*                  S.r\" \S5      =(       a    \R0                  rS	S
KJrJrJrJrJ r J!r!J"r"  Sr#Sr$Sr%Sr&S\'S\(4S jr) " S S\5      r* " S S\*5      r+ " S S\+5      r, " S S\5      r- " S S\-5      r. " S S\-5      r/g! \ a    SrSr Nrf = f)zFModule implementing low-level socket communication with MySQL servers.    N)ABCabstractmethod)deque)AnyDequeListOptionalTupleUnion)TLSv1TLSv1.1TLSv1.2TLSv1.3HAS_TLSv1_3F   )ConnectionTimeoutErrorInterfaceErrorNotSupportedErrorOperationalErrorProgrammingErrorReadTimeoutErrorWriteTimeoutError2   i       errreturnc                 r    U R                   (       d  [        U 5      $ SU R                    SU R                   3$ )zXReformat the IOError error message.

This function reformats the IOError error message.
zErrno z: )errnostrstrerror)r   s    O/var/www/auris/envauris/lib/python3.13/site-packages/mysql/connector/network.py_strioerrorr#   I   s.    
 993s8NF399+R~*NN    c                       \ rS rSrSr\  SS\R                  S\S\S\	\
   S\	\
   S	S4S
 jj5       r\S\R                  S\S	\4S j5       rSrg)NetworkBrokerQ   a  Broker class interface.

The network object is a broker used as a delegate by a socket object. Whenever the
socket wants to deliver or get packets to or from the MySQL server it needs to rely
on its network broker (netbroker).

The netbroker sends `payloads` and receives `packets`.

A packet is a bytes sequence, it has a header and body (referred to as payload).
The first `PACKET_HEADER_LENGTH` or `COMPRESSED_PACKET_HEADER_LENGTH`
(as appropriate) bytes correspond to the `header`, the remaining ones represent the
`payload`.

The maximum payload length allowed to be sent per packet to the server is
`MAX_PAYLOAD_LENGTH`. When  `send` is called with a payload whose length is greater
than `MAX_PAYLOAD_LENGTH` the netbroker breaks it down into packets, so the caller
of `send` can provide payloads of arbitrary length.

Finally, data received by the netbroker comes directly from the server, expect to
get a packet for each call to `recv`. The received packet contains a header and
payload, the latter respecting `MAX_PAYLOAD_LENGTH`.
Nsockaddresspayloadpacket_numbercompressed_packet_numberr   c                     g)a  Send `payload` to the MySQL server.

If provided a payload whose length is greater than `MAX_PAYLOAD_LENGTH`, it is
broken down into packets.

Args:
    sock: Object holding the socket connection.
    address: Socket's location.
    payload: Packet's body to send.
    packet_number: Sequence id (packet ID) to attach to the header when sending
                   plain packets.
    compressed_packet_number: Same as `packet_number` but used when sending
                              compressed packets.

Raises:
    :class:`OperationalError`: If something goes wrong while sending packets to
                               the MySQL server.
N )selfr(   r)   r*   r+   r,   s         r"   sendNetworkBroker.sendi       r$   c                     g)a  Get the next available packet from the MySQL server.

Args:
    sock: Object holding the socket connection.
    address: Socket's location.

Returns:
    packet: A packet from the MySQL server.

Raises:
    :class:`OperationalError`: If something goes wrong while receiving packets
                               from the MySQL server.
    :class:`InterfaceError`: If something goes wrong while receiving packets
                             from the MySQL server.
Nr.   )r/   r(   r)   s      r"   recvNetworkBroker.recv   r2   r$   r.   NN)__name__
__module____qualname____firstlineno____doc__r   socketr    bytesr	   intr0   	bytearrayr4   __static_attributes__r.   r$   r"   r&   r&   Q   s    .  (,26mm  	
  } #+3- 
 6     r$   r&   c                       \ rS rSrSrSS jrSS jrS\R                  S\S	\	SS4S
 jr
SS\R                  S\S\4S jjr  SS\R                  S\S\	S\\   S\\   SS4S jjrS\R                  S\S\4S jrSrg)NetworkBrokerPlain   ,Broker class for MySQL socket communication.r   Nc                     SU l         g N_pktnrr/   s    r"   __init__NetworkBrokerPlain.__init__   s	    r$   c                 2    U R                   S-   S-  U l         gzIncrement packet id.r      NrH   rJ   s    r"   _set_next_pktnr"NetworkBrokerPlain._set_next_pktnr   s    {{Q#-r$   r(   r)   pktc                      UR                  U5        g! [        R                  [        4 a  n[	        SS9UeSnAf[
         a  n[        SU[        U5      4S9UeSnAf[         a  n[        SS9UeSnAff = f)z!Write packet to the comm channel.  r   N  r   valuesi  )	sendallr<   timeoutTimeoutErrorr   IOErrorr   r#   AttributeError)r/   r(   r)   rR   r   s        r"   	_send_pktNetworkBrokerPlain._send_pkt   sy    		8LL- 	9#$/S8 	"G[-=#>  	8".C7	8s*    A7
8A7AA7(
A22A7sizec                     [        U5      n[        U5      nU(       a7  UR                  XB5      nUS:X  a  US:  a	  [        SS9eXES nX%-  nU(       a  M7  U$ )z(Read `size` bytes from the comm channel.r   i  rU   N)r?   
memoryview	recv_intor   )r/   r(   r`   rR   pkt_viewreads         r"   _recv_chunkNetworkBrokerPlain._recv_chunk   s[    oc?>>(1DqyTAX$400HLD d 
r$   r*   r+   r,   c           
         Uc  U R                  5         OX@l        [        U5      [        :  a  Sn[	        [        U5      [        -  5       H]  nU R                  UUS[        R                  " SU R                  5      -   X6U[        -    -   5        U R                  5         U[        -  nM_     X6S nU R                  UU[        R                  " S[        U5      5      SS [        R                  " SU R                  5      -   U-   5        g)zSend payload to the MySQL server.

If provided a payload whose length is greater than `MAX_PAYLOAD_LENGTH`, it is
broken down into packets.
Nr      <B<I   )rP   rI   lenMAX_PAYLOAD_LENGTHranger^   structpack)r/   r(   r)   r*   r+   r,   offset_s           r"   r0   NetworkBrokerPlain.send   s        "'K w<--F3w<+==>#kk$45v0B'BCD $$&,, ? g&GKKc'l+Aa0kk$,-	
r$   c                 V    U R                  U[        S9n[        R                  " SUSS S-   5      S   US   so@l        X0R                  XS9-   $ ! [
        R                  [        4 a  n[        SUR                  S9UeSnAf[         a  n[        S	U[        U5      4S
9UeSnAff = f)z+Receive `one` packet from the MySQL server.r`   rk   r   rl       rT   )r   msgNrV   rW   )rf   PACKET_HEADER_LENGTHrp   unpackrI   r<   rZ   r[   r   r!   r\   r   r#   )r/   r(   r)   headerpayload_lenr   s         r"   r4   NetworkBrokerPlain.recv   s    	%%d1E%FF dF1QK'$9:1=q	 %K ,,T,DDD- 	J"3<<@cI 	"G[-=#>	s$   AA B(+B  B(B##B(rH   r   N)r   r6   )r7   r8   r9   r:   r;   rK   rP   r<   r    r=   r^   r>   r?   rf   r	   r0   r4   r@   r.   r$   r"   rB   rB      s    6.8fmm 8c 8 8$ 8
 
S 
 
" (,26*
mm*
 *
 	*

  }*
 #+3-*
 
*
X   r$   rB   c                   H  ^  \ rS rSrSrSU 4S jjr\S\S\S\	\   4S j5       r
SS	 jrS
\R                  S\S\SS4U 4S jjr  SS
\R                  S\S\S\\   S\\   SS4U 4S jjjrS
\R                  S\S\SS4U 4S jjrS
\R                  S\S\4U 4S jjrSrU =r$ )NetworkBrokerCompressed   rD   r   Nc                 N   > [         TU ]  5         SU l        [        5       U l        g rF   )superrK   _compressed_pktnrr   _queue_read)r/   	__class__s    r"   rK    NetworkBrokerCompressed.__init__   s     !#-2Wr$   r*   pktnrc                    / n[        U 5      [        :  an  Sn[        [        U 5      [        -  5       HI  nUR                  S[        R
                  " SU5      -   XU[        -    -   5        US-   S-  nU[        -  nMK     XS n UR                  [        R
                  " S[        U 5      5      SS [        R
                  " SU5      -   U -   5        U$ )	z2Prepare a payload for sending to the MySQL server.r   ri   rj   r   rO   Nrk   rl   )rm   rn   ro   appendrp   rq   )r*   r   pktsrr   rs   s        r"   _prepare_packets(NetworkBrokerCompressed._prepare_packets  s      w<--F3w<+==>#kk$./v0B'BCD
 c),, ? g&GKKc'l+Aa06;;tU3KKgU	
 r$   c                 2    U R                   S-   S-  U l         grN   )r   rJ   s    r"   _set_next_compressed_pktnr2NetworkBrokerCompressed._set_next_compressed_pktnr  s    "&"8"81"<!Cr$   r(   r)   rR   c                 (  > [         R                  " U5      n[        R                  " S[	        U5      5      SS [        R                  " SU R
                  5      -   [        R                  " S[	        U5      5      SS -   U-   n[        TU ]  XU5      $ )z1Compress packet and write it to the comm channel.rk   r   rl   rj   )zlibcompressrp   rq   rm   r   r   r^   )r/   r(   r)   rR   compressed_pktr   s        r"   r^   !NetworkBrokerCompressed._send_pkt#  s    s+KKc.121Q7kk$ 6 678kk$C)!A./  	 w 44r$   r+   r,   c           
        > Uc  U R                  5         OX@l        Uc  U R                  5         OXPl        [	        S5      R                  U R                  X0R                  5      5      n[        U5      [        [        -
  :  am  Sn[        [        U5      [        -  5       H7  nU R                  XXgU[        -    5        U R                  5         U[        -  nM9     U R                  XXgS 5        g[        U5      [        :  a  U R                  XU5        g[        T	U ]-  UU[        R                  " S[        U5      5      SS [        R                  " SU R                  5      -   [        R                  " SS5      SS -   U-   5        g)zSend `payload` as compressed packets to the MySQL server.

If provided a payload whose length is greater than `MAX_PAYLOAD_LENGTH`, it is
broken down into packets.
Nr$   r   rk   rl   rj   )rP   rI   r   r   r?   joinr   rm   rn   ry   ro   r^   MIN_COMPRESS_LENGTHr   rp   rq   )
r/   r(   r)   r*   r+   r,   payload_preprr   rs   r   s
            r"   r0   NetworkBrokerCompressed.send.  sb       "'K#+++-%=" ~**4+@+@+++VWw<-0DDD F 3|,0BBC<BT9T#U //1,, D NN4,w*?@ 7|11tl; !KKc,&781=kk$(>(>?@kk$*1Q/0 ##r$   compressed_plluncompressed_pllc                   > [         T	U ]  XS9nUS:X  a  UO[        [        R                  " U5      5      nSnU[        U5      :  Ga  [        R                  " SXVU[        -   S-
   S-   5      S   n[        U-   [        U5      U-
  :  a  [         T	U ]  U[        S9n[        R                  " SUSS S-   5      S   US   [        R                  " SUSS S-   5      S    snU l
        n[         T	U ]  XS9nUUS:X  a  UO[        R                  " U5      -  nU R                  R                  XVU[        -   U-    5        U[        U-   -  nU[        U5      :  a  GM  g	g	)
z&Handle reading of a compressed packet.rv   r   rk   r   rw   rl   r   r   N)r   rf   r?   r   
decompressrm   rp   rz   ry   COMPRESSED_PACKET_HEADER_LENGTHr   r   r   )
r/   r(   r   r   r   rR   rr   pllr{   r   s
            r"   _recv_compressed_pkt,NetworkBrokerCompressed._recv_compressed_pktk  s    ,T,G  1$ 4??>:; 	 s3x--c6,@#@1#DEOC $c)CHv,== ,T8W,X MM$qg(=>qA1IMM$qg(=>qA	"*$ "'!4T!4!O '1, #8 ##C:N1NQT1T$UV*S00F? s3xr$   c                   > U R                   (       dq   [        TU ]	  U[        S9n[        R
                  " SUSS S-   5      S   US   [        R
                  " SUSS S-   5      S    snU l        nU R                  XU5        U R                   (       d  g
U R                   R                  5       nUS   U l        U$ ! [        R                  [        4 a  n[        SS	9UeS
nAf[         a  n[        SU[        U5      4S9UeS
nAff = f)zkReceive `one` or `several` packets from the MySQL server, enqueue them, and
return the packet at the head.
rv   rk   r   rl   rw   r   r   rT   rU   NrV   rW   )r   r   rf   r   rp   rz   r   r   r<   rZ   r[   r   r\   r   r#   popleftrI   )	r/   r(   r)   r{   r   r   r   rR   r   s	           r"   r4   NetworkBrokerCompressed.recv  s    ,T8W,X MM$qg(=>qA1IMM$qg(=>qA	"*$ ))$@PQ &&(!f
 NNL1 <&T2; &S1A'Bs$   A0B< <D
C  D-DD)r   rI   r   r~   r6   )r7   r8   r9   r:   r;   rK   staticmethodr=   r>   r   r   r   r<   r    r^   r	   r0   r   r?   r4   r@   __classcell__r   s   @r"   r   r      s	   65
 %  U  2D	5fmm 	5c 	5 	5$ 	5  (,26;mm; ; 	;
  }; #+3-; 
; ;z.1MM.136.1JM.1	.1`! ! ! ! !r$   r   c                   v   \ rS rSrSrS!S jrS!S jrS!S jrS!S jrS!S	 jr	S
\
\   SS4S jrS\S\SS4S jr       S"S\
\   S\
\   S\
\   S\
\   S\
\   S\
\\      S\
\\      S\4S jjr   S#S\S\
\   S\
\   S\
\   SS4
S jjrS$S\
\   S\4S jjr\S!S j5       r\\S\4S j5       5       rS rg)%MySQLSocketi  zuMySQL socket communication interface.

Examples:
    Subclasses: network.MySQLTCPSocket and network.MySQLUnixSocket.
r   Nc                 L    SU l         SU l        SU l        [        5       U l        g)zcNetwork layer where transactions are made with plain (uncompressed) packets
is enabled by default.
N)r(   _connection_timeoutserver_hostrB   
_netbrokerrJ   s    r"   rK   MySQLSocket.__init__  s%    
 .2	26 *.);)=r$   c                 "    [        5       U l        g)zIEnable network layer where transactions are made with compressed packets.N)r   r   rJ   s    r"   switch_to_compressed_mode%MySQLSocket.switch_to_compressed_mode  s    13r$   c                      U R                   R                  [        R                  5        U R                   R	                  5         g! [
        [        4 a     gf = f)z'Shut down the socket before closing it.N)r(   shutdownr<   	SHUT_RDWRcloser]   OSErrorrJ   s    r"   r   MySQLSocket.shutdown  sD    	IIv//0IIOO( 		s   AA AAc                 f     U R                   R                  5         g! [        [        4 a     gf = f)zClose the socket.N)r(   r   r]   r   rJ   s    r"   close_connectionMySQLSocket.close_connection  s,    	IIOO( 		s    00c                 $    U R                  5         g N)r   rJ   s    r"   __del__MySQLSocket.__del__  s    r$   rZ   c                 j    Xl         U R                  (       a  U R                  R                  U5        gg)zSet the connection timeout.N)r   r(   
settimeout)r/   rZ   s     r"   set_connection_timeout"MySQLSocket.set_connection_timeout  s&    #* 99II  ) r$   ssl_contexthostc                 "   U R                   c   eU R                   R                  S:X  a  [        S5      e[        c  [	        S5      e UR                  U R                   US9U l         g! [         a  n[	        S5      UeSnAf[        R                  [        4 a%  n[        SU R                  [        U5      4S9UeSnAf[        R                   a  n[        [        U5      5      UeSnAf[         a  n[        [        U5      5      UeSnAff = f)a9  Upgrade an existing connection to TLS.

Args:
    ssl_context (ssl.SSLContext): The SSL Context to be used.
    host (str): Server host name.

Returns:
    None.

Raises:
    ProgrammingError: If the transport does not expose the socket instance.
    NotSupportedError: If Python installation has no SSL support.
Nr   z,SSL is not supported when using Unix sockets&Python installation has no SSL support)server_hostnamerV   rW   )r(   familyr   sslr   wrap_socket	NameErrorSSLErrorr\   r   r)   r#   CertificateErrorr    NotImplementedError)r/   r   r   r   s       r"   switch_to_sslMySQLSocket.switch_to_ssl  s     yy$$$99q "#QRR;#$LMM	4#//		4/PDI 	W#$LMSVVg& 	 DLL+c2B#C ## 	4 S*3" 	4 S*3	4s<   A( (
D2A>>D B;;DC''D4D		Dssl_cassl_certssl_keyssl_verify_certssl_verify_identitytls_versionstls_cipher_suitesc                 .   SnU R                   (       d	  [        SS9e[        c  [        S5      eUc  / nUc  / n U(       a  UR	                  SS9  US   n[
        U   n	[        R                  " U	5      n
US:X  a{  S	U;  a#  U
=R                  [        R                  -  sl        S
U;  a#  U
=R                  [        R                  -  sl        SU;  a#  U
=R                  [        R                  -  sl        O[        R                  " 5       n
XZl        U(       a  [        R                  U
l        O2U(       a  [        R                  U
l        O[        R                   U
l        U
R#                  5         U(       a   U
R%                  U5        U(       a   U
R+                  X#5        U(       a&  US	:X  a   U
R-                  SR/                  U5      5        U
$ ! [&        [        R(                  4 a  n[        SU 35      UeSnAff = f! [&        [        R(                  4 a  n[        SU 35      UeSnAff = f! [0         a  n[        S5      UeSnAf[&        [2        [        R4                  [        R(                  4 a  n[        [7        U5      5      UeSnAff = f)aZ  Build a SSLContext.

Args:
    ssl_ca: Certificate authority, opptional.
    ssl_cert: SSL certificate, optional.
    ssl_key: Private key, optional.
    ssl_verify_cert: Verify the SSL certificate if `True`.
    ssl_verify_identity: Verify host identity if `True`.
    tls_versions: TLS protocol versions, optional.
    tls_cipher_suites: Set of steps that helps to establish a secure connection.

Returns:
    ssl_context (ssl.SSLContext): An SSL Context ready be used.

Raises:
    NotSupportedError: Python installation has no SSL support.
    InterfaceError: Socket undefined or invalid ssl data.
Ni   rU   r   T)reverser   r   r   r   r   zInvalid CA Certificate: zInvalid Certificate/Key: :)r(   r   r   r   sortTLS_VERSIONS
SSLContextoptionsOP_NO_TLSv1_2OP_NO_TLSv1_1OP_NO_TLSv1create_default_contextcheck_hostnameCERT_REQUIREDverify_modeCERT_OPTIONAL	CERT_NONEload_default_certsload_verify_locationsr\   r   load_cert_chainset_ciphersr   r   r   r   r    )r/   r   r   r   r   r   r   r   tls_versionssl_protocolcontextr   s               r"   build_ssl_contextMySQLSocket.build_ssl_context  s;   8 &*yy t,,;#$LMML$ "6	4!!$!/*1o+K8..6)+ 43+<+<< 43+<+<<l23??: 446%8"&)&7&7#$&)&7&7#&)mm#&&(T11&9 U++H> ![I%=##CHH->$?@N  . T(+CC5)IJPSST
  . U(+DSE)JKQTTU  	W#$LMSVV  LL	
 	4 !S*3	4sl   D=H3 8G 	H3 H ".H3 G?+G::G??H3 H0H++H00H3 3
J=I		1J:JJr*   r+   r,   write_timeoutc                 ,    U R                   (       d:  U R                  b-  U R                  R                  U(       a  [        U5      OS5        U R
                  R                  U R                  U R                  UUUS9  g! [         a
  n SnANASnAff = f)aD  Send `payload` to the MySQL server.

NOTE: if `payload` is an instance of `bytearray`, then `payload` might be
changed by this method - `bytearray` is similar to passing a variable by
reference.

If you're sure you won't read `payload` after invoking `send()`,
then you can use `bytearray.` Otherwise, you must use `bytes`.
N)r+   r,   )r   r(   r   floatr   r   r0   r)   )r/   r*   r+   r,   r   rs   s         r"   r0   MySQLSocket.sendr  sz     	,,1F		$$]U=%9PTU 	IILL'%= 	 	
  		s   AA? ?
BBread_timeoutc                 (    U R                   (       d:  U R                  b-  U R                  R                  U(       a  [        U5      OS5        U R
                  R                  U R                  U R                  5      $ ! [         a
  n SnAN?SnAff = f)z.Get packet from the MySQL server comm channel.N)r   r(   r   r   r   r   r4   r)   )r/   r   rs   s      r"   r4   MySQLSocket.recv  sj    	,,1F		$$LU<%8dS ##DIIt||<<  		s   AA= =
BBc                     g)zOpen the socket.Nr.   rJ   s    r"   open_connectionMySQLSocket.open_connection  r2   r$   c                     g)zGet the location of the socket.Nr.   rJ   s    r"   r)   MySQLSocket.address  r2   r$   )r   r   r   r(   r~   )NNNFFNN)NNNr   )r7   r8   r9   r:   r;   rK   r   r   r   r   r	   r>   r   r   r    r   boolr   r   r=   r0   r?   r4   r   r   propertyr)   r@   r.   r$   r"   r   r     s   >4*hsm * *"4 "4C "4D "4L !%"&!%*/.3,015`4`4 3-`4 #	`4
 "$`4 &d^`4 tCy)`4 $DI.`4 
`4J (,26'+

  }
 #+3-	

  }
 

@
=# 
=) 
=   . .  .r$   r   c                   t   ^  \ rS rSrSrSS\SS4U 4S jjjr\S\4S j5       rSS jr	S	\
S
\
SS4S jrSrU =r$ )MySQLUnixSocketi  zhMySQL socket class using UNIX sockets.

Opens a connection through the UNIX socket of the MySQL Server.
unix_socketr   Nc                 :   > [         TU ]  5         Xl        Xl        g r   )r   rK   r  _address)r/   r  r   s     r"   rK   MySQLUnixSocket.__init__  s     +(r$   c                     U R                   $ r   r  rJ   s    r"   r)   MySQLUnixSocket.address      }}r$   c                 ,    [         R                   " [         R                  [         R                  5      U l        U R                  R	                  U R
                  5        U R                  R                  U R                  5        g ! [         R                  [        4 a%  n[        SU R                  [        U5      4S9UeS nAf[         a%  n[        SU R                  [        U5      4S9UeS nAf[         a  n[        [!        U5      5      UeS nAff = f)Ni  rW   )r<   AF_UNIXSOCK_STREAMr(   r   r   connectr  rZ   r[   r   r)   r#   r\   r   	Exceptionr    )r/   r   s     r"   r   MySQLUnixSocket.open_connection  s    	4""DI
 II  !9!9:IId../- 	(LL$   	 DLL+c2B#C  	4 S*3	4s0   BB D B??D C,,D9DDargskwargsc                 :    [         R                  " S[        5        g)zSwitch the socket to use SSL.z2SSL is disabled when using unix socket connectionsN)warningswarnWarning)r/   r  r  s      r"   r   MySQLUnixSocket.switch_to_ssl  s     	@	
r$   )r  r(   r  )z/tmp/mysql.sockr~   )r7   r8   r9   r:   r;   r    rK   r   r)   r   r   r   r@   r   r   s   @r"   r  r    sb    
)C ) ) )
   40

$'
	
 
r$   r  c            	       l   ^  \ rS rSrSr   SS\S\S\SS4U 4S jjjr\	S\4S	 j5       r
SS
 jrSrU =r$ )MySQLTCPSocketi  zQMySQL socket class using TCP/IP.

Opens a TCP/IP connection to the MySQL Server.
r   port
force_ipv6r   Nc                 l   > [         TU ]  5         Xl        X l        X0l        SU l        U SU 3U l        g )Nr   r   )r   rK   r   server_portr  _familyr  )r/   r   r  r  r   s       r"   rK   MySQLTCPSocket.__init__  s:     	 $ $ * $vQtf-r$   c                     U R                   $ r   r  rJ   s    r"   r)   MySQLTCPSocket.address  r	  r$   c           	      ^   Sn [         R                  " U R                  U R                  S[         R                  [         R
                  5      nU HJ  nU R                  (       a  US   [         R                  :X  a  Un  OUS   [         R                  :X  d  MH  Un  O   U R                  (       a  US   c  [        SU R                   35      eUS   c  US   nUu  U l        pVpx [         R                   " U R                  XV5      U l        U R                  R                  U R                  5        U R                  R!                  U5        g! [         a0  n[        SU R                  U R                  [        U5      4S9UeSnAff = f! [         R"                  [$        4 a0  n['        SU R                  U R                  [        U5      4S9UeSnAf[         a0  n[        SU R                  U R                  [        U5      4S9UeSnAf[(         a  n[        [+        U5      5      UeSnAff = f)z/Open the TCP/IP connection to the MySQL server.)NNNNNr   NzNo IPv6 address found for i  rW   )r<   getaddrinfor   r  r  SOL_TCPr  AF_INET6AF_INETr   r\   r#   r  r(   r   r   r  rZ   r[   r   r  r    )	r/   addrinfo	addrinfosinfor   socktypeprotors   sockaddrs	            r"   r   MySQLTCPSocket.open_connection  s    + 		**    ""I "??tAw&//'A#H7fnn,#H " 8A;#6$'A$BRBRAS%TUU{"$Q< 8@4x	4dllHDDIII  !9!9:IIh'  	 (($*:*:K<LM 	 - 	($$$$$   	 (($*:*:K<LM   	4 S*3	4sP   BE A E $A&F 
F+F  FH,"+GH,+HH,H''H,)r  r  r  r   r  r(   )z	127.0.0.1i  Fr~   )r7   r8   r9   r:   r;   r    r>   r   rK   r   r)   r   r@   r   r   s   @r"   r  r    sh       	.. . 	.
 
. .   ;4 ;4r$   r  )0r;   r<   rp   r  r   abcr   r   collectionsr   typingr   r   r   r	   r
   r   r   PROTOCOL_TLSv1PROTOCOL_TLSv1_1PROTOCOL_TLSv1_2PROTOCOL_TLSr   hasattrr   TLS_V1_3_SUPPORTEDImportErrorerrorsr   r   r   r   r   r   r   r   rn   ry   r   r\   r    r#   r&   rB   r   r   r  r  r.   r$   r"   <module>r8     s&  : M     #  ; ; ##''''##	L !m4H      "# OW O ODC DNb bJ0 Df.# f.R.
k .
bR4[ R4K  
Cs   AC' '
C43C4