X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=src%2Fplpbus%2FBusClient.cc;h=5c20d5d9a29055d4eaff3be39efa438030500f3c;hb=f6bd0d4fefd6459f2e8e5e7b813933be2d87dd47;hp=da79689bbe67936cbb479fd66985141918c6300c;hpb=396eb8d27636cd63e15dc4321ac201d9e010a56b;p=libplpbus.git diff --git a/src/plpbus/BusClient.cc b/src/plpbus/BusClient.cc index da79689..5c20d5d 100644 --- a/src/plpbus/BusClient.cc +++ b/src/plpbus/BusClient.cc @@ -5,7 +5,9 @@ * Author: lamikr */ +#include #include +#include #include "BusClient.hh" #include "ClientServerCommon.hh" @@ -47,11 +49,12 @@ class OrbClientImpl : public virtual POA_plpbus_orb::OrbClient { } virtual void receive_response_dataitem_sequence(const ::plpbus_orb::DataItemSequence& msg_rsp_param) { - BusMessageInternal *bus_msg; + const BusMessageInternal *bus_msg; if (listener != NULL) { bus_msg = new BusMessageInternal(msg_rsp_param); listener->response_received(bus_msg); + delete(bus_msg); } } }; @@ -65,6 +68,9 @@ BusClient::BusClient() BusClient::~BusClient() { + if (_poa != NULL) { + //_poa->destroy(true, true); + } if (_orb != NULL) { _orb->destroy(); _orb = NULL; @@ -76,12 +82,14 @@ int BusClient::init(const char *server_name) { int argc; char **argv; CORBA::Object_var server_obj; + int ret_val; argc = 0; argv = NULL; - log_info("init() started\n");; + ret_val = PLP_ERR; + log_info("CORBA client init() started\n"); _orb = CORBA::ORB_init(argc, argv); - if (_orb != NULL) { + if (CORBA::is_nil(_orb) == false) { log_debug("ORB_init() done, finding server: %s\n", server_name); server_obj = find_server_object_by_name(_orb, CONST_CONTEXT_NAME__PLPBUS, @@ -90,17 +98,23 @@ int BusClient::init(const char *server_name) { CONST_CONTEXT_NAME__PLPBUS); if (CORBA::is_nil(server_obj) == false) { _server = plpbus_orb::OrbServer::_narrow(server_obj); - log_info("Server object found: %s", server_name); + if (CORBA::is_nil(_server) == false) { + log_info("CORBA service found: %s\n", server_name); + ret_val = PLP_OK; + } } else { - log_error("Could not find server object: %s\n", server_name); + log_error("Could not find CORBA service: %s\n", server_name); } } - return 0; + else { + log_error("Could not init CORBA client\n"); + } + return ret_val; } int BusClient::add_client_listener(IClientListener *listener_param) { - log_debug("add_client_listener() started\n"); + log_debug("started\n"); if (_poa == NULL) { OrbClientImpl *client_cb; PortableServer::ObjectId_var oid; @@ -112,7 +126,7 @@ int BusClient::add_client_listener(IClientListener *listener_param) { client_cb->_remove_ref(); _server->add_event_listener(_client, "event_message", CONST_DEFAULT_EVENT_INTERVAL); } - log_debug("add_client_listener() done\n"); + log_debug("done\n"); return 0; } @@ -123,12 +137,15 @@ int BusClient::send_message_and_request_response(const char *msg_req_param) { int BusClient::send_message_and_wait_response(const char *msg_req_param, char **msg_rsp_param) { CORBA::Long ret_val; + char *rsp; - *msg_rsp_param = _server->send_message_and_wait_response(msg_req_param, ret_val); + rsp = _server->send_message_and_wait_response(msg_req_param, ret_val); + *msg_rsp_param = strdup(rsp); + CORBA::string_free(rsp); return ret_val; } -int BusClient::send_message_and_request_response(BusMessage *msg_req_param) { +int BusClient::send_message_and_request_response(const BusMessage *msg_req_param) { DataItemSequence *seq; seq = (DataItemSequence *)msg_req_param->_dataItemSeq; @@ -136,7 +153,7 @@ int BusClient::send_message_and_request_response(BusMessage *msg_req_param) { return 0; } -int BusClient::send_message_and_wait_response(BusMessage *msg_req_param, BusMessage **msg_rsp_param) { +int BusClient::send_message_and_wait_response(const BusMessage *msg_req_param, BusMessage **msg_rsp_param) { DataItemSequence *seq_rsp; DataItemSequence *seq; @@ -144,6 +161,7 @@ int BusClient::send_message_and_wait_response(BusMessage *msg_req_param, BusMess seq = (DataItemSequence *)msg_req_param->_dataItemSeq; _server->send_dataitem_message_and_wait_response(*seq, seq_rsp); *msg_rsp_param = new BusMessageInternal(*seq_rsp); + delete(seq_rsp); return 0; } @@ -180,18 +198,19 @@ PortableServer::POA_var BusClient::create_poa(CORBA::ORB_var orb) { } } else { - cerr << "Failed to create RootPOA." << endl; + log_error("Failed to create RootPOA\n"); } return ret_val; } -CosNaming::NamingContext_var BusClient::get_name_service_context(CORBA::ORB_var orb_param) { +CosNaming::NamingContext_var BusClient::get_name_service_context(CORBA::ORB_var orb_param, + const char *nameservice_name_param) { CORBA::Object_var ns_obj; CosNaming::NamingContext_var ret_val; ret_val = NULL; try { - ns_obj = orb_param->resolve_initial_references(CONST_NAME_SERVICE_NAME); + ns_obj = orb_param->resolve_initial_references(nameservice_name_param); if (CORBA::is_nil(ns_obj) == false) { // narrow the object reference ret_val = CosNaming::NamingContext::_narrow(ns_obj); @@ -199,16 +218,16 @@ CosNaming::NamingContext_var BusClient::get_name_service_context(CORBA::ORB_var } catch (CORBA::ORB::InvalidName&) { // This should not happen! - cerr << "Could not find name service." << endl; + log_error("Could not find name service.\n"); } catch(CORBA::TRANSIENT& ex) { - cerr << "Could not find name service, verify that name service is running. " << endl; + log_error("Could not find name service, verify that name service is running.\n"); } catch (CORBA::NO_RESOURCES&) { - cerr << "Could not find name service, verify that name service is running. " << endl; + log_error("Could not find name service, verify that name service is running.\n"); } catch(CORBA::SystemException& ex) { - cerr << "Could not find name service, unknown reason. " << endl; + log_error("Could not find name service, unknown reason.\n"); } return ret_val; } @@ -222,9 +241,12 @@ CORBA::Object_var BusClient::find_server_object_by_name(CORBA::ORB_var orb_param CORBA::Object_var ret_val; CosNaming::NamingContext_var ns_root_context; CosNaming::Name service_data; + char *n; - ret_val = CORBA::Object::_nil(); - ns_root_context = get_name_service_context(orb_param); + ret_val = CORBA::Object::_nil(); + n = strdup(CONST_NAME_SERVICE_NAME); + ns_root_context = get_name_service_context(orb_param, n); + free(n); if (CORBA::is_nil(ns_root_context) == false) { // define search criteria service_data.length(2);