Add cli binary
This commit is contained in:
parent
fe7e922022
commit
9ed779b8ae
79
src/impl/cli/main.c
Normal file
79
src/impl/cli/main.c
Normal file
@ -0,0 +1,79 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "states.h"
|
||||
#include "open_gui.h"
|
||||
|
||||
#ifndef PROJ_VERSION
|
||||
#define PROJ_VERSION "unknown"
|
||||
#endif
|
||||
|
||||
States currentstate;
|
||||
char *version = PROJ_VERSION;
|
||||
|
||||
void update_state(States state) {
|
||||
currentstate = state;
|
||||
}
|
||||
|
||||
int is_arg(int ac, char **argv, char *arg) {
|
||||
if (ac < 2) {
|
||||
return 0;
|
||||
}
|
||||
for(int x=1; x < ac; x++) {
|
||||
if (0 == strcmp(argv[x], arg)) {
|
||||
return x; // return position of arg
|
||||
}
|
||||
}
|
||||
return 0; // arg not present
|
||||
}
|
||||
|
||||
void display_version(bool is_debug) {
|
||||
if(is_debug) printf("v%s-beta\n", version);
|
||||
else printf("v%s\n", version);
|
||||
}
|
||||
|
||||
void display_about(bool is_debug) {
|
||||
printf("Melon VPN\n");
|
||||
display_version(is_debug);
|
||||
printf("Copyright OnPointCoding\n");
|
||||
printf("https://software.onpointcoding.net\n");
|
||||
printf("OnPointCoding.net\n");
|
||||
printf("Author: MrMelon54\n");
|
||||
printf("Artist: MrMelon54\n");
|
||||
}
|
||||
|
||||
void display_help(bool is_debug) {
|
||||
printf("Melon VPN Help\n");
|
||||
printf("-h, --help Display this help message\n");
|
||||
printf("--about About this program\n");
|
||||
}
|
||||
|
||||
int main (int argc, char **argv) {
|
||||
int status;
|
||||
currentstate = DISCONNECTED;
|
||||
|
||||
bool is_debug = is_arg(argc, argv, "--debug");
|
||||
|
||||
if(is_arg(argc, argv, "--help") || is_arg(argc, argv, "-h")) {
|
||||
display_help(is_debug);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(is_arg(argc, argv, "--version") || is_arg(argc, argv, "-v")) {
|
||||
display_version(is_debug);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(is_arg(argc, argv, "--about")) {
|
||||
display_about(is_debug);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(is_arg(argc, argv, "--gui")) {
|
||||
open_gui(argc, argv, is_debug);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
57
src/impl/cli/open_gui.c
Normal file
57
src/impl/cli/open_gui.c
Normal file
@ -0,0 +1,57 @@
|
||||
#include <stdio.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
#include "magic_code.h"
|
||||
#include "open_gui.h"
|
||||
|
||||
int open_gui(int argc, char **argv, bool is_debug) {
|
||||
void *lib_handle;
|
||||
void (*fn)(int*, int*);
|
||||
int (*gui)(int, char**);
|
||||
int a = 0;
|
||||
int b = 0;
|
||||
char *error;
|
||||
char *p;
|
||||
|
||||
if(is_debug) p = "./libmelonvpngui.so";
|
||||
else p = "/usr/lib/melonvpn/libmelonvpngui.so";
|
||||
|
||||
lib_handle = dlopen(p, RTLD_LAZY);
|
||||
if (!lib_handle) {
|
||||
fprintf(stderr, "Failed to open Melon VPN gui\n");
|
||||
fprintf(stderr, "Try installing the package 'melonvpngui'\n");
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return 1;
|
||||
}
|
||||
|
||||
fn = dlsym(lib_handle, "get_magic_code");
|
||||
if ((error = dlerror()) != NULL) {
|
||||
fprintf(stderr, "Failed to open Melon VPN gui\n");
|
||||
fprintf(stderr, "The function 'get_magic_code' couldn't be found\n");
|
||||
fprintf(stderr, "Check the package 'melonvpngui' is installed correctly\n");
|
||||
fprintf(stderr, "%s\n", error);
|
||||
return 1;
|
||||
}
|
||||
|
||||
(*fn)(&a,&b);
|
||||
|
||||
if(a==MAGIC_CODE_A && b==MAGIC_CODE_B) {
|
||||
gui = dlsym(lib_handle, "run_gui");
|
||||
if((error = dlerror()) != NULL) {
|
||||
fprintf(stderr, "Failed to open Melon VPN gui\n");
|
||||
fprintf(stderr, "The function 'run_gui' couldn't be found\n");
|
||||
fprintf(stderr, "Check the package 'melonvpngui' is installed correctly\n");
|
||||
fprintf(stderr, "%s\n", error);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int fake_argc = 1;
|
||||
char *fake_argv[1] = {0};
|
||||
fake_argv[0] = argv[0];
|
||||
|
||||
(*gui)(fake_argc,fake_argv);
|
||||
}
|
||||
|
||||
dlclose(lib_handle);
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user