X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=vss.h;h=ed2cd7852f92d505e04ec68dbf4608f277e3cfde;hp=5c917e6d456a40672204c32aabb8cbc501ee4308;hb=f16b28109fe2f4a7caf83350fff8bfcfe73b7b6c;hpb=6bdac07456cb5872f824028912d1049883a9c21f diff --git a/vss.h b/vss.h index 5c917e6d..ed2cd785 100644 --- a/vss.h +++ b/vss.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2009 Andre Noll + * Copyright (C) 2005-2010 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -23,5 +23,33 @@ const char *supported_audio_formats(void); #define VSS_REPOS 4 /** Currently playing. */ #define VSS_PLAYING 8 -/** A client requested to change the audio file selector. */ -#define VSS_CHANGE 16 + +/** + * Each paraslash sender may register arbitrary many clients to the virtual + * streaming system, possibly with varying fec parameters. In order to do so, + * it must allocate a \a fec_client_parms structure and pass it to \ref + * add_fec_client. + * + * Clients are automatically removed from that list by the vss if an error + * occurs, or if the sender requests deletion of a client by calling \ref + * vss_del_fec_client(). + */ +struct fec_client; + +/** FEC parameters requested by FEC clients. */ +struct fec_client_parms { + /** Number of data slices plus redundant slices. */ + uint8_t slices_per_group; + /** Number of slices minus number of redundant slices. */ + uint8_t data_slices_per_group; + /** Maximal number of bytes per slice. */ + uint16_t max_slice_bytes; + /** Called by vss.c when the next slice should be sent. */ + int (*send)(char *buf, size_t num_bytes, void *private_data); + /** Passed verbatim to \a send(). */ + void *private_data; +}; + +int vss_add_fec_client(struct fec_client_parms *fcp, struct fec_client **result); +void vss_del_fec_client(struct fec_client *fc); +size_t vss_get_fec_eof_packet(const char **buf);