X-Git-Url: http://pilppa.org/gitweb/?p=libplpbus.git;a=blobdiff_plain;f=src%2Fplpbus%2FBusClient.cc;fp=src%2Fplpbus%2FBusClient.cc;h=75583fe4cd9ffaf008830944d825403348eebff4;hp=004326bea08d4ad9f5f05197c9b6ce45170cc7da;hb=741398826280fe8ea212a0001f9b3d655fff6de9;hpb=10cf04eb506eb67716623454a56cb4722cb2a9af diff --git a/src/plpbus/BusClient.cc b/src/plpbus/BusClient.cc index 004326b..75583fe 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,13 +98,19 @@ 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", 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) { @@ -123,8 +137,11 @@ 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; } @@ -185,13 +202,14 @@ PortableServer::POA_var BusClient::create_poa(CORBA::ORB_var orb) { 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); @@ -222,9 +240,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);