+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
+
2005-11-25 Bryan Worth <bryan@theworths.org>
* TODO: checked off NOTICE USER and NOTICE QUIT
*src/ttt-client.c: (_ttt_client_execute_helo): implement NOTICE USER
client->registered = TRUE;
- xasprintf (&response, "HELO %s %s %s\n",
+ xasprintf (&response, "HELO %s %s %s\r\n",
client->name,
ttt_server_get_host (client->server),
ttt_server_get_port (client->server));
ttt_client_send (client, response);
- xasprintf (&response, "NOTICE USER %s\n",client->name);
+ xasprintf (&response, "NOTICE USER %s\r\n",client->name);
ttt_server_broadcast(client->server,response);
free (response);
char *notice;
assert (num_args == 0);
- xasprintf (¬ice,"NOTICE QUIT %s\n",client->name);
+ xasprintf (¬ice,"NOTICE QUIT %s\r\n",client->name);
ttt_server_broadcast(client->server,notice);
free (notice);
return TTT_ERROR_QUIT_REQUESTED;
assert (num_args > 0);
- xasprintf(&response, "MESSAGE\n");
+ xasprintf(&response, "MESSAGE\r\n");
ttt_client_send (client, response);
xasprintf(&response, "NOTICE MESSAGE %s", client->name);
xasprintf(&response, "%s %s",response,args[i]);
}
- xasprintf(&response, "%s\n",response);
+ xasprintf(&response, "%s\r\n",response);
ttt_server_broadcast (client->server,response);
free (response);
err = pthread_create (&client->thread, NULL,
_handle_requests_thread, client);
if (err != 0) {
- fprintf (stderr, "Error: pthread_create failed: %s. Aborting.\n",
+ fprintf (stderr, "Error: pthread_create failed: %s. Aborting.\r\n",
strerror (err));
exit (1);
}
{
switch (error) {
case TTT_ERROR_NONE:
- return "ERROT NONE\n";
+ return "ERROR NONEi\r\n";
case TTT_ERROR_NO_NAME_SET:
- return "ERROR NONAMESET\n";
+ return "ERROR NONAMESET\r\n";
case TTT_ERROR_INVALID_NAME:
- return "ERROR INVALIDNAME\n";
+ return "ERROR INVALIDNAME\r\n";
case TTT_ERROR_COMMAND:
- return "ERROR COMMAND\n";
+ return "ERROR COMMAND\r\n";
case TTT_ERROR_SYNTAX:
- return "ERROR SYNTAX\n";
+ return "ERROR SYNTAX\r\n";
case TTT_ERROR_NOT_NUMBER:
- return "ERROR NOTNUMBER\n";
+ return "ERROR NOTNUMBER\r\n";
case TTT_ERROR_NOT_GRID:
- return "ERROR NOTGRID\n";
+ return "ERROR NOTGRID\r\n";
case TTT_ERROR_NO_USER:
- return "ERROR NOUSER\n";
+ return "ERROR NOUSER\r\n";
case TTT_ERROR_NOT_IN_GAME:
- return "ERROR_NOTINGAME\n";
+ return "ERROR_NOTINGAME\r\n";
case TTT_ERROR_NOT_PLAYING:
- return "ERROR_NOTPLAYING\n";
+ return "ERROR_NOTPLAYING\r\n";
case TTT_ERROR_NOT_YOUR_TURN:
- return "ERROR NOTYOURTURN\n";
+ return "ERROR NOTYOURTURN\r\n";
/* Not an actual protocol errror, so this should never happen. */
case TTT_ERROR_QUIT_REQUESTED:
ASSERT_NOT_REACHED;
}
}
- printf ("Client %s has joined.\n", name);
+ printf ("Client %s has joined.\r\n", name);
server->num_clients++;
assert (i < server->num_clients);
- printf ("Client %s has left.\n", ttt_client_get_name (client));
+ printf ("Client %s has left.\r\n", ttt_client_get_name (client));
memmove (&server->clients[i], &server->clients[i+1],
(server->num_clients - i - 1) * sizeof (ttt_client_t *));
ttt_client_get_name (server->clients[i]),
ttt_client_get_num_wins (server->clients[i]));
- xasprintf (&response, "%s\n", response);
+ xasprintf (&response, "%s\r\n", response);
pthread_mutex_unlock (&server->mutex);
}
static const char *WELCOME_MESSAGE =
-"Welcome to ttt-server. So far, this program is still a demonstration\n"
-"TCP/IP server, acting something like a rather braindead chat server.\n"
-"The server is currently listening on:\n"
-"\n %s:%s\n"
-"\nTo test this, simply connect one or more clients to that host and port.\n"
-"For example:\n"
-"\n telnet %s %s\n"
-"\nOnce you have connected a client, the server will send each line of text\n"
-"it receives to all connected clients. The server reports client joins and\n"
-"departures on stdout.\n"
-"\nNote that to terminate the telnet client you type Control-], then\n"
-"<Enter>, then \"close\" (and <Enter>) at the \"telnet> \" prompt.\n"
-"\nHave fun!\n"
-"-Carl\n"
-"\nPS. At this point we're ready to leave the demonstration phase and to\n"
-"begin implementing TTTP (tic-tac-toe protocol) as well as fixing the\n"
-"protocol specifcation. We don't need a custom client to move forward on\n"
-"the server (that is one of the ideas behind using a telnet-compatible\n"
-"protocol), but a custom client would still be a fine project for a\n"
-"motivated beginning programmer.\n\n";
+"Welcome to ttt-server. So far, this program is still a demonstration\r\n"
+"TCP/IP server, acting something like a rather braindead chat server.\r\n"
+"The server is currently listening on:\r\n"
+"\r\n %s:%s\r\n"
+"\r\nTo test this, simply connect one or more clients to that host and port.\r\n"
+"For example:\r\n"
+"\r\n telnet %s %s\r\n"
+"\r\nOnce you have connected a client, the server will send each line of text\r\n"
+"it receives to all connected clients. The server reports client joins and\r\n"
+"departures on stdout.\r\n"
+"\r\nNote that to terminate the telnet client you type Control-], then\r\n"
+"<Enter>, then \"close\" (and <Enter>) at the \"telnet> \" prompt.\r\n"
+"\r\nHave fun!\r\n"
+"-Carl\r\n"
+"\r\nPS. At this point we're ready to leave the demonstration phase and to\r\n"
+"begin implementing TTTP (tic-tac-toe protocol) as well as fixing the\r\n"
+"protocol specifcation. We don't need a custom client to move forward on\r\n"
+"the server (that is one of the ideas behind using a telnet-compatible\r\n"
+"protocol), but a custom client would still be a fine project for a\r\n"
+"motivated beginning programmer.\r\n\r\n";
static void
_ttt_server_accept (void *closure, int client_socket)