// Handler to catch SIGINT (Ctrl+C) void int_handler(int s) { mio_disconnect(conn); mio_conn_free(conn); if (response != NULL ) mio_response_free(response); exit(1); }
int main(int argc, char **argv) { char *username = NULL; char *password = NULL; char *xmpp_server = NULL; char pubsub_server[80]; int xmpp_server_port = 5223; int verbose = 0; int current_arg_num = 1; char *current_arg_name = NULL; char *current_arg_val = NULL; int err; struct sigaction sig_int_handler; // Add SIGINT handler sig_int_handler.sa_handler = int_handler; sigemptyset(&sig_int_handler.sa_mask); sig_int_handler.sa_flags = 0; sigaction(SIGINT, &sig_int_handler, NULL ); if (argc == 1 || !strcmp(argv[1], "-help")) { print_usage(argv[0]); return -1; } while (current_arg_num < argc) { current_arg_name = argv[current_arg_num++]; if (strcmp(current_arg_name, "-help") == 0) { print_usage(argv[0]); return -1; } if (strcmp(current_arg_name, "-verbose") == 0) { verbose = 1; continue; } if (current_arg_num == argc) { print_usage(argv[0]); return -1; } current_arg_val = argv[current_arg_num++]; if (strcmp(current_arg_name, "-u") == 0) { username = current_arg_val; xmpp_server = _mio_get_server(username); if (xmpp_server == NULL ) { fprintf(stderr, "Invalid JID, use format user@domain\n"); return MIO_ERROR_INVALID_JID; } strcpy(pubsub_server, "pubsub."); strcat(pubsub_server, xmpp_server); } else if (strcmp(current_arg_name, "-p") == 0) { password = current_arg_val; } else { fprintf(stderr, "Unknown argument: %s\n", current_arg_name); print_usage(argv[0]); return -1; } } if (username == NULL ) { fprintf(stderr, "Username missing\n"); print_usage(argv[0]); return -1; } else if (password == NULL ) { fprintf(stdout, "%s's ", username); fflush(stdout); password = getpass("password: "******"Invalid password\n"); print_usage(argv[0]); return -1; } } if (verbose) { fprintf(stdout, "XMPP Server: %s\n", xmpp_server); fprintf(stdout, "XMPP Server Port: %d\n", xmpp_server_port); fprintf(stdout, "XMPP PubSub Server: %s\n", pubsub_server); fprintf(stdout, "Username: %s\n", username); fprintf(stdout, "Verbose: YES\n"); fprintf(stdout, "\n"); conn = mio_conn_new(MIO_LEVEL_DEBUG); err = mio_connect(username, password, NULL, NULL, conn); } else{ conn = mio_conn_new(MIO_LEVEL_ERROR); err = mio_connect(username, password, NULL, NULL, conn); } if (err == MIO_OK) fprintf(stdout, "Authentication successful\n"); else fprintf(stderr, "Authentication failed\n"); mio_disconnect(conn); mio_conn_free(conn); return err; }
// Handler to catch SIGINT (Ctrl+C) void int_handler(int s) { mio_disconnect(conn); mio_conn_free(conn); exit(1); }