
    BR<i)W                        d Z ddlZddlZddlZddlZddlZddlmZ 	 ddlZej                  ej                  ej                  dZ eed      rej                  nej                  ed<    eed      xr ej                   Zdd	lmZmZmZmZmZmZ d
dlmZ d
dlmZmZmZ d
dl m!Z! d
dl"m#Z# de$de%fdZ&de'de(dee'   fdZ) G d d      Z* G d de*      Z+ G d de*      Z,y# e$ r dZY kw xY w)zGModule implementing low-level socket communication with MySQL servers.
    N)deque)TLSv1TLSv1.1TLSv1.2PROTOCOL_TLSTLSv1.3HAS_TLSv1_3F)AnyDequeListOptionalTupleUnion   )MAX_PACKET_LENGTH)InterfaceErrorNotSupportedErrorOperationalError)StrOrBytesPath)init_bytearrayerrreturnc                 f    | j                   st        |       S | j                    d| j                   S )z_Reformat the IOError error message

    This function reformats the IOError error message.
     )errnostrstrerror)r   s    X/var/www/html/delta-backend/venv/lib/python3.12/site-packages/mysql/connector/network.py_strioerrorr   E   s-    
 993xii[#,,((    bufpktnrc                 L   g }t        |       }t        }||kD  rI|j                  dt        j                  d|      z   | d| z          | |d } t        |       }|dz   }||kD  rI|j                  t        j                  d|      dd t        j                  d|      z   | z          |S )z0Prepare a packet for sending to the MySQL server   <BNr   <Ir      )lenr   appendstructpack)r!   r"   pktspllen	maxpktlens        r   _prepare_packetsr/   O   s    DHE!I
)
Ofkk$&>>ZiPQ)*oC		 )

 	KKD%(1-D%0HH3NOKr    c                   D   e Zd ZdZddZdefdZdefdZdefdZ	defdZ
dd	Zdd
ZddZ	 	 d dedee   dee   ddfdZeZ	 	 d dedee   dee   ddfdZdefdZeZdeddfdZdee   fdZdee   ddfdZ	 	 	 	 d!dedededededee   deee      ddfdZy)"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
    r   Nc                 v    d | _         d | _        d| _        d| _        t	               | _        d | _        d| _        y )Ni    )sock_connection_timeout_packet_number_compressed_packet_numberr   _packet_queueserver_hostrecvsizeselfs    r   __init__zBaseMySQLSocket.__init__f   s:    -1	26 #%.0&/4w*.!r    c                 n    | j                   dz   | _         | j                   dkD  rd| _         | j                   S )zIncrements the packet numberr      r   )r6   r;   s    r   next_packet_numberz"BaseMySQLSocket.next_packet_numberp   s7    "11A5$"#D"""r    c                 n    | j                   dz   | _         | j                   dkD  rd| _         | j                   S )z'Increments the compressed packet numberr   r?   r   )r7   r;   s    r   next_compressed_packet_numberz-BaseMySQLSocket.next_compressed_packet_numberw   s7    )-)G)G!)K&))C/-.D*---r    c                     t         )zOpen the socketNotImplementedErrorr;   s    r   open_connectionzBaseMySQLSocket.open_connection~       !!r    c                     t         )zGet the location of the socketrD   r;   s    r   get_addresszBaseMySQLSocket.get_address   rG   r    c                     	 | j                   j                  t        j                         | j                   j	                          | `y# t        t        f$ r Y yw xY w)z&Shut down the socket before closing itN)r4   shutdownsocket	SHUT_RDWRcloser8   AttributeErrorOSErrorr;   s    r   rK   zBaseMySQLSocket.shutdown   sJ    	IIv//0IIOO"( 		s   AA AAc                 h    	 | j                   j                          | `y# t        t        f$ r Y yw xY w)zClose the socketN)r4   rN   r8   rO   rP   r;   s    r   close_connectionz BaseMySQLSocket.close_connection   s2    	IIOO"( 		s    11c                 $    | j                          y N)rK   r;   s    r   __del__zBaseMySQLSocket.__del__   s    r    r!   packet_numbercompressed_packet_numberc           	      P   |}|| j                          n|| _        t        || j                        }|D ]  }	 | j                  j	                  |         y# t
        $ r,}t        d| j                         t        |      f      |d}~wt        $ r}t        d      |d}~ww xY w)z Send packets to the MySQL serverN  r   values  r   )
