Hello folks, I had the chance to be able to get to work on GTKG full time this whole week. This won't happen before next year (calendar-wise)!
I implemented high-outdegree, inter-ultranode QRP routing for TTL=1 queries, dynamic querying (for leaf nodes only), and leaf-guided dynamic querying (both client and server side). You'll find the specs for those items in the doc/gnutella/ directory in CVS, as usual. I also implemented a query hit monitorer to avoid flooding due to popular queries. This monitorer limits results that are sent back, looks at what we physically sent (as opposed to what is queued) and makes smarter decisions because it will let rare hits flow whilst blocking popular hits. In short, it takes better decisions than the flow-control, which is totally blind and will drop random packets to make room... You can view the query hits blocked by this new algorithm by looking at the dropped stats for Query Hits, in the "Flow control" and "Message throttle" sections. The first indicates hits we dropped because we were in flow control and already sent some hits back for the query. The second indicates that we dropped messages for popular queries after sending more than enough hits. Finally, I also added core features that are not really useful yet but can serve as foundations for other GUI features: the ability to request the saving of the full HTTP/Gnutella transaction (the headers, via the IO_SAVE_HEADER flag for the I/O layer), the creation and time of last source seen for fileinfo (CTIM and NTIM), the saving of whether the filesize is known within the fileinfo itself (FSKN). I won't have time to work seriously on GTKG before next summer, but the core side of GTKG is now at the level of the other popular Gnutella clients, protocol-wise, so this should not be a big problem. Have fun using GTKG. Raphael - (2004-08-08 - RAM) * To allow safe data access to the free routine invoked for extended messages, we must not unref the data before calling the free routine in case we were holding the last reference to those data. * Refactored the single monolithic message_array[] routing table into a dynamic set of smaller chunks, to ensure we will keep routes at least 20 minutes. * Fixed unfortunate bug in token.c that prevents an older version from validating the token from a more recent version if the recent version has more keys to compute the level with than the older can check for. * Fixed assert failure on reception of query hits that is handled locally but not routed. * Added support for leaf-guided dynamic queries (client and server sides). - (2004-08-07 - RAM) * Forgot to call node_inc_sent() when sending a queued message, as opposed to one immediately written at mq_putq() time. * Added "n->last_tx" and use that when detecting activity timeouts, making sure that there is something in the queue (or it would not be updated). * Reverted changes made to node_reserve_slot() and node_avoid_monopoly() which tried to make a distinction for UPs between incoming and outgoing. - (2004-08-06 - RAM) * Fixed some of the "file_size_known" madness. * Whether the file size is known or not is now persisted in the fileinfo, as the "FSKN" attribute in the ASCII file, and as part of the version 5 binary format in the file. * Show "no size" when the size is unknown, shorter than "unknown size". * Fixed qrp_route_query() to send query to all non-QRP aware UPs if TTL=1. * Fixed improper routing of TTL=1 queries, which could be sent twice to QRP-capable nodes: once if the QRP matched, and once via regular broadcast! * Make dynamic queries that stopped linger for a while to see how many extra results we get due to node latencies. New statistics track the amount of extra results we get that way. * Don't send a TTL=1 dynamic query to a host whose QRP says it won't be able to match. * If a QRP-capable UP did not send its table yet, forward it everything. * Introduced the "dynamic query hit" algorithm: this actively monitors hits we relay, keeps track of how many hits we sent and can decide to drop hits if we're in flow control or relayed too many hits already. * New "dh_debug" property. * Drop query hits with 0 results. * Have search_results() indicate to caller the amount of hits held in the query hit it parsed. * The flow-control flag can now show 'D' if we're not in flow-control yet but the queue is more full and bears a greater delay for sent messages (queue size above the low watermark). - (2004-08-05 - RAM) * Implemented dynamic querying. For now, it's only plugged for leaf queries. * Fixed re-entrance problem when an event was rescheduled before the current trigger time by another event that fired. * Added 5 general statistics about dynamic queries and their status. * Added new "dq_debug" property for debugging dynamic querying. * Emit and parse headers for dynamic querying. * Added hack for LimeWire, emitting the garbage it wants from leaves to consider them good. It is a bug from LW to require those meaningless headers from leaves. * Enhanced pmsg to have support for free routine callbacks. * It is now possible to mark messages as being sent, for checking in the free routine afterwards. - (2004-08-03 - RAM) * Updated hostiles.txt from BearShare's list. * Removed spurious and wrongly placed call to header_features_generate() from http_async_build_request(). * The "up_req_*" properties were wrongly saved in the config file. Since they're transient and dynamic, it's useless to persist them. * New "up_req_enough_conn" property to track whether they configured enough peer connections to maintain to become an ultra node. * Show whether they configured "Enough min # of connections" to be auto-promoted an ultra node. * New flag "Z" for connections that compress both TX and RX. "T" is shown when only TX is compressed, "R" is shown when only RX is compressed. * New flag "X" indicating whether we sent our last-hop QRP table to the remote ultra node. The "Q" flag in that case indicates whether we received the last-hop QRP from the remote node. * Added support for high outdegree and last-hop QRP between ultra nodes. - (2004-08-02 - RAM) * Converted getline.c and http.c to doxygen-style comments. * New IO_SAVE_HEADER flag to instruct the ioheader parsing layer to save a copy of the header text, as it was received. * Forward queries with TTL=0 to leaves, as QRP tables permit. * Added specifications for inter-UP QRP, dynamic queries and leaf-guided queries. - (2004-08-02 - Hans) * Show gray progress bar when the file size of a downloadable file is not known. - (2004-08-01 - RAM) * Made gchar_to_ip_strict() return host byteorder IP addresses, to be consistent with gchar_to_ip(). * Updated styleguide: in files using doxygen comments, the function name must now be put at the very beginning of the line to have it stand out. * Added new fields in fileinfo trailer: CTIM the creation time and NTIM the last time when we got a new source. ------------------------------------------------------- This SF.Net email is sponsored by OSTG. Have you noticed the changes on Linux.com, ITManagersJournal and NewsForge in the past few weeks? Now, one more big change to announce. We are now OSTG- Open Source Technology Group. Come see the changes on the new OSTG site. www.ostg.com _______________________________________________ Gtk-gnutella-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/gtk-gnutella-devel
