Commit graph

138 commits

Author SHA1 Message Date
Eric House
90b8f966f6 comment out unnecessary assert 2013-01-21 19:40:56 -08:00
Eric House
991cc8f04c fail in main mode if udp socket not set 2013-01-20 21:03:43 -08:00
Eric House
016b16a8b2 change relay alert message format to length-plus-string rather than
null-terminated for easier handling on the java end.
2013-01-20 13:06:34 -08:00
Eric House
9023440a88 reply with alert to any connection attempt when in maint mode 2013-01-20 10:03:20 -08:00
Eric House
b768d8fccc fall through to using hard-coded maxsocks value 2013-01-20 09:22:35 -08:00
Eric House
65e9789c3f add mainentance mode, triggered by a commandline flag, that does
nothing but loop waiting for connections on the UDP socket and sending
them back the error message provided on the commandline.
2013-01-19 15:17:51 -08:00
Eric House
63d3f70cdf more changes to storage and fetching of messages and to protocol so
presence of messages is reported on connect (as are bad relayIDs).
Now a game with a robot player in a "closed" game can continue.  Once
the next set of linux-side chances is committed.
2013-01-19 14:34:04 -08:00
Eric House
3984d85795 oops -- prev checkin didn't compile 2013-01-18 07:12:26 -08:00
Eric House
1c5fef6a38 relay improvements for UDP connection: record addresses, prepare to
run in separate thread, etc.
2013-01-18 07:10:47 -08:00
Eric House
7fec736947 add udp socket and protocol for use over it so that a device can
manage a single connection to the relay for all of its games.  Works
so far to the extent that the game's playable with all boards on the
same device (with checkins about to come) as long as all boards are
open.  (Client doesn't handle opening closed games yet.)
2013-01-15 18:41:17 -08:00
Eric House
98679c8363 cleanup: better encapsulation for AddrInfo 2013-01-13 10:14:06 -08:00
Eric House
c567647a8d get rid of mapping of socket->game_connection, which will not work
once UDP sockets and/or per-device (not per-game) connections come
along.  Lots of changes, most not involving code flow but a couple
that did.  So far two gtk games can connect and exchange moves.
Haven't tested reconnection or store-and-forward.
2013-01-12 16:09:24 -08:00
Eric House
2ccc297463 make number of sockets at which we assert/reboot configurable so tests
can be done with large numbers of clients.
2013-01-10 21:10:18 -08:00
Eric House
ad78129e74 changes made over the past couple of months toward tracking an
apparent thread leak.
2013-01-02 21:12:42 -08:00
Eric House
f1ee77882b Send devid with RECONN as well as CONN so games present when device
upgrades can also use GCM.  Tested on relay but not device.
2012-11-09 06:54:12 -08:00
Eric House
af89047969 treat an empty devID string as TYPE_NONE regardless of what the client claims. 2012-11-07 22:03:58 -08:00
Eric House
59937b8514 modify how devids are handled on the relay and the protocol through
which they're communicated to the device.  Device is expected to have
a platform-specific notion of ID which the relay stores in a new
devices table and indexes with a 32-bit number which is returned to
the device -- which is encouraged but not required to use it in lieu
of the longer ID in future communications.  Modify linux client and
test script to use the relay-supplied id.  Some of this is commented
out for now.
2012-11-03 10:58:01 -07:00
Eric House
3469975d2a add, still disabled by compile-time flags, code to transmit device ID
(e.g. ID Android devices get via GCM) to relay and to associate it
there with messages that need to be delivered.
2012-10-30 07:01:47 -07:00
Eric House
0f9500cea3 comment out unused param/variable 2012-10-19 17:53:15 -07:00
Eric House
866aeb2387 change relay connect message format to include client version (meaning
of which is TBD).  When a new-version client connects, store the value
it's passed. At first this will let me track how quickly people
upgrade.  Later I can use it to let different clients have different
formats to their messages e.g. to proxy.
2012-01-26 05:43:54 -08:00
Eric House
caa40fa023 store most recent IP address each device has come in on. Requires new
column in db.  Not really used yet but interesting to watch....
2012-01-04 18:14:12 -08:00
Eric House
cb04eb8840 finally got the socket leak: use keepalive ioctl to detect sockets
whose other ends have gone down without closing properly.
2011-12-21 18:18:30 -08:00
Eric House
dc42e63974 fix read_packet() logging 2011-12-02 18:55:47 -08:00
Eric House
3f5e62c9b7 remove logging 2011-12-02 18:31:05 -08:00
Andy2
d9e97d2f32 reduce logging 2011-09-30 18:10:22 -07:00
Andy2
6553546642 cleanup; add logging for debugging background packets stuff. 2011-09-30 06:36:56 -07:00
Andy2
58be931558 remove messages after sending them if they appear to have been sent
successfully.
2011-08-17 19:52:55 -07:00
Andy2
2c26fc03e3 Track messages sent via proxy and credit nsent (accumulator) if
successful.  Previously messages sent via proxy were not counted.
2011-08-17 18:09:10 -07:00
Andy2
30145deba7 add new proxy message handler for no-conn message, and feed into
existing store-and-forward system.  With this checkin a robot-vs-robot
game plays for quite a few moves without either game every loaded into
the foreground (via a BoardActivity instance on Android), with all
moves transmitted as a result of relay checks.  One of the games
refuses to open later, however, and there are certainly other bugs.
And I'm not sure what happens when a message sent no-conn (without a
cookie ID) is received in the foreground.  But this is progress.
2011-08-16 19:41:33 -07:00
Andy2
dc273c7162 fix proxy msg handling to process more than one relayID per message.
Formerly all but the first were dropped.
2011-08-15 18:27:00 -07:00
Andy2
86e3cc7286 When device reconnects to a dead game, just deny the connection with a
new error message rather than allow it as if it were a normal game
only to send a game-dead message after.  This solves the problem of
how device knows not to put up welcoming message or suggestion to
invite to a game that's suddenly missing players.  BUT: this change is
incompatible with existing versions and so needs to get pushed out
before the in-use relay can be upgraded to include this code.
2011-07-06 06:47:25 -07:00
Eric House
b4a513ce87 reduce logging; log errno on syscall failure 2011-06-29 21:38:31 -07:00
Andy2
fffcbb677e under testing I'm running up against the 1024-files-open limit and
dying with an assert.  Log something -- but still die as there's
nothing to be done in code except hope some connections don't
reconnect right away.  Fixes: 'ulimit -n' or edit 'nofile' param in
/etc/security/limits.conf on the relay host.
2011-06-27 06:20:51 -07:00
Andy2
df60ec648b Don't return new error XWRELAY_ERROR_NORECONN as devices don't have it
yet.
2011-06-24 18:32:53 -07:00
Andy2
e886a1aefe lots more changes -- another snapshot, this, rather than stuff
carefully polished and reviewed.  Shows progress, though, in getting
through tests.
2011-06-23 07:12:50 -07:00
Eric House
85d484a881 major mod to deal with devices that fail to receive ACK and then
reconnect.  I was putting both (i.e. the same device twice) in the
same game.  Now I detect this based on the seed being duplicated and
treat the device as having failed to ACK then proceed with the CONNECT
as if it were new.  Tested pretty heavily but only with two-device
games.
2011-06-20 18:13:15 -07:00
Eric House
7aeb0a4df0 make default socket timeout 5 seconds, not 20. 2011-03-31 18:13:16 -07:00
Andy2
8bb2857e63 The relay is hanging inside recv(). Use setsockopt to set a 20-second
receive (and send) timeout on all sockets accept() returns.  Sockets
that timeout should then get closed and dropped.
2011-03-12 05:13:54 -08:00
Andy2
57ec020330 change format of reply to MSG_GET: include number of messages per
device to support fetching for more than one at once.  This is
meaningless for rq as written now but a device will want to do this.
2011-01-27 06:37:36 -08:00
Eric House
63d16a99a2 turn off http view 2011-01-24 22:20:01 -08:00
Andy2
f96f4a040b add new proxy command that fetches actual messages stored for a device. 2011-01-22 12:52:26 -08:00
Eric House
725888cb6c run proxy sockets through same thread pool as game sockets. This
prevents race conditions that are turning up when I'm running multiple
threads -- by allowing me to really not be running multiple threads.
Tested with the usual script.
2011-01-20 18:14:56 -08:00
Andy2
1720fbbd50 fix parsing of relay ids by replacing separating \n with \0. 2010-11-23 17:46:16 -08:00
Eric House
b91187d6a5 test result when parsing; drop if didn't parse 2010-11-16 20:30:43 -08:00
Andy2
c6bd2125a4 java uses '/' to delimit device id, so we'll make that standard. 2010-11-15 18:27:36 -08:00
Andy2
d4e810c9cb delimiter changed 2010-11-15 06:51:05 -08:00
Eric House
528ae0c986 allow more than one device death per message 2010-11-14 15:19:38 -08:00
Andy2
0787a06eb5 accept new message from device announcing the death of a game
(including seed so it's harder to spoof); respond to that by setting a
DEAD column in the db and flagging the device as gone.  Notify any
connected device of the fact.  Refuse to accept new connections to
that game.  As already-connected devices reconnect, allow them to do
so but send a new status message that their game is dead.  Not heavily
tested yet.
2010-11-11 06:40:50 -08:00
Andy2
2bfb26cded sleep (in thread) before closing proxy socket. This works around
problem where, on PRX_HAS_MSGS path only, device reading socket gets
EOF early though logging here confirms additional bytes have been
written.  Gross but effective.
2010-10-17 06:38:28 -07:00
Eric House
0d1542ca9d tweaks to logging 2010-10-12 05:18:44 -07:00