Ë
    aQbjo  ã                   ó¾  — d Z ddgZddlZddlZddlZ	 ddlZej                  ej                  ej                  ej                  dœ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 d	d
lmZmZmZmZmZmZ d	dlmZm Z m!Z!m"Z" ddl#m$Z$m%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Y Œ”w xY w)zFModule implementing low-level socket communication with MySQL servers.ÚMySQLTcpSocketÚMySQLUnixSocketé    N)ÚTLSv1úTLSv1.1úTLSv1.2úTLSv1.3)ÚABCÚabstractmethod)Údeque)ÚAnyÚDequeÚListÚOptionalÚTupleé   )ÚInterfaceErrorÚNotSupportedErrorÚOperationalErrorÚProgrammingErrorÚReadTimeoutErrorÚWriteTimeoutError)ÚCOMPRESSED_PACKET_HEADER_LENGTHÚMAX_PAYLOAD_LENGTHÚMIN_COMPRESS_LENGTHÚPACKET_HEADER_LENGTHé   )ÚStreamWriterÚopen_connectionÚerrÚreturnc                 óf   — | j                   st        | «      S | j                   › d| j                  › �S )z`Reformat the IOError error message.

    This function reformats the IOError error message.
    ú )ÚerrnoÚstrÚstrerror)r   s    úN/var/www/html/venv/lib/python3.12/site-packages/mysql/connector/aio/network.pyÚ_strioerrorr'   I   s,   € ð
 Ÿ9š9Œ3ˆs‹8ÐG¨S¯Y©Y¨K°q¸¿¹¸Ð*GÐGó    c                   ó˜   — e Zd ZdZe	 	 	 ddedededee	   dee	   dee	   d	dfd
„«       Z
e	 ddej                  dede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ÚwriterÚaddressÚpayloadÚpacket_numberÚcompressed_packet_numberÚwrite_timeoutr    c              ƒ   ó   K  — y­w)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.
            write_timeout: Timeout in seconds before which sending a packet to the server
                           should finish else WriteTimeoutError is raised.


        Raises:
            :class:`OperationalError`: If something goes wrong while sending packets to
                                       the MySQL server.
        N© )Úselfr+   r,   r-   r.   r/   r0   s          r&   ÚwritezNetworkBroker.writei   ó   è ø� ùó   ‚ÚreaderÚread_timeoutc              ƒ   ó   K  — y­w)aM  Get the next available packet from the MySQL server.

        Args:
            sock: Object holding the socket connection.
            address: Socket's location.
            read_timeout: Timeout in seconds before which reading a packet from the server
                          should finish.

        Returns:
            packet: A packet from the MySQL server.

        Raises:
            :class:`OperationalError`: If something goes wrong while receiving packets
                                       from the MySQL server.
            :class:`ReadTimeoutError`: If the time to receive a packet from the server takes
                                       longer than `read_timeout`.
            :class:`InterfaceError`: If something goes wrong while receiving packets
                                     from the MySQL server.
        Nr2   )r3   r7   r,   r8   s       r&   ÚreadzNetworkBroker.read‰   r5   r6   ©NNN©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r$   Úbytesr   Úintr4   ÚasyncioÚStreamReaderÚ	bytearrayr:   r2   r(   r&   r*   r*   Q   s¿   „ ñð. ð (,Ø26Ø'+ñàðð ðð ð	ð
   ‘}ðð #+¨3¡-ðð   ‘}ðð 
òó ðð> ð
 '+ñ	à×$Ñ$ðð ðð ˜s‘mð	ð
 
òó ñr(   r*   c                   ó  — e Zd ZdZdd„Zededeeef   fd„«       Z	dde
e   ddfd„Zd	ed
ededdfd„Z	 	 ddej                   dede
e   defd„Z	 	 	 dd	ed
edede
e   de
e   de
e   ddfd„Z	 ddej                   d
ede
e   defd„Zy)ÚNetworkBrokerPlainú,Broker class for MySQL socket communication.r    Nc                 ó   — d| _         y ©Néÿÿÿÿ©Ú_pktnr©r3   s    r&   Ú__init__zNetworkBrokerPlain.__init__¨   s	   € Øˆ�r(   Úpktc                 óŒ   — t        | «      t        k  rt        d«      ‚t        j                  d| dd dz   «      d   | d   }}||fS )ú-Recover the header information from a packet.ú3Can't recover header info from an incomplete packetú<Ir   é   ó    )Úlenr   Ú
ValueErrorÚstructÚunpack)rP   ÚpllÚseqids      r&   Ú
get_headerzNetworkBrokerPlain.get_header«   sW   € ô ˆs‹8Ô*Ò*ÜÐRÓSÐSô �M‰M˜$  A a ¨7Ñ 2Ó3°AÑ6Ø�‰Fð ˆð
 �EˆzÐr(   Únext_idc                 ól   — |€| xj                   dz  c_         n|| _         | xj                   dz  c_         y©z:Set the given packet id, if any, else increment packet id.Nr   é   rL   ©r3   r^   s     r&   Ú_set_next_pktnrz"NetworkBrokerPlain._set_next_pktnr¸   s*   € àˆ?Ø�KŠK˜1ÑŽKà!ˆDŒKØ�Š�sÑŽr(   r+   r,   c              ƒ   óê   K  — 	 |j                  |«       |j                  «       ƒ d{  –—†  y7 Œ# t        $ r}t        d|t	        |«      f¬«      |‚d}~wt
        $ r}t        d¬«      |‚d}~ww xY w­w)z!Write packet to the comm channel.Né  ©r#   ÚvaluesiÖ  ©r#   )r4   ÚdrainÚIOErrorr   r'   ÚAttributeError)r3   r+   r,   rP   r   s        r&   Ú
_write_pktzNetworkBrokerPlain._write_pktÀ   sl   è ø€ ð	8Ø�L‰L˜ÔØ—,‘,“.× Ò ùÜò 	Ü"Ø G¬[¸Ó-=Ð#>ôàðûô ò 	8Ü"¨Ô.°CÐ7ûð	8üs<   ‚A3„$0 ¨.©0 ­A3®0 °	A0¹AÁA0ÁA+Á+A0Á0A3r7   Úsizer8   c              ƒ   ó|  K  — 	 t        d«      }t        |«      |k  r[t        j                  |j	                  |t        |«      z
  «      |«      ƒ d{  –—† }|st        d¬«      ‚||z  }t        |«      |k  rŒ[|S 7 Œ(# t        j                  $ r}t        d¬«      |‚d}~wt        j                  $ r}|‚d}~ww xY w­w)z(Read `size` bytes from the comm channel.r(   NiÝ  rh   éÐ  )	rE   rW   rC   Úwait_forr:   r   ÚTimeoutErrorr   ÚCancelledError)r3   r7   rm   r8   rP   Úchunkr   s          r&   Ú_read_chunkzNetworkBrokerPlain._read_chunkÑ   s´   è ø€ ð	Ü˜C“.ˆCÜ�c“(˜T’/Ü%×.Ñ.Ø—K‘K ¤s¨3£x¡Ó0°,ó÷ �ñ Ü(¨tÔ4Ð4Ø�u‘�ô �c“(˜T“/ð ˆJðùô ×#Ñ#ò 	8Ü"¨Ô.°CÐ7ûÜ×%Ñ%ò 	ØˆIûð	üsM   ‚B<„AA< ÁA:Á%A< Á8A< Á9B<Á:A< Á<B9ÂBÂB9Â2B4Â4B9Â9B<r-   r.   r/   r0   c              ƒ   óÚ  K  — | j                  |«       d}	 t        t        |«      t        z  «      D ]x  }t	        j
                  | j                  ||dt        j                  d| j                  «      z   |||t        z    z   «      |«      ƒ d{  –—†  | j                  «        |t        z  }Œz t	        j
                  | j                  ||t        j                  dt        |«      |z
  «      dd t        j                  d| j                  «      z   ||d z   «      |«      ƒ d{  –—†  y7 Œ™7 Œ# t        j                  $ r}	t        d¬«      |	‚d}	~	wt        j                  $ r}	|	‚d}	~	ww xY w­w)	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.
        r   ó   ÿÿÿú<BNrT   rU   ro   rh   )rc   ÚrangerW   r   rC   rp   rl   rY   ÚpackrM   rq   r   rr   )
r3   r+   r,   r-   r.   r/   r0   ÚoffsetÚ_r   s
             r&   r4   zNetworkBrokerPlain.writeç   sp  è ø€ ð 	×Ñ˜]Ô+ð ˆð	Üœ3˜w›<Ô+=Ñ=Ó>ò -�ä×&Ñ&Ø—O‘OØØØ#Ü Ÿ+™+ d¨D¯K©KÓ8ñ9à! &¨6Ô4FÑ+FÐGñHóð "ó	÷ 	ð 	ð ×$Ñ$Ô&ØÔ,Ñ,‘ð-ô ×"Ñ"Ø—‘ØØÜ—K‘K ¤c¨'£l°VÑ&;Ó<¸Q¸qÐAÜ—k‘k $¨¯©Ó4ñ5à˜f˜gÐ&ñ'óð ó	÷ 	ñ 	ð	øð	ùô ×#Ñ#ò 	9Ü#¨$Ô/°SÐ8ûÜ×%Ñ%ò 	ØˆIûð	üsZ   ‚E+—A6D+ ÂD'ÂBD+ Ä!D)Ä"D+ Ä&E+Ä'D+ Ä)D+ Ä+E(Ä>EÅE(Å!E#Å#E(Å(E+c              ƒ   ó  K  — 	 | j                  |t        |«      ƒ d{  –—† }| j                  |«      \  }| _        || j                  |||«      ƒ d{  –—† z   S 7 Œ;7 Œ# t        $ r}t        d|t        |«      f¬«      |‚d}~ww xY w­w)z+Receive `one` packet from the MySQL server.Nre   rf   )rt   r   r]   rM   rj   r   r'   )r3   r7   r,   r8   ÚheaderÚpayload_lenr   s          r&   r:   zNetworkBrokerPlain.read  s”   è ø€ ð	à×+Ñ+¨FÔ4HÈ,ÓW×WˆFð (,§¡°vÓ'>Ñ$ˆK˜œð  $×"2Ñ"2°6¸;ÈÓ"U×UÑUÐUð Xøð VùÜò 	Ü"Ø G¬[¸Ó-=Ð#>ôàðûð	üsJ   ‚B„A žAŸ4A ÁAÁA ÁBÁA ÁA Á	BÁ'B Â BÂB©r    Nr<   )r   Nr;   )r=   r>   r?   r@   rO   ÚstaticmethodrA   r   rB   r]   r   rc   r   r$   rl   rC   rD   rE   rt   r4   r:   r2   r(   r&   rG   rG   ¥   sN  „ Ù6óð ð
˜ð 
 %¨¨S¨¡/ò 
ó ð
ñ x°¡}ð Àó ð8àð8ð ð8ð ð	8ð
 
ó8ð( Ø&*ñ	à×$Ñ$ðð ðð ˜s‘mð	ð
 
óð6 (,Ø26Ø'+ñ/àð/ð ð/ð ð	/ð
   ‘}ð/ð #+¨3¡-ð/ð   ‘}ð/ð 
ó/ðj '+ñ	à×$Ñ$ðð ðð ˜s‘mð	ð
 
ôr(   rG   c                   óX  ‡ — e Zd ZdZdˆ fd„Zedededee   fd„«       Z	edede
eeef   fd	„«       Zdd
ee   ddfd„Zdedededdfˆ fd„Z	 	 	 ddedededee   dee   dee   ddfˆ fd„Z	 ddej&                  dedee   ddfˆ fd„Z	 ddej&                  dedee   defˆ fd„Zˆ xZS )ÚNetworkBrokerCompressedrH   r    Nc                 óN   •— t         ‰| �  «        d| _        t        «       | _        y rJ   )ÚsuperrO   Ú_compressed_pktnrr   Ú_queue_read)r3   Ú	__class__s    €r&   rO   z NetworkBrokerCompressed.__init__1  s    ø€ Ü‰ÑÔØ!#ˆÔÜ-2«WˆÕr(   r-   Úpktnrc                 ó|  — d}g }t        t        | «      t        z  «      D ]H  }|j                  dt	        j
                  d|«      z   | ||t        z    z   «       |dz   dz  }|t        z  }ŒJ |j                  t	        j
                  dt        | «      |z
  «      dd t	        j
                  d|«      z   | |d z   «       |S )	z2Prepare a payload for sending to the MySQL server.r   rv   rw   r   ra   rT   rU   N)rx   rW   r   ÚappendrY   ry   )r-   rˆ   rz   Úpktsr{   s        r&   Ú_prepare_packetsz(NetworkBrokerCompressed._prepare_packets6  sÖ   € ð ˆØˆô
 ”s˜7“|Ô'9Ñ9Ó:ò 	)ˆAà�K‰KØÜ—+‘+˜d EÓ*ñ+à˜& 6Ô,>Ñ#>Ð?ñ@ôð
 ˜Q‘Y #Ñ%ˆEØÔ(Ñ(‰Fð	)ð 	�‰Ü�K‰K˜œc '›l¨VÑ3Ó4°Q°qÐ9Ü�k‰k˜$ Ó&ñ'à�f�gÐñô	
ð
 ˆr(   rP   c                 óÌ   — t        | «      t        k  rt        d«      ‚t        j                  d| dd dz   «      d   | d   t        j                  d| dd dz   «      d   }}}|||fS )rR   rS   rT   r   rU   rV   é   é   )rW   r   rX   rY   rZ   )rP   Úcompressed_pllr\   Úuncompressed_plls       r&   r]   z"NetworkBrokerCompressed.get_headerO  s{   € ô ˆs‹8Ô5Ò5ÜÐRÓSÐSô �M‰M˜$  A a ¨7Ñ 2Ó3°AÑ6Ø�‰FÜ�M‰M˜$  A a ¨7Ñ 2Ó3°AÑ6ð  0˜ˆð ˜uÐ&6Ð6Ð6r(   r^   c                 ól   — |€| xj                   dz  c_         n|| _         | xj                   dz  c_         yr`   )r…   rb   s     r&   Ú_set_next_compressed_pktnrz2NetworkBrokerCompressed._set_next_compressed_pktnr]  s1   € àˆ?Ø×"Ò" aÑ'Ö"à%,ˆDÔ"Ø×Ò #Ñ%Ör(   r+   r,   c              ƒ   ó>  •K  — t        j                  |«      }t        j                  dt	        |«      «      dd t        j                  d| j
                  «      z   t        j                  dt	        |«      «      dd z   |z   }t        ‰| �  |||«      ƒ d{  –—† S 7 Œ­w)z1Compress packet and write it to the comm channel.rT   r   rU   rw   N)ÚzlibÚcompressrY   ry   rW   r…   r„   rl   )r3   r+   r,   rP   Úcompressed_pktr‡   s        €r&   rl   z"NetworkBrokerCompressed._write_pkte  s“   øè ø€ ô Ÿ™ sÓ+ˆä�K‰K˜œc .Ó1Ó2°1°QÐ7Ü�k‰k˜$ × 6Ñ 6Ó7ñ8ä�k‰k˜$¤ C£Ó)¨!¨AÐ.ñ/ð ñð 	ô ‘WÑ'¨°¸Ó=×=Ð=Ð=ús   ƒBBÂBÂBr.   r/   r0   c              ƒ   óX  •K  — | j                  |«       | j                  |«       	 t        d«      j                  | j	                  || j
                  «      «      }t        |«      t        t        z
  k\  r§d}t        t        |«      t        z  «      D ]T  }	t        j                  | j                  |||||t        z    «      |«      ƒ d{  –—†  | j                  «        |t        z  }ŒV t        j                  | j                  ||||d «      |«      ƒ d{  –—†  yt        |«      t        kD  r0t        j                  | j                  |||«      |«      ƒ d{  –—†  yt        j                  t        ‰| �1  ||t        j                   dt        |«      «      dd t        j                   d| j"                  «      z   t        j                   dd«      dd z   |z   «      |«      ƒ d{  –—†  y7 �Œ!7 ŒÖ7 Œ–7 Œ# t        j$                  t        j&                  f$ r}
t)        d¬«      |
‚d}
~
ww xY w­w)	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.
        r(   r   NrT   rU   rw   ro   rh   )rc   r“   rE   ÚjoinrŒ   rM   rW   r   r   rx   rC   rp   rl   r   r„   rY   ry   r…   rr   rq   r   )r3   r+   r,   r-   r.   r/   r0   Úpayload_preprz   r{   r   r‡   s              €r&   r4   zNetworkBrokerCompressed.writeu  s%  øè ø€ ð 	×Ñ˜]Ô+Ø×'Ñ'Ð(@ÔAð6	9Ü$ S›>×.Ñ.Ø×%Ñ% g¨t¯{©{Ó;óˆLô �7‹|Ô1Ô4HÑHÒHð �ô œs <Ó0Ô4FÑFÓGò 
1�AÜ!×*Ñ*ØŸ™Ø"Ø#Ø(¨°&Ô;MÑ2MÐNóð
 &ó÷ ð ð ×3Ñ3Ô5ØÔ0Ñ0‘Fð
1ô ×&Ñ&Ø—O‘O F¨G°\À&À'Ð5JÓKØ!ó÷ ñ ô �w“<Ô"5Ò5ä!×*Ñ*ØŸ™¨°¸ÓFÈó÷ ñ ô
 "×*Ñ*Ü™Ñ*Ø"Ø#Ü"ŸK™K¨¬c°,Ó.?Ó@ÀÀ1ÐEÜ$Ÿk™k¨$°×0FÑ0FÓGñHä$Ÿk™k¨$°Ó2°1°QÐ7ñ8ð +ñ+óð &ó
÷ 
ñ 
ð5ùðøðøð

ùô ×&Ñ&¬×(<Ñ(<Ð=ò 	9Ü#¨$Ô/°SÐ8ûð	9üs‹   ƒ#H*§B!G2 ÃG)Ã	AG2 ÄG,ÄG2 ÄH*Ä<G2 ÅG.ÅG2 ÅH*ÅBG2 Ç#G0Ç$G2 Ç(H*Ç)G2 Ç,G2 Ç.G2 Ç0G2 Ç2#H'ÈH"È"H'È'H*r7   r�   r8   c           	   ƒ   óŽ  •K  — t        t        j                  t        ‰
| �  |||«      ƒ d{  –—† «      «      }d}|t        |«      k  rôt        j                  d|||t        z   dz
   dz   «      d   }t        |z   t        |«      |z
  kD  rot        ‰
| �  |t        |«      ƒ d{  –—† }| j                  |«      \  }| _        }t        ‰
| �  |||«      ƒ d{  –—† }	||dk(  r|	nt        j                  |	«      z  }| j                  j                  |||t        z   |z    «       |t        |z   z  }|t        |«      k  rŒóyy7 �Œ7 Œž7 Œm­w)z&Handle reading of a compressed packet.Nr   rT   r   rV   )rE   r•   Ú
decompressr„   rt   rW   rY   rZ   r   r   r]   r…   r†   rŠ   )r3   r7   r�   r8   rP   rz   r[   r}   r‘   r—   r‡   s             €r&   Ú_read_compressed_pktz,NetworkBrokerCompressed._read_compressed_pkt¾  sf  øè ø€ ô Ü�O‰OÜ‘gÑ)¨&°.À,ÓO×Oóó
ˆð
 ˆØ”s˜3“xÒä—-‘-Ø�c˜& 6Ô,@Ñ#@À1Ñ#DÐEÈÑOóàñˆCô $ cÑ)¬C°«H°vÑ,=Ò=ô  %™wÑ2ØÔ;¸\ó ÷ �ð —O‘O FÓ+ñ	Ø"ØÔ*Ø$ä',¡wÑ':Ø˜N¨Ló(÷ "�ð à'¨1Ò,ñ #äŸ™¨Ó8ñ�ð ×Ñ×#Ñ# C¨°Ô:NÑ1NÐQTÑ1TÐ$UÔVØÔ*¨SÑ0Ñ0ˆFð? ”s˜3“xÕð	 Pùðøð"ús;   ƒ)E¬D>­A5EÂ"EÂ#2EÃEÃA%EÄ<EÅEÅEc              ƒ   ó   •K  — | j                   s‹	 t        ‰	| �	  |t        |«      ƒ d{  –—† }| j	                  |«      \  }| _        }|dk(  r3| j                   j                  t        ‰	| �	  |||«      ƒ d{  –—† «       n| j                  |||«      ƒ d{  –—†  | j                   sy| j                   j                  «       }|d   | _        |S 7 Œ¤7 ŒY7 Œ;# t        $ r}t        d|t        |«      f¬«      |‚d}~ww xY w­w)z{Receive `one` or `several` packets from the MySQL server, enqueue them, and
        return the packet at the head.
        Nr   re   rf   rU   )r†   r„   rt   r   r]   r…   rŠ   r�   rj   r   r'   ÚpopleftrM   )
