Exemplo n.º 1
0
JABBER_RESOURCE_STATUS *CJabberProto::ListFindResource( JABBER_LIST list, const TCHAR* jid )
{
	JABBER_RESOURCE_STATUS *result = NULL;

	EnterCriticalSection( &m_csLists );
	int i = ListExist( list, jid );
	if ( !i ) {
		LeaveCriticalSection( &m_csLists );
		return 0;
	}

	JABBER_LIST_ITEM* LI = m_lstRoster[i-1];

	const TCHAR* p = _tcschr( jid, '@' );
	const TCHAR* q = _tcschr(( p == NULL ) ? jid : p, '/' );
	if (q)
	{
		const TCHAR *resource = q+1;
		if (*resource)
			for ( int j=0; j < LI->resourceCount; j++ )
				if ( !_tcscmp( LI->resource[j].resourceName, resource ))
				{
					result = LI->resource + j;
					break;
				}
	}

	LeaveCriticalSection( &m_csLists );

	return result;
}
Exemplo n.º 2
0
int CJabberProto::OnContactDeleted( WPARAM wParam, LPARAM )
{
	if( !m_bJabberOnline )	// should never happen
		return 0;

	DBVARIANT dbv;
	if ( !JGetStringT(( HANDLE ) wParam, JGetByte( (HANDLE ) wParam, "ChatRoom", 0 )?(char*)"ChatRoomID":(char*)"jid", &dbv )) {
		if ( ListExist( LIST_ROSTER, dbv.ptszVal )) {
			if ( !_tcschr( dbv.ptszVal, _T( '@' ))) {
				TCHAR szStrippedJid[JABBER_MAX_JID_LEN];
				JabberStripJid( m_ThreadInfo->fullJID, szStrippedJid, SIZEOF(szStrippedJid) );
				TCHAR *szDog = _tcschr( szStrippedJid, _T('@'));
				if ( szDog && _tcsicmp( szDog + 1, dbv.ptszVal ))
					m_ThreadInfo->send( XmlNodeIq( _T("set"), SerialNext(), dbv.ptszVal ) << XQUERY( _T(JABBER_FEAT_REGISTER)) << XCHILD( _T("remove")));
			}

			// Remove from roster, server also handles the presence unsubscription process.
			m_ThreadInfo->send( XmlNodeIq( _T("set"), SerialNext()) << XQUERY( _T(JABBER_FEAT_IQ_ROSTER))
				<< XCHILD( _T("item")) << XATTR( _T("jid"), dbv.ptszVal ) << XATTR( _T("subscription"), _T("remove")));
		}

		JFreeVariant( &dbv );
	}
	return 0;
}
Exemplo n.º 3
0
void CJabberProto::ListRemoveResource( JABBER_LIST list, const TCHAR* jid )
{
	EnterCriticalSection( &m_csLists );
	int i = ListExist( list, jid );
	JABBER_LIST_ITEM* LI = m_lstRoster[i-1];
	if ( !i || LI == NULL ) {
		LeaveCriticalSection( &m_csLists );
		return;
	}

	const TCHAR* p = _tcschr( jid, '@' );
	const TCHAR* q = _tcschr(( p == NULL ) ? jid : p, '/' );
	if ( q ) {
		const TCHAR* resource = q+1;
		if ( resource[0] ) {
			JABBER_RESOURCE_STATUS* r = LI->resource;
			int j;
			for ( j=0; j < LI->resourceCount; j++, r++ ) {
				if ( !_tcsicmp( r->resourceName, resource ))
					break;
			}
			if ( j < LI->resourceCount ) {
				// Found last seen resource ID to be removed
				if ( LI->lastSeenResource == j )
					LI->lastSeenResource = -1;
				else if ( LI->lastSeenResource > j )
					LI->lastSeenResource--;
				// update manually selected resource ID
				if (LI->resourceMode == RSMODE_MANUAL)
				{
					if ( LI->manualResource == j )
					{
						LI->resourceMode = RSMODE_LASTSEEN;
						LI->manualResource = -1;
					} else if ( LI->manualResource > j )
						LI->manualResource--;
				}

				// Update MirVer due to possible resource changes
				UpdateMirVer(LI);

				JabberListFreeResourceInternal( r );

				if ( LI->resourceCount-- == 1 ) {
					mir_free( r );
					LI->resource = NULL;
				}
				else {
					memmove( r, r+1, ( LI->resourceCount-j )*sizeof( JABBER_RESOURCE_STATUS ));
					LI->resource = ( JABBER_RESOURCE_STATUS* )mir_realloc( LI->resource, LI->resourceCount*sizeof( JABBER_RESOURCE_STATUS ));
	}	}	}	}

	LeaveCriticalSection( &m_csLists );

	MenuUpdateSrmmIcon(LI);
}
Exemplo n.º 4
0
void CJabberProto::ListRemove( JABBER_LIST list, const TCHAR* jid )
{
	EnterCriticalSection( &m_csLists );
	int i = ListExist( list, jid );
	if ( i != 0 ) {
		JabberListFreeItemInternal( m_lstRoster[ --i ] );
		m_lstRoster.remove( i );
	}
	LeaveCriticalSection( &m_csLists );
}
Exemplo n.º 5
0
int CJabberProto::ListAddResource( JABBER_LIST list, const TCHAR* jid, int status, const TCHAR* statusMessage, char priority, const TCHAR* nick )
{
	EnterCriticalSection( &m_csLists );
	int i = ListExist( list, jid );
	if ( !i ) {
		LeaveCriticalSection( &m_csLists );
		return 0;
	}

	JABBER_LIST_ITEM* LI = m_lstRoster[i-1];
	int bIsNewResource = false, j;

	const TCHAR* p = _tcschr( jid, '@' );
	const TCHAR* q = _tcschr(( p == NULL ) ? jid : p, '/' );
	if ( q ) {
		const TCHAR* resource = q+1;
		if ( resource[0] ) {
			JABBER_RESOURCE_STATUS* r = LI->resource;
			for ( j=0; j < LI->resourceCount; j++, r++ ) {
				if ( !_tcscmp( r->resourceName, resource )) {
					// Already exist, update status and statusMessage
					r->status = status;
					replaceStr( r->statusMessage, statusMessage );
					r->priority = priority;
					break;
			}	}

			if ( j >= LI->resourceCount ) {
				// Not already exist, add new resource
				LI->resource = ( JABBER_RESOURCE_STATUS * ) mir_realloc( LI->resource, ( LI->resourceCount+1 )*sizeof( JABBER_RESOURCE_STATUS ));
				bIsNewResource = true;
				r = LI->resource + LI->resourceCount++;
				memset( r, 0, sizeof( JABBER_RESOURCE_STATUS ));
				r->status = status;
				r->affiliation = AFFILIATION_NONE;
				r->role = ROLE_NONE;
				r->resourceName = mir_tstrdup( resource );
				r->nick = mir_tstrdup( nick );
				if ( statusMessage )
					r->statusMessage = mir_tstrdup( statusMessage );
				r->priority = priority;
		}	}
	}
	// No resource, update the main statusMessage
	else {
		LI->itemResource.status = status;
		replaceStr( LI->itemResource.statusMessage, statusMessage );
	}

	LeaveCriticalSection( &m_csLists );

	MenuUpdateSrmmIcon(LI);
	return bIsNewResource;
}
Exemplo n.º 6
0
JABBER_LIST_ITEM *CJabberProto::ListGetItemPtr( JABBER_LIST list, const TCHAR* jid )
{
	EnterCriticalSection( &m_csLists );
	int i = ListExist( list, jid );
	if ( !i ) {
		LeaveCriticalSection( &m_csLists );
		return NULL;
	}
	i--;
	LeaveCriticalSection( &m_csLists );
	return m_lstRoster[i];
}
Exemplo n.º 7
0
BOOL TestListExist()
{
    list<unsigned int >list ;
    TCHAR szBuffer[MAX_PATH] ={0} ;
    int i = 1 ;

    for (; i < 20; ++i)
    {
        list.push_back(i) ;
    }

    if (TRUE == ListExist(NULL, 0))
    {
        OutputDebugString("TestListExist ListExist(NULL, 0) failed\r\n") ;
        return FALSE ;
    }

    for (i = 1; i < 20; ++i)
    {
        if (FALSE == ListExist(&list, i))
        {
            sprintf_s(szBuffer, MAX_PATH * sizeof(TCHAR), _T("TestListExist ListExist(&list, %d) failed\r\n"), i) ;
            OutputDebugString(szBuffer) ;
            return FALSE ;
        }
    }

    for (; i < 40; ++i)
    {
        if (TRUE == ListExist(&list, i))
        {
            sprintf_s(szBuffer, MAX_PATH * sizeof(TCHAR), _T("TestListExist ListExist(&list, %d) failed\r\n"), i) ;
            OutputDebugString(szBuffer) ;
            return FALSE ;
        }
    }

    OutputDebugString(_T("TestListExist pass !\r\n")) ;
    return TRUE ;
}
Exemplo n.º 8
0
JABBER_LIST_ITEM *CJabberProto::ListAdd( JABBER_LIST list, const TCHAR* jid )
{
	JABBER_LIST_ITEM* item;
	BOOL bUseResource=FALSE;
	EnterCriticalSection( &m_csLists );
	if (( item = ListGetItemPtr( list, jid )) != NULL ) {
		LeaveCriticalSection( &m_csLists );
		return item;
	}

	TCHAR *s = mir_tstrdup( jid );
	TCHAR *q = NULL;
	// strip resource name if any
	//fyr
	if ( !((list== LIST_ROSTER )  && ListExist(LIST_CHATROOM, jid))) { // but only if it is not chat room contact	
		if ( list != LIST_VCARD_TEMP ) {
			TCHAR *p;
			if (( p = _tcschr( s, '@' )) != NULL )
				if (( q = _tcschr( p, '/' )) != NULL )
					*q = '\0';
		}
	} else {
		bUseResource=TRUE;
	}
	
	if ( !bUseResource && list== LIST_ROSTER )
	{
		//if it is a chat room keep resource and made it resource sensitive
		if ( ChatRoomHContactFromJID( s ) )
		{
			if (q != NULL)	*q='/';
			bUseResource=TRUE;
		}
	}
	item = ( JABBER_LIST_ITEM* )mir_alloc( sizeof( JABBER_LIST_ITEM ));
	ZeroMemory( item, sizeof( JABBER_LIST_ITEM ));
	item->list = list;
	item->jid = s;
	item->itemResource.status = ID_STATUS_OFFLINE;
	item->resource = NULL;
	item->resourceMode = RSMODE_LASTSEEN;
	item->lastSeenResource = -1;
	item->manualResource = -1;
	item->bUseResource = bUseResource;

	m_lstRoster.insert( item );
	LeaveCriticalSection( &m_csLists );

	MenuUpdateSrmmIcon(item);
	return item;
}
Exemplo n.º 9
0
//*******************************************************************************
//
//  函 数 名 : SetCallBreakPoint
//  功能描述 : 在地址范围内下断点
//  参数列表 : pRunData       --     RunData指针
//             uFunctionStart --     函数起始地址
//             uFunctionEnd   --     函数结束地址
//  说    明 : 并没有对函数的正确性做检查
//  返回结果 : 成功返回TRUE,失败返回FALSE
//
//******************************************************************************
BOOL  SetCallBreakPoint(PRunData pRunData,
                        ulong uFunctionStart,
                        ulong uFunctionEnd)
{
    char szSrcDec[1024] = {0};
    char szLine[1024] = {0};
    char szName[TEXTLEN] = {0} ;
    t_disasm disasm = {0};
    ulong uIndex = uFunctionStart ;
    ulong uSize = 0 ;
    ulong uInstructSize = 0 ;

    InitTreeHead(pRunData) ;

    // 保留函数起始地址
    pRunData->pCurrentNode->dwFuncStart = uFunctionStart ;
    // 保留函数结束地址
    pRunData->pCurrentNode->dwFuncEnd = uFunctionEnd ;

    for (; uIndex < uFunctionEnd; uIndex += uInstructSize)
    {
        uSize = Readcommand(uIndex, szLine) ;
        // 再判断是不是call
        // 反汇编二进制指令
        uInstructSize = Disasm((uchar *)szLine, uSize, uIndex, (uchar *)szSrcDec, &disasm, DISASM_ALL, 0);
        if (StrStrI(disasm.result, "CALL")
            || StrStrI(disasm.result, "ret"))
        {
            // 是call直接下断点,方便日后api记录
            if(0 == Setbreakpointext(uIndex,TY_ACTIVE,0,0))
            {
                // 先判断断点是否存在,不存在的话丢进链表中去
                if(FALSE == ListExist(&pRunData->BreakPointList, uIndex))
                {
                    pRunData->BreakPointList.push_back(uIndex) ;
                }
            }
        }
    }

    // 判断当前设的断点是不是在显示屏幕中,是的话刷新
    ulong uBase = 0 ;
    Getdisassemblerrange(&uBase, &uSize) ;
    if (uFunctionStart >= uBase && uFunctionStart <= (uBase + uSize))
    {
        Redrawdisassembler() ;
    }
    return TRUE ;
}
Exemplo n.º 10
0
TCHAR* CJabberProto::ListGetBestClientResourceNamePtr( const TCHAR* jid )
{
	EnterCriticalSection( &m_csLists );
	int i = ListExist( LIST_ROSTER, jid );
	if ( !i ) {
		LeaveCriticalSection( &m_csLists );
		return NULL;
	}

	JABBER_LIST_ITEM* LI = m_lstRoster[i-1];
	TCHAR* res = ListGetBestResourceNamePtr( jid );
	if ( res == NULL ) {
		JABBER_RESOURCE_STATUS* r = LI->resource;
		int status = ID_STATUS_OFFLINE;
		res = NULL;
		for ( i=0; i < LI->resourceCount; i++ ) {
			int s = r[i].status;
			BOOL foundBetter = FALSE;
			switch ( s ) {
			case ID_STATUS_FREECHAT:
				foundBetter = TRUE;
				break;
			case ID_STATUS_ONLINE:
				if ( status != ID_STATUS_FREECHAT )
					foundBetter = TRUE;
				break;
			case ID_STATUS_DND:
				if ( status != ID_STATUS_FREECHAT && status != ID_STATUS_ONLINE )
					foundBetter = TRUE;
				break;
			case ID_STATUS_AWAY:
				if ( status != ID_STATUS_FREECHAT && status != ID_STATUS_ONLINE && status != ID_STATUS_DND )
					foundBetter = TRUE;
				break;
			case ID_STATUS_NA:
				if ( status != ID_STATUS_FREECHAT && status != ID_STATUS_ONLINE && status != ID_STATUS_DND && status != ID_STATUS_AWAY )
					foundBetter = TRUE;
				break;
			}
			if ( foundBetter ) {
				res = r[i].resourceName;
				status = s;
	}	}	}

	LeaveCriticalSection( &m_csLists );
	return res;
}
Exemplo n.º 11
0
TCHAR* CJabberProto::ListGetBestResourceNamePtr( const TCHAR* jid )
{
	EnterCriticalSection( &m_csLists );
	int i = ListExist( LIST_ROSTER, jid );
	if ( !i ) {
		LeaveCriticalSection( &m_csLists );
		return NULL;
	}

	TCHAR* res = NULL;

	JABBER_LIST_ITEM* LI = m_lstRoster[i-1];
	if ( LI->resourceCount > 1 ) {
		if ( LI->resourceMode == RSMODE_LASTSEEN && LI->lastSeenResource>=0 && LI->lastSeenResource < LI->resourceCount )
			res = LI->resource[ LI->lastSeenResource ].resourceName;
		else if (LI->resourceMode == RSMODE_MANUAL && LI->manualResource>=0 && LI->manualResource < LI->resourceCount )
			res = LI->resource[ LI->manualResource ].resourceName;
		else {
			int nBestPos = -1, nBestPri = -200, j;
			for ( j = 0; j < LI->resourceCount; j++ ) {
				if ( LI->resource[ j ].priority > nBestPri ) {
					nBestPri = LI->resource[ j ].priority;
					nBestPos = j;
				}
			}
			if ( nBestPos != -1 )
				res = LI->resource[ nBestPos ].resourceName;
		}
	}

	if ( !res && LI->resource)
		res = LI->resource[0].resourceName;

	LeaveCriticalSection( &m_csLists );
	return res;
}