Difference between revisions of "Changelog 2.0.0-rc6"
From AMule Project FAQ
m (ok, finished, now only links are left :)) |
m (no blank spaces left, easier to know which is the larges changelog now, no trick hehe) |
||
Line 18: | Line 18: | ||
'''GonoszTopi:''' | '''GonoszTopi:''' | ||
− | ; : | + | ; : * Patch to fix buffer overflow in cas when line had more than 80 chars. |
− | ; : | + | ; : * Patch to fix help switch in ExternalConnector.cpp |
− | ; : | + | ; : * Patch to create -c switch in amulecmd: now the command line version can connect, execute a command and exit. |
'''Hetfield:''' | '''Hetfield:''' | ||
− | ; : | + | ; : * Lots of 3.4.x compilation fixes, due to -DWX_PRECOMP and wx headers checks. |
− | ; : | + | ; : * Configure cleanup, safetray remove and nice cosmetics for tools |
− | ; : | + | ; : * Configure option added: --enable-embedded_crypto to use amule crypto code and bypass crypto libs. Also fix freeze problem. |
− | ; : | + | ; : * fixed crypto usage in core with configure and compilation flags |
− | ; : | + | ; : * Re-enable Pentium4 and SSE2 optimizations fro Crypto stuff |
'''Jacobo221:''' | '''Jacobo221:''' | ||
− | ; : | + | ; : * Fixed issue on the About button. |
'''Kry:''' | '''Kry:''' | ||
− | ; : | + | ; : * Got back from hell. |
− | ; : | + | ; : * Imported eMule's 0.44x new corruption handling: AICH |
− | ; : | + | ; : AICH stands for Advanced Inteligent Corruption Handling, and avoid having to re-download a full part everytime we get corruption on a file. With AICH, you will just re-download the 184Kb block that has corruption. It uses HashTrees to achieve the corruption diagnosis. |
− | ; : | + | ; : More info: http://www.emule-project.net/home/perl/help.cgi?l=1&rm=show_topic&topic_id=589 |
; : ********************************************************************************* | ; : ********************************************************************************* | ||
− | ; : | + | ; : WARNING: AICH thread will re-hash all your files on your first rc6 startup. This can take very long when the user has lots of shared files. We're sorry but that's the only way to build the HashTree and thus making AICH able to work. |
; : ******************************************************************************** | ; : ******************************************************************************** | ||
− | ; : | + | ; : * Fixed the AICH implementation to support big endian archs (like ppc). |
− | ; : | + | ; : * Implemented IPfilter auto-load on startup |
− | ; : | + | ; : * Implemented IPFilter 'Update Now' button on preferences. |
− | ; : | + | ; : * Revamped the HTTP download dialog, used to download IPfilter and server.met (and probably other files in a near future) Now it's the thread who runs the dialog, and dialog no longer block aMule while loading. It also has a progress bar. Yay! |
− | ; : | + | ; : * Fixed amule daemon not allowing auto-dowload of server.met. |
− | ; : | + | ; : * First rework of the Search dialog, later re-worked by Xaignar using the hide/show engine I did. |
− | ; : | + | ; : * Implemented "Send messages" via right-click on source. |
− | ; : | + | ; : * When aMule is running and you try to run a second aMule, it now send a 'raise' message to the current runing one. This is designed to fix the problems with aMule being in a inexistant systray and thus people being unable to recover it. |
− | ; : | + | ; : * Fixed documentation: |
− | ; : | + | ; : * Bugs on kb/kB mistakes |
− | ; : | + | ; : * Added "What are all those fancy colors in the download progress bar about?" |
− | ; : | + | ; : * --version switch now returns 0 (sucessfull app termination) |
− | ; : | + | ; : * MOD_VERSION_LONG does no longer show 2.0.0 version on CVS |
− | ; : | + | ; : * Cleaned the GUI for LOTS of unnecessary wxSizers that were looking ugly on Mac and making wxDesigner project file much cleaner. |
− | ; : | + | ; : * Fixed memleaks on curl usage (thanks Seagull) |
− | ; : | + | ; : * Systray is now skinnable |
− | ; : | + | ; : * Safety checks: A File can't have more than 441 partcount |
− | ; : | + | ; : * Added a file-access tracker that allowed us to fix lot of file access bugs: |
− | ; : | + | ; : * We were closing invalid file descriptors! |
− | ; : | + | ; : * Random Error responese from CFile class, again |
− | ; : | + | ; : * Misc multiple bugs that made me kinnda rewrite the class |
− | ; : | + | ; : * Fixed user not being notified of duplicated files on shareds |
− | ; : | + | ; : * Safe load for clients.met (no more removing to load amule) |
− | ; : | + | ; : * Fixed PrefsUnifiedDlg using wrong events for Spin controls. |
− | ; : | + | ; : * Search textbox now accepts enter key (did it work before? or never worked?) |
− | ; : | + | ; : * aMule now compiles and works with wxWidgets 2.5.2, with no gui bugs |
− | ; : | + | ; : * Fixed a nasty cvs bug that was just taking '0' on upload settings as 0, not unlimited. |
− | ; : | + | ; : * Fixed CArray implementation to avoid ints and make usage of size_t and off_t |
− | ; : | + | ; : * Added GetConnectIP() implementation to BaseClient so we can hold the supposed IP or (after we had a connection) the real IP |
− | ; : | + | ; : * Implemented extra-file_corruption_safety on files. No more 'please rm -rf .aMule/' |
− | ; : | + | ; : * Implemented safe recover of .part.met files. This means that if a .part.met file gets corrupted, aMule will take care of it and try to recover it with minimal info. As a matter of fact, only filesize and hash is need, so any other info will be recovered or set to default instead of discarding the part file. |
− | ; : | + | ; : * Fixed mem corruption on BaseClient |
− | ; : | + | ; : * Fixed a crash on UploadListCtrl due to access to a either uninitialised or removed client. |
− | ; : | + | ; : * Fixed the annoying empty message being sent every time a client connects to us while we have a chatwindow with him. this was really pissing people off ;) |
− | ; : | + | ; : * Reworked SafeFile.cpp and made it compatible with eMule 0.44x. |
− | ; : | + | ; : * aMule defaults to maximize if not size not overriden and no gui size stored (robably first run) |
− | ; : | + | ; : * Implemented CDirIterator. Used to get rid of wxFindFirstFile and such buggy functions (breaking filenames on Mac and others). |
− | ; : | + | ; : * Added GUI preferences fo AICH's hash trusting and IPfilter new options. |
− | ; : | + | ; : * Corrected xMule version show. xMule started sending correct version tags on 1.9.1b, only 4 months after I told them, and only 1 after eMule+ developers did. Is based on our implementation (x.y.z instead of eMule's x.ya), so it was not hard to show them correctly ;) |
− | ; : | + | ; : * Misc developing, memleak fixing, code rewrite, and co-workers abuse by insulting them and degrading them to worm state. |
− | ; : | + | ; : * Kademlia Import: |
− | ; : | + | ; : kademlia/utils |
− | ; : | + | ; : * UInt128.cpp (class for handling 128-bits integers, added hability to read/write on SafeFile). |
− | ; : | + | ; : * UInt128.h |
− | ; : | + | ; : * All other files on the kademlia/utils are not needed by aMule. |
− | ; : | + | ; : kademlia/kademlia/ |
− | ; : | + | ; : * Defines.h |
− | ; : | + | ; : * Entries.h |
− | ; : | + | ; : * Error.h |
− | ; : | + | ; : * Tag.h |
− | ; : | + | ; : kademlia/routing/ |
− | ; : | + | ; : * Map.h |
− | ; : | + | ; : * Mac: |
− | ; : | + | ; : * Fixed compilation near every day :) |
− | ; : | + | ; : * Fixed the file descriptor problems, using the new file access tracker. |
− | ; : | + | ; : * Fixed the clients.met file being saved badly and thus breaking load. |
− | ; : | + | ; : * Fixed Search page not setting the SearchType to default. |
− | ; : | + | ; : * Fixed the start, clear and clear all buttons on Search page |
− | ; : | + | ; : * Fixed wrong usage (at least on Mac) of multi line control functions on single line text control |
− | ; : | + | ; : * Fixed sharing dirs giving access errors (and probably on other archs than Mac). |
− | ; : | + | ; : * Fixed amule daemon for taking 100% (or 198% on a dual system) CPU. |
− | ; : | + | ; : * Fixed wrong filenames being shown when more than 24 chars. See CDirIterator above. |
− | ; : | + | ; : * Fixed 'MyInfo' tab showing wrong endianess on IP. |
− | ; : | + | ; : * Deleted files: |
− | ; : | + | ; : eMule-Import-Status -> Very old unused file. |
− | ; : | + | ; : RC1-KnownBugs -> Very old unused file. |
− | ; : | + | ; : HTTPDownloadDlg.* -> HTTPDownload.* (no longer a GUI file) |
'''lfroen:''' | '''lfroen:''' | ||
− | ; : | + | ; : * Core/GUI separation: |
− | ; : | + | ; : * Moved all GUI code out of Core files. |
− | ; : | + | ; : * Made a new socket engine to be able to use wxSocket on wxBase, even when wxBase has no event pool. |
− | ; : | + | ; : * aMule daemon is now functional, but it still need hard testing. Enable it using --enable-amule-daemon. You can control it via any EC app (amulecmd, amuleweb) |
− | ; : | + | ; : * aMule separated GUI does not compile right now, and the communication with the core will be improved as EC is rewritten by GonoszTopi. |
− | ; : | + | ; : * Fixed crash on DownloadClient |
− | ; : | + | ; : * Misc aMule fixes here and there :) |
'''Littletux:''' | '''Littletux:''' | ||
− | ; : | + | ; : * Patch to include UTF-8 support in systray. |
− | ; : | + | ; : * Patch to fix configure.in UTF-8 SysTray code. |
'''Phoenix:''' | '''Phoenix:''' | ||
− | ; : | + | ; : * Fixed a compilation warning + appartently useless code in DirectoryTree.cpp. |
− | ; : | + | ; : * Fixed amuleIPV4Address for wx-2.5.2 and up. |
− | ; : | + | ; : * Fixed the low number of sources problem with wx-2.5.2 and up. Problem was in CUDPSocket::SendBuffer, now there is a macro to test. aMule should be 2.5.2 network ready now. |
− | ; : | + | ; : * wxCHECK_VERSION(2,5,0) no longer necessary in amule{web,cmd} for wxApp because we have now -DwxUSE_GUI=0. |
− | ; : | + | ; : * New command line parameter in amulecmd: -pw or --password. |
− | ; : | + | ; : * New commands in amulecmd: serverconnect, reloadipf and setipfilter. Thanks rommel for the initial patch. |
− | ; : | + | ; : * Fixed amulecmd command parser. Help was not coherent and giving syntar errors. |
− | ; : | + | ; : * Rewrote command parser/processor im amulecmd to use wxStrings. |
− | ; : | + | ; : * Some i18n stuff in amulecmd. |
− | ; : | + | ; : * Rewrote amulecmd and amuleweb, creating a new module, ExternalConnector.cpp. This module has a lot of code common to both programs and will make it easier to maintain. |
− | ; : | + | ; : * Fixed a small wxString bug in CamuleDlg::AddLogLine() in amuleDlg.cpp. |
− | ; : | + | ; : * Improoved wxSting usage in ExternalConn.cpp. |
− | ; : | + | ; : * Yielding in DownloadQueue.cpp Init() so that gui is not blank when loading lots of files. |
− | ; : | + | ; : * A little better font/color handling in amulewebDLG and amulecmdDLG. |
− | ; : | + | ; : * New command line parameter for amuleweb, amulewebDLG, amulecmd and amulecmdDLG: -f. This parameter reads the ECPpassword and the ECPort from the [ExternalConnect] section of file ~/.eMule. This way, the plain text password doesn't have to be passed in the command line. |
− | ; : | + | ; : * Updated socket-2.5.c to the latest wx-cvs code. Fast reconnect -> lowid bug is fixed in wx-cvs now. When wx-2.5.3 is out, we will finally be able to drop this file. It will only be needed for versions 2.5.0(?) to 2.5.2. |
− | ; : | + | ; : * Removed gsocket-2.5.h from the project. This file was not beeing used anymore. |
− | ; : | + | ; : * Added command line parameter "-q" or "--quiet" to amuleweb(Dlg) and amulecmd(Dlg). This is to run amuleweb without any output to stdout, so that it does not need a terminal. |
− | ; : | + | ; : * Changed amulewebDLG and amulecmdDLG to use sizers. |
− | ; : | + | ; : * Removed a bug in WebSocket.cpp: was not testing the return value of Accept, this could create a thread with a NULL socket. |
− | ; : | + | ; : * Added two new commands to amulecmd(DLG), GetIPLevel and SetIPLevel <new level>. |
− | ; : | + | ; : * Rewrote most of the wxString usage of amule web server in ExternalConn.cpp. There should be some speed improovement. |
− | ; : | + | ; : * Removed pop up when web server requested ed2k source link and amule was low id. |
− | ; : | + | ; : * Fixed a problem with Server Connect command in amulecmd, it was not working. It has been renamed to ConnectTo. Also fixed help command output, should look better now. |
− | ; : | + | ; : * Added "-fmessage-length=0 -W" flags when --enable-debug. |
− | ; : | + | ; : * Changed m4/wxwin.m4 to recognize wx-config --libs base (no equal sign from 2.5.3 and up). |
− | ; : | + | ; : * Unicode fix in SysTray and new compiler wanings fix due to new compiler debug option -W. |
− | ; : | + | ; : * Some more consts in code due to DownloadQueue::GetFileByIndex() and CSharedFileList::GetFileByIndex(). Also cleaned those functions. |
− | ; : | + | ; : * Fixed Resume/Pause bug in amulecmd/amule. Now Resume/Pause argument starts at zero. |
− | ; : | + | ; : * More gsocket.h update. |
− | ; : | + | ; : * Debug protocol options. Comment/Uncomment: |
− | ; : | + | ; : #define DEBUG_LOCAL_CLIENT_PROTOCOL in BaseClient.cpp |
− | ; : | + | ; : #define DEBUG_REMOTE_CLIENT_PROTOCOL in ListenSocket.cpp |
− | ; : | + | ; : #define DEBUG_SERVER_PROTOCOL in ServerSocket.cpp |
− | ; : | + | ; : #define DEBUG_CLIENT_PROTOCOL in sockets.cpp |
− | ; : | + | ; : * Changed configure.in to no longer use gsocket-2.5.c for wx-2.5.3 and up. |
− | ; : | + | ; : * Fixed the Random Lowid Bug. |
− | ; : | + | ; : * Cleaner solution to RLB: Accept() the connection and Destroy() the socket immediately. |
− | ; : | + | ; : * Fixed a lot of bugs in amuleweb. In particular, stop / pause / cancel / priority(up/down) now works. |
− | ; : | + | ; : * Removed bubble sort code in download queue from amuleweb. This code did not scale for large number of files, like hundreds. There is still room for improovement here. |
− | ; : | + | ; : * Fixed a bug in SafeFile.cpp. wxString.Length() returns the number of codes in the string, which is less than or equal to the number of bytes in a multibyte encoded string. This way, amule will also not crash with locale search strings like korean, japanese and chinese. |
− | ; : | + | ; : * Several amuleweb/ExternalConn bug fixes. Now the communication is in UTF8, so that soon amuleweb non-unicode can communicate with amule unicode and vice-versa. There was a bug when the number of files was more than approximately 90 because the communication routines could not handle strings greater than 64K chars. There is still some replicated code in ExternalConn.cpp, but the idea is that it will use the code in ECSocket.cpp. |
− | ; : | + | ; : * Bug fix in ExternalConn.cpp. ECSocket must have the wxSOCKET_WAITALL flag to work properly when the message has more than 64Kbytes. aMule now uses ECSocket.cpp, no more replicated code in ExternalConn.cpp. |
− | ; : | + | ; : * Fixed a bug in ListenSocket.cpp, m_client can be null after ProcessSecIdentStatePacket(), so, we must check. |
− | ; : | + | ; : * Fixed conversion problems in ECSocket.cpp. Now external connections in UTF-8 are really working, and amuleweb/amulecmd (unicoded or not) can connect to amule (unicoded or not). |
− | ; : | + | ; : * Fixed an unprotected call to strlen() in ECSockets.cpp, if you pass a NULL pointer to it, the program segfaults. |
− | ; : | + | ; : * Added a timer for idle repainting in amulewebDLG and mulecmdDLG. |
− | ; : | + | ; : * Fixed this assertion in Preferences.cpp: [Debug] 07:02:00 M: include/wx/longlong.h(155): assert "(m_ll >= LONG_MIN) && (m_ll <= LONG_MAX)" failed: wxLongLong to long conversion loss of precision. |
− | ; : | + | ; : * Reimplemented "Show Rates On Title" preference. |
− | ; : | + | ; : * Initial import of new MD4 hash code from emule 0.44a into KnownFile.{cpp,h}. |
− | ; : | + | ; : * Removed amuleweb html template 12 char password limitation. |
− | ; : | + | ; : * Small fixes to UTF-8 SysTray support patch. |
− | ; : | + | ; : * Several unicode fixes. |
− | ; : | + | ; : * New macro in otherfunctions.h: unicode2charbuf(x) -- used when you need to store a (char *) to use several times. |
'''Rommel:''' | '''Rommel:''' | ||
− | ; : | + | ; : * Patch to implement the commands serverconnect and reloadipf in amulecmd. |
'''ThePolish:''' | '''ThePolish:''' | ||
− | ; : | + | ; : * i18n amule log lines (server window) |
− | ; : | + | ; : * amulecmd and webinterface i18n fixes |
− | ; : | + | ; : * Some win32 fixes (slashes and backslashes) |
− | ; : | + | ; : * Automake 1.8 fixes |
− | ; : | + | ; : * Add traditionnal Chinese translation (zh_TW) from Paul (Thanks !) |
− | ; : | + | ; : * Add it, nl, fr, pl, es, eu, ca translation updates (Thanks to all translators) |
− | ; : | + | ; : * Fix copyright for alc icons |
− | ; : | + | ; : * Replace amule, wxCas, alc .ico simple icons by icons group .ico |
− | ; : | + | ; : * Replace alcc's printf by wxLogMassage |
− | ; : | + | ; : * Make runtime to be in seconds in amulesig.dat |
− | ; : | + | ; : * Modify Xas to handle runtime in seconds |
− | ; : | + | ; : * Modify wxCas to handle runtime in seconds |
'''Unleashed:''' | '''Unleashed:''' | ||
− | ; : | + | ; : * cas: some sprintf -> snprintf conversions, ifdef unix specific code, and revert get_path() breakage |
'''Xaignar:''' | '''Xaignar:''' | ||
− | ; : | + | ; : * Other stuff I'm too lazy to write or have forgotten about. ;) |
− | ; : | + | ; : * Initial multi-sorting on download list. Upon changing sort-column, any items that were evaulated to equal will be resorted by the last used column. |
− | ; : | + | ; : * Fixed the constant resetting of the category dropdown-menu in the searchdlg. |
− | ; : | + | ; : * Fixed "&"s being replaced with "&&" on the log-view. |
− | ; : | + | ; : * Only displayed category color when the items arn't highlighted on the download list, to improve readability. (thanks to Seagull) |
− | ; : | + | ; : * Optimized the IPFilter-code. |
− | ; : | + | ; : * Improved the CDownloadListCtrl::Updateitem function so that it doesn't search the list for hidden items. |
− | ; : | + | ; : * Improved sorting of clients by QR on the download list. |
− | ; : | + | ; : * Removed a number of unsued files, cutting down archive-size by around 900kb. |
− | ; : | + | ; : * Changed systray behavior to match KDE/GNOME. Single-clicks hide/show. |
− | ; : | + | ; : * Fixed the "Last Recieved" column, which would show the same as the "Last Seen Completed" column. |
− | ; : | + | ; : * Fixed the placement of sources on the download list, where they would sometimes be placed with the wrong file. |
− | ; : | + | ; : * Cleanup of the new AICHSyncThread class. |
− | ; : | + | ; : * Removed extra newlines before writing text to the logfile, to avoid having a double-spaced file. |
− | ; : | + | ; : * Fixed loading of addresses.dat, where the first line would be ignored and replaced the messagebox with a log-line. |
− | ; : | + | ; : * Fix the percentage displayed on the progress-bars being rounded, which would result in non-completed files showing 100%. |
− | ; : | + | ; : * Added the ability for the user to specify permission settings for fildes and directories. These settings default to 640 for files and 750 for directories and are used throughout the app, with the exception of files created with wxTextFile, as that class lacks support for permissions. Will be fixed later |
− | ; : | + | ; : * Cleanup of CServerListCtrl: |
− | ; : | + | ; : - The sorting of the list is now always maintained, including when items on the list are updated or new items updated. |
− | ; : | + | ; : - Cleanup of the popup-menu. |
− | ; : | + | ; : - Disallow connecting to multiple servers at the same time. |
− | ; : | + | ; : - Other changes. |
− | ; : | + | ; : * Reduced the overhead of the overhead calculation by using code that didn't require iterating through a list every time. |
− | ; : | + | ; : * Added checks to avoid the user getting spammed with the "Connected to user" and "Disconnected ..." when having an open chat-window. |
− | ; : | + | ; : * Second reworking of the SearchDlg |
− | ; : | + | ; : - The crash on searching should be fixed now. |
− | ; : | + | ; : - Initial cleanups of the SearchList class |
− | ; : | + | ; : * Cleanup of the SearchListCtrl class |
− | ; : | + | ; : - Results will now always be sorted |
− | ; : | + | ; : - Syncronized all lists during runtime, so that they behave as a single list. |
− | ; : | + | ; : - Improving the coloring of items. |
− | ; : | + | ; : * Cleanup of the CMuleNotebook class |
− | ; : | + | ; : * Cleanup of the CMuleListCtrl class: |
− | ; : | + | ; : - Added double-arrow for alternate sorting. |
− | ; : | + | ; : - Centralized a lot of logical plus lots of other changes |
− | ; : | + | ; : * Double-buffered all listctrls using custom drawing, to reduce flicker. |
− | ; : | + | ; : * Added warning if the user recieves LowID from the server. |
− | ; : | + | ; : * Disallowing the user to send empty messages in the chat window. |
− | ; : | + | ; : * Rewrote the PrefsUnifiedDlg class |
− | ; : | + | ; : - Removed the Rse classes and create a more clean replacement. |
− | ; : | + | ; : - Made the dialog mode-less. |
− | ; : | + | ; : - Removed the un-implemented Notify page |
− | ; : | + | ; : - Serveral other changes. |
− | ; : | + | ; : * Updated the version reporting capabilities of aMule, so that it will report version, wxWidgets type and version and if unicode has been enabled or not. |
− | ; : | + | ; : * Added the new MuleTextCtrl class which supports the traditional popup-menu with Cut/Copy/Past/Clear and Select All. All existing wxTextCtrls were replaced with this new class. |
− | ; : | + | ; : * Imported the parts of Crypto++ that aMule needs into two files with permission from the Crypto++ developer. This means that aMule now compiles without the user having Crypto++ installed, though it is still possible to use external Crypto++ installations if the user wishes to do so. |
− | ; : | + | ; : * Fixed some compilation problems with aLinkCreator and wx-2.5.2. |
− | ; : | + | ; : * Fixed the First-Time-Message being displayed twice and rewrote it somewhat since it was becomming quite outdated. |
− | ; : | + | ; : * Fixed the "unable to open preferences.dat" bugs. |
− | ; : | + | ; : * Fixed the ability to add static servers. |
− | ; : | + | ; : * Cleanup of column sorting functions. |
− | ; : | + | ; : * Fixed a bug where CServer::HasDynIP would always return true. This would result in need-less dns lookups. |
− | ; : | + | ; : * Removed a redundant attempt at adding servers from connected clients. |
− | ; : | + | ; : * Fix for Packet::PackPackets function where new size of packet wouldn't be saved. |
− | ; : | + | ; : * Fixed some access to the dialog-window ptr after it had been deleted. This was causing some odd behavior once in a while on termination. |
− | ; : | + | ; : * Fixed the downloadqueue sorting, which was reversed. Low-priorty files having high priority and high-priority files having low priority. (Thanks to thomas001 for noticing) |
− | ; : | + | ; : * Rewroked the systray: |
− | ; : | + | ; : - Fixed the the problems with the rate-limiting functionality. |
− | ; : | + | ; : - Enabled use of PublicIP requests, so that the tray will show the users actual IP rather than the interface IP. |
− | ; : | + | ; : - Some changes of the menu-structure. |
− | ; : | + | ; : * Complete reworking of the hashing thread: |
− | ; : | + | ; : - More informative output |
− | ; : | + | ; : - Much better error handling |
− | ; : | + | ; : - Handles duplicate files gracefully |
− | ; : | + | ; : - Reads only 128kb (instead of 9mb) at a time to avoid killing the harddisk entirely while the thread is running. |
− | ; : | + | ; : - Made the thread terminate when no files are left, instead of timing out as before. |
− | ; : | + | ; : * Disconnected otherfunctions.h from the rest of the aMule code, so that it should be possible to use it in external apps. |
− | ; : | + | ; : * Added checks when using the client-pointer in the socket-code, since that suffered from the same problem as the previously fixed clients (they have a habbit of dying at random). |
− | ; : | + | ; : * Added function for truncanating displayed filenames, which is now used in file-details dialog, to avoid it getting resized to extreme widths. |
− | ; : | + | ; : * Some work on readying the Info tab on servers, deltaHF_ did the rest of the work. |
− | ; : | + | ; : * Small re-fix for the "mis-matching hash"-bug fix |
− | ; : | + | ; : * Reworked the SearchDlg once |
− | ; : | + | ; : - Added Jugle.net websearch |
− | ; : | + | ; : - Added results-count to the result tabs |
− | ; : | + | ; : - Other smaller changes |
− | ; : | + | ; : * Fixed mem-leak where certian client-objects wouldn't be deleted. Specifically those that were removed from the download queue but wern't on the upload queue and didn't have a active socket. |
− | ; : | + | ; : * Removed debugging functionality no longer needed. |
− | ; : | + | ; : * Removed variable-arguments logging functions, since they were only needed in a very few places and posed a potential risk everywhere else. |
− | ; : | + | ; : * Fixed StripInvalidFilenameChars function to avoid legit letters being dropped (thanks to likesylph). |
− | ; : | + | ; : * Changed all file-accessing to use CFile rather than a mix of CFile, wxFile and FILE. |
− | ; : | + | ; : * Removed a number of warnings. |
− | ; : | + | ; : * Cleanups of the following files |
− | ; : | + | ; : - AICHSyncThread.* |
− | ; : | + | ; : - ServerListCtrl.* |
− | ; : | + | ; : - SearchListCtrl.* |
− | ; : | + | ; : - MuleNotebook.* |
− | ; : | + | ; : - MuleListCtrl.* |
− | ; : | + | ; : - PrefsUnifiedDlg.* |
− | ; : | + | ; : - SysTray.* |
− | ; : | + | ; : - AddFileThread.* |
− | ; : | + | ; : - SearchDlg.* |
− | ; : | + | ; : - CMemFile.h and filemem.cpp |
− | ; : | + | ; : - SafeFiles.* |
− | ; : | + | ; : - CFile.* |
'''Special Thanks To:''' | '''Special Thanks To:''' | ||
− | ; : | + | ; : * Lucasvr, for providing fixes for compilation with some wx versions. |
− | ; : | + | ; : * Seagull, for providing fixes and suggestions. |
− | ; : | + | ; : * likesylph, for providing a fix for the StripInvalidFilenameChars function. |
− | ; : | + | ; : * All translators |
− | ; : | + | ; : * All testers |
− | ; : | + | ; : * BrianHV and the people at #wxwidgets for their help and support |
− | ; : | + | ; : * EVERYONE at #amule (even codewarrior2!) |
− | ; : | + | ; : * All the people in aMule's forum |
− | ; : | + | ; : * All the users, for having the patience to wait the delayed rc6 release. |
− | ; : | + | ; : * Hellimod, one_2_one, ASTIOBOY, sssnake, lami123, Ocimin, agav, PowerMike and all the mac testers and people providing Macs for ssh & vnc. |
'''Funny stuff about this changelog:''' | '''Funny stuff about this changelog:''' | ||
− | ; : | + | ; : * You can notice that the Search dialog was rewritten 3 (THREE!) times between rc5 and rc6. You only get to see the final version (Xaignar's), but the initial one was Kry's (when the extended buttons show/hide were added) and then deltaHF changed it later. |
− | ; : | + | ; : We just love changing that page. |
Latest revision as of 01:25, 4 October 2004
Version 2.0.0rc6 - The "We're so EVIL that we make you lose a sock in every pair" version.
2004-10-03
deltaHF:
- * GUI for MyInfo at Server window.
- * Added 'About' button.
- * Fixed sorting upload list by speed
- * Changed the Search dialog.
- * Fixes websearch for jugle.net
- * Added hability for send msg to clients in upload queue, without having to add them as friends (based on Kry's download queue send-on-right-click implementation)
- * Translations update.
falso:
- * New upstream cas version. Now supports creating html pages with the statistics
- * Now cas runs on netbsd.
- * Misc fixes on cas.
GonoszTopi:
- * Patch to fix buffer overflow in cas when line had more than 80 chars.
- * Patch to fix help switch in ExternalConnector.cpp
- * Patch to create -c switch in amulecmd: now the command line version can connect, execute a command and exit.
Hetfield:
- * Lots of 3.4.x compilation fixes, due to -DWX_PRECOMP and wx headers checks.
- * Configure cleanup, safetray remove and nice cosmetics for tools
- * Configure option added: --enable-embedded_crypto to use amule crypto code and bypass crypto libs. Also fix freeze problem.
- * fixed crypto usage in core with configure and compilation flags
- * Re-enable Pentium4 and SSE2 optimizations fro Crypto stuff
Jacobo221:
- * Fixed issue on the About button.
Kry:
- * Got back from hell.
- * Imported eMule's 0.44x new corruption handling: AICH
- AICH stands for Advanced Inteligent Corruption Handling, and avoid having to re-download a full part everytime we get corruption on a file. With AICH, you will just re-download the 184Kb block that has corruption. It uses HashTrees to achieve the corruption diagnosis.
- More info: http://www.emule-project.net/home/perl/help.cgi?l=1&rm=show_topic&topic_id=589
- *********************************************************************************
- WARNING: AICH thread will re-hash all your files on your first rc6 startup. This can take very long when the user has lots of shared files. We're sorry but that's the only way to build the HashTree and thus making AICH able to work.
- ********************************************************************************
- * Fixed the AICH implementation to support big endian archs (like ppc).
- * Implemented IPfilter auto-load on startup
- * Implemented IPFilter 'Update Now' button on preferences.
- * Revamped the HTTP download dialog, used to download IPfilter and server.met (and probably other files in a near future) Now it's the thread who runs the dialog, and dialog no longer block aMule while loading. It also has a progress bar. Yay!
- * Fixed amule daemon not allowing auto-dowload of server.met.
- * First rework of the Search dialog, later re-worked by Xaignar using the hide/show engine I did.
- * Implemented "Send messages" via right-click on source.
- * When aMule is running and you try to run a second aMule, it now send a 'raise' message to the current runing one. This is designed to fix the problems with aMule being in a inexistant systray and thus people being unable to recover it.
- * Fixed documentation:
- * Bugs on kb/kB mistakes
- * Added "What are all those fancy colors in the download progress bar about?"
- * --version switch now returns 0 (sucessfull app termination)
- * MOD_VERSION_LONG does no longer show 2.0.0 version on CVS
- * Cleaned the GUI for LOTS of unnecessary wxSizers that were looking ugly on Mac and making wxDesigner project file much cleaner.
- * Fixed memleaks on curl usage (thanks Seagull)
- * Systray is now skinnable
- * Safety checks: A File can't have more than 441 partcount
- * Added a file-access tracker that allowed us to fix lot of file access bugs:
- * We were closing invalid file descriptors!
- * Random Error responese from CFile class, again
- * Misc multiple bugs that made me kinnda rewrite the class
- * Fixed user not being notified of duplicated files on shareds
- * Safe load for clients.met (no more removing to load amule)
- * Fixed PrefsUnifiedDlg using wrong events for Spin controls.
- * Search textbox now accepts enter key (did it work before? or never worked?)
- * aMule now compiles and works with wxWidgets 2.5.2, with no gui bugs
- * Fixed a nasty cvs bug that was just taking '0' on upload settings as 0, not unlimited.
- * Fixed CArray implementation to avoid ints and make usage of size_t and off_t
- * Added GetConnectIP() implementation to BaseClient so we can hold the supposed IP or (after we had a connection) the real IP
- * Implemented extra-file_corruption_safety on files. No more 'please rm -rf .aMule/'
- * Implemented safe recover of .part.met files. This means that if a .part.met file gets corrupted, aMule will take care of it and try to recover it with minimal info. As a matter of fact, only filesize and hash is need, so any other info will be recovered or set to default instead of discarding the part file.
- * Fixed mem corruption on BaseClient
- * Fixed a crash on UploadListCtrl due to access to a either uninitialised or removed client.
- * Fixed the annoying empty message being sent every time a client connects to us while we have a chatwindow with him. this was really pissing people off ;)
- * Reworked SafeFile.cpp and made it compatible with eMule 0.44x.
- * aMule defaults to maximize if not size not overriden and no gui size stored (robably first run)
- * Implemented CDirIterator. Used to get rid of wxFindFirstFile and such buggy functions (breaking filenames on Mac and others).
- * Added GUI preferences fo AICH's hash trusting and IPfilter new options.
- * Corrected xMule version show. xMule started sending correct version tags on 1.9.1b, only 4 months after I told them, and only 1 after eMule+ developers did. Is based on our implementation (x.y.z instead of eMule's x.ya), so it was not hard to show them correctly ;)
- * Misc developing, memleak fixing, code rewrite, and co-workers abuse by insulting them and degrading them to worm state.
- * Kademlia Import:
- kademlia/utils
- * UInt128.cpp (class for handling 128-bits integers, added hability to read/write on SafeFile).
- * UInt128.h
- * All other files on the kademlia/utils are not needed by aMule.
- kademlia/kademlia/
- * Defines.h
- * Entries.h
- * Error.h
- * Tag.h
- kademlia/routing/
- * Map.h
- * Mac:
- * Fixed compilation near every day :)
- * Fixed the file descriptor problems, using the new file access tracker.
- * Fixed the clients.met file being saved badly and thus breaking load.
- * Fixed Search page not setting the SearchType to default.
- * Fixed the start, clear and clear all buttons on Search page
- * Fixed wrong usage (at least on Mac) of multi line control functions on single line text control
- * Fixed sharing dirs giving access errors (and probably on other archs than Mac).
- * Fixed amule daemon for taking 100% (or 198% on a dual system) CPU.
- * Fixed wrong filenames being shown when more than 24 chars. See CDirIterator above.
- * Fixed 'MyInfo' tab showing wrong endianess on IP.
- * Deleted files:
- eMule-Import-Status -> Very old unused file.
- RC1-KnownBugs -> Very old unused file.
- HTTPDownloadDlg.* -> HTTPDownload.* (no longer a GUI file)
lfroen:
- * Core/GUI separation:
- * Moved all GUI code out of Core files.
- * Made a new socket engine to be able to use wxSocket on wxBase, even when wxBase has no event pool.
- * aMule daemon is now functional, but it still need hard testing. Enable it using --enable-amule-daemon. You can control it via any EC app (amulecmd, amuleweb)
- * aMule separated GUI does not compile right now, and the communication with the core will be improved as EC is rewritten by GonoszTopi.
- * Fixed crash on DownloadClient
- * Misc aMule fixes here and there :)
Littletux:
- * Patch to include UTF-8 support in systray.
- * Patch to fix configure.in UTF-8 SysTray code.
Phoenix:
- * Fixed a compilation warning + appartently useless code in DirectoryTree.cpp.
- * Fixed amuleIPV4Address for wx-2.5.2 and up.
- * Fixed the low number of sources problem with wx-2.5.2 and up. Problem was in CUDPSocket::SendBuffer, now there is a macro to test. aMule should be 2.5.2 network ready now.
- * wxCHECK_VERSION(2,5,0) no longer necessary in amule{web,cmd} for wxApp because we have now -DwxUSE_GUI=0.
- * New command line parameter in amulecmd: -pw or --password.
- * New commands in amulecmd: serverconnect, reloadipf and setipfilter. Thanks rommel for the initial patch.
- * Fixed amulecmd command parser. Help was not coherent and giving syntar errors.
- * Rewrote command parser/processor im amulecmd to use wxStrings.
- * Some i18n stuff in amulecmd.
- * Rewrote amulecmd and amuleweb, creating a new module, ExternalConnector.cpp. This module has a lot of code common to both programs and will make it easier to maintain.
- * Fixed a small wxString bug in CamuleDlg::AddLogLine() in amuleDlg.cpp.
- * Improoved wxSting usage in ExternalConn.cpp.
- * Yielding in DownloadQueue.cpp Init() so that gui is not blank when loading lots of files.
- * A little better font/color handling in amulewebDLG and amulecmdDLG.
- * New command line parameter for amuleweb, amulewebDLG, amulecmd and amulecmdDLG: -f. This parameter reads the ECPpassword and the ECPort from the [ExternalConnect] section of file ~/.eMule. This way, the plain text password doesn't have to be passed in the command line.
- * Updated socket-2.5.c to the latest wx-cvs code. Fast reconnect -> lowid bug is fixed in wx-cvs now. When wx-2.5.3 is out, we will finally be able to drop this file. It will only be needed for versions 2.5.0(?) to 2.5.2.
- * Removed gsocket-2.5.h from the project. This file was not beeing used anymore.
- * Added command line parameter "-q" or "--quiet" to amuleweb(Dlg) and amulecmd(Dlg). This is to run amuleweb without any output to stdout, so that it does not need a terminal.
- * Changed amulewebDLG and amulecmdDLG to use sizers.
- * Removed a bug in WebSocket.cpp: was not testing the return value of Accept, this could create a thread with a NULL socket.
- * Added two new commands to amulecmd(DLG), GetIPLevel and SetIPLevel <new level>.
- * Rewrote most of the wxString usage of amule web server in ExternalConn.cpp. There should be some speed improovement.
- * Removed pop up when web server requested ed2k source link and amule was low id.
- * Fixed a problem with Server Connect command in amulecmd, it was not working. It has been renamed to ConnectTo. Also fixed help command output, should look better now.
- * Added "-fmessage-length=0 -W" flags when --enable-debug.
- * Changed m4/wxwin.m4 to recognize wx-config --libs base (no equal sign from 2.5.3 and up).
- * Unicode fix in SysTray and new compiler wanings fix due to new compiler debug option -W.
- * Some more consts in code due to DownloadQueue::GetFileByIndex() and CSharedFileList::GetFileByIndex(). Also cleaned those functions.
- * Fixed Resume/Pause bug in amulecmd/amule. Now Resume/Pause argument starts at zero.
- * More gsocket.h update.
- * Debug protocol options. Comment/Uncomment:
- #define DEBUG_LOCAL_CLIENT_PROTOCOL in BaseClient.cpp
- #define DEBUG_REMOTE_CLIENT_PROTOCOL in ListenSocket.cpp
- #define DEBUG_SERVER_PROTOCOL in ServerSocket.cpp
- #define DEBUG_CLIENT_PROTOCOL in sockets.cpp
- * Changed configure.in to no longer use gsocket-2.5.c for wx-2.5.3 and up.
- * Fixed the Random Lowid Bug.
- * Cleaner solution to RLB: Accept() the connection and Destroy() the socket immediately.
- * Fixed a lot of bugs in amuleweb. In particular, stop / pause / cancel / priority(up/down) now works.
- * Removed bubble sort code in download queue from amuleweb. This code did not scale for large number of files, like hundreds. There is still room for improovement here.
- * Fixed a bug in SafeFile.cpp. wxString.Length() returns the number of codes in the string, which is less than or equal to the number of bytes in a multibyte encoded string. This way, amule will also not crash with locale search strings like korean, japanese and chinese.
- * Several amuleweb/ExternalConn bug fixes. Now the communication is in UTF8, so that soon amuleweb non-unicode can communicate with amule unicode and vice-versa. There was a bug when the number of files was more than approximately 90 because the communication routines could not handle strings greater than 64K chars. There is still some replicated code in ExternalConn.cpp, but the idea is that it will use the code in ECSocket.cpp.
- * Bug fix in ExternalConn.cpp. ECSocket must have the wxSOCKET_WAITALL flag to work properly when the message has more than 64Kbytes. aMule now uses ECSocket.cpp, no more replicated code in ExternalConn.cpp.
- * Fixed a bug in ListenSocket.cpp, m_client can be null after ProcessSecIdentStatePacket(), so, we must check.
- * Fixed conversion problems in ECSocket.cpp. Now external connections in UTF-8 are really working, and amuleweb/amulecmd (unicoded or not) can connect to amule (unicoded or not).
- * Fixed an unprotected call to strlen() in ECSockets.cpp, if you pass a NULL pointer to it, the program segfaults.
- * Added a timer for idle repainting in amulewebDLG and mulecmdDLG.
- * Fixed this assertion in Preferences.cpp: [Debug] 07:02:00 M: include/wx/longlong.h(155): assert "(m_ll >= LONG_MIN) && (m_ll <= LONG_MAX)" failed: wxLongLong to long conversion loss of precision.
- * Reimplemented "Show Rates On Title" preference.
- * Initial import of new MD4 hash code from emule 0.44a into KnownFile.{cpp,h}.
- * Removed amuleweb html template 12 char password limitation.
- * Small fixes to UTF-8 SysTray support patch.
- * Several unicode fixes.
- * New macro in otherfunctions.h: unicode2charbuf(x) -- used when you need to store a (char *) to use several times.
Rommel:
- * Patch to implement the commands serverconnect and reloadipf in amulecmd.
ThePolish:
- * i18n amule log lines (server window)
- * amulecmd and webinterface i18n fixes
- * Some win32 fixes (slashes and backslashes)
- * Automake 1.8 fixes
- * Add traditionnal Chinese translation (zh_TW) from Paul (Thanks !)
- * Add it, nl, fr, pl, es, eu, ca translation updates (Thanks to all translators)
- * Fix copyright for alc icons
- * Replace amule, wxCas, alc .ico simple icons by icons group .ico
- * Replace alcc's printf by wxLogMassage
- * Make runtime to be in seconds in amulesig.dat
- * Modify Xas to handle runtime in seconds
- * Modify wxCas to handle runtime in seconds
Unleashed:
- * cas: some sprintf -> snprintf conversions, ifdef unix specific code, and revert get_path() breakage
Xaignar:
- * Other stuff I'm too lazy to write or have forgotten about. ;)
- * Initial multi-sorting on download list. Upon changing sort-column, any items that were evaulated to equal will be resorted by the last used column.
- * Fixed the constant resetting of the category dropdown-menu in the searchdlg.
- * Fixed "&"s being replaced with "&&" on the log-view.
- * Only displayed category color when the items arn't highlighted on the download list, to improve readability. (thanks to Seagull)
- * Optimized the IPFilter-code.
- * Improved the CDownloadListCtrl::Updateitem function so that it doesn't search the list for hidden items.
- * Improved sorting of clients by QR on the download list.
- * Removed a number of unsued files, cutting down archive-size by around 900kb.
- * Changed systray behavior to match KDE/GNOME. Single-clicks hide/show.
- * Fixed the "Last Recieved" column, which would show the same as the "Last Seen Completed" column.
- * Fixed the placement of sources on the download list, where they would sometimes be placed with the wrong file.
- * Cleanup of the new AICHSyncThread class.
- * Removed extra newlines before writing text to the logfile, to avoid having a double-spaced file.
- * Fixed loading of addresses.dat, where the first line would be ignored and replaced the messagebox with a log-line.
- * Fix the percentage displayed on the progress-bars being rounded, which would result in non-completed files showing 100%.
- * Added the ability for the user to specify permission settings for fildes and directories. These settings default to 640 for files and 750 for directories and are used throughout the app, with the exception of files created with wxTextFile, as that class lacks support for permissions. Will be fixed later
- * Cleanup of CServerListCtrl:
- - The sorting of the list is now always maintained, including when items on the list are updated or new items updated.
- - Cleanup of the popup-menu.
- - Disallow connecting to multiple servers at the same time.
- - Other changes.
- * Reduced the overhead of the overhead calculation by using code that didn't require iterating through a list every time.
- * Added checks to avoid the user getting spammed with the "Connected to user" and "Disconnected ..." when having an open chat-window.
- * Second reworking of the SearchDlg
- - The crash on searching should be fixed now.
- - Initial cleanups of the SearchList class
- * Cleanup of the SearchListCtrl class
- - Results will now always be sorted
- - Syncronized all lists during runtime, so that they behave as a single list.
- - Improving the coloring of items.
- * Cleanup of the CMuleNotebook class
- * Cleanup of the CMuleListCtrl class:
- - Added double-arrow for alternate sorting.
- - Centralized a lot of logical plus lots of other changes
- * Double-buffered all listctrls using custom drawing, to reduce flicker.
- * Added warning if the user recieves LowID from the server.
- * Disallowing the user to send empty messages in the chat window.
- * Rewrote the PrefsUnifiedDlg class
- - Removed the Rse classes and create a more clean replacement.
- - Made the dialog mode-less.
- - Removed the un-implemented Notify page
- - Serveral other changes.
- * Updated the version reporting capabilities of aMule, so that it will report version, wxWidgets type and version and if unicode has been enabled or not.
- * Added the new MuleTextCtrl class which supports the traditional popup-menu with Cut/Copy/Past/Clear and Select All. All existing wxTextCtrls were replaced with this new class.
- * Imported the parts of Crypto++ that aMule needs into two files with permission from the Crypto++ developer. This means that aMule now compiles without the user having Crypto++ installed, though it is still possible to use external Crypto++ installations if the user wishes to do so.
- * Fixed some compilation problems with aLinkCreator and wx-2.5.2.
- * Fixed the First-Time-Message being displayed twice and rewrote it somewhat since it was becomming quite outdated.
- * Fixed the "unable to open preferences.dat" bugs.
- * Fixed the ability to add static servers.
- * Cleanup of column sorting functions.
- * Fixed a bug where CServer::HasDynIP would always return true. This would result in need-less dns lookups.
- * Removed a redundant attempt at adding servers from connected clients.
- * Fix for Packet::PackPackets function where new size of packet wouldn't be saved.
- * Fixed some access to the dialog-window ptr after it had been deleted. This was causing some odd behavior once in a while on termination.
- * Fixed the downloadqueue sorting, which was reversed. Low-priorty files having high priority and high-priority files having low priority. (Thanks to thomas001 for noticing)
- * Rewroked the systray:
- - Fixed the the problems with the rate-limiting functionality.
- - Enabled use of PublicIP requests, so that the tray will show the users actual IP rather than the interface IP.
- - Some changes of the menu-structure.
- * Complete reworking of the hashing thread:
- - More informative output
- - Much better error handling
- - Handles duplicate files gracefully
- - Reads only 128kb (instead of 9mb) at a time to avoid killing the harddisk entirely while the thread is running.
- - Made the thread terminate when no files are left, instead of timing out as before.
- * Disconnected otherfunctions.h from the rest of the aMule code, so that it should be possible to use it in external apps.
- * Added checks when using the client-pointer in the socket-code, since that suffered from the same problem as the previously fixed clients (they have a habbit of dying at random).
- * Added function for truncanating displayed filenames, which is now used in file-details dialog, to avoid it getting resized to extreme widths.
- * Some work on readying the Info tab on servers, deltaHF_ did the rest of the work.
- * Small re-fix for the "mis-matching hash"-bug fix
- * Reworked the SearchDlg once
- - Added Jugle.net websearch
- - Added results-count to the result tabs
- - Other smaller changes
- * Fixed mem-leak where certian client-objects wouldn't be deleted. Specifically those that were removed from the download queue but wern't on the upload queue and didn't have a active socket.
- * Removed debugging functionality no longer needed.
- * Removed variable-arguments logging functions, since they were only needed in a very few places and posed a potential risk everywhere else.
- * Fixed StripInvalidFilenameChars function to avoid legit letters being dropped (thanks to likesylph).
- * Changed all file-accessing to use CFile rather than a mix of CFile, wxFile and FILE.
- * Removed a number of warnings.
- * Cleanups of the following files
- - AICHSyncThread.*
- - ServerListCtrl.*
- - SearchListCtrl.*
- - MuleNotebook.*
- - MuleListCtrl.*
- - PrefsUnifiedDlg.*
- - SysTray.*
- - AddFileThread.*
- - SearchDlg.*
- - CMemFile.h and filemem.cpp
- - SafeFiles.*
- - CFile.*
Special Thanks To:
- * Lucasvr, for providing fixes for compilation with some wx versions.
- * Seagull, for providing fixes and suggestions.
- * likesylph, for providing a fix for the StripInvalidFilenameChars function.
- * All translators
- * All testers
- * BrianHV and the people at #wxwidgets for their help and support
- * EVERYONE at #amule (even codewarrior2!)
- * All the people in aMule's forum
- * All the users, for having the patience to wait the delayed rc6 release.
- * Hellimod, one_2_one, ASTIOBOY, sssnake, lami123, Ocimin, agav, PowerMike and all the mac testers and people providing Macs for ssh & vnc.
Funny stuff about this changelog:
- * You can notice that the Search dialog was rewritten 3 (THREE!) times between rc5 and rc6. You only get to see the final version (Xaignar's), but the initial one was Kry's (when the extended buttons show/hide were added) and then deltaHF changed it later.
- We just love changing that page.