void daemon_consoleserver_init(void) { struct sockaddr_un sunaddr; int res, i; char *daemonctlfile = config_get_daemonctlfile(); for (i = 0; i < MAX_CONSOLECLIENT_NUM; i++) consoles[i].fd = -1; if (access(daemonctlfile, F_OK) >= 0) { // Control file exists? if (unlink(daemonctlfile) < 0) { // File exists, but can't delete? log_daemon_initconsoleserverfailed(); free(daemonctlfile); return; } } // Creating the console server socket daemon_serversocket = socket(PF_LOCAL, SOCK_STREAM, 0); if (daemon_serversocket < 0) { log_daemon_initconsoleserverfailed(); free(daemonctlfile); return; } memset(&sunaddr, 0, sizeof(struct sockaddr_un)); sunaddr.sun_family = AF_LOCAL; strncpy(sunaddr.sun_path, daemonctlfile, sizeof(sunaddr.sun_path)); free(daemonctlfile); res = bind(daemon_serversocket, (struct sockaddr *)&sunaddr, sizeof(sunaddr)); if (res) { log_daemon_initconsoleserverfailed(); close(daemon_serversocket); daemon_serversocket = -1; return; } res = listen(daemon_serversocket, MAX_CONSOLECLIENT_NUM); if (res < 0) { log_daemon_initconsoleserverfailed(); close(daemon_serversocket); daemon_serversocket = -1; return; } daemon_poll_addfd_read(daemon_serversocket); }
void daemon_consoleserver_deinit(void) { int i; char *daemonctlfile = config_get_daemonctlfile(); if (daemon_serversocket >= 0) { for (i = 0; i < MAX_CONSOLECLIENT_NUM; i++) { if (consoles[i].fd == -1) // Slot not used? continue; daemon_consoleserver_closeconsole(i); } daemon_consoleserver_process(); // Write pending lines to the log daemon_poll_removefd(daemon_serversocket); close(daemon_serversocket); daemon_serversocket = -1; unlink(daemonctlfile); } free(daemonctlfile); }
void config_init(char *configfilename) { GError *error = NULL; char *tmp_str; struct in_addr *tmp_addr; console_log("config: init\n"); if (configfilename != NULL) config_configfilename = configfilename; FILE *f = fopen(config_configfilename, "r"); if (f == NULL) { console_log("config: config file %s doesn't exist, creating\n", config_configfilename); f = fopen(config_configfilename, "w"); if (!f) { console_log("config error: can't save, file is not writable\n"); return; } fputs("[main]\n", f); } fclose(f); if (keyfile != NULL) { g_key_file_free(keyfile); keyfile = NULL; } keyfile = g_key_file_new(); flags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS; if (!g_key_file_load_from_file(keyfile, config_configfilename, flags, &error)) { console_log("config: error loading file\n"); g_key_file_free(keyfile); keyfile = NULL; } // We read everything, a default value will be set for non-existent keys in the config file. config_get_loglevel(); tmp_str = config_get_logfilename(); free(tmp_str); tmp_str = config_get_pidfilename(); free(tmp_str); tmp_str = config_get_daemonctlfile(); free(tmp_str); tmp_str = config_get_ttyconsoledev(); free(tmp_str); config_get_ttyconsoleenabled(); config_get_ttyconsolebaudrate(); tmp_str = config_get_netdevicename(); free(tmp_str); config_get_repeaterinfoupdateinsec(); config_get_repeaterinactivetimeoutinsec(); config_get_rssiupdateduringcallinmsec(); config_get_calltimeoutinsec(); config_get_datatimeoutinsec(); tmp_str = config_get_ignoredsnmprepeaterhosts(); free(tmp_str); tmp_str = config_get_ignoredhosts(); free(tmp_str); tmp_str = config_get_allowedtalkgroups(); free(tmp_str); tmp_str = config_get_ignoredtalkgroups(); free(tmp_str); tmp_str = config_get_remotedbhost(); free(tmp_str); tmp_str = config_get_remotedbuser(); free(tmp_str); tmp_str = config_get_remotedbpass(); free(tmp_str); tmp_str = config_get_remotedbname(); free(tmp_str); tmp_str = config_get_remotedbtableprefix(); free(tmp_str); tmp_str = config_get_userdbtablename(); free(tmp_str); config_get_remotedbreconnecttrytimeoutinsec(); config_get_remotedbdeleteolderthansec(); config_get_remotedbuserlistdlperiodinsec(); config_get_remotedbmaintenanceperiodinsec(); config_get_remotedbmsgqueuepollintervalinsec(); config_get_updatestatstableenabled(); config_get_httpserverenabled(); config_get_httpserverport(); tmp_addr = config_get_masteripaddr(); free(tmp_addr); config_get_mindatapacketsendretryintervalinsec(); config_get_datapacketsendmaxretrycount(); config_get_smsretransmittimeoutinsec(); tmp_str = config_get_aprsserverhost(); free(tmp_str); config_get_aprsserverport(); tmp_str = config_get_aprsservercallsign(); free(tmp_str); config_get_aprsserverpasscode(); tmp_str = config_get_aprsposdescription(); free(tmp_str); config_get_smsretransmitenabled(); config_writeconfigfile(); }