37 #include <ptclib/url.h> 38 #include <ptclib/threadpool.h> 78 const char * mediaType,
86 virtual bool UsesRTP()
const {
return false; }
104 static PSafePtr<OpalIMContext> Create(
106 const PURL & localURL,
107 const PURL & remoteURL
110 static PSafePtr<OpalIMContext> Create(
112 PSafePtr<OpalConnection> conn
115 static PSafePtr<OpalIMContext> Create(
117 PSafePtr<OpalPresentity> presentity,
118 const PURL & remoteURL
136 virtual SentStatus SendCompositionIndication(
bool active =
true);
147 #define PDECLARE_MessageSentNotifier(cls, fn) PDECLARE_NOTIFIER2(OpalIMContext, cls, fn, const MessageSentInfo &) 148 #define PCREATE_MessageSentNotifier(fn) PCREATE_NOTIFIER2(fn, const MessageSentInfo &) 151 void SetMessageSentNotifier(
152 const MessageSentNotifier & notifier
157 virtual SentStatus OnIncomingIM(
OpalIM & message);
160 #define PDECLARE_IncomingIMNotifier(cls, fn) PDECLARE_NOTIFIER2(OpalIMContext, cls, fn, const OpalIM &) 161 #define PCREATE_IncomingIMNotifier(fn) PCREATE_NOTIFIER2(fn, const OpalIM &) 164 void SetIncomingIMNotifier(
165 const IncomingIMNotifier & notifier
170 virtual void OnCompositionIndicationChanged(
const PString & state);
173 #define PDECLARE_CompositionIndicationChangedNotifier(cls, fn) PDECLARE_NOTIFIER2(OpalIMContext, cls, fn, const PString &) 174 #define PCREATE_CompositionIndicationChangedNotifier(fn) PCREATE_NOTIFIER2(fn, const PString &) 177 void SetCompositionIndicationChangedNotifier(
178 const CompositionIndicationChangedNotifier & notifier
181 virtual bool CheckContentType(
const PString & contentType)
const;
182 virtual PStringArray GetContentTypes()
const;
186 PString
GetID()
const {
return m_id; }
187 void SetID(
const PString &
id) { m_id = id; }
194 PStringOptions & GetAttributes() {
return m_attributes; }
198 virtual bool OnNewIncomingIM();
200 virtual bool AddIncomingIM(
OpalIM * message);
202 virtual void OnCompositionIndicationTimeout();
204 OpalIM * GetIncomingMessage();
208 static PString CreateKey(
const PString & from,
const PString & to);
210 void ResetLastUsed();
239 PString m_id, m_localURL, m_remoteURL, m_key;
266 void OnCompositionIndicationTimeout(
const PString & conversationId);
268 void AddContext(PSafePtr<OpalIMContext> context);
271 void GarbageCollection();
273 PSafePtr<OpalIMContext> FindContextByIdWithLock(
275 PSafetyMode mode = PSafeReadWrite
278 PSafePtr<OpalIMContext> FindContextByNamesWithLock(
279 const PString & local,
280 const PString & remote,
281 PSafetyMode mode = PSafeReadWrite
284 PSafePtr<OpalIMContext> FindContextForMessageWithLock(
OpalIM & im,
OpalConnection * conn = NULL);
287 #define PDECLARE_NewConversationNotifier(cls, fn) PDECLARE_NOTIFIER2(OpalIMManager, cls, fn, OpalIMContext &) 288 #define PCREATE_NewConversationNotifier(fn) PCREATE_NOTIFIER2(fn, OpalIMContext &) 296 void AddNotifier(
const NewConversationNotifier & notifier,
const PString & scheme);
297 bool RemoveNotifier(
const NewConversationNotifier & notifier,
const PString & scheme);
307 virtual void Work() = 0;
358 virtual void InternalOnNewConversation(
const PString & conversation);
359 virtual void InternalOnNewIncomingIM(
const PString & conversation);
361 virtual void InternalOnCompositionIndicationTimeout(
const PString & conversationId);
388 RTP_IMFrame(
const BYTE * data, PINDEX len, PBoolean dynamic =
true);
390 void SetContentType(
const PString & contentType);
391 PString GetContentType()
const;
396 PString
AsString()
const {
return PString((
const char *)GetPayloadPtr(), GetPayloadSize()); }
419 #endif // OPAL_HAS_IM 421 #endif // OPAL_IM_IM_H PQueue< OpalIM > m_outgoingMessages
Definition: im.h:233
MessageSentNotifier m_messageSentNotifier
Definition: im.h:219
PString AsString() const
Definition: im.h:396
Definition: rtpconn.h:247
ContextsByConversationId m_contextsByConversationId
Definition: im.h:370
PString GetKey() const
Definition: im.h:188
PString GetRemoteURL() const
Definition: im.h:190
PTime m_lastGarbageCollection
Definition: im.h:366
const PStringOptions & GetAttributes() const
Definition: im.h:196
PQueue< OpalIM > m_incomingMessages
Definition: im.h:229
PSafeDictionary< PString, OpalIMContext > ContextsByConversationId
Definition: im.h:369
PURL m_to
Definition: im.h:54
PAtomicInteger::IntegerType messageId
Definition: im.h:141
OpalIMManager & m_mgr
Definition: im.h:309
PList< NewConversationCallBack > m_callbacks
Definition: im.h:377
virtual void Work()
Definition: im.h:319
virtual void Work()
Definition: im.h:329
void SetID(const PString &id)
Definition: im.h:187
virtual void Work()
Definition: im.h:352
PMutex m_lastUsedMutex
Definition: im.h:235
PStringOptions m_attributes
Definition: im.h:223
MessageSent_Work(OpalIMManager &mgr, const PString &conversationId, const OpalIMContext::MessageSentInfo &info)
Definition: im.h:336
CompositionIndicationTimeout_Work(OpalIMManager &mgr, const PString &conversationId)
Definition: im.h:349
PMutex m_outgoingMessagesMutex
Definition: im.h:231
PMutex m_contextsByNamesMutex
Definition: im.h:372
PURL m_from
Definition: im.h:55
PMutex m_notificationMutex
Definition: im.h:217
PString GetLocalURL() const
Definition: im.h:189
OpalIM * m_currentOutgoingMessage
Definition: im.h:232
bool m_deleting
Definition: im.h:368
static PAtomicInteger::IntegerType GetNextMessageId()
virtual void Work()
Definition: im.h:340
OpalManager & m_manager
Definition: im.h:367
PNotifierTemplate< OpalIMContext & > NewConversationNotifier
Definition: im.h:286
PAtomicInteger::IntegerType m_messageId
Definition: im.h:64
PMutex m_incomingMessagesMutex
Definition: im.h:228
PNotifierTemplate< const OpalIM & > IncomingIMNotifier
Definition: im.h:159
PString m_mimeType
Definition: im.h:57
PNotifierTemplate< const MessageSentInfo & > MessageSentNotifier
Definition: im.h:146
Definition: pres_ent.h:135
PSafePtr< OpalConnection > m_connection
Definition: im.h:225
PMutex m_notifierMutex
Definition: im.h:376
OpalTransportAddress m_toAddr
Definition: im.h:62
PString m_scheme
Definition: im.h:293
PNotifierTemplate< const PString & > CompositionIndicationChangedNotifier
Definition: im.h:172
NewConversationNotifier m_notifier
Definition: im.h:292
PTime m_lastUsed
Definition: im.h:236
OpalIMContext::MessageSentInfo m_info
Definition: im.h:343
std::multimap< std::string, PString > ContextsByNames
Definition: im.h:373
OpalManager * m_manager
Definition: im.h:222
PString m_body
Definition: im.h:58
PSafePtr< OpalPresentity > m_presentity
Definition: im.h:226
PString m_fromName
Definition: im.h:56
PString m_conversationId
Definition: im.h:310
Definition: connection.h:353
OpalIMContext::SentStatus status
Definition: im.h:142
NewIncomingIM_Work(OpalIMManager &mgr, const PString &conversationId)
Definition: im.h:316
OpalTransportAddress m_fromAddr
Definition: im.h:61
Definition: transports.h:149
IncomingIMNotifier m_incomingMessageNotifier
Definition: im.h:218
CompositionIndicationChangedNotifier m_compositionIndicationChangedNotifier
Definition: im.h:220
SentStatus
Definition: im.h:121
PString m_conversationId
Definition: im.h:59
ContextsByNames m_contextsByNames
Definition: im.h:374
PQueuedThreadPool< IM_Work > m_imThreadPool
Definition: im.h:364
NewConversation_Work(OpalIMManager &mgr, const PString &conversationId)
Definition: im.h:326
PString GetID() const
Definition: im.h:186