r@   r6   r/   r4   sendallIOErrorr   rI   r   rO   )r<   r!   rV   rW   _packetspacketr   s           r   
send_plainzBaseMySQLSocket.send_plain   s     % ##%"/D"3(;(;< 	<F<		!!&)	<  &(8(8(:K<L'M " <&T2;<s#   A	B% 'BB%B  B%c           	         || j                          n|| _        || j                          n|| _        | j                  }t	        |      }g }t
        }||kD  rt        ||      }dj                  |      }	~t        j                  |	dd       }
t        j                  dt	        |
            dd t        j                  d| j                        z   dz   }|j                  ||
z          |	dd }	t	        |	      }| j                          ||kD  rt        j                  |	d|       }
t        j                  dt	        |
            dd t        j                  d| j                        z   d	z   }|j                  ||
z          |	|d }	t	        |	      }| j                          ||kD  r|	rt        j                  |	      }
t        j                  dt	        |
            dd t        j                  d| j                        z   t        j                  d|      dd z   }|j                  ||
z          ~	n0t        j                  d|      dd t        j                  d|      z   |z   }t	        |      }|d
kD  rt        j                  |      }
|j                  t        j                  dt	        |
            dd t        j                  d| j                        z   t        j                  d|      dd z   |
z          nht        j                  d|      dd t        j                  d| j                        z   t        j                  dd      dd z   }|j                  ||z          |D ]  }	 | j                  j                  |         y# t        $ r,}t!        d| j#                         t%        |      f      |d}~wt&        $ r}t!        d      |d}~ww xY w)z+Send compressed packets to the MySQL serverNr     @  r&   r   r'   r%   s    @ r$   2   rY   rZ   r\   r]   )r@   r6   rB   r7   r(   r   r/   joinzlibcompressr*   r+   r)   r4   r^   r_   r   rI   r   rO   )r<   r!   rV   rW   r"   r-   zpktsr.   r,   tmpbufzbufheaderpkt
zip_packetr   s                  r   send_compressedzBaseMySQLSocket.send_compressed   s     ##%"/D#+..0-ED*##C%	9#C/DXXd^F==0DD#d),Qq1++dD$B$BCD!" 
 LL$'EF^FKE..0)#}}VJY%78KKc$i015kk$(F(FGH%& 
 Vd]+	
+F224 )# }}V,KKc$i015kk$(F(FGHkk$.q34 
 Vd]+++dE*1Q/&++dE2JJSPCHErz}}S)KKc$i015kk$(F(FGHkk$.q34  KKe,Qq1kk$(F(FGHkk$*1Q/0 
 Vc\* 	<J<		!!*-	<  &(8(8(:K<L'M " <&T2;<s$   (N	O'N66OOOc                 L   	 t        d      }d}|dk  rB| j                  j                  d|z
        }|st        d      ||z  }t	        |      }|dk  rB|d   | _        t        j                  d|dd dz         d   }|}|j                  t        |             t        |      }|dd	 }|r?| j                  j                  ||      }|dk(  r|dkD  rt        d      ||d	 }||z  }|r?|S # t        $ r,}t        d
| j                         t        |      f      |d	}~ww xY w)z%Receive packets from the MySQL serverr    r        r]   r'   r&       NrY   rZ   )	bytearrayr4   recvr   r(   r6   r*   unpackextend
memoryview	recv_intor_   r   rI   r   )	r<   rb   
packet_lenchunkpayload_lenrestpacket_viewreadr   s	            r   
recv_plainzBaseMySQLSocket.recv_plain  s@   	s^FJq.		q:~6(t44% [
 q. #))D --fQqkG.CDQGK DMM)K01$V,K%ab/Kyy**;=19(t44)$%0  M 	"D$4$4$6C8H#I	s%   AC. BC. ,C. .	D#7'DD#packet_bunchc                     |rLt        j                  d|dd dz         d   }| j                  j                  |d|dz           ||dz   d }|rKyy)zSplit compressed payloadr&   r   r'   rt   rr   N)r*   rw   r8   r)   )r<   r   payload_lengths      r   _split_zipped_payloadz%BaseMySQLSocket._split_zipped_payload+  s]    #]]4a1BW1LMaPN%%l1~7I&JK'(:(<=L r    c                    	 | j                   j                         }|d   | _        |S # t        $ r Y nw xY wt	        d      }g }	 | j
                  j                  d      }|r?t        |      dk  r1||z  }| j
                  j                  d      }|rt        |      dk  r1|rt        |      dk  rt        d      t        j                  d|dd d	z         d   }|d   | _        t        j                  d|d
d d	z         d   }t        |      }t        |      |k  rI| j
                  j                  |t        |      z
        }|st        d      ||z   }t        |      |k  rI|dk(  r7| j                  |       | j                   j                         }|d   | _        |S |j                  ||f       |dk  rnkt        d      }| j
                  j                  d      }|r?t        |      dk  r1||z  }| j
                  j                  d      }|rt        |      dk  r1|rn8# t        $ r,}	t!        d| j#                         t%        |	      f      |	d}	~	ww xY wt        d      }
|D ]  \  }}|
t'        j(                  |      z  }
 | j                  |
       ~
	 | j                   j                         }|d   | _        |S # t        $ r Y yw xY w)z0Receive compressed packets from the MySQL serverr'   r    r      rs   r]   r&   r   rt   rr   re   rY   rZ   N)r8   popleftr6   
IndexErrorru   r4   rv   r(   r   r*   rw   r7   r   r   r)   r_   r   rI   r   rh   
decompress)r<   rn   rm   ra   abytezip_payload_lengthr   zip_payloadr|   r   tmppayloads               r   recv_compressedzBaseMySQLSocket.recv_compressed2  s   	$$,,.C"%a&DJ 		 3.	IINN1%ECK!O%		q) CK!O v;?(t44 &,]]4!w9N%OPQ%R"17. "(tVAa[75J!KA!N,U3+&);; IINN+=K@P+PQE ,488"-"5K	 +&);; "Q&..{;,,446C*-a&D'J<=%. (,		q)FaeOF IINN1-E FaE L  	"D$4$4$6C8H#I	 S!'. 	,#NG4??7++C	, 	""3'	$$,,.C"%a&DJ 		sQ   %( 	44AH) !CH) (;H) $A?H) $H) )	I2'II!%K 	KKtimeoutc                 b    || _         | j                  r| j                  j                  |       yy)zSet the connection timeoutN)r5   r4   
settimeout)r<   r   s     r   set_connection_timeoutz&BaseMySQLSocket.set_connection_timeout~  s(    #* 99II  ) r    cacertkeyverify_certverify_identitycipher_suitestls_versionsc                    | j                   st        d      	 |rt        j                  }n#|rt        j                  }nt        j
                  }||st        j                         }	|sd|	_        n|j                  d       |d   }
t        s|
dk(  rt        |      d	kD  r|d	   }
t        |
   }t        j                  |      }	|
