
    vdJ                         d Z ddlmZ ddlZddlZddlZddlZ	 ddlZn#  Y nxY wddlm	Z	m
Z
 ddlmZmZmZ d Zd Z G d	 d
e          Z G d de          Z G d de          ZdS )zGModule implementing low-level socket communication with MySQL servers.
    )dequeN   )	constantserrors)PY2init_bytearraystruct_unpackc                 p    | j         st          |           S d                    | j         | j                  S )z_Reformat the IOError error message

    This function reformats the IOError error message.
    z{errno} {strerr})errnostrerr)r   strformatstrerror)errs    S/var/www/html/t/fyr/venv311/lib/python3.11/site-packages/mysql/connector/network.py_strioerrorr   +   s6    
 9 3xx$$39S\$JJJ    c                    g }t          |           }t          j        }||k    rZ|                    dt	          j        d|          z   | d|         z              | |d         } t          |           }|dz   }||k    Z|                    t	          j        d|          dd         t	          j        d|          z   | z              |S )z0Prepare a packet for sending to the MySQL server   <BNr   <Ir      )lenr   MAX_PACKET_LENGTHappendstructpack)bufpktnrpktspllen	maxpktlens        r   _prepare_packetsr#   5   s    DHHE+I
)

Ofk$&>&>>*9*o& 	' 	' 	')**oC	 )

 	KKD%((1-+dE**+-01 2 2 2Kr   c                       e Zd ZdZd Zed             Zed             Zd Zd Z	d Z
d Z	 	 dd
ZeZ	 	 ddZd Zd Zej        dd         dk    reZeZneZd Zd Zd ZddZd	S )BaseMySQLSocketa  Base class for MySQL socket communication

    This class should not be used directly but overloaded, changing the
    at least the open_connection()-method. Examples of subclasses are
      mysql.connector.network.MySQLTCPSocket
      mysql.connector.network.MySQLUnixSocket
    c                 r    d | _         d | _        d| _        d| _        t	                      | _        d| _        d S )Ni    )sock_connection_timeout_packet_number_compressed_packet_numberr   _packet_queuerecvsizeselfs    r   __init__zBaseMySQLSocket.__init__N   s8    	#'  )+&"WWr   c                 R    | j         dz   | _         | j         dk    rd| _         | j         S )zIncrements the packet numberr      r   )r*   r.   s    r   next_packet_numberz"BaseMySQLSocket.next_packet_numberV   s3     #1A5$$"#D""r   c                 R    | j         dz   | _         | j         dk    rd| _         | j         S )z'Increments the compressed packet numberr   r2   r   )r+   r.   s    r   next_compressed_packet_numberz-BaseMySQLSocket.next_compressed_packet_number^   s3     *.)G!)K&)C//-.D*--r   c                     t           )zOpen the socketNotImplementedErrorr.   s    r   open_connectionzBaseMySQLSocket.open_connectionf       !!r   c                     t           )zGet the location of the socketr7   r.   s    r   get_addresszBaseMySQLSocket.get_addressj   r:   r   c                     	 | j                             t          j                   | j                                          | `dS # t          j        t          f$ r Y dS w xY w)z&Shut down the socket before closing itN)r(   shutdownsocket	SHUT_RDWRcloser,   errorAttributeErrorr.   s    r   r>   zBaseMySQLSocket.shutdownn   sg    	Iv/000IOO"""n- 	 	 	DD	s   ?A AAc                 x    	 | j                                          | `dS # t          j        t
          f$ r Y dS w xY w)zClose the socketN)r(   rA   r,   r?   rB   rC   r.   s    r   close_connectionz BaseMySQLSocket.close_connectionw   sN    	IOO"""n- 	 	 	DD	s    99Nc           	         || j          n|| _        t          || j                  }|D ]}	 t          r(| j                            t          |                     n| j                            |           M# t          $ r<}t          j	        d| 
                                t          |          f          d}~wt          $ r t          j	        d          w xY wdS )z Send packets to the MySQL serverN  r   values  r   )r3   r*   r#   r   r(   sendallbufferIOErrorr   OperationalErrorr<   r   rC   )r/   r   packet_numbercompressed_packet_numberpacketspacketr   s          r   
send_plainzBaseMySQLSocket.send_plain   s     ###"/D"3(;<< 
	: 
	:F	: .I%%fVnn5555I%%f--- O O O-(8(8(:(:K<L<L'MO O O O! : : :-D9999:
	: 
	:s   A	A66
C 7B77#Cc           	      r	   || j          n|| _        || j         n|| _        | j        }t	          |          }g }t
          j        }||k    rot          ||          }t          r(t                      }	|D ]}
|	|
z  }	t          |	          }	nd                    |          }	~t          j        |	dd                   }t          j        dt	          |                    dd         t          j        d| j                  z   dz   }t          rt          |          }|                    ||z              |	dd         }	t	          |	          }| j         ||k    rt          j        |	d|                   }t          j        dt	          |                    dd         t          j        d| j                  z   d	z   }t          rt          |          }|                    ||z              |	|d         }	t	          |	          }| j         ||k    |	rt          j        |	          }t          j        dt	          |                    dd         t          j        d| j                  z   t          j        d|          dd         z   }t          rt          |          }|                    ||z              ~	nst          j        d|          dd         t          j        d|          z   |z   }
t          rt          |
          }
t	          |
          }|d
k    rt          j        |
          }|                    t          j        dt	          |                    dd         t          j        d| j                  z   t          j        d|          dd         z   |z              nt          j        d|          dd         t          j        d| j                  z   t          j        dd          dd         z   }t          rt          |          }|                    ||
z              |D ]}	 | j                            |           # t&          $ r<}t)          j        d|                                 t/          |          f          d}~wt0          $ r t)          j        d          w xY wdS )z+Send compressed packets to the MySQL serverNr    @  r   r   r   r   s    @ r   2   rG   rH   rJ   rK   )r3   r*   r5   r+   r   r   r   r#   r   	bytearrayrM   joinzlibcompressr   r   r   r(   rL   rN   r   rO   r<   r   rC   )r/   r   rP   rQ   r   r!   zpktsr"   r    tmpbufpktzbufheader
zip_packetr   s                  r   send_compressedzBaseMySQLSocket.send_compressed   s     ###"/D#+...-ED*#C/	9#C//D (" " "CcMFF$=00Dk$D		221Q37D$*HIIJ'(F  (LL$'''EFF^FKKE..)##}VJYJ%788 +dCII66qs;"Kd.LMMN+,  ,#F^^FVd]+++	

+F22 )##  ,}V,, +dCII66qs;"Kd.LMMN"Ke44QqS9:  ,#F^^FVd]+++;tU++AaC0;tU++,.12C "SkkHHErzz}S))V[s4yy99!A#>%{41OPPQ%{477!<=  $$ % % % %
 !+dE221Q37"Kd.LMMN"Ka00156  ,#F^^FVc\*** 	: 	:J:	!!*---- O O O-(8(8(:(:K<L<L'MO O O O! : : :-D9999:	: 	:s   5Q
R47R#R4c                 X   	 t          d          }d}|dk     rN| j                            d|z
            }|st          j        d          ||z  }t          |          }|dk     N|d         | _        t          r4t          j	        dt          |dd         dz                       d         }n&t          j        d|dd         dz             d         }|}|                    t          |                     t          |          }|dd	         }|rM| j                            ||          }|dk    r|dk    rt          j        d          ||d	         }||z  }|M|S # t          $ r<}t          j        d
|                                 t%          |          f          d	}~ww xY w)%Receive packets from the MySQL serverr   r        rK   r   r       NrG   rH   )rX   r(   recvr   InterfaceErrorr   r*   r   r   unpack_fromrM   unpackextend
memoryview	recv_intorN   rO   r<   r   )	r/   rS   
packet_lenchunkpayload_lenrestpacket_viewreadr   s	            r   
recv_plainzBaseMySQLSocket.recv_plain   s   "	Ks^^FJq..	q:~66 < /d;;;;% [[
 q.. #))D L$06!A#;0113 3346 %mD&1+2GHHK DMM)K00111$V,,K%abb/K y**;==199 /d;;;;)$%%0   M 	K 	K 	K)D$4$4$6$6C8H8H#IK K K K	Ks   E E# #
F)-7F$$F)c                    	 t          d          }d}|dk     rN| j                            d|z
            }|st          j        d          ||z  }t          |          }|dk     N|d         | _        t          d|dd         dz             d         }|}t          d          }|dk    rN| j                            |          }|st          j        d          ||z  }|t          |          z
  }|dk    N||z   S # t          $ r<}t          j
        d	|                                 t          |          f
          d}~ww xY w)rd   r   r   re   rf   rK   r   r   rg   rG   rH   N)rX   r(   rh   r   ri   r   r*   r	   r   rN   rO   r<   r   )r/   r`   
header_lenrp   rq   rr   payloadr   s           r   recv_py26_plainzBaseMySQLSocket.recv_py26_plain  s   	Ks^^FJq..	q:~66 < /d;;;;% [[
 q.. #))D'fQqSkG.CDDQGK D$S))G((	t,, < /d;;;;5 "S\\1 (( G## 	K 	K 	K)D$4$4$6$6C8H8H#IK K K K	Ks   C<C? ?
E	7E  Er      )rz      c                    |rt           r't          j        d|dd         dz             d         }n&t          j        d|dd         dz             d         }| j                            |d|dz                       ||dz   d         }|dS dS )zSplit compressed payloadr   r   r   rg   re   N)r   r   rj   rk   r,   r   )r/   packet_bunchpayload_lengths      r   _split_zipped_payloadz%BaseMySQLSocket._split_zipped_payload5  s     		= U!'!3 1%/"1 "112"4 "(t\!A#5F5P!Q!QRS!T%%l1^a5G3G&HIII'(:(;(;<L  		= 		= 		= 		= 		=r   c                    	 | j                                         }|d         | _        |S # t          $ r Y nw xY wt	          d          }g }	 | j                            d          }|rGt          |          dk     r4||z  }| j                            d          }|rt          |          dk     4|rt          |          dk     rt          j	        d          t          d|dd         d	z             d         }|d         | _        t          d|d
d         d	z             d         }t          |          }t          |          |k     rj| j                            |t          |          z
            }t          |          dk    rt          j	        d          ||z   }t          |          |k     j|dk    r=|                     |           | j                                         }|d         | _        |S |                    ||f           |dk    rnut          d          }| j                            d          }|rGt          |          dk     r4||z  }| j                            d          }|rt          |          dk     4|nI# t          $ r<}	t          j        d|                                 t%          |	          f          d}	~	ww xY wt          d          }
|D ]H\  }}t&          r%|
t)          j        t-          |                    z  }
1|
t)          j        |          z  }
I|                     |
           ~
	 | j                                         }|d         | _        |S # t          $ r Y dS w xY w)z0Receive compressed packets from the MySQL serverr   r   r      rf   rK   r   r   rg   re   rV   rG   rH   N)r,   popleftr*   
IndexErrorrX   r(   rh   r   r   ri   r	   r+   r   r   r   rN   rO   r<   r   r   rZ   
decompressrM   )r/   r^   r`   rR   abytezip_payload_lengthr~   zip_payloadrp   r   tmprx   s               r   recv_compressedzBaseMySQLSocket.recv_compressedB  s   	$,,..C"%a&DJ 	 	 	D	 3/	KINN1%%E *CKK!OO%	q))  *CKK!OO  &.v;;?? /d;;;; &3439!A#;3H&J &JJK&M"17. "/tVAaC[75J!K!KA!N,U33+&&);;; INN+=-0-=-=,> ? ?E5zzQ$3$????"-"5K +&&);;; "Q&&..{;;;,4466C*-a&D'J<===%.. (,,	q)) .FaeOF INN1--E  .FaI  &.P  	K 	K 	K)D$4$4$6$6C8H8H#IK K K K	K S!!'. 	0 	0#NG 0tvg777tw///""3'''	$,,..C"%a&DJ 	 	 	DD	s>   '* 
77F+J 8BJ 
K7KK'M. .
M<;M<c                     || _         dS )zSet the connection timeoutN)r)   )r/   timeouts     r   set_connection_timeoutz&BaseMySQLSocket.set_connection_timeout  s    #*   r   Fc           
      H   | j         st          j        d          	 |rt          j        }nt          j        }t          j        | j         ||||dt          j        |          | _         | j                                          dS # t          $ r t          j
        d          t          j        t          f$ r<}t          j        d|                                 t          |          f          d}~wt          $ r&}t          j        t!          |                    d}~ww xY w)	zSwitch the socket to use SSLi   rK   F)keyfilecertfileca_certs	cert_reqsdo_handshake_on_connectssl_versionciphersz&Python installation has no SSL supportrG   rH   N)r(   r   ri   sslCERT_REQUIRED	CERT_NONEwrap_socketPROTOCOL_TLSv1do_handshake	NameErrorNotSupportedErrorSSLErrorrN   r<   r   r8   r   )r/   cacertkeyverify_certcipherr   r   s           r   switch_to_sslzBaseMySQLSocket.switch_to_ssl  sI   y 	4'd3333	2 *-		M		3#U.@ @ @DI I""$$$$$ 	: 	: 	:*8: : :g& 	K 	K 	K'D$4$4$6$6C8H8H#IK K K K" 	2 	2 	2'C111	2s$   A$B 3D!77C..D!;!DD!)NN)FN)__name__
__module____qualname____doc__r0   propertyr3   r5   r9   r<   r>   rE   rT   sendrb   ru   ry   sysversion_inforh   r   r   r   r    r   r   r%   r%   E   su           # # X# . . X." " "" " "     -1,0: : : :( D1515S: S: S: S:j$K $K $KLK K K> !&&$

= = =M M M^+ + +
2 2 2 2 2 2r   r%   c                   0     e Zd ZdZd fd	Zd Zd Z xZS )MySQLUnixSocketzoMySQL socket class using UNIX sockets

    Opens a connection through the UNIX socket of the MySQL Server.
    /tmp/mysql.sockc                 d    t          t          |                                            || _        d S N)superr   r0   unix_socket)r/   r   	__class__s     r   r0   zMySQLUnixSocket.__init__  s-    ot$$--///&r   c                     | j         S r   )r   r.   s    r   r<   zMySQLUnixSocket.get_address  s    r   c                    	 t          j         t           j        t           j                  | _        | j                            | j                   | j                            | j                   d S # t          $ r<}t          j
        d|                                 t          |          f          d }~wt          $ r&}t          j
        t          |                    d }~ww xY w)Ni  rH   )r?   AF_UNIXSOCK_STREAMr(   
settimeoutr)   connectr   rN   r   ri   r<   r   	Exceptionr   )r/   r   s     r   r9   zMySQLUnixSocket.open_connection  s    	2fnf6HIIDII  !9:::Id.///// 	K 	K 	K'D$4$4$6$6C8H8H#IK K K K 	2 	2 	2'C111	2s$   A,A0 0
C$:7B11C$>!CC$)r   r   r   r   r   r0   r<   r9   __classcell__r   s   @r   r   r     se         
' ' ' ' ' '     	2 	2 	2 	2 	2 	2 	2r   r   c                   0     e Zd ZdZd fd	Zd Zd Z xZS )	MySQLTCPSocketzXMySQL socket class using TCP/IP

    Opens a TCP/IP connection to the MySQL Server.
    	127.0.0.1  Fc                     t          t          |                                            || _        || _        || _        d| _        d S )Nr   )r   r   r0   server_hostserver_port
force_ipv6_family)r/   hostportr   r   s       r   r0   zMySQLTCPSocket.__init__  sA    nd##,,...$r   c                 B    d                     | j        | j                  S )Nz{0}:{1})r   r   r   r.   s    r   r<   zMySQLTCPSocket.get_address  s     0$2BCCCr   c                    dgdz  }	 t          j        | j        | j        dt           j        t           j                  }|D ]=}| j        r|d         t           j        k    r|} n|d         t           j        k    r|} n>| j        r4|d         ,t          j
        d                    | j                            |d         |d         }|\  | _        }}}}nI# t          $ r<}t          j
        d|                                 t          |          f          d}~ww xY w	 t          j         | j        ||          | _        | j                            | j                   | j                            |           dS # t          $ r<}t          j
        d|                                 t          |          f          d}~wt(          $ r&}t          j        t-          |                    d}~ww xY w)z7Open the TCP/IP connection to the MySQL server
        N   r   zNo IPv6 address found for {0}i  rH   )r?   getaddrinfor   r   r   SOL_TCPr   AF_INET6AF_INETr   ri   r   r   rN   r<   r   r(   r   r)   r   r   rO   r   )	r/   addrinfo	addrinfosinfosocktypeproto_sockaddrr   s	            r   r9   zMySQLTCPSocket.open_connection  s=    6A:	D*4+;+/+;+,f.@+1>; ;I
 "  ? tAw&/'A'A#HE!W..#HE /  N8A;#6+3::4;KLLN N N{"$Q<
 <D8T\8UAxx	  	K 	K 	K'D$4$4$6$6C8H8H#IK K K K	K	4dlHeDDDII  !9:::Ih''''' 	K 	K 	K'D$4$4$6$6C8H8H#IK K K K 	4 	4 	4)#c((333	4s=   CC 
D!7DD!AE< <
G07F==G0
!G++G0)r   r   Fr   r   s   @r   r   r     sh         
     D D D&4 &4 &4 &4 &4 &4 &4r   r   )r   collectionsr   r?   r   r   rZ   r    r   r   catch23r   r   r	   r   r#   objectr%   r   r   r   r   r   <module>r      sM  0          



 	JJJJ	D         7 7 7 7 7 7 7 7 7 7K K K   h2 h2 h2 h2 h2f h2 h2 h2\2 2 2 2 2o 2 2 2264 64 64 64 64_ 64 64 64 64 64s    #