Ë
    5¾ªj‹u  ã                   óà  — d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZmZmZmZmZmZ 	 ddlZej$                  ej&                  ej(                  ej*                  dœZ eed«      xr ej0                  Zd	d
lmZmZmZmZm Z m!Z!m"Z" dZ#dZ$dZ%dZ&de'de(fd„Z) G d„ de«      Z* G d„ de*«      Z+ G d„ de+«      Z, G d„ de«      Z- G d„ de-«      Z. G d„ de-«      Z/y# e$ r dZdZY Œpw xY w)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ÚWriteTimeoutErroré2   iÿÿÿ é   é   ÚerrÚreturnc                 óh   — | j                   st        | «      S d| j                   › d| j                  › �S )z`Reformat the IOError error message.

    This function reformats the IOError error message.
    zErrno z: )ÚerrnoÚstrÚstrerror)r   s    úV/var/www/html/serviGia/entorno/lib/python3.12/site-packages/mysql/connector/network.pyÚ_strioerrorr#   I   s.   € ð
 Ÿ9š9Œ3ˆs‹8ÐN¨F°3·9±9°+¸RÀÇÁ¸~Ð*NÐNó    c                   ó’   — e Zd ZdZe	 	 ddej
                  dededee	   dee	   ddfd	„«       Z
edej
                  dedefd
„«       Zy)ÚNetworkBrokeraP  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                  ó   — y)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"   ÚsendzNetworkBroker.sendi   ó   � r$   c                  ó   — y)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"   ÚrecvzNetworkBroker.recv…   r0   r$   ©NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úsocketr    Úbytesr	   Úintr/   Ú	bytearrayr2   r-   r$   r"   r&   r&   Q   s–   „ ñð. ð (,Ø26ñà�m‰mðð ðð ð	ð
   ‘}ðð #+¨3¡-ðð 
òó ðð6 ð˜Ÿ™ð °ð ¸ò ó ñr$   r&   c                   óä   — e Zd ZdZdd„Zdd„Zdej                  dededdfd	„Z	ddej                  d
e
defd„Z	 	 ddej                  dededee
   dee
   ddfd„Zdej                  dedefd„Zy)ÚNetworkBrokerPlainú,Broker class for MySQL socket communication.r   Nc                 ó   — d| _         y ©Néÿÿÿÿ©Ú_pktnr©r.   s    r"   Ú__init__zNetworkBrokerPlain.__init__›   s	   € Øˆ�r$   c                 ó2   — | j                   dz   dz  | _         y©zIncrement packet id.r   é   NrB   rD   s    r"   Ú_set_next_pktnrz"NetworkBrokerPlain._set_next_pktnrž   s   € à—{‘{ Q‘¨#Ñ-ˆ�r$   r'   r(   Úpktc                 ó   — 	 |j                  |«       y# t        j                  t        f$ r}t	        d¬«      |‚d}~wt
        $ r}t        d|t        |«      f¬«      |‚d}~wt        $ r}t        d¬«      |‚d}~ww xY w)z!Write packet to the comm channel.éÐ  ©r   Né  ©r   ÚvaluesiÖ  )	Úsendallr8   ÚtimeoutÚTimeoutErrorr   ÚIOErrorr   r#   ÚAttributeError)r.   r'   r(   rJ   r   s        r"   Ú	_send_pktzNetworkBrokerPlain._send_pkt¢   sy   € ð		8Ø�L‰L˜ÕøÜ—‘¤Ð-ò 	9Ü#¨$Ô/°SÐ8ûÜò 	Ü"Ø G¬[¸Ó-=Ð#>ôàðûô ò 	8Ü"¨Ô.°CÐ7ûð	8ús*   ‚ ”A=­:ºA=ÁAÁA=Á+A8Á8A=Úsizec                 ó    — t        |«      }t        |«      }|r5|j                  ||«      }|dk(  r|dkD  rt        d¬«      ‚||d }||z  }|rŒ5|S )z(Read `size` bytes from the comm channel.r   iÝ  rM   N)r;   Ú
memoryviewÚ	recv_intor   )r.   r'   rW   rJ   Úpkt_viewÚreads         r"   Ú_recv_chunkzNetworkBrokerPlain._recv_chunk¯   s_   € ä˜‹oˆÜ˜c“?ˆÙØ—>‘> (¨DÓ1ˆDØ�qŠy˜T AšXÜ$¨4Ô0Ð0Ø  �ˆHØ�D‰LˆDò ð ˆ
r$   r)   r*   r+   c           
      ó  — |€| j                  «        n|| _        t        |«      t        k\  r�d}t	        t        |«      t        z  «      D ]\  }| j                  ||dt        j                  d| j                  «      z   |||t        z    z   «       | j                  «        |t        z  }Œ^ ||d }| j                  ||t        j                  dt        |«      «      dd t        j                  d| j                  «      z   |z   «       y)z¤Send 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é   )rI   rC   ÚlenÚMAX_PAYLOAD_LENGTHÚrangerV   ÚstructÚpack)r.   r'   r(   r)   r*   r+   ÚoffsetÚ_s           r"   r/   zNetworkBrokerPlain.send»   s  € ð Ð Ø× Ñ Õ"à'ˆDŒKô ˆw‹<Ô-Ò-ØˆFÜœ3˜w›<Ô+=Ñ=Ó>ò 
-�à—‘ØØØ#Ü—k‘k $¨¯©Ó4ñ5à˜f vÔ0BÑ'BÐCñDôð ×$Ñ$Ô&ØÔ,Ñ,‘ð
-ð ˜f˜gÐ&ˆGØ�‰ØØÜ�K‰K˜œc '›lÓ+¨A¨aÐ0Ü�k‰k˜$ §¡Ó,ñ-àñõ	
r$   c                 ón  — 	 | j                  |t        ¬«      }t        j                  d|dd dz   «      d   |d   c}| _        || j                  ||¬«      z   S # t
        j                  t        f$ r}t        d|j                  ¬«      |‚d}~wt        $ r}t        d	|t        |«      f¬
«      |‚d}~ww xY w)z+Receive `one` packet from the MySQL server.©rW   ra   r   rb   ó    rL   )r   ÚmsgNrN   rO   )r]   ÚPACKET_HEADER_LENGTHrf   ÚunpackrC   r8   rR   rS   r   r!   rT   r   r#   )r.   r'   r(   ÚheaderÚpayload_lenr   s         r"   r2   zNetworkBrokerPlain.recvç   sÁ   € ð	à×%Ñ% dÔ1EÐ%ÓFˆFô —‘˜d F¨1¨Q K°'Ñ$9Ó:¸1Ñ=Ø�q‘	ð %ˆK˜œð ˜D×,Ñ,¨T¸Ð,ÓDÑDÐDøÜ—‘¤Ð-ò 	JÜ"¨°3·<±<Ô@ÀcÐIûÜò 	Ü"Ø G¬[¸Ó-=Ð#>ôàðûð	ús$   ‚AA ÁB4Á2B
Â
B4ÂB/Â/B4©r   N)r   r3   )r4   r5   r6   r7   rE   rI   r8   r    r9   rV   r:   r;   r]   r	   r/   r2   r-   r$   r"   r=   r=   ˜   sÄ   „ Ù6óó.ð8˜fŸm™mð 8°cð 8Àð 8È$ó 8ñ
 §¡ð 
°Sð 
Àó 
ð" (,Ø26ñ*
à�m‰mð*
ð ð*
ð ð	*
ð
   ‘}ð*
ð #+¨3¡-ð*
ð 
ó*
ðX˜Ÿ™ð °ð ¸ô r$   r=   c                   ó&  ‡ — e Zd ZdZdˆ fd„Zedededee   fd„«       Z	dd„Z
d	ej                  d
ededdfˆ fd„Z	 	 dd	ej                  d
ededee   dee   ddfˆ fd„Zd	ej                  dededdfˆ fd„Zd	ej                  d
edefˆ fd„Zˆ xZS )ÚNetworkBrokerCompressedr>   r   Nc                 óN   •— t         ‰| �  «        d| _        t        «       | _        y r@   )ÚsuperrE   Ú_compressed_pktnrr   Ú_queue_read)r.   Ú	__class__s    €r"   rE   z NetworkBrokerCompressed.__init__   s    ø€ Ü‰ÑÔØ!#ˆÔÜ-2«WˆÕr$   r)   Úpktnrc                 óž  — g }t        | «      t        k\  rmd}t        t        | «      t        z  «      D ]H  }|j                  dt	        j
                  d|«      z   | ||t        z    z   «       |dz   dz  }|t        z  }ŒJ | |d } |j                  t	        j
                  dt        | «      «      dd t	        j
                  d|«      z   | z   «       |S )	z2Prepare a payload for sending to the MySQL server.r   r_   r`   r   rH   Nra   rb   )rc   rd   re   Úappendrf   rg   )r)   rz   Úpktsrh   ri   s        r"   Ú_prepare_packetsz(NetworkBrokerCompressed._prepare_packets  sÝ   € ð ˆô ˆw‹<Ô-Ò-ØˆFÜœ3˜w›<Ô+=Ñ=Ó>ò -�à—‘Ø#Ü—k‘k $¨Ó.ñ/à˜f vÔ0BÑ'BÐCñDôð
  ™ cÑ)�ØÔ,Ñ,‘ð-ð ˜f˜gÐ&ˆGØ�‰Ü�K‰K˜œc '›lÓ+¨A¨aÐ0´6·;±;¸tÀUÓ3KÑKÈgÑUô	
ð ˆr$   c                 ó2   — | j                   dz   dz  | _         yrG   )rw   rD   s    r"   Ú_set_next_compressed_pktnrz2NetworkBrokerCompressed._set_next_compressed_pktnr  s   € à"&×"8Ñ"8¸1Ñ"<ÀÑ!CˆÕr$   r'   r(   rJ   c                 ó"  •— t        j                  |«      }t        j                  dt	        |«      «      dd t        j                  d| j
                  «      z   t        j                  dt	        |«      «      dd z   |z   }t        ‰| �  |||«      S )z1Compress packet and write it to the comm channel.ra   r   rb   r`   )ÚzlibÚcompressrf   rg   rc   rw   rv   rV   )r.   r'   r(   rJ   Úcompressed_pktry   s        €r"   rV   z!NetworkBrokerCompressed._send_pkt#  s‡   ø€ äŸ™ sÓ+ˆä�K‰K˜œc .Ó1Ó2°1°QÐ7Ü�k‰k˜$ × 6Ñ 6Ó7ñ8ä�k‰k˜$¤ C£Ó)¨!¨AÐ.ñ/ð ñð 	ô ‰wÑ   w°Ó4Ð4r$   r*   r+   c           
      ó  •— |€| j                  «        n|| _        |€| j                  «        n|| _        t	        d«      j                  | j                  || j                  «      «      }t        |«      t        t        z
  k\  rod}t        t        |«      t        z  «      D ]8  }| j                  |||||t        z    «       | j                  «        |t        z  }Œ: | j                  ||||d «       yt        |«      t        kD  r| j                  |||«       yt        ‰	| �-  ||t        j                  dt        |«      «      dd t        j                  d| j                  «      z   t        j                  dd«      dd z   |z   «       y)z¼Send `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   ra   rb   r`   )rI   rC   r€   rw   r;   Újoinr~   rc   rd   rn   re   rV   ÚMIN_COMPRESS_LENGTHrv   rf   rg   )
r.   r'   r(   r)   r*   r+   Úpayload_preprh   ri   ry   s
            €r"   r/   zNetworkBrokerCompressed.send.  sv  ø€ ð Ð Ø× Ñ Õ"à'ˆDŒKØ#Ð+Ø×+Ñ+Õ-à%=ˆDÔ"ä  “~×*Ñ*¨4×+@Ñ+@ÀÈ$Ï+É+Ó+VÓWˆÜˆw‹<Ô-Ô0DÑDÒDð ˆFô œ3˜|Ó,Ô0BÑBÓCò -�Ø—‘Ø˜' <°¸ÔBTÑ9TÐ#Uôð ×/Ñ/Ô1ØÔ,Ñ,‘ð-ð �N‰N˜4 ¨,°v°wÐ*?Õ@ô �7‹|Ô1Ò1à—‘˜t W¨lÕ;ô ‘Ñ!ØØÜ—K‘K ¤c¨,Ó&7Ó8¸¸1Ð=Ü—k‘k $¨×(>Ñ(>Ó?ñ@ä—k‘k $¨Ó*¨1¨QÐ/ñ0ð #ñ#õr$   Úcompressed_pllÚuncompressed_pllc                 ó¾  •— t         ‰	| �  ||¬«      }|dk(  r|nt        t        j                  |«      «      }d}|t        |«      k  �rt        j                  d|||t        z   dz
   dz   «      d   }t        |z   t        |«      |z
  kD  r�t         ‰	| �  |t        ¬«      }t        j                  d|dd dz   «      d   |d   t        j                  d|dd dz   «      d   	 c}| _
        }t         ‰	| �  ||¬«      }||dk(  r|nt        j                  |«      z  }| j                  j                  |||t        z   |z    «       |t        |z   z  }|t        |«      k  r�Œy	y	)
