
    "i<V                        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	 ddlZej	        ej
        ej        dZ eed          rej        ed<   n
ej        ed<    eed          r
ej        rdZnd	Zn	#  d	ZY nxY wd
dlmZmZ d
dlmZ d
dl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)TLSv1TLSv1.1TLSv1.2PROTOCOL_TLSTLSv1.3HAS_TLSv1_3TF   )	constantserrors)InterfaceError)init_bytearrayc                 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    O/srv/django_bis/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(   J   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	 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__c   s8    	#'  )+&"WWr   c                 R    | j         dz   | _         | j         dk    rd| _         | j         S )zIncrements the packet numberr
      r   )r/   r3   s    r   next_packet_numberz"BaseMySQLSocket.next_packet_numberk   s3     #1A5$$"#D""r   c                 R    | j         dz   | _         | j         dk    rd| _         | j         S )z'Increments the compressed packet numberr
   r7   r   )r0   r3   s    r   next_compressed_packet_numberz-BaseMySQLSocket.next_compressed_packet_numbers   s3     *.)G!)K&)C//-.D*--r   c                     t           )zOpen the socketNotImplementedErrorr3   s    r   open_connectionzBaseMySQLSocket.open_connection{       !!r   c                     t           )zGet the location of the socketr<   r3   s    r   get_addresszBaseMySQLSocket.get_address   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closer1   errorAttributeErrorr3   s    r   rC   zBaseMySQLSocket.shutdown   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-   rF   r1   rD   rG   rH   r3   s    r   close_connectionz BaseMySQLSocket.close_connection   sN    	IOO"""n- 	 	 	DD	s    99c                 .    |                                   d S N)rC   r3   s    r   __del__zBaseMySQLSocket.__del__   s    r   Nc           	      `   || j          n|| _        t          || j                  }|D ]}	 | j                            |           # 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   )r8   r/   r(   r-   sendallIOErrorr   OperationalErrorrA   r   rH   )r4   r#   packet_numbercompressed_packet_numberpacketspacketr   s          r   
send_plainzBaseMySQLSocket.send_plain   s      ###"/D"3(;<< 	: 	:F:	!!&)))) O O O-(8(8(:(:K<L<L'MO O O O! : : :-D9999:	: 	:s   A
B+7B#B+c           	      8   || j          n|| _        || j         n|| _        | j        }t	          |          }g }t
          j        }||k    rt          ||          }d                    |          }	~t          j
        |	dd                   }
t          j        dt	          |
                    dd         t          j        d| j                  z   dz   }|                    ||
z              |	dd         }	t	          |	          }| j         ||k    rt          j
        |	d|                   }
t          j        dt	          |
                    dd         t          j        d| j                  z   d	z   }|                    ||
z              |	|d         }	t	          |	          }| j         ||k    |	rt          j
        |	          }
t          j        dt	          |
                    dd         t          j        d| j                  z   t          j        d|          dd         z   }|                    ||
z              ~	nGt          j        d|          dd         t          j        d|          z   |z   }t	          |          }|d
k    rt          j
        |          }
|                    t          j        dt	          |
                    dd         t          j        d| j                  z   t          j        d|          dd         z   |
z              nnt          j        d|          dd         t          j        d| j                  z   t          j        dd          dd         z   }|                    ||z              |D ]}	 | j                            |           # t           $ r<}t#          j        d|                                 t)          |          f          d}~wt*          $ 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   rO   rP   rR   rS   )r8   r/   r:   r0   r   r   r   r(   joinzlibcompressr!   r"   r    r-   rT   rU   r   rV   rA   r   rH   )r4   r#   rW   rX   r$   r&   zpktsr'   r%   tmpbufzbufheaderpkt
zip_packetr   s                  r   send_compressedzBaseMySQLSocket.send_compressed   s=     ###"/D#+...-ED*#C/	9#C//DXXd^^F=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+, Vd]+++	

+F22 )##  ,}V,, +dCII66qs;"Kd.LMMN"Ke44QqS9: Vd]+++;tU++AaC0;tU++,.12C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 Vc\*** 	: 	:J:	!!*---- O O O-(8(8(:(:K<L<L'MO O O O! : : :-D9999:	: 	:s   N33
P=7O44#Pc                    	 t          d          }d}|dk     rN| j                            d|z
            }|st          j        d          ||z  }t          |          }|dk     N|d         | _        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        rS   r   r       NrO   rP   )	bytearrayr-   recvr   r   r   r/   r!   unpackextend
