From: <di...@us...> - 2012-01-06 11:24:45
|
Revision: 53813 http://firebird.svn.sourceforge.net/firebird/?rev=53813&view=rev Author: dimitr Date: 2012-01-06 11:24:37 +0000 (Fri, 06 Jan 2012) Log Message: ----------- Removed support for the remote protocol versions prior to v10. Modified Paths: -------------- firebird/trunk/src/remote/client/interface.cpp firebird/trunk/src/remote/inet.cpp firebird/trunk/src/remote/os/win32/wnet.cpp firebird/trunk/src/remote/os/win32/xnet.cpp firebird/trunk/src/remote/parse_proto.h firebird/trunk/src/remote/parser.cpp firebird/trunk/src/remote/protocol.cpp firebird/trunk/src/remote/protocol.h firebird/trunk/src/remote/server/server.cpp Modified: firebird/trunk/src/remote/client/interface.cpp =================================================================== --- firebird/trunk/src/remote/client/interface.cpp 2012-01-05 03:22:12 UTC (rev 53812) +++ firebird/trunk/src/remote/client/interface.cpp 2012-01-06 11:24:37 UTC (rev 53813) @@ -46,7 +46,6 @@ #include "../jrd/ibase.h" #include "../common/ThreadStart.h" #include "../jrd/license.h" -#include "../common/sdl.h" #include "../remote/inet_proto.h" #include "../remote/merge_proto.h" #include "../remote/parse_proto.h" @@ -55,7 +54,6 @@ #include "../common/cvt.h" #include "../yvalve/gds_proto.h" #include "../common/isc_f_proto.h" -#include "../common/sdl_proto.h" #include "../common/classes/ClumpletWriter.h" #include "../common/config/config.h" #include "../common/utils_proto.h" @@ -70,11 +68,6 @@ #include "../auth/trusted/AuthSspi.h" -// hvlad: following code registering plugins is temporary and should be -// moved at appropriate places - -#include "../auth/trusted/AuthSspi.h" - #ifdef HAVE_UNISTD_H #include <unistd.h> #endif @@ -828,13 +821,6 @@ rem_port* port = rdb->rdb_port; RefMutexGuard portGuard(*port->port_sync); - // Make sure protocol supports action - - if (port->port_protocol < PROTOCOL_VERSION6) - { - unsupported(); - } - // Tell the remote server to cancel it and delete it from the list send_cancel_event(rvnt); } @@ -942,12 +928,6 @@ rem_port* port = rdb->rdb_port; RefMutexGuard portGuard(*port->port_sync); - // Make sure protocol support action - - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION4) { - unsupported(); - } - release_object(status, rdb, op_commit_retaining, transaction->rtr_id); } catch (const Exception& ex) @@ -1037,10 +1017,6 @@ // Parse the request in case blr_d_float must be converted to blr_double const UCHAR* new_blr = blr; - AutoPtr<const UCHAR> delete_blr; - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION5) { - delete_blr = new_blr = PARSE_prepare_messages(blr, blr_length); - } // Make up a packet for the remote guy @@ -1128,23 +1104,18 @@ CHECK_HANDLE(transaction, isc_bad_trans_handle); PACKET* packet = &rdb->rdb_packet; - packet->p_operation = op_create_blob; + packet->p_operation = op_create_blob2; P_BLOB* p_blob = &packet->p_blob; p_blob->p_blob_transaction = transaction->rtr_id; + p_blob->p_blob_bpb.cstr_length = bpb_length; + fb_assert(!p_blob->p_blob_bpb.cstr_allocated || + p_blob->p_blob_bpb.cstr_allocated < p_blob->p_blob_bpb.cstr_length); + // CVC: Should we ensure here that cstr_allocated < bpb_length??? + // Otherwise, xdr_cstring() calling alloc_string() to decode would + // cause memory problems on the client side for SS, as the client + // would try to write to the application's provided R/O buffer. + p_blob->p_blob_bpb.cstr_address = bpb; - if (rdb->rdb_port->port_protocol >= PROTOCOL_VERSION4) - { - packet->p_operation = op_create_blob2; - p_blob->p_blob_bpb.cstr_length = bpb_length; - fb_assert(!p_blob->p_blob_bpb.cstr_allocated || - p_blob->p_blob_bpb.cstr_allocated < p_blob->p_blob_bpb.cstr_length); - // CVC: Should we ensure here that cstr_allocated < bpb_length??? - // Otherwise, xdr_cstring() calling alloc_string() to decode would - // cause memory problems on the client side for SS, as the client - // would try to write to the application's provided R/O buffer. - p_blob->p_blob_bpb.cstr_address = bpb; - } - try { send_and_receive(status, rdb, packet); @@ -1343,10 +1314,6 @@ Rtr* transaction = remoteTransaction(apiTra); CHECK_HANDLE(transaction, isc_bad_trans_handle); - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION4) { - unsupported(); - } - // Make up a packet for the remote guy PACKET* packet = &rdb->rdb_packet; @@ -1466,11 +1433,6 @@ rem_port* port = rdb->rdb_port; RefMutexGuard portGuard(*port->port_sync); - // Make sure protocol supports the action - - if (port->port_protocol < PROTOCOL_VERSION8) - unsupported(); - try { release_object(status, rdb, op_drop_database, rdb->rdb_id); @@ -1530,11 +1492,6 @@ rem_port* port = rdb->rdb_port; RefMutexGuard portGuard(*port->port_sync); - // Make sure protocol support action - - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION7) - unsupported(); - Rsr* statement = NULL; if (rdb->rdb_port->port_flags & PORT_lazy) { @@ -1624,14 +1581,6 @@ CHECK_HANDLE(transaction, isc_bad_trans_handle); } - // bag it if the protocol doesn't support it... - - if (port->port_protocol < PROTOCOL_VERSION7 || - (out_msg_length && port->port_protocol < PROTOCOL_VERSION8)) - { - unsupported(); - } - // 24-Mar-2004 Nickolay Samofatov // Unconditionally deallocate existing formats that are left from // previous executions (possibly with different statement if @@ -1832,22 +1781,6 @@ reset(status); - // bag it if the protocol doesn't support it... - - if (port->port_protocol < PROTOCOL_VERSION7 || - ((in_msg_length || out_msg_length) && port->port_protocol < PROTOCOL_VERSION8)) - { - unsupported(); - } - - // If the server is pre-6.0, do not send anything if the client dialect is 3 and - // there is a SQLDA. This will cause the older server to crash - if (port->port_protocol < PROTOCOL_VERSION10 && - (in_msg_length || out_msg_length) && dialect > SQL_DIALECT_V5) - { - unsupported(); - } - Rsr* statement = port->port_statement; if (!statement) { statement = port->port_statement = new Rsr; @@ -2000,12 +1933,6 @@ RefMutexGuard portGuard(*port->port_sync); - // make sure the protocol supports it - - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION7) { - unsupported(); - } - // On first fetch, clear the end-of-stream flag & reset the message buffers if (!statement->rsr_flags.test(Rsr::FETCHED)) @@ -2244,12 +2171,6 @@ rem_port* port = rdb->rdb_port; RefMutexGuard portGuard(*port->port_sync); - // make sure the protocol supports it - - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION7) { - unsupported(); - } - fb_assert(statement->haveException() == 0); statement->clearException(); @@ -2343,12 +2264,6 @@ RefMutexGuard portGuard(*port->port_sync); - // make sure the protocol supports it - - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION8) { - unsupported(); - } - // Free existing format unconditionally. // This is also related to SF#919246 delete statement->rsr_bind_format; @@ -2481,13 +2396,6 @@ REMOTE_reset_statement(statement); - // if we're less than protocol 7, the remote server doesn't support - // DSQL, so we're done... - - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION7) { - unsupported(); - } - // set up the packet for the other guy... PACKET* packet = &rdb->rdb_packet; @@ -2608,12 +2516,6 @@ statement->raiseException(); - // make sure the protocol supports it - - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION7) { - unsupported(); - } - if (!cursor) { // Return CURSOR unknown error @@ -2691,11 +2593,6 @@ statement->raiseException(); - // make sure the protocol supports it - - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION7) - unsupported(); - if (!metadata.fillFromCache(itemsLength, items, bufferLength, buffer)) { info(status, rdb, op_info_sql, statement->rsr_id, 0, @@ -3093,17 +2990,9 @@ Rtr* transaction = remoteTransaction(apiTra); CHECK_HANDLE(transaction, isc_bad_trans_handle); - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION4) { - unsupported(); - } // Parse the sdl in case blr_d_float must be converted to blr_double const UCHAR* new_sdl = sdl; - AutoPtr<const UCHAR> delete_sdl; // To release memory if allocated by SDL_prepare_slice - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION6) - { - delete_sdl = new_sdl = SDL_prepare_slice(sdl, sdl_length); - } // CVC: Modified this horrible idea: don't touch input parameters! // The modified (perhaps) sdl is send to the remote connection. The @@ -3176,24 +3065,19 @@ CHECK_HANDLE(transaction, isc_bad_trans_handle); PACKET* packet = &rdb->rdb_packet; - packet->p_operation = op_open_blob; + packet->p_operation = op_open_blob2; P_BLOB* p_blob = &packet->p_blob; p_blob->p_blob_transaction = transaction->rtr_id; p_blob->p_blob_id = *id; + p_blob->p_blob_bpb.cstr_length = bpb_length; + fb_assert(!p_blob->p_blob_bpb.cstr_allocated || + p_blob->p_blob_bpb.cstr_allocated < p_blob->p_blob_bpb.cstr_length); + // CVC: Should we ensure here that cstr_allocated < bpb_length??? + // Otherwise, xdr_cstring() calling alloc_string() to decode would + // cause memory problems on the client side for SS, as the client + // would try to write to the application's provided R/O buffer. + p_blob->p_blob_bpb.cstr_address = bpb; - if (rdb->rdb_port->port_protocol >= PROTOCOL_VERSION4) - { - packet->p_operation = op_open_blob2; - p_blob->p_blob_bpb.cstr_length = bpb_length; - fb_assert(!p_blob->p_blob_bpb.cstr_allocated || - p_blob->p_blob_bpb.cstr_allocated < p_blob->p_blob_bpb.cstr_length); - // CVC: Should we ensure here that cstr_allocated < bpb_length??? - // Otherwise, xdr_cstring() calling alloc_string() to decode would - // cause memory problems on the client side for SS, as the client - // would try to write to the application's provided R/O buffer. - p_blob->p_blob_bpb.cstr_address = bpb; - } - send_and_receive(status, rdb, packet); // CVC: It's not evident to me why these two lines that I've copied @@ -3246,17 +3130,6 @@ rem_port* port = rdb->rdb_port; RefMutexGuard portGuard(*port->port_sync); - // Handle historical version - - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION4) - { - if (msg_length) - { - unsupported(); - } - release_object(status, rdb, op_prepare, transaction->rtr_id); - } - PACKET* packet = &rdb->rdb_packet; packet->p_operation = op_prepare2; packet->p_prep.p_prep_transaction = transaction->rtr_id; @@ -3376,18 +3249,9 @@ Rtr* transaction = remoteTransaction(apiTra); CHECK_HANDLE(transaction, isc_bad_trans_handle); - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION4) { - unsupported(); - } - // Parse the sdl in case blr_d_float must be converted to blr_double const UCHAR* new_sdl = sdl; - AutoPtr<const UCHAR> delete_sdl; // To release memory if allocated by SDL_prepare_slice - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION6) - { - delete_sdl = new_sdl = SDL_prepare_slice(sdl, sdl_length); - } // CVC: Modified this horrible idea: don't touch input parameters! // The modified (perhaps) sdl is send to the remote connection. The @@ -3459,12 +3323,6 @@ PACKET* packet = &rdb->rdb_packet; - // Make sure protocol support action - - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION4) { - unsupported(); - } - // If there isn't a auxiliary asynchronous port, make one now if (!port->port_async) @@ -3969,10 +3827,6 @@ rem_port* port = rdb->rdb_port; RefMutexGuard portGuard(*port->port_sync); - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION6) { - unsupported(); - } - PACKET* packet = &rdb->rdb_packet; packet->p_operation = op_seek_blob; P_SEEK* seek = &packet->p_seek; @@ -4088,13 +3942,6 @@ RefMutexGuard portGuard(*port->port_sync); Rdb* rdb = port->port_context; - // make sure the protocol supports it - if (port->port_protocol < PROTOCOL_VERSION8) - { - disconnect(port); - unsupported(); - } - // The client may have set a parameter for dummy_packet_interval. Add that to the // the SPB so the server can pay attention to it. Note: allocation code must // ensure sufficient space has been added. @@ -4177,12 +4024,6 @@ rem_port* port = rdb->rdb_port; RefMutexGuard portGuard(*port->port_sync); - // make sure the protocol supports it - - if (port->port_protocol < PROTOCOL_VERSION8) { - unsupported(); - } - release_object(status, rdb, op_service_detach, rdb->rdb_id); disconnect(port); rdb = NULL; @@ -4220,12 +4061,6 @@ rem_port* port = rdb->rdb_port; RefMutexGuard portGuard(*port->port_sync); - // make sure the protocol supports it - - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION8) { - unsupported(); - } - ClntAuthBlock cBlock(NULL); cBlock.loadServiceDataFrom(port); @@ -4264,13 +4099,6 @@ rem_port* port = rdb->rdb_port; RefMutexGuard portGuard(*port->port_sync); - // make sure the protocol supports it - - if (rdb->rdb_port->port_protocol < PROTOCOL_VERSION8) - { - unsupported(); - } - svcstart(status, rdb, op_service_start, rdb->rdb_id, 0, spbLength, spb); } catch (const Exception& ex) @@ -4326,8 +4154,7 @@ message->msg_address = const_cast<unsigned char*>(msg); PACKET* packet = &rdb->rdb_packet; - packet->p_operation = (rdb->rdb_port->port_protocol < PROTOCOL_VERSION8) ? - op_start_and_send : op_start_send_and_receive; + packet->p_operation = op_start_send_and_receive; P_DATA* data = &packet->p_data; data->p_data_request = request->rrq_id; data->p_data_transaction = transaction->rtr_id; @@ -4348,8 +4175,7 @@ request->rrq_rtr = transaction; - if (rdb->rdb_port->port_protocol >= PROTOCOL_VERSION8 && - packet->p_operation == op_response_piggyback) + if (packet->p_operation == op_response_piggyback) { receive_after_start(request, packet->p_resp.p_resp_object); } @@ -4398,8 +4224,7 @@ REMOTE_reset_request(request, 0); PACKET* packet = &rdb->rdb_packet; - packet->p_operation = (rdb->rdb_port->port_protocol < PROTOCOL_VERSION8) ? - op_start : op_start_and_receive; + packet->p_operation = op_start_and_receive; P_DATA* data = &packet->p_data; data->p_data_request = request->rrq_id; data->p_data_transaction = transaction->rtr_id; @@ -4412,8 +4237,7 @@ request->rrq_rtr = transaction; - if (rdb->rdb_port->port_protocol >= PROTOCOL_VERSION8 && - packet->p_operation == op_response_piggyback) + if (packet->p_operation == op_response_piggyback) { receive_after_start(request, packet->p_resp.p_resp_object); } @@ -4498,12 +4322,6 @@ Rtr* transaction = remoteTransaction(apiTra); CHECK_HANDLE(transaction, isc_bad_trans_handle); - // bag it if the protocol doesn't support it... - - if (port->port_protocol < PROTOCOL_VERSION8) { - unsupported(); - } - Rpr* procedure = port->port_rpr; if (!procedure) { procedure = port->port_rpr = new Rpr; @@ -5112,10 +4930,7 @@ // so we have to clear the wire before the response can be received // In addtion to the above we grab all the records in case of XNET as // we need to clear the queue - bool clear_queue = false; - if (id != statement->rsr_id || port->port_type == rem_port::XNET) { - clear_queue = true; - } + const bool clear_queue = (id != statement->rsr_id || port->port_type == rem_port::XNET); statement->rsr_flags.set(Rsr::FETCHED); while (true) Modified: firebird/trunk/src/remote/inet.cpp =================================================================== --- firebird/trunk/src/remote/inet.cpp 2012-01-05 03:22:12 UTC (rev 53812) +++ firebird/trunk/src/remote/inet.cpp 2012-01-06 11:24:37 UTC (rev 53813) @@ -434,10 +434,6 @@ static in_addr get_bind_address(); static int get_host_address(const char* name, in_addr* const host_addr_arr, const int arr_size); -static void copy_p_cnct_repeat_array( p_cnct::p_cnct_repeat* pDest, - const p_cnct::p_cnct_repeat* pSource, - size_t nEntries); - static int inet_destroy(XDR*); static void inet_gen_error(bool, rem_port*, const Firebird::Arg::StatusVector& v); static bool_t inet_getbytes(XDR*, SCHAR *, u_int); @@ -595,45 +591,24 @@ cnct->p_cnct_user_id.cstr_length = (USHORT) user_id.getBufferLength(); cnct->p_cnct_user_id.cstr_address = user_id.getBuffer(); - static const p_cnct::p_cnct_repeat protocols_to_try1[] = + static const p_cnct::p_cnct_repeat protocols_to_try[] = { - REMOTE_PROTOCOL(PROTOCOL_VERSION8, ptype_lazy_send, 1), - REMOTE_PROTOCOL(PROTOCOL_VERSION10, ptype_lazy_send, 2), - REMOTE_PROTOCOL(PROTOCOL_VERSION11, ptype_lazy_send, 3), - REMOTE_PROTOCOL(PROTOCOL_VERSION12, ptype_lazy_send, 4), - REMOTE_PROTOCOL(PROTOCOL_VERSION13, ptype_lazy_send, 5) + REMOTE_PROTOCOL(PROTOCOL_VERSION10, ptype_lazy_send, 1), + REMOTE_PROTOCOL(PROTOCOL_VERSION11, ptype_lazy_send, 2), + REMOTE_PROTOCOL(PROTOCOL_VERSION12, ptype_lazy_send, 3), + REMOTE_PROTOCOL(PROTOCOL_VERSION13, ptype_lazy_send, 4) }; + fb_assert(FB_NELEM(protocols_to_try) <= FB_NELEM(cnct->p_cnct_versions)); + cnct->p_cnct_count = FB_NELEM(protocols_to_try); - cnct->p_cnct_count = FB_NELEM(protocols_to_try1); + for (size_t i = 0; i < cnct->p_cnct_count; i++) { + cnct->p_cnct_versions[i] = protocols_to_try[i]; + } - copy_p_cnct_repeat_array(cnct->p_cnct_versions, protocols_to_try1, cnct->p_cnct_count); - // Try connection using first set of protocols rem_port* port = inet_try_connect(packet, rdb, file_name, node_name, dpb); - if (packet->p_operation == op_reject && !uv_flag) - { - disconnect(port); - - // try again with next set of known protocols - - cnct->p_cnct_user_id.cstr_length = (USHORT) user_id.getBufferLength(); - cnct->p_cnct_user_id.cstr_address = user_id.getBuffer(); - - static const p_cnct::p_cnct_repeat protocols_to_try2[] = - { - REMOTE_PROTOCOL(PROTOCOL_VERSION6, ptype_batch_send, 1), - REMOTE_PROTOCOL(PROTOCOL_VERSION7, ptype_lazy_send, 2) - }; - - cnct->p_cnct_count = FB_NELEM(protocols_to_try2); - - copy_p_cnct_repeat_array(cnct->p_cnct_versions, protocols_to_try2, cnct->p_cnct_count); - - port = inet_try_connect(packet, rdb, file_name, node_name, dpb); - } - P_ACPT* accept = NULL; switch (packet->p_operation) { @@ -1964,20 +1939,7 @@ return 0; } -//____________________________________________________________ -// -// Copy an array of p_cnct::p_cnct_repeat. -// -static void copy_p_cnct_repeat_array( p_cnct::p_cnct_repeat* pDest, - const p_cnct::p_cnct_repeat* pSource, - size_t nEntries) -{ - for (size_t i = 0; i < nEntries; ++i) { - pDest[i] = pSource[i]; - } -} - static rem_port* receive( rem_port* main_port, PACKET * packet) { /************************************** @@ -2079,10 +2041,8 @@ if (port->port_dummy_timeout < 0) { port->port_dummy_timeout = port->port_dummy_packet_interval; - if (port->port_flags & PORT_async || port->port_protocol < PROTOCOL_VERSION8) - { + if (port->port_flags & PORT_async) continue; - } *length = 0; return true; } @@ -3016,7 +2976,7 @@ timeout.tv_sec = port->port_connect_timeout; time_ptr = &timeout; } - else if (port->port_protocol >= PROTOCOL_VERSION8 && port->port_dummy_packet_interval > 0) + else if (port->port_dummy_packet_interval > 0) { // Set the time interval for sending dummy packets to the client timeout.tv_sec = port->port_dummy_packet_interval; @@ -3084,7 +3044,7 @@ return false; } - if (!slct_count && port->port_protocol >= PROTOCOL_VERSION8) + if (!slct_count) { #ifdef DEBUG if (INET_trace & TRACE_operations) Modified: firebird/trunk/src/remote/os/win32/wnet.cpp =================================================================== --- firebird/trunk/src/remote/os/win32/wnet.cpp 2012-01-05 03:22:12 UTC (rev 53812) +++ firebird/trunk/src/remote/os/win32/wnet.cpp 2012-01-06 11:24:37 UTC (rev 53813) @@ -174,19 +174,18 @@ cnct->p_cnct_user_id.cstr_length = (USHORT) user_id.getBufferLength(); cnct->p_cnct_user_id.cstr_address = user_id.getBuffer(); - static const p_cnct::p_cnct_repeat protocols_to_try1[] = + static const p_cnct::p_cnct_repeat protocols_to_try[] = { - REMOTE_PROTOCOL(PROTOCOL_VERSION7, ptype_batch_send, 1), - REMOTE_PROTOCOL(PROTOCOL_VERSION8, ptype_batch_send, 2), - REMOTE_PROTOCOL(PROTOCOL_VERSION10, ptype_batch_send, 3), - REMOTE_PROTOCOL(PROTOCOL_VERSION11, ptype_batch_send, 4), - REMOTE_PROTOCOL(PROTOCOL_VERSION12, ptype_batch_send, 5), - REMOTE_PROTOCOL(PROTOCOL_VERSION13, ptype_batch_send, 6) + REMOTE_PROTOCOL(PROTOCOL_VERSION10, ptype_batch_send, 1), + REMOTE_PROTOCOL(PROTOCOL_VERSION11, ptype_batch_send, 2), + REMOTE_PROTOCOL(PROTOCOL_VERSION12, ptype_batch_send, 3), + REMOTE_PROTOCOL(PROTOCOL_VERSION13, ptype_batch_send, 4) }; - cnct->p_cnct_count = FB_NELEM(protocols_to_try1); + fb_assert(FB_NELEM(protocols_to_try) <= FB_NELEM(cnct->p_cnct_versions)); + cnct->p_cnct_count = FB_NELEM(protocols_to_try); for (size_t i = 0; i < cnct->p_cnct_count; i++) { - cnct->p_cnct_versions[i] = protocols_to_try1[i]; + cnct->p_cnct_versions[i] = protocols_to_try[i]; } // If we can't talk to a server, punt. Let somebody else generate an error. @@ -208,91 +207,6 @@ port->port_context = rdb; port->receive(packet); - if (packet->p_operation == op_reject && !uv_flag) - { - disconnect(port); - packet->p_operation = op_connect; - cnct->p_cnct_operation = op_attach; - cnct->p_cnct_cversion = CONNECT_VERSION2; - cnct->p_cnct_client = ARCHITECTURE; - cnct->p_cnct_file.cstr_length = (USHORT) file_name.length(); - cnct->p_cnct_file.cstr_address = reinterpret_cast<const UCHAR*>(file_name.c_str()); - - // try again with next set of known protocols - - cnct->p_cnct_user_id.cstr_length = (USHORT) user_id.getBufferLength(); - cnct->p_cnct_user_id.cstr_address = user_id.getBuffer(); - - static const p_cnct::p_cnct_repeat protocols_to_try2[] = - { - REMOTE_PROTOCOL(PROTOCOL_VERSION4, ptype_batch_send, 1), - REMOTE_PROTOCOL(PROTOCOL_VERSION6, ptype_batch_send, 2), - }; - cnct->p_cnct_count = FB_NELEM(protocols_to_try2); - - for (size_t i = 0; i < cnct->p_cnct_count; i++) { - cnct->p_cnct_versions[i] = protocols_to_try2[i]; - } - - try - { - port = WNET_connect(node_name, packet, 0); - } - catch (const Exception&) - { - delete rdb; - throw; - } - - // Get response packet from server. - - rdb->rdb_port = port; - port->port_context = rdb; - port->receive(packet); - } - - if (packet->p_operation == op_reject && !uv_flag) - { - disconnect(port); - packet->p_operation = op_connect; - cnct->p_cnct_operation = op_attach; - cnct->p_cnct_cversion = CONNECT_VERSION2; - cnct->p_cnct_client = ARCHITECTURE; - cnct->p_cnct_file.cstr_length = (USHORT) file_name.length(); - cnct->p_cnct_file.cstr_address = reinterpret_cast<const UCHAR*>(file_name.c_str()); - - // try again with next set of known protocols - - cnct->p_cnct_user_id.cstr_length = (USHORT) user_id.getBufferLength(); - cnct->p_cnct_user_id.cstr_address = user_id.getBuffer(); - - static const p_cnct::p_cnct_repeat protocols_to_try3[] = - { - REMOTE_PROTOCOL(PROTOCOL_VERSION3, ptype_batch_send, 1) - }; - cnct->p_cnct_count = FB_NELEM(protocols_to_try3); - - for (size_t i = 0; i < cnct->p_cnct_count; i++) { - cnct->p_cnct_versions[i] = protocols_to_try3[i]; - } - - try - { - port = WNET_connect(node_name, packet, 0); - } - catch (const Exception&) - { - delete rdb; - throw; - } - - // Get response packet from server. - - rdb->rdb_port = port; - port->port_context = rdb; - port->receive(packet); - } - P_ACPT* accept = NULL; switch (packet->p_operation) { Modified: firebird/trunk/src/remote/os/win32/xnet.cpp =================================================================== --- firebird/trunk/src/remote/os/win32/xnet.cpp 2012-01-05 03:22:12 UTC (rev 53812) +++ firebird/trunk/src/remote/os/win32/xnet.cpp 2012-01-06 11:24:37 UTC (rev 53813) @@ -256,19 +256,18 @@ cnct->p_cnct_user_id.cstr_length = (USHORT) user_id.getBufferLength(); cnct->p_cnct_user_id.cstr_address = user_id.getBuffer(); - static const p_cnct::p_cnct_repeat protocols_to_try1[] = + static const p_cnct::p_cnct_repeat protocols_to_try[] = { - REMOTE_PROTOCOL(PROTOCOL_VERSION7, ptype_batch_send, 1), - REMOTE_PROTOCOL(PROTOCOL_VERSION8, ptype_batch_send, 2), - REMOTE_PROTOCOL(PROTOCOL_VERSION10, ptype_batch_send, 3), - REMOTE_PROTOCOL(PROTOCOL_VERSION11, ptype_batch_send, 4), - REMOTE_PROTOCOL(PROTOCOL_VERSION12, ptype_batch_send, 5), - REMOTE_PROTOCOL(PROTOCOL_VERSION13, ptype_batch_send, 6) + REMOTE_PROTOCOL(PROTOCOL_VERSION10, ptype_batch_send, 1), + REMOTE_PROTOCOL(PROTOCOL_VERSION11, ptype_batch_send, 2), + REMOTE_PROTOCOL(PROTOCOL_VERSION12, ptype_batch_send, 3), + REMOTE_PROTOCOL(PROTOCOL_VERSION13, ptype_batch_send, 4) }; - cnct->p_cnct_count = FB_NELEM(protocols_to_try1); + fb_assert(FB_NELEM(protocols_to_try) <= FB_NELEM(cnct->p_cnct_versions)); + cnct->p_cnct_count = FB_NELEM(protocols_to_try); for (size_t i = 0; i < cnct->p_cnct_count; i++) { - cnct->p_cnct_versions[i] = protocols_to_try1[i]; + cnct->p_cnct_versions[i] = protocols_to_try[i]; } // If we can't talk to a server, punt. Let somebody else generate an error. @@ -290,91 +289,6 @@ port->port_context = rdb; port->receive(packet); - if (packet->p_operation == op_reject && !uv_flag) - { - disconnect(port); - packet->p_operation = op_connect; - cnct->p_cnct_operation = op_attach; - cnct->p_cnct_cversion = CONNECT_VERSION2; - cnct->p_cnct_client = ARCHITECTURE; - cnct->p_cnct_file.cstr_length = (USHORT) file_name.length(); - cnct->p_cnct_file.cstr_address = reinterpret_cast<const UCHAR*>(file_name.c_str()); - - // try again with next set of known protocols - - cnct->p_cnct_user_id.cstr_length = (USHORT) user_id.getBufferLength(); - cnct->p_cnct_user_id.cstr_address = user_id.getBuffer(); - - static const p_cnct::p_cnct_repeat protocols_to_try2[] = - { - REMOTE_PROTOCOL(PROTOCOL_VERSION4, ptype_batch_send, 1), - REMOTE_PROTOCOL(PROTOCOL_VERSION6, ptype_batch_send, 2), - }; - cnct->p_cnct_count = FB_NELEM(protocols_to_try2); - - for (size_t i = 0; i < cnct->p_cnct_count; i++) { - cnct->p_cnct_versions[i] = protocols_to_try2[i]; - } - - try - { - port = XNET_connect(packet, 0); - } - catch (const Exception&) - { - delete rdb; - throw; - } - - // Get response packet from server - - rdb->rdb_port = port; - port->port_context = rdb; - port->receive(packet); - } - - if (packet->p_operation == op_reject && !uv_flag) - { - disconnect(port); - packet->p_operation = op_connect; - cnct->p_cnct_operation = op_attach; - cnct->p_cnct_cversion = CONNECT_VERSION2; - cnct->p_cnct_client = ARCHITECTURE; - cnct->p_cnct_file.cstr_length = (USHORT) file_name.length(); - cnct->p_cnct_file.cstr_address = reinterpret_cast<const UCHAR*>(file_name.c_str()); - - // try again with next set of known protocols - - cnct->p_cnct_user_id.cstr_length = (USHORT) user_id.getBufferLength(); - cnct->p_cnct_user_id.cstr_address = user_id.getBuffer(); - - static const p_cnct::p_cnct_repeat protocols_to_try3[] = - { - REMOTE_PROTOCOL(PROTOCOL_VERSION3, ptype_batch_send, 1) - }; - cnct->p_cnct_count = FB_NELEM(protocols_to_try3); - - for (size_t i = 0; i < cnct->p_cnct_count; i++) { - cnct->p_cnct_versions[i] = protocols_to_try3[i]; - } - - try - { - port = XNET_connect(packet, 0); - } - catch (const Exception&) - { - delete rdb; - throw; - } - - // Get response packet from server - - rdb->rdb_port = port; - port->port_context = rdb; - port->receive(packet); - } - P_ACPT* accept = NULL; switch (packet->p_operation) { Modified: firebird/trunk/src/remote/parse_proto.h =================================================================== --- firebird/trunk/src/remote/parse_proto.h 2012-01-05 03:22:12 UTC (rev 53812) +++ firebird/trunk/src/remote/parse_proto.h 2012-01-06 11:24:37 UTC (rev 53813) @@ -25,6 +25,5 @@ #define REMOTE_PARSE_PROTO_H struct RMessage* PARSE_messages(const UCHAR*, USHORT); -const UCHAR* PARSE_prepare_messages(const UCHAR*, USHORT); #endif // REMOTE_PARSE_PROTO_H Modified: firebird/trunk/src/remote/parser.cpp =================================================================== --- firebird/trunk/src/remote/parser.cpp 2012-01-05 03:22:12 UTC (rev 53812) +++ firebird/trunk/src/remote/parser.cpp 2012-01-06 11:24:37 UTC (rev 53813) @@ -65,7 +65,6 @@ if (*blr++ != blr_begin) return 0; - RMessage* message = NULL; USHORT net_length = 0; @@ -300,90 +299,3 @@ } return (RMessage*) -1; } - - -const UCHAR* PARSE_prepare_messages(const UCHAR* blr, USHORT blr_length) -{ -/************************************** - * - * P A R S E _ p r e p a r e _ m e s s a g e s - * - ************************************** - * - * Functional description - * Parse the messages of a blr request and convert - * each occurrence of blr_d_float to blr_double. - * - * This function is only called for protocol version 5 and below - * - **************************************/ - const UCHAR* old_blr = blr; - const UCHAR* new_blr = blr; - - const SSHORT version = *blr++; - if ((version != blr_version4 && version != blr_version5) || *blr++ != blr_begin) - { - return old_blr; - } - - while (*blr++ == blr_message) - { - blr++; - USHORT count = *blr++; - count += (*blr++) << 8; - for (; count; --count) - switch (*blr++) - { - case blr_text2: - case blr_varying2: - case blr_cstring2: - blr += 4; // SUBTYPE word & LENGTH word - break; - case blr_text: - case blr_varying: - case blr_cstring: - blr += 2; // LENGTH word - break; - case blr_short: - case blr_long: - case blr_int64: - case blr_quad: - blr++; // SCALE byte - break; - case blr_float: - case blr_double: - case blr_timestamp: - case blr_sql_date: - case blr_sql_time: - case blr_bool: - break; - - case blr_d_float: - if (new_blr == old_blr) - { - new_blr = FB_NEW(*getDefaultMemoryPool()) UCHAR[blr_length]; - // FREE: Never freed, blr_d_float is VMS specific -#ifdef DEBUG_REMOTE_MEMORY - printf("PARSE_prepare_messages allocate blr %x\n", new_blr); -#endif - // Safe const_cast, we are allocating new space for new_blr - memcpy(const_cast<UCHAR*>(new_blr), old_blr, blr_length); - blr = new_blr + (int) (blr - old_blr); - } - - // It's safe because blr has been replaced by new space, - // we aren't overwriting the original const parameter. - fb_assert(new_blr != old_blr); - const_cast<UCHAR*>(blr)[-1] = blr_double; - break; - - default: - DEV_REPORT("Unexpected BLR in PARSE_prepare_messages()"); - // This old code would return, so we will also - return new_blr; - } - } - - return new_blr; -} - Modified: firebird/trunk/src/remote/protocol.cpp =================================================================== --- firebird/trunk/src/remote/protocol.cpp 2012-01-05 03:22:12 UTC (rev 53812) +++ firebird/trunk/src/remote/protocol.cpp 2012-01-06 11:24:37 UTC (rev 53813) @@ -244,7 +244,6 @@ * **************************************/ p_cnct::p_cnct_repeat* tail; - const rem_port* port; P_ACPT *accept; P_ACPD *accept_with_data; P_ATCH *attach; @@ -682,9 +681,7 @@ // Changes to this op's protocol must mirror in xdr_protocol_overhead - port = (rem_port*) xdrs->x_public; - if ((port->port_protocol > PROTOCOL_VERSION7 && sqldata->p_sqldata_messages) || - (port->port_protocol <= PROTOCOL_VERSION7 && !sqldata->p_sqldata_status)) + if (sqldata->p_sqldata_messages) { return xdr_sql_message(xdrs, (SLONG)sqldata->p_sqldata_statement) ? P_TRUE(xdrs, p) : P_FALSE(xdrs, p); Modified: firebird/trunk/src/remote/protocol.h =================================================================== --- firebird/trunk/src/remote/protocol.h 2012-01-05 03:22:12 UTC (rev 53812) +++ firebird/trunk/src/remote/protocol.h 2012-01-06 11:24:37 UTC (rev 53813) @@ -48,37 +48,6 @@ // p_cnct_version const USHORT CONNECT_VERSION2 = 2; -// Protocol 4 is protocol 3 plus server management functions - -const USHORT PROTOCOL_VERSION3 = 3; -const USHORT PROTOCOL_VERSION4 = 4; - -// Protocol 5 includes support for a d_float data type - -const USHORT PROTOCOL_VERSION5 = 5; - -// Protocol 6 includes support for cancel remote events, blob seek, -// and unknown message type - -const USHORT PROTOCOL_VERSION6 = 6; - -// Protocol 7 includes DSQL support - -const USHORT PROTOCOL_VERSION7 = 7; - -// Protocol 8 includes collapsing first receive into a send, drop database, -// DSQL execute 2, DSQL execute immediate 2, DSQL insert, services, and -// transact request - -const USHORT PROTOCOL_VERSION8 = 8; - -// Protocol 9 includes support for SPX32 -// SPX32 uses WINSOCK instead of Novell SDK -// In order to differentiate between the old implementation -// of SPX and this one, different PROTOCOL VERSIONS are used - -const USHORT PROTOCOL_VERSION9 = 9; - // Protocol 10 includes support for warnings and removes the requirement for // encoding and decoding status codes @@ -364,19 +333,19 @@ { USHORT p_cnct_version; // Protocol version number P_ARCH p_cnct_architecture; // Architecture of client - USHORT p_cnct_min_type; // Minimum type + USHORT p_cnct_min_type; // Minimum type (unused) USHORT p_cnct_max_type; // Maximum type USHORT p_cnct_weight; // Preference weight } p_cnct_versions[10]; } P_CNCT; #ifdef ASYMMETRIC_PROTOCOLS_ONLY -#define REMOTE_PROTOCOL(version, max_type, weight) \ - {version, arch_generic, ptype_batch_send, max_type, weight * 2} +#define REMOTE_PROTOCOL(version, type, weight) \ + {version, arch_generic, 0, type, weight * 2} #else -#define REMOTE_PROTOCOL(version, max_type, weight) \ - {version, arch_generic, ptype_batch_send, max_type, weight * 2}, \ - {version, ARCHITECTURE, ptype_batch_send, max_type, weight * 2 + 1} +#define REMOTE_PROTOCOL(version, type, weight) \ + {version, arch_generic, 0, type, weight * 2}, \ + {version, ARCHITECTURE, 0, type, weight * 2 + 1} #endif /* User identification data, if any, is of form: Modified: firebird/trunk/src/remote/server/server.cpp =================================================================== --- firebird/trunk/src/remote/server/server.cpp 2012-01-05 03:22:12 UTC (rev 53812) +++ firebird/trunk/src/remote/server/server.cpp 2012-01-06 11:24:37 UTC (rev 53813) @@ -1324,14 +1324,7 @@ for (const p_cnct::p_cnct_repeat* const end = protocol + connect->p_cnct_count; protocol < end; protocol++) { - if ((protocol->p_cnct_version == PROTOCOL_VERSION3 || - protocol->p_cnct_version == PROTOCOL_VERSION4 || - protocol->p_cnct_version == PROTOCOL_VERSION5 || - protocol->p_cnct_version == PROTOCOL_VERSION6 || - protocol->p_cnct_version == PROTOCOL_VERSION7 || - protocol->p_cnct_version == PROTOCOL_VERSION8 || - protocol->p_cnct_version == PROTOCOL_VERSION9 || - protocol->p_cnct_version == PROTOCOL_VERSION10 || + if ((protocol->p_cnct_version == PROTOCOL_VERSION10 || protocol->p_cnct_version == PROTOCOL_VERSION11 || protocol->p_cnct_version == PROTOCOL_VERSION12 || protocol->p_cnct_version == PROTOCOL_VERSION13) && @@ -2811,12 +2804,7 @@ statement->rsr_msgs_waiting--; } - // For compatibility with Protocol 7, we must break out of the - // loop before sending the last record. - count--; - if (this->port_protocol <= PROTOCOL_VERSION7 && count <= 0) - break; // There's a buffer waiting -- send it This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |