int main(int argc, char *argv[]) { const char *root_folder = getenv("RUNVPN_ROOT"); struct vpn *vpn = NULL; struct vpn *prev = NULL; if (root_folder == NULL) { printf("Environment variable \"RUNVPN_ROOT\" is not defined.\n"); return EXIT_FAILURE; } if (argc == 1) { /* fprintf(stdout, "%30s%s%s\n", BLUE_GRAY, "Listing VPNS", RESET); */ puts(" " BLUE_GRAY "Listing VPNS" RESET); vpn = get_vpns(root_folder); while(vpn != NULL) { //for (vpn = get_vpns(root_folder); vpn; vpn = vpn->next) { fprintf(stdout, "%25s - ", vpn->name); switch (vpn_status(vpn)) { case VPN_ERROR: return EXIT_FAILURE; case VPN_DEAD: print_color("Down", YELLOW); break; case VPN_RUNNING: print_color("Up", GREEN); break; case VPN_PERM_DENIED: print_color("Permission denied", RED); break; case VPN_STALE_PID: print_color("Down", YELLOW); vpn_delete_logfile(vpn); vpn_delete_pidfile(vpn); break; default: print_color("Unknown", RED); break; } prev = vpn; vpn = prev->next; vpn_free(prev); free(prev); } } else if (argc == 2) { struct vpn vpn; if (vpn_init(&vpn, root_folder, argv[argc - 1])) { fprintf(stderr, "Problem finding vpn: %s\n", strerror(errno)); return EXIT_FAILURE; } if (vpn_status(&vpn) == VPN_ERROR || vpn_start(&vpn, NO_DAEMON)) return EXIT_FAILURE; vpn_start(&vpn, NO_DAEMON); vpn_free(&vpn); } else if (argc == 3) { struct vpn vpn; char *name = *++argv; char *argument = *++argv; if (vpn_init(&vpn, root_folder, name) == -1) { fprintf(stderr, "Problem finding vpn: %s\n", strerror(errno)); return EXIT_FAILURE; } if (vpn_status(&vpn) == VPN_ERROR) return EXIT_FAILURE; /* Do different things depending on 2nd argument pased. */ if (strcmp(argument, "stop") == 0) { if (vpn_stop(&vpn)) return EXIT_FAILURE; } else if (strcmp(argument, "reload") == 0) { if (vpn_reload(&vpn)) return EXIT_FAILURE; } else if (strcmp(argument, "daemon") == 0) { if (vpn_start(&vpn, DAEMON)) return EXIT_FAILURE; } else if (strcmp(argument, "drestart") == 0) { if (vpn_stop(&vpn) || vpn_start(&vpn, DAEMON)) return EXIT_FAILURE; } else if (strcmp(argument, "restart") == 0) { if (vpn_stop(&vpn) || vpn_start(&vpn, NO_DAEMON)) return EXIT_FAILURE; } else if (strcmp(argument, "log") == 0) { vpn_dumplog(&vpn); } else { fprintf(stderr, "Unknown action '%s'\n", argument); } vpn_free(&vpn); } return EXIT_SUCCESS; }
JNIEXPORT void JNICALL Java_com_choury_sproxy_SproxyVpnService_reload(JNIEnv *, jobject){ LOG("native SproxyVpnService.reload.\n"); return vpn_reload(); }