cps_api_return_code_t cps_api_connect_owner(cps_api_object_owner_reg_t*o,cps_api_channel_t &handle) { t_std_error rc = std_sock_connect(&o->addr,&handle); if (rc!=STD_ERR_OK) { EV_LOG(ERR,DSAPI,0,"CPS IPC","not able to connect to owner"); rc = cps_api_ret_code_SERVICE_CONNECT_FAIL; } return (cps_api_return_code_t) rc; }
t_std_error std_server_client_connect(std_event_client_handle * handle, const char *event_channel_name) { std_socket_address_t addr; setup_address(&addr,event_channel_name); int sock = -1; t_std_error rc = std_sock_connect(&addr,&sock); if (rc!=STD_ERR_OK) return rc; std_sock_set_sndbuf(sock,SOCKET_BUFFER_SIZE); *handle = sock; return STD_ERR_OK; }
extern "C" cps_api_return_code_t cps_api_object_stats(cps_api_key_t *key, cps_api_object_t stats_obj) { cps_api_return_code_t rc = cps_api_ret_code_ERR; cps_api_channel_t handle = -1; if (key==nullptr || cps_api_key_get_len(key)==0) { std_socket_address_t addr; cps_api_ns_get_address(&addr); int sock; t_std_error _rc = std_sock_connect(&addr,&sock); if (_rc!=STD_ERR_OK) { return rc; } handle = sock; } else { if (!cps_api_get_handle(*key,handle)) { char buff[CPS_API_KEY_STR_MAX]; EV_LOG(ERR,DSAPI,0,"NS","Failed to find owner for %s", cps_api_key_print(key,buff,sizeof(buff)-1)); return cps_api_ret_code_NO_SERVICE; } } if (handle==-1) { EV_LOG(ERR,DSAPI,0,"NS-STATS","No connection to the NS for stats."); return rc; } do { if (!cps_api_send_header(handle,cps_api_msg_o_STATS,0)) { break; } size_t len; uint32_t op=0; if (!cps_api_receive_header(handle,op,len)) break; if (op!=cps_api_msg_o_STATS) break; cps_api_object_guard og (cps_api_receive_object(handle,len)); if(!og.valid()) return false; if (!cps_api_object_clone(stats_obj,og.get())) { break; } rc = cps_api_ret_code_OK; } while (0); cps_api_disconnect_owner(handle); return rc; }