/* Jabber Protocol Plugin for Miranda IM Copyright ( C ) 2002-04 Santithorn Bunchua Copyright ( C ) 2005-08 George Hazan Copyright ( C ) 2007 Maxim Mluhov Copyright ( C ) 2008-09 Dmitriy Chervov This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or ( at your option ) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Revision : $Revision: 7392 $ Last change on : $Date: 2008-03-04 23:50:26 +0200 $ Last change by : $Author: dchervov $ */ #include "jabber.h" #include "jabber_message_manager.h" BOOL CJabberProto::OnMessageError( HXML node, ThreadData *pThreadData, CJabberMessageInfo* pInfo ) { // we check if is message delivery failure int id = JabberGetPacketID( node ); JABBER_LIST_ITEM* item = ListGetItemPtr( LIST_ROSTER, pInfo->GetFrom()); if ( item == NULL ) item = ListGetItemPtr( LIST_CHATROOM, pInfo->GetFrom()); if ( item != NULL ) { // yes, it is TCHAR *szErrText = JabberErrorMsg( pInfo->GetChildNode()); if ( id != -1 ) { char *errText = mir_t2a(szErrText); JSendBroadcast( pInfo->GetHContact(), ACKTYPE_MESSAGE, ACKRESULT_FAILED, ( HANDLE ) id, (LPARAM)errText ); mir_free(errText); } else { TCHAR buf[512]; HXML bodyNode = xmlGetChild( node, "body" ); if (bodyNode) mir_sntprintf( buf, SIZEOF( buf ), _T( "%s:\n%s\n%s" ), pInfo->GetFrom(), xmlGetText( bodyNode ), szErrText ); else mir_sntprintf( buf, SIZEOF( buf ), _T( "%s:\n%s" ), pInfo->GetFrom(), szErrText ); MsgPopup( NULL, buf, TranslateT( "Jabber Error" )); } mir_free(szErrText); } return TRUE; } BOOL CJabberProto::OnMessageIbb( HXML node, ThreadData *pThreadData, CJabberMessageInfo* pInfo ) { BOOL bOk = FALSE; const TCHAR *sid = xmlGetAttrValue( pInfo->GetChildNode(), _T("sid")); const TCHAR *seq = xmlGetAttrValue( pInfo->GetChildNode(), _T("seq")); if ( sid && seq && xmlGetText( pInfo->GetChildNode()) ) { bOk = OnIbbRecvdData( xmlGetText( pInfo->GetChildNode()), sid, seq ); } return TRUE; } BOOL CJabberProto::OnMessagePubsubEvent( HXML node, ThreadData *pThreadData, CJabberMessageInfo* pInfo ) { OnProcessPubsubEvent( node ); return TRUE; } BOOL CJabberProto::OnMessageGroupchat( HXML node, ThreadData *pThreadData, CJabberMessageInfo* pInfo ) { JABBER_LIST_ITEM *chatItem = ListGetItemPtr( LIST_CHATROOM, pInfo->GetFrom()); if ( chatItem ) { // process GC message GroupchatProcessMessage( node ); } else { // got message from unknown conference... let's leave it :) // TCHAR *conference = NEWTSTR_ALLOCA(from); // if (TCHAR *s = _tcschr(conference, _T('/'))) *s = 0; // XmlNode p( "presence" ); xmlAddAttr( p, "to", conference ); xmlAddAttr( p, "type", "unavailable" ); // info->send( p ); } return TRUE; }