diff --git a/darkice/trunk/ChangeLog b/darkice/trunk/ChangeLog index c3ea033..6d024e6 100644 --- a/darkice/trunk/ChangeLog +++ b/darkice/trunk/ChangeLog @@ -8,6 +8,7 @@ DarkIce next release including support for MacOS X. Thanks to Nicholas J. Humfrey o various improvements by Joel Ebel + o added option to turn off automatic reconnect feature 15-02-2004: DarkIce 0.14 released diff --git a/darkice/trunk/darkice.cfg b/darkice/trunk/darkice.cfg index 0547de9..d1ad212 100644 --- a/darkice/trunk/darkice.cfg +++ b/darkice/trunk/darkice.cfg @@ -5,6 +5,7 @@ [general] duration = 60 # duration of encoding, in seconds. 0 means forever bufferSecs = 5 # size of internal slip buffer, in seconds +reconnect = yes # reconnect to the server(s) if disconnected # this section describes the audio input that will be streamed [input] diff --git a/darkice/trunk/man/darkice.cfg.5 b/darkice/trunk/man/darkice.cfg.5 index ca1c76c..ade308d 100644 --- a/darkice/trunk/man/darkice.cfg.5 +++ b/darkice/trunk/man/darkice.cfg.5 @@ -50,6 +50,10 @@ Time for DarkIce to run, in seconds. If 0, run forever. Data read from the sound card is buffered before sent to the encoder. Each buffer will be able to hold this many seconds of samples. +.TP +.I reconnect +Try to reconnect to the server(s) if the connection is broken during +streaming, "yes" or "no". (optional parameter, defaults to "yes") .PP .B [input] diff --git a/darkice/trunk/src/DarkIce.cpp b/darkice/trunk/src/DarkIce.cpp index 9c642e0..9388cb9 100644 --- a/darkice/trunk/src/DarkIce.cpp +++ b/darkice/trunk/src/DarkIce.cpp @@ -129,6 +129,7 @@ DarkIce :: init ( const Config & config ) throw ( Exception ) unsigned int sampleRate; unsigned int bitsPerSample; unsigned int channel; + bool reconnect; const char * device; // the [general] section @@ -139,6 +140,8 @@ DarkIce :: init ( const Config & config ) throw ( Exception ) duration = Util::strToL( str); str = cs->getForSure( "bufferSecs", " missing in section [general]"); bufferSecs = Util::strToL( str); + str = cs->get( "reconnect"); + reconnect = str ? (Util::strEq( str, "yes") ? true : false) : true; // the [input] section @@ -146,19 +149,19 @@ DarkIce :: init ( const Config & config ) throw ( Exception ) throw Exception( __FILE__, __LINE__, "no section [general] in config"); } - str = cs->getForSure( "sampleRate", " missing in section [input]"); + str = cs->getForSure( "sampleRate", " missing in section [input]"); sampleRate = Util::strToL( str); - str = cs->getForSure( "bitsPerSample", " missing in section [input]"); + str = cs->getForSure( "bitsPerSample", " missing in section [input]"); bitsPerSample = Util::strToL( str); - str = cs->getForSure( "channel", " missing in section [input]"); - channel = Util::strToL( str); - device = cs->getForSure( "device", " missing in section [input]"); + str = cs->getForSure( "channel", " missing in section [input]"); + channel = Util::strToL( str); + device = cs->getForSure( "device", " missing in section [input]"); dsp = AudioSource::createDspSource( device, sampleRate, bitsPerSample, channel ); - encConnector = new MultiThreadedConnector( dsp.get()); + encConnector = new MultiThreadedConnector( dsp.get(), reconnect ); noAudioOuts = 0; configIceCast( config, bufferSecs); @@ -1008,6 +1011,9 @@ DarkIce :: run ( void ) throw ( Exception ) $Source$ $Log$ + Revision 1.43 2005/04/11 19:27:43 darkeye + added option to turn off automatic reconnect feature + Revision 1.42 2005/04/04 08:36:17 darkeye commited changes to enable Jack support thanks to Nicholas J. Humfrey, njh@ecs.soton.ac.uk diff --git a/darkice/trunk/src/MultiThreadedConnector.cpp b/darkice/trunk/src/MultiThreadedConnector.cpp index 3ad7879..5d95c52 100644 --- a/darkice/trunk/src/MultiThreadedConnector.cpp +++ b/darkice/trunk/src/MultiThreadedConnector.cpp @@ -64,8 +64,10 @@ static const char fileid[] = "$Id$"; * Initialize the object *----------------------------------------------------------------------------*/ void -MultiThreadedConnector :: init ( void ) throw ( Exception ) +MultiThreadedConnector :: init ( bool reconnect ) throw ( Exception ) { + this->reconnect = reconnect; + pthread_mutex_init( &mutexProduce, 0); pthread_cond_init( &condProduce, 0); threads = 0; @@ -96,6 +98,7 @@ MultiThreadedConnector :: MultiThreadedConnector ( throw ( Exception ) : Connector( connector) { + reconnect = connector.reconnect; mutexProduce = connector.mutexProduce; condProduce = connector.condProduce; @@ -119,6 +122,7 @@ MultiThreadedConnector :: operator= ( const MultiThreadedConnector & connector ) if ( this != &connector ) { Connector::operator=( connector); + reconnect = connector.reconnect; mutexProduce = connector.mutexProduce; condProduce = connector.condProduce; @@ -310,13 +314,18 @@ MultiThreadedConnector :: sinkThread( int ixSink ) pthread_mutex_unlock( &mutexProduce); if ( !threadData->accepting ) { - // if we're not accepting, try to reopen the sink - try { - sink->close(); - sink->open(); - threadData->accepting = sink->isOpen(); - } catch ( Exception & e ) { - // don't care, just try and try again + if ( reconnect ) { + // if we're not accepting, try to reopen the sink + try { + sink->close(); + sink->open(); + threadData->accepting = sink->isOpen(); + } catch ( Exception & e ) { + // don't care, just try and try again + } + } else { + // if !reconnect, just stop the connector + running = false; } } } @@ -366,6 +375,9 @@ MultiThreadedConnector :: ThreadData :: threadFunction( void * param ) $Source$ $Log$ + Revision 1.5 2005/04/11 19:27:43 darkeye + added option to turn off automatic reconnect feature + Revision 1.4 2004/01/07 13:18:17 darkeye commited patch sent by John Hay, fixing FreeBSD problems diff --git a/darkice/trunk/src/MultiThreadedConnector.h b/darkice/trunk/src/MultiThreadedConnector.h index 581150b..fbbe336 100644 --- a/darkice/trunk/src/MultiThreadedConnector.h +++ b/darkice/trunk/src/MultiThreadedConnector.h @@ -156,6 +156,12 @@ class MultiThreadedConnector : public virtual Connector */ bool running; + /** + * Flag to show if the connector should try to reconnect if + * the connection is dropped on the other side. + */ + bool reconnect; + /** * The buffer of information presented to each thread. */ @@ -169,10 +175,13 @@ class MultiThreadedConnector : public virtual Connector /** * Initialize the object. * + * @param reconnect flag to indicate if the connector should + * try to reconnect if the connection was + * dropped by the other end * @exception Exception */ void - init ( void ) throw ( Exception ); + init ( bool reconnect ) throw ( Exception ); /** * De-initialize the object. @@ -202,14 +211,18 @@ class MultiThreadedConnector : public virtual Connector * Constructor based on a Source. * * @param source the source to connect to the sinks. + * @param reconnect flag to indicate if the connector should + * try to reconnect if the connection was + * dropped by the other end * @exception Exception */ inline - MultiThreadedConnector ( Source * source ) + MultiThreadedConnector ( Source * source, + bool reconnect ) throw ( Exception ) : Connector( source ) { - init(); + init(reconnect); } /** @@ -217,15 +230,19 @@ class MultiThreadedConnector : public virtual Connector * * @param source the source to connect to the sinks. * @param sink a sink to connect to the source. + * @param reconnect flag to indicate if the connector should + * try to reconnect if the connection was + * dropped by the other end * @exception Exception */ inline MultiThreadedConnector ( Source * source, - Sink * sink ) + Sink * sink, + bool reconnect ) throw ( Exception ) : Connector( source, sink) { - init(); + init(reconnect); } /** @@ -330,6 +347,9 @@ class MultiThreadedConnector : public virtual Connector $Source$ $Log$ + Revision 1.5 2005/04/11 19:27:43 darkeye + added option to turn off automatic reconnect feature + Revision 1.4 2004/02/23 19:12:52 darkeye ported to NetBSD