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 #include <yatephone.h>
00026
00027 #ifdef _WINDOWS
00028
00029 #ifdef LIBYPBX_EXPORTS
00030 #define YPBX_API __declspec(dllexport)
00031 #else
00032 #ifndef LIBYPBX_STATIC
00033 #define YPBX_API __declspec(dllimport)
00034 #endif
00035 #endif
00036
00037 #endif
00038
00039 #ifndef YPBX_API
00040 #define YPBX_API
00041 #endif
00042
00043 namespace TelEngine {
00044
00048 class YPBX_API CallInfo : public NamedList
00049 {
00050 public:
00051 inline CallInfo(const char* name, CallEndpoint* call = 0)
00052 : NamedList(name), m_call(call)
00053 { }
00054
00055 virtual ~CallInfo()
00056 { m_call = 0; }
00057
00058 inline CallEndpoint* call() const
00059 { return m_call; }
00060
00061 inline void setCall(CallEndpoint* call)
00062 { m_call = call; }
00063
00064 inline void clearCall()
00065 { m_call = 0; }
00066
00070 bool copyParam(const NamedList& original, const String& name, bool clear = false);
00071
00075 void copyParams(const NamedList& original, bool clear, ...);
00076 void fillParam(NamedList& target, const String& name, bool clear = false);
00077 void fillParams(NamedList& target);
00078
00079 protected:
00080 CallEndpoint* m_call;
00081 int m_route;
00082 };
00083
00087 class YPBX_API CallList
00088 {
00089 public:
00090 inline void append(CallInfo* call)
00091 { m_calls.append(call); }
00092 inline void remove(CallInfo* call)
00093 { m_calls.remove(call,false); }
00094 CallInfo* find(const String& id);
00095 CallInfo* find(const CallEndpoint* call);
00096 protected:
00097 ObjList m_calls;
00098 };
00099
00100 class YPBX_API MultiRouter : public MessageReceiver
00101 {
00102 public:
00103 enum {
00104 Route,
00105 Execute,
00106 Hangup,
00107 Disconnected
00108 };
00109 MultiRouter();
00110 virtual ~MultiRouter();
00111 void setup(int priority = 0);
00112 virtual bool received(Message& msg, int id);
00113 virtual bool msgRoute(Message& msg, CallInfo& info, bool first);
00114 virtual bool msgExecute(Message& msg, CallInfo& info, bool first);
00115 virtual bool msgDisconnected(Message& msg, CallInfo& info);
00116 virtual void msgHangup(Message& msg, CallInfo& info);
00117 virtual Message* buildExecute(CallInfo& info, bool reroute) = 0;
00118 Message* defaultExecute(CallInfo& info, const char* route = 0);
00119 protected:
00120 CallList m_list;
00121 Mutex m_mutex;
00122 private:
00123 MessageRelay* m_relRoute;
00124 MessageRelay* m_relExecute;
00125 MessageRelay* m_relHangup;
00126 MessageRelay* m_relDisconnected;
00127 };
00128
00129 class ChanAssistList;
00130
00134 class YPBX_API ChanAssist : public RefObject
00135 {
00136 public:
00140 virtual ~ChanAssist();
00141
00146 virtual const String& toString() const
00147 { return m_chanId; }
00148
00153 virtual void msgStartup(Message& msg);
00154
00159 virtual void msgHangup(Message& msg);
00160
00165 virtual void msgExecute(Message& msg);
00166
00172 virtual bool msgDisconnect(Message& msg, const String& reason);
00173
00178 inline ChanAssistList* list() const
00179 { return m_list; }
00180
00185 inline const String& id() const
00186 { return m_chanId; }
00187
00193 static RefPointer<CallEndpoint> locate(const String& id);
00194
00199 inline RefPointer<CallEndpoint> locate() const
00200 { return locate(m_chanId); }
00201
00202 protected:
00208 inline ChanAssist(ChanAssistList* list, const String& id)
00209 : m_list(list), m_chanId(id)
00210 { }
00211 private:
00212 ChanAssist();
00213 ChanAssistList* m_list;
00214 String m_chanId;
00215 };
00216
00221 class YPBX_API ChanAssistList : public Module
00222 {
00223 friend class ChanAssist;
00224 public:
00228 enum {
00229 Startup = Private,
00230 Hangup,
00231 Disconnected,
00232 AssistPrivate
00233 };
00234
00238 virtual ~ChanAssistList()
00239 { }
00240
00247 virtual bool received(Message& msg, int id);
00248
00256 virtual bool received(Message& msg, int id, ChanAssist* assist);
00257
00261 virtual void initialize();
00262
00269 virtual ChanAssist* create(Message& msg, const String& id) = 0;
00270
00275 virtual void init(int priority = 15);
00276
00282 inline ChanAssist* find(const String& id) const
00283 { return static_cast<ChanAssist*>(m_calls[id]); }
00284
00285 protected:
00291 inline ChanAssistList(const char* name, bool earlyInit = false)
00292 : Module(name, "misc", earlyInit), m_first(true)
00293 { }
00294
00299 void removeAssist(ChanAssist* assist);
00300
00301 private:
00302 ChanAssistList();
00303 HashList m_calls;
00304 bool m_first;
00305 };
00306
00307 }
00308