def parse_handshake(self, packet): """Parse a MySQL Handshake-packet""" res = {} (packet, res["protocol"]) = utils.read_int(packet[4:], 1) (packet, res["server_version_original"]) = utils.read_string(packet, end=b"\x00") (packet, res["server_threadid"]) = utils.read_int(packet, 4) (packet, res["scramble"]) = utils.read_bytes(packet, 8) packet = packet[1:] # Filler 1 * \x00 (packet, res["capabilities"]) = utils.read_int(packet, 2) (packet, res["charset"]) = utils.read_int(packet, 1) (packet, res["server_status"]) = utils.read_int(packet, 2) packet = packet[13:] # Filler 13 * \x00 (packet, scramble_next) = utils.read_bytes(packet, 12) res["scramble"] += scramble_next return res
def parse_handshake(self, packet): """Parse a MySQL Handshake-packet""" res = {} (packet, res['protocol']) = utils.read_int(packet[4:], 1) (packet, res['server_version_original']) = utils.read_string( packet, end='\x00') (packet, res['server_threadid']) = utils.read_int(packet, 4) (packet, res['scramble']) = utils.read_bytes(packet, 8) packet = packet[1:] # Filler 1 * \x00 (packet, res['capabilities']) = utils.read_int(packet, 2) (packet, res['charset']) = utils.read_int(packet, 1) (packet, res['server_status']) = utils.read_int(packet, 2) packet = packet[13:] # Filler 13 * \x00 (packet, scramble_next) = utils.read_bytes(packet, 12) res['scramble'] += scramble_next return res
def get_exception(packet): """Returns an exception object based on the MySQL error Returns an exception object based on the MySQL error in the given packet. Returns an Error-Object. """ errno = errmsg = None if packet[4] != '\xff': raise ValueError("Packet is not an error packet") sqlstate = None try: packet = packet[5:] (packet, errno) = utils.read_int(packet, 2) if packet[0] != '\x23': # Error without SQLState errmsg = packet.decode('utf8') else: (packet, sqlstate) = utils.read_bytes(packet[1:], 5) sqlstate = sqlstate.decode('utf8') errmsg = packet.decode('utf8') except StandardError as err: return InterfaceError("Failed getting Error information (%r)" % err) else: return get_mysql_exception(errno, errmsg, sqlstate)
def test_read_bytes(self): """Read a number of bytes from a bufffer""" buf = "ABCDEFghijklm" readsize = 6 exp = "ghijklm" expsize = len(exp) try: (result, s) = utils.read_bytes(buf, readsize) except: self.fail("Failed reading bytes using read_bytes.") else: if result != exp or len(result) != expsize: self.fail("Wrong result. Expected: '%s' / %d, got '%s'/%d" %\ (exp, expsize, result, len(result)))
def test_read_bytes(self): """Read a number of bytes from a bufffer""" buf = b"ABCDEFghijklm" readsize = 6 exp = b"ghijklm" expsize = len(exp) try: (result, s) = utils.read_bytes(buf, readsize) except: self.fail("Failed reading bytes using read_bytes.") else: if result != exp or len(result) != expsize: self.fail("Wrong result. Expected: '%s' / %d, got '%s'/%d" %\ (exp, expsize, result, len(result)))
def test_read_bytes(self): """Read a number of bytes from a buffer""" buf = "ABCDEFghijklm" readsize = 6 exp = "ghijklm" expsize = len(exp) try: (result, _) = utils.read_bytes(buf, readsize) except: self.fail("Failed reading bytes using read_bytes.") else: if result != exp or len(result) != expsize: self.fail("Wrong result. Expected: '{0}' / {1}, got '{2}'/{3}". format((exp, expsize, result, len(result))))