§
    >Ä³g1v  ã                   óØ  — 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¦  «        oej        Zn# e$ r dZdZY nw xY w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/dS )zGModule 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                 óR   — | j         st          | ¦  «        n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    úU/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/mysql/connector/network.pyÚ_strioerrorr#   J   s0   € ð
 œ9ÐN�3ˆs‰8Œ8ˆ8Ð*N°3´9Ð*NÐ*NÀÄÐ*NÐ*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dS )Ú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                 ó   — dS )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.sendj   ó   € € € r$   c                 ó   — dS )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&   R   sÆ   € € € € € ðð ð. ð (,Ø26ðð àŒ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dS )ÚNetworkBrokerPlainú,Broker class for MySQL socket communication.r   Nc                 ó   — d| _         d S ©Néÿÿÿÿ©Ú_pktnr©r.   s    r"   Ú__init__zNetworkBrokerPlain.__init__œ   s   € ØˆŒˆˆr$   c                 ó*   — | j         dz   dz  | _         dS ©zIncrement packet id.r   é   NrB   rD   s    r"   Ú_set_next_pktnrz"NetworkBrokerPlain._set_next_pktnrŸ   s   € à”{ Q‘¨#Ñ-ˆŒˆˆr$   r'   r(   Úpktc                 ó(  — 	 |                      |¦  «         dS # 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£   sÅ   € ð		8Ø�LŠL˜ÑÔÐÐÐøÝ”¥Ð-ð 	9ð 	9ð 	9Ý#¨$Ð/Ñ/Ô/°SÐ8øøøøÝð 	ð 	ð 	Ý"Ø G­[¸Ñ-=Ô-=Ð#>ðñ ô àðøøøøõ ð 	8ð 	8ð 	8Ý"¨Ð.Ñ.Ô.°CÐ7øøøøð	8øøøs,   ‚ ™B¯A Á BÁ!A.Á.BÁ;BÂBr   Úsizec                 óÌ   — t          |¦  «        }t          |¦  «        }|rC|                     ||¦  «        }|dk    r|dk    rt          d¬¦  «        ‚||d…         }||z  }|°C|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ŒoˆÝ˜c‘?”?ˆØð 	Ø—>’> (¨DÑ1Ô1ˆDØ�qŠyˆy˜T AšX˜XÝ$¨4Ð0Ñ0Ô0Ð0Ø   ”ˆHØ�D‰LˆDð ð 	ð ˆ
r$   r)   r*   r+   c           
      óX  — |€|                       ¦   «          n|| _        t          |¦  «        t          k    r–d}t	          t          |¦  «        t          z  ¦  «        D ]e}|                      ||dt          j        d| j        ¦  «        z   |||t          z   …         z   ¦  «         |                       ¦   «          |t          z  }Œf||d…         }|                      ||t          j        dt          |¦  «        ¦  «        dd…         t          j        d| j        ¦  «        z   |z   ¦  «         dS )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¼   sA  € ð Ð Ø× Ò Ñ"Ô"Ð"Ð"à'ˆDŒKõ ˆw‰<Œ<Õ-Ò-Ð-ØˆFÝ�3˜w™<œ<Õ+=Ñ=Ñ>Ô>ð 
-ð 
-�à—’ØØØ#Ý”k $¨¬Ñ4Ô4ñ5à˜f vÕ0BÑ'BÐBÔCñDñô ð ð ×$Ò$Ñ&Ô&Ð&ØÕ,Ñ,��Ø˜f˜g˜gÔ&ˆGØ�ŠØØÝŒK˜�c '™lœlÑ+Ô+¨A¨a¨CÔ0ÝŒk˜$ ¤Ñ,Ô,ñ-àññ	
ô 	
ð 	
ð 	
ð 	
r$   c                 óž  — 	 |                       |t          ¬¦  «        }t          j        d|dd…         dz   ¦  «        d         |d         c}| _        ||                       ||¬¦  «        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ˆFõ ”˜d F¨1¨Q¨3¤K°'Ñ$9Ñ:Ô:¸1Ô=Ø�q”	ð %ˆK˜œð ˜D×,Ò,¨T¸Ð,ÑDÔDÑDÐDøÝ”¥Ð-ð 	Jð 	Jð 	JÝ"¨°3´<Ð@Ñ@Ô@ÀcÐIøøøøÝð 	ð 	ð 	Ý"Ø G­[¸Ñ-=Ô-=Ð#>ðñ ô àðøøøøð	øøøs$   ‚A)A, Á,CÂBÂCÂ&!CÃC©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=   ™   s5  € € € € € Ø6Ð6ðð ð ð ð.ð .ð .ð .ð8˜fœmð 8°cð 8Àð 8È$ð 8ð 8ð 8ð 8ð
ð 
 ¤ð 
°Sð 
Àð 
ð 
ð 
ð 
ð" (,Ø26ð*
ð *
àŒ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                 ó|   •— t          ¦   «                              ¦   «          d| _        t          ¦   «         | _        d S r@   )ÚsuperrE   Ú_compressed_pktnrr   Ú_queue_read)r.   Ú	__class__s    €r"   rE   z NetworkBrokerCompressed.__init__  s3   ø€ Ý‰Œ×ÒÑÔÐØ!#ˆÔÝ-2©W¬WˆÔÐÐr$   r)   Úpktnrc                 óì  — g }t          | ¦  «        t          k    rƒd}t          t          | ¦  «        t          z  ¦  «        D ]R}|                     dt	          j        d|¦  «        z   | ||t          z   …         z   ¦  «         |dz   dz  }|t          z  }ŒS| |d…         } |                     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 $¨Ñ.Ô.ñ/à˜f vÕ0BÑ'BÐBÔCñDñô ð ð
  ™ cÑ)�ØÕ,Ñ,��Ø˜f˜g˜gÔ&ˆGØ�ŠÝŒK˜�c '™lœlÑ+Ô+¨A¨a¨CÔ0µ6´;¸tÀUÑ3KÔ3KÑKÈgÑUñ	
