1 2005-12-13 Bryan Worth <bryan@theworths.org>
2 * src/ttt-curses-client: Cleaned up text-entry code. Added support
3 for HOME, END, DELETE, and ARROW keys
6 2005-12-13 Carl Worth <cworth@cworth.org>
8 * TODO: Note that ttt-server should retry a couple times if its
11 * src/test-board.c: (main): Remove debug print messages.
13 * src/ttt-board.c: (ttt_board_make_move): Tighten up the code just
16 2005-12-10 Richard D. Worth <richard@theworths.org>
18 * TODO: check off INVITE, RETRACT, DECLINE, Game Invitation
19 notices, Connection setup errors, NO_INVITE, User information
22 * src/ttt-client.c: (_ttt_client_execute_helo),
23 (_ttt_client_execute_statistics), (_ttt_client_execute_message),
24 (_ttt_client_execute_help), (_ttt_client_execute_version),
25 (_ttt_client_execute_quit), (_ttt_client_execute_invite),
26 (_ttt_client_execute_accept), (_ttt_client_execute_retract),
27 (_ttt_client_execute_decline), (_read_request),
29 (_handle_requests_thread): Whitespace changes. Use exported get
30 methods (get_username, get_num_wins). Use strcasecmp in place of
31 toupper. Finish RETRACT, DECLINE.
35 * src/ttt-server.c: (ttt_server_init),
36 (ttt_server_register_client), (ttt_server_unregister_client),
37 (ttt_server_verify_username),
38 (ttt_server_get_client_from_username), (ttt_server_add_invite),
39 (ttt_server_remove_invite): Add invite struct. Make username case
40 insensitive (missed in register_client). Implement add_invite,
41 remove_invite. Moved statistics to ttt-client.c
43 2005-12-09 Carl Worth <cworth@cworth.org>
45 * src/ttt-server.c (ttt_server_unregister_client): Move client has
46 left message to stderr so it makes it to the log file too.
48 2005-12-09 Carl Worth <cworth@cworth.org>
50 * src/ttt-server.c (main): Put the initial server started message
51 in the log file as well.
53 2005-12-09 Carl Worth <cworth@cworth.org>
56 * src/ttt-args.c: (ttt_args_help), (ttt_args_parse): Add a -u,
57 --user option for controlling the uid under which the server
61 * src/ttt-server.c: (ttt_server_register_client), (main): Recert
62 the dup of stdout which wasn't working. Instead just print client
63 join information on stderr so that it goes into the log. Implement
64 support for the user option by calling setuid to drop root
65 privileges the process might start out with.
67 2005-12-09 Bryan Worth <bryan@theworths.org>
68 * src/ttt-curses-client.c: added error checking to ttt_create_client
69 call. Added ability to escape server commands by prepending with "/".
70 Added ability so override port number with port=xxxx entry in
73 2005-12-08 Carl Worth <cworth@cworth.org>
75 * src/ttt-server.c (main): When detached dup stdout to stderr so
76 that everything appears in the log file.
78 2005-12-08 Carl Worth <cworth@cworth.org>
81 * src/ttt-args.c: (ttt_args_help), (ttt_args_parse): Add
82 -d,--detach and --pid-file=FILE options for running the server as
85 * src/ttt-server.c: (ttt_server_statistics),
86 (ttt_server_verify_username), (_detach_and_write_child_pid_to),
87 (main): Add support for detaching and writing out the child PID to
91 * src/x.c: (xfopen), (xdup2): Two new x-functions.
93 2005-12-08 Carl Worth <cworth@cworth.org>
95 * src/ttt-args.c: (ttt_args_help), (ttt_args_parse):
97 * src/ttt-server.c: (ttt_server_statistics),
98 (ttt_server_verify_username), (_detach_and_write_child_pid_to),
100 * src/x.c: (xfopen), (xdup2):
103 2005-12-08 Bryan Worth <bryan@theworths.org>
104 * src/ttt-curses-client.c: Multiple improvements!
105 Username taken from USER environment variable and stored as
106 preference in ~/.ttt/client.conf (username=xxxxxx). Backspace
107 should now work correctly with all term types. Status messages
108 display in seperate area. "MESSAGE" reply from server is
109 suppressed. Eliminated most global variables.
112 2005-12-08 Carl Worth <cworth@cworth.org>
114 * src/Makefile.am: Fix rule to auto-generate ttt-lex.h.
116 * src/ttt-lex.h: Remove generated file from revision control.
118 * src/ttt-lex.l: Add copyright/license blurb.
121 * src/ttt-client.c: (yy_init_globals), (use_yy_init_globals):
122 Shut off some annoying compiler warnings due to flex bugs (only
125 2005-12-07 Richard D. Worth <richard@theworths.org>
127 * PROTOCOL: Remove unused error NOT_IN_GAME. Add error
130 * TODO: Add error NOT_VALID_MOVE.
133 * src/ttt-error.c: (ttt_error_string): Add section comments. Add
134 error NOT_VALID_MOVE.
136 2005-12-06 Bryan Worth <bryan@theworths.org>
137 * src/ttt-error.c: fixed missing errors (NO_INVITE, NO_GAME)
139 2005-12-06 Richard D. Worth <richard@theworths.org>
141 * PROTOCOL: Add error NO_INVITE
143 * TODO: Uncheck INVITE, ACCEPT
145 * src/ttt-error.c: (ttt_error_string): Add errors NO_INVITE,
148 * src/ttt-client.c: (_ttt_client_execute_message),
149 (_ttt_client_execute_help), (_ttt_client_execute_version),
150 (_ttt_client_execute_invite), (_ttt_client_execute_accept),
151 (_ttt_client_execute_retract), (_ttt_client_execute_decline):
152 Whitespace changes. Partially implement RETRACT, DECLINE.
154 2005-12-05 Richard D. Worth <richard@theworths.org>
156 * PROTOCOL: Fill some missing possible error occurrences.
158 * TODO: Check off INVITE, ACCEPT, ERROR COMMAND, ERROR NO_USER
161 * src/ttt-server.c: (ttt_server_verify_username):
162 * src/ttt-client.c: (_ttt_client_execute_help),
163 (_ttt_client_execute_invite), (_ttt_client_execute_accept):
164 Implement INVITE, ACCEPT
166 2005-12-05 Richard D. Worth <richard@theworths.org>
168 * src/ttt-curses-client.c: (mvprintstr), (mvwprintstr), (wprint),
169 (main), (finish): Whitespace changes.
171 2005-12-04 Bryan Worth <bryan@theworths.org>
172 * src/ttt-socket.c: (ttt_socket_create_client) fixed socket to be
173 non-blocking. (ttt_socket_read) added return value for number
175 * Makefile.am: added necessary code for new curses-client program.
176 * src/ttt-curses-client: new ncurses based client
178 2005-12-03 Richard D. Worth <richard@theworths.org>
180 * PROTOCOL: Add RETRACT, DECLINE. Add game identifier for all game
183 * TODO: Add RETRACT, DECLINE, notices.
185 2005-12-03 Richard D. Worth <richard@theworths.org>
187 * PROTOCOL: Add underscores to error codes. Add STATISTICS
188 command. Remove statistics from WHO.
190 * TODO: Add STATISTICS. Check off STATISTICS.
192 * src/ttt.h: Define TTT_SERVER_PROTOCOL_VERSION for VERSION.
194 * src/ttt-error.c: (ttt_error_string): Add underscores to error
198 * src/ttt-client.c: (_ttt_client_execute_helo),
199 (_ttt_client_execute_statistics), (_ttt_client_execute_message),
200 (_ttt_client_execute_version), (_ttt_client_execute_quit),
201 (_ttt_client_init), (_ttt_client_fini), (ttt_client_get_username),
202 (ttt_client_set_username): Rename client->name to
203 client->username. Implement STATISTICS. Complete implementation of
207 * src/ttt-server.c: (ttt_server_register_client),
208 (ttt_server_unregister_client), (ttt_server_who),
209 (ttt_server_statistics): Track rename of client->name to
210 client->username. Add server helper for STATISTICS.
212 2005-12-02 Richard D. Worth <richard@theworths.org>
214 * TODO: Check off Global commands, HELP, VERSION.
216 * src/ttt-client.c: (_ttt_client_execute_message),
217 (_ttt_client_execute_help), (_execute_request): Whitespace
218 changes. Implement HELP with usage and short description.
220 * src/ttt-server.c: Update the server welcome message.
222 2005-12-01 Richard D. Worth <richard@theworths.org>
224 * TODO: Check off NOTICE MESSAGE, ERROR NONAMESET.
226 * PROTOCOL: Add NONAMESET error in possible errors where
227 applicable. Add description for MESSAGE.
229 * src/ttt-token.h: Add token typedef. Rename token type enum.
231 * src/ttt-lex.l: Add support for quoted string as single token.
232 * src/ttt-lex.h: Autogenerated.
234 * src/ttt-client.c: (_ttt_client_execute_helo),
235 (_ttt_client_execute_who), (_ttt_client_execute_message),
236 (_ttt_client_execute_help), (_ttt_client_execute_version),
237 (_ttt_client_execute_quit), (_ttt_client_init), (_read_request),
238 (_execute_request): Whitespace changes. Implement VERSION,
239 HELP. Change args_required back to args_min and args_max (see
240 PROTOCOL\HELP). Modify MESSAGE to accept one token arg and quote
241 output. Return NONAMESET error where applicable.
243 2005-11-29 Carl Worth <cworth@cworth.org>
246 * src/ttt-socket.c: (ttt_socket_create_client): New function for
247 creating a client socket.
250 * src/x.c: (xconnect): Add xconnect. Return a couple of useful
251 error status values so that callers can recover on connection
252 refused or host unreachable.
254 * src/ttt.h: Add TTT_STATUS_CONNECTION_REFUSED and
255 TTT_STATUS_NETWORK_UNREACHABLE.
257 2005-11-28 Kevin Worth <kevin@theworths.org>
259 * PROTOCOL: Changed board cell numbering to start with zero
263 * src/test-board.c: (main): Added new file for testing.
265 * src/ttt-board.c: (ttt_board_init), (ttt_board_to_string):
266 * src/ttt-board.h: Implemented board_to_string.
268 2005-11-28 kevin worth <kevin@theworths.org>
271 * src/ttt-board.h: Moved struct def from ttt-board.h into
272 ttt-board.c to make it private
277 2005-11-28 Carl Worth <cworth@cworth.org>
279 * TODO: Add instructions on using the first letter of our names to
280 indicate we are working on something.
282 2005-11-25 Bryan Worth <bryan@theworths.org>
283 * ttt-client.c, ttt-server.c, ttt-error.c changed line breaks to
284 <crlf> (\r\n) for network compatibility
286 2005-11-25 Bryan Worth <bryan@theworths.org>
287 * TODO: checked off NOTICE USER and NOTICE QUIT
288 *src/ttt-client.c: (_ttt_client_execute_helo): implement NOTICE USER
289 *(_ttt_client_execute_quit): implement NOTICE QUIT
291 2005-11-25 Bryan Worth <bryan@theworths.org>
292 * TODO: checked off MESSAGE
294 *src/ttt-client.c: (_ttt_client_execute_message): Implement MESSAGE
295 *(_execute_request): changed arg_required to behave as a minimum
296 instead of an absolute number to allow optional arguments such as
299 2005-11-25 Richard D. Worth <richard@theworths.org>
301 * TODO: checked off WHO, QUIT, ERROR SYNTAX
303 * src/ttt-client.c: (_ttt_client_execute_helo), (_ttt_client_init),
304 (ttt_client_get_num_wins):
306 * src/ttt-server.c: (ttt_server_who): Whitespace changes. Add
307 missing player win count for WHO.
309 2005-11-24 Richard D. Worth <richard@theworths.org>
311 * AUTHORS: Add Richard D. Worth
312 * TODO: Add newline before EOF
314 * src/ttt-client.c: (_ttt_client_execute_who):
316 * src/ttt-server.c: (ttt_server_who): Implement WHO.
318 2005-11-24 Carl Worth <cworth@cworth.org>
320 * PROTOCOL: Document QUIT.
322 * src/ttt-client.c: (_ttt_client_execute_helo),
323 (_ttt_client_execute_quit), (_ttt_client_init), (_ttt_client_fini),
324 (_execute_request), (_handle_requests_thread): Implement QUIT. Add
325 client->registered flag and unregister only if registered. Change
326 from args_min and args_max to args_required.
329 * src/ttt-error.c: (ttt_error_string):
330 * src/ttt-server.c: (ttt_server_register_client): Put underscores
331 in TTT_ERRROR names for better readability.
333 2005-11-24 Carl Worth <cworth@cworth.org>
336 * src/ttt-server.c: (ttt_server_init),
337 (ttt_server_register_client): Remove unique-name generation from
338 the server. The client is going to have to have code to do this
341 * src/ttt-client.c: Change minimum arguments for HELO from 0 to 1.
343 * TODO: Note that HELO and ERROR INVALIDNAME are implemented in
346 2005-11-23 Richard D. Worth <richard@theworths.org>
348 * PROTOCOL: Remove unused servername
350 * src/ttt-client.h: * src/ttt-client.c:
351 (_ttt_client_execute_helo), (_ttt_client_init),
352 (_ttt_client_fini), (_execute_request), (ttt_client_get_name),
353 (ttt_client_set_name): Added command descriptions structure. Match
354 command case-insensitively, dispatch to execute
355 function. Implement HELO command. Register on HELO instead of on
358 * src/ttt-server.h: * src/ttt-server.c: (ttt_server_init),
359 (ttt_server_register_client), (ttt_server_unregister_client),
360 (ttt_server_get_host), (ttt_server_get_port), (main): Added host
361 and port to server. Make client registration name-based rather
364 * src/x.c: (xstrdup): Return NULL on NULL
366 * src/ttt-lex.h: Regenerated
368 2005-11-22 Carl Worth <cworth@cworth.org>
370 * TODO: Add TODO file listing all the stuff from the protocol that
371 needs to be implemented.
378 * src/ttt-token.h: Add support for a flex-based tokenizer which
379 tokenizes newlines and space-separated strings.
381 * src/ttt-client.c: (_ttt_client_init), (_ttt_client_fini),
382 (_append_to_request), (_free_request), (_read_request),
383 (_execute_request): Use new tokenizer to tokenize input into an
384 array of request strings.
386 2005-11-15 Carl Worth <cworth@cworth.org>
390 * src/ttt-error.c: (ttt_error_string): Add error values and error
391 strings from protocol.
393 * src/ttt.h: Add typedefs for ttt_client_t and ttt_server_t so
394 that there's no problem with ttt-client.h and ttt-server.h needing
395 to mutually include each other.
398 * src/ttt-server.c: (ttt_server_register_client),
399 (ttt_server_unregister_client), (_ttt_server_accept), (main): Push
400 the client request handling thread back down into ttt-client.c
401 where it really does belong. The server code no longer ever
402 reaches down inside the ttt_client_t structure. Export
403 ttt_server_register_client and ttt_server_unregister_client. Add
404 documentation for ttt_server_broadcast. Document locking semantics
405 for all functions which acquire the server lock.
408 * src/ttt-client.c: (_ttt_client_create), (_ttt_client_destroy),
409 (_read_into_request_until), (_read_request), (_execute_request),
410 (_handle_requests_thread), (ttt_client_new), (ttt_client_get_id):
411 Pull the ttt_client structure definition back down inside the
412 ttt-client.c file. Don't export ttt_client_create and
413 ttt_client_destroy anymore, but instead just use static
414 _ttt_client_init and _ttt_client_fini. Implement the broadcast by
415 just passing a client pointer around and using client->request
416 rather than passing char *request all over. Document new
417 ttt_client_new and remove ttt_client_read_line. Add locking to
418 ttt_client_send and document it. Add ttt_client_get_id.
420 2005-11-14 Carl Worth <cworth@cworth.org>
422 Server now acts as a very simple chat server.
425 * src/ttt-client.c: (ttt_client_create), (ttt_client_destroy),
426 (_append_to_request), (ttt_client_read_into_request_until),
427 (ttt_client_read_line), (ttt_client_send): Add support to do a
428 buffering read within the client and to reuse the buffer (which
429 grows by doubling) from one request to the next. Add function to
430 send a message to a client.
432 * src/ttt-server.c: (ttt_server_init), (ttt_server_create_client):
433 Add support for a client idea. Resize the server's client list by
435 * src/ttt-server.c: (ttt_server_destroy_client): Add support to
437 * src/ttt-server.c: (_handle_client_requests_thread),
438 (_accept_client): Move handling of client requests up to
439 ttt-server.c from ttt-client.c. Use threads rather than a fork per
442 * src/ttt-server.h: (ttt_server_broadcast): Add function to send a
443 message to all connected clients.
446 * src/ttt-socket.c: (ttt_socket_read),
447 (ttt_socket_write): Add functions to do blocking read or write of
448 the specified number of bytes.
450 * src/ttt-socket.c: (ttt_socket_accept): Remove fork, so that the
451 accept function call can take care of anything like that itself.
454 * src/x.c: (xread), (xwrite): New wrappers for read and write.
456 * src/ttt.h: Add TTT_STATUS_EOF, TRUE, and FALSE.
458 * src/ttt.c: Need to include ttt-args.h explicitly now.
460 2005-11-11 Carl Worth <cworth@cworth.org>
463 * src/ttt-server.c: (ttt_server_init), (ttt_server_add_client),
464 (_accept_client), (main): Add a new ttt_server_t object with a
465 mutex-protected list of clients. Move client handling code down
466 into new ttt-client.c.
469 * src/ttt-client.c: (ttt_client_create), (ttt_client_destroy),
470 (ttt_client_handle_requests): New ttt_client_t object that simply
471 holds a pointer back to the server as well as the client socket
475 * src/ttt-socket.c: (ttt_socket_accept): Add closure argument. Add
476 a call to fork before calling the accept callback.
478 * src/ttt-args.c: Hide unused ttt_args_usage from the compiler to
479 keep it from complaining.
481 * src/ttt.c: (main): Rename the client main program from
482 ttt-client to ttt.c, (since the server code now has its own
486 * src/Makefile.am: Include and link with pthread now that we have
487 pthread-based mutex locking.
489 2005-11-11 Carl Worth <cworth@pippin.local>
491 * src/ttt-server.c: (main): Don't assign to stderr which is
492 apparently an invalid lvalue on Mac OS X.
495 * src/x.c: (xfreopen): Change return type to void.
497 * src/ttt-board.c: (ttt_board_to_string): Add missing return
500 2005-11-11 Carl Worth <cworth@cworth.org>
502 * configure.in: Key off of src/ttt.h instead of src/ttt.c which no
505 2005-11-11 Carl Worth <cworth@cworth.org>
509 * src/x.h: Move include of stdarg.h from x.c to ttt.h.
511 2005-11-11 Carl Worth <cworth@cworth.org>
513 * src/ttt-board.h: Include ttt.h to get standard includes.
515 * src/ttt-socket.c: Replace include of netinet/ip.h with
516 netinet/in.h which seems to be necessary for BSD libc, (eg. Mac OS
519 2005-11-09 Carl Worth <cworth@cworth.org>
523 * src/ttt-server.c: (ttt_dispatch), (main):
525 * src/ttt-socket.c: (_sockaddr_init), (_wait_for_connection),
526 (ttt_socket_create_server), (ttt_socket_accept): Push a lot of
527 code out of ttt-server.c down into a new ttt_socket abstraction
528 layer. The code is much easier to read now. The server also no
529 longer exits when the first client exits, but continues to listen
530 for more connections.
532 2005-11-09 Carl Worth <cworth@cworth.org>
535 * src/ttt-args.c: (ttt_args_help), (ttt_args_parse): Add support
536 for -h,--host, -p,--port, and --log-file command-line arguments.
538 * src/ttt-server.c: (main): Use host, port, and log-file
539 command-line arguments.
541 * src/ttt-client.c: (main): Track change in signature of
545 * src/x.c: (xfdopen), (xfreopen): More wrappers.
547 2005-11-08 Carl Worth <cworth@cworth.org>
550 * src/ttt-server.c: (_sockaddr_init), (_wait_for_connection),
551 (main): Add socket, bind, listen, accept calls to provide a
552 simple, functional, one-shot server demonstration.
555 * src/x.c: (xsocket), (xbind), (xlisten), (xfcntl), (xselect): Add
556 more wrapped system calls.
558 2005-11-07 Carl Worth <cworth@cworth.org>
560 * src/ttt.h: Grab some useful definitions from wdo.h:
561 ASSERT_NOT_REACHEED and TTT_PRINTF_FORMAT. Add several needed
564 * src/Makefile.am: Rip out not-yet existing ttt-command and
567 * src/ttt-args.c: (ttt_args_parse): Track name change from
568 args_help to ttt_args_help.
570 * src/ttt.c: Remove in favor of ttt-server.c and ttt-client.c.
572 * src/x.h: Add prototype for xfwrite.
574 2005-11-05 Richard D. Worth <richard@theworths.org>
576 * src/ttt-board.c: (ttt_board_init): Added for loop counter init.
577 * src/ttt-board.h: Added prototypes.
579 2005-11-05 Richard D. Worth <richard@theworths.org>
581 * src/args.c: Renamed ttt-args.c
582 * src/args.h: Renamed ttt-args.h
583 * src/ttt-args.c: (ttt_args_help), (ttt_args_usage),
584 (ttt_args_parse): Added ttt_ prefix.
585 * src/ttt-args.h: Added ttt_, TTT_ prefix.
587 2005-11-05 Kevin Worth <kevin@cworth.org>
589 * src/ttt-board.c: (ttt_board_init): Implemented board_init.
590 * src/ttt-board.h: (ttt_board_t): Added cells array.
592 2005-11-05 Carl Worth <cworth@cworth.org>
594 * src/Makefile.am: Add ttt-board.[ch] and x.[ch]
597 * src/ttt-board.c: (ttt_board_init), (ttt_board_init_from_string),
598 (ttt_board_to_string), (ttt_board_write): Add some stub functions
599 for Richard and Kevin to have some practice
600 implementing. Functions to represent a board and to go to/from a
604 * src/x.c: (xasprintf), (xvasprintf), (xpipe), (xfork), (xmalloc),
605 (xcalloc), (xrealloc), (xfdopen), (xstrdup), (xfwrite): Several
606 utility functions that make system calls, check the result, and
607 exit on any error. This will simplify the error checking needed in
608 programs using these functions.
610 2005-11-05 Carl Worth <cworth@cworth.org>
612 * src/Makefile.am: Break things up for separate ttt-client and
613 ttt-server and programs.