Skip to content

Commit 91e22e2

Browse files
Allow for the situation where the second part of the redirect packet
does not arrive before the first part has been parsed (#275).
1 parent 1191748 commit 91e22e2

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

src/oracledb/impl/thin/messages.pyx

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1804,7 +1804,8 @@ cdef class CommitMessage(Message):
18041804
cdef class ConnectMessage(Message):
18051805
cdef:
18061806
bytes connect_string_bytes
1807-
uint16_t connect_string_len
1807+
uint16_t connect_string_len, redirect_data_len
1808+
bint read_redirect_data_len
18081809
ConnectionCookie cookie
18091810
Description description
18101811
uint8_t packet_flags
@@ -1814,15 +1815,19 @@ cdef class ConnectMessage(Message):
18141815

18151816
cdef int process(self, ReadBuffer buf) except -1:
18161817
cdef:
1817-
uint16_t redirect_data_length, protocol_version, protocol_options
1818+
uint16_t protocol_version, protocol_options
18181819
const char_type *redirect_data
18191820
bytes db_uuid
18201821
if buf._current_packet.packet_type == TNS_PACKET_TYPE_REDIRECT:
1821-
buf.read_uint16(&redirect_data_length)
1822+
if not self.read_redirect_data_len:
1823+
buf.read_uint16(&self.redirect_data_len)
1824+
self.read_redirect_data_len = True
18221825
buf.wait_for_packets_sync()
1823-
redirect_data = buf._get_raw(redirect_data_length)
1824-
self.redirect_data = \
1825-
redirect_data[:redirect_data_length].decode()
1826+
redirect_data = buf._get_raw(self.redirect_data_len)
1827+
if self.redirect_data_len > 0:
1828+
self.redirect_data = \
1829+
redirect_data[:self.redirect_data_len].decode()
1830+
self.read_redirect_data_len = False
18261831
elif buf._current_packet.packet_type == TNS_PACKET_TYPE_ACCEPT:
18271832
buf.read_uint16(&protocol_version)
18281833
buf.read_uint16(&protocol_options)

0 commit comments

Comments
 (0)