/** the file containing user information (public key, permissions) */
char *user_list_file = NULL;
-extern void dccp_send_init(struct sender *);
-extern void http_send_init(struct sender *);
-extern void ortp_send_init(struct sender *);
-
-/** the list of supported senders */
-struct sender senders[] = {
- {
- .name = "http",
- .init = http_send_init,
- },
- {
- .name = "dccp",
- .init = dccp_send_init,
- },
-#ifdef HAVE_ORTP
- {
- .name = "ortp",
- .init = ortp_send_init,
- },
-#endif
- {
- .name = NULL,
- }
-};
-
-
/* global variables for server-internal use */
static FILE *logfile;
static int mmd_mutex, mmd_shm_id;
mmd->active_connections = 0;
mmd->vss_status_flags = VSS_NEXT;
mmd->new_vss_status_flags = VSS_NEXT;
- mmd->sender_cmd_data.cmd_num = -1;
return;
err_out:
- PARA_EMERG_LOG("%s", para_strerror(-ret));
+ PARA_EMERG_LOG("%s\n", para_strerror(-ret));
exit(EXIT_FAILURE);
}
struct server_cmdline_parser_params params = {
.override = override,
.initialize = 0,
- .check_required = 0,
- .check_ambiguity = 0
+ .check_required = 1,
+ .check_ambiguity = 0,
+ .print_errors = 1
};
server_cmdline_parser_config_file(cf, &conf, ¶ms);
conf.daemon_given = tmp;
}
- /* logfile */
- if (!conf.logfile_given && conf.daemon_given) {
- ret = -1;
- PARA_EMERG_LOG("fatal: daemon option, but no log file given\n");
- goto out;
- }
if (conf.logfile_given)
logfile = open_log(conf.logfile_arg);
ret = 1;
{
/* connector's address information */
int sockfd;
-
+ struct server_cmdline_parser_params params = {
+ .override = 0,
+ .initialize = 1,
+ .check_required = 0,
+ .check_ambiguity = 0,
+ .print_errors = 1
+ };
init_random_seed();
/* parse command line options */
- server_cmdline_parser(argc, argv, &conf);
+ server_cmdline_parser_ext(argc, argv, &conf, ¶ms);
HANDLE_VERSION_FLAG("server", conf);
para_drop_privileges(conf.user_arg, conf.group_arg);
/* parse config file, open log and set defaults */
*/
static void handle_sighup(void)
{
- PARA_NOTICE_LOG("%s", "SIGHUP\n");
+ PARA_NOTICE_LOG("SIGHUP\n");
close_log(logfile); /* gets reopened if necessary by parse_config */
logfile = NULL;
parse_config(1); /* reopens log */
para_fd_set(signal_pipe, &rfds, &max_fileno);
timeout = vss_preselect(&rfds, &wfds, &max_fileno);
status_refresh();
- for (i = 0; senders[i].name; i++) {
- if (!senders[i].pre_select)
- continue;
- senders[i].pre_select(&max_fileno, &rfds, &wfds);
- }
mmd_unlock();
ret = para_select(max_fileno + 1, &rfds, &wfds, timeout);
mmd_lock();
- vss_post_select(&rfds, &wfds);
if (ret < 0)
goto repeat;
- for (i = 0; senders[i].name; i++) {
- if (!senders[i].post_select)
- continue;
- senders[i].post_select(&rfds, &wfds);
- }
- vss_send_chunk();
+ vss_post_select(&rfds, &wfds);
status_refresh();
if (FD_ISSET(signal_pipe, &rfds)) {
int sig;
exit(EXIT_FAILURE);
}
}
- if (mmd->sender_cmd_data.cmd_num >= 0) {
- int num = mmd->sender_cmd_data.cmd_num,
- s = mmd->sender_cmd_data.sender_num;
-
- if (senders[s].client_cmds[num])
- senders[s].client_cmds[num](&mmd->sender_cmd_data);
- mmd->sender_cmd_data.cmd_num = -1;
- }
if (!FD_ISSET(sockfd, &rfds))
goto repeat;
random();
chld_pid = fork();
if (chld_pid < 0) {
- PARA_CRIT_LOG("%s", "fork failed\n");
+ PARA_CRIT_LOG("fork failed\n");
goto repeat;
}
if (chld_pid) {