From 32cd6ba786951926f557324e0028e51f079a1eda Mon Sep 17 00:00:00 2001 From: Stefan Sayer Date: Tue, 23 Sep 2008 15:06:22 +0000 Subject: [PATCH] moved AmSessionEventHandler into its own file, so that AmSession methods are easier to find. make session event handlers callable by AmSession descendants (thanks Rui Jin Zheng) git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@1086 8eb893ce-cfd4-0310-b710-fb5ebe64c474 --- core/AmSession.cpp | 70 --------------------- core/AmSession.h | 48 +-------------- core/AmSessionEventHandler.cpp | 70 +++++++++++++++++++++ core/AmSessionEventHandler.h | 107 +++++++++++++++++++++++++++++++++ 4 files changed, 180 insertions(+), 115 deletions(-) create mode 100644 core/AmSessionEventHandler.cpp create mode 100644 core/AmSessionEventHandler.h diff --git a/core/AmSession.cpp b/core/AmSession.cpp index 11025259..aef9e02c 100644 --- a/core/AmSession.cpp +++ b/core/AmSession.cpp @@ -52,79 +52,9 @@ volatile unsigned int AmSession::session_num = 0; -// AmSessionEventHandler methods -bool AmSessionEventHandler::process(AmEvent*) -{ - return false; -} - -bool AmSessionEventHandler::onSipEvent(AmSipEvent*) -{ - return false; -} - -bool AmSessionEventHandler::onSipRequest(const AmSipRequest&) -{ - return false; -} - -bool AmSessionEventHandler::onSipReply(const AmSipReply& reply) -{ - return false; -} - -bool AmSessionEventHandler::onSendRequest(const string& method, - const string& content_type, - const string& body, - string& hdrs, - int flags, - unsigned int cseq) -{ - return false; -} - -bool AmSessionEventHandler::onSendReply(const AmSipRequest& req, - unsigned int code, - const string& reason, - const string& content_type, - const string& body, - string& hdrs, - int flags) -{ - return false; -} - - // AmSession methods -#if __GNUC__ < 3 -#define CALL_EVENT_H(method,args...) \ - do{\ - vector::iterator evh = ev_handlers.begin(); \ - bool stop = false; \ - while((evh != ev_handlers.end()) && !stop){ \ - stop = (*evh)->method( ##args ); \ - evh++; \ - } \ - if(stop) \ - return; \ - }while(0) -#else -#define CALL_EVENT_H(method,...) \ - do{\ - vector::iterator evh = ev_handlers.begin(); \ - bool stop = false; \ - while((evh != ev_handlers.end()) && !stop){ \ - stop = (*evh)->method( __VA_ARGS__ ); \ - evh++; \ - } \ - if(stop) \ - return; \ - }while(0) -#endif - - AmSession::AmSession() : AmEventQueue(this), // AmDialogState(), dlg(this), diff --git a/core/AmSession.h b/core/AmSession.h index 12d42b73..927ee375 100644 --- a/core/AmSession.h +++ b/core/AmSession.h @@ -37,6 +37,7 @@ #include "AmSipDialog.h" #include "AmSipEvent.h" #include "AmApi.h" +#include "AmSessionEventHandler.h" #ifdef WITH_ZRTP #include "zrtp/zrtp.h" @@ -57,49 +58,6 @@ class AmDtmfEvent; /* definition imported from Ser parser/msg_parser.h */ #define FL_FORCE_ACTIVE 2 -/** - * \brief Interface for SIP signaling plugins that - * must change requests or replies (ex: session timer). - * - * Signaling plugins must inherite from this class. - */ -class AmSessionEventHandler - : public ArgObject -{ -public: - bool destroy; - - AmSessionEventHandler() - : destroy(true) {} - - virtual ~AmSessionEventHandler() {} - /* - * All the methods return true if the event processing - * shall be stopped after them. - */ - virtual bool process(AmEvent*); - virtual bool onSipEvent(AmSipEvent*); - virtual bool onSipRequest(const AmSipRequest&); - virtual bool onSipReply(const AmSipReply&); - - virtual bool onSendRequest(const string& method, - const string& content_type, - const string& body, - string& hdrs, - int flags, - unsigned int cseq); - - virtual bool onSendReply(const AmSipRequest& req, - unsigned int code, - const string& reason, - const string& content_type, - const string& body, - string& hdrs, - int flags); -}; - - - #define AM_AUDIO_IN 0 #define AM_AUDIO_OUT 1 @@ -132,8 +90,6 @@ private: AmDtmfEventQueue m_dtmfEventQueue; bool m_dtmfDetectionEnabled; - vector ev_handlers; - /** @see AmThread::run() */ void run(); @@ -160,6 +116,8 @@ protected: /** do accept early session? */ bool accept_early_session; + vector ev_handlers; + public: AmRtpAudio rtp_str; diff --git a/core/AmSessionEventHandler.cpp b/core/AmSessionEventHandler.cpp new file mode 100644 index 00000000..80aea772 --- /dev/null +++ b/core/AmSessionEventHandler.cpp @@ -0,0 +1,70 @@ +/* + * $Id$ + * + * Copyright (C) 2002-2003 Fhg Fokus + * + * This file is part of sems, a free SIP media server. + * + * sems 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 + * + * For a license to use the ser software under conditions + * other than those described here, or to purchase support for this + * software, please contact iptel.org by e-mail at the following addresses: + * info@iptel.org + * + * sems 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-1307 USA + */ + +#include "AmSessionEventHandler.h" + +// AmSessionEventHandler methods +bool AmSessionEventHandler::process(AmEvent*) +{ + return false; +} + +bool AmSessionEventHandler::onSipEvent(AmSipEvent*) +{ + return false; +} + +bool AmSessionEventHandler::onSipRequest(const AmSipRequest&) +{ + return false; +} + +bool AmSessionEventHandler::onSipReply(const AmSipReply& reply) +{ + return false; +} + +bool AmSessionEventHandler::onSendRequest(const string& method, + const string& content_type, + const string& body, + string& hdrs, + int flags, + unsigned int cseq) +{ + return false; +} + +bool AmSessionEventHandler::onSendReply(const AmSipRequest& req, + unsigned int code, + const string& reason, + const string& content_type, + const string& body, + string& hdrs, + int flags) +{ + return false; +} diff --git a/core/AmSessionEventHandler.h b/core/AmSessionEventHandler.h new file mode 100644 index 00000000..cec7843a --- /dev/null +++ b/core/AmSessionEventHandler.h @@ -0,0 +1,107 @@ +/* + * $Id$ + * + * Copyright (C) 2002-2003 Fhg Fokus + * + * This file is part of sems, a free SIP media server. + * + * sems 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 + * + * For a license to use the ser software under conditions + * other than those described here, or to purchase support for this + * software, please contact iptel.org by e-mail at the following addresses: + * info@iptel.org + * + * sems 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-1307 USA + */ +#ifndef _AmSessionEventHandler_h +#define _AmSessionEventHandler_h + +#include "AmArg.h" +#include "AmSipMsg.h" +#include "AmSipEvent.h" +#include +using std::string; +/** + * \brief Interface for SIP signaling plugins that + * change requests or replies using hooks (ex: session timer). + * + * From this type of plugins, an AmSessionEventHandler + * can be added to an AmSession. AmSessionEventHandler functions + * are called as hooks by the Session's event handler function. + * + * Signaling plugins must inherit from this class. + */ +class AmSessionEventHandler + : public ArgObject +{ +public: + bool destroy; + + AmSessionEventHandler() + : destroy(true) {} + + virtual ~AmSessionEventHandler() {} + /* + * All the methods return true if the event processing + * shall be stopped after them. + */ + virtual bool process(AmEvent*); + virtual bool onSipEvent(AmSipEvent*); + virtual bool onSipRequest(const AmSipRequest&); + virtual bool onSipReply(const AmSipReply&); + + virtual bool onSendRequest(const string& method, + const string& content_type, + const string& body, + string& hdrs, + int flags, + unsigned int cseq); + + virtual bool onSendReply(const AmSipRequest& req, + unsigned int code, + const string& reason, + const string& content_type, + const string& body, + string& hdrs, + int flags); +}; + + +#if __GNUC__ < 3 +#define CALL_EVENT_H(method,args...) \ + do{\ + vector::iterator evh = ev_handlers.begin(); \ + bool stop = false; \ + while((evh != ev_handlers.end()) && !stop){ \ + stop = (*evh)->method( ##args ); \ + evh++; \ + } \ + if(stop) \ + return; \ + }while(0) +#else +#define CALL_EVENT_H(method,...) \ + do{\ + vector::iterator evh = ev_handlers.begin(); \ + bool stop = false; \ + while((evh != ev_handlers.end()) && !stop){ \ + stop = (*evh)->method( __VA_ARGS__ ); \ + evh++; \ + } \ + if(stop) \ + return; \ + }while(0) +#endif + +#endif