§
    >Ä³g±n  ã                   ó¾  — 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
n# e$ r dZY nw xY w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.dS )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                 óP   — | j         st          | ¦  «        n| j         › d| j        › �S )z`Reformat the IOError error message.

    This function reformats the IOError error message.
    ú )ÚerrnoÚstrÚstrerror)r   s    úY/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/mysql/connector/aio/network.pyÚ_strioerrorr'   I   s-   € ð
 œ9ÐG�3ˆs‰8Œ8ˆ8¨S¬YÐ*GÐ*G¸¼Ð*GÐ*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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ÚwriterÚaddressÚpayloadÚpacket_numberÚcompressed_packet_numberÚwrite_timeoutr    c              ƒ   ó
   K  — 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.
            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   ó
   è è € € € r(   ÚreaderÚread_timeoutc              ƒ   ó
   K  — dS )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   r6   r,   r7   s       r&   ÚreadzNetworkBroker.read‰   r5   r(   ©NNN©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r$   Úbytesr   Úintr4   ÚasyncioÚStreamReaderÚ	bytearrayr9   r2   r(   r&   r*   r*   Q   sõ   € € € € € ðð ð. ð (,Ø26Ø'+ðð àðð ðð ð	ð
   ”}ðð #+¨3¤-ðð   ”}ðð 
ðð ð ñ „^ðð> ð
 '+ð	ð àÔ$ðð ðð ˜s”mð	ð
 
ðð ð ñ „^ðð ð r(   r*   c                   ó6  — 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dS )ÚNetworkBrokerPlainú,Broker class for MySQL socket communication.r    Nc                 ó   — d| _         d S ©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)rO   ÚpllÚseqids      r&   Ú
get_headerzNetworkBrokerPlain.get_header«   sb   € õ ˆs‰8Œ8Õ*Ò*Ð*ÝÐRÑSÔSÐSõ ŒM˜$  A a C¤¨7Ñ 2Ñ3Ô3°AÔ6Ø�ŒFð ˆð
 �EˆzÐr(   Únext_idc                 óZ   — |€| xj         dz  c_         n|| _         | xj         dz  c_         dS ©z:Set the given packet id, if any, else increment packet id.Nr   é   rK   ©r3   r]   s     r&   Ú_set_next_pktnrz"NetworkBrokerPlain._set_next_pktnr¸   s4   € àˆ?ØˆKŒK˜1ÑˆKŒKˆKà!ˆDŒKØˆŒ�sÑˆŒˆˆr(   r+   r,   c              ƒ   ó  K  — 	 |                      |¦  «         |                     ¦   «         ƒ d{V —† dS # 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.Né  ©r#   ÚvaluesiÖ  ©r#   )r4   ÚdrainÚIOErrorr   r'   ÚAttributeError)r3   r+   r,   rO   r   s        r&   Ú
_write_pktzNetworkBrokerPlain._write_pktÀ   s¹   è è € ð	8Ø�LŠL˜ÑÔÐØ—,’,‘.”.Ð Ð Ð Ð Ð Ð Ð Ð Ð øÝð 	ð 	ð 	Ý"Ø G­[¸Ñ-=Ô-=Ð#>ðñ ô àðøøøøõ ð 	8ð 	8ð 	8Ý"¨Ð.Ñ.Ô.°CÐ7øøøøð	8øøøs    „/5 µ
B¿!A Á BÁ-A>Á>Br   r6   Úsizer7   c              ƒ   óˆ  K  — 	 t          d¦  «        }t          |¦  «        |k     rht          j        |                     |t          |¦  «        z
  ¦  «        |¦  «        ƒ d{V —†}|st          d¬¦  «        ‚||z  }t          |¦  «        |k     °h|S # t          j        t          j        f$ r}t          d¬¦  «        |‚d}~ww xY w)z(Read `size` bytes from the comm channel.r(   NiÝ  rg   éÐ  )	rD   rV   rB   Úwait_forr9   r   ÚCancelledErrorÚTimeoutErrorr   )r3   r6   rl   r7   rO   Úchunkr   s          r&   Ú_read_chunkzNetworkBrokerPlain._read_chunkÑ   sé   è è € ð	8Ý˜C‘.”.ˆCÝ�c‘(”(˜T’/�/Ý%Ô.Ø—K’K ¥s¨3¡x¤x¡Ñ0Ô0°,ñô ð ð ð ð ð ð �ð ð 5Ý(¨tÐ4Ñ4Ô4Ð4Ø�u‘�õ �c‘(”(˜T’/�/ð ˆJøÝÔ&­Ô(<Ð=ð 	8ð 	8ð 	8Ý"¨Ð.Ñ.Ô.°CÐ7øøøøð	8øøøs   „BB ÂCÂ+B<Â<Cr-   r.   r/   r0   c              ƒ   óê  K  — |                       |¦  «         d}	 t          t          |¦  «        t          z  ¦  «        D ]~}t	          j        |                      ||dt          j        d| j	        ¦  «        z   |||t          z   …         z   ¦  «        |¦  «        ƒ d{V —† |                       ¦   «          |t          z  }Œt	          j        |                      ||t          j        dt          |¦  «        |z
  ¦  «        dd…         t          j        d| j	        ¦  «        z   ||d…         z   ¦  «        |¦  «        ƒ d{V —† dS # t          j
        t          j        f$ r}	t          d¬¦  «        |	‚d}	~	ww xY 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   ó   ÿÿÿú<BNrS   rT   rn   rg   )rb   ÚrangerV   r   rB   ro   rk   rX   ÚpackrL   rp   rq   r   )
