summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jabber_account.cpp15
-rw-r--r--jabber_account.h8
-rw-r--r--utilities.cpp65
3 files changed, 80 insertions, 8 deletions
diff --git a/jabber_account.cpp b/jabber_account.cpp
index 85c89d6..636815b 100644
--- a/jabber_account.cpp
+++ b/jabber_account.cpp
@@ -28,10 +28,15 @@ void JabberAccount::setJabberInterface(IJabberInterface *JIf)
{
JabberInterface = JIf;
}
-void JabberAccount::setSendHandler(HANDLE hHandler)
+void JabberAccount::setSendHandler(HJHANDLER hHandler)
{
hSendHandler = hHandler;
}
+void JabberAccount::setPrescenseHandler(HJHANDLER hHandler)
+{
+ hPrescenseHandler = hHandler;
+}
+
TCHAR *JabberAccount::getAccountName()
{
@@ -45,15 +50,21 @@ IJabberInterface *JabberAccount::getJabberInterface()
{
return JabberInterface;
}
-HANDLE JabberAccount::getSendHandler()
+HJHANDLER JabberAccount::getSendHandler()
{
return hSendHandler;
}
+HJHANDLER JabberAccount::getPrescenseHandler()
+{
+ return hPrescenseHandler;
+}
+
JabberAccount::JabberAccount()
{
AccountName = NULL;
hSendHandler = INVALID_HANDLE_VALUE;
+ hPrescenseHandler = INVALID_HANDLE_VALUE;
AccountNumber = -1;
JabberInterface = NULL;
}
diff --git a/jabber_account.h b/jabber_account.h
index 9f5f228..3f2f6a9 100644
--- a/jabber_account.h
+++ b/jabber_account.h
@@ -21,19 +21,21 @@ public:
void setAccountName(TCHAR *Name);
void setAccountNumber(int Number);
void setJabberInterface(IJabberInterface *JIf);
- void setSendHandler(HANDLE hHandler);
+ void setSendHandler(HJHANDLER hHandler);
+ void setPrescenseHandler(HJHANDLER hHandler);
TCHAR *getAccountName();
int getAccountNumber();
IJabberInterface *getJabberInterface();
- HANDLE getSendHandler();
+ HJHANDLER getSendHandler();
+ HJHANDLER getPrescenseHandler();
~JabberAccount();
JabberAccount();
private:
TCHAR *AccountName;
int AccountNumber;
IJabberInterface *JabberInterface;
- HJHANDLER hSendHandler;
+ HJHANDLER hSendHandler, hPrescenseHandler;
};
#endif \ No newline at end of file
diff --git a/utilities.cpp b/utilities.cpp
index 649b4e1..a64abae 100644
--- a/utilities.cpp
+++ b/utilities.cpp
@@ -358,9 +358,6 @@ int GetJabberInterface(WPARAM w, LPARAM l) //get interface for all jabber accoun
static JABBER_HANDLER_FUNC SendHandler(IJabberInterface *ji, HXML node, void *pUserData)
{
- extern bool bJabberAPI, bIsMiranda09;
- if(!bJabberAPI || !bIsMiranda09)
- return FALSE;
HXML local_node = node;
for(int n = 0; n <= xi.getChildCount(node); n++)
{
@@ -544,6 +541,63 @@ static JABBER_HANDLER_FUNC SendHandler(IJabberInterface *ji, HXML node, void *pU
return FALSE;
}
+HANDLE sign_file_mutex = NULL;
+
+static JABBER_HANDLER_FUNC PrescenseHandler(IJabberInterface *ji, HXML node, void *pUserData)
+{
+ HXML local_node = node;
+ for(int n = 0; n <= xi.getChildCount(node); n++)
+ {
+ LPCTSTR str = xi.getText(local_node);
+ LPCTSTR nodename = xi.getName(local_node);
+ if(nodename)
+ {
+ if(_tcsstr(nodename, _T("x")))
+ {
+ for(int n = 0; n < xi.getAttrCount(local_node); n++)
+ {
+ LPCTSTR name = xi.getAttrName(local_node, n);
+ LPCTSTR value = xi.getAttrValue(local_node, name);
+ if(_tcsstr(value, _T("jabber:x:signed")))
+ {
+ LPCTSTR data = xi.getText(local_node);
+ wstring sign = _T("-----BEGIN PGP MESSAGE-----\n\n");
+ sign += data;
+ sign += _T("\n-----END PGP MESSAGE-----\n");
+ TCHAR *path_c = UniGetContactSettingUtf(NULL, szGPGModuleName, "szHomePath", _T(""));
+ wstring path_out = path_c;
+ mir_free(path_c);
+ path_out += _T("\\sign.asc");
+ WaitForSingleObject(sign_file_mutex, INFINITE);
+ sign_file_mutex = CreateMutex(NULL, FALSE, NULL);
+ DeleteFile(path_out.c_str());
+ wfstream f(path_out.c_str(), std::ios::out);
+ char *tmp = mir_utf8encodeW(sign.c_str());
+ f<<tmp;
+ mir_free(tmp);
+ f.close();
+ if(_waccess(path_out.c_str(), 0) == -1)
+ {
+ if(errno == ENOENT)
+ {
+ ReleaseMutex(sign_file_mutex);
+ debuglog<<"info: Failed to write sign in file\n";
+ return FALSE;
+ }
+ }
+
+ DeleteFile(path_out.c_str());
+ ReleaseMutex(sign_file_mutex);
+ return FALSE;
+ }
+ }
+ }
+ }
+ local_node = xi.getChild(node, n);
+ }
+ return FALSE;
+}
+
void AddHandlers()
{
@@ -557,6 +611,11 @@ void AddHandlers()
{
(*p)->setSendHandler((*p)->getJabberInterface()->Net()->AddSendHandler((JABBER_HANDLER_FUNC)SendHandler));
}
+ if((*p)->getPrescenseHandler() == INVALID_HANDLE_VALUE)
+ {
+ (*p)->setPrescenseHandler((*p)->getJabberInterface()->Net()->AddPresenceHandler((JABBER_HANDLER_FUNC)PrescenseHandler));
+ }
+
}
}