Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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();
}