r3   r+   r,   r-   r.   r/   r0   ÚoffsetÚ_r   s
             r&   r4   zNetworkBrokerPlain.writeå   sÏ  è è € ð 	×Ò˜]Ñ+Ô+Ð+ð ˆð	9Ý�3˜w™<œ<Õ+=Ñ=Ñ>Ô>ð -ð -�åÔ&Ø—O’OØØØ#Ý œ+ d¨D¬KÑ8Ô8ñ9à! &¨6Õ4FÑ+FÐ"FÔGñHñô ð "ñ	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð ×$Ò$Ñ&Ô&Ð&ØÕ,Ñ,��ÝÔ"Ø—’ØØÝ”K ¥c¨'¡l¤l°VÑ&;Ñ<Ô<¸Q¸q¸SÔAÝ”k $¨¬Ñ4Ô4ñ5à˜f˜g˜gÔ&ñ'ñô ð ñ	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øõ Ô&­Ô(<Ð=ð 	9ð 	9ð 	9Ý#¨$Ð/Ñ/Ô/°SÐ8øøøøð	9øøøs   ›D$E ÅE2ÅE-Å-E2c              ƒ   ó,  K  — 	 |                       |t          |¦  «        ƒ d{V —†}|                      |¦  «        \  }| _        ||                       |||¦  «        ƒ d{V —†z   S # t          $ r&}t          d|t          |¦  «        f¬¦  «        |‚d}~ww xY w)z+Receive `one` packet from the MySQL server.Nrd   re   )rs   r   r\   rL   ri   r   r'   )r3   r6   r,   r7   ÚheaderÚpayload_lenr   s          r&   r9   zNetworkBrokerPlain.read  sË   è è € ð	à×+Ò+¨FÕ4HÈ,ÑWÔWÐWÐWÐWÐWÐWÐWˆFð (,§¢°vÑ'>Ô'>Ñ$ˆK˜œð  $×"2Ò"2°6¸;ÈÑ"UÔ"UÐUÐUÐUÐUÐUÐUÑUÐUøÝð 	ð 	ð 	Ý"Ø G­[¸Ñ-=Ô-=Ð#>ðñ ô àðøøøøð	øøøs   „AA# Á#
BÁ-!BÂB©r    Nr;   )r   Nr:   )r<   r=   r>   r?   rN   Ústaticmethodr@   r   rA   r\   r   rb   r   r$   rk   rB   rC   rD   rs   r4   r9   r2   r(   r&   rF   rF   ¥   s×  € € € € € Ø6Ð6ðð ð ð ð ð
˜ð 
 %¨¨S¨¤/ð 
ð 
ð 
ñ „\ð
ðð  x°¤}ð Àð ð ð ð ð8àð8ð ð8ð ð	8ð
 
ð8ð 8ð 8ð 8ð( Ø&*ð	8ð 8àÔ$ð8ð ð8ð ˜s”mð	8ð
 
ð8ð 8ð 8ð 8ð2 (,Ø26Ø'+ð-9ð -9àð-9ð ð-9ð ð	-9ð
   ”}ð-9ð #+¨3¤-ð-9ð   ”}ð-9ð 
ð-9ð -9ð -9ð -9ðf '+ð	ð àÔ$ðð ðð ˜s”mð	ð
 
ðð ð ð ð ð r(   rF   c                   ó€  ‡ — 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 )ÚNetworkBrokerCompressedrG   r    Nc                 ó|   •— t          ¦   «                              ¦   «          d| _        t          ¦   «         | _        d S rI   )ÚsuperrN   Ú_compressed_pktnrr   Ú_queue_read)r3   Ú	__class__s    €r&   rN   z NetworkBrokerCompressed.__init__-  s3   ø€ Ý‰Œ×ÒÑÔÐØ!#ˆÔÝ-2©W¬WˆÔÐÐr(   r-   Úpktnrc                 ó¾  — d}g }t          t          | ¦  «        t          z  ¦  «        D ]R}|                     dt	          j        d|¦  «        z   | ||t          z   …         z   ¦  «         |dz   dz  }|t          z  }ŒS|                     t	          j        dt          | ¦  «        |z
  ¦  «        dd…         t	          j        d|¦  «        z   | |d…         z   ¦  «         |S )	z2Prepare a payload for sending to the MySQL server.r   ru   rv   r   r`   rS   rT   N)rw   rV   r   ÚappendrX   rx   )r-   r‡   ry   Úpktsrz   s        r&   Ú_prepare_packetsz(NetworkBrokerCompressed._prepare_packets2  sû   € ð ˆØˆõ
 •s˜7‘|”|Õ'9Ñ9Ñ:Ô:ð 	)ð 	)ˆAà�KŠKØÝ”+˜d EÑ*Ô*ñ+à˜& 6Õ,>Ñ#>Ð>Ô?ñ@ñô ð ð
 ˜Q‘Y #Ñ%ˆEØÕ(Ñ(ˆFˆFØ�ŠÝŒK˜�c '™lœl¨VÑ3Ñ4Ô4°Q°q°SÔ9ÝŒk˜$ Ñ&Ô&ñ'à�f�g�gÔññ	
ô 	
ð 	
ð
 ˆr(   rO   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 )rQ   rR   rS   r   rT   rU   é   é   )rV   r   rW   rX   rY   )rO   Úcompressed_pllr[   Úuncompressed_plls       r&   r\   z"NetworkBrokerCompressed.get_headerK  s‰   € õ ˆs‰8Œ8Õ5Ò5Ð5ÝÐRÑSÔSÐSõ ŒM˜$  A a C¤¨7Ñ 2Ñ3Ô3°AÔ6Ø�ŒFÝŒM˜$  A a C¤¨7Ñ 2Ñ3Ô3°AÔ6ð  0˜ˆð ˜uÐ&6Ð6Ð6r(   r]   c                 óZ   — |€| xj         dz  c_         n|| _         | xj         dz  c_         dS r_   )r„   ra   s     r&   Ú_set_next_compressed_pktnrz2NetworkBrokerCompressed._set_next_compressed_pktnrY  s@   € àˆ?ØÐ"Ô" aÑ'Ð"Ô"Ð"à%,ˆDÔ"ØÐÔ #Ñ%ÐÔÐÐr(   r+   r,   c              ƒ   óh  •K  — t          j        |¦  «        }t          j        dt	          |¦  «        ¦  «        dd…         t          j        d| j        ¦  «        z   t          j        dt	          |¦  «        ¦  «        dd…         z   |z   }t          ¦   «                              |||¦  «        ƒ d{V —†S )z1Compress packet and write it to the comm channel.rS   r   rT   rv   N)ÚzlibÚcompressrX   rx   rV   r„   rƒ   rk   )r3   r+   r,   rO   Úcompressed_pktr†   s        €r&   rk   z"NetworkBrokerCompressed._write_pkta  s±   øè è € õ œ sÑ+Ô+ˆåŒK˜�c .Ñ1Ô1Ñ2Ô2°1°Q°3Ô7ÝŒk˜$ Ô 6Ñ7Ô7ñ8åŒk˜$¥ C¡¤Ñ)Ô)¨!¨A¨#Ô.ñ/ð ñð 	õ ‘W”W×'Ò'¨°¸Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=r(   r.   r/   r0   c              ƒ   óÖ  •K  — |                       |¦  «         |                      |¦  «         	 t          d¦  «                             |                      || j        ¦  «        ¦  «        }t          |¦  «        t          t          z
  k    rÁd}t          t          |¦  «        t          z  ¦  «        D ]`}	t          j        |                      |||||t          z   …         ¦  «        |¦  «        ƒ d{V —† |                      ¦   «          |t          z  }Œat          j        |                      ||||d…         ¦  «        |¦  «        ƒ d{V —† dS t          |¦  «        t          k    r2t          j        |                      |||¦  «        |¦  «        ƒ d{V —† dS t          j        t          ¦   «                              ||t          j        dt          |¦  «        ¦  «        dd…         t          j        d| j        ¦  «        z   t          j        dd¦  «        dd…         z   |z   ¦  «        |¦  «        ƒ d{V —† dS # t          j        t          j        f$ r}
t)          d¬¦  «        |
‚d}
~
ww xY 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   NrS   rT   rv   rn   rg   )rb   r’   rD   Újoinr‹   rL   rV   r   r   rw   rB   ro   rk   r   rƒ   rX   rx   r„   rp   rq   r   )r3   r+   r,   r-   r.   r/   r0   Úpayload_prepry   rz   r   r†   s              €r&   r4   zNetworkBrokerCompressed.writeq  só  øè è € ð 	×Ò˜]Ñ+Ô+Ð+Ø×'Ò'Ð(@ÑAÔAÐAð6	9Ý$ S™>œ>×.Ò.Ø×%Ò% g¨t¬{Ñ;Ô;ñô ˆLõ �7‰|Œ|Õ1Õ4HÑHÒHÐHð �õ �s <Ñ0Ô0Õ4FÑFÑGÔGð 
1ð 
1�AÝ!Ô*ØŸšØ"Ø#Ø(¨°&Õ;MÑ2MÐ)MÔNñô ð
 &ñô ð ð ð ð ð ð ð ð ×3Ò3Ñ5Ô5Ð5ØÕ0Ñ0�F�FÝÔ&Ø—O’O F¨G°\À&À'À'Ô5JÑKÔKØ!ñô ð ð ð ð ð ð ð ð ð õ �w‘<”<Õ"5Ò5Ð5å!Ô*ØŸš¨°¸ÑFÔFÈñô ð ð ð ð ð ð ð ð ð õ
 "Ô*Ý™œ×*Ò*Ø"Ø#Ý"œK¨­c°,Ñ.?Ô.?Ñ@Ô@ÀÀ1ÀÔEÝ$œk¨$°Ô0FÑGÔGñHå$œk¨$°Ñ2Ô2°1°Q°3Ô7ñ8ð +ñ+ñô ð &ñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
øõ Ô&­Ô(<Ð=ð 	9ð 	9ð 	9Ý#¨$Ð/Ñ/Ô/°SÐ8øøøøð	9øøøs&   ¯DH7 ÅAH7 ÆB H7 È7I(ÉI#É#I(r6   r�   r7   c           	   ƒ   ó.  •K  — t          t          j        t          ¦   «                              |||¦  «        ƒ d{V —†¦  «        ¦  «        }d}|t          |¦  «        k     �r3t          j        d|||t          z   dz
  …         dz   ¦  «        d         }t          |z   t          |¦  «        |z
  k    r”t          ¦   «                              |t          |¦  «        ƒ d{V —†}|  
                    |¦  «        \  }| _        }t          ¦   «                              |||¦  «        ƒ d{V —†}	||dk    r|	nt          j        |	¦  «        z  }| j                             |||t          z   |z   …         ¦  «         |t          |z   z  }|t          |¦  «        k     �°1dS dS )z&Handle reading of a compressed packet.Nr   rS   r   rU   )rD   r”   Ú
