zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
U
£ý°d)Wã@sJdZddlZddlZddlZddlZddlZddlmZzHddlZej    ej
ej dœZ e edƒrdejneje d<e edƒo|ejZWnek
r˜dZYnXdd    lmZmZmZmZmZmZd
d lmZd
d lmZmZmZd
d l m!Z!d
dl"m#Z#e$e%dœdd„Z&e'e(ee'dœdd„Z)Gdd„dƒZ*Gdd„de*ƒZ+Gdd„de*ƒZ,dS)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ÚreturncCs |jst|ƒS|j›d|j›S)z_Reformat the IOError error message
 
    This function reformats the IOError error message.
    ú )ÚerrnoÚstrÚstrerror)r©rúNd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\mysql/connector/network.pyÚ _strioerrorEsr)ÚbufÚpktnrrcCs†g}t|ƒ}t}||krX| dt d|¡|d|…¡||d…}t|ƒ}|d}q| t d|¡dd…t d|¡|¡|S)z0Prepare a packet for sending to the MySQL serveróÿÿÿú<BNrú<Iré)ÚlenrÚappendÚstructÚpack)rr ÚpktsÚpllenÚ    maxpktlenrrrÚ_prepare_packetsOs" 
*r,c
@s2eZdZdZddœdd„Zedœdd„Zedœdd    „Zedœd
d „Z    edœd d „Z
ddœdd„Z ddœdd„Z ddœdd„Z d'eeeeeddœdd„ZeZd(eeeeeddœdd„Zedœdd„ZeZeddœdd„Zeedœdd„Zeedd œd!d"„Zd)eeeeeeeeeedd$œd%d&„ZdS)*ÚBaseMySQLSocketaBase 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
    N©rcCs0d|_d|_d|_d|_tƒ|_d|_d|_dS)Néÿÿÿÿi )ÚsockÚ_connection_timeoutÚ_packet_numberÚ_compressed_packet_numberrÚ _packet_queueÚ server_hostZrecvsize©ÚselfrrrÚ__init__fszBaseMySQLSocket.__init__cCs"|jd|_|jdkrd|_|jS)zIncrements the packet numberréÿr)r2r6rrrÚnext_packet_numberps 
z"BaseMySQLSocket.next_packet_numbercCs"|jd|_|jdkrd|_|jS)z'Increments the compressed packet numberrr9r)r3r6rrrÚnext_compressed_packet_numberws 
z-BaseMySQLSocket.next_compressed_packet_numbercCst‚dS)zOpen the socketN©ÚNotImplementedErrorr6rrrÚopen_connection~szBaseMySQLSocket.open_connectioncCst‚dS)zGet the location of the socketNr<r6rrrÚ get_address‚szBaseMySQLSocket.get_addressc    Cs>z |j tj¡|j ¡|`Wnttfk
r8YnXdS)z&Shut down the socket before closing itN)r0ÚshutdownÚsocketÚ    SHUT_RDWRÚcloser4ÚAttributeErrorÚOSErrorr6rrrr@†s 
zBaseMySQLSocket.shutdownc    Cs0z|j ¡|`Wnttfk
r*YnXdS)zClose the socketN)r0rCr4rDrEr6rrrÚclose_connections
 
z BaseMySQLSocket.close_connectioncCs | ¡dS©N)r@r6rrrÚ__del__—szBaseMySQLSocket.__del__)rÚ packet_numberÚcompressed_packet_numberrc Cs°|}|dkr| ¡n||_t||jƒ}|D]~}z|j |¡Wq,tk
r|}ztd| ¡t|ƒfd|‚W5d}~XYq,t    k
r¨}ztdd|‚W5d}~XYq,Xq,dS)z Send packets to the MySQL serverNé©rÚvalueséÖ©r)
r:r2r,r0ÚsendallÚIOErrorrr?rrD)r7rrIrJÚ_ÚpacketsÚpacketrrrrÚ
send_plainšs"
 ÿþzBaseMySQLSocket.send_plainc Csò|dkr| ¡n||_|dkr*| ¡n||_|j}t|ƒ}g}t}||kršt||ƒ}d |¡}    ~t     |    dd…¡}
t
  dt|
ƒ¡dd…t
  d|j¡d} |  | |
¡|    dd…}    t|    ƒ}| ¡||kr>t     |    d|…¡}
t
  dt|
ƒ¡dd…t
  d|j¡d    } |  | |
¡|    |d…}    t|    ƒ}| ¡qÌ|    r–t     |    ¡}
t
  dt|
ƒ¡dd…t
  d|j¡t
  d|¡dd…} |  | |
¡~    nÊt
  d|¡dd…t
  d|¡|} t| ƒ}|d
kr t     | ¡}
|  t
  dt|
ƒ¡dd…t
  d|j¡t
  d|¡dd…|
¡nDt
  d|¡dd…t
  d|j¡t
  dd¡dd…} |  | | ¡|D]„} z|j  | ¡Wnltk