z&Handle reading of a compressed packet.rk   r   ra   r   rl   rb   r   r   N)rv   r]   r;   r‚   Ú
decompressrc   rf   ro   rn   ÚCOMPRESSED_PACKET_HEADER_LENGTHrw   rx   r|   )
r.   r'   r‰   rŠ   r„   rJ   rh   Úpllrp   ry   s
            €r"   Ú_recv_compressed_pktz,NetworkBrokerCompressed._recv_compressed_pktk  s�  ø€ ô ™Ñ,¨T¸Ð,ÓGˆð   1Ò$ñ äœ4Ÿ?™?¨>Ó:Ó;ð 	ð ˆØ”s˜3“xÓä—-‘-Ø�c˜& 6Ô,@Ñ#@À1Ñ#DÐEÈÑOóàñˆCô $ cÑ)¬C°«H°vÑ,=Ò=ô ™Ñ,¨TÔ8WÐ,ÓX�ô —M‘M $¨¨q°¨°gÑ(=Ó>¸qÑAØ˜1‘IÜ—M‘M $¨¨q°¨°gÑ(=Ó>¸qÑAðð	Ø"ØÔ*Ø$ô "'¡Ñ!4°TÀÐ!4Ó!O�ð à'¨1Ò,ñ #äŸ™¨Ó8ñ�ð ×Ñ×#Ñ# C¨°Ô:NÑ1NÐQTÑ1TÐ$UÔVØÔ*¨SÑ0Ñ0ˆFð? ”s˜3“xÖr$   c                 ó  •— | j                   ss	 t        ‰| �	  |t        ¬«      }t	        j
                  d|dd dz   «      d   |d   t	        j
                  d|dd dz   «      d   	 c}| _        }| j                  |||«       | j                   sy
| j                   j                  «       }|d   | _        |S # t        j                  t        f$ r}t        d¬	«      |‚d
}~wt        $ r}t        d|t        |«      f¬«      |‚d
}~ww xY w)z{Receive `one` or `several` packets from the MySQL server, enqueue them, and
        return the packet at the head.
        rk   ra   r   rb   rl   r   r   rL   rM   NrN   rO   )rx   rv   r]   r�   rf   ro   rw   r�   r8   rR   rS   r   rT   r   r#   ÚpopleftrC   )	r.   r'   r(   rp   r‰   rŠ   r   rJ   ry   s	           €r"   r2   zNetworkBrokerCompressed.recv›  s  ø€ ð ×Òðä™Ñ,¨TÔ8WÐ,ÓX�ô —M‘M $¨¨q°¨°gÑ(=Ó>¸qÑAØ˜1‘IÜ—M‘M $¨¨q°¨°gÑ(=Ó>¸qÑAðð	Ø"ØÔ*Ø$ð ×)Ñ)¨$°Ð@PÔQð ×ÒØà×Ñ×&Ñ&Ó(ˆØ˜!‘fˆŒàˆ
øô —N‘N¤LÐ1ò <Ü&¨TÔ2¸Ð;ûÜò Ü&Ø¨´¸SÓ1AÐ'Bôàðûðús$   �A2B4 Â4DÃCÃDÃ&C?Ã?Drr   r3   )r4   r5   r6   r7   rE   Ústaticmethodr9   r:   r   r~   r€   r8   r    rV   r	   r/   r�   r;   r2   Ú__classcell__©ry   s   @r"   rt   rt   ý   s  ø„ Ù6õ5ð
 ð %ð °ð ¸¸U¹ò ó ðó2Dð	5˜fŸm™mð 	5°cð 	5Àð 	5È$õ 	5ð  (,Ø26ñ;à�m‰mð;ð ð;ð ð	;ð
   ‘}ð;ð #+¨3¡-ð;ð 