r3   r7   r,   r8   r}   r�   r‘   r   rP   r‡   s
            €r&   r:   zNetworkBrokerCompressed.readí  s  øè ø€ ð ×Òðä$™wÑ2ØÔ;¸\ó ÷ �ð —O‘O FÓ+ñ	Ø"ØÔ*Ø$ð $ qÒ(à×$Ñ$×+Ñ+Ü#™gÑ1°&¸.È,ÓW×Wõð
 ×3Ñ3Ø °ó÷ ð ð ×ÒØà×Ñ×&Ñ&Ó(ˆØ˜!‘fˆŒàˆ
ðAøð Xøðùô ò Ü&Ø¨´¸SÓ1AÐ'Bôàðûðüs]   ƒC>‘C ©CªAC Á6CÁ7C ÂCÂC Â3C>ÃC ÃC ÃC Ã	C;ÃC6Ã6C;Ã;C>r   r<   r;   )r=   r>   r?   r@   rO   r€   rA   rB   r   rŒ   r   r]   r   r“   r   r$   rl   r4   rC   rD   r�   rE   r:   Ú__classcell__©r‡   s   @r&   r‚   r‚   .  sŠ  ø„ Ù6õ5ð
 ð %ð °ð ¸¸U¹ò ó ðð0 ð7˜ð 7 %¨¨S°#¨Ñ"6ò 7ó ð7ñ&°(¸3±-ð &È4ó &ð>àð>ð ð>ð ð	>ð
 
õ>ð* (,Ø26Ø'+ñG9àðG9ð ðG9ð ð	G9ð
   ‘}ðG9ð #+¨3¡-ðG9ð   ‘}ðG9ð 
õG9ðZ '+ñ	-1à×$Ñ$ð-1ð ð-1ð ˜s‘mð	-1ð
 
õ-1ðf '+ñ	-à×$Ñ$ð-ð ð-ð ˜s‘mð	-ð
 
÷-ñ -r(   r‚   c                   óh  — e Zd ZdZdd„Zedefd„«       Zede	ddfd„«       Z
dd„Zdefd	„Zd
eddfd„Zdd„Zdej$                  dd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dddddg g f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j$                  fd„Zy)"ÚMySQLSocketz�MySQL socket communication interface.

    Examples:
        Subclasses: network.MySQLTCPSocket and network.MySQLUnixSocket.
    r    Nc                 óh   — d| _         d| _        d| _        d| _        t	        «       | _        d| _        y)zsNetwork layer where transactions are made with plain (uncompressed) packets
        is enabled by default.
        NF)Ú_readerÚ_writerÚ_connection_timeoutÚ_addressrG   Ú
