static void export_service(struct gatt_db_attribute *attr, void *user_data) { struct btd_gatt_client *client = user_data; struct service *service; if (gatt_db_service_get_claimed(attr)) return; service = service_create(attr, client); if (!service) return; if (!create_characteristics(attr, service)) { error("Exporting characteristics failed"); unregister_service(service); return; } queue_push_tail(client->services, service); /* * Asynchronously update the "Characteristics" property of the service. * If there are any pending reads to obtain the value of the "Extended * Properties" descriptor then wait until they are complete. */ if (!service->chrcs_ready && queue_isempty(service->pending_ext_props)) service->idle_id = g_idle_add(set_chrcs_ready, service); }
static void cleanup_services(void) { int i; DBG(""); for (i = HAL_SERVICE_ID_MAX; i > HAL_SERVICE_ID_CORE; i--) unregister_service(i); }
static void service_unregister(const void *buf, uint16_t len) { const struct hal_cmd_unregister_module *m = buf; uint8_t status; if (!unregister_service(m->service_id)) { status = HAL_STATUS_FAILED; goto failed; } status = HAL_STATUS_SUCCESS; info("Service ID=%u unregistered", m->service_id); failed: ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_CORE, HAL_OP_UNREGISTER_MODULE, status); }
int main(int argc, char *argv[]) { SERVICE_TABLE_ENTRY dt[] = { { WPASVC_NAME, service_start }, { NULL, NULL } }; if (argc > 1) { if (os_strcmp(argv[1], "reg") == 0) { TCHAR *path; int ret; if (argc < 3) { path = os_malloc(MAX_PATH * sizeof(TCHAR)); if (path == NULL) return -1; if (!GetModuleFileName(NULL, path, MAX_PATH)) { printf("GetModuleFileName failed: " "%d\n", (int) GetLastError()); os_free(path); return -1; } } else { path = wpa_strdup_tchar(argv[2]); if (path == NULL) return -1; } ret = register_service(path); os_free(path); return ret; } else if (os_strcmp(argv[1], "unreg") == 0) { return unregister_service(); } else if (os_strcmp(argv[1], "app") == 0) { return wpa_supplicant_thread(); } } if (!StartServiceCtrlDispatcher(dt)) { printf("StartServiceCtrlDispatcher failed: %d\n", (int) GetLastError()); } return 0; }
int main (int n_args, char ** args) { cout << "******* Image storage server *******" << endl << endl; if (!check_server_arguments (n_args, args)) { cerr << "#SERVER > ERROR - Invalid argument" << endl; exit(-1); } if (!socket_initialization_server (&listen_socket, SP_port, (int) BACKLOG_QUEUE)) { cerr << "#SERVER > ERROR - Can't create a listen socket correctly" << endl; exit(-1); } // Registering services store_image = new Store_image ("store_image", SP_address, SP_port); get_image = new Get_image ("get_image", SP_address, SP_port); get_list = new Get_list ("get_list", SP_address, SP_port); cout << "#SERVER > Registering image_storage server" << endl; if (!register_service_provider (SP_address, SP_port)) cerr << "#SERVER > " << SPACER << "ERROR - Can't register the server" << endl; else { cout << "#SERVER > Registering store_image service" << endl; if (!register_service (store_image->get_description())) cerr << "#SERVER > " << SPACER << "ERROR - Can't register the store_image service" << endl; cout << "#SERVER > Registering get_image service" << endl; if (!register_service (get_image->get_description())) cerr << "#SERVER > " << SPACER << "ERROR - Can't register the get_image service" << endl; cout << "#SERVER > Registering get_list service" << endl; if (!register_service (get_list->get_description())) cerr << "#SERVER > " << SPACER << "ERROR - Can't register the get_list service" << endl; } // Initializing mutex pthread_mutex_init (&mutex_1, NULL); pthread_mutex_init (&mutex_2, NULL); pthread_mutex_init (&mutex_thread_free, NULL); pthread_cond_init (&cond_thread_free, NULL); readers_count = 0; // Creating threads pthread_t thread_ID; for (int i = 0; i < N_THREADS; i++) { if (pthread_create(&thread_ID, NULL, thread_body, (void*) i) != 0) { cerr << "#SERVER > ERROR - Can't create a service thread" << endl; exit(-1); } thread[i].set_ID (thread_ID); } if (pthread_create(&thread_ID, NULL, control_thread_body, NULL) != 0) { cerr << "#SERVER > ERROR - Can't create the control thread" << endl; exit(-1); } control_thread.set_ID (thread_ID); cout << "\n#SERVER > Waiting for connections" << endl; while (control_thread.is_active()) { int client_socket = accept_client_connection (listen_socket); if (client_socket == -1) { if (control_thread.is_active()) cerr << "#SERVER > ERROR - Can't accept the connection with the client" << endl; continue; } while (!assign_execution_thread (client_socket)) pthread_cond_wait (&cond_thread_free, &mutex_thread_free); } // Closing sockets and threads for (int i = 0; i < N_THREADS; i++) { thread[i].thread_exit(); pthread_join(thread[i].get_ID(), NULL); } pthread_join(control_thread.get_ID(), NULL); shutdown(listen_socket, SHUT_RDWR); close(listen_socket); // Unregistering services - Only unregister_service_provider is needed cout << "#SERVER > Unregistering store_image service" << endl; if (!unregister_service (store_image->get_description())) cerr << "#SERVER > " << SPACER << "ERROR - Can't unregister the store_image service" << endl; delete (store_image); cout << "#SERVER > Unregistering get_image service" << endl; if (!unregister_service (get_image->get_description())) cerr << "#SERVER > " << SPACER << "ERROR - Can't unregister the get_image service" << endl; delete (get_image); cout << "#SERVER > Unregistering get_list service" << endl; if (!unregister_service (get_list->get_description())) cerr << "#SERVER > " << SPACER << "ERROR - Can't unregister the get_list service" << endl; delete (get_list); cout << "#SERVER > Unregistering image_storage server" << endl; if (!unregister_service_provider (SP_address, SP_port)) cerr << "#SERVER > " << SPACER << "ERROR - Can't unregister the server" << endl; cout << endl << "#SERVER > Server closed" << endl; cout << endl << "***********************" << endl; exit(0); }
int __cdecl main(int argc, char ** argv) { int i; SERVICE_TABLE_ENTRY serviceTable[] = { { SERVICE_NAME, (LPSERVICE_MAIN_FUNCTION) ServiceMain}, { NULL, NULL } }; BOOL success; if (argc == 1) { // // Register with the SCM // success = StartServiceCtrlDispatcher(serviceTable); if (!success) { service_error_handler("StartServiceCtrlDispatcher", GetLastError()); exit(0); } } else for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-run") == 0) { g_console_event = CreateEvent(NULL, FALSE, FALSE, NULL); if (g_console_event == NULL) { sw_debug(SW_LOG_ERROR, "CreateEvent failed: %d\n", GetLastError()); exit(-1); } SetConsoleCtrlHandler(console_ctrl_handler, TRUE); if (start_mDNSResponder() != S_OK) { exit(-1); } WaitForSingleObject(g_console_event, INFINITE); CloseHandle(g_console_event); stop_mDNSResponder(); exit(0); } else if (strcmp(argv[i], "-install") == 0) { register_service(argc, argv); break; } else if (strcmp(argv[i], "-remove") == 0) { unregister_service(argc, argv); break; } else if (strcmp(argv[i], "-debug") == 0) { // sw_debug_enable(1); } else { fprintf(stderr, "usage: %s [-run][-install][-remove]\n", argv[0]); break; } } return 0; }