X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=server.h;h=a5c6d3e105d901f1c3be89b6dc0f52414ab7957c;hp=ba9b39e45359ef08deba2c2ead21d4acfc4616b2;hb=5d581fbd46a6d1949bfd876aec63041dc6724eb0;hpb=c141cc6915a32fb92766dc27f0df222d13f27d8b;ds=sidebyside diff --git a/server.h b/server.h index ba9b39e4..a5c6d3e1 100644 --- a/server.h +++ b/server.h @@ -1,85 +1,49 @@ /* - * Copyright (C) 1997-2006 Andre Noll + * Copyright (C) 1997-2008 Andre Noll * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Licensed under the GPL v2. For licencing details see COPYING. */ -/** \file server.h common server data structures */ +/** \file server.h Common server data structures. */ -#include "para.h" - -/** size of the dbinfo and audio_file info strings of struct misc_meta_data */ +/** Size of the selector_info and audio_file info strings of struct misc_meta_data. */ #define MMD_INFO_SIZE 16384 /** - * permission flags that can be set individually for any server command - * - * - DB_READ: command reads from the database - * - DB_WRITE: command changes the contents of the database - * - AFS_READ: command reads information about the current audio stream - * - AFS_WRITE: command changes the current audio stream - */ -enum {DB_READ = 1, DB_WRITE = 2, AFS_READ = 4, AFS_WRITE = 8}; - -/** - * data needed to authenticate the user - */ -struct user{ -/** the username */ - char name[MAXLINE]; -/** full path to the public RSA key */ - char pubkey_file[_POSIX_PATH_MAX]; -/** the privileges of this user */ - unsigned int perms; -}; - -/** - * defines one command of para_server + * Defines one command of para_server. */ struct server_command { -/** the name of the command */ - char *name; -/** pointer to the function that handles the command */ - int (*handler)(int, int, char **); -/** the privileges a user must have to execute this command */ + /** The name of the command. */ + const char *name; + /** Pointer to the function that handles the command. */ + int (*handler)(int, int, char * const * const); + /** The privileges a user must have to execute this command. */ unsigned int perms; -/** one-line description of the command */ - char *description; -/** summary of the command line options */ - char *synopsis; -/** the long help text */ - char *help; + /** One-line description of the command. */ + const char *description; + /** Summary of the command line options. */ + const char *usage; + /** The long help text. */ + const char *help; }; -/** holds the arguments for the para_server's sender command */ +/** Holds the arguments for the para_server's sender command. */ struct sender_command_data{ -/** greater than 0 indicates that a sender cmd is already queued */ + /** Greater than 0 indicates that a sender cmd is already queued. */ int cmd_num; -/** the number of the sender in question */ + /** The number of the sender in question. */ int sender_num; -/** used for the allow/deny/add/remove subcommands */ + /** Used for the allow/deny/add/remove subcommands. */ struct in_addr addr; -/** used for allow/deny */ + /** Used for allow/deny. */ int netmask; -/** the portnumber for add/remove */ + /** The port number for add/remove. */ int port; }; /** - * used for parent-child communication + * Used for parent-child communication. * * There's only one struct of this type which lives in shared memory * for communication between the server instances. Access to this @@ -94,64 +58,56 @@ struct sender_command_data{ * - The contents are listed in the stat command and have to be up to * date. */ -struct misc_meta_data{ -/** the size of the current audio file in bytes */ - long unsigned int size; -/** the full path of the current audio file */ - char filename[_POSIX_PATH_MAX]; -/** the last modification file of the current audio file */ +struct misc_meta_data { + /** The size of the current audio file in bytes. */ + size_t size; + /** The last modification time of the current audio file. */ time_t mtime; -/* the number of the current audio format */ - int audio_format; -/** the "old" status flags -- commands may only read them */ - unsigned int afs_status_flags; -/** the new status flags -- commands may set them **/ - unsigned int new_afs_status_flags; -/** the number of data chunks sent for the current audio file */ + /** The "old" status flags -- commands may only read them. */ + unsigned int vss_status_flags; + /** The new status flags -- commands may set them. */ + unsigned int new_vss_status_flags; + /** The number of data chunks sent for the current audio file. */ long unsigned chunks_sent; -/** the number of chunks this audio file contains */ - long unsigned chunks_total; -/** set by the jmp/ff commands to the new position in chunks */ + /** Set by the jmp/ff commands to the new position in chunks. */ long unsigned repos_request; -/** the number of the chunk currently sent out*/ + /** The number of the chunk currently sent out. */ long unsigned current_chunk; -/** the milliseconds that have been skipped of the current audio file */ + /** The milliseconds that have been skipped of the current audio file. */ long offset; -/** the length of the audio file in seconds */ - int seconds_total; -/** the time para_server started to stream */ + /** The time para_server started to stream. */ struct timeval stream_start; -/** a string that gets filled in by the audio format handler */ - char audio_file_info[MMD_INFO_SIZE]; -/** the event counter - * - * commands may increase this to force a status update to be sent to all - * connected clients -*/ + /** + * The event counter. + * + * Commands may increase this to force a status update to be sent to all + * connected clients. + */ unsigned int events; -/** the number of audio files already sent */ + /** The number of audio files already sent. */ unsigned int num_played; -/** the number of executed commands */ + /** The number of executed commands. */ unsigned int num_commands; -/** the number of connections para_server received so far */ + /** The number of connections para_server received so far. */ unsigned int num_connects; -/** the number of connections currently active */ + /** The number of connections currently active. */ unsigned int active_connections; -/** the process id of para_server */ + /** The process id of para_server. */ pid_t server_pid; -/** a string that gets filled in by the current database tool */ - char dbinfo[MMD_INFO_SIZE]; -/** the number if the current database tool */ - int dbt_num; -/** commands set this to non-zero to request a database tool change */ - int dbt_change; -/** used by the sender command */ + /** This gets updated by afs and contains its current mode. */ + char afs_mode_string[MAXLINE]; + /** Used by the sender command. */ struct sender_command_data sender_cmd_data; -/** each dbtool has its private data pointer */ - void *private_dbtool_data[NUM_DBTOOLS]; + /** Describes the current audio file. */ + struct audio_file_data afd; }; +/** Command line options for para_server. */ +extern struct server_args_info conf; + +/** Socket for afs-server communication. */ +extern int afs_socket; -int handle_connect(int fd, struct sockaddr_in *addr); +int handle_connect(int fd, const char *peername); void mmd_unlock(void); void mmd_lock(void);