rº}ztd | ¡t|ƒfd |‚W5d}~XYn0tk
rè}ztd d|‚W5d}~XYnXqhdS)z+Send compressed packets to the MySQL serverNóé@r#rr$r"s@r!é2rKrLrNrO)r:r2r;r3r%rr,ÚjoinÚzlibÚcompressr'r(r&r0rPrQrr?rrD)r7rrIrJr r*Zzpktsr+r)ZtmpbufZzbufÚheaderÚpktZ
zip_packetrrrrÚsend_compressed´sž
 
 
 
 
 ÿþÿ 
 ÿþÿ 
 
 ÿþÿ$
 
 ÿþýÿ ÿþÿÿþzBaseMySQLSocket.send_compressedc    
CszØtdƒ}d}|dkrF|j d|¡}|s4tdd‚||7}t|ƒ}q|d|_t d|dd…d¡d}|}| t|ƒ¡t    |ƒ}|dd    …}|rÔ|j 
||¡}|dkr¾|dkr¾tdd‚||d    …}||8}q’|WSt k
r}zt d
|  ¡t|ƒfd |‚W5d    }~XYnXd    S) z%Receive packets from the MySQL serverrVrééÝrOr$r#óNrKrL)Ú    bytearrayr0Úrecvrr%r2r'ÚunpackÚextendÚ
memoryviewÚ    recv_intorQrr?r)    r7rTZ
packet_lenÚchunkZ payload_lenÚrestZ packet_viewÚreadrrrrÚ
recv_plains:
 
 
 
 
ÿþzBaseMySQLSocket.recv_plain)Ú packet_bunchrcCsN|rJt d|dd…d¡d}|j |d|d…¡||dd…}qdS)zSplit compressed payloadr#rr$rar_N)r'rdr4r&)r7rlÚpayload_lengthrrrÚ_split_zipped_payload+sz%BaseMySQLSocket._split_zipped_payloadc
CsFz|j ¡}|d|_|WStk
r.YnXtdƒ}g}z`|j d¡}|rrt|ƒdkrr||7}|j d¡}qL|rœt|ƒdkrŽtdd‚t     
d|dd…d    ¡d}|d|_ t     
d|d
d…d    ¡d}t |ƒ}t|ƒ|kr|j |t|ƒ¡}|s
tdd‚||}qØ|dkrB|  |¡|j ¡}|d|_|WS| ||f¡|d kr^qœt dƒ}|j d¡}|rrt|ƒdkrr||7}|j d¡}qrqrWn>tk
rÜ}    ztd | ¡t|    ƒfd |    ‚W5d}    ~    XYnXt dƒ}
|D]\}} |
t | ¡7}
qê|  |
¡~
z|j ¡}|d|_|WStk
r@YnXdS)z0Receive compressed packets from the MySQL serverr$rVrér`rOr#rrar_rWrKrLN)r4Úpopleftr2Ú
IndexErrorrbr0rcr%rr'rdr3rrnr&rQrr?rrZÚ
decompress) r7r]r\rSZabyteZzip_payload_lengthrmZ zip_payloadrhrÚtmpÚpayloadrrrÚrecv_compressed2sr
 
 
 
 
 
 
 
 
 
 
 ÿþ 
 
 
zBaseMySQLSocket.recv_compressed)ÚtimeoutrcCs||_|jr|j |¡dS)zSet the connection timeoutN)r1r0Ú
settimeout)r7rvrrrÚset_connection_timeout~sz&BaseMySQLSocket.set_connection_timeoutF)ÚcaÚcertÚkeyÚ verify_certÚverify_identityÚ cipher_suitesÚ tls_versionsrc Cs¾|jstdd‚zÔ|r tj}n|r,tj}ntj}|dks>|sRt ¡}    |sèd|    _n–|jdd|d}
t    s†|
dkr†t
|ƒd    kr†|d    }
t |
} t  | ¡}    |
dkrèd
|kr¸|    j tjO_ d |krÐ|    j tjO_ d |krè|    j tjO_ d|    _||    _|     ¡|rVz|     |¡WnDttjfk
rT} z|j ¡td | ›ƒ| ‚W5d} ~ XYnX|r²z|     ||¡WnDttjfk
r°} z|j ¡td| ›ƒ| ‚W5d} ~ XYnX|rÂ|     |¡t|dƒrä|    j|j|jd|_n|     |j¡|_|räd|    _|jr|jgng} tjdkrV|jdkrVddg} t |j¡}|   |dg|d    ¡d}g}| D]\}zt !|j "¡|¡Wn4tj#k
r°} z| $t%| ƒ¡W5d} ~ XYn Xd}qÀqb|sä|j ¡tdd &|¡›ƒ‚WnÒt'k
r} zt(dƒ| ‚W5d} ~ XYn¦tjtfk
rV} ztd| )¡t*| ƒfd| ‚W5d} ~ XYndtj#k
rˆ} ztt%| ƒƒ| ‚W5d} ~ XYn2t+k
r¸} ztt%| ƒƒ| ‚W5d} ~ XYnXdS)zSwitch the socket to use SSLirONFT)ÚreverserrrrrrzInvalid CA Certificate: zInvalid Certificate/Key: r5)Úserver_hostnameÚntÚ    localhostú    127.0.0.1z"Unable to verify server identity: z, z&Python installation has no SSL supportrKrL),r0rÚ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_locationsrQÚSSLErrorrCÚload_cert_chainÚ set_ciphersÚhasattrÚ wrap_socketr5ÚosÚnamerAÚ gethostbyaddrreÚmatch_hostnameÚ getpeercertÚCertificateErrorr&rrYÚ    NameErrorrr?rr=)r7ryrzr{r|r}r~rÚ    cert_reqsÚcontextZ tls_versionZ ssl_protocolrZ    hostnamesÚaliasesZ match_foundZerrsÚhostnamerrrÚ switch_to_ssl„s® 
  ÿþ
ý
 
"
"
 ÿ
  
 
ÿÿþzBaseMySQLSocket.switch_to_ssl)NN)NN)FFNN)Ú__name__Ú
__module__Ú __qualname__Ú__doc__r8Úintr:r;r    r>r?r@rFrHÚbytesr rUÚsendr^rbrkrcrnrurxrÚboolrr r¦rrrrr-]sZ
    üû üû S"L ø
÷r-csXeZdZdZdeddœ‡fdd„ Zedœdd    „Zddœd
d „Zeedd œd d„Z    ‡Z
S)ÚMySQLUnixSocketzoMySQL socket class using UNIX sockets
 
    Opens a connection through the UNIX socket of the MySQL Server.
    ú/tmp/mysql.sockN)Ú unix_socketrcstƒ ¡||_dSrG)Úsuperr8r±)r7r±©Ú    __class__rrr8ús
zMySQLUnixSocket.__init__r.cCs|jSrG)r±r6rrrr?þszMySQLUnixSocket.get_addressc
Cs¢z2t tjtj¡|_|j |j¡|j |j¡Wnjtk
rn}zt    d| 
¡t |ƒfd|‚W5d}~XYn0t k
rœ}zt    t |ƒƒ|‚W5d}~XYnXdS)NiÒrL)rAÚAF_UNIXÚ SOCK_STREAMr0rwr1Úconnectr±rQrr?rÚ    Exceptionr)r7rrrrr>s ÿÿþzMySQLUnixSocket.open_connection)ÚargsÚkwargsrcOst dt¡dS)zSwitch the socket to use SSL.z2SSL is disabled when using unix socket connectionsN)ÚwarningsÚwarnÚWarning)r7r¹rºrrrr¦sþzMySQLUnixSocket.switch_to_ssl)r°) r§r¨r©rªrr8r?r>r    r¦Ú __classcell__rrr³rr¯ôsþr¯csJeZdZdZdeeeddœ‡fdd„ Zed    œd
d „Zdd    œd d „Z    ‡Z
S)ÚMySQLTCPSocketzXMySQL socket class using TCP/IP
 
    Opens a TCP/IP connection to the MySQL Server.
    r„éê FN)ÚhostÚportÚ
force_ipv6rcs&tƒ ¡||_||_||_d|_dS)Nr)r²r8r5Ú server_portrÃÚ_family)r7rÁrÂrÃr³rrr8s
 
zMySQLTCPSocket.__init__r.cCs|j›d|j›S)Nú:)r5rÄr6rrrr?(szMySQLTCPSocket.get_addressc    
Csˆd}zt |j|jdtjtj¡}|D]6}|jrD|dtjkrD|}q\|dtjkr$|}q\q$|jr~|ddkr~t    d|j›ƒ‚|ddkr’|d}Wn<t
k
rÐ}zt    d|  ¡t |ƒfd|‚W5d}~XYnX|\|_ }}}}z0t |j ||¡|_|j |j¡|j |¡Wnpt
k
rR}z t    d|j|jt |ƒfd|‚W5d}~XYn2tk
r‚}ztt|ƒƒ|‚W5d}~XYnXdS)z.Open the TCP/IP connection to the MySQL server)NNNNNrNzNo IPv6 address found for iÓrL)rAÚ getaddrinfor5rÄr¶ÚSOL_TCPrÃÚAF_INET6ÚAF_INETrrQr?rrÅr0rwr1r·r¸rr)    r7ZaddrinfoZ    addrinfosÚinforÚsocktypeÚprotorRZsockaddrrrrr>+sZ ÷
û  ÿþýþùzMySQLTCPSocket.open_connection)r„rÀF) r§r¨r©rªrr«r®r8r?r>r¾rrr³rr¿sÿþ    r¿)-rªr›rAr'r»rZÚ collectionsrr…ÚPROTOCOL_TLSv1ÚPROTOCOL_TLSv1_1ÚPROTOCOL_TLSv1_2rr™rÚPROTOCOL_SSLv23rrŒÚ ImportErrorÚtypingr    r
r r r rÚ    constantsrÚerrorsrrrÚtypesrÚutilsrrQrrr¬r«r,r-r¯r¿rrrrÚ<module>s@ ýÿý
    
%