AmApi.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
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
00242
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
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
1.5.1