Throw out the temporary service vector system

This commit is contained in:
2026-04-24 22:21:37 -05:00
parent 79358c2b56
commit efcd340a3b

View File

@@ -17,16 +17,6 @@ static void signal_handler(int signo) {
}
}
// Only used to construct basic variables of a service before initialization
struct PreService {
char* id;
char* name;
char* icon;
char* text;
char* endpoints;
uint32_t backoff;
};
static int config_handler(void* user, const char* section, const char* name, const char* value) {
if (strcmp(section, "") == 0) {
if (strcmp(name, "service_name") == 0) {
@@ -55,13 +45,13 @@ static int config_handler(void* user, const char* section, const char* name, con
}
} else if (strncmp(CONFIG_SERVICE_PREFIX, section, strlen(CONFIG_SERVICE_PREFIX)) == 0) {
const char* id = section+strlen(CONFIG_SERVICE_PREFIX);
Vector* tmp_services = (Vector*)user;
struct PreService* current_service = NULL;
Vector* service_vector = (Vector*)user;
struct Service* current_service = NULL;
Iterator it = vector_begin(tmp_services);
Iterator end = vector_end(tmp_services);
Iterator it = vector_begin(service_vector);
Iterator end = vector_end(service_vector);
for (; !iterator_equals(&it, &end); iterator_increment(&it)) {
struct PreService* current = *(struct PreService**)iterator_get(&it);
struct Service* current = *(struct Service**)iterator_get(&it);
if (strcmp(id, current->id) == 0) {
current_service = current;
break;
@@ -72,7 +62,7 @@ static int config_handler(void* user, const char* section, const char* name, con
current_service->id = malloc(strlen(id)+1);
strcpy(current_service->id, id);
current_service->backoff = 0;
vector_push_back(tmp_services, &current_service);
vector_push_back(service_vector, &current_service);
}
if (strcmp(name, "name") == 0) {
current_service->name = malloc(strlen(value)+1);
@@ -84,8 +74,15 @@ static int config_handler(void* user, const char* section, const char* name, con
current_service->icon = malloc(strlen(value)+1);
strcpy(current_service->icon, value);
} else if (strcmp(name, "address") == 0) {
current_service->endpoints = malloc(strlen(value)+1);
strcpy(current_service->endpoints, value);
char* endpoints = malloc(strlen(value));
strncpy(endpoints, value, strlen(value));
char* token = strtok(endpoints, ",");
vector_setup(&current_service->endpoints, 255, sizeof(struct Endpoint*));
while (token != NULL) {
add_endpoint(current_service, token);
fflush(stdout);
token = strtok(NULL, ",");
}
} else if (strcmp(name, "backoff") == 0) {
current_service->backoff = atoi(value);
} else {
@@ -139,46 +136,25 @@ int main(int argc, char** argv) {
}
// Load configuration file
Vector tmp_services;
vector_setup(&tmp_services, 255, sizeof(struct PreService*));
vector_setup(&services, 255, sizeof(struct Service*));
printf("Loading configuration file: %s\n", config_path);
int err = ini_parse(config_path, config_handler, &tmp_services);
int err = ini_parse(config_path, config_handler, &services);
if (err < 0) {
fprintf(stderr, "Failed to load configuration file: %i\n", err);
return 1;
}
// initialize Services from temp vector
vector_setup(&services, 255, sizeof(struct Service*));
Iterator it = vector_begin(&tmp_services);
Iterator end = vector_end(&tmp_services);
Iterator it = vector_begin(&services);
Iterator end = vector_end(&services);
for (; !iterator_equals(&it, &end); iterator_increment(&it)) {
struct PreService* preservice = *(struct PreService**)iterator_get(&it);
printf("Initializing service \"%s\"\n", preservice->name);
struct Service* service = *(struct Service**)iterator_get(&it);
printf("Configuring service \"%s\"\n", service->name);
fflush(stdout);
struct Service* service = malloc(8192);
service->id = preservice->id;
service->name = preservice->name;
service->icon = preservice->icon;
service->text = preservice->text;
service->last_state = DOWN;
service->backoff = preservice->backoff == 0 ? global_backoff : preservice->backoff;
char* endpoints = malloc(strlen(preservice->endpoints)+1);
strcpy(endpoints, preservice->endpoints);
char* token = strtok(endpoints, ",");
vector_setup(&service->endpoints, 255, sizeof(struct Endpoint*));
while (token != NULL) {
add_endpoint(service, token);
fflush(stdout);
token = strtok(NULL, ",");
}
vector_push_back(&services, &service);
service->backoff = service->backoff == 0 ? global_backoff : service->backoff;
load_service(&service);
}
vector_shrink_to_fit(&services);
vector_clear(&tmp_services);
vector_destroy(&tmp_services);
struct MHD_Daemon *daemon = MHD_start_daemon(MHD_USE_AUTO | MHD_USE_DUAL_STACK | MHD_USE_INTERNAL_POLLING_THREAD, listen_port, NULL, NULL, &http_response, NULL, MHD_OPTION_END);
if (daemon == NULL) {