");
	std::string::size_type pos = 0;
	std::string::size_type pos2 = 0;
	bool last = false;
	while (!last && !reqs.empty()) {
		std::string req;
		if ((pos2 = reqs.find("
");
		std::string time = utils::text::source_get_value2(&get, "seenrequesttime=", "&\"");
		facebook_user *fbu = new facebook_user();
		fbu->real_name = utils::text::source_get_value(&req, 2, "class=\"actor\">", "");
		fbu->user_id = utils::text::source_get_value(&get, 2, "id=", "&");
		if (fbu->user_id.length() && fbu->real_name.length())
		{
			HANDLE hContact = AddToContactList(fbu, FACEBOOK_CONTACT_APPROVE, false, fbu->real_name.c_str());
			DBWriteContactSettingByte(hContact, m_szModuleName, FACEBOOK_KEY_CONTACT_TYPE, FACEBOOK_CONTACT_APPROVE);
			bool seen = false;
			DBVARIANT dbv;
			if (!DBGetContactSettingString(hContact, m_szModuleName, "RequestTime", &dbv)) {
				seen = !strcmp(dbv.pszVal, time.c_str());
				DBFreeVariant(&dbv);
			}
			if (!seen) {
				// This is new request
				DBWriteContactSettingString(hContact, m_szModuleName, "RequestTime", time.c_str());
				//blob is: uin( DWORD ), hContact( HANDLE ), nick( ASCIIZ ), first( ASCIIZ ), last( ASCIIZ ), email( ASCIIZ ), reason( ASCIIZ )
				//blob is: 0( DWORD ), hContact( HANDLE ), nick( ASCIIZ ), ""( ASCIIZ ), ""( ASCIIZ ), ""( ASCIIZ ), ""( ASCIIZ )
				DBEVENTINFO dbei = {0};
				dbei.cbSize = sizeof( DBEVENTINFO );
				dbei.szModule = m_szModuleName;
				dbei.timestamp = ::time( NULL );
				dbei.flags = DBEF_UTF;
				dbei.eventType = EVENTTYPE_AUTHREQUEST;
				dbei.cbBlob = (DWORD)(sizeof( DWORD )*2 + fbu->real_name.length() + 5);
					
				PBYTE pCurBlob = dbei.pBlob = ( PBYTE ) mir_alloc( dbei.cbBlob );					
				*(PDWORD)pCurBlob = 0; pCurBlob += sizeof(DWORD);                    // UID
				*(PDWORD)pCurBlob = (DWORD)hContact; pCurBlob += sizeof(DWORD);      // Contact Handle
				strcpy((char*)pCurBlob, fbu->real_name.data()); pCurBlob += fbu->real_name.length()+1;	// Nickname
				*pCurBlob = '\0'; pCurBlob++;                                        // First Name
				*pCurBlob = '\0'; pCurBlob++;                                        // Last Name
				*pCurBlob = '\0'; pCurBlob++;                                        // E-mail
				*pCurBlob = '\0';                                                    // Reason
				CallService(MS_DB_EVENT_ADD, (WPARAM)NULL, (LPARAM)&dbei);				
				LOG("      (New) Friendship request from: %s (%s) [%s]", fbu->real_name.c_str(), fbu->user_id.c_str(), time.c_str());
			} else {
				LOG("      (Old) Friendship request from: %s (%s) [%s]", fbu->real_name.c_str(), fbu->user_id.c_str(), time.c_str());
			}
		} else {
			LOG(" !!!  Wrong friendship request");
			LOG(req.c_str());
		}
	}
	facy.handle_success( "friendRequests" );
}
void FacebookProto::ProcessFeeds( void* data )
{
	if ( data == NULL )
		return;
	std::string* resp = (std::string*)data;
	if (!isOnline())
		goto exit;
	CODE_BLOCK_TRY
	LOG("***** Starting processing feeds");
	std::vector< facebook_newsfeed* > news;
	std::string::size_type pos = 0;
	UINT limit = 0;
	*resp = utils::text::slashu_to_utf8(*resp);	
	*resp = utils::text::source_get_value(resp, 2, "\"html\":\"", ">\"");
	while ( ( pos = resp->find( "
find( "
length();
		
		std::string post = resp->substr( pos, pos2 - pos );
		pos += 5;
		std::string post_header = utils::text::source_get_value(&post, 4, "
", "<\\/h6>");
		std::string post_message = utils::text::source_get_value(&post, 3, "", "<\\/h6>");
		std::string post_link = utils::text::source_get_value(&post, 3, "", "<\\/span>");
		std::string post_attach = utils::text::source_get_value(&post, 4, "