DWORD LWNetSrvStopListenThread( void ) { DWORD dwError = 0; if (gpServer) { dwError = MAP_LWMSG_ERROR(lwmsg_peer_stop_listen(gpServer)); BAIL_ON_LWNET_ERROR(dwError); } error: if (gpServer) { lwmsg_peer_delete(gpServer); gpServer = NULL; } if (gpProtocol) { lwmsg_protocol_delete(gpProtocol); gpProtocol = NULL; } return dwError; }
VOID LwmEvtOpenServerOnce( VOID ) { DWORD dwError = 0; dwError = MAP_LWMSG_ERROR(lwmsg_protocol_new(NULL, &gContext.pProtocol)); BAIL_ON_EVT_ERROR(dwError); dwError = MAP_LWMSG_ERROR(lwmsg_protocol_add_protocol_spec(gContext.pProtocol, LwEvtIPCGetProtocolSpec())); BAIL_ON_EVT_ERROR(dwError); dwError = MAP_LWMSG_ERROR(lwmsg_peer_new(NULL, gContext.pProtocol, &gContext.pClient)); BAIL_ON_EVT_ERROR(dwError); dwError = MAP_LWMSG_ERROR(lwmsg_peer_add_connect_endpoint( gContext.pClient, LWMSG_ENDPOINT_DIRECT, "eventlog")); BAIL_ON_EVT_ERROR(dwError); dwError = MAP_LWMSG_ERROR(lwmsg_peer_add_connect_endpoint( gContext.pClient, LWMSG_ENDPOINT_LOCAL, CACHEDIR "/" EVT_SERVER_FILENAME)); BAIL_ON_EVT_ERROR(dwError); dwError = MAP_LWMSG_ERROR(lwmsg_peer_connect(gContext.pClient, &gContext.pSession)); BAIL_ON_EVT_ERROR(dwError); cleanup: gdwOnceError = dwError; return; error: if (gContext.pClient) { lwmsg_peer_delete(gContext.pClient); gContext.pClient = NULL; } if (gContext.pProtocol) { lwmsg_protocol_delete(gContext.pProtocol); gContext.pProtocol = NULL; } goto cleanup; }
static void __LwSmIpcCallInit( void ) { DWORD dwError = 0; dwError = MAP_LWMSG_STATUS(lwmsg_protocol_new(NULL, &gpProtocol)); BAIL_ON_ERROR(dwError); dwError = MAP_LWMSG_STATUS(lwmsg_protocol_add_protocol_spec( gpProtocol, LwSmIpcGetProtocolSpec())); BAIL_ON_ERROR(dwError); dwError = MAP_LWMSG_STATUS(lwmsg_peer_new(NULL, gpProtocol, &gpClient)); BAIL_ON_ERROR(dwError); dwError = MAP_LWMSG_STATUS(lwmsg_peer_add_connect_endpoint( gpClient, (LWMsgEndpointType)LWMSG_CONNECTION_MODE_LOCAL, SM_ENDPOINT)); BAIL_ON_ERROR(dwError); dwError = MAP_LWMSG_STATUS(lwmsg_peer_connect( gpClient, &gpSession)); BAIL_ON_ERROR(dwError); cleanup: gOnceError = dwError; return; error: if (gpClient) { lwmsg_peer_delete(gpClient); } if (gpProtocol) { lwmsg_protocol_delete(gpProtocol); } goto cleanup; }
VOID LwmEvtCloseServerOnce( VOID ) { if (!LwInterlockedDecrement(&glLibraryRefCount)) { if (gContext.pClient) { lwmsg_peer_delete(gContext.pClient); } if (gContext.pProtocol) { lwmsg_protocol_delete(gContext.pProtocol); } memset(&gContext, 0, sizeof(gContext)); } }
static DWORD LwSmStopIpcServer( VOID ) { DWORD dwError = 0; if (gState.pControlServer) { dwError = MAP_LWMSG_STATUS(lwmsg_peer_stop_listen(gState.pControlServer)); BAIL_ON_ERROR(dwError); } if (gState.pContainerServer) { if (gState.pGroup) { dwError = MAP_LWMSG_STATUS(lwmsg_peer_disconnect(gState.pContainerServer)); BAIL_ON_ERROR(dwError); } else { dwError = MAP_LWMSG_STATUS(lwmsg_peer_stop_listen(gState.pContainerServer)); BAIL_ON_ERROR(dwError); } } if (gState.pDirectServer) { dwError = MAP_LWMSG_STATUS(lwmsg_peer_stop_listen(gState.pDirectServer)); BAIL_ON_ERROR(dwError); } cleanup: if (gState.pControlServer) { lwmsg_peer_delete(gState.pControlServer); } if (gState.pContainerServer) { lwmsg_peer_delete(gState.pContainerServer); } if (gState.pDirectServer) { lwmsg_peer_delete(gState.pDirectServer); } if (gState.pContolProtocol) { lwmsg_protocol_delete(gState.pContolProtocol); } if (gState.pContainerProtocol) { lwmsg_protocol_delete(gState.pContainerProtocol); } if (gState.pIpcContext) { lwmsg_context_delete(gState.pIpcContext); } return dwError; error: goto cleanup; }
int main(int argc, char** argv) { int ret = 0; LWMsgStatus status = LWMSG_STATUS_SUCCESS; LWMsgContext* context = NULL; LWMsgProtocol* protocol = NULL; LWMsgPeer* server = NULL; /* Create context */ status = lwmsg_context_new(NULL, &context); if (status) { goto error; } /* Set log function */ lwmsg_context_set_log_function(context, log_message, NULL); /* Create protocol */ status = lwmsg_protocol_new(context, &protocol); if (status) { goto error; } /* Add protocol spec */ status = lwmsg_protocol_add_protocol_spec(protocol, fserv_get_protocol()); if (status) { goto error; } /* Create peer */ status = lwmsg_peer_new(context, protocol, &server); if (status) { goto error; } /* Add dispatch spec */ status = lwmsg_peer_add_dispatch_spec(server, fserver_get_dispatch()); if (status) { goto error; } /* Add listen endpoint */ status = lwmsg_peer_add_listen_endpoint(server, LWMSG_ENDPOINT_LOCAL, FSERV_SOCKET_PATH, (S_IRWXU | S_IRWXG | S_IRWXO)); if (status) { goto error; } ret = run(server); error: if (server) { lwmsg_peer_delete(server); } if (protocol) { lwmsg_protocol_delete(protocol); } if (status != LWMSG_STATUS_SUCCESS) { ret = -1; } exit(ret ? 1 : 0); }