interface.cpp (Firebird-3.0.2.32703-0.tar.bz2) | : | interface.cpp (Firebird-3.0.4.33054-0.tar.bz2) | ||
---|---|---|---|---|
skipping to change at line 1574 | skipping to change at line 1574 | |||
************************************** | ************************************** | |||
* | * | |||
* Functional description | * Functional description | |||
* Close down a database. | * Close down a database. | |||
* | * | |||
**************************************/ | **************************************/ | |||
try | try | |||
{ | { | |||
CHECK_HANDLE(rdb, isc_bad_db_handle); | CHECK_HANDLE(rdb, isc_bad_db_handle); | |||
rem_port* port = rdb->rdb_port; | rem_port* port = rdb->rdb_port; | |||
RefMutexGuard portGuard(*port->port_sync, FB_FUNCTION); | RemotePortGuard portGuard(port, FB_FUNCTION); | |||
try | try | |||
{ | { | |||
if (!(port->port_flags & PORT_rdb_shutdown)) | if (!(port->port_flags & PORT_rdb_shutdown)) | |||
{ | { | |||
release_object(status, rdb, op_detach, rdb->rdb_i d); | release_object(status, rdb, op_detach, rdb->rdb_i d); | |||
} | } | |||
} | } | |||
catch (const status_exception& ex) | catch (const status_exception& ex) | |||
{ | { | |||
// If something other than a network error occurred, just return. Otherwise | // If something other than a network error occurred, just return. Otherwise | |||
// we need to free up the associated structures, close th e socket and | // we need to free up the associated structures, close th e socket and | |||
// scream. By the way, we should probably create an entr y in the log | // scream. By the way, we should probably create an entr y in the log | |||
// telling the user that an unrecoverable network error o ccurred and that | // telling the user that an unrecoverable network error o ccurred and that | |||
// if there was any uncommitted work, its gone...... Oh well.... | // if there was any uncommitted work, its gone...... Oh well.... | |||
ex.stuffException(status); | ex.stuffException(status); | |||
if ((status->getErrors()[1] != isc_network_error) && (!fo | ||||
rce)) | if (!fb_utils::isNetworkError(status->getErrors()[1]) && | |||
(!force)) | ||||
{ | { | |||
return; | return; | |||
} | } | |||
} | } | |||
while (rdb->rdb_events) | while (rdb->rdb_events) | |||
release_event(rdb->rdb_events); | release_event(rdb->rdb_events); | |||
while (rdb->rdb_requests) | while (rdb->rdb_requests) | |||
release_request(rdb->rdb_requests); | release_request(rdb->rdb_requests); | |||
skipping to change at line 1666 | skipping to change at line 1667 | |||
* Functional description | * Functional description | |||
* Close down and purge a database. | * Close down and purge a database. | |||
* | * | |||
**************************************/ | **************************************/ | |||
try | try | |||
{ | { | |||
reset(status); | reset(status); | |||
CHECK_HANDLE(rdb, isc_bad_db_handle); | CHECK_HANDLE(rdb, isc_bad_db_handle); | |||
rem_port* port = rdb->rdb_port; | rem_port* port = rdb->rdb_port; | |||
RefMutexGuard portGuard(*port->port_sync, FB_FUNCTION); | RemotePortGuard portGuard(port, FB_FUNCTION); | |||
try | try | |||
{ | { | |||
release_object(status, rdb, op_drop_database, rdb->rdb_id ); | release_object(status, rdb, op_drop_database, rdb->rdb_id ); | |||
} | } | |||
catch (const status_exception& ex) | catch (const status_exception& ex) | |||
{ | { | |||
ex.stuffException(status); | ex.stuffException(status); | |||
if (ex.value()[1] != isc_drdb_completed_with_errs) | if (ex.value()[1] != isc_drdb_completed_with_errs) | |||
{ | { | |||
skipping to change at line 3875 | skipping to change at line 3876 | |||
send_and_receive(status, rdb, packet); | send_and_receive(status, rdb, packet); | |||
*id = packet->p_resp.p_resp_blob_id; | *id = packet->p_resp.p_resp_blob_id; | |||
} | } | |||
catch (const Exception& ex) | catch (const Exception& ex) | |||
{ | { | |||
ex.stuffException(status); | ex.stuffException(status); | |||
} | } | |||
} | } | |||
namespace { | ||||
void portEventsShutdown(rem_port* port) | ||||
{ | ||||
if (port->port_events_thread) | ||||
Thread::waitForCompletion(port->port_events_thread); | ||||
} | ||||
} | ||||
Firebird::IEvents* Attachment::queEvents(CheckStatusWrapper* status, Firebird::I EventCallback* callback, | Firebird::IEvents* Attachment::queEvents(CheckStatusWrapper* status, Firebird::I EventCallback* callback, | |||
unsigned int length, const unsigned char* events) | unsigned int length, const unsigned char* events) | |||
{ | { | |||
/************************************** | /************************************** | |||
* | * | |||
* g d s _ $ q u e _ e v e n t s | * g d s _ $ q u e _ e v e n t s | |||
* | * | |||
************************************** | ************************************** | |||
* | * | |||
* Functional description | * Functional description | |||
skipping to change at line 3922 | skipping to change at line 3915 | |||
if (!port->port_async) | if (!port->port_async) | |||
{ | { | |||
packet->p_operation = op_connect_request; | packet->p_operation = op_connect_request; | |||
P_REQ* request = &packet->p_req; | P_REQ* request = &packet->p_req; | |||
request->p_req_object = rdb->rdb_id; | request->p_req_object = rdb->rdb_id; | |||
request->p_req_type = P_REQ_async; | request->p_req_type = P_REQ_async; | |||
send_packet(port, packet); | send_packet(port, packet); | |||
receive_response(status, rdb, packet); | receive_response(status, rdb, packet); | |||
port->connect(packet); | port->connect(packet); | |||
Thread::start(event_thread, port->port_async, THREAD_high | rem_port* port_async = port->port_async; | |||
, | port_async->port_events_threadId = | |||
&port->port_async->port_events_ | Thread::start(event_thread, port_async, THREAD_hi | |||
thread); | gh, &port_async->port_events_thread); | |||
port->port_async->port_events_shutdown = portEventsShutdo | ||||
wn; | ||||
port->port_async->port_context = rdb; | port_async->port_context = rdb; | |||
} | } | |||
// Add event block to port's list of active remote events | // Add event block to port's list of active remote events | |||
Rvnt* rem_event = add_event(port); | Rvnt* rem_event = add_event(port); | |||
rem_event->rvnt_callback = callback; | rem_event->rvnt_callback = callback; | |||
rem_event->rvnt_port = port->port_async; | rem_event->rvnt_port = port->port_async; | |||
rem_event->rvnt_length = length; | rem_event->rvnt_length = length; | |||
rem_event->rvnt_rdb = rdb; | rem_event->rvnt_rdb = rdb; | |||
skipping to change at line 4639 | skipping to change at line 4632 | |||
* | * | |||
**************************************/ | **************************************/ | |||
try | try | |||
{ | { | |||
reset(status); | reset(status); | |||
// Check and validate handles, etc. | // Check and validate handles, etc. | |||
CHECK_HANDLE(rdb, isc_bad_svc_handle); | CHECK_HANDLE(rdb, isc_bad_svc_handle); | |||
rem_port* port = rdb->rdb_port; | rem_port* port = rdb->rdb_port; | |||
RefMutexGuard portGuard(*port->port_sync, FB_FUNCTION); | RemotePortGuard portGuard(port, FB_FUNCTION); | |||
try | try | |||
{ | { | |||
release_object(status, rdb, op_service_detach, rdb->rdb_i d); | release_object(status, rdb, op_service_detach, rdb->rdb_i d); | |||
} | } | |||
catch (const Exception&) | catch (const Exception&) | |||
{ | { | |||
if (!force) | if (!force) | |||
throw; | throw; | |||
} | } | |||
skipping to change at line 7330 | skipping to change at line 7323 | |||
dpb.deleteWithTag(tags->trusted_auth); | dpb.deleteWithTag(tags->trusted_auth); | |||
} | } | |||
} //namespace Remote | } //namespace Remote | |||
ClntAuthBlock::ClntAuthBlock(const Firebird::PathName* fileName, Firebird::Clump letReader* dpb, | ClntAuthBlock::ClntAuthBlock(const Firebird::PathName* fileName, Firebird::Clump letReader* dpb, | |||
const ParametersSet* tag s) | const ParametersSet* tag s) | |||
: pluginList(getPool()), serverPluginList(getPool()), | : pluginList(getPool()), serverPluginList(getPool()), | |||
cliUserName(getPool()), cliPassword(getPool()), cliOrigUserName(getPool ()), | cliUserName(getPool()), cliPassword(getPool()), cliOrigUserName(getPool ()), | |||
dataForPlugin(getPool()), dataFromPlugin(getPool()), | dataForPlugin(getPool()), dataFromPlugin(getPool()), | |||
cryptKeys(getPool()), dpbConfig(getPool()), | cryptKeys(getPool()), dpbConfig(getPool()), dpbPlugins(getPool()), | |||
hasCryptKey(false), plugins(IPluginManager::TYPE_AUTH_CLIENT), | hasCryptKey(false), plugins(IPluginManager::TYPE_AUTH_CLIENT), | |||
authComplete(false), firstTime(true) | authComplete(false), firstTime(true) | |||
{ | { | |||
if (dpb && tags && dpb->find(tags->config_text)) | if (dpb && tags) | |||
{ | { | |||
dpb->getString(dpbConfig); | if (dpb->find(tags->config_text)) | |||
{ | ||||
dpb->getString(dpbConfig); | ||||
} | ||||
if (dpb->find(tags->plugin_list)) | ||||
{ | ||||
dpb->getPath(dpbPlugins); | ||||
} | ||||
} | } | |||
resetClnt(fileName); | resetClnt(fileName); | |||
} | } | |||
void ClntAuthBlock::resetDataFromPlugin() | void ClntAuthBlock::resetDataFromPlugin() | |||
{ | { | |||
dataFromPlugin.clear(); | dataFromPlugin.clear(); | |||
} | } | |||
void ClntAuthBlock::extractDataFromPluginTo(Firebird::ClumpletWriter& dpb, | void ClntAuthBlock::extractDataFromPluginTo(Firebird::ClumpletWriter& dpb, | |||
skipping to change at line 7365 | skipping to change at line 7365 | |||
PathName pluginName = getPluginName(); | PathName pluginName = getPluginName(); | |||
if (protocol >= PROTOCOL_VERSION13) | if (protocol >= PROTOCOL_VERSION13) | |||
{ | { | |||
if (firstTime) | if (firstTime) | |||
{ | { | |||
fb_assert(tags->plugin_name && tags->plugin_list); | fb_assert(tags->plugin_name && tags->plugin_list); | |||
if (pluginName.hasData()) | if (pluginName.hasData()) | |||
{ | { | |||
dpb.insertPath(tags->plugin_name, pluginName); | dpb.insertPath(tags->plugin_name, pluginName); | |||
} | } | |||
dpb.deleteWithTag(tags->plugin_list); | ||||
dpb.insertPath(tags->plugin_list, pluginList); | dpb.insertPath(tags->plugin_list, pluginList); | |||
firstTime = false; | firstTime = false; | |||
HANDSHAKE_DEBUG(fprintf(stderr, | HANDSHAKE_DEBUG(fprintf(stderr, | |||
"Cli: extractDataFromPluginTo: first time - added plugName & pluginList\n")); | "Cli: extractDataFromPluginTo: first time - added plugName & pluginList\n")); | |||
} | } | |||
fb_assert(tags->specific_data); | fb_assert(tags->specific_data); | |||
dpb.insertBytes(tags->specific_data, dataFromPlugin.begin(), data FromPlugin.getCount()); | dpb.insertBytes(tags->specific_data, dataFromPlugin.begin(), data FromPlugin.getCount()); | |||
HANDSHAKE_DEBUG(fprintf(stderr, | HANDSHAKE_DEBUG(fprintf(stderr, | |||
"Cli: extractDataFromPluginTo: Added %u bytes of spec dat a with tag %d\n", | "Cli: extractDataFromPluginTo: Added %u bytes of spec dat a with tag %d\n", | |||
End of changes. 11 change blocks. | ||||
23 lines changed or deleted | 22 lines changed or added |