dk(  rud
|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|	_        ||	_        |	j%                          |r	 |	j'                  |       |r	 |	j/                  ||       |r|	j1                  |       t3        | d      r-|	j5                  | j                   | j6                        | _         n |	j5                  | j                         | _         |rd|	_        | j6                  r| j6                  gng }t8        j:                  dk(  rM| j6                  dk(  r>ddg}t=        j>                  | j6                        }|jA                  |d   g|d	   z          d}g }|D ]4  }	 t        jB                  | j                   jE                         |       d} n |s7| j                   j-                          t        ddjM                  |             yy# t(        t        j*                  f$ r.}| j                   j-                          t        d|       |d}~ww xY w# t(        t        j*                  f$ r.}| j                   j-                          t        d|       |d}~ww xY w# t        jF                  $ r%}|jI                  tK        |             Y d}~9d}~ww xY w# tN        $ r}tQ        d      |d}~wt        j*                  t(        f$ r,}t        d| jS                         tU        |      f      |d}~wt        jF                  $ r}t        tK        |            |d}~wtV        $ r}t        tK        |            |d}~ww xY w)zSwitch the socket to use SSLi   r]   NFT)reverser   r   r   r   r   r   zInvalid CA Certificate: zInvalid Certificate/Key: r9   )server_hostnament	localhost	127.0.0.1z"Unable to verify server identity: z, z&Python installation has no SSL supportrY   rZ   ),r4   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_locationsr_   SSLErrorrN   load_cert_chainset_ciphershasattrwrap_socketr9   osnamerL   gethostbyaddrrx   match_hostnamegetpeercertCertificateErrorr)   r   rg   	NameErrorr   rI   r   rE   )r<   r   r   r   r   r   r   r   	cert_reqscontexttls_versionssl_protocolr   	hostnamesaliasesmatch_founderrshostnames                     r   switch_to_sslzBaseMySQLSocket.switch_to_ssl  s    yy t,,_	4--	 --	MM	#<446&-2G*!!$!/*1o*#y0L)A-".q/K+K8..6)+ 43+<+<< 43+<+<<l23??:%*G""+G&&(T11"5 U++D#6 ##M2t]+#//IIt/?/? 0 	 $//		:	)-&=A=M=M(8(8'9SU	77d?t'7'7;'F!,k :I$2243C3CDG$$gaj\GAJ%>?# ) H
 **499+@+@+BHM
 '+ #IIOO%(<TYYt_<MN  #- '  . TIIOO%(+CC5)IJPSST  . UIIOO%(+DSE)JKQTTU< // .CH--.  	W#$LMSVVg& 	 D$4$4$6C8H#I ## 	4 S*3" 	4 S*3	4s   EN=  K. 1N= 4L8 C9N=  .N.>N= .L5)L00L55N= 8M?)M::M??N= N:N5/N= 5N::N= =	Q&OQ&.'PQ&+Q  Q&Q!!Q&r   N)NN)FFNN)__name__
__module____qualname____doc__r=   intr@   rB   r
   rF   rI   rK   rR   rU   bytesr   rc   sendrp   ru   r   rv   r   r   r   r   boolr   r   r    r    r   r1   r1   ]   s   "#C #.s ." ""S " (,26	<<  }< #+3-	<
 
<0 D
 (,26	Q<Q<  }Q< #+3-	Q<
 
Q<f I  D D>) > >J)!4 JX*hsm * * " %'+,0m4m4 m4 	m4
 m4 m4  }m4 tCy)m4 
m4r    r1   c                   V     e Zd ZdZddeddf fdZdefdZddZded	eddfd
Z	 xZ
S )MySQLUnixSocketzoMySQL socket class using UNIX sockets

    Opens a connection through the UNIX socket of the MySQL Server.
    unix_socketr   Nc                 0    t         |           || _        y rT   )superr=   r   )r<   r   	__class__s     r   r=   zMySQLUnixSocket.__init__  s     +r    c                     | j                   S rT   )r   r;   s    r   rI   zMySQLUnixSocket.get_address  s    r    c                    	 t        j                   t         j                  t         j                        | _        | j                  j	                  | j
                         | j                  j                  | j                         y # t        $ r,}t        d| j                         t        |      f      |d }~wt        $ r}t        t        |            |d }~ww xY w)Ni  rZ   )rL   AF_UNIXSOCK_STREAMr4   r   r5   connectr   r_   r   rI   r   	Exceptionr   )r<   r   s     r   rF   zMySQLUnixSocket.open_connection  s    	4 2 2DI II  !9!9:IId../ 	 D$4$4$6C8H#I  	4 S*3	4s$   BB 	C'B44C CCargskwargsc                 8    t        j                  dt               y)zSwitch the socket to use SSL.z2SSL is disabled when using unix socket connectionsN)warningswarnWarning)r<   r   r   s      r   r   zMySQLUnixSocket.switch_to_ssl  s     	@	
r    )z/tmp/mysql.sockr   )r   r   r   r   r   r=   rI   rF   r
   r   __classcell__r   s   @r   r   r     sI    
,C , , S  4

$'
	
r    r   c            	       L     e Zd ZdZ	 d
dedededdf fdZdefdZdd	Z	 xZ
S )MySQLTCPSocketzXMySQL socket class using TCP/IP

    Opens a TCP/IP connection to the MySQL Server.
    hostport
force_ipv6r   Nc                 Z    t         |           || _        || _        || _        d| _        y )Nr   )r   r=   r9   server_portr   _family)r<   r   r   r   r   s       r   r=   zMySQLTCPSocket.__init__  s.     	 $ $ *r    c                 8    | j                    d| j                   S )N:)r9   r   r;   s    r   rI   zMySQLTCPSocket.get_address(  s!    ""#1T%5%5$677r    c           	         d}	 t        j                  | j                  | j                  dt         j                  t         j
                        }|D ]B  }| j                  r|d   t         j                  k(  r|} n|d   t         j                  k(  s@|} n | j                  r|d   t        d| j                         |d   |d   }|\  | _        }}}}	 t        j                   | j                  ||      | _        | j                  j                  | j                          | j                  j#                  |       y# t        $ r,}t        d| j                         t        |      f      |d}~ww xY w# t        $ r3}t        d| j                  | j                  t        |      f      |d}~wt$        $ r}t'        t)        |            |d}~ww xY w)z.Open the TCP/IP connection to the MySQL server)NNNNNr   NzNo IPv6 address found for i  rZ   )rL   getaddrinfor9   r   r   SOL_TCPr   AF_INET6AF_INETr   r_   rI   r   r   r4   r   r5   r   r   r   r   )	r<   addrinfo	addrinfosinfor   socktypeprotor`   sockaddrs	            r   rF   zMySQLTCPSocket.open_connection+  s    + 		**    ""I " ??tAw&//'A#H7fnn,#H 8A;#6$'A$BRBRAS%TUU{"$Q< 8@4x8	6dllHeDDIII  !9!9:IIh'  	 D$4$4$6C8H#I	  	 $$$$$   	6"3s8,#5	6sC   B
D< 8D< A&E4 <	E1'E,,E14	G=.F++G7GG)r   i  Fr   )r   r   r   r   r   r   r   r=   rI   rF   r   r   s   @r   r   r     sE     MR-0EI	8S 886r    r   )-r   r   rL   r*   r   rh   collectionsr   r   PROTOCOL_TLSv1PROTOCOL_TLSv1_1PROTOCOL_TLSv1_2r   r   r   PROTOCOL_SSLv23r	   r   ImportErrortypingr
   r   r   r   r   r   	constantsr   errorsr   r   r   typesr   utilsr   r_   r   r   r   r   r/   r1   r   r   r   r    r   <module>r     s  > 
      ##''''L 3' 	   
 !m4H
 < ; ( G G ! !)W ) )%  U T4 T4n"
o "
JJ6_ J6A  s   A#C# #C-,C-