decompressrƒ   rs   rV   rX   rY   r   r   r\   r„   r…   r‰   )r3   r6   r�   r7   rO   ry   rZ   r|   r�   r–   r†   s             €r&   Ú_read_compressed_pktz,NetworkBrokerCompressed._read_compressed_pktº  sé  øè è € õ ÝŒOÝ‘g”g×)Ò)¨&°.À,ÑOÔOÐOÐOÐOÐOÐOÐOñô ñ
ô 
ˆð
 ˆØ•s˜3‘x”xÒÑå”-Ø�c˜& 6Õ,@Ñ#@À1Ñ#DÐDÔEÈÑOñô àôˆCõ $ cÑ)­C°©H¬H°vÑ,=Ò=Ð=õ  %™wœw×2Ò2ØÕ;¸\ñ ô  ð ð ð ð ð ð �ð —O’O FÑ+Ô+ñ	Ø"ØÔ*Ø$å',¡w¤w×':Ò':Ø˜N¨Lñ(ô (ð "ð "ð "ð "ð "ð "�ð à'¨1Ò,Ð,ð #�Nåœ¨Ñ8Ô8ñ�ð Ô×#Ò# C¨°Õ:NÑ1NÐQTÑ1TÐ(TÔ$UÑVÔVÐVØÕ*¨SÑ0Ñ0ˆFð? •s˜3‘x”xÒÑÐÐÐÐr(   c              ƒ   óD  •K  — | j         sæ	 t          ¦   «                              |t          |¦  «        ƒ d{V —†}|                      |¦  «        \  }| _        }|dk    rB| j                              t          ¦   «                              |||¦  «        ƒ d{V —†¦  «         n|                      |||¦  «        ƒ d{V —† n3# 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.
        Nr   rd   re   rT   )r…   rƒ   rs   r   r\   r„   r‰   rœ   ri   r   r'   ÚpopleftrL   )