õ;ðz.1Ø—M‘Mð.1Ø36ð.1ØJMð.1à	õ.1ð`!˜Ÿ™ð !°ð !¸÷ !ñ !r$   rt   c                   óP  — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zd	e	e
   ddfd
„Zdededdfd„Z	 	 	 	 	 	 	 d de	e   de	e   de	e   de	e   de	e   de	ee      de	ee      defd„Z	 	 	 d!dede	e
   de	e
   de	e
   ddf
d„Zd"de	e
   defd„Zedd„«       Zeedefd„«       «       Zy)#ÚMySQLSocketz�MySQL socket communication interface.

    Examples:
        Subclasses: network.MySQLTCPSocket and network.MySQLUnixSocket.
    r   Nc                 óL   — d| _         d| _        d| _        t        «       | _        y)zsNetwork layer where transactions are made with plain (uncompressed) packets
        is enabled by default.
        N)r'   Ú_connection_timeoutÚserver_hostr=   Ú
_netbrokerrD   s    r"   rE   zMySQLSocket.__init__Æ  s%   € ð
 .2ˆŒ	Ø26ˆÔ Ø*.ˆÔÜ);Ó)=ˆ�r$   c                 ó"   — t        «       | _        y)zIEnable network layer where transactions are made with compressed packets.N)rt   rš   rD   s    r"   Úswitch_to_compressed_modez%MySQLSocket.switch_to_compressed_modeÐ  s   € ä1Ó3ˆ�r$   c                 ó¶   — 	 | j                   j                  t        j                  «       | j                   j	                  «        y# t
        t        f$ r Y yw xY w)z'Shut down the socket before closing it.N)r'   Úshutdownr8   Ú	SHUT_RDWRÚcloserU   ÚOSErrorrD   s    r"   rž   zMySQLSocket.shutdownÔ  sD   € ð	Ø�I‰I×Ñœv×/Ñ/Ô0Ø�I‰I�O‰OÕøÜ¤Ð(ò 	Ùð	ús   ‚AA ÁAÁAc                 ód   — 	 | j                   j                  «        y# t        t        f$ r Y yw xY w)zClose the socket.N)r'   r    rU   r¡   rD   s    r"   Úclose_connectionzMySQLSocket.close_connectionÜ  s,   € ð	Ø�I‰I�O‰OÕøÜ¤Ð(ò 	Ùð	ús   ‚ �/®/c                 ó$   — | j                  «        y ©N)rž   rD   s    r"   Ú__del__zMySQLSocket.__del__ã  s   € Ø�‰�r$   rR   c                 ób   — || _         | j                  r| j                  j                  |«       yy)zSet the connection timeout.N)r˜   r'   Ú
settimeout)r.   rR   s     r"   Úset_connection_timeoutz"MySQLSocket.set_connection_timeoutæ  s(   € à#*ˆÔ Ø�9Š9Ø�I‰I× Ñ  Õ)ð r$   Ússl_contextÚhostc                 ó   — | j                   €J ‚| j                   j                  dk(  rt        d«      ‚t        €t	        d«      ‚	 |j                  | j                   |¬«      | _         y# t        $ r}t	        d«      |‚d}~wt        j                  t        f$ r(}t        d| j                  t        |«      f¬«      |‚d}~wt        j                  $ r}t        t        |«      «      |‚d}~wt        $ r}t        t        |«      «      |‚d}~ww xY w)a�  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_hostnamerN   rO   )r'   Úfamilyr   Ússlr   Úwrap_socketÚ	NameErrorÚSSLErrorrT   r   r(   r#   ÚCertificateErrorr    ÚNotImplementedError)r.   rª   r«   r   s       r"   Úswitch_to_sslzMySQLSocket.switch_to_sslì  sô   € ð �y‰yÐ$Ð$Ð$à�9‰9×Ñ˜qÒ Ü"Ð#QÓRÐRäˆ;Ü#Ð$LÓMÐMð	4Ø#×/Ñ/°·	±	È4Ð/ÓPˆD�IøÜò 	WÜ#Ð$LÓMÐSVÐVûÜ—‘œgÐ&ò 	Ü Ø D§L¡L´+¸cÓ2BÐ#Côàðûô ×#Ñ#ò 	4Ü ¤ S£Ó*°Ð3ûÜ"ò 	4Ü ¤ S£Ó*°Ð3ûð	4ús<   Á"A( Á(	DÁ1A=Á=DÂ#B<Â<DÃC'Ã'DÃ3DÄDÚssl_caÚssl_certÚssl_keyÚssl_verify_certÚssl_verify_identityÚtls_versionsÚtls_cipher_suitesc                 óÖ  — d}| j                   st        d¬«      ‚t        €t        d«      ‚|€g }|€g }	 |r°|j	                  d¬«       |d   }t
        |   }	t        j                  |	«      }
|dk(  rŠd	|vr#|
xj                  t        j                  z  c_        d
|vr#|
xj                  t        j                  z  c_        d|vr8|
xj                  t        j                  z  c_        nt        j                  «       }
||
_        |rt        j                  |
_        n-|rt        j                  |
_        nt        j                   |
_        |
j#                  «        |r	 |
j%                  |«       |r	 |
j+                  ||«       |r%|d	k(  r |
j-                  dj/                  |«      «       |
S # t&        t        j(                  f$ r}t        d|› �«      |‚d}~ww xY w# t&        t        j(                  f$ r}t        d|› �«      |‚d}~ww xY w# t0        $ r}t        d«      |‚d}~wt&        t2        t        j4                  t        j(                  f$ r}t        t7        |«      «      |‚d}~ww xY w)aÊ  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   rM   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_locationsrT   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_contextzMySQLSocket.build_ssl_context  s>  € ð8 &*ˆà�yŠyÜ  tÔ,Ð,äˆ;Ü#Ð$LÓMÐMàÐØˆLàÐ$Ø "Ðð6	4ÙØ×!Ñ!¨$Ð!Ô/Ø*¨1™o�Ü+¨KÑ8�ÜŸ.™.¨Ó6�à )Ò+Ø ¨Ñ4ØŸš¬3×+<Ñ+<Ñ<�Ø ¨Ñ4ØŸš¬3×+<Ñ+<Ñ<�Ø lÑ2ØŸš¬3¯?©?Ñ:žô ×4Ñ4Ó6�à%8ˆGÔ"áÜ&)×&7Ñ&7�Õ#Ù$Ü&)×&7Ñ&7�Õ#ä&)§m¡m�Ô#à×&Ñ&Ô(áðTØ×1Ñ1°&Ô9ñ ðUØ×+Ñ+¨H°gÔ>ñ ! [°IÒ%=Ø×#Ñ# C§H¡HÐ->Ó$?Ô@àˆNøô  ¤§¡Ð.ò TÜ(Ð+CÀCÀ5Ð)IÓJÐPSÐSûðTûô
  ¤§¡Ð.ò UÜ(Ð+DÀSÀEÐ)JÓKÐQTÐTûðUûô ò 	WÜ#Ð$LÓMÐSVÐVûäÜÜ× Ñ Ü�L‰Lð	
ò 	4ô !¤ S£Ó*°Ð3ûð	4úsl   µD$H	 ÅF) Å+H	 Å.G Æ (H	 Æ)GÇGÇGÇH	 ÇHÇ2HÈHÈH	 È		I(ÈHÈ0I(ÉI#É#I(r)   r*   r+   Úwrite_timeoutc                 ó  — 	 | j                   s4| j                  �(| j                  j                  |rt        |«      nd«       | j
                  j                  | j                  | j                  |||¬«       y# t        $ r
}Y d}~ŒCd}~ww xY w)at  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š   r/   r(   )r.   r)   r*   r+   rÖ   ri   s         r"   r/   zMySQLSocket.sendr  sz   € ð 	à×,Ò,°·±Ð1Fà—	‘	×$Ñ$¹]¤U¨=Ô%9ÐPTÔUð 	�‰×ÑØ�I‰IØ�L‰LØØ'Ø%=ð 	õ 	
øô ò 	äûð	ús   ‚A A7 Á7	B
ÂB
Úread_timeoutc                 ó  — 	 | j                   s4| j                  �(| j                  j                  |rt        |«      nd«       | j
                  j                  | j                  | j                  «      S # t        $ r
}Y d}~Œ>d}~ww xY w)z.Get packet from the MySQL server comm channel.N)r˜   r'   r¨   rØ   r¡   rš   r2   r(   )r.   rÙ   ri   s      r"   r2   zMySQLSocket.recv’  sj   € ð	à×,Ò,°·±Ð1Fà—	‘	×$Ñ$¹L¤U¨<Ô%8ÈdÔSð �‰×#Ñ# D§I¡I¨t¯|©|Ó<Ð<øô ò 	äûð	ús   ‚A A2 Á2	BÂ Bc                  ó   — y)zOpen the socket.Nr-   rD   s    r"   Úopen_connectionzMySQLSocket.open_connectionž  r0   r$   c                  ó   — y)zGet the location of the socket.Nr-   rD   s    r"   r(   zMySQLSocket.address¢  r0   r$   rr   )NNNFFNN)NNNr¥   )r4   r5   r6   r7   rE   rœ   rž   r£   r¦   r	   r:   r©   r   r    r¶   Úboolr   rÕ   r9   r/   r;   r2   r   rÜ   Úpropertyr(   r-   r$   r"   r–   r–   ¿  s‡  „ ñó>ó4óóóð*¨h°s©mð *Àó *ð"4¨ð "4°Cð "4¸Dó "4ðL !%Ø"&Ø!%Ø*/Ø.3Ø,0Ø15ñ`4à˜‘ð`4ð ˜3‘-ð`4ð ˜#‘ð	`4ð
 " $™ð`4ð & d™^ð`4ð ˜t C™yÑ)ð`4ð $ D¨¡IÑ.ð`4ð 
