int main(int argc, char* argv[]) { struct timeval start; struct timeval now; dsmesock_connection_t *conn; DSM_MSGTYPE_GET_VERSION req_msg = DSME_MSG_INIT(DSM_MSGTYPE_GET_VERSION); gettimeofday(&start, NULL); printf("%s (pid %i): Wait for DSME socket...\n", argv[0], getpid()); fflush(stdout); while (1) { conn = dsmesock_connect(); if (conn > 0) { /* Give DSME time to accept the client socket before closing the socket connection */ if (!send_to_dsme(conn, &req_msg)) { dsmesock_close(conn); printf("%s: ERROR: send to DSME socket failed\n", argv[0]); return EXIT_FAILURE; } else { dsmesock_close(conn); printf("%s: OK: send to DSME socket succeeded\n", argv[0]); return EXIT_SUCCESS; } } gettimeofday(&now, NULL); if (now.tv_sec >= (start.tv_sec + DSME_START_TIMEOUT)) { fprintf(stderr, "%s: ERROR: Timeout waiting for DSME socket\n", argv[0]); return EXIT_FAILURE; } usleep(20000); } return EXIT_FAILURE; }
/** * Close dsmesock connection */ static void mce_dsme_disconnect(void) { if( mce_dsme_iowatch_id ) { mce_log(LL_DEBUG, "Removing DSME socket notifier"); g_source_remove(mce_dsme_iowatch_id); mce_dsme_iowatch_id = 0; } if( mce_dsme_connection ) { mce_log(LL_DEBUG, "Closing DSME socket"); dsmesock_close(mce_dsme_connection); mce_dsme_connection = 0; } // FIXME: should we assume something about the system state? }
static void close_client(dsmesock_connection_t* conn) { if (conn) { remove_client(conn); if (conn->channel) { /* the channel does not own the socket fd (dsmesock does), * so don't do g_io_channel_shutdown(); * instead, unset close on unref. */ g_io_channel_set_close_on_unref(conn->channel, FALSE); g_io_channel_unref(conn->channel); conn->channel = 0; } dsmesock_close((dsmesock_connection_t*)conn); } }
/** * Close dsmesock connection */ static void close_dsmesock(void) { mce_log(LL_DEBUG, "Shutting down dsmesock I/O channel"); if (dsme_iochan != NULL) { GError *error = NULL; g_source_remove(dsme_data_source_id); g_source_remove(dsme_error_source_id); g_io_channel_shutdown(dsme_iochan, FALSE, &error); g_io_channel_unref(dsme_iochan); g_clear_error(&error); } mce_log(LL_DEBUG, "Closing DSME sock"); dsmesock_close(dsme_conn); }
int main(int argc, char *argv[]) { const char *program_name = argv[0]; if (argc > 1) { usage(program_name); return EXIT_FAILURE; } conn = dsmesock_connect(); if (conn == 0) { perror("dsmesock_connect"); return EXIT_FAILURE; } if (send_kick_wd() <= 0) { printf("sending failed!\n"); return EXIT_FAILURE; } dsmesock_close(conn); return EXIT_SUCCESS; }
int main(int argc, char *argv[]) { dsmesock_connection_t * conn; int next_option; const char* program_name = argv[0]; int batt_status = -1; int charger_status = -1; const char* short_options = "hb:c:"; const struct option long_options[] = { { "battery", 0, NULL, 'b' }, { "charger", 0, NULL, 'c' }, { "help", 0, NULL, 'h' } }; do { next_option = getopt_long(argc, argv, short_options, long_options, NULL); switch (next_option) { case 'b': batt_status = atoi(optarg); break; case 'c': charger_status = atoi(optarg); break; case 'h': usage(program_name); return EXIT_SUCCESS; break; case '?': usage(program_name); return EXIT_FAILURE; break; } } while (next_option != -1); if (batt_status == -1 && charger_status == -1) { usage(program_name); return EXIT_FAILURE; } conn = dsmesock_connect(); if (conn == 0) { perror("dsmesock_connect"); return 2; } if (batt_status != -1) { DSM_MSGTYPE_SET_BATTERY_STATE msg = DSME_MSG_INIT(DSM_MSGTYPE_SET_BATTERY_STATE); msg.empty = !batt_status; dsmesock_send(conn, &msg); } if (charger_status != -1) { DSM_MSGTYPE_SET_CHARGER_STATE msg = DSME_MSG_INIT(DSM_MSGTYPE_SET_CHARGER_STATE); msg.connected = !!charger_status; dsmesock_send(conn, &msg); } dsmesock_close(conn); exit(0); }