_netbrokerÚ_is_connectedrN   s    r&   rO   zMySQLSocket.__init__$  s3   € ð 8<ˆŒØ/3ˆŒØ26ˆÔ Ø'+ˆŒÜ);Ó)=ˆŒØ#(ˆÕr(   c                 ó   — | j                   S )zSocket location.)r¨   rN   s    r&   r,   zMySQLSocket.address/  s   € ð �}‰}Ðr(   Úkwargsc              ‹   ó   K  — y­w)zOpen the socket.Nr2   ©r3   r¬   s     r&   r   zMySQLSocket.open_connection4  r5   r6   c              ƒ   ón  K  — | j                   r	 | j                   j                  «        | j                   j                  �$| j                   j                  j                  «        | j                   j	                  «       ƒ d{  –—†  d| _        yd| _        y7 Œ# t
        $ r}Y d}~d| _        yd}~ww xY w­w)zClose the connection.NF)r¦   ÚcloseÚ	transportÚabortÚwait_closedÚ	Exceptionrª   )r3   r{   s     r&   Úclose_connectionzMySQLSocket.close_connection8  s�   è ø€ à�<Š<ð	Ø—‘×"Ñ"Ô$à—<‘<×)Ñ)Ð5Ø—L‘L×*Ñ*×0Ñ0Ô2Ø—l‘l×.Ñ.Ó0×0Ð0ð
 #ˆÕ˜UˆÕð 1ùÜò ó Ø"ˆÕûð	üs;   ‚B5�A1B ÂBÂB ÂB5ÂB Â	B2Â!B5Â-B2Â2B5c                 ó   — | j                   S )zˆCheck if the socket is connected.

        Return:
            bool: Returns `True` if the socket is connected to MySQL server.
        )rª   rN   s    r&   Úis_connectedzMySQLSocket.is_connectedG  s   € ð ×!Ñ!Ð!r(   Útimeoutc                 ó   — || _         y)zSet the connection timeout.N)r§   )r3   r¸   s     r&   Úset_connection_timeoutz"MySQLSocket.set_connection_timeoutO  s
   € à#*ˆÕ r(   c                 ó"   — t        «       | _        y)zIEnable network layer where transactions are made with compressed packets.N)r‚   r©   rN   s    r&   Úswitch_to_compressed_modez%MySQLSocket.switch_to_compressed_modeS  s   € ä1Ó3ˆ�r(   Ússl_contextc              ƒ   óð   K  — | j                   €J ‚| j                   j                  j                  d«      }|j                  dk(  rt	        d«      ‚| j                   j                  |«      ƒ d{  –—†  y7 Œ­w)a?  Upgrade an existing stream-based connection to TLS.

        The `start_tls()` method from `asyncio.streams.StreamWriter` is only available
        in Python 3.11. This method is used as a workaround.

        The MySQL TLS negotiation happens in the middle of the TCP connection.
        Therefore, passing a socket to open connection will cause it to negotiate
        TLS on an existing connection.

        Args:
            ssl_context: The SSL Context to be used.

        Raises:
            RuntimeError: If the transport does not expose the socket instance.
        NÚsocketr   z,SSL is not supported when using Unix sockets)r¦   r±   Úget_extra_infoÚfamilyr   Ú	start_tls)r3   r½   r¿   s      r&   Úswitch_to_sslzMySQLSocket.switch_to_sslW  sb   è ø€ ð" �|‰|Ð'Ð'Ð'à—‘×'Ñ'×6Ñ6°xÓ@ˆØ�=‰=˜AÒÜ"Ð#QÓRÐRà�l‰l×$Ñ$ [Ó1×1Ò1ús   ‚A,A6Á.A4Á/A6r-   r.   r/   r0   c              ƒ   óŠ   K  — | j                   j                  | j                  | j                  ||||¬«      ƒ d{  –—†  y7 Œ­w)z!Send packets to the MySQL server.)r.   r/   r0   N)r©   r4   r¦   r,   )r3   r-   r.   r/   r0   s        r&   r4   zMySQLSocket.writep  sC   è ø€ ð �o‰o×#Ñ#Ø�L‰LØ�L‰LØØ'Ø%=Ø'ð $ó 
