2005-12-10 Richard D. Worth <richard@theworths.org> * TODO: check off INVITE, RETRACT, DECLINE, Game Invitation notices, Connection setup errors, NO_INVITE, User information errors. * src/ttt-client.c: (_ttt_client_execute_helo), (_ttt_client_execute_statistics), (_ttt_client_execute_message), (_ttt_client_execute_help), (_ttt_client_execute_version), (_ttt_client_execute_quit), (_ttt_client_execute_invite), (_ttt_client_execute_accept), (_ttt_client_execute_retract), (_ttt_client_execute_decline), (_read_request), (_execute_request), (_handle_requests_thread): Whitespace changes. Use exported get methods (get_username, get_num_wins). Use strcasecmp in place of toupper. Finish RETRACT, DECLINE. * src/ttt.h: * src/ttt-server.h: * src/ttt-server.c: (ttt_server_init), (ttt_server_register_client), (ttt_server_unregister_client), (ttt_server_verify_username), (ttt_server_get_client_from_username), (ttt_server_add_invite), (ttt_server_remove_invite): Add invite struct. Make username case insensitive (missed in register_client). Implement add_invite, remove_invite. Moved statistics to ttt-client.c
2005-12-09 Carl Worth <cworth@cworth.org> * src/ttt-server.c (ttt_server_unregister_client): Move client has left message to stderr so it makes it to the log file too.
2005-12-09 Carl Worth <cworth@cworth.org> * src/ttt-server.c (main): Put the initial server started message in the log file as well.
2005-12-09 Carl Worth <cworth@cworth.org> * src/ttt-args.h: * src/ttt-args.c: (ttt_args_help), (ttt_args_parse): Add a -u, --user option for controlling the uid under which the server process runs. * src/ttt.h: * src/ttt-server.c: (ttt_server_register_client), (main): Recert the dup of stdout which wasn't working. Instead just print client join information on stderr so that it goes into the log. Implement support for the user option by calling setuid to drop root privileges the process might start out with.
2005-12-08 Carl Worth <cworth@cworth.org> * src/ttt-server.c (main): When detached dup stdout to stderr so that everything appears in the log file.
2005-12-08 Carl Worth <cworth@cworth.org> * src/ttt-args.h: * src/ttt-args.c: (ttt_args_help), (ttt_args_parse): Add -d,--detach and --pid-file=FILE options for running the server as a daemon. * src/ttt-server.c: (ttt_server_statistics), (ttt_server_verify_username), (_detach_and_write_child_pid_to), (main): Add support for detaching and writing out the child PID to a file. * src/x.h: * src/x.c: (xfopen), (xdup2): Two new x-functions.
2005-12-05 Richard D. Worth <richard@theworths.org> * PROTOCOL: Fill some missing possible error occurrences. * TODO: Check off INVITE, ACCEPT, ERROR COMMAND, ERROR NO_USER * src/ttt-server.h: * src/ttt-server.c: (ttt_server_verify_username): * src/ttt-client.c: (_ttt_client_execute_help), (_ttt_client_execute_invite), (_ttt_client_execute_accept): Implement INVITE, ACCEPT
2005-12-03 Richard D. Worth <richard@theworths.org> * PROTOCOL: Add underscores to error codes. Add STATISTICS command. Remove statistics from WHO. * TODO: Add STATISTICS. Check off STATISTICS. * src/ttt.h: Define TTT_SERVER_PROTOCOL_VERSION for VERSION. * src/ttt-error.c: (ttt_error_string): Add underscores to error codes. * src/ttt-client.h: * src/ttt-client.c: (_ttt_client_execute_helo), (_ttt_client_execute_statistics), (_ttt_client_execute_message), (_ttt_client_execute_version), (_ttt_client_execute_quit), (_ttt_client_init), (_ttt_client_fini), (ttt_client_get_username), (ttt_client_set_username): Rename client->name to client->username. Implement STATISTICS. Complete implementation of VERSION. * src/ttt-server.h: * src/ttt-server.c: (ttt_server_register_client), (ttt_server_unregister_client), (ttt_server_who), (ttt_server_statistics): Track rename of client->name to client->username. Add server helper for STATISTICS.
2005-12-02 Richard D. Worth <richard@theworths.org> * TODO: Check off Global commands, HELP, VERSION. * src/ttt-client.c: (_ttt_client_execute_message), (_ttt_client_execute_help), (_execute_request): Whitespace changes. Implement HELP with usage and short description. * src/ttt-server.c: Update the server welcome message.
2005-11-25 Bryan Worth <bryan@theworths.org> * ttt-client.c, ttt-server.c, ttt-error.c changed line breaks to <crlf> (\r\n) for network compatibility
* TODO: checked off WHO, QUIT, ERROR SYNTAX * src/ttt-client.c: (_ttt_client_execute_helo), (_ttt_client_init), (ttt_client_get_num_wins): * src/ttt-client.h: * src/ttt-server.c: (ttt_server_who): Whitespace changes. Add missing player win count for WHO.
* AUTHORS: Add Richard D. Worth * TODO: Add newline before EOF * src/ttt-client.c: (_ttt_client_execute_who): * src/ttt-server.h: * src/ttt-server.c: (ttt_server_who): Implement WHO.
2005-11-24 Carl Worth <cworth@cworth.org> * PROTOCOL: Document QUIT. * src/ttt-client.c: (_ttt_client_execute_helo), (_ttt_client_execute_quit), (_ttt_client_init), (_ttt_client_fini), (_execute_request), (_handle_requests_thread): Implement QUIT. Add client->registered flag and unregister only if registered. Change from args_min and args_max to args_required. * src/ttt-error.h: * src/ttt-error.c: (ttt_error_string): * src/ttt-server.c: (ttt_server_register_client): Put underscores in TTT_ERRROR names for better readability.
2005-11-24 Carl Worth <cworth@cworth.org> * PROTOCOL: * src/ttt-server.c: (ttt_server_init), (ttt_server_register_client): Remove unique-name generation from the server. The client is going to have to have code to do this anyway. * src/ttt-client.c: Change minimum arguments for HELO from 0 to 1. * TODO: Note that HELO and ERROR INVALIDNAME are implemented in the server.
* PROTOCOL: Removed unused servername * src/ttt-client.h: * src/ttt-client.c: (_ttt_client_execute_helo), (_ttt_client_init), (_ttt_client_fini), (_execute_request), (ttt_client_get_name), (ttt_client_set_name): Added command descriptions structure. Match command case-insensitively, dispatch to execute function. Implement HELO command. Register on HELO instead of on connect. * src/ttt-server.h: * src/ttt-server.c: (ttt_server_init), (ttt_server_register_client), (ttt_server_unregister_client), (ttt_server_get_host), (ttt_server_get_port), (main): Added host and port to server. Make client registration name-based rather than id-based. * src/x.c: (xstrdup): Return NULL on NULL * src/ttt-lex.h: Regenerated
2005-11-15 Carl Worth <cworth@cworth.org> * src/Makefile.am: * src/ttt-error.h: * src/ttt-error.c: (ttt_error_string): Add error values and error strings from protocol. * src/ttt.h: Add typedefs for ttt_client_t and ttt_server_t so that there's no problem with ttt-client.h and ttt-server.h needing to mutually include each other. * src/ttt-server.h: * src/ttt-server.c: (ttt_server_register_client), (ttt_server_unregister_client), (_ttt_server_accept), (main): Push the client request handling thread back down into ttt-client.c where it really does belong. The server code no longer ever reaches down inside the ttt_client_t structure. Export ttt_server_register_client and ttt_server_unregister_client. Add documentation for ttt_server_broadcast. Document locking semantics for all functions which acquire the server lock. * src/ttt-client.h: * src/ttt-client.c: (_ttt_client_create), (_ttt_client_destroy), (_read_into_request_until), (_read_request), (_execute_request), (_handle_requests_thread), (ttt_client_new), (ttt_client_get_id): Pull the ttt_client structure definition back down inside the ttt-client.c file. Don't export ttt_client_create and ttt_client_destroy anymore, but instead just use static _ttt_client_init and _ttt_client_fini. Implement the broadcast by just passing a client pointer around and using client->request rather than passing char *request all over. Document new ttt_client_new and remove ttt_client_read_line. Add locking to ttt_client_send and document it. Add ttt_client_get_id.
2005-11-14 Carl Worth <cworth@cworth.org> Server now acts as a very simple chat server. * src/ttt-client.h: * src/ttt-client.c: (ttt_client_create), (ttt_client_destroy), (_append_to_request), (ttt_client_read_into_request_until), (ttt_client_read_line), (ttt_client_send): Add support to do a buffering read within the client and to reuse the buffer (which grows by doubling) from one request to the next. Add function to send a message to a client. * src/ttt-server.c: (ttt_server_init), (ttt_server_create_client): Add support for a client idea. Resize the server's client list by doubling. * src/ttt-server.c: (ttt_server_destroy_client): Add support to destroy a client. * src/ttt-server.c: (_handle_client_requests_thread), (_accept_client): Move handling of client requests up to ttt-server.c from ttt-client.c. Use threads rather than a fork per client. * src/ttt-server.h: * src/ttt-server.h: (ttt_server_broadcast): Add function to send a message to all connected clients. * src/ttt-socket.h: * src/ttt-socket.c: (ttt_socket_read), (ttt_socket_write): Add functions to do blocking read or write of the specified number of bytes. * src/ttt-socket.c: (ttt_socket_accept): Remove fork, so that the accept function call can take care of anything like that itself. * src/x.h: * src/x.c: (xread), (xwrite): New wrappers for read and write. * src/ttt.h: Add TTT_STATUS_EOF, TRUE, and FALSE. * src/ttt.c: Need to include ttt-args.h explicitly now.
2005-11-11 Carl Worth <cworth@cworth.org> * src/ttt-server.h: * src/ttt-server.c: (ttt_server_init), (ttt_server_add_client), (_accept_client), (main): Add a new ttt_server_t object with a mutex-protected list of clients. Move client handling code down into new ttt-client.c. * src/ttt-client.h: * src/ttt-client.c: (ttt_client_create), (ttt_client_destroy), (ttt_client_handle_requests): New ttt_client_t object that simply holds a pointer back to the server as well as the client socket file descriptor. * src/ttt-socket.h: * src/ttt-socket.c: (ttt_socket_accept): Add closure argument. Add a call to fork before calling the accept callback. * src/ttt-args.c: Hide unused ttt_args_usage from the compiler to keep it from complaining. * src/ttt.c: (main): Rename the client main program from ttt-client to ttt.c, (since the server code now has its own ttt-client.c). * src/ttt.h: * src/Makefile.am: Include and link with pthread now that we have pthread-based mutex locking.
2005-11-11 Carl Worth <cworth@pippin.local> * src/ttt-server.c: (main): Don't assign to stderr which is apparently an invalid lvalue on Mac OS X. * src/x.h: * src/x.c: (xfreopen): Change return type to void. * src/ttt-board.c: (ttt_board_to_string): Add missing return statement.
2005-11-09 Carl Worth <cworth@cworth.org> * src/Makefile.am: * src/ttt.h: * src/ttt-server.c: (ttt_dispatch), (main): * src/ttt-socket.h: * src/ttt-socket.c: (_sockaddr_init), (_wait_for_connection), (ttt_socket_create_server), (ttt_socket_accept): Push a lot of code out of ttt-server.c down into a new ttt_socket abstraction layer. The code is much easier to read now. The server also no longer exits when the first client exits, but continues to listen for more connections.