From dc334c5e6eec4d1d5ff919b925d68d9743e6c654 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Tue, 14 Sep 2010 15:14:34 +0300 Subject: initial pescense sign parsing code (needed for full support of xep-027) --- utilities.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 62 insertions(+), 3 deletions(-) (limited to 'utilities.cpp') 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<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)); + } + } } -- cgit v1.2.3