memoryview	recv_intorU   rV   rA   r   )	r4   rZ   
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 -fQqSkG.CDDQGK 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   D%D( (
E.27E))E.c                    	 t          d          }d}|dk     rN| j                            d|z
            }|st          j        d          ||z  }t          |          }|dk     N|d         | _        t          j        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)rj   r   r   rk   rl   rS   r   r   rm   rO   rP   N)rn   r-   ro   r   r   r   r/   r!   rp   r   rU   rV   rA   r   )r4   re   
header_lenru   rv   rw   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   DD 
E
7EE
r      )r      c                     |r\t          j        d|dd         dz             d         }| j                            |d|dz                       ||dz   d         }|ZdS dS )zSplit compressed payloadr   r   r   rm   rk   N)r!   rp   r1   r    )r4   packet_bunchpayload_lengths      r   _split_zipped_payloadz%BaseMySQLSocket._split_zipped_payload5  s     	=#]4ac1BW1LMMaPN%%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          j        d|dd         d	z             d         }|d         | _        t          j        d|d
d         d	z             d         }t          |          }t          |          |k     rY| j                            |t          |          z
            }|st          j	        d          ||z   }t          |          |k     Y|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 ]\  }}|
t)          j        |          z  }
|                     |
           ~
	 | j                                         }|d         | _        |S # t          $ r Y dS w xY w)z0Receive compressed packets from the MySQL serverr   r   r
      rl   rS   r   r   rm   rk   r]   rO   rP   N)r1   popleftr/   
