Added a hierarchical structure to struct BnetConnectionData.
Added the server and port fields to struct SocketData and removed them from BnetConnectionData.
Combined all of the lookup_info flags (awaiting state, cancelled boolean, found state, and first-line boolean) into one 32-bit flags field.
Combined the status pending (sending_away_status and sending_dnd_status) and status (is_away and is_dnd) into BnetFriendStatus fields (status and status_pending) since a BnetFriendStatus already consists of the two bits we are storing.
In SID_AUTH_INFO C>S, the client now sends what the client sends for productvalue ('enUS'). Note that we still don't query the user's language (should we? then all EID_INFO regular expressions will break for non-English people).
Moved the clan info stuff into bnet.c and removed w3clan.c.
Generalized the bnet_clan_tag_to_string and bnet_clan_string_to_tag functions into bnet_tag_to_string and bnet_string_to_tag and made all Battle.net "DWORD-strings" use the new BnetDwordTag type.
Generalized the bnet_clan_packet_register and bnet_clan_packet_unregister functions into bnet_packet_cookie_register and bnet_packet_cookie_unregister. All request-response pairs using client-generated cookies should use this system.
Fixed warnings in bufferer.c compile.
Fixed the crash during logon due to key_owner being set to NULL if the field was empty.
Moved some stuff around in the bnet->d2mcp structure so that it uses the same structure that the character listing uses for the currently logged on chracter and the same structure that the realm listing uses for the currently connected realm.
Increased the time between SID_FRIENDSLIST requests to 4 minutes on StarCraft and WarCraft III, since these products get friend list updates from the server.
Increased the time between SID_CLANMEMBERLIST to 16 minutes and SID_CLANMOTD requests to 4 minutes for WarCraft III clan members, since WarCraft III always gets clan list updates from the server.
The increased updatelist times are because the list diff stuff is more stable now and I don't want users to be disconnected for flooding while idle.
Now using the libpurple keepalive functionality for sending SID_NULL (or blank lines on telnet) only after 30 seconds of server inactivity.
Fixed a possible bug where "Get User Info" lookups would always fail to complete according to the libpurple client, even when they succeeded, due to the changes in the last commit that combined the AWAIT flags with the FOUND and FIRST_SECTION flags.
Attempted to fix a bug where the "CD-Key is in use (x)" message (and other errors with extra information) would not be displayed or could crash the libpurple client because it is not UTF-8 encoded.
Fixed the bug where a "%s" would appear in logon errors with no extra information text.
Fixed the bug where profiles containing HTML-like text would lose the tags.
Renamed bnet_locale_to_utf8 to bnet_to_utf8_crlf. It now standardized newlines to "\r\n" for display in notify boxes.
If you are on a # account, "Set User Data" now shows your current profile.
Fixed a bug with "Get User Info" where it would fail to capture the /whois response, away status/response, dnd status, or dnd response if the user is on a character and you are on D2.
If "Get User Info" leads to looking up auser on a character via /whois and you are on D2, their character name and realm name are now shown.
Now telling libpurple the correct casing for username in "Get User Info" if told by the channel list, clan list, or /whois response. This may be ignored by the libpurple client.
Fixed a bug where the Do Not Disturb status was not being sent when you set it on a libpurple client.
Invalid UTF-8 should now be handled when getting your own profile to edit it.
Now using libpurple's functions for formatting time strings, timespans-in-seconds strings, try-converting to UTF-8
Various memory leaks have been fixed, including an impressive 16kb one everytime you write the news cache.
Joining via the libpurple client is now delayed by one second to allow auto-joining to only actually join the last channel. This also fixes the bug where the default channel (the one Battle.net puts you in first) is being joined, left, and rejoined very quickly if the libpurple client also wants to auto-join it.