ó
    ßÅŸg1v  ã                   óî  • S r SSKrSSKrSSKrSSKrSSKJrJr  SSKJ	r	  SSK
JrJrJrJrJrJr   SSKr\R$                  \R&                  \R(                  \R*                  S.r\" \S5      =(       a    \R0                  rS	S
KJrJrJrJrJ r J!r!J"r"  Sr#Sr$Sr%Sr&S\'S\(4S jr) " S S\5      r* " S S\*5      r+ " S S\+5      r, " S S\5      r- " S S\-5      r. " S S\-5      r/g! \ a    SrSr Nrf = f)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   • U R                   (       d  [        U 5      $ SU R                    SU R                   3$ )zXReformat the IOError error message.

This function reformats the IOError error message.
zErrno z: )ÚerrnoÚstrÚstrerror)r   s    ÚX/var/www/blue/EV-Temp_rev04/venv/lib/python3.13/site-packages/mysql/connector/network.pyÚ_strioerrorr#   J   s.   € ð
 Ÿ9Ÿ9Œ3ˆs‹8ÐN¨F°3·9±9°+¸RÀÇÁ¸~Ð*NÐNó    c                   ó    • \ rS rSrSr\  SS\R                  S\S\S\	\
   S\	\
   S	S4S
 jj5       r\S\R                  S\S	\4S j5       rSrg)ÚNetworkBrokeréR   a  Broker class interface.

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

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

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

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

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

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

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

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

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

Returns:
    packet: A packet from the MySQL server.

Raises:
    :class:`OperationalError`: If something goes wrong while receiving packets
                               from the MySQL server.
    :class:`InterfaceError`: If something goes wrong while receiving packets
                             from the MySQL server.
Nr.   )r/   r(   r)   s      r"   ÚrecvÚNetworkBroker.recv†   r2   r$   r.   ©NN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Úsocketr    Úbytesr	   Úintr0   Ú	bytearrayr4   Ú__static_attributes__r.   r$   r"   r&   r&   R   s–   † ñð. ð (,Ø26ñà�m‰mðð ðð ð	ð
   ‘}ðð #+¨3¡-ðð 
ôó ðð6 ð˜Ÿ™ð °ð ¸ó ó ór$   r&   c                   óü   • \ rS rSrSrSS jrSS jrS\R                  S\S	\	SS4S
 jr
