From ed22b57ef0721549f8e830121ef2eacc57ecf809 Mon Sep 17 00:00:00 2001 From: darkeye Date: Sun, 25 Feb 2007 15:16:23 +0000 Subject: [PATCH] added cutting support for multiple [file-N] segments, re #3 --- darkice/trunk/src/DarkIce.cpp | 8 ++++---- darkice/trunk/src/FileSink.cpp | 18 +++++++++++------- darkice/trunk/src/FileSink.h | 18 +++++++++++++++--- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/darkice/trunk/src/DarkIce.cpp b/darkice/trunk/src/DarkIce.cpp index 864f66d..1a18181 100644 --- a/darkice/trunk/src/DarkIce.cpp +++ b/darkice/trunk/src/DarkIce.cpp @@ -317,7 +317,7 @@ DarkIce :: configIceCast ( const Config & config, localDumpName = Util::fileAddDate(localDumpName); } - localDumpFile = new FileSink( localDumpName); + localDumpFile = new FileSink( stream, localDumpName); if ( !localDumpFile->exists() ) { if ( !localDumpFile->create() ) { reportEvent( 1, "can't create local dump file", @@ -519,7 +519,7 @@ DarkIce :: configIceCast2 ( const Config & config, localDumpName = Util::fileAddDate(localDumpName); } - localDumpFile = new FileSink( localDumpName); + localDumpFile = new FileSink( stream, localDumpName); if ( !localDumpFile->exists() ) { if ( !localDumpFile->create() ) { reportEvent( 1, "can't create local dump file", @@ -762,7 +762,7 @@ DarkIce :: configShoutCast ( const Config & config, localDumpName = Util::fileAddDate(localDumpName); } - localDumpFile = new FileSink( localDumpName); + localDumpFile = new FileSink( stream, localDumpName); if ( !localDumpFile->exists() ) { if ( !localDumpFile->create() ) { reportEvent( 1, "can't create local dump file", @@ -907,7 +907,7 @@ DarkIce :: configFileCast ( const Config & config ) // go on and create the things // the underlying file - FileSink * targetFile = new FileSink( targetFileName); + FileSink * targetFile = new FileSink( stream, targetFileName); if ( !targetFile->exists() ) { if ( !targetFile->create() ) { throw Exception( __FILE__, __LINE__, diff --git a/darkice/trunk/src/FileSink.cpp b/darkice/trunk/src/FileSink.cpp index 97c7dad..1752490 100644 --- a/darkice/trunk/src/FileSink.cpp +++ b/darkice/trunk/src/FileSink.cpp @@ -118,10 +118,12 @@ static const char fileid[] = "$Id$"; * Initialize the object *----------------------------------------------------------------------------*/ void -FileSink :: init ( const char * name ) throw ( Exception ) +FileSink :: init ( const char * configName, + const char * name ) throw ( Exception ) { - fileName = Util::strDup( name); - fileDescriptor = 0; + this->configName = Util::strDup(configName); + fileName = Util::strDup(name); + fileDescriptor = 0; } @@ -147,7 +149,7 @@ FileSink :: FileSink ( const FileSink & fs ) throw ( Exception ) { int fd; - init( fs.fileName); + init( fs.configName, fs.fileName); if ( (fd = fs.fileDescriptor ? dup( fs.fileDescriptor) : 0) == -1 ) { strip(); @@ -174,7 +176,7 @@ FileSink :: operator= ( const FileSink & fs ) throw ( Exception ) /* then build up */ Sink::operator=( fs ); - init( fs.fileName); + init( fs.configName, fs.fileName); if ( (fd = fs.fileDescriptor ? dup( fs.fileDescriptor) : 0) == -1 ) { strip(); @@ -311,7 +313,9 @@ FileSink :: write ( const void * buf, /*------------------------------------------------------------------------------ * Get the file name to where to move the data saved so far. * The trick is to read the file name from a file named - * /tmp/darkice.$PID , where $PID is the current process id + * /tmp/darkice.$configName.$PID , where: + * - $configName is the name of the configuration section for this file sink + * - $PID is the current process id *----------------------------------------------------------------------------*/ std::string FileSink :: getArchiveFileName ( void ) throw ( Exception ) @@ -319,7 +323,7 @@ FileSink :: getArchiveFileName ( void ) throw ( Exception ) pid_t pid = getpid(); std::stringstream metaFileName; - metaFileName << "/tmp/darkice." << pid; + metaFileName << "/tmp/darkice." << configName << "." << pid; std::ifstream ifs(metaFileName.str().c_str()); if (!ifs.good()) { diff --git a/darkice/trunk/src/FileSink.h b/darkice/trunk/src/FileSink.h index c076599..4ee823b 100644 --- a/darkice/trunk/src/FileSink.h +++ b/darkice/trunk/src/FileSink.h @@ -58,6 +58,12 @@ class FileSink : public Sink, public virtual Reporter { private: + /** + * The name of the configuration related to + * this file sink. something like "file-0" or "file-2". + */ + char * configName; + /** * Name of the file represented by the FileSink. */ @@ -66,11 +72,14 @@ class FileSink : public Sink, public virtual Reporter /** * Initialize the object. * + * @param configName the name of the configuration related to + * this file sink. something like "file-0" or "file-2". * @param name name of the file to be represented by the object. * @exception Exception */ void - init ( const char * name ) throw ( Exception ); + init ( const char * configName, + const char * name ) throw ( Exception ); /** * De-initialize the object. @@ -115,13 +124,16 @@ class FileSink : public Sink, public virtual Reporter /** * Constructor by a file name. * + * @param configName the name of the configuration related to + * this file sink. something like "file-0" or "file-2". * @param name name of the file to be represented by the object. * @exception Exception */ inline - FileSink( const char * name ) throw ( Exception ) + FileSink( const char * configName, + const char * name ) throw ( Exception ) { - init( name); + init( configName, name); } /**