AmApi.h

Go to the documentation of this file.
00001 /*
00002  * $Id: AmApi.h 923 2008-04-30 15:02:22Z sayer $
00003  *
00004  * Copyright (C) 2002-2003 Fhg Fokus
00005  * Copyright (C) 2006 iptego GmbH
00006  *
00007  * This file is part of sems, a free SIP media server.
00008  *
00009  * sems is free software; you can redistribute it and/or modify
00010  * it under the terms of the GNU General Public License as published by
00011  * the Free Software Foundation; either version 2 of the License, or
00012  * (at your option) any later version
00013  *
00014  * For a license to use the ser software under conditions
00015  * other than those described here, or to purchase support for this
00016  * software, please contact iptel.org by e-mail at the following addresses:
00017  *    info@iptel.org
00018  *
00019  * sems is distributed in the hope that it will be useful,
00020  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00021  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00022  * GNU General Public License for more details.
00023  *
00024  * You should have received a copy of the GNU General Public License 
00025  * along with this program; if not, write to the Free Software 
00026  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00027  */
00029 #ifndef _AmApi_h_
00030 #define _AmApi_h_
00031 
00032 #include "AmThread.h"
00033 #include "AmSipMsg.h"
00034 #include "AmConfig.h"
00035 #include "AmArg.h"
00036 #include "AmEventQueue.h"
00037 
00038 #include <stdarg.h>
00039 
00040 #include <string>
00041 using std::string;
00042 
00046 class AmDynInvoke
00047 {
00048  public:
00050   struct NotImplemented {
00051     string what;
00052     NotImplemented(const string& w)
00053       : what(w) {}
00054   };
00055 
00056   AmDynInvoke();
00057   virtual ~AmDynInvoke();
00058   virtual void invoke(const string& method, const AmArg& args, AmArg& ret);
00059 };
00060 
00064 class AmPluginFactory
00065 {
00066   string plugin_name;
00067 
00068  public:
00069   AmPluginFactory(const string& name)
00070     : plugin_name(name) {}
00071 
00072   virtual ~AmPluginFactory() {}
00073 
00074   const string& getName() { return plugin_name; } 
00075 
00082   virtual int onLoad()=0;
00083 };
00084 
00091 class AmDynInvokeFactory: public AmPluginFactory
00092 {
00093  public:
00094   AmDynInvokeFactory(const string& name);
00095   virtual AmDynInvoke* getInstance()=0;
00096 };
00097 
00098 
00099 class AmSession;
00100 class AmSessionEventHandler;
00104 class AmSessionEventHandlerFactory: public AmPluginFactory
00105 {
00106  public:
00107   AmSessionEventHandlerFactory(const string& name);
00108 
00109   virtual AmSessionEventHandler* getHandler(AmSession*)=0;
00110 
00114   virtual bool onInvite(const AmSipRequest& req)=0;
00115   virtual bool onInvite(const AmSipRequest& req, AmArg& session_params);
00116 };
00117 
00119 class AmSessionFactory: public AmPluginFactory
00120 {
00121 
00122   AmSessionTimerConfig mod_conf;
00123 
00124  protected:
00129   int configureModule(AmConfigReader& cfg);
00130 
00131  public:
00135   void configureSession(AmSession* sess);
00136 
00137   AmSessionFactory(const string& name);
00138 
00147   virtual AmSession* onInvite(const AmSipRequest& req)=0;
00148 
00159   virtual AmSession* onInvite(const AmSipRequest& req, 
00160                               AmArg& session_params);
00161 
00170   virtual AmSession* onRefer(const AmSipRequest& req);
00171 
00181   virtual AmSession* onRefer(const AmSipRequest& req, 
00182                              AmArg& session_params);
00183 
00193   virtual void postEvent(AmEvent* ev);  
00194 
00195 };
00196 
00201 class AmSIPEventHandler : public AmPluginFactory 
00202 {
00203 
00204  public:
00205   AmSIPEventHandler(const string& name);
00206   virtual ~AmSIPEventHandler() { }
00207 
00215   virtual bool onSipReply(const AmSipReply& rep) = 0;
00216 };
00217 
00221 class AmLoggingFacility : public AmPluginFactory
00222 {
00223 
00224  public:
00225   AmLoggingFacility(const string& name);
00226   virtual ~AmLoggingFacility() { }
00227 
00230   virtual void log(int level, const char* msg) = 0;
00231 };
00232 
00233 class AmInterfaceHandler;
00234 
00235 class AmCtrlInterface: public AmThread
00236 {
00237  public:
00238   AmCtrlInterface();
00239   virtual ~AmCtrlInterface();
00240   
00241   //@param serKey    [out] An out parameter
00242   //@param serKeyLen [out] An out parameter
00243   
00244   virtual int send(const AmSipRequest &, 
00245                    char* serKey, unsigned int& serKeyLen) = 0;
00246   
00247   virtual int send(const AmSipReply &) = 0;
00248   
00249   virtual string getContact(const string &displayName, 
00250                             const string &userName, const string &hostName, 
00251                             const string &uriParams, const string &hdrParams) = 0;
00252 };
00253 
00268 class AmCtrlInterfaceFactory : public AmPluginFactory
00269 {
00270   public:
00271     AmCtrlInterfaceFactory(const string& name);
00272     virtual ~AmCtrlInterfaceFactory() {}
00273 
00274     virtual AmCtrlInterface* instance() = 0;
00275 };
00276 
00277 #if  __GNUC__ < 3
00278 #define EXPORT_FACTORY(fctname,class_name,args...) \
00279             extern "C" void* fctname()\
00280             {\
00281                 return new class_name(##args);\
00282             }
00283 #else
00284 #define EXPORT_FACTORY(fctname,class_name,...) \
00285             extern "C" void* fctname()\
00286             {\
00287                 return new class_name(__VA_ARGS__);\
00288             }
00289 #endif
00290 
00291 typedef void* (*FactoryCreate)();
00292 
00293 #define STR(x) #x
00294 #define XSTR(x) STR(x)
00295 
00296 #define FACTORY_SESSION_EXPORT      session_factory_create
00297 #define FACTORY_SESSION_EXPORT_STR  XSTR(FACTORY_SESSION_EXPORT)
00298 
00299 #define EXPORT_SESSION_FACTORY(class_name,app_name) \
00300             EXPORT_FACTORY(FACTORY_SESSION_EXPORT,class_name,app_name)
00301 
00302 #define FACTORY_SESSION_EVENT_HANDLER_EXPORT     sess_evh_factory_create
00303 #define FACTORY_SESSION_EVENT_HANDLER_EXPORT_STR XSTR(FACTORY_SESSION_EVENT_HANDLER_EXPORT)
00304 
00305 #define EXPORT_SESSION_EVENT_HANDLER_FACTORY(class_name,app_name) \
00306             EXPORT_FACTORY(FACTORY_SESSION_EVENT_HANDLER_EXPORT,class_name,app_name)
00307 
00308 #define FACTORY_PLUGIN_EXPORT     base_plugin_create
00309 #define FACTORY_PLUGIN_EXPORT_STR XSTR(FACTORY_PLUGIN_EXPORT)
00310 
00311 #define EXPORT_PLUGIN_FACTORY(class_name,app_name) \
00312             EXPORT_FACTORY(FACTORY_PLUGIN_EXPORT,class_name,app_name)
00313 
00314 #define FACTORY_PLUGIN_CLASS_EXPORT     plugin_class_create
00315 #define FACTORY_PLUGIN_CLASS_EXPORT_STR XSTR(FACTORY_PLUGIN_CLASS_EXPORT)
00316 
00317 #define EXPORT_PLUGIN_CLASS_FACTORY(class_name,app_name) \
00318             EXPORT_FACTORY(FACTORY_PLUGIN_CLASS_EXPORT,class_name,app_name)
00319 
00320 #define FACTORY_SIP_EVENT_HANDLER_EXPORT     sip_evh_factory_create
00321 #define FACTORY_SIP_EVENT_HANDLER_EXPORT_STR XSTR(FACTORY_SIP_EVENT_HANDLER_EXPORT)
00322 
00323 #define EXPORT_SIP_EVENT_HANDLER_FACTORY(class_name,app_name) \
00324             EXPORT_FACTORY(FACTORY_SIP_EVENT_HANDLER_EXPORT,class_name,app_name)
00325 
00326 #define FACTORY_LOG_FACILITY_EXPORT     log_facilty_factory_create
00327 #define FACTORY_LOG_FACILITY_EXPORT_STR XSTR(FACTORY_LOG_FACILITY_EXPORT)
00328 
00329 #define EXPORT_LOG_FACILITY_FACTORY(class_name,app_name) \
00330             EXPORT_FACTORY(FACTORY_LOG_FACILITY_EXPORT,class_name,app_name)
00331 
00332 /* 
00333  * defines for exporting a control interface plugin 
00334  */
00335 #define FACTORY_CONTROL_INTERFACE_EXPORT  control_interface_factory_create
00336 #define FACTORY_CONTROL_INTERFACE_EXPORT_STR  \
00337     XSTR(FACTORY_CONTROL_INTERFACE_EXPORT)
00338 #define EXPORT_CONTROL_INTERFACE_FACTORY(class_name, app_name)  \
00339     EXPORT_FACTORY(FACTORY_CONTROL_INTERFACE_EXPORT, class_name, app_name)
00340 #endif

Generated on Fri May 16 12:02:05 2008 for SEMS by  doxygen 1.5.1
Home |  Recent changes |  Search |  Glossary |  Sitemap |  Login