ô 	
ð 	
ð ˆr$   c                 ó*   — | j         dz   dz  | _         dS rG   )rw   rD   s    r"   Ú_set_next_compressed_pktnrz2NetworkBrokerCompressed._set_next_compressed_pktnr   s   € à"&Ô"8¸1Ñ"<ÀÑ!CˆÔÐÐr$   r'   r(   rJ   c                 óX  •— 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˜�c .Ñ1Ô1Ñ2Ô2°1°Q°3Ô7ÝŒk˜$ Ô 6Ñ7Ô7ñ8åŒk˜$¥ C¡¤Ñ)Ô)¨!¨A¨#Ô.ñ/ð ñð 	õ ‰wŒw× Ò   w°Ñ4Ô4Ð4r$   r*   r+   c           
      óÄ  •— |€|                       ¦   «          n|| _        |€|                      ¦   «          n|| _        t	          d¦  «                             |                      || j        ¦  «        ¦  «        }t          |¦  «        t          t          z
  k    r�d}t          t          |¦  «        t          z  ¦  «        D ]G}|                      |||||t          z   …         ¦  «         |                      ¦   «          |t          z  }ŒH|                      ||||d…         ¦  «         dS t          |¦  «        t          k    r|                      |||¦  «         dS t          ¦   «                              ||t          j        dt          |¦  «        ¦  «        dd…         t          j        d| j        ¦  «        z   t          j        dd¦  «        dd…         z   |z   ¦  «         dS )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/  së  ø€ ð Ð Ø× Ò Ñ"Ô"Ð"Ð"à'ˆDŒKØ#Ð+Ø×+Ò+Ñ-Ô-Ð-Ð-à%=ˆDÔ"å  ‘~”~×*Ò*¨4×+@Ò+@ÀÈ$Ì+Ñ+VÔ+VÑWÔWˆÝˆw‰<Œ<Õ-Õ0DÑDÒDÐDð ˆFõ �3˜|Ñ,Ô,Õ0BÑBÑCÔCð -ð -�Ø—’Ø˜' <°¸ÕBTÑ9TÐ0TÔ#Uñô ð ð ×/Ò/Ñ1Ô1Ð1ØÕ,Ñ,��Ø�NŠN˜4 ¨,°v°w°wÔ*?Ñ@Ô@Ð@Ð@Ð@õ �7‰|Œ|Õ1Ò1Ð1à—’˜t W¨lÑ;Ô;Ð;Ð;Ð;õ ‘”×!Ò!ØØÝ”K ¥c¨,Ñ&7Ô&7Ñ8Ô8¸¸1¸Ô=Ý”k $¨Ô(>Ñ?Ô?ñ@å”k $¨Ñ*Ô*¨1¨Q¨3Ô/ñ0ð #ñ#ñô ð ð ð r$   Úcompressed_pllÚuncompressed_pllc                 ó”  •— t          ¦   «                              ||¬¦  «        }|dk    r|n t          t          j        |¦  «        ¦  «        }d}|t          |¦  «        k     �rdt          j        d|||t          z   dz
  …         dz   ¦  «        d         }t          |z   t          |¦  «        |z
  k    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                             |||t          z   |z   …         ¦  «         |t          |z   z  }|t          |¦  «        k     �°bd	S d	S )
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_pktl  sã  ø€ õ ™œ×,Ò,¨T¸Ð,ÑGÔGˆð   1Ò$Ð$ð ˆNå�4œ?¨>Ñ:Ô:Ñ;Ô;ð 	ð ˆØ•s˜3‘x”xÒÑå”-Ø�c˜& 6Õ,@Ñ#@À1Ñ#DÐDÔEÈÑOñô àôˆCõ $ cÑ)­C°©H¬H°vÑ,=Ò=Ð=õ ™œ×,Ò,¨TÕ8WÐ,ÑXÔX�õ ”M $¨¨q°¨s¬°gÑ(=Ñ>Ô>¸qÔAØ˜1”IÝ”M $¨¨q°¨s¬°gÑ(=Ñ>Ô>¸qÔAðð	Ø"ØÔ*Ø$õ "'¡¤×!4Ò!4°TÀÐ!4Ñ!OÔ!O�ð à'¨1Ò,Ð,ð #�Nåœ¨Ñ8Ô8ñ�ð Ô×#Ò# C¨°Õ:NÑ1NÐQTÑ1TÐ(TÔ$UÑVÔVÐVØÕ*¨SÑ0Ñ0ˆFð? •s˜3‘x”xÒÑÐÐÐÐr$   c                 óf  •— | j         sù	 t          ¦   «                              |t          ¬¦  «        }t	          j        d|dd…         dz   ¦  «        d         |d         t	          j        d|dd…         dz   ¦  «        d         	 c}| _        }|                      |||¦  «         n]# t          j	        t          f$ r}t          d¬	¦  «        |‚d
}~wt          $ r&}t          d|t          |¦  «        f¬¦  «        |‚d
}~ww xY w| j         sd
S | j                              ¦   «         }|d         | _        |S )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œ  sb  ø€ ð Ôð 	ðå™œ×,Ò,¨TÕ8WÐ,ÑXÔX�õ ”M $¨¨q°¨s¬°gÑ(=Ñ>Ô>¸qÔAØ˜1”IÝ”M $¨¨q°¨s¬°gÑ(=Ñ>Ô>¸qÔAðð	Ø"ØÔ*Ø$ð ×)Ò)¨$°Ð@PÑQÔQÐQÐQøÝ”N¥LÐ1ð <ð <ð <Ý&¨TÐ2Ñ2Ô2¸Ð;øøøøÝð ð ð Ý&Ø¨µ¸SÑ1AÔ1AÐ'Bðñ ô àðøøøøðøøøð
 Ôð 	Ø�4àÔ×&Ò&Ñ(Ô(ˆØ˜!”fˆŒàˆ
s$   ŠBB% Â%C?Â;CÃC?Ã!C:Ã:C?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Ð6ð5ð 5ð 5ð 5ð 5ð 5ð
 ð %ð °ð ¸¸U¼ð ð ð ñ „\ðð2Dð Dð Dð Dð	5˜fœmð 	5°cð 	5Àð 	5È$ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð  (,Ø26ð;ð ;àŒmð;ð ð;ð ð	;ð
   ”}ð;ð #+¨3¤-ð;ð 
ð;ð ;ð ;ð ;ð ;ð ;ðz.1Ø”Mð.1Ø36ð.1ØJMð.1à	ð.1ð .1ð .1ð .1ð .1ð .1ð`!˜œð !°ð !¸ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !r$   rt   c                   ó¸  — 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dS )$ÚMySQLSocketz�MySQL socket communication interface.

    Examples:
        Subclasses: network.MySQLTCPSocket and network.MySQLUnixSocket.
    r   Nc                 óV   — d| _         d| _        d| _        t          ¦   «         | _        dS )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          ¦   «         | _        dS )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Ô3ˆŒˆˆr$   c                 ó²   — 	 | j                              t          j        ¦  «         | j                              ¦   «          dS # t
          t          f$ r Y dS 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Õ  s_   € ð	ØŒI×Ò�vÔ/Ñ0Ô0Ð0ØŒI�OŠOÑÔÐÐÐøÝ¥Ð(ð 	ð 	ð 	ØˆDˆDð	øøøs   ‚=A ÁAÁAc                 ój   — 	 | j                              ¦   «          dS # t          t          f$ r Y dS w xY w)zClose the socket.N)r'   r    rU   r¡   rD   s    r"   Úclose_connectionzMySQLSocket.close_connectionÝ  sF   € ð	ØŒI�OŠOÑÔÐÐÐøÝ¥Ð(ð 	ð 	ð 	ØˆDˆDð	øøøs   ‚ �2±2c                 ó.   — |                       ¦   «          d S ©N)rž   rD   s    r"   Ú__del__zMySQLSocket.__del__ä  s   € Ø�Š‰Œˆˆˆr$   rR   c                 óZ   — || _         | j        r| j                             |¦  «         dS dS )zSet the connection timeout.N)r˜   r'   Ú
settimeout)r.   rR   s     r"   Úset_connection_timeoutz"MySQLSocket.set_connection_timeoutç  s:   € à#*ˆÔ ØŒ9ð 	*ØŒI× Ò  Ñ)Ô)Ð)Ð)Ð)ð	*ð 	*r$   Ússl_contextÚhostc                 ó:  — | j         €J ‚| j         j        dk    rt          d¦  «        ‚t          €t	          d¦  «        ‚	 |                     | j         |¬¦  «        | _         dS # 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í  sF  € ð ŒyÐ$Ð$Ð$àŒ9Ô˜qÒ Ð Ý"Ð#QÑRÔRÐRåˆ;Ý#Ð$LÑMÔMÐMð	4Ø#×/Ò/°´	È4Ð/ÑPÔPˆDŒIˆIˆIøÝð 	Wð 	Wð 	WÝ#Ð$LÑMÔMÐSVÐVøøøøÝ”�gÐ&ð 	ð 	ð 	Ý Ø D¤Lµ+¸cÑ2BÔ2BÐ#Cðñ ô àðøøøøõ Ô#ð 	4ð 	4ð 	4Ý ¥ S¡¤Ñ*Ô*°Ð3øøøøÝ"ð 	4ð 	4ð 	4Ý ¥ S¡¤Ñ*Ô*°Ð3øøøøð	4øøøs<   Á !A# Á#
DÁ-A=Á=DÂ&B<Â<DÃC+Ã+DÃ8DÄDFÚ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 |                     d¬¦  «         |d         }t
          |         }	t          j        |	¦  «        }
|dk    rZd	|vr|
xj        t          j        z  c_        d
|vr|
xj        t          j	        z  c_        d|vr|
xj        t          j
        z  c_        nt          j        ¦   «         }
||
_        |rt          j        |
_        n%|rt          j        |
_        nt          j        |
_        |
                     ¦   «          |rH	 |
                     |¦  «         n1# t&          t          j        f$ r}t          d|› �¦  «        |‚d}~ww xY w|rI	 |
                     ||¦  «         n1# t&          t          j        f$ r}t          d|› �¦  «        |‚d}~ww xY w|r.|d	k    r(|
                     d                     |¦  «        ¦  «         |
S # t0          $ r}t          d¦  «        |‚d}~wt&          t2          t          j        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ð 	-Ý  tÐ,Ñ,Ô,Ð,åˆ;Ý#Ð$LÑMÔMÐMàÐØˆLàÐ$Ø "Ðð6	4Øð 7Ø×!Ò!¨$Ð!Ñ/Ô/Ð/Ø*¨1œo�Ý+¨KÔ8�Ýœ.¨Ñ6Ô6�à )Ò+Ð+Ø ¨Ð4Ð4Ø˜œ­3Ô+<Ñ<˜œØ ¨Ð4Ð4Ø˜œ­3Ô+<Ñ<˜œØ lÐ2Ð2Ø˜œ­3¬?Ñ:˜œøõ Ô4Ñ6Ô6�à%8ˆGÔ"àð 4Ý&)Ô&7�Ô#Ð#Ø$ð 4Ý&)Ô&7�Ô#Ð#å&)¤m�Ô#à×&Ò&Ñ(Ô(Ð(àð TðTØ×1Ò1°&Ñ9Ô9Ð9Ð9øÝ¥¤Ð.ð Tð Tð TÝ(Ð)IÀCÐ)IÐ)IÑJÔJÐPSÐSøøøøðTøøøàð UðUØ×+Ò+¨H°gÑ>Ô>Ð>Ð>øÝ¥¤Ð.ð Uð Uð UÝ(Ð)JÀSÐ)JÐ)JÑKÔKÐQTÐTøøøøðUøøøð
 !ð A [°IÒ%=Ð%=Ø×#Ò# C§H¢HÐ->Ñ$?Ô$?Ñ@Ô@Ð@àˆNøÝð 	Wð 	Wð 	WÝ#Ð$LÑMÔMÐSVÐVøøøøåÝÝÔ ÝŒLð	
ð 	4ð 	4ð 	4õ !¥ S¡¤Ñ*Ô*°Ð3øøøøð	4øøøsl   ¹DH	 ÅE ÅH	 ÅF	Å1FÆF	Æ	H	 ÆF& Æ%H	 Æ&GÆ<GÇGÇ4H	 È	
I/ÈH#È#*I/ÉI*É*I/r)   r*   r+   Úwrite_timeoutc                 óü   — 	 | j         s2| j        �+| j                             |rt          |¦  «        nd¦  «         n# t          $ r
}Y d}~nd}~ww xY w| j                             | j        | j        |||¬¦  «         dS )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.sends  s­   € ð 	àÔ,ðVØ15´Ð1Fà”	×$Ò$¸]Ð%T¥U¨=Ñ%9Ô%9Ð%9ÐPTÑUÔUÐUøøÝð 	ð 	ð 	àˆDˆDˆDˆDøøøøð	øøøð 	Œ×ÒØŒIØŒLØØ'Ø%=ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
ó   ‚9< ¼
AÁAÚread_timeoutc                 óð   — 	 | j         s2| j        �+| j                             |rt          |¦  «        nd¦  «         n# t          $ r
}Y d}~nd}~ww xY w| j                             | j        | j        ¦  «        S )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“  sŒ   € ð	àÔ,ðTØ15´Ð1Fà”	×$Ò$¸LÐ%R¥U¨<Ñ%8Ô%8Ð%8ÈdÑSÔSÐSøøÝð 	ð 	ð 	àˆDˆDˆDˆDøøøøð	øøøð Œ×#Ò# D¤I¨t¬|Ñ<Ô<Ð<rÙ   c                 ó   — dS )zOpen the socket.Nr-   rD   s    r"   Úopen_connectionzMySQLSocket.open_connectionŸ  r0   r$   c                 ó   — dS )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–   À  sa  € € € € € ðð ð>ð >ð >ð >ð4ð 4ð 4ð 4ðð ð ð ðð ð ð ðð ð ð ð*¨h°s¬mð *Àð *ð *ð *ð *ð"4¨ð "4°Cð "4¸Dð "4ð "4ð "4ð "4ðL !%Ø"&Ø!%Ø*/Ø.3Ø,0Ø15ð`4ð `4à˜”ð`4ð ˜3”-ð`4ð ˜#”ð	`4ð
 " $œð`4ð & dœ^ð`4ð ˜t CœyÔ)ð`4ð $ D¨¤IÔ.ð`4ð 
ð`4ð `4ð `4ð `4ðJ (,Ø26Ø'+ð
ð 
àð
ð   ”}ð
ð #+¨3¤-ð	
ð
   ”}ð
ð 
ð
ð 
ð 
ð 
ð@
=ð 
= ¨#¤ð 
=¸)ð 
=ð 
=ð 
=ð 
=ð ðð ð ñ „^ðð Øð.˜ð .ð .ð .ñ „^ñ „Xð.ð .ð .r$   r–   c                   óf   ‡ — 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.
    ú/tmp/mysql.sockÚunix_socketr   Nc                 ód   •— t          ¦   «                              ¦   «          || _        || _        d S 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                 ó"  — 	 t          j         t           j        t           j        ¦  «        | _        | j                             | j        ¦  «         | j                             | j        ¦  «         d S # 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)NéÒ  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× Ò  Ô!9Ñ:Ô:Ð:ØŒI×Ò˜dÔ.Ñ/Ô/Ð/Ð/Ð/øÝ”¥Ð-ð 	ð 	ð 	Ý(Øà”LÝ Ñ$Ô$ððñ ô ð ðøøøøõ ð 	ð 	ð 	Ý Ø D¤Lµ+¸cÑ2BÔ2BÐ#Cðñ ô àðøøøøõ ð 	4ð 	4ð 	4Ý ¥ S¡¤Ñ*Ô*°Ð3øøøøð	4øøøs0   ‚A,A0 Á0DÂ&B,Â,DÂ9&CÃDÃ,D	Ä	DÚargsÚkwargsc                 ó:   — t          j        dt          ¦  «         dS )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$   )rã   rr   )r4   r5   r6   r7   r    rE   rà   r(   rÝ   r   r¶   r“   r”   s   @r"   râ   râ   ©  sÁ   ø€ € € € € ðð ð
)ð ) Cð )Àð )ð )ð )ð )ð )ð )ð
 ð˜ð ð ð ñ „Xðð4ð 4ð 4ð 4ð0
Øð
Ø$'ð
à	ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r$   râ   c            	       ó`   ‡ — 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.
    ú	127.0.0.1éê  Fr«   ÚportÚ
force_ipv6r   Nc                 ó˜   •— t          ¦   «                              ¦   «          || _        || _        || _        d| _        |› d|› �| _        d S )Nr   rÀ   )rv   rE   r™   Úserver_portrû   Ú_familyræ   )r.   r«   rú   rû   ry   s       €r"   rE   zMySQLTCPSocket.__init__à  sR   ø€ õ 	‰Œ×ÒÑÔÐØ $ˆÔØ $ˆÔØ *ˆŒØˆŒØ $Ð-Ð- tÐ-Ð-ˆŒˆˆr$   c                 ó   — | j         S r¥   rè   rD   s    r"   r(   zMySQLTCPSocket.addressí  ré   r$   c           	      ó
  — d}	 t          j        | j        | j        dt           j        t           j        ¦  «        }|D ]=}| j        r|d         t           j        k    r|} n|d         t           j        k    r|} nŒ>| j        r|d         €t          d| j        › �¦  «        ‚|d         €|d         }n># t          $ r1}t          d| j        | j        t          |¦  «        f¬¦  «        |‚d}~ww xY w|\  | _        }}}}	 t          j         | j        ||¦  «        | _        | j                             | j        ¦  «         | j                             |¦  «         dS # t           j        t$          f$ r1}t'          d| j        | j        t          |¦  «        f¬¦  «        |‚d}~wt          $ r1}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   rë   )r8   Úgetaddrinfor™   rý   rí   ÚSOL_TCPrû   ÚAF_INET6ÚAF_INETr   rT   r#   rþ   r'   r¨   r˜   rî   rR   rS   r   rï   r   r    )	r.   ÚaddrinfoÚ	addrinfosÚinfor   ÚsocktypeÚprotori   Úsockaddrs	            r"   rÝ   zMySQLTCPSocket.open_connectionñ  st  € ð +ð 	ð	ÝÔ*ØÔ ØÔ ØÝÔ"Ý”ñô ˆIð "ð ð �Ø”?ð  t¨A¤wµ&´/Ò'AÐ'AØ#�HØ�EØ˜”7�fœnÒ,Ð,Ø#�HØ�Eð -ð Œð V 8¨A¤;Ð#6Ý$Ð%TÀ$ÔBRÐ%TÐ%TÑUÔUÐUØ˜Œ{Ð"Ø$ Qœ<�øøÝð 	ð 	ð 	Ý ØØÔ(¨$Ô*:½KÈÑ<LÔ<LÐMðñ ô ð ðøøøøð	øøøð 8@Ñ4ˆŒ�x ¨¨8ð	6Ýœ d¤l°H¸eÑDÔDˆDŒIØŒI× Ò  Ô!9Ñ:Ô:Ð:ØŒI×Ò˜hÑ'Ô'Ð'Ð'Ð'øÝ”¥Ð-ð 	ð 	ð 	Ý(ØàÔ$ØÔ$Ý Ñ$Ô$ððñ ô ð ðøøøøõ ð 	ð 	ð 	Ý ØàÔ$ØÔ$Ý Ñ$Ô$ððñ ô ð ðøøøøõ ð 	6ð 	6ð 	6Ý"¥3 s¡8¤8Ñ,Ô,°#Ð5øøøøð	6øøøsI   „B,B1 Â1
C,Â;,C'Ã'C,Ã=AE ÅHÅ.,FÆHÆ',GÇHÇ G=Ç=H)rø   rù   Frr   )r4   r5   r6   r7   r    r:   rß   rE   rà   r(   rÝ   r“   r”   s   @r"   r÷   r÷   Ú  sÀ   ø€ € € € € ðð ð  ØØ ð	.ð .àð.ð ð.ð ð	.ð
 
ð.ð .ð .ð .ð .ð .ð ð˜ð ð ð ñ „XððB6ð B6ð B6ð B6ð B6ð B6ð B6ð B6r$   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Ý  ðð:ð ð
 €€€Ø €€€Ø €€€Ø €€€à #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;ðØ€J€J€Jð Ô#ØÔ'ØÔ'ØÔ#ð	ð €Lð !˜  mÑ4Ô4ÐH¸¼ÐÐøØð ð ð àÐØ
€C€C€Cðøøøð
ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð ØÐ ØÐ Ø"#Ð ðO�Wð O ð Oð Oð Oð OðDð Dð Dð Dð D�Cñ Dô Dð DðNbð bð bð bð b˜ñ bô bð bðJð ð ð ð Ð0ñ ô ð ðDf.ð f.ð f.ð f.ð f.�#ñ f.ô f.ð f.ðR.
ð .
ð .
ð .
ð .
�kñ .
ô .
ð .
ðbY6ð Y6ð Y6ð Y6ð Y6�[ñ Y6ô Y6ð Y6ð Y6ð Y6s   ²2A% Á%	A1Á0A1