U eJ@sdZddlmZddlZddlZddlZddlZz ddlZWn YnXddlm Z m Z ddl m Z m Z mZddZd d ZGd d d eZGd ddeZGdddeZdS)zGModule implementing low-level socket communication with MySQL servers. )dequeN) constantserrors)PY2init_bytearray struct_unpackcCs |jst|Sdj|j|jdS)z_Reformat the IOError error message This function reformats the IOError error message. z{errno} {strerr})errnoZstrerr)r strformatstrerror)errrl/opt/hc_python/lib64/python3.8/site-packages/../../../lib/python3.8/site-packages/mysql/connector/network.py _strioerror+srcCsg}t|}tj}||krZ|dtd||d|||d}t|}|d}q|td|ddtd|||S)z0Prepare a packet for sending to the MySQL servertjd dYnXqdS)z+Send compressed packets to the MySQL serverN@rrrrs@r2r8r9r;r<)r+r$r,r%rrrrr bytearrayr>joinzlibcompressrrrr"r=r?rr@r0rr6)r(rrArBrrZzpktsrrZtmpbufpktZzbufheaderZ zip_packetr rrrsend_compresseds                 zBaseMySQLSocket.send_compressedc CsJztd}d}|dkrJ|jd|}|s8tjdd||7}t|}q|d|_trzt dt |dddd}nt d|dddd}|}| t|t |}|dd }|r|j||}|dkr|dkrtjdd||d }||8}q|WStk rD}ztjd |t|fd W5d }~XYnXd S) %Receive packets from the MySQL serverrFrr<rrNr8r9)rIr"recvrInterfaceErrorrr$rr unpack_fromr>unpackextend memoryview recv_intor?r@r0r) r(rDZ packet_lenchunk payload_lenrestZ packet_viewreadr rrr recv_plainsD       zBaseMySQLSocket.recv_plainc Csztd}d}|dkrH|jd|}|s6tjdd||7}t|}q|d|_td|dddd}|}td}|dkr|j|}|stjdd||7}|t|}qx||WSt k r}ztj d | t |fd W5d }~XYnXd S) rPrFrrQrRr<rrrSr8r9N) rIr"rTrrUrr$rrr?r@r0r)r(rNZ header_lenr[r\r]payloadr rrrrecv_py26_plains2      zBaseMySQLSocket.recv_py26_plainr)rbcCsp|rltr&td|dddd}ntd|dddd}|j|d|d||dd}qdS)zSplit compressed payloadrrrrSrQN)rrrVrWr&r)r(Z packet_bunchpayload_lengthrrr_split_zipped_payload5sz%BaseMySQLSocket._split_zipped_payloadc Cshz|j}|d|_|WStk r.YnXtd}g}zh|jd}|rrt|dkrr||7}|jd}qL|rt|dkrtj ddt d|ddd d}|d|_ t d|d dd d}t |}t||kr|j|t|}t|dkrtj dd||}q|dkrJ| ||j}|d|_|WS|||f|d krfqt d}|jd}|rrt|dkrr||7}|jd}qzqrWn>tk r} ztjd |t| fd W5d} ~ XYnXt d} |D]2\}} tr| tt| 7} n| t| 7} q| | ~ z|j}|d|_|WStk rbYnXdS)z0Receive compressed packets from the MySQL serverrrFrrRr<rrrSrQrGr8r9N)r&popleftr$ IndexErrorrIr"rTrrrUrr%rrerr?r@r0rrrK decompressr>) r(rMrNrCZabyteZzip_payload_lengthrdZ zip_payloadr[r tmpr`rrrrecv_compressedBs|                  zBaseMySQLSocket.recv_compressedcCs ||_dS)zSet the connection timeoutN)r#)r(timeoutrrrset_connection_timeoutsz&BaseMySQLSocket.set_connection_timeoutFc Cs|jstjddz@|r tj}ntj}tj|j||||dtj|d|_|jWnt k rpt dYnptj t fk r}ztjd| t|fdW5d}~XYn0tk r}ztt|W5d}~XYnXdS) zSwitch the socket to use SSLir<F)keyfilecertfileca_certs cert_reqsdo_handshake_on_connect ssl_versionciphersz&Python installation has no SSL supportr8r9N)r"rrUssl CERT_REQUIRED CERT_NONE wrap_socketPROTOCOL_TLSv1 do_handshake NameErrorZNotSupportedErrorSSLErrorr?r0rr.r )r(cacertkeyZ verify_certcipherrqr rrr switch_to_ssls8 zBaseMySQLSocket.switch_to_ssl)NN)NN)FN)__name__ __module__ __qualname____doc__r)propertyr+r,r/r0r1r7rEsendrOr_rasys version_inforTrerkrmrrrrrr Es6     U& Or cs2eZdZdZd fdd ZddZddZZS) MySQLUnixSocketzoMySQL socket class using UNIX sockets Opens a connection through the UNIX socket of the MySQL Server. /tmp/mysql.sockcstt|||_dSN)superrr) unix_socket)r(r __class__rrr)szMySQLUnixSocket.__init__cCs|jSr)rr'rrrr0szMySQLUnixSocket.get_addressc Csz2ttjtj|_|j|j|j|jWnjtk rn}zt j d| t |fdW5d}~XYn0t k r}zt t|W5d}~XYnXdS)Nir9)r2AF_UNIX SOCK_STREAMr" settimeoutr#connectrr?rrUr0r Exceptionr )r(r rrrr/szMySQLUnixSocket.open_connection)rrrrrr)r0r/ __classcell__rrrrrsrcs2eZdZdZd fdd ZddZd d ZZS) MySQLTCPSocketzXMySQL socket class using TCP/IP Opens a TCP/IP connection to the MySQL Server. 127.0.0.1 Fcs*tt|||_||_||_d|_dS)Nr)rrr) server_host server_port force_ipv6_family)r(hostportrrrrr)s zMySQLTCPSocket.__init__cCsd|j|jS)Nz{0}:{1})r rrr'rrrr0szMySQLTCPSocket.get_addressc Csdgd}zt|j|jdtjtj}|D]8}|jrL|dtjkrL|}qdq*|dtjkr*|}qdq*|jr|ddkrt d |j|ddkr|d}Wn<t k r}zt j d| t|fdW5d}~XYnX|\|_}}}}z0t|j|||_|j|j|j|Wnnt k rZ}zt j d| t|fdW5d}~XYn2tk r}zt t|W5d}~XYnXdS)z7Open the TCP/IP connection to the MySQL server NrzNo IPv6 address found for {0}ir9)r2 getaddrinforrrSOL_TCPrAF_INET6AF_INETrrUr r?r0rrr"rr#rrr@r ) r(addrinfo addrinfosinfor socktypeproto_sockaddrrrrr/sL    zMySQLTCPSocket.open_connection)rrFrrrrrrsr)r collectionsrr2rrrKrurrZcatch23rrrrrobjectr rrrrrrs$   p