IndexErrorrn   r-   ro   r   r   r   r!   rp   r0   r   r   r    rU   rV   rA   r   r`   
decompress)r4   rf   re   rY   abytezip_payload_lengthr   zip_payloadru   r   tmpr}   s               r   recv_compressedzBaseMySQLSocket.recv_compressed<  s   	$,,..C"%a&DJ 	 	 	D	 3/	KINN1%%E *CKK!OO%	q))  *CKK!OO  &.v;;?? /d;;;; &,]439!A#;3H&J &JJK&M"17. "(tVAaC[75J!K!KA!N,U33+&&);;; INN+=-0-=-=,> ? ?E  @$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!!'. 	, 	,#NG4?7+++CC""3'''	$,,..C"%a&DJ 	 	 	DD	s>   '* 
77F$J 1BJ 
K7KK'L; ;
M	M	c                 Z    || _         | j        r| j                            |           dS dS )zSet the connection timeoutN)r.   r-   
settimeout)r4   timeouts     r   set_connection_timeoutz&BaseMySQLSocket.set_connection_timeout  s:    #* 9 	*I  )))))	* 	*r   Fc                 b	   | j         st          j        d          	 |rt          j        }n|rt          j        }nt          j        }||st          j                    }	|sd|	_        n|	                    d           |d         }
t          s!|
dk    rt          |          d	k    r|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_        d|	_        ||	_        |	                                 |rp	 |	                    |           nY# t*          t          j        f$ r@}| j                                          t          d                    |                    d}~ww xY w|rq	 |	                    ||           nY# t*          t          j        f$ r@}| j                                          t          d                    |                    d}~ww xY w|r|	                    |           t7          | d          r'|	                    | j         | j                  | _         n|	                    | j                   | _         |r3d|	_        | j        g}t<          j        dk    rM| j        dk    rBddg}tA          j!        | j                  }|"                    |d         g|d	         z              d}g }|D ]p}	 t          j#        | j         $                                |           d} n># t          j%        $ r,}|&                    tO          |                     Y d}~id}~ww xY w|sP| j                                          t          d                    d(                    |                              dS dS # tR          $ r t          j*        d          t          j        t*          f$ r<}t          j        d| +                                tY          |          f          d}~wt          j%        $ r&}t          j        tO          |                    d}~wtZ          $ r&}t          j        tO          |                    d}~ww xY w)zSwitch the socket to use SSLi   rS   NFT)reverser   r   r
   r   r   r   zInvalid CA Certificate: {}zInvalid Certificate/Key: {}server_host)server_hostnament	localhost	127.0.0.1z$Unable to verify server identity: {}z, z&Python installation has no SSL supportrO   rP   ).r-   r   r   sslCERT_REQUIREDCERT_OPTIONAL	CERT_NONEcreate_default_contextcheck_hostnamesortTLS_V1_3_SUPPORTEDr   TLS_VERSIONS
SSLContextoptionsOP_NO_TLSv1_2OP_NO_TLSv1_1OP_NO_TLSv1verify_modeload_default_certsload_verify_locationsrU   SSLErrorrF   r   load_cert_chainset_ciphershasattrwrap_socketr   osnamerD   gethostbyaddrrq   match_hostnamegetpeercertCertificateErrorr    r   r_   	NameErrorNotSupportedErrorrA   r   r=   )r4   cacertkeyverify_certverify_identitycipher_suitestls_versions	cert_reqscontexttls_versionssl_protocolr   	hostnamesaliasesmatch_founderrshostnames                     r   switch_to_sslzBaseMySQLSocket.switch_to_ssl  sO    y 	4'd3333W	2 *-		  *-		M	#<#466& 3-2G*!!$!///*1o) 2)++L0A0AA0E0E".q/K+K8.66)++ 443+<< 443+<<l223?:%*G""+G&&((( BB11"5555. B B BIOO%%%(4;;C@@B B BB  CC++D#6666. C C CIOO%%%(5<<SAAC C CC  3##M222t]++ ;#//It/? 0 A A		 $//	::	 E)-&!-.	7d??t'7;'F'F!,k :I$243CDDG$$gaj\GAJ%>???# )  H*49+@+@+B+BHMMM '+	 / . . .CHH--------.
 # EIOO%%%( *,,2F499T??,C,CE E E'E E"E E  	: 	: 	:*8: : :g& 	K 	K 	K'D$4$4$6$6C8H8H#IK K K K# 	2 	2 	2'C111" 	2 	2 	2'C111	2s   D6O E+ *O +G;F<<GO G O H44;H//H44C'O ,MO N"N=O NAO 3R.7QR.!Q;;R.!R))R.)NN)FFNN)__name__
__module____qualname____doc__r5   propertyr8   r:   r>   rA   rC   rJ   rM   r[   sendrh   rz   r~   sysversion_inforo   r   r   r   r    r   r   r*   r*   Z   s           # # X# . . X." " "" " "       -1,0: : : :" D1515C: C: C: C:JK K KBK K K> !&&$

= = =J J JX* * * 8=;?#'^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 rL   )superr   r5   unix_socket)r4   r   	__class__s     r   r5   zMySQLUnixSocket.__init__  s-    ot$$--///&r   c                     | j         S rL   )r   r3   s    r   rA   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  rP   )rD   AF_UNIXSOCK_STREAMr-   r   r.   connectr   rU   r   r   rA   r   	Exceptionr   )r4   r   s     r   r>   zMySQLUnixSocket.open_connection   s    		2fn&,&8: :DI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   r5   rA   r>   __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.
    r     Fc                     t          t          |                                            || _        || _        || _        d| _        d S )Nr   )r   r   r5   r   server_port
force_ipv6_family)r4   hostportr   r   s       r   r5   zMySQLTCPSocket.__init__  sA    nd##,,...$r   c                 B    d                     | j        | j                  S )Nz{0}:{1})r   r   r   r3   s    r   rA   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          $ r5}t          j
        d| j        | j        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  rP   )rD   getaddrinfor   r   r   SOL_TCPr   AF_INET6AF_INETr   r   r   r   rU   rA   r   r-   r   r.   r   r   rV   r   )	r4   addrinfo	addrinfosinfosocktypeproto_sockaddrr   s	            r   r>   zMySQLTCPSocket.open_connection  s9    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''''' 	 	 	'$$$$$     	4 	4 	4)#c((333	4s=   CC 
D!7DD!AE< <
G)0F66G)!G$$G))r   r   Fr   r   s   @r   r   r     sh         
     D D D+4 +4 +4 +4 +4 +4 +4r   r   )r   collectionsr   r   rD   r!   r   r`   r   PROTOCOL_TLSv1PROTOCOL_TLSv1_1PROTOCOL_TLSv1_2r   r   r   PROTOCOL_SSLv23r	   r    r   r   r   utilsr   r   r(   objectr*   r   r   r   r   r   <module>r     s  :        				   



 	JJJ#'') )L
 wsN## 6"%"2Y"%"5YwsM"" #s #!"	D         " " " " " " ! ! ! ! ! !K K K   S2 S2 S2 S2 S2f S2 S2 S2r2 2 2 2 2o 2 2 24;4 ;4 ;4 ;4 ;4_ ;4 ;4 ;4 ;4 ;4s   AA1 1A7