r3   r6   r,   r7   r|   r�   r�   r   rO   r†   s
            €r&   r9   zNetworkBrokerCompressed.readé  s•  øè è € ð Ôð 	ðå$™wœw×2Ò2ØÕ;¸\ñ ô  ð ð ð ð ð ð �ð —O’O FÑ+Ô+ñ	Ø"ØÔ*Ø$ð $ qÒ(Ð(àÔ$×+Ò+Ý#™gœg×1Ò1°&¸.È,ÑWÔWÐWÐWÐWÐWÐWÐWñô ð ð ð
 ×3Ò3Ø °ñô ð ð ð ð ð ð ð øøõ ð ð ð Ý&Ø¨µ¸SÑ1AÔ1AÐ'Bðñ ô àðøøøøðøøøð
 Ôð 	Ø�4àÔ×&Ò&Ñ(Ô(ˆØ˜!”fˆŒàˆ
s   ŒB1B> Â>
C.Ã!C)Ã)C.r~   r;   r:   )r<   r=   r>   r?   rN   r   r@   rA   r   r‹   r   r\   r   r’   r   r$   rk   r4   rB   rC   rœ   rD   r9   Ú__classcell__©r†   s   @r&   r�   r�   *  s\  ø€ € € € € Ø6Ð6ð5ð 5ð 5ð 5ð 5ð 5ð
 ð %ð °ð ¸¸U¼ð ð ð ñ „\ðð0 ð7˜ð 7 %¨¨S°#¨Ô"6ð 7ð 7ð 7ñ „\ð7ð&ð &°(¸3´-ð &È4ð &ð &ð &ð &ð>àð>ð ð>ð ð	>ð
 
ð>ð >ð >ð >ð >ð >ð* (,Ø26Ø'+ðG9ð G9àðG9ð ðG9ð ð	G9ð
   ”}ðG9ð #+¨3¤-ðG9ð   ”}ðG9ð 
ðG9ð G9ð G9ð G9ð G9ð G9ðZ '+ð	-1ð -1àÔ$ð-1ð ð-1ð ˜s”mð	-1ð
 
ð-1ð -1ð -1ð -1ð -1ð -1ðf '+ð	-ð -àÔ$ð-ð ð-ð ˜s”mð	-ð
 
ð-ð -ð -ð -ð -ð -ð -ð -ð -ð -r(   r�   c                   ó°  — 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dS )"ÚMySQLSocketz�MySQL socket communication interface.

    Examples:
        Subclasses: network.MySQLTCPSocket and network.MySQLUnixSocket.
    r    Nc                 ór   — d| _         d| _        d| _        d| _        t	          ¦   «         | _        d| _        dS )zsNetwork layer where transactions are made with plain (uncompressed) packets
        is enabled by default.
        NF)Ú_readerÚ_writerÚ_connection_timeoutÚ_addressrF   Ú
