Anet SDK - Release notes
- 1 Sept 2001
- Sanitized for public release. Added LGPL license.
- Deleted doc related to the automatic patch downloader,
as that's not really a safe thing to have on public untrusted servers.
That would need to be redone using cryptographically signed downloads to
- This package still contains a number of references to Activision
and how they built games in the past. These are probably obsolete and
should be removed eventually.
- 27 Apr 1999
- Clean up better when dpOpen() fails. This fixes a bug in Civ
where you couldn't get back into the lobby if join failed.
- 20 Apr 1999
- modcrc now included in Linux build. Output file now portable.
- 16 Apr 1999
- Made small change to anet2.dll and anetdrop.exe for
compatibility with MPlayer.
- 15 Apr 1999
- Changed how non-responding players are timed out.
Only the master does this now; this fixes the "different players have
different player lists" bug.
- 12 Apr 1999
- Fixed player latency bug harder. No longer use risky estimator.
- Fixed bug that prevented games connected to game server from being joined
directly (without use of the game server).
- 8 Apr 1999
- Fixed bug that caused player latencies to go negative above 2 seconds.
- 30 Mar 1999
- anetdrop now writes ASCII files instead of binary files, takes a
-y option to give freeze file a suffix that depends on the session type,
and takes a -l= option that lets you join by session ID.
These changes are needed to support web launching.
- 25 Mar 1999
- 24 Mar 1999
now contains a pktloss field which is set for
player deltas if dp_KEY_PLAYER_LATENCIES have been requested with
- dpGetPlayerCaps now sets the dwPktLoss field of dp_caps_t.
- When a player becomes host due to migration, we now reconnect to the
game server if the connection had been lost. This makes sure the game
stays in the server's session list.
- Fixed a bug that caused keepalives to happen too infrequently.
- Fixed a bug that kept players behind the same NAT or dual interface
players on the same LAN from connecting.
- UDP LAN driver no longer triggers autodial.
- 9 Mar 1999
- Fixed bug which caused reliable transport to fail to retransmit
maximal-sized packets sometimes.
- 4 Mar 1999
- dpSetPingIntervals now works properly for players that join after the
- Removed australia1 from hard-coded default server list.
- Added file bootserv.txt to win\dll. It should be placed in the current
directory of each product.
- 1 Mar 1999
- The crash logger dialog box in sendcrsh.exe now has a text field labeled
'CRC' that shows the crash signature.
- Analcrsh prints out the crash signature as 'Stack CRC'.
- Added setPingIntervals command to gtest.
- 26 Feb 1999
- Fixed another bug in reliable transport that could cause it to get stuck
once in a great while.
- Implemented a more correct fix for the retransmission bug introduced on
21 Feb 1999.
- Added dpSetPingIntervals() to
make it easier to measure latencies.
- 23 Feb 1999
- Fixed a bug in reliable transport introduced with last change that
caused reliable transport to get stuck.
- 21 Feb 1999
- Reliable packet retransmission now sends as many logical packets as will
fit in a physical packet, which fixes a speed problem introduced when we added
- Packet gathering code now checks whether driver can handle big packets
before trying to send them.
- 18 Feb 1999
- On the server, atvilog.bin is put directly into $ANET2_WEBHOME instead of
/var/tmp by default.
- Sendcrsh.exe has a nicer dialog box and a place for users to type in
comments. Analcrsh now handles these new comments.
- 12 Feb 1999
- Crashes are no longer written to disk in atvilog.bin; instead,
they are passed to the program sendcrsh.exe, which pops up a window
once anet2.dll is unloaded, and gives the user the option of sending
the crashlog via TCP/IP to a game server.
- Session records are now passed reliably from the host to the client
in the internet case for Battlezone's benefit.
- 8 Feb 1999
- Fixed carry bug that could cause reliable transfers to get stuck.
- Fixed assertion in Internet drivers that complained incorrectly that
packets were too big.
- 5 Feb 1999
- dpFlush() now buffers up to 520 bytes per packet on the internet
transports. This can improve network throughput.
- The linux build is now glibc.
- The linux build now includes easy to install server and crash monitoring
- 3 Feb 1999
- The server bootstrap list is now loaded from the file bootserv.txt in
the same directory as anet2.dll. If servers.dat exists, that is used instead.
If bootserv.txt does not exist, the old hard coded list is used.
- 2 Feb 1999
- Fixed bug which caused dpReceive to return EMPTY instead of AGAIN
- Added dpFlush(). If you call this after finishing your network
processing, the library will buffer up your packets until the next call to
dpFlush(). For some applications, this can greatly decrease network overhead.
- 26 Jan 1999
- Fixed bugs that happened if two players had the same local address.
For example, if two people with cable modems set up Sygate and used the same
local LAN address, and the game happened to pick the same port.
- Fixed bug that caused servers to be too sensitive to dropped ack packets
- 22 Jan 1999
- Fixed bug that caused the first few reliable packets to be delayed in some
- Server sends session updates every 4 seconds instead of every 2.
- Session records now have lowest priority.
- Removed a few bottlenecks in bench.c/bench.pr, which is good for about 256
players on a 350 MHz Pentium II with no logging.
- 7 Jan 1999
- Internally, Anet is now more efficient in how it sends player
information from the server or host, which reduces server connect time
- 4 Jan 1999
- When a player behind a NAT connects to a server and immediately
issues a dpOpen(...NULL...) to join any server lobby, it now succeeds.
(There used to be a race condition; I now delay sending the join request
until our public address is known.) This happened every time in Dark Reign 1.4,
and was likely to happen in other games, too.
- 31 Dec 1998
- Fixed a problem involving two players behind the same firewall
(forgot to open up firewall properly; this caused remote player enumeration
and sometimes session joining to fail).
- Rewrote the Wait command in the bench test program; Wait 1000 should
now always wait 1 second (with granularity influenced by the commandline
- 20 Dec 1998
- Fixed a problem which caused dpSend to get confused instead of
returning dp_RES_FULL occasionally if you tried to send too many packets.
- Fixed two minor glitches that caused some server traffic to be
sent in two packets when it could have fit in one packet.
- 13 Dec 1998
- Fixed two server bugs that caused problems with two player games
where both players are behind same NAT. The server should now correctly
forward both addresses of the joiner to the host.
- 10 Dec 1998
- 2 player games can continue only if the host left gracefully with
dpShutdown() (or with dpClose(), if the host lingers long enough for
the retransmits to go through).
If the host leaves ungracefully (e.g. by crashing, and timing out),
the session is declared lost.
This prevents a 2 player game from splitting into two 1 player games.
- 3 and 4 player games can continue only if the host leaves gracefully,
or if nobody else leaves while the host is timing out.
This prevents these games from splitting.
- 9 Dec 1998
- Added dpGetCurrentHostId().
- Host migration is now much more reliable; up to 1/3 of the players can
leave the game at about the same time without the session being lost.
- Fixed a rare bug in handling bogus ack packets.
- dpShutdown no longer accidentally kicks players out when the host leaves.
- 23 Nov 1998
- Wrote several more regression test scenarios for host migration, and fixed problems they found.
- dpGetParameterLong now properly passes requests to drivers, even if
it doesn't recognize them itself. This fixes a problem with bench that
prevented it from responding quickly to network I/O.
- Reliable transmissions now slightly less sensitive to packet loss;
the code that let multiple packets be acked with a single ack was
written in Nov 97, but was not normally compiled in until now (!).
- 19 Nov 1998
- Bench scripts now have access to number of players.
First real regression test for host migration uses this.
- Fixed host migration bug introduced on 15 Nov; players were killing
themselves even when they weren't the lone holdout in the election.
- Now ignore host migration votes from players who have left the game.
- Wrote central document describing contents
of the ANET.INF file and what uses it.
- 15 Nov 1998
- SESSIONLOST packet now sent sooner - it had been waiting up to
a second to close the session when it was lost. Also, SESSIONLOST
packet hadn't always been sent after an involuntary close; it's
sent more uniformly now.
- Fixed bug in host migration when only one player lost his
connection only to the host, but all the other N*(N-1)-1 connections
remained good. (The fellow in question didn't kill himself properly,
and was left alone in a session.)
- 12 Nov 1998
- Debug build no longer checks heap on every call to dpReceive(). This was
causing the debug version of dpReceive() to take 300ms on some games.
- 11 Nov 1998
- Added workaround in winets2.dll for bug that caused trouble with the
Surfboard 1200 one-way cable modem (used by MediaOne on east coast).
- wipx2d.dll now shows "Debug IPX" as its name.
- Fixed rare crash bug in analcrsh.exe.
- Linux debug library no longer DPRINTs when reading from socket gives
- dp_setLogFp(NULL) now properly triggers create of logfile on next
- Added LoseHost and DPRINT commands to bench to support host migration
regression test. Each process now has its own log file (bench%d.log).
- 6 Nov 1998
- Linux build now includes antpsrv, antpclient, and wmqmerge programs;
these are building blocks we plan to use for password, score, crash,
and statistics database sharing between servers.
- 5 Nov 1998
- Fixed two host migration bugs- one that caused session to disappear
from server or lan after migration, and one that caused session migration
to fail totally if just one player happened to lose connection to just the
- 29 Oct 1998
- Fixed an assertion failure that can happen if you disconnect from
a game server immediately after connecting. (It was more serious if you're
logged in with a username and password, but nobody's doing that yet.)
- 28 Oct 1998
- Fixed a host migration bug -
game no longer disappears from list on Internet after migration.
(The fix on June 11th was incomplete because sometimes the delete message
for the old session arrived after the change message for the new session.
Delete messages are now ignored if not from the current owner.)
- 27 Oct 1998
- Fixed bug introduced 13 October which caused session list to be empty
after returning from a game. Mea culpa.
- Updater DLL now has one more error message in updater.txt.
- 26 Oct 1998
- Disabled 2d display device detection during crash logging,
since the code that does the detection seems to be having trouble.
- 23 Oct 1998
- Backed out a change to the IPX driver made on 24 September
that was causing problems on one pair of machines.
- 21 Oct 1998
- dpShutdown now takes third parameter to control whether it
disconnects from the game server; this is for convenience,
so you can use the same logic for leaving sessions as for leaving
the program altogether.
(The only reason to use dpShutdown rather than dpClose etc. in this case
is that it takes care of checking for dpReadyToFreeze() etc.
This extra check shouldn't be needed, but it helps work around
a problem reconnecting to players you've just disconnected from.)
- 19 Oct 1998
- Internet driver for win32 now opens a UDP port within the range 21100-21299
by default (though game can override this; also, if that port is not
available, the driver lets the OS pick the port).
This lets users who are behind port-screening firewalls set their firewalls to
allow access. (Users behind NAT firewalls, on the other hand,
never had to do any special firewall configuration, and still don't.)
- 16 Oct 1998
- Server table now works properly if a server in the bootstrap list
changes IP address.
- Fixed another minor bug in crash logger.
- 15 Oct 1998
- Server table now updates properly when you connect to a game
server even if you don't enumerate servers or request server deltas.
- Updated bootstrap server list.
- Added section on error handling to documentation.
- Fixed two problems in crash handler that caused some crash reports to be
- 13 Oct 1998
- When you join a non-lobby session, all player and session information
from the server and from other sessions is now turned off.
This fixes a packet leak which used up a noticable amount of bandwidth.
- 9 Oct 1998
- dp_initEnumServers() now ignores old versions of the servers.dat freeze
file with the wrong record length. The servers.dat file will be overwritten
with an up to date version on freezing.
- 8 Oct 1998
- Added player latency deltas. To request them within the current session,
use dpRequestObjectDeltas() with the key key=dp_KEY_PLAYER_LATENCIES, and
turn on player deltas normally. See
dpRequestObjectDeltas() for details.
- 7 Oct 1998
- dpSetPlayerName() bug fixed.
- 6 Oct 1998
- dpOpen now sends a local dp_sessionResult_packet_t packet in addition
to a callback to indicate success or failure. This is part of a general
shift away from callbacks, which are considered unsafe.
- 5 Oct 1998
- dpOpen now always generates a callback; this fixes a bug if the host was
- The cache file (feif.dat) used by dpGetAppVersion() is written properly
even if disconnected from game server when shutting down.
- A new transport is available, UDP LAN. This is useful for customers
who don't have a usable IPX installation, but who do have a good Internet
LAN, and want to play locally without using the game servers.
- Minor fixes in server README, daily2, servfil, and runservfil.cgi.
- Session joining code cleaned up in preparation for dpOpen2().
- 25 Sep 1998
- Server now increments nextid separately for each lobby.
- dpfreeze now works properly after players leave.
- 24 Sep 1998
- Fixed bug that occasionally caused create player to fail on rejoin!
- Fixed bug that occasionally chewed up CPU time if a destination handle
- Fixed minor bug that caused debug version to run slowly.
- Changed Win32 IPX driver to get IPX address differently. Should
be slightly faster, and is definitely more kosher.
- 23 Sep 1998
- Added -m commandline parameter to game server to set max number of
connections. This should be about 2x the max number of users.
Maxium value 2000. We have verified that the server can handle 280
users with -m=600. It can take a fair bit of CPU and RAM when under heavy load;
we will continue tuning the server code after I'82 beta.
- Found but did not fix a problem with the game server restart under heavy
load. The workaround is to delete the /tmp/*dat* files before restarting.
- Updated the server's README file. Installation needs to be made easier.
- 22 Sep 1998
- Documentation now explains current approach to score reporting,
and has been brought more or less up to date.
- Game server now properly saves state to disk when stopped, and reloads
it when restarted.
- 18 Sep 1998
- Fixed two bottlenecks in the server; behaves noticably better
under heavy load, handles packet loss better. Note: dpReceive()
may take more cpu time; please profile your game
and alert email@example.com if cpu use is excessive.
- Debug dwango driver now outputs to dp.log. Dwango support still has
- 16 Sep 1998
- Added Dwango support; use anetdrop -n=wdwango.dll.
- eclock.c now in demo/utils rather than src/dp.
- Fixed several bugs in bench.
- Linux SDK now logs packets to output%d.%d in debug builds.
- Server now assigns players to lobbies better - used to screw up if too
- Host no longer gets error if deleting his own player.
- 09 Sep 1998
- Added user login; see dpAccountLogin/Activate, dpChangePassword.
- dp_playerId_t.karma now holds the lower 16 bits of the player's uid.
This will move to a new field in a future release.
- Added native score reporting; see dpReportScoreBuf.
- Added new linux build system.
- Added new multithreaded scripting language for benchmarking server
performance; see linux86/bench.
- Purged obsolete source files.
- 27 Jul 1998
- Split off simple type and constant definitions from anet.h into
aneterr.h to help tca source modules compile.
- 17 Jul 1998
- dkupddll.dll now looks for a file called
updaters.dat in the current directory, and reads from it a list of
update servers. One is chosen at random on each connect. If the file
is not found, the update server defaults to updater.activision.com.
- 26 Jun 1998
- Added a two-second wait when launching from anetdrop -x
after connecting to the game server, so dpOpen() creates the
session with the right host address.
- Added a new demo program, band.c,
which launches from anetdrop and sends packets at an even
rate; it's a tool for exploring the behavior of third-party networks like
- 25 Jun 1998
- Added new call dpGetCurrentTransportInfo() so you can tell which
tranport DLL you were loaded with, and get its path and filename.
Used by Battlezone to load different network tuning file for each transport.
- 24 Jun 1998
- Fixed an intermittant crash in anetdrop; thanks to NT for noticing
a reference to address 1...
- dpReportException tries harder to simply return if it experiences
an internal fault.
- Debugging winets2, wheat2, and wmpath2 drivers now do their own packet
logging to output.1, and rename old output.1's to output.2, etc. upon
- Heat driver now only reports scores if in a challenge.
- 18 Jun 1998
- Internet driver now complains nicely if it isn't initialized right.
- 17 Jun 1998
- Fixed bug introduced 23 May in dpReceive() that caused occasional packet loss.
- Added more safety checks in crash logger.
- 12 Jun 1998
- Fixed two bugs in host migration caused by recent changes:
game no longer disappears from list in IPX after migration,
and clients leaving no longer trigger elections (!).
- 11 Jun 1998
- Fixed bug in host migration caused by 4 Jun change in player deletion
timing- games would sometimes not show up on server after migration.
- Fixed atomic printing in DPRINT.
- AddPlayer messages now include the public address of the player
again for Dark Reign 1.3's benefit, even though it's bogus if the user
is behind a firewall.
- 9 Jun 1998
- Fixed crash bug in host migration caused by 4 Jun change in player
- Chat demo now closes session properly, even if score reporting not
- 5 Jun 1998
- When dpReceive detects a CRC error when receiving packets with
the modem and serial drivers, it now reports dp_RES_EMPTY instead of
dp_RES_BAD, because dp_RES_BAD is supposed to mean 'caller brain damage' now.
- 4 Jun 1998
- Fixed bug in dual-address support which could cause some clients with
both dialup and ethernet Internet active at same time to fail to get into
lobby on server.
- When a handle is starting to close, dpSetConnCallback() now calls back with dp_RES_PEER_CLOSED. It still also calls back with dp_RES_CLOSED when handle finishes closing.
- Likewise, players now get deleted from the session as soon as possible,
rather than when they finish closing. This fixes a problem which could
cause dpSend(...,dp_ID_BROADCAST, dp_SEND_RELIABLE...) to return dp_RES_FULL
until the player leaving times out.
Users leaving sessions should still do a dpClose(), then wait for
dpReadyToFreeze to not return dp_RES_BUSY, but it is no longer as important
to idle calling dpReceive() for an extra second afterwards, which was
a partial workaround for this and other bugs.
- Fixed bug in server which caused status page to list games even if they
didn't have any games played yet today.
- 1 Jun 1998
- Server now allows 400 connections.
- New functions dp_getLogFP() and dp_setLogFP() for use by test bench.
- dpSend() now returns dp_RES_PEER_CLOSED instead of dp_RES_BAD
if destination doesn't currently have a network address.
This happens when sending to a player who never
existed, has been deleted, or (occasionally) is very new. (This last behavior
is a bug that needs fixing.)
- 30 May 1998
- dpSetSessionDescription() now ignores changes in non-user-settable fields.
- dpSetActiveThread(NULL) now properly reports error instead of crashing.
(Thanks to the crash logger for finding this.)
- User packets received after dpClose() no longer cause crash in debug
builds (thanks to Matt's stress tester for finding this).
- Game server now outputs statistics for
pickup by the master server,
which now shows current count of players by game across all servers. Cool!
- Packet histogram in log file now disabled by default- let Dan know if you
want it back.
- 23 May 1998
- dpReceive() no longer needs to be called 'until it returns EMPTY
three times in a row'. If it returns dp_RES_EMPTY, you can be sure
you have emptied the packet queue.
- Product README's should include the following warning:
When playing IPX games, having IPX bound to more than one network adapter
will cause problems. This can accidentally happen if you
try to play on IPX while dialed up to the Internet.
To solve this problem, either play on Internet instead of IPX, or
remove the IPX binding on the Dialup Adapter
by right-clicking on Network Neighborhood, clicking on Properties,
clicking on "IPX/SPX -> Dial-Up Adapter", and clicking Remove.
- dpDownloadUpdate() now returns dp_RES_USER_CANCELLED if user
aborts the download.
- dpDownloadUpdate() now finds either dkupddll.dll or dkupddlld.dll
more robustly. If dkupddlld.dll is used, and logging is turned on,
a verbose log of the download process appears in the log file.
This should aid debugging.
- The API function reference has been
updated, and now has slightly better hyperlinking (embedded URL's
in anet.h are automatically turned into hyperlinks).
- dp_serverInfo_t now has two new fields, cur_games and cur_sessTypeGames,
so users can see how many games are on each server.
- dpEnableNewPlayers(dp, FALSE) no longer prevents sessions from being
seen. You can check the dp_SESSION_FLAGS_ENABLE_NEWPLAYERS bit
in the dp_session_t flags field to tell if the session is accepting
new players or not.
- A precision timer (ptimer.c in the sources) is available for benchmarking
how long calls like dpReceive() take. Average time on a P90 is
Max time may be five times that, but should be very uncommon.
- 15 May 1998
- Dual adapter support is now more robust. It is now okay to
run on systems with a LAN adapter connected to the Internet and
a modem dialed up to the Internet at the same time.
- Now supports some kinds of firewalls.
Firewalls that don't remap addresses or port numbers should now work.
Firewalls that do remap addresses or port numbers should also work,
but only if they create holes based on (public adr/port) rather than
(public adr/port, remote adr/port).
(Does not yet support Linux's IP Masquerading.)
- dpRequestObjectDeltas() - session messages now include a bit saying
whether the session has been joined or hosted by the local machine,
and player messages now set the LOCAL bit correctly.
- dpGetParameterLong() and dpReportScore2() now return dp_RES_UNIMPLEMENTED
rather than dp_RES_BAD if currently active transport doesn't support the
desired parameter or score.
- Any time a dp function returns dp_RES_BAD, the caller has committed
a programming error, and should abort and fix his code.
(A few places might still return dp_RES_BAD incorrectly;
please report any suspicious-looking dp_RES_BAD's to firstname.lastname@example.org.)
- Any time a dp function returns dp_RES_BUG, the library has committed
a programming error; the caller should abort and complain mightily to
- Documentation updated- new function
reference, new 3rd party network support guide.
- "0" is now accepted as a synonym for "OK" in modem responses.
- Fixed various timer wraparound bugs.
- Changes in anetdrop and anet2.dll to support Microsoft Game Zone.
- Now supports compiling on Red Hat Linux 5.0.
- Server now has more informative status pages.
- Server now easier to manage remotely.
- 20 Apr 1998
- dpRequestObjectDeltas() player change messages for the current session now
support an additional flag, ISHOST, which is set for the player who is
hosting the session. A player change message is generated whenever a
new player becomes host.
This means dp informs every player in the session of a host migration.
- 17 Apr 1998
- dpRequestObjectDeltas() now supports player change messages, too.
- 16 Apr 1998
- New function dpRequestObjectDeltas() lets you monitor
sessions and servers without periodic calls to dpEnumSessions or
- New function dpGetSessionId() lets you compare dp_session_t's
to see if they represent the same session.
- 10 Apr 1998
- New player messages no longer generated when player name or blob changes.
- wmpath2.dll now operational; we support MPlayer.
- Better sanity checking in general, e.g. no longer crash if dpClose(NULL,
0) is called.
- Crash logger now records register values, and lets you specify a context
string. dpReportAssertionFailure now generates an exception; see aeh.htm to see how to modify your exception handler to
calmly record these without aborting, if desired.
- 20 Mar 1998
- Sessions created locally show up faster in session list. (Only applies when not connected to internet game server.)
- 5 Mar 1998
- Raised player limit in anetdrop to 22.
- Added new function dpGetParameterLong to get at parameters from external
game shells. First parameter supported dp_PARAMID_SYNCJOIN, so Heat can tell
Battlezone whether to be in sync join or dynamic join mode.
- dpDestroy no longer overwrites feif.dat if it has no version records.
This fixes a bug in Battlezone that caused the version check info not to be
- Keepalives now sent more frequently. This should fix the timeout problem
observed especially on Heat.
- Added function dpSetActiveThread() for games that want to defeat my thread
check, like Dark Reign 1.2.
- Now compile the MPath foundation driver for MPlayer, too. It's called
- 1 Mar 1998
- Fixed one more host migration bug. Definitely works better now.
However, the spurious player creation/deletion messages for the old
host are still there. Further work needed.
- Changed dpSend so it uses hardware broadcast for unreliable
broadcasts if the driver has the DRIVER_PREFERS_BROADCAST bit set.
This should improve performance on Heat and similar multicast networks.
- 28 Feb 1998
- Host migration might work better now; the election finishes even if the
old host has not yet been fully purged.
- Probably fixed a bug where a machine which used to host a session crashed
when someone tried to join that stale session. I expect this will solve the
problem, but it needs to be tested.
- The log file now shows the szUserField of all session records.
- dpCreate now returns a more informative error when it has trouble
opening a session from parameters in a freeze file created by anetdrop -x.
(This is the mode used to launch under Heat.)
- 26 Feb 1998
- dpDownloadPatch now calls Win32's GetForegroundWindow instead of popping
up its own root window, at Battlezone's request.
- Enabled argument checking in release build. Bad arguments now logged as
assertion failures in atvilog.bin, and the function that was called with bad
arguments returns with value dp_RES_BAD. This should prevent a few crashes
we've seen. (The crash logger is really working!)
- 25 Feb 1998
- Fixed WinModem bug in modem driver. Now correctly detects at least one
brand of WinModem. Not sure we use exactly the right init string yet, though.
- 23 Feb 1998
- Fixed crash bug in Heat driver.
- Implemented nouploadcrash in dp.ini.
- 22 Feb 1998
- Fixed recent crash bug in dpEnumServers() - you can once again
safely call dpEnumServers() with a NULL callback pointer.
- Fixed sign extension bug which caused dwUser1 field
of dp_session_t to become corrupt if 2nd MSB was > 0x80 in Internet play.
- 20 Feb 1998
- A new function dpEnumPorts is available, and should be used
rather than hardcoding the list of available ports. For the modem
driver, it returns both comm ports and installed modems. If you choose
an installed modem, it uses the init string from the Windows registry
for that modem- a lifesaver for some users.
- A new function dpEnumServersEx is availble, and provides more information
about the servers, including packet loss and number of users.
- The Internet driver has been juggled around a bit to be more friendly
towards Dial-Up Networking's autodialer.
- Nonessential data files, like feif.dat and servers.dat, are silently
deleted by the library if corrupted.
- 16 Feb 1998
- The updater no longer uses nor requires wininet.dll. This should
fix a Win98 incompatibility and a licensing problem.
- A bug that caused unneeded patch downloads was fixed (probably still
lurking in the netshell; anet.java should use dp's updater, and lose its own).
- Modem driver now works properly on all Win95 machines (ReadFile
was blocking forever if I tried to use overlapped I/O, so I set zero
timeouts, and it seemed to work.)
- DPRINT in comm drivers can now show up in the usual dp.log (at least
after commInit returns).
- Supports new way of using dpOpen() to join a lobby at a game server:
specify NULL for the session; the server will pick a lobby for you. This
should be noticably faster.
- Supports new way of using dpOpen() to join a game using just an IP
address and no game server. To use this, the host should specify the
standard port number (21154, I think) when doing dpCreate, and the client
should zero out a dp_session_t, and call dpResolveHostname to fill in
the adrMaster field.
- Much better writeup in dp.htm about how
to call dpCreate.
- Better crash logger doc in aeh.htm.
- Minor bugfixes in crash logger.
- The server now deletes freeze.dat etc. if they are corrupted. This
should reduce server downtime. Still don't know why/when those become
- The server's name.txt file now supports a -v option after the
session type to indicate that player variables are allowed in that session.
- The server's script files now kill the server hard if it doesn't go
gently. This should reduce server downtime. Still don't know why server
doesn't die nicely sometimes.
- dpReadyToFreeze no longer has verbose DPRINT's.
- 5 Feb 1998
- No longer requires imagehlp.dll on user machines.
- Anetdrop now supports serial and modem.
- Max size of player variables is now 256K.
- All exported functions are now declared explictly cdecl.
- 4 Feb 1998
- Updated dp.htm to match anet.h.
- Fixed dpReportCrash; added dpReportAssertionFailure.
- 2 Feb 1998
- Serial and modem drivers for win32 now use overlapped I/O.
- Server problems with host migration have been fixed.
- A new parameter in dp.ini, TIMEOUT=timeoutsecs, lets you disable
or tweak player timeout detection. This is useful when stepping through
code in a debugger, or as a workaround for users with incredibly slow
machines that timeout during game launch.
- Now handles large numbers of player variables properly.
- Added new function dpReportCrash(), updated server, and added
new executable analcrsh.exe (see aeh.htm)
to let programs report exceptions to the programmer automatically.
This will be very helpful during beta test and QA, because it will
provide symbolic crash dumps without requiring the testers to install
- Updated Heat driver to have proper capability flags.
- dpCreate now gets player names from driver during dpCommThaw if it has
that capability bit set. Used for Heat.
- 8 Jan 1998
- Created anetdrop.exe, a command line launcher for activenet games.
Added example batch files join2.bat and host2.bat in demo/chat showing how
to use anetdrop.
- Created wheat.dll, a first cut at support for the heat online service.
- Fixed problem with server which limited it to 35 connection.
- 24 Dec 1997
- dpSetGameServer no longer closes open session.
This fixes bug where the current game was lost if the connection to the
game server went down.
- Server lobbies no longer get corrupted by phony elections
- Fixed bug introduced in last rev in dpSetGameServer when changing servers.
- dpGetSessionDescription now uses cached copy of session description
if it's disappeared because of packet loss (e.g. in IPX).
- dpEnumPlayers now behaves same for local session whether you specify
it implicitly with NULL or explicitly with a valid session record pointer.
- 12 Dec 1997
- Session packets are now compressed about 3:1 when using the new login
packet. This increases the maximum number of sessions that can be listed
while still letting clients connect to the server in finite time.
- Ack packets now have an extra byte suffix which helps compensate
for any earlier ack packets that were lost.
At 25% round trip packet loss (split between clients and server),
28.8 bandwidth at client, and 100 rooms in session table, this
increases performance on the load test by 20%.
- Fixed host migration and freeze/thaw bugs introduced by new login packet
- Fixed two bugs in server
(uudps.c used to crash when sending to unknown destination;
dropped packet simulation was broken).
- dpCreatePlayer no longer fails if session record missing (as often
happens with IPX and packet loss); it blindly tries to join, and relies
on the host sending back an active rejection if the session was closed
- 8 Dec 1997
- Game server now accepts new kind of login packet which specifies
what session type the client wants to look at.
dpSetGameServer now looks at anet.inf to figure out what session type to send
the server. A new function call dpSetGameServerEx should be used instead of
dpSetGameServer for new programs, because it's kludgy for the library to
assume anet.inf has the right session type...
This improves server performance noticably. In particular, running the
load app with n=1, pktloss=30, and bandwidth=28800 connects under 10 seconds
instead of 9-40 seconds. Should make performance less sensitive to how many
different kinds of games are using the server, too.
- 4 Dec 1997
- If modem connection is lost during a session, dpReceive will return
- 16 Nov 1997
- Only send new session packets at most once a second. This significantly
reduces server traffic.
- Added new way to send delete records- they can now be combined in same
packet as small set records. This significantly reduces server traffic. A
new byte was added to the handshake sequence to allow us to use the old method
with old hosts. This will let us mix new and old servers and clients.
- Fixed a bug in dpSetPlayerName and dpSetPlayerBlob.
- Fixed a bug in host migration with four or more players.
- 13 Nov 1997
- Added error code dp_RES_MODEM_BAD_INITSTRING for using a bad
initialization string with a modem (also returned if a modem is not connected
to the machine).
- 7 Nov 1997
- Fixed bug in serial and modem drivers that caused packets with CRC
errors to be accepted, and packets with zero CRC's to be dropped. Ouch!
- Fixed bug in DownloadPatch; it now set the focus and shows the cursor.
- dpEnumServers() now lists just four Activision game servers,
all with geographical names; one in Southern California, one in
Northern California, one in New Jersey, and one in Australia.
- Added dpSetPlayerName, dpSetPlayerBlob, and dpGetPlayerBlob. To
create a player and set his blob at the same time, call dpCreatePlayer,
then immediately call dpSetPlayerBlob().
- Added dpEnumPlayersEx() to give access to player blobs.
- 28 Oct 1997
- Integrated DownloadPatch into dpDownloadUpdate(). This will eventually
grab the patch from the currently connected server; right now, it just
always goes to the default server. The Java wrapper for the patch
is not yet updated to use dpDownloadUpdate, but should be.
- dkupddll.dll now built here; get it from win\dll and put it in
app's current directory next to anet2.dll. Uses static binding,
which probably wastes a lot of memory.
- Fixed big oops introduced in the last version that caused internet to
- Fixed crash bug in server that seems to have been there since remote
player enumeration was added.
- 24 Oct 1997
- Host migration works now.
- Added support for people who have a TCP/IP LAN not connected
to the Internet and dialup TCP/IP just for Internet.
- Added version info in dpEnumApp.
- Added dpGetAppVersion() to tell you about the current app; meant
to integrate well with Erik's DownloadPatch function.
- 4 Sept 1997
- Server now supports over a hundred players.
- Load application (see src/test/load) lets us load down servers with
arbitrary numbers of players.
- dpOpen and dpCreatePlayer now obey the session's maxPlayer limit.
- Server now uses uudps, so client better use winets. (Needed for load
- dpEnumServers now transfers table of game servers down from
server you're connected to, if any.
- dpEnumServers now closes handles after sending pings; winets
now obeys the commSayBye that closes the handle; dpReceive now
handles ping packets correctly even if the handle has been closed.
- internet drivers winets and uudps now handle pings themselves.
- 1 Sept 1997
- Fixed numerous bugs, including several having to do with detecting
deleted or timed out players or sessions.
- Compress player and host records; seems to use half the modem bandwidth.
(Session records are still wastefully uncompressed.)
- 25 Aug 1997 -
Alongside the original libraries, this release now includes
the first release of version 2 of the libraries ("big lobbies").
(The new ones have '2' in their names to distinguish them from the
originals.) Here's how to use the version 2 code:
Here are the changes in the version 2 libraries:
- link to anet2.lib instead of anetdll.lib in release builds,
and to anet2d.lib instead of anetdlld.lib in debug builds.
- Copy anet2.dll into the product directory instead of anetdll.dll.
(Note: if you can't tolerate this name change, link with anetdll.lib,
and copy anet2.dll into the product directory as anetdll.dll.)
- Copy the '2' versions of the transport DLL's (winet2.dll, etc.)
into the product's DLL directory instead of the originals (winet.dll, etc).
(Note: if you can't tolerate this name change,
copy winet2.dll into the product directory as winet.dll, etc.)
- Should be better at detecting when gameserver connection is lost;
dpReceive will return dp_RES_HOST_NOT_RESPONDING once if this happens.
- Should be better at detecting when sessions are closed and can't be
migrated; dpReceive will get a dp_SESSIONLOST_PACKET_ID packet in this case.
- Should be easier to maintain; the new source code is much simpler and
better documented than the old source code.
- Host migration not supported in this version - if the master leaves
a session, the session is lost (and the caller is notified). We'll support
- Bandwidth consumption is still unreasonable because two separate packets
are sent for each old player when each new player joins.
This will be fixed soon.
- Player groups and player variables are not implemented. This will be
- Uses a different port number, so version 2 servers can coexist on
the same machine as version 1 servers.
- Log files don't have player names in them at the moment, which
makes them a little harder to read; this will be fixed in a future release.
- Multiple lobbies per server are almost ready.
- The game server communication API is not yet available, but will be
exposed in a future release.
- 13 Aug 1997
- Added list of available documentation to make it easier to
- Listing applications before creating dp used to cause .ini file
to not be read properly. This is now fixed.
- Made a change that should list players more reliably in
lobbies with 12 or more players.
- Install programs for netshell and demos should work on NT now.
- Program to launch netshell is now called netshell.exe.
- Several minor new API calls (dp_setLogFname(), dp_flushLog(),
- 11 Aug 1997
- dpGetPlayerCaps() now returns true ping time much quicker at startup.
- Added two new session flags (dp_SESSION_FLAGS_ISSERVER and
dp_SESSION_FLAGS_MIGRATE_FORBIDDEN). The first one lets you detect
when a lobby is hosted directly on a game server, and the second
one is used to prevent such lobbies from migrating; this should prevent
server lobbies from being grabbed by clients with flaky connections.
Losing connection to a session with migrate forbidden now generates a
- Added regression test to build process.
- 27 July 1997
- Fixed problem loading drivers on Mac. All places in API that
refer to driver filenames now use dp_transport_t, which has a few
extra fields on the Mac.
- Netshell now working on Win95 well enough
to let developers try integrating their games.
You should be able to download anetdemo.zip; try it out on your machine,
let us know what problems you run in to.
- Added dpLaunchApp() call; mostly for internal use by netshell.
- Fixed bug that caused trouble when user connects, disconnects,
then connects again. (Note: this turns out to be a common condition!)
- .ini files no longer clip the last char of the last line if it lacked a
- 16 July 1997
- Added i76.polar.net to list of servers.
- Anetj.dll may now be in dll subdirectory.
- Includes demo.zip, with first version of netshell and two demo 'games'
plus installers; the demo games are launched by the netshell.
- Added shellOpts field to dp_appParam_t so netshell can tell how it
needs to be launched.
- 11 July 1997
- Added extraserver= setting in [DEBUG] section of .ini file
- Compile with Visual C 4.2 rather than 5.0.
- Compile anetj.dll with non-debugging version of Anet
so it doesn't require msvcrtd.dll, which might not be on users' machines.
I'll add a way to specify debugging libraries from java later.
- 10 July 1997
- dpd.lib now uses Zi format for debugging info
- Even better doc for the Turn demo.
Uses anetdlld.lib now instead of dpd.lib.
- dp_appParam_t.sessionType now read correctly from registry.
- User programs no longer need to do /D WIN32 when compiling. This fixes
bug causing crash after callbacks in Java.
- Java: Creating sessions now supported
- Java: Added ANet.InstalledApp.execWithConsole() method.
- 9 July 1997
- Switched remaining libraries over to use Multithreaded DLL version
of Visual C's standard C library. This means all games that use our libraries
should be compiled for the Multithreaded DLL C library (use the /MD flag
on the cl commandline, or pick "Multithreaded DLL" under Build / Project
Settings / C/C++ / Category: Code Generation.
- Fixed loopback drivers to work properly with freeze and thaw.
- Fixed bug that caused client to time out after thawing.
- Improved demo/turn's batch files and doc.
- 25 June 1997
- ANETDLL.DLL (Release) and ANETDLLD.DLL (Debugging) are now compiled
with the Multithreaded DLL version of the Visual C++ standard library,
so games using them should also be compiled that way, and
users will need msvcrt4.dll in their system directory to run.
This means installer changes in some cases!
(This is at the request of Zork Grand Inquisitor, but it's a good idea;
it slims down the memory requirements, I think.)
- When you change game servers, the list of sessions is now cleared.
- A bug introduced last week which caused occasional crashes in dpOpen is fixed.
- dpReceive now returns dp_RES_FULL if your receive buffer is too small.
- The Java port can now join sessions and list players.
- A new demo, demo\chat, has been added as a prototype of
a game that lacks its own netshell, and is launched from an external generic
shell. This is still being refined.
- 20 June 1997
- Active close is now implemented on handles. This means that
disconnecting from game servers and games is handled somewhat more
gracefully (but both sides have to support it for it to work).
- Functions to enumerate installed applications on the user's system
and to enumerate game servers have been added. These are still being
- The bare bones beginning of a Java port (really, a wrapper around the
native code) is now included.
- 1 June 1997
- The initial Solaris/Sparc support is now included (UDP only).
- The initial Mac support is now included (MacIPX only).
- 1 Mar 97
- User code now only needs to include anet.h
to compile, and no longer has to be recompiled if internal Anet
structures change size.
- Can now send packets to player groups.
- Player variables now should be much more robust.
- Game server code in better shape, and uses less bandwidth.
- gtest has been beefed up to be a useful
test/learning program, and is included in the SDK in both source and
- Both debugging and non-debugging versions of the Windows library
and DLL's are included (the DOS library and DLL's are still provided as
debuggging only for now).
- Finished ironing out most of the issues caused by the switchover
- 11 Feb 97
- Implemented player variables and player groups more fully.
You still can't send packets to a player group, though.
Moved reliable packet delivery to its own layer inbetween the
high-level dp package and the low-level comm dll package.
Now when the library opens a connection to another node, it always
opens both an unreliable and a reliable data stream.
All programs need to be recompiled, including game servers, to work with this.
- Moved to a different port number for both UDP/IP and IPX; see
- 1 Feb 97 - Added dpcompat.h to make compiling for either our
library or Microsoft's library easier. Added dxview, an example
program that can be compiled for either library.
The Anet SDK currently uses several third-party libraries
Note regarding DOS IPX and DOS Extenders
You should bind your shipping executables to
the Causeway DOS extender
because it has better DPMI support than the DOS extender that comes
with Watcom. (It also writes out a nifty CW.ERR file if your program
crashes, which allows you or a Perl script to figure out the name of
the function that crashed.)
If you compile your programs with a stock version of Watcom,
you will be able to access the IPX network when running under Windows 95
but not DOS, because the DOS extender that comes with Watcom, DOS4GW,
doesn't support far calls.
Note regarding DOS PPP (internet dialer)
A copy of the ppp driver and example usage in a product are included in
demo/mercppp for your convenience.
See below for licensing info.
For general instructions on setting up internet drivers
for use with this SDK, consult the Mercnet FAQ in demo/mercppp.
Back to top