Carl Worth [Fri, 9 Dec 2005 17:10:08 +0000 (17:10 +0000)]
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.
Bryan Worth [Fri, 9 Dec 2005 16:43:53 +0000 (16:43 +0000)]
2005-12-09 Bryan Worth <bryan@theworths.org>
* src/ttt-curses-client.c: added error checking to ttt_create_client
call. Added ability to escape server commands by prepending with /.
Added ability so override port number with port=xxxx entry in
~/.ttt/client.conf.
Carl Worth [Thu, 8 Dec 2005 23:42:28 +0000 (23:42 +0000)]
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.
Bryan Worth [Thu, 8 Dec 2005 20:34:02 +0000 (20:34 +0000)]
2005-12-08 Bryan Worth <bryan@theworths.org>
* src/ttt-curses-client.c: Multiple improvements!
Username taken from USER environment variable and stored as
preference in ~/.ttt/client.conf (username=xxxxxx). Backspace
should now work correctly with all term types. Status messages
display in seperate area. MESSAGE reply from server is
suppressed. Eliminated most global variables.
Carl Worth [Thu, 8 Dec 2005 14:48:50 +0000 (14:48 +0000)]
2005-12-08 Carl Worth <cworth@cworth.org>
* src/Makefile.am: Fix rule to auto-generate ttt-lex.h.
* src/ttt-lex.h: Remove generated file from revision control.
* src/ttt-lex.l: Add copyright/license blurb.
* src/ttt-lex.l:
* src/ttt-client.c: (yy_init_globals), (use_yy_init_globals):
Shut off some annoying compiler warnings due to flex bugs (only
one still remains).
Bryan Worth [Mon, 5 Dec 2005 12:34:13 +0000 (12:34 +0000)]
2005-12-04 Bryan Worth <bryan@theworths.org>
* src/ttt-socket.c: (ttt_socket_create_client) fixed socket to be
non-blocking. (ttt_socket_read) added return value for number
of bytes read
* Makefile.am: added necessary code for new curses-client program.
* src/ttt-curses-client: new ncurses based client
* 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.
Richard Worth [Fri, 2 Dec 2005 13:20:42 +0000 (13:20 +0000)]
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.
Richard Worth [Fri, 2 Dec 2005 01:38:34 +0000 (01:38 +0000)]
2005-12-01 Richard D. Worth <richard@theworths.org>
* TODO: Check off NOTICE MESSAGE, ERROR NONAMESET.
* PROTOCOL: Add NONAMESET error in possible errors where
applicable. Add description for MESSAGE.
* src/ttt-token.h: Add token typedef. Rename token type enum.
* src/ttt-lex.l: Add support for quoted string as single token.
* src/ttt-lex.h: Autogenerated.
* src/ttt-client.c: (_ttt_client_execute_helo),
(_ttt_client_execute_who), (_ttt_client_execute_message),
(_ttt_client_execute_help), (_ttt_client_execute_version),
(_ttt_client_execute_quit), (_ttt_client_init), (_read_request),
(_execute_request): Whitespace changes. Implement VERSION,
HELP. Change args_required back to args_min and args_max (see
PROTOCOL\HELP). Modify MESSAGE to accept one token arg and quote
output. Return NONAMESET error where applicable.
Carl Worth [Tue, 29 Nov 2005 13:44:54 +0000 (13:44 +0000)]
2005-11-29 Carl Worth <cworth@cworth.org>
* src/ttt-socket.h:
* src/ttt-socket.c: (ttt_socket_create_client): New function for
creating a client socket.
* src/x.h:
* src/x.c: (xconnect): Add xconnect. Return a couple of useful
error status values so that callers can recover on connection
refused or host unreachable.
* src/ttt.h: Add TTT_STATUS_CONNECTION_REFUSED and
TTT_STATUS_NETWORK_UNREACHABLE.
Bryan Worth [Fri, 25 Nov 2005 16:12:11 +0000 (16:12 +0000)]
2005-11-25 Bryan Worth <bryan@theworths.org>
* TODO: checked off MESSAGE
*src/ttt-client.c: (_ttt_client_execute_message): Implement MESSAGE
*(_execute_request): changed arg_required to behave as a minimum
instead of an absolute number to allow optional arguments such as
multi-word messages
Carl Worth [Thu, 24 Nov 2005 16:18:18 +0000 (16:18 +0000)]
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.
Carl Worth [Thu, 24 Nov 2005 15:34:08 +0000 (15:34 +0000)]
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.
Richard Worth [Wed, 23 Nov 2005 22:11:28 +0000 (22:11 +0000)]
* 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.
Carl Worth [Tue, 22 Nov 2005 23:54:09 +0000 (23:54 +0000)]
2005-11-22 Carl Worth <cworth@cworth.org>
* TODO: Add TODO file listing all the stuff from the protocol that
needs to be implemented.
* src/Makefile.am:
* configure.in:
* ylwrap:
* src/ttt-lex.h:
* src/ttt-lex.l:
* src/ttt-token.h: Add support for a flex-based tokenizer which
tokenizes newlines and space-separated strings.
* src/ttt-client.c: (_ttt_client_init), (_ttt_client_fini),
(_append_to_request), (_free_request), (_read_request),
(_execute_request): Use new tokenizer to tokenize input into an
array of request strings.
Carl Worth [Tue, 15 Nov 2005 17:56:28 +0000 (17:56 +0000)]
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.
Carl Worth [Mon, 14 Nov 2005 21:14:52 +0000 (21:14 +0000)]
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.
Carl Worth [Sat, 12 Nov 2005 01:21:21 +0000 (01:21 +0000)]
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.
Carl Worth [Wed, 9 Nov 2005 14:37:16 +0000 (14:37 +0000)]
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.
Carl Worth [Sat, 5 Nov 2005 16:43:21 +0000 (16:43 +0000)]
2005-11-05 Carl Worth <cworth@cworth.org>
* src/Makefile.am: Add ttt-board.[ch] and x.[ch]
* src/ttt-board.h:
* src/ttt-board.c: (ttt_board_init), (ttt_board_init_from_string),
(ttt_board_to_string), (ttt_board_write): Add some stub functions
for Richard and Kevin to have some practice
implementing. Functions to represent a board and to go to/from a
string.
* src/x.h:
* src/x.c: (xasprintf), (xvasprintf), (xpipe), (xfork), (xmalloc),
(xcalloc), (xrealloc), (xfdopen), (xstrdup), (xfwrite): Several
utility functions that make system calls, check the result, and
exit on any error. This will simplify the error checking needed in
programs using these functions.