_netbrokerÚ_is_connectedrM   s    r&   rN   zMySQLSocket.__init__   s<   € ð 8<ˆŒØ/3ˆŒØ26ˆÔ Ø'+ˆŒÝ);Ñ)=Ô)=ˆŒØ#(ˆÔÐÐr(   c                 ó   — | j         S )zSocket location.)r§   rM   s    r&   r,   zMySQLSocket.address+  s   € ð Œ}Ðr(   Úkwargsc              ‹   ó
   K  — dS )zOpen the socket.Nr2   ©r3   r«   s     r&   r   zMySQLSocket.open_connection0  r5   r(   c              ƒ   ó  K  — | j         r{	 | j                              ¦   «          | j         j        �| j         j                             ¦   «          | j                              ¦   «         ƒ d{V —† n# t
          $ r
}Y d}~nd}~ww xY wd| _        dS )zClose the connection.NF)r¥   ÚcloseÚ	transportÚabortÚwait_closedÚ	Exceptionr©   )r3   rz   s     r&   Úclose_connectionzMySQLSocket.close_connection4  s°   è è € àŒ<ð 
	ð	Ø”×"Ò"Ñ$Ô$Ð$à”<Ô)Ð5Ø”LÔ*×0Ò0Ñ2Ô2Ð2Ø”l×.Ò.Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0øÝð ð ð ð ����øøøøðøøøð #ˆÔÐÐs   ‹A"A. Á.
BÁ=Bc                 ó   — | j         S )zˆCheck if the socket is connected.

        Return:
            bool: Returns `True` if the socket is connected to MySQL server.
        )r©   rM   s    r&   Úis_connectedzMySQLSocket.is_connectedC  s   € ð Ô!Ð!r(   Útimeoutc                 ó   — || _         dS )zSet the connection timeout.N)r¦   )r3   r·   s     r&   Úset_connection_timeoutz"MySQLSocket.set_connection_timeoutK  s   € à#*ˆÔ Ð Ð r(   c                 ó,   — t          ¦   «         | _        dS )zIEnable network layer where transactions are made with compressed packets.N)r�   r¨   rM   s    r&   Úswitch_to_compressed_modez%MySQLSocket.switch_to_compressed_modeO  s   € å1Ñ3Ô3ˆŒˆˆr(   Ússl_contextc              ƒ   óÎ   K  — | j         €J ‚| j         j                             d¦  «        }|j        dk    rt	          d¦  «        ‚| j                              |¦  «        ƒ d{V —† dS )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_sslS  sx   è è € ð" Œ|Ð'Ð'Ð'à”Ô'×6Ò6°xÑ@Ô@ˆØŒ=˜AÒÐÝ"Ð#QÑRÔRÐRàŒl×$Ò$ [Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1r(   r-   r.   r/   r0   c              ƒ   ój   K  — | j                              | j        | j        ||||¬¦  «        ƒ d{V —† dS )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.writel  se   è è € ð Œo×#Ò#ØŒLØŒLØØ'Ø%=Ø'ð $ñ 
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r(   r7   c              ƒ   ó^   K  — | j                              | j        | j        |¦  «        ƒ d{V —†S )z#Read packets from the MySQL server.N)r¨   r9   r¤   r,   )r3   r7   s     r&   r9   zMySQLSocket.read}  s6   è è € à”_×)Ò)¨$¬,¸¼ÀlÑSÔSÐSÐSÐSÐSÐSÐSÐSr(   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 |                     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}t3          d¦  «        |‚d}~wt&          t4          t          j        t          j        f$ r"}t          t9          |¦  «        ¦  «        |‚d}~ww xY w)zBuild a SSLContext.Ni   rg   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_locationsri   Ú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ÐHð5	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Å)E<Å<FÆH ÆF ÆH ÆGÆ4GÇGÇ4H È
I'ÈHÈ*I'ÉI"É"I'r~   r:   r;   )r<   r=   r>   r?   rN   Úpropertyr$   r,   r
   r   r   r´   Úboolr¶   rA   r¹   r»   rÏ   rÓ   rÂ   r@   r   r4   rD   r9   r   ré   r2   r(   r&   r¢   r¢     sW  € € € € € ðð ð	)ð 	)ð 	)ð 	)ð ð˜ð ð ð ñ „Xðð ð¨cð °dð ð ð ñ „^ðð#ð #ð #ð #ð"˜dð "ð "ð "ð "ð+¨cð +°dð +ð +ð +ð +ð4ð 4ð 4ð 4ð2¨s¬~ð 2À$ð 2ð 2ð 2ð 2ð8 (,Ø26Ø'+ð
