bool CFriendList::AddEmfriendsMetToList(const CString& strFile) { CSafeBufferedFile file; CFileException fexp; if ( !file.Open(strFile, CFile::modeRead|CFile::osSequentialScan|CFile::typeBinary, &fexp) ) { if ( fexp.m_cause != CFileException::fileNotFound ) { CString strError(GetResString(IDS_ERR_READEMFRIENDS)); TCHAR szError[MAX_CFEXP_ERRORMSG]; if ( fexp.GetErrorMessage(szError,MAX_CFEXP_ERRORMSG) ) { strError += _T(" - "); strError += szError; } AddLogLine(true, _T("%s"), strError); } return false; } try { uint8 header = file.ReadUInt8(); if ( header != MET_HEADER ) { file.Close(); return false; } UINT nRecordsNumber = file.ReadUInt32(); for (UINT i = 0; i < nRecordsNumber; i++) { CFriend* Record = new CFriend(); Record->LoadFromFile(&file); if ( !IsAlreadyFriend(Record->m_abyUserhash) ) m_listFriends.AddTail(Record); } file.Close(); } catch ( CFileException* error ) { if ( error->m_cause == CFileException::endOfFile ) AddLogLine(true,GetResString(IDS_ERR_EMFRIENDSINVALID)); else { TCHAR buffer[MAX_CFEXP_ERRORMSG]; error->GetErrorMessage(buffer, MAX_CFEXP_ERRORMSG); AddLogLine(true, GetResString(IDS_ERR_READEMFRIENDS), buffer); } error->Delete(); return false; } return true; }// MORPH END - Added by Commander, Friendlinks [emulEspaña]
//You can add a friend without a IP to allow the IRC to trade links with lowID users. bool CFriendList::AddFriend(const uchar* abyUserhash, uint32 dwLastSeen, uint32 dwLastUsedIP, uint16 nLastUsedPort, uint32 dwLastChatted, LPCTSTR pszName, uint32 dwHasHash){ // client must have an IP (HighID) or a hash // TODO: check if this can be switched to a hybridID so clients with *.*.*.0 can be added.. if (IsLowID(dwLastUsedIP) && dwHasHash==0) return false; if( dwLastUsedIP && IsAlreadyFriend(dwLastUsedIP, nLastUsedPort)) return false; CFriend* Record = new CFriend( abyUserhash, dwLastSeen, dwLastUsedIP, nLastUsedPort, dwLastChatted, pszName, dwHasHash ); m_listFriends.AddTail(Record); ShowFriends(); SaveList(); return true; }