diff --git a/configure.ac b/configure.ac index 2f4b1ef02ffd443abf11cfc7f9207282703666d9..31339b8ffb33bc2dcae331e89c4083f1b5c951fc 100644 --- a/configure.ac +++ b/configure.ac @@ -16,7 +16,7 @@ dnl dnl Solaris pkgadd support definitions PKGADD_PKG="SFLPhone" PKGADD_NAME="SFLPhone - a SIP client" -PKGADD_VENDOR="http://www.sflphone.org" +PKGADD_VENDOR="http://www.sflphone.org/" AC_SUBST(PKGADD_PKG) AC_SUBST(PKGADD_NAME) AC_SUBST(PKGADD_VENDOR) @@ -30,7 +30,7 @@ dnl AC_PATH_QT dnl KDE_USE_QT(3.3) AC_CANONICAL_SYSTEM AC_ARG_PROGRAM -AM_INIT_AUTOMAKE(sflphone, $VERSION) +AM_INIT_AUTOMAKE(sflphoned, $VERSION) AM_DISABLE_LIBRARIES AC_PROG_LIBTOOL AC_CHECK_COMPILERS diff --git a/sflphone.spec.in b/sflphone.spec.in index 8a85f06bbb569281e89b785481fdd2cdc3d41dcf..a397dc7d6a9196b620937c3ba5f5c2a64a9e8041 100644 --- a/sflphone.spec.in +++ b/sflphone.spec.in @@ -32,7 +32,7 @@ rm -rf $RPM_BUILD_ROOT %files %defattr(-, root, root) -%{prefix}/bin/sflphone +%{prefix}/bin/sflphoned %dir %{prefix}/share/sflphone/ringtones %{prefix}/share/sflphone/ringtones/* diff --git a/src/Makefile.am b/src/Makefile.am index cc53ed1b99ac4a0043f2dd4cbfea035a9c4b3a69..9438d91446011fe17bb4e91b3beeb255f67a4aa1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,4 +1,4 @@ -bin_PROGRAMS = sflphone +bin_PROGRAMS = sflphoned if USE_ZEROCONF ZEROCONFDIR = zeroconf @@ -12,16 +12,16 @@ endif SUBDIRS = audio config gui $(ZEROCONFDIR) -sflphone_SOURCES = call.cpp eventthread.cpp error.cpp main.cpp sipvoiplink.cpp voIPLink.cpp \ +sflphoned_SOURCES = call.cpp eventthread.cpp error.cpp main.cpp sipvoiplink.cpp voIPLink.cpp \ sipcall.cpp managerimpl.cpp managerimpl.h manager.h global.h \ eventthread.h error.h \ sipvoiplink.h user_cfg.h call.h voIPLink.h sipcall.h \ observer.cpp -sflphone_CXXFLAGS = -DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/sflphone\" $(ZEROCONFFLAGS) +sflphoned_CXXFLAGS = -DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/sflphone\" $(ZEROCONFFLAGS) -sflphone_LDFLAGS = -static -sflphone_LDADD = gui/libguiframework.la audio/libaudio.la ../stund/libstun.la ../utilspp/libutilspp.la -lpthread $(SFLPHONE_LIBS) $(ZEROCONFLIB) $(LIB_DNSSD) config/libconfig.la +sflphoned_LDFLAGS = -static +sflphoned_LDADD = gui/libguiframework.la audio/libaudio.la ../stund/libstun.la ../utilspp/libutilspp.la -lpthread $(SFLPHONE_LIBS) $(ZEROCONFLIB) $(LIB_DNSSD) config/libconfig.la KDE_CXXFLAGS = $(USE_EXCEPTIONS) AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir)/audio/pacpp/include $(libccext2_CFLAGS) $(libccgnu2_CFLAGS) $(portaudio_CFLAGS) diff --git a/src/audio/audiolayer.cpp b/src/audio/audiolayer.cpp index d6cf0f9cf2e7b7d57192fcd36d73419d3a59fc23..6fb0cedae8c74d780661778c6719a153541ba0be 100644 --- a/src/audio/audiolayer.cpp +++ b/src/audio/audiolayer.cpp @@ -54,6 +54,7 @@ AudioLayer::closeStream (void) if(_stream) { _stream->close(); delete _stream; + _stream = 0; } } diff --git a/src/audio/audiortp.cpp b/src/audio/audiortp.cpp index d0928e80a6fee7e690c8a6a63bb13a716c4fff1f..36f8b357f15b02d04157d5d43bf6f5e46711095a 100644 --- a/src/audio/audiortp.cpp +++ b/src/audio/audiortp.cpp @@ -49,6 +49,7 @@ AudioRtp::AudioRtp () { AudioRtp::~AudioRtp (void) { delete _RTXThread; + _RTXThread = NULL; } int @@ -84,15 +85,10 @@ AudioRtp::closeRtpSession (SipCall *ca) { ca->enable_audio = -1; if (_RTXThread != NULL) { - _debug("Thread: stop AudioRTP\n"); + _debug("Thread: stop AudioRTP for sipcall: %d\n", ca->getId()); delete _RTXThread; _RTXThread = NULL; } - - // Stop portaudio and flush ringbuffer - Manager::instance().getAudioDriver()->stopStream(); - Manager::instance().getAudioDriver()->mainSndRingBuffer().flush(); - _debug("AudioRtp::closeRtpSession : flushing stream\n"); } } @@ -121,17 +117,14 @@ AudioRtpRTX::AudioRtpRTX (SipCall *sipcall, } AudioRtpRTX::~AudioRtpRTX () { - _debug("Thread: stop session\n"); + _debug("Thread: AudioRtpRTX stop session\n"); if (!_sym) { - delete _sessionRecv; - _sessionRecv = NULL; - delete _sessionSend; - _sessionSend = NULL; + delete _sessionRecv; _sessionRecv = NULL; + delete _sessionSend; _sessionSend = NULL; } else { - delete _session; - _session = NULL; + delete _session; _session = NULL; } - delete time; + delete time; time = NULL; } void @@ -297,8 +290,11 @@ AudioRtpRTX::receiveSessionForSpkr (int16* data_for_speakers, Manager::instance().getAudioDriver()->startStream(); delete ac; + ac = NULL; delete cd; + cd = NULL; delete adu; + adu = NULL; } void @@ -366,15 +362,15 @@ AudioRtpRTX::run (void) { TimerPort::incTimer(frameSize); // 'frameSize' ms } - delete[] data_for_speakers_tmp; - delete[] data_for_speakers; - delete[] data_to_send; - delete[] data_from_mic_tmp; - delete[] data_from_mic; + delete [] data_for_speakers_tmp; data_for_speakers_tmp = 0; + delete [] data_for_speakers; data_for_speakers = 0; + delete [] data_to_send; data_to_send = 0; + delete [] data_from_mic_tmp; data_from_mic_tmp = 0; + delete [] data_from_mic; data_from_mic = 0; + audiolayer->stopStream(); audiolayer->mainSndRingBuffer().flush(); //audiolayer->urgentRingBuffer().flush(); - audiolayer->stopStream(); } diff --git a/src/audio/dtmfgenerator.cpp b/src/audio/dtmfgenerator.cpp index aaf2d68a40c87801b77eaf688dbb48b07c28aa00..84abbf717e57c927a985ca5a62e1d2ae1ecd89af 100644 --- a/src/audio/dtmfgenerator.cpp +++ b/src/audio/dtmfgenerator.cpp @@ -86,6 +86,7 @@ DTMFGenerator::DTMFGenerator(): ToneGenerator () DTMFGenerator::~DTMFGenerator() { for(int i = 0; i < NUM_TONES; i++) { delete[] samples[i]; + samples[i] = NULL; } } diff --git a/src/audio/ringbuffer.cpp b/src/audio/ringbuffer.cpp index d5b9d9f5a5726bb71a136a537062aa6f964fa963..138ae2f24c2e03157e3114507f156827b8ec770a 100644 --- a/src/audio/ringbuffer.cpp +++ b/src/audio/ringbuffer.cpp @@ -36,16 +36,16 @@ RingBuffer::RingBuffer(int size) { mBufferSize = (size > MIN_BUFFER_SIZE ? size : MIN_BUFFER_SIZE); mStart = 0; mEnd = 0; - mBuffer = (samplePtr) malloc (mBufferSize); - mBlank = (samplePtr) malloc (MIN_BUFFER_SIZE); + mBuffer = new unsigned char[mBufferSize]; + mBlank = new unsigned char[MIN_BUFFER_SIZE]; bzero(mBlank, MIN_BUFFER_SIZE); assert (mBuffer != NULL); } // Free memory on object deletion RingBuffer::~RingBuffer() { - free (mBuffer); - free (mBlank); + delete[] mBlank; mBlank = 0; + delete[] mBuffer; mBuffer = 0; } void @@ -69,7 +69,7 @@ RingBuffer::AvailForPut() const { return (mBufferSize-4) - Len(); } -int +void RingBuffer::PutZero(int toZero) { unsigned char p[toZero]; diff --git a/src/audio/ringbuffer.h b/src/audio/ringbuffer.h index e811e69488146d61f177b6670ecf3dbb09f06394..c18f82b08f614608ecc41018bee594c44ae0bfeb 100644 --- a/src/audio/ringbuffer.h +++ b/src/audio/ringbuffer.h @@ -43,7 +43,7 @@ class RingBuffer { // int AvailForPut (void) const; int Put (void*, int); - int PutZero(int); + void PutZero(int); // // For the reader only: diff --git a/src/audio/tonegenerator.cpp b/src/audio/tonegenerator.cpp index 3f5b191e03d7ff4487827f5b3984f3539d941f56..fc01b16d511230d1da1858b0b814e74adbd9dfe8 100644 --- a/src/audio/tonegenerator.cpp +++ b/src/audio/tonegenerator.cpp @@ -103,9 +103,13 @@ ToneGenerator::ToneGenerator () { ToneGenerator::~ToneGenerator (void) { delete tonethread; + tonethread = 0; delete [] _dst; + _dst = 0; delete [] _src; + _src = 0; delete _ulaw; + _ulaw = 0; } /** diff --git a/src/gui/guiframework.cpp b/src/gui/guiframework.cpp index 19f122b96bfa752550e3e556f6430680344085b5..97e5af8ad6976579ea657d677b18c2f918775d00 100644 --- a/src/gui/guiframework.cpp +++ b/src/gui/guiframework.cpp @@ -29,16 +29,6 @@ GuiFramework::GuiFramework () GuiFramework::~GuiFramework (void) {} -/** - * This function is only to not redeclare it in old qt-gui code - * Since isn't not virtual - */ -int -GuiFramework::incomingCall(short id, const std::string& accountId, const std::string& from) -{ - return incomingCall(id); -} - int GuiFramework::outgoingCall (const string& to) { diff --git a/src/gui/guiframework.h b/src/gui/guiframework.h index 2693a8b9379f211f82880b9497da6ee46bfaef4a..c4fc9f660d739cafe5e1bb2b7372d29336a370b5 100644 --- a/src/gui/guiframework.h +++ b/src/gui/guiframework.h @@ -33,8 +33,7 @@ public: virtual ~GuiFramework (void); /* Parent class to child class */ - virtual int incomingCall (short id) = 0; - virtual int incomingCall (short id, const std::string& accountId, const std::string& from); + virtual int incomingCall (short id, const std::string& accountId, const std::string& from) = 0; virtual void peerAnsweredCall (short id) = 0; virtual int peerRingingCall (short id) = 0; virtual int peerHungupCall (short id) = 0; diff --git a/src/gui/server/guiserverimpl.cpp b/src/gui/server/guiserverimpl.cpp index d84d011ab3cf0861b275d40646b2ebc6b60a57ad..7fbad6455f029a2dfa9c167a935f3068998cde86 100644 --- a/src/gui/server/guiserverimpl.cpp +++ b/src/gui/server/guiserverimpl.cpp @@ -264,13 +264,6 @@ GUIServerImpl::version() } -int -GUIServerImpl::incomingCall (short id) -{ - _debug("ERROR: GUIServerImpl::incomingCall(%d) should not be call\n",id); - return 0; -} - int GUIServerImpl::incomingCall (short id, const std::string& accountId, const std::string& from) { diff --git a/src/gui/server/requestfactory.cpp b/src/gui/server/requestfactory.cpp index 4225bb82bf5322339ab46e41f38ea4547eb5cd87..1846dc704e50fbc17d13b6593f7fe5427c5c594b 100644 --- a/src/gui/server/requestfactory.cpp +++ b/src/gui/server/requestfactory.cpp @@ -70,6 +70,16 @@ RequestFactory::create( return pos->second->create(sequenceId, argList); } +RequestFactory::~RequestFactory() +{ + std::map< std::string, RequestCreatorBase * >::iterator iter = mRequests.begin(); + while ( iter != mRequests.end() ) { + // delete RequestCreator< T > + delete iter->second; + iter++; + } +} + template< typename T > void RequestFactory::registerRequest(const std::string &requestname) @@ -113,6 +123,4 @@ RequestFactory::registerAll() { registerRequest<RequestConfigSet> ("configset"); registerRequest<RequestConfigSave> ("configsave"); registerRequest<RequestList> ("list"); - - } diff --git a/src/gui/server/requestfactory.h b/src/gui/server/requestfactory.h index 39f74e024d09584950b782f9fbfd2634679f793a..7021171c1f1f38e6e7746b05b69f699eb668ce8c 100644 --- a/src/gui/server/requestfactory.h +++ b/src/gui/server/requestfactory.h @@ -54,6 +54,7 @@ public: class RequestFactory { public: + ~RequestFactory(); Request *create(const std::string& requestLine); Request *create( const std::string& requestname, diff --git a/src/main.cpp b/src/main.cpp index 6733d4837b401dbb016861bd1f5d1dafbc663832..718c2621caf29452397c12a7160b2e1650708adf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -22,13 +22,24 @@ #include "gui/server/guiserver.h" #include "gui/guiframework.h" #include "manager.h" +#include "cstring" +#include "iostream" int main (int argc, char **argv) { int exit_code = 0; - GuiFramework *GUI; - { + if (argc == 1 && strcmp(argv[0], "--help") == 0) { + + std::cout << PROGNAME << " Deamon " << VERSION << ", by Savoir-Faire Linux 2004-2005" << std::endl << std::endl; + std::cout << "USAGE: sflphoned [--help]" << std::endl; + std::cout << "Parameters: " << std::endl; + std::cout << " --help for this message" << std::endl << std::endl; + std::cout << "See http://www.sflphone.org/ for more information" << std::endl; + + } else { + + GuiFramework *GUI; bool initOK = false; try { Manager::instance().initConfigFile(); diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp index 4088f131ac054ec558d58f951779eceb8bd103cb..14436a3fa00f4e24b29b760b9bcf5eaab4bc9982 100644 --- a/src/managerimpl.cpp +++ b/src/managerimpl.cpp @@ -99,36 +99,15 @@ ManagerImpl::ManagerImpl (void) _codecMap = CodecDescriptorMap().getMap(); } +// never call if we use only the singleton... ManagerImpl::~ManagerImpl (void) { terminate(); - for(VoIPLinkVector::iterator pos = _voIPLinkVector.begin(); - pos != _voIPLinkVector.end(); - pos++) { - delete *pos; - } - - for(CallVector::iterator pos = _callVector.begin(); - pos != _callVector.end(); - pos++) { - delete *pos; - } - - unloadAudioCodec(); - - delete _audiodriverPA; - delete _tone; - delete _error; - -#ifdef USE_ZEROCONF - delete _DNSService; -#endif } void ManagerImpl::init (void) { - terminate(); initZeroconf(); initVolume(); @@ -188,6 +167,33 @@ void ManagerImpl::terminate() } _voIPLinkVector.clear(); + + for(VoIPLinkVector::iterator pos = _voIPLinkVector.begin(); + pos != _voIPLinkVector.end(); + pos++) { + delete *pos; + } + + for(CallVector::iterator pos = _callVector.begin(); + pos != _callVector.end(); + pos++) { + delete *pos; + } + + unloadAudioCodec(); + + delete _audiodriverPA; + _audiodriverPA = 0; + delete _tone; + _tone = 0; + delete _error; + _error = 0; + +#ifdef USE_ZEROCONF + delete _DNSService; + _DNSService = 0; +#endif + _debug("ManagerImpl::terminate() was called"); } void @@ -696,9 +702,11 @@ ManagerImpl::playDtmf(char code) _mutex.leaveMutex(); //setZonetone(false); delete[] buf_ctrl_vol; + buf_ctrl_vol = 0; returnValue = true; } delete[] _buf; + _buf = 0; return returnValue; } @@ -1016,7 +1024,9 @@ ManagerImpl::notificationIncomingCall (void) { getAudioDriver()->putUrgent(buf_ctrl_vol, SAMPLES_SIZE(FRAME_PER_BUFFER)); delete[] buf_ctrl_vol; + buf_ctrl_vol = 0; delete[] buffer; + buffer = 0; } /**