summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utilities.cpp52
-rw-r--r--utilities.h4
2 files changed, 49 insertions, 7 deletions
diff --git a/utilities.cpp b/utilities.cpp
index 9e0f7c2..1ddb504 100644
--- a/utilities.cpp
+++ b/utilities.cpp
@@ -67,15 +67,29 @@ int GetJabberInterface(WPARAM, LPARAM) //get interface for all jabber accounts,
int HandleNewContact(WPARAM w, LPARAM l)
{
- IJabberSysInterface *ijsys;
- JabberAccount *acc = &Accounts;
for(int i = 0; i < GetAccountsCount(); i++)
{
+ JabberAccount *acc = &Accounts;
if(!acc)
break;
- ijsys = acc->JabberInterface->Sys();
+ IJabberSysInterface *ijsys = acc->JabberInterface->Sys();
if(_tcsstr(_T(JUICK_JID), ijsys->ContactToJID(HANDLE(w))))
- ; //juick contact found, need to add xmpp traffic handlers for this account.
+ {
+ IJabberNetInterface *ijnet = acc->JabberInterface->Net();
+ if(!acc->hPrescenseHandler && !acc->hMessageHandler && !acc->hIqHandler)
+ {
+ acc->hPrescenseHandler = ijnet->AddPresenceHandler(acc->PrescenseHandler());
+ acc->hMessageHandler = ijnet->AddMessageHandler(acc->MessageHandler(), JABBER_MESSAGE_TYPE_ANY, _T(""), _T("")); //hm...
+ acc->hIqHandler = ijnet->AddIqHandler(acc->IqHandler(), JABBER_IQ_TYPE_ANY, _T(""), _T("")); //hm...
+ }
+ }
+ else if (acc->hPrescenseHandler && acc->hMessageHandler && acc->hIqHandler)
+ {
+ IJabberNetInterface *ijnet = acc->JabberInterface->Net();
+ ijnet->RemoveHandler(acc->hPrescenseHandler);
+ ijnet->RemoveHandler(acc->hMessageHandler);
+ ijnet->RemoveHandler(acc->hIqHandler);
+ }
acc = acc->next;
}
return 0;
@@ -83,19 +97,43 @@ int HandleNewContact(WPARAM w, LPARAM l)
void FindJuickAccounts()
{
- IJabberSysInterface *ijsys;
- JabberAccount *acc = &Accounts;
+
for(int i = 0; i < GetAccountsCount(); i++)
{
+ JabberAccount *acc = &Accounts;
if(!acc)
break;
+ IJabberSysInterface *ijsys;
ijsys = acc->JabberInterface->Sys();
if(ijsys->ContactFromJID(_T(JUICK_JID)))
- ; //juick contact found, need to add xmpp traffic handlers for this account.
+ {
+ IJabberNetInterface *ijnet = acc->JabberInterface->Net();
+ if(!acc->hPrescenseHandler && !acc->hMessageHandler && !acc->hIqHandler)
+ {
+ acc->hPrescenseHandler = ijnet->AddPresenceHandler(acc->PrescenseHandler());
+ acc->hMessageHandler = ijnet->AddMessageHandler(acc->MessageHandler(), JABBER_MESSAGE_TYPE_ANY, _T(""), _T("")); //hm...
+ acc->hIqHandler = ijnet->AddIqHandler(acc->IqHandler(), JABBER_IQ_TYPE_ANY, _T(""), _T("")); //hm...
+ }
+ }
acc = acc->next;
}
}
+JABBER_HANDLER_FUNC JabberAccount::PrescenseHandler()
+{
+ return FALSE;
+}
+
+JABBER_HANDLER_FUNC JabberAccount::MessageHandler()
+{
+ return FALSE;
+}
+
+JABBER_HANDLER_FUNC JabberAccount::IqHandler()
+{
+ return FALSE;
+}
+
BOOL JabberAccount::operator!()
{
if(!this)
diff --git a/utilities.h b/utilities.h
index 0325f51..dfddf3d 100644
--- a/utilities.h
+++ b/utilities.h
@@ -8,6 +8,10 @@ public:
TCHAR *AccountName;
int AccountNumber;
IJabberInterface *JabberInterface;
+ HJHANDLER hPrescenseHandler, hMessageHandler, hIqHandler;
+ JABBER_HANDLER_FUNC PrescenseHandler();
+ JABBER_HANDLER_FUNC MessageHandler();
+ JABBER_HANDLER_FUNC IqHandler();
class JabberAccount *next;
BOOL operator !();
};