SS\R                  S\S\4S jjr  SS\R                  S\S\	S\\   S\\   SS4S jjrS\R                  S\S\4S jrSrg)ÚNetworkBrokerPlainé™   ú,Broker class for MySQL socket communication.r   Nc                 ó   • SU l         g ©Néÿÿÿÿ©Ú_pktnr©r/   s    r"   Ú__init__ÚNetworkBrokerPlain.__init__œ   s	   € Øˆ�r$   c                 ó2   • U R                   S-   S-  U l         g©zIncrement packet id.r   é   NrH   rJ   s    r"   Ú_set_next_pktnrÚ"NetworkBrokerPlain._set_next_pktnrŸ   s   € à—{‘{ Q‘¨#Ñ-ˆ�r$   r(   r)   Úpktc                 óô   •  UR                  U5        g! [        R                  [        4 a  n[	        SS9UeSnAf[
         a  n[        SU[        U5      4S9UeSnAf[         a  n[        SS9UeSnAff = f)z!Write packet to the comm channel.éÐ  ©r   Né  ©r   ÚvaluesiÖ  )	Úsendallr<   ÚtimeoutÚTimeoutErrorr   ÚIOErrorr   r#   ÚAttributeError)r/   r(   r)   rR   r   s        r"   Ú	_send_pktÚNetworkBrokerPlain._send_pkt£   sy   € ð		8Ø�L‰L˜ÕøÜ—‘¤Ð-ó 	9Ü#¨$Ñ/°SÐ8ûÜó 	Ü"Ø G¬[¸Ó-=Ð#>ñàðûô ó 	8Ü"¨Ñ.°CÐ7ûð	8ús*   ‚ ”A7®
8¸A7ÁAÁA7Á(
A2Á2A7Úsizec                 ó®   • [        U5      n[        U5      nU(       a7  UR                  XB5      nUS:X  a  US:”  a	  [        SS9eXES nX%-  nU(       a  M7  U$ )z(Read `size` bytes from the comm channel.r   iÝ  rU   N)r?   Ú
memoryviewÚ	recv_intor   )r/   r(   r`   rR   Úpkt_viewÚreads         r"   Ú_recv_chunkÚNetworkBrokerPlain._recv_chunk°   s[   € ä˜‹oˆÜ˜c“?ˆÞØ—>‘> (Ó1ˆDØ�q‹y˜T A›XÜ$¨4Ñ0Ð0Ø �ˆHØ‰LˆD÷ ˆdð ˆ
r$   r*   r+   r,   c           
      ó  • Uc  U R                  5         OX@l        [        U5      [        :¼  a‚  Sn[	        [        U5      [        -  5       H]  nU R                  UUS[        R                  " SU R                  5      -   X6U[        -    -   5        U R                  5         U[        -  nM_     X6S nU R                  UU[        R                  " S[        U5      5      SS [        R                  " SU R                  5      -   U-   5        g)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é   )rP   rI   ÚlenÚMAX_PAYLOAD_LENGTHÚranger^   ÚstructÚpack)r/   r(   r)   r*   r+   r,   ÚoffsetÚ_s           r"   r0   ÚNetworkBrokerPlain.send¼   s÷   € ð Ñ Ø× Ñ Õ"à'ŒKô ˆw‹<Ô-Ó-ØˆFÜœ3˜w›<Ô+=Ñ=Ö>�à—‘ØØØ#Ü—k’k $¨¯©Ó4ñ5à vÔ0BÑ'BÐCñDôð ×$Ñ$Ô&ØÔ,Ñ,’ñ ?ð ˜gÐ&ˆGØ�‰ØØÜ�KŠK˜œc '›lÓ+¨A¨aÐ0Ü�kŠk˜$ §¡Ó,ñ-àñõ	
r$   c                 óV  •  U R                  U[        S9n[        R                  " SUSS S-   5      S   US   so@l        X0R                  XS9-   $ ! [
        R                  [        4 a  n[        SUR                  S9UeSnAf[         a  n[        S	U[        U5      4S
9UeSnAff = f)z+Receive `one` packet from the MySQL server.©r`   rk   r   rl   ó    rT   )r   ÚmsgNrV   rW   )rf   ÚPACKET_HEADER_LENGTHrp   ÚunpackrI   r<   rZ   r[   r   r!   r\   r   r#   )r/   r(   r)   ÚheaderÚpayload_lenr   s         r"   r4   ÚNetworkBrokerPlain.recvè   s»   € ð	à×%Ñ% dÔ1EÐ%ÐFˆFô —’˜d F¨1¨Q K°'Ñ$9Ó:¸1Ñ=Ø�q‘	ð %ˆKœð ×,Ñ,¨TÐ,ÐDÑDÐDøÜ—‘¤Ð-ó 	JÜ"¨°3·<±<Ñ@ÀcÐIûÜó 	Ü"Ø G¬[¸Ó-=Ð#>ñàðûð	ús$   ‚AA ÁB(Á+B Â B(ÂB#Â#B(rH   ©r   N)r   r6   )r7   r8   r9   r:   r;   rK   rP   r<   r    r=   r^   r>   r?   rf   r	   r0   r4   r@   r.   r$   r"   rB   rB   ™   sÄ   † Ù6ôô.ð8˜fŸm™mð 8°cð 8Àð 8È$ô 8ñ
 §¡ð 
°Sð 
Àõ 
ð" (,Ø26ñ*
à�m‰mð*
ð ð*
ð ð	*
ð
   ‘}ð*
ð #+¨3¡-ð*
ð 
õ*
ðX˜Ÿ™ð °ð ¸÷ r$   rB   c                   óH  ^ • \ rS rSrSrSU 4S jjr\S\S\S\	\   4S j5       r
SS	 jrS
\R                  S\S\SS4U 4S jjr  SS
\R                  S\S\S\\   S\\   SS4U 4S jjjrS
\R                  S\S\SS4U 4S jjrS
\R                  S\S\4U 4S jjrSrU =r$ )ÚNetworkBrokerCompressedéþ   rD   r   Nc                 óN   >• [         TU ]  5         SU l        [        5       U l        g rF   )ÚsuperrK   Ú_compressed_pktnrr   Ú_queue_read)r/   Ú	__class__s    €r"   rK   Ú NetworkBrokerCompressed.__init__  s    ø€ Ü‰ÑÔØ!#ˆÔÜ-2«WˆÕr$   r*   Úpktnrc                 ó¦  • / n[        U 5      [        :¼  an  Sn[        [        U 5      [        -  5       HI  nUR                  S[        R
                  " SU5      -   XU[        -    -   5        US-   S-  nU[        -  nMK     XS n UR                  [        R
                  " S[        U 5      5      SS [        R
                  " SU5      -   U -   5        U$ )	z2Prepare a payload for sending to the MySQL server.r   ri   rj   r   rO   Nrk   rl   )rm   rn   ro   Úappendrp   rq   )r*   rˆ   Úpktsrr   rs   s        r"   Ú_prepare_packetsÚ(NetworkBrokerCompressed._prepare_packets  sÔ   € ð ˆô ˆw‹<Ô-Ó-ØˆFÜœ3˜w›<Ô+=Ñ=Ö>�à—‘Ø#Ü—k’k $¨Ó.ñ/à vÔ0BÑ'BÐCñDôð
  ™ cÑ)�ØÔ,Ñ,’ñ ?ð ˜gÐ&ˆGØ�‰Ü�KŠK˜œc '›lÓ+¨A¨aÐ0´6·;²;¸tÀUÓ3KÑKÈgÑUô	
ð ˆr$   c                 ó2   • U R                   S-   S-  U l         grN   )r„   rJ   s    r"   Ú_set_next_compressed_pktnrÚ2NetworkBrokerCompressed._set_next_compressed_pktnr   s   € à"&×"8Ñ"8¸1Ñ"<ÀÑ!CˆÕr$   r(   r)   rR   c                 ó(  >• [         R                  " U5      n[        R                  " S[	        U5      5      SS [        R                  " SU R
                  5      -   [        R                  " S[	        U5      5      SS -   U-   n[        TU ]  XU5      $ )z1Compress packet and write it to the comm channel.rk   r   rl   rj   )ÚzlibÚcompressrp   rq   rm   r„   rƒ   r^   )r/   r(   r)   rR   Úcompressed_pktr†   s        €r"   r^   Ú!NetworkBrokerCompressed._send_pkt$  s…   ø€ äŸš sÓ+ˆä�KŠK˜œc .Ó1Ó2°1°QÐ7Ü�kŠk˜$ × 6Ñ 6Ó7ñ8ä�kŠk˜$¤ C£Ó)¨!¨AÐ.ñ/ð ñð 	ô ‰wÑ  °Ó4Ð4r$   r+   r,   c           
      ó  >• Uc  U R                  5         OX@l        Uc  U R                  5         OXPl        [	        S5      R                  U R                  X0R                  5      5      n[        U5      [        [        -
  :¼  am  Sn[        [        U5      [        -  5       H7  nU R                  XXgU[        -    5        U R                  5         U[        -  nM9     U R                  XXgS 5        g[        U5      [        :”  a  U R                  XU5        g[        T	U ]-  UU[        R                  " S[        U5      5      SS [        R                  " SU R                  5      -   [        R                  " SS5      SS -   U-   5        g)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   rk   rl   rj   )rP   rI   r�   r„   r?   ÚjoinrŒ   rm   rn   ry   ro   r^   ÚMIN_COMPRESS_LENGTHrƒ   rp   rq   )
r/   r(   r)   r*   r+   r,   Úpayload_preprr   rs   r†   s
            €r"   r0   ÚNetworkBrokerCompressed.send/  sb  ø€ ð Ñ Ø× Ñ Õ"à'ŒKØ#Ñ+Ø×+Ñ+Õ-à%=Ô"ä  “~×*Ñ*¨4×+@Ñ+@ÀÏ+É+Ó+VÓWˆÜˆw‹<Ô-Ô0DÑDÓDð ˆFô œ3˜|Ó,Ô0BÑBÖC�Ø—‘Ø <¸ÔBTÑ9TÐ#Uôð ×/Ñ/Ô1ØÔ,Ñ,’ñ Dð �N‰N˜4¨,°wÐ*?Õ@ô �7‹|Ô1Ó1à—‘˜t¨lÕ;ô ‘Ñ!ØØÜ—K’K ¤c¨,Ó&7Ó8¸¸1Ð=Ü—k’k $¨×(>Ñ(>Ó?ñ@ä—k’k $¨Ó*¨1¨QÐ/ñ0ð #ñ#õr$   Úcompressed_pllÚuncompressed_pllc                 óº  >• [         T	U ]  XS9nUS:X  a  UO[        [        R                  " U5      5      nSnU[        U5      :  Ga  [        R                  " SXVU[        -   S-
   S-   5      S   n[        U-   [        U5      U-
  :”  aŒ  [         T	U ]  U[        S9n[        R                  " SUSS S-   5      S   US   [        R                  " SUSS S-   5      S    snU l
        n[         T	U ]  XS9nUUS:X  a  UO[        R                  " U5      -  nU R                  R                  XVU[        -   U-    5        U[        U-   -  nU[        U5      :  a  GM  g	g	)
z&Handle reading of a compressed packet.rv   r   rk   r   rw   rl   r   r   N)rƒ   rf   r?   r’   Ú
decompressrm   rp   rz   ry   ÚCOMPRESSED_PACKET_HEADER_LENGTHr„   r…   rŠ   )
r/   r(   r›   rœ   r”   rR   rr   Úpllr{   r†   s
            €r"   Ú_recv_compressed_pktÚ,NetworkBrokerCompressed._recv_compressed_pktl  sŠ  ø€ ô ™Ñ,¨TÐ,ÐGˆð   1Ó$ñ äœ4Ÿ?š?¨>Ó:Ó;ð 	ð ˆØ”s˜3“xÔä—-’-Ø�c 6Ô,@Ñ#@À1Ñ#DÐEÈÑOóàñˆCô $ cÑ)¬C°«H°vÑ,=Ó=ô ™Ñ,¨TÔ8WÐ,ÐX�ô —M’M $¨¨q°¨°gÑ(=Ó>¸qÑAØ˜1‘IÜ—M’M $¨¨q°¨°gÑ(=Ó>¸qÑAðð	Ø"ØÔ*Ø$ô "'¡Ñ!4°TÐ!4Ð!O�ð à'¨1Ó,ñ #äŸš¨Ó8ñ�ð ×Ñ×#Ñ# C°Ô:NÑ1NÐQTÑ1TÐ$UÔVØÔ*¨SÑ0Ñ0ˆFð? ”s˜3“x×Ðr$   c                 ó  >• U R                   (       dq   [        TU ]	  U[        S9n[        R
                  " SUSS S-   5      S   US   [        R
                  " SUSS S-   5      S    snU l        nU R                  XU5        U R                   (       d  g
U R                   R                  5       nUS   U l        U$ ! [        R                  [        4 a  n[        SS	9UeS
nAf[         a  n[        SU[        U5      4S9UeS
nAff = f)zkReceive `one` or `several` packets from the MySQL server, enqueue them, and
return the packet at the head.
rv   rk   r   rl   rw   r   r   rT   rU   NrV   rW   )r…   rƒ   rf   rŸ   rp   rz   r„   r¡   r<   rZ   r[   r   r\   r   r#   ÚpopleftrI   )	r/   r(   r)   r{   r›   rœ   r   rR   r†   s	           €r"   r4   ÚNetworkBrokerCompressed.recvœ  s  ø€ ð ××ðä™Ñ,¨TÔ8WÐ,ÐX�ô —M’M $¨¨q°¨°gÑ(=Ó>¸qÑAØ˜1‘IÜ—M’M $¨¨q°¨°gÑ(=Ó>¸qÑAðð	Ø"ØÔ*Ø$ð ×)Ñ)¨$Ð@PÔQð ××Øà×Ñ×&Ñ&Ó(ˆØ˜!‘fˆŒàˆ
øô —N‘N¤LÐ1ó <Ü&¨TÑ2¸Ð;ûÜó Ü&Ø¨´¸SÓ1AÐ'Bñàðûðús$   ”A0B< Â<DÃ
C Ã DÃ-DÄD)r„   rI   r…   r~   r6   )r7   r8   r9   r:   r;   rK   Ústaticmethodr=   r>   r   rŒ   r�   r<   r    r^   r	   r0   r¡   r?   r4   r@   Ú__classcell__©r†   s   @r"   r€   r€   þ   s	  ø† Ù6÷5ð
 ð %ð °ð ¸¸U¹ó ó ðô2Dð	5˜fŸm™mð 	5°cð 	5Àð 	5È$÷ 	5ð  (,Ø26ñ;à�m‰mð;ð ð;ð ð	;ð
   ‘}ð;ð #+¨3¡-ð;ð 
÷;ð ;ðz.1Ø—M‘Mð.1Ø36ð.1ØJMð.1à	÷.1ð`!˜Ÿ™ð !°ð !¸÷ !õ !r$   r€   c                   óv  • \ rS rSrSrS!S jrS!S jrS!S jrS!S jrS!S	 jr	S
\
\   SS4S jrS\S\SS4S jr       S"S\
\   S\
\   S\
\   S\
\   S\
\   S\
\\      S\
\\      S\4S jjr   S#S\S\
\   S\
\   S\
\   SS4
S jjrS$S\
\   S\4S jjr\S!S j5       r\\S\4S j5       5       rS rg)%ÚMySQLSocketiÀ  zuMySQL socket communication interface.

Examples:
    Subclasses: network.MySQLTCPSocket and network.MySQLUnixSocket.
r   Nc                 óL   • SU l         SU l        SU l        [        5       U l        g)zcNetwork layer where transactions are made with plain (uncompressed) packets
is enabled by default.
N)r(   Ú_connection_timeoutÚserver_hostrB   Ú
_netbrokerrJ   s    r"   rK   ÚMySQLSocket.__init__Ç  s%   € ð
 .2ˆŒ	Ø26ˆÔ Ø*.ˆÔÜ);Ó)=ˆ�r$   c                 ó"   • [        5       U l        g)zIEnable network layer where transactions are made with compressed packets.N)r€   r®   rJ   s    r"   Úswitch_to_compressed_modeÚ%MySQLSocket.switch_to_compressed_modeÑ  s   € ä1Ó3ˆ�r$   c                 ó¸   •  U R                   R                  [        R                  5        U R                   R	                  5         g! [
        [        4 a     gf = f)z'Shut down the socket before closing it.N)r(   Úshutdownr<   Ú	SHUT_RDWRÚcloser]   ÚOSErrorrJ   s    r"   r´   ÚMySQLSocket.shutdownÕ  sD   € ð	Ø�I‰I×Ñœv×/Ñ/Ô0Ø�I‰I�O‰OÕøÜ¤Ð(ó 	Ùð	ús   ‚AA ÁAÁAc                 óf   •  U R                   R                  5         g! [        [        4 a     gf = f)zClose the socket.N)r(   r¶   r]   r·   rJ   s    r"   Úclose_connectionÚMySQLSocket.close_connectionÝ  s,   € ð	Ø�I‰I�O‰OÕøÜ¤Ð(ó 	Ùð	ús   ‚ �0¯0c                 ó$   • U R                  5         g ©N)r´   rJ   s    r"   Ú__del__ÚMySQLSocket.__del__ä  s   € Ø�‰�r$   rZ   c                 ój   • Xl         U R                  (       a  U R                  R                  U5        gg)zSet the connection timeout.N)r¬   r(   Ú
settimeout)r/   rZ   s     r"   Úset_connection_timeoutÚ"MySQLSocket.set_connection_timeoutç  s&   € à#*Ô Ø�9�9Ø�I‰I× Ñ  Õ)ð r$   Ússl_contextÚhostc                 ó"  • U R                   c   eU R                   R                  S:X  a  [        S5      e[        c  [	        S5      e UR                  U R                   US9U l         g! [         a  n[	        S5      UeSnAf[        R                  [        4 a%  n[        SU R                  [        U5      4S9UeSnAf[        R                   a  n[        [        U5      5      UeSnAf[         a  n[        [        U5      5      UeSnAff = f)a9  Upgrade an existing connection to TLS.

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

Returns:
    None.

Raises:
    ProgrammingError: If the transport does not expose the socket instance.
    NotSupportedError: If Python installation has no SSL support.
Nr   z,SSL is not supported when using Unix socketsú&Python installation has no SSL support)Úserver_hostnamerV   rW   )r(   Úfamilyr   Ússlr   Úwrap_socketÚ	NameErrorÚSSLErrorr\   r   r)   r#   ÚCertificateErrorr    ÚNotImplementedError)r/   rÄ   rÅ   r   s       r"   Úswitch_to_sslÚMySQLSocket.switch_to_sslí  sô   € ð �y‰yÑ$Ð$Ð$à�9‰9×Ñ˜qÓ Ü"Ð#QÓRÐRä‰;Ü#Ð$LÓMÐMð	4Ø#×/Ñ/°·	±	È4Ð/ÐPˆD�IøÜó 	WÜ#Ð$LÓMÐSVÐVûÜ—‘œgÐ&ó 	Ü Ø D§L¡L´+¸cÓ2BÐ#Cñàðûô ×#Ñ#ó 	4Ü ¤ S£Ó*°Ð3ûÜ"ó 	4Ü ¤ S£Ó*°Ð3ûð	4ús<   ÁA( Á(
DÁ2A>Á>DÂ B;Â;DÃC'Ã'DÃ4D	Ä	DÚssl_caÚssl_certÚssl_keyÚssl_verify_certÚssl_verify_identityÚtls_versionsÚtls_cipher_suitesc                 ó.  • SnU R                   (       d	  [        SS9e[        c  [        S5      eUc  / nUc  / n U(       aµ  UR	                  SS9  US   n[
        U   n	[        R                  " U	5      n
US:X  a{  S	U;  a#  U
=R                  [        R                  -  sl        S
U;  a#  U
=R                  [        R                  -  sl        SU;  a#  U
=R                  [        R                  -  sl        O[        R                  " 5       n
XZl        U(       a  [        R                  U
l        O2U(       a  [        R                  U
l        O[        R                   U
l        U
R#                  5         U(       a   U
R%                  U5        U(       a   U
R+                  X#5        U(       a&  US	:X  a   U
R-                  SR/                  U5      5        U
$ ! [&        [        R(                  4 a  n[        SU 35      UeSnAff = f! [&        [        R(                  4 a  n[        SU 35      UeSnAff = f! [0         a  n[        S5      UeSnAf[&        [2        [        R4                  [        R(                  4 a  n[        [7        U5      5      UeSnAff = f)aZ  Build a SSLContext.

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

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

Raises:
    NotSupportedError: Python installation has no SSL support.
    InterfaceError: Socket undefined or invalid ssl data.
Ni   rU   rÇ   T)Úreverser   r   r   r   r   zInvalid CA Certificate: zInvalid Certificate/Key: Ú:)r(   r   rÊ   r   ÚsortÚTLS_VERSIONSÚ
SSLContextÚoptionsÚOP_NO_TLSv1_2ÚOP_NO_TLSv1_1ÚOP_NO_TLSv1Úcreate_default_contextÚcheck_hostnameÚCERT_REQUIREDÚverify_modeÚCERT_OPTIONALÚ	CERT_NONEÚload_default_certsÚload_verify_locationsr\   rÍ   Úload_cert_chainÚset_ciphersr—   rÌ   rÏ   rÎ   r    )r/   rÒ   rÓ   rÔ   rÕ   rÖ   r×   rØ   Útls_versionÚssl_protocolÚcontextr   s               r"   Úbuild_ssl_contextÚMySQLSocket.build_ssl_context  s;  € ð8 &*ˆà�y�yÜ  tÑ,Ð,ä‰;Ü#Ð$LÓMÐMàÑØˆLàÑ$Ø "Ðð6	4ÞØ×!Ñ!¨$Ð!Ñ/Ø*¨1™o�Ü+¨KÑ8�ÜŸ.š.¨Ó6�à )Ó+Ø ¨Ó4ØŸš¬3×+<Ñ+<Ñ<�Ø ¨Ó4ØŸš¬3×+<Ñ+<Ñ<�Ø lÓ2ØŸš¬3¯?©?Ñ:�øô ×4Ò4Ó6�à%8Ô"æÜ&)×&7Ñ&7�Õ#Þ$Ü&)×&7Ñ&7�Õ#ä&)§m¡m�Ô#à×&Ñ&Ô(æðTØ×1Ñ1°&Ô9ö ðUØ×+Ñ+¨HÔ>ö ! [°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=H3 Å8G Æ	H3 ÆH Æ".H3 ÇG?Ç+G:Ç:G?Ç?H3 ÈH0ÈH+È+H0È0H3 È3
JÈ=I	É	1JÉ:JÊJr*   r+   r,   Úwrite_timeoutc                 ó,  •  U R                   (       d:  U R                  b-  U R                  R                  U(       a  [        U5      OS5        U R
                  R                  U R                  U R                  UUUS9  g! [         a
  n SnANASnAff = f)aD  Send `payload` to the MySQL server.

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

If you're sure you won't read `payload` after invoking `send()`,
then you can use `bytearray.` Otherwise, you must use `bytes`.
N)r+   r,   )r¬   r(   rÁ   Úfloatr·   r®   r0   r)   )r/   r*   r+   r,   rò   rs   s         r"   r0   ÚMySQLSocket.sends  sz   € ð 	à×,×,°·±Ñ1Fà—	‘	×$Ñ$¾]¤U¨=Ô%9ÐPTÔUð 	�‰×ÑØ�I‰IØ�L‰LØØ'Ø%=ð 	ò 	
øô ó 	äûð	ús   ‚AA? Á?
BÂBÚread_timeoutc                 ó(  •  U R                   (       d:  U R                  b-  U R                  R                  U(       a  [        U5      OS5        U R
                  R                  U R                  U R                  5      $ ! [         a
  n SnAN?SnAff = f)z.Get packet from the MySQL server comm channel.N)r¬   r(   rÁ   rô   r·   r®   r4   r)   )r/   rö   rs   s      r"   r4   ÚMySQLSocket.recv“  sj   € ð	à×,×,°·±Ñ1Fà—	‘	×$Ñ$¾L¤U¨<Ô%8ÈdÔSð �‰×#Ñ# D§I¡I¨t¯|©|Ó<Ð<øô ó 	äûð	ús   ‚AA= Á=
BÂBc                 ó   • g)zOpen the socket.Nr.   rJ   s    r"   Úopen_connectionÚMySQLSocket.open_connectionŸ  r2   r$   c                 ó   • g)zGet the location of the socket.Nr.   rJ   s    r"   r)   ÚMySQLSocket.address£  r2   r$   )r¬   r®   r­   r(   r~   )NNNFFNN)NNNr½   )r7   r8   r9   r:   r;   rK   r±   r´   rº   r¾   r	   r>   rÂ   r   r    rÐ   Úboolr   rð   r=   r0   r?   r4   r   rú   Úpropertyr)   r@   r.   r$   r"   rª   rª   À  s‡  † ñô>ô4ôôôð*¨h°s©mð *Àô *ð"4¨ð "4°Cð "4¸Dô "4ðL !%Ø"&Ø!%Ø*/Ø.3Ø,0Ø15ñ`4à˜‘ð`4ð ˜3‘-ð`4ð ˜#‘ð	`4ð
 " $™ð`4ð & d™^ð`4ð ˜t C™yÑ)ð`4ð $ D¨¡IÑ.ð`4ð 
õ`4ðJ (,Ø26Ø'+ñ
àð
ð   ‘}ð
ð #+¨3¡-ð	
ð
   ‘}ð
ð 
õ
ñ@
= ¨#¡ð 
=¸)õ 
=ð óó ðð Øð.˜ó .ó ó ó.r$   rª   c                   ót   ^ • \ rS rSrSrSS\SS4U 4S jjjr\S\4S j5       rSS jr	S	\
S
\
SS4S jrSrU =r$ )ÚMySQLUnixSocketi©  zhMySQL socket class using UNIX sockets.

Opens a connection through the UNIX socket of the MySQL Server.
Úunix_socketr   Nc                 ó:   >• [         TU ]  5         Xl        Xl        g r½   )rƒ   rK   r  Ú_address)r/   r  r†   s     €r"   rK   ÚMySQLUnixSocket.__init__¯  s   ø€ Ü‰ÑÔØ +ÔØ(�r$   c                 ó   • U R                   $ r½   ©r  rJ   s    r"   r)   ÚMySQLUnixSocket.address´  ó   € à�}‰}Ðr$   c                 ó,  •  [         R                   " [         R                  [         R                  5      U l        U R                  R	                  U R
                  5        U R                  R                  U R                  5        g ! [         R                  [        4 a%  n[        SU R                  [        U5      4S9UeS nAf[         a%  n[        SU R                  [        U5      4S9UeS nAf[         a  n[        [!        U5      5      UeS nAff = f)NéÒ  rW   )r<   ÚAF_UNIXÚSOCK_STREAMr(   rÁ   r¬   Úconnectr  rZ   r[   r   r)   r#   r\   r   Ú	Exceptionr    )r/   r   s     r"   rú   ÚMySQLUnixSocket.open_connection¸  så   € ð	4ÜŸšä—‘Ü×"Ñ"óˆDŒIð
 �I‰I× Ñ  ×!9Ñ!9Ô:Ø�I‰I×Ñ˜d×.Ñ.Õ/øÜ—‘¤Ð-ó 	Ü(Øà—L‘LÜ Ó$ðñð ðûô ó 	Ü Ø D§L¡L´+¸cÓ2BÐ#Cñàðûô ó 	4Ü ¤ S£Ó*°Ð3ûð	4ús0   ‚BB ÂDÂ B?Â?DÃ C,Ã,DÃ9DÄDÚargsÚkwargsc                 ó:   • [         R                  " S[        5        g)zSwitch the socket to use SSL.z2SSL is disabled when using unix socket connectionsN)ÚwarningsÚwarnÚWarning)r/   r  r  s      r"   rÐ   ÚMySQLUnixSocket.switch_to_sslÐ  s   € ô 	�ŠØ@Üõ	
r$   )r  r(   r  )z/tmp/mysql.sockr~   )r7   r8   r9   r:   r;   r    rK   rÿ   r)   rú   r   rÐ   r@   r§   r¨   s   @r"   r  r  ©  sb   ø† ññ
) Cð )À÷ )ð )ð
 ð˜ó ó ðô4ð0
Øð
Ø$'ð
à	÷
ò 
r$   r  c            	       ól   ^ • \ rS rSrSr   SS\S\S\SS4U 4S jjjr\	S\4S	 j5       r
SS
 jrSrU =r$ )ÚMySQLTCPSocketiÚ  zQMySQL socket class using TCP/IP.

Opens a TCP/IP connection to the MySQL Server.
rÅ   ÚportÚ
force_ipv6r   Nc                 ól   >• [         TU ]  5         Xl        X l        X0l        SU l        U SU 3U l        g )Nr   rÛ   )rƒ   rK   r­   Úserver_portr  Ú_familyr  )r/   rÅ   r  r  r†   s       €r"   rK   ÚMySQLTCPSocket.__init__à  s:   ø€ ô 	‰ÑÔØ $ÔØ $ÔØ *ŒØˆŒØ $˜v Q t fÐ-ˆ�r$   c                 ó   • U R                   $ r½   r  rJ   s    r"   r)   ÚMySQLTCPSocket.addressí  r	  r$   c           	      ó^  • Sn [         R                  " U R                  U R                  S[         R                  [         R
                  5      nU HJ  nU R                  (       a  US   [         R                  :X  a  Un  OUS   [         R                  :X  d  MH  Un  O   U R                  (       a  US   c  [        SU R                   35      eUS   c  US   nUu  U l        pVpx [         R                   " U R                  XV5      U l        U R                  R                  U R                  5        U R                  R!                  U5        g! [         a0  n[        SU R                  U R                  [        U5      4S9UeSnAff = f! [         R"                  [$        4 a0  n['        SU R                  U R                  [        U5      4S9UeSnAf[         a0  n[        SU R                  U R                  [        U5      4S9UeSnAf[(         a  n[+        [-        U5      5      UeSnAff = f)z/Open the TCP/IP connection to the MySQL server.)NNNNNr   NzNo IPv6 address found for iÓ  rW   r  )r<   Úgetaddrinfor­   r  r  ÚSOL_TCPr  ÚAF_INET6ÚAF_INETr   r\   r#   r  r(   rÁ   r¬   r  rZ   r[   r   r  r   r    )	r/   ÚaddrinfoÚ	addrinfosÚinfor   ÚsocktypeÚprotors   Úsockaddrs	            r"   rú   ÚMySQLTCPSocket.open_connectionñ  s  € ð +ð 	ð	Ü×*Ò*Ø× Ñ Ø× Ñ ØÜ×"Ñ"Ü—‘óˆIó "�Ø—?—? t¨A¡w´&·/±/Ó'AØ#�HÙØ˜‘7œfŸn™nÕ,Ø#�HÙñ "ð �� 8¨A¡;Ñ#6Ü$Ð'AÀ$×BRÑBRÐASÐ%TÓUÐUØ˜‰{Ñ"Ø$ Q™<�ð 8@Ñ4ˆŒ�x¨ð	6ÜŸš d§l¡l°HÓDˆDŒIØ�I‰I× Ñ  ×!9Ñ!9Ô:Ø�I‰I×Ñ˜hÕ'øô ó 	Ü ØØ×(Ñ(¨$×*:Ñ*:¼KÈÓ<LÐMñð ðûð	ûô —‘¤Ð-ó 	Ü(Øà×$Ñ$Ø×$Ñ$Ü Ó$ðñð ðûô ó 	Ü Øà×$Ñ$Ø×$Ñ$Ü Ó$ðñð ðûô ó 	6Ü"¤3 s£8Ó,°#Ð5ûð	6úsP   „BE ÂA E Ã$A&F Å
FÅ+F Æ FÆH,Æ"+GÇH,Ç+HÈH,ÈH'È'H,)r  r  r  r­   r  r(   )z	127.0.0.1iê  Fr~   )r7   r8   r9   r:   r;   r    r>   rþ   rK   rÿ   r)   rú   r@   r§   r¨   s   @r"   r  r  Ú  sj   ø† ñð  ØØ ñ	.àð.ð ð.ð ð	.ð
 
÷.ð .ð ð˜ó ó ð÷B6ò B6r$   r  )0r;   r<   rp   r  r’   Úabcr   r   Úcollectionsr   Útypingr   r   r   r	   r
   r   rÊ   ÚPROTOCOL_TLSv1ÚPROTOCOL_TLSv1_1ÚPROTOCOL_TLSv1_2ÚPROTOCOL_TLSrÝ   Úhasattrr   ÚTLS_V1_3_SUPPORTEDÚImportErrorÚerrorsr   r   r   r   r   r   r   r˜   rn   ry   rŸ   r\   r    r#   r&   rB   r€   rª   r  r  r.   r$   r"   Ú<module>r9     s%  ðñ:ó
 Û Û Û ç #Ý ß ;× ;ðÛð ×#Ñ#Ø×'Ñ'Ø×'Ñ'Ø×#Ñ#ñ	€Lñ !  mÓ4×H¸¿¹Ð÷÷ ñ ð Ð ØÐ ØÐ Ø"#Ð ðO�Wð O ô OôD�Cô DôNb˜ô bôJÐ0ô ôDf.�#ô f.ôR.
�kô .
ôbY6�[õ Y6øðK ó àÐØ
‚Cðús   ²AC' Ã'
C4Ã3C4