X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=server.h;h=a83aaae29aa59362f9665c08c1abcb899cbfdb6c;hp=fcda7a3ace835d65c0e960640291396e62f628ea;hb=74cfed2536a16ca85bc0ce97f6bf307c96ae0d3d;hpb=974c531493fb3c36243f266fb72e2cba561aafd6 diff --git a/server.h b/server.h index fcda7a3a..a83aaae2 100644 --- a/server.h +++ b/server.h @@ -1,67 +1,31 @@ /* - * Copyright (C) 1997-2006 Andre Noll + * Copyright (C) 1997-2007 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 */ -#include "para.h" - /** 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 */ struct server_command { /** the name of the command */ - char *name; + const char *name; /** pointer to the function that handles the command */ - int (*handler)(int, int, char **); + 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; + const char *description; /** summary of the command line options */ - char *synopsis; + const char *usage; /** the long help text */ - char *help; + const char *help; }; /** holds the arguments for the para_server's sender command */ @@ -79,7 +43,7 @@ struct sender_command_data{ }; /** - * 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,61 +58,52 @@ 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 audio file selector */ - char selector_info[MMD_INFO_SIZE]; -/** the number if the current audio file selector */ - int selector_num; -/** commands set this to non-zero to change the current selector */ - int selector_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; + /** Describes the current audio file. */ + struct audio_file_data afd; }; +extern struct server_args_info conf; +extern int afs_socket; int handle_connect(int fd, struct sockaddr_in *addr); void mmd_unlock(void);