ð 
àð
ð   ”}ð
ð #+¨3¤-ð	
ð
   ”}ð
ð 
ð
ð 
ð 
ð 
ð"Tð T x°¤}ð TÀ	ð Tð Tð Tð Tð !%Ø"&Ø!%Ø*/Ø.3Ø,.Ø13ðH4ð H4à˜”ðH4ð ˜3”-ðH4ð ˜#”ð	H4ð
 " $œðH4ð & dœ^ðH4ð ˜t CœyÔ)ðH4ð $ D¨¤IÔ.ðH4ð 
ŒðH4ð H4ð H4ð H4ð 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.
    ú	127.0.0.1éê  FÚhostÚportÚ
force_ipv6c                 óŠ   •— t          ¦   «                              ¦   «          || _        || _        || _        |› d|› �| _        d S )NrÎ   )rƒ   rN   Ú_hostÚ_portÚ_force_ipv6r§   )r3   rï   rð   rñ   r†   s       €r&   rN   zMySQLTcpSocket.__init__Õ  sJ   ø€ õ 	‰Œ×ÒÑÔÐØˆŒ
ØˆŒ
Ø!+ˆÔØ $Ð-Ð- tÐ-Ð-ˆŒˆˆr(   r«   r    Nc              ‹   óp   K  — t          d| j        | j        dœ|¤Žƒ d{V —†\  | _        | _        d| _        dS )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ð "ˆÔÐÐr(   )rí   rî   F)r<   r=   r>   r?   r$   rA   rë   rN   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.
    ú/tmp/mysql.sockÚunix_socketc                 óV   •— t          ¦   «                              ¦   «          || _        d S r;   )rƒ   rN   r§   )r3   rù   r†   s     €r&   rN   zMySQLUnixSocket.__init__í  s$   ø€ Ý‰Œ×ÒÑÔÐØ(ˆŒˆˆr(   r«   r    Nc              ‹   ón   K  — t          j        dd| j        i|¤Žƒ d{V —†\  | _        | _        d| _        dS )zOpen UNIX socket connection.ÚpathNTr2   )rB   Úopen_unix_connectionr§   r¤   r¥   r©   r­   s     r&   r   zMySQLUnixSocket.open_connectionñ  sl   è è € õ
 Ô.ð 
ð 
Ø”ð
Ø"(ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ñ	
ØŒLØŒLð "ˆÔÐÐr(   )rø   )	r<   r=   r>   r?   r$   rN   r   r   rŸ   r    s   @r&   r   r   æ  su   ø€ € € € € ðð ð)ð ) Cð )ð )ð )ð )ð )ð )ð"¨cð "°dð "ð "ð "ð "ð "ð "ð "ð "r(   )/r?   Ú__all__rB   rX   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   ri   r$   r'   r*   rF   r�   r¢   r   r   r2   r(   r&   ú<module>r
     sá  ðð> MÐ Lð Ð.Ð
/€à €€€Ø €€€Ø €€€ð
Ø€J€J€Jð Ô#ØÔ'ØÔ'ØÔ#ð	ð €L€Løð ð ð ð Ø
€C€C€Cðøøøð $Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð 1Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0ðH�Wð H ð Hð Hð Hð HðQð Qð Qð Qð Q�Cñ Qô Qð QðhBð Bð Bð Bð B˜ñ Bô Bð BðJlð lð lð lð lÐ0ñ lô lð lð^p4ð p4ð p4ð p4ð p4�#ñ p4ô p4ð p4ðf"ð "ð "ð "ð "�[ñ "ô "ð "ð4"ð "ð "ð "ð "�kñ "ô "ð "ð "ð "s   ”4 ´>½>