÷ 	
ò 	
ús   ‚9A»A¼Ar8   c              ƒ   ó€   K  — | j                   j                  | j                  | j                  |«      ƒ d{  –—† S 7 Œ­w)z#Read packets from the MySQL server.N)r©   r:   r¥   r,   )r3   r8   s     r&   r:   zMySQLSocket.read�  s-   è ø€ à—_‘_×)Ñ)¨$¯,©,¸¿¹ÀlÓS×SÐSÐSús   ‚5>·<¸>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«      ‚	 |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}t3        d«      |‚d}~wt&        t4        t        j6                  t        j(                  f$ r}t        t9        |«      «      |‚d}~ww xY w)zBuild a SSLContext.Ni   rh   z&Python installation has no SSL supportT)Úreverser   r   r   r   r   zInvalid CA Certificate: zInvalid Certificate/Key: ú:)r¥   r   ÚsslÚRuntimeErrorÚ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_locationsrj   ÚSSLErrorÚload_cert_chainÚset_ciphersr™   Ú	NameErrorr   ÚNotImplementedErrorÚCertificateErrorr$   )r3   rÆ   rÇ   rÈ   rÉ   rÊ   rË   rÌ   Útls_versionÚssl_protocolÚcontextr   s               r&   Úbuild_ssl_contextzMySQLSocket.build_ssl_context…  s%  € ð &*ˆà�|Š|Ü  tÔ,Ð,äˆ;ÜÐGÓHÐHð5	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 Å8(H Æ!GÆ:G	Ç	GÇH ÇG>Ç*G9Ç9G>Ç>H È	I È
HÈ0I ÉIÉI r   r;   r<   )r=   r>   r?   r@   rO   Úpropertyr$   r,   r
   r   r   rµ   Úboolr·   rB   rº   r¼   rÐ   rÔ   rÃ   rA   r   r4   rE   r:   r   rê   r2   r(   r&   r£   r£     sŒ  „ ñó	)ð ð˜ò ó ðð ð¨cð °dò ó ðó#ð"˜dó "ð+¨cð +°dó +ó4ð2¨s¯~©~ð 2À$ó 2ð8 (,Ø26Ø'+ñ
àð
ð   ‘}ð
ð #+¨3¡-ð	
ð
   ‘}ð
ð 
ó
ñ"T x°¡}ð TÀ	ó Tð !%Ø"&Ø!%Ø*/Ø.3Ø,.Ø13ñH4à˜‘ðH4ð ˜3‘-ðH4ð ˜#‘ð	H4ð
 " $™ðH4ð & d™^ðH4ð ˜t C™yÑ)ðH4ð $ D¨¡IÑ.ðH4ð 
�‰ôH4r(   r£   c                   óD   ‡ — e Zd ZdZ	 d
dededefˆ fd„Zdeddfd	„Z	ˆ xZ
S )r   z�MySQL socket class using TCP/IP.

    Args:
        host: MySQL host name.
        port: MySQL port.
        force_ipv6: Force IPv6 usage.
    ÚhostÚportÚ
force_ipv6c                 ód   •— t         ‰| �  «        || _        || _        || _        |› d|› �| _        y )NrÏ   )r„   rO   Ú_hostÚ_portÚ_force_ipv6r¨   )r3   rî   rï   rð   r‡   s       €r&   rO   zMySQLTcpSocket.__init__Ù  s8   ø€ ô 	‰ÑÔØˆŒ
ØˆŒ
Ø!+ˆÔØ $˜v Q t fÐ-ˆ�r(   r¬   r    Nc              ‹   óŒ   K  — t        d| j                  | j                  dœ|¤Žƒ d{  –—† \  | _        | _        d| _        y7 Œ­w)zOpen TCP/IP connection.)rî   rï   NTr2   )r   rò   ró   r¥   r¦   rª   r®   s     r&   r   zMySQLTcpSocket.open_connectionâ  sG   è ø€ ä+:ð ,
Ø—‘ $§*¡*ñ,
Ø06ñ,
÷ &
Ñ"ˆŒ�d”lð "ˆÕð&
ús   ‚&A¨A©A)z	127.0.0.1iê  F)r=   r>   r?   r@   r$   rB   rì   rO   r   r   r    r¡   s   @r&   r   r   Ð  s?   ø„ ñð MRñ.Øð.Ø-0ð.ØEIõ.ð"¨cð "°d÷ "r(   c                   ó:   ‡ — e Zd ZdZddefˆ fd„Zdeddfd„Zˆ xZS )	r   zbMySQL socket class using UNIX sockets.

    Args:
        unix_socket: UNIX socket file path.
    Úunix_socketc                 ó0   •— t         ‰| �  «        || _        y r<   )r„   rO   r¨   )r3   r÷   r‡   s     €r&   rO   zMySQLUnixSocket.__init__ñ  s   ø€ Ü‰ÑÔØ(ˆ�r(   r¬   r    Nc              ‹   óŠ   K  — t        j                  dd| j                  i|¤Žƒ d{  –—† \  | _        | _        d| _        y7 Œ­w)zOpen UNIX socket connection.ÚpathNTr2   )rC   Úopen_unix_connectionr¨   r¥   r¦   rª   r®   s     r&   r   zMySQLUnixSocket.open_connectionõ  sM   è ø€ ô
 ×.Ñ.ñ 
Ø—‘ð
Ø"(ñ
÷ 
ñ	
ØŒLØŒLð "ˆÕð
ús   ‚%A§A¨A)z/tmp/mysql.sock)	r=   r>   r?   r@   r$   rO   r   r   r    r¡   s   @r&   r   r   ê  s'   ø„ ññ) Cõ )ð"¨cð "°d÷ "r(   )/r@   Ú__all__rC   rY   r•   rÐ   ÚPROTOCOL_TLSv1ÚPROTOCOL_TLSv1_1ÚPROTOCOL_TLSv1_2ÚPROTOCOL_TLSrÓ   ÚImportErrorÚabcr	   r
   Úcollectionsr   Útypingr   r   r   r   r   Úerrorsr   r   r   r   r   r   Únetworkr   r   r   r   Úutilsr   r   rj   r$   r'   r*   rG   r‚   r£   r   r   r2   r(   r&   ú<module>r     sÿ   ðñ> Mð Ð.Ð
/€ã Û Û ð
Ûð ×#Ñ#Ø×'Ñ'Ø×'Ñ'Ø×#Ñ#ñ	€L÷ $Ý ß 4Õ 4÷÷ ÷ó ÷ 1ðH�Wð H ó HôQ�Cô QôhF˜ô FôRlÐ0ô lô^p4�#ô p4ôf"�[ô "ô4"�kõ "øðs ò Ø
‚Cðús   ”3C ÃCÃC