-/*
- * Receiving side of the chat window. This is implemented in a
- * tiny hidden IFRAME that just does JavaScript writes to
- * other frames whenever it refreshes and finds new data.
- */
-void chat_recv(void) {
- int i;
- struct pollfd pf;
- int got_data = 0;
- int end_chat_now = 0;
- char buf[SIZ];
- char cl_user[SIZ];
- char cl_text[SIZ];
- char *output_data = NULL;
-
- output_headers(0);
-
- wprintf("Content-type: text/html\n");
- wprintf("\n");
- wprintf("<HTML>\n"
- "<HEAD>\n"
- "<META HTTP-EQUIV=\"refresh\" CONTENT=\"3\">\n"
- "</HEAD>\n"
-
- "<BODY BGCOLOR=\"#FFFFFF\">\n"
- );
-
- if (setup_chat_socket() != 0) {
- wprintf("Error setting up chat socket</BODY></HTML>\n");
- wDumpContent(0);
- return;
- }
-
- /*
- * See if there is any chat data waiting.
- */
- output_data = strdup("");
- do {
- got_data = 0;
- pf.fd = WC->chat_sock;
- pf.events = POLLIN;
- pf.revents = 0;
- if (poll(&pf, 1, 1) > 0) if (pf.revents & POLLIN) {
- ++got_data;
-
- /* Temporarily swap the serv and chat sockets during chat talk */
- i = WC->serv_sock;
- WC->serv_sock = WC->chat_sock;
- WC->chat_sock = i;
-
- serv_gets(buf);
-
- if (!strcmp(buf, "000")) {
- strcpy(buf, ":|exiting chat mode");
- end_chat_now = 1;
- }
-
- /* Unswap the sockets. */
- i = WC->serv_sock;
- WC->serv_sock = WC->chat_sock;
- WC->chat_sock = i;
-
- /* Append our output data */
- output_data = realloc(output_data, strlen(output_data) + strlen(buf) + 4);
- strcat(output_data, buf);
- strcat(output_data, "\n");
- }
-
- } while ( (got_data) && (!end_chat_now) );