ó`4ðJ (,Ø26Ø'+ñ
àð
ð   ‘}ð
ð #+¨3¡-ð	
ð
   ‘}ð
ð 
ó
ñ@
= ¨#¡ð 
=¸)ó 
=ð òó ðð Øð.˜ò .ó ó ñ.r$   r–   c                   ó`   ‡ — e Zd ZdZddeddfˆ fd„Zedefd„«       Zdd„Zde	d	e	ddfd
„Z
ˆ xZS )ÚMySQLUnixSocketzpMySQL socket class using UNIX sockets.

    Opens a connection through the UNIX socket of the MySQL Server.
    Úunix_socketr   Nc                 ó>   •— t         ‰| �  «        || _        || _        y r¥   )rv   rE   râ   Ú_address)r.   râ   ry   s     €r"   rE   zMySQLUnixSocket.__init__®  s   ø€ Ü‰ÑÔØ +ˆÔØ(ˆ�r$   c                 ó   — | j                   S r¥   ©rä   rD   s    r"   r(   zMySQLUnixSocket.address³  ó   € à�}‰}Ðr$   c                 ó0  — 	 t        j                   t         j                  t         j                  «      | _        | j                  j	                  | j
                  «       | j                  j                  | j                  «       y # t         j                  t        f$ r(}t        d| j                  t        |«      f¬«      |‚d }~wt        $ r(}t        d| j                  t        |«      f¬«      |‚d }~wt        $ r}t        t!        |«      «      |‚d }~ww xY w)NiÒ  rO   )r8   ÚAF_UNIXÚSOCK_STREAMr'   r¨   r˜   Úconnectrâ   rR   rS   r   r(   r#   rT   r   Ú	Exceptionr    )r.   r   s     r"   rÜ   zMySQLUnixSocket.open_connection·  så   € ð	4ÜŸ™ä—‘Ü×"Ñ"óˆDŒIð
 �I‰I× Ñ  ×!9Ñ!9Ô:Ø�I‰I×Ñ˜d×.Ñ.Õ/øÜ—‘¤Ð-ò 	Ü(Øà—L‘LÜ Ó$ðôð ðûô ò 	Ü Ø D§L¡L´+¸cÓ2BÐ#Côàðûô ò 	4Ü ¤ S£Ó*°Ð3ûð	4ús0   ‚BB ÂDÂ#C Ã DÃ#C/Ã/DÃ;DÄDÚargsÚkwargsc                 ó8   — t        j                  dt        «       y)zSwitch the socket to use SSL.z2SSL is disabled when using unix socket connectionsN)ÚwarningsÚwarnÚWarning)r.   rí   rî   s      r"   r¶   zMySQLUnixSocket.switch_to_sslÏ  s   € ô 	�‰Ø@Üõ	
r$   )z/tmp/mysql.sockrr   )r4   r5   r6   r7   r    rE   rß   r(   rÜ   r   r¶   r“   r”   s   @r"   rá   rá   ¨  sX   ø„ ññ
) Cð )Àõ )ð
 ð˜ò ó ðó4ð0
Øð
Ø$'ð
à	÷
r$   rá   c            	       óZ   ‡ — e Zd ZdZ	 	 	 d
dedededdfˆ fd„Zedefd„«       Z	dd	„Z
ˆ xZS )ÚMySQLTCPSocketzYMySQL socket class using TCP/IP.

    Opens a TCP/IP connection to the MySQL Server.
    r«   ÚportÚ
force_ipv6r   Nc                 ór   •— t         ‰| �  «        || _        || _        || _        d| _        |› d|› �| _        y )Nr   rÀ   )rv   rE   r™   Úserver_portrö   Ú_familyrä   )r.   r«   rõ   rö   ry   s       €r"   rE   zMySQLTCPSocket.__init__ß  s@   ø€ ô 	‰ÑÔØ $ˆÔØ $ˆÔØ *ˆŒØˆŒØ $˜v Q t fÐ-ˆ�r$   c                 ó   — | j                   S r¥   ræ   rD   s    r"   r(   zMySQLTCPSocket.addressì  rç   r$   c           	      óJ  — d}	 t        j                  | j                  | j                  dt         j                  t         j
                  «      }|D ]B  }| j                  r|d   t         j                  k(  r|} n|d   t         j                  k(  sŒ@|} n | j                  r|d   €t        d| j                  › �«      ‚|d   €|d   }|\  | _        }}}}	 t        j                   | j                  ||«      | _        | j                  j                  | j                  «       | j                  j!                  |«       y# t        $ r3}t        d| j                  | j                  t        |«      f¬«      |‚d}~ww xY w# t         j"                  t$        f$ r3}t'        d| j                  | j                  t        |«      f¬«      |‚d}~wt        $ r3}t        d| j                  | j                  t        |«      f¬«      |‚d}~wt(        $ r}t        t+        |«      «      |‚d}~ww xY w)z/Open the TCP/IP connection to the MySQL server.)NNNNNr   NzNo IPv6 address found for iÓ  rO   )r8   Úgetaddrinfor™   rø   rê   ÚSOL_TCPrö   ÚAF_INET6ÚAF_INETr   rT   r#   rù   r'   r¨   r˜   rë   rR   rS   r   rì   r    )	r.   ÚaddrinfoÚ	addrinfosÚinfor   ÚsocktypeÚprotori   Úsockaddrs	            r"   rÜ   zMySQLTCPSocket.open_connectionð  s  € ð +ð 	ð	Ü×*Ñ*Ø× Ñ Ø× Ñ ØÜ×"Ñ"Ü—‘óˆIð "ò �Ø—?’? t¨A¡w´&·/±/Ò'AØ#�HÙØ˜‘7œfŸn™nÓ,Ø#�HÙðð �Š 8¨A¡;Ð#6Ü$Ð'AÀ$×BRÑBRÐASÐ%TÓUÐUØ˜‰{Ð"Ø$ Q™<�ð 8@Ñ4ˆŒ�x ¨¨8ð	4ÜŸ™ d§l¡l°H¸eÓDˆDŒIØ�I‰I× Ñ  ×!9Ñ!9Ô:Ø�I‰I×Ñ˜hÕ'øô ò 	Ü ØØ×(Ñ(¨$×*:Ñ*:¼KÈÓ<LÐMôð ðûð	ûô —‘¤Ð-ò 	Ü(Øà×$Ñ$Ø×$Ñ$Ü Ó$ðôð ðûô ò 	Ü ØØ×(Ñ(¨$×*:Ñ*:¼KÈÓ<LÐMôð ðûô ò 	4Ü ¤ S£Ó*°Ð3ûð	4úsO   „B
D< Â8D< ÃA&E; Ä<	E8Å.E3Å3E8Å;H"Æ.GÇH"Ç.G<Ç<H"ÈHÈH")z	127.0.0.1iê  Frr   )r4   r5   r6   r7   r    r:   rÞ   rE   rß   r(   rÜ   r“   r”   s   @r"   rô   rô   Ù  s^   ø„ ñð  ØØ ñ	.àð.ð ð.ð ð	.ð
 
õ.ð ð˜ò ó ð÷;4r$   rô   )0r7   r8   rf   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‡   rd   rn   r�   rT   r    r#   r&   r=   rt   r–   rá   rô   r-   r$   r"   ú<module>r     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4øðK ò àÐØ
‚Cðús   ²A
C! Ã!	C-Ã,C-