\n");
wDumpContent(1);
}
@@ -65,417 +69,88 @@ void display_page(void)
*/
void page_user(void)
{
- char recp[SIZ];
- char buf[SIZ];
- char closewin[SIZ];
-
- output_headers(1, 1, 2, 0, 0, 0);
- wprintf("
\n"
- );
-
- strcpy(recp, bstr("recp"));
- strcpy(closewin, bstr("closewin"));
+ char recp[256];
+ StrBuf *Line;
- if (strlen(bstr("send_button")) == 0) {
- wprintf("
");
- wprintf(_("Message was not sent."));
- wprintf("\n");
+ safestrncpy(recp, bstr("recp"), sizeof recp);
+
+ if (!havebstr("send_button")) {
+ AppendImportantMessage(_("Message was not sent."), -1);
} else {
+ Line = NewStrBuf();
serv_printf("SEXP %s|-", recp);
- serv_getln(buf, sizeof buf);
-
- if (buf[0] == '4') {
- text_to_server(bstr("msgtext"), 0);
+ StrBuf_ServGetln(Line);
+ if (GetServerStatusMsg(Line, NULL, 0, 0) == 4) {
+ char buf[256];
+ text_to_server(bstr("msgtext"));
serv_puts("000");
- wprintf("
");
- wprintf(_("Message has been sent to "));
- escputs(recp);
- wprintf(".\n");
+ stresc(buf, 256, recp, 0, 0);
+ AppendImportantMessage(buf, -1);
+ AppendImportantMessage(_("Message has been sent to "), -1);
}
- else {
- wprintf("
%s\n", &buf[4]);
- }
- }
-
- if (!strcasecmp(closewin, "yes")) {
- wprintf("
");
- wprintf(_("[ close window ]"));
- wprintf("\n");
}
- wDumpContent(1);
+ url_do_template();
}
/*
- * multiuser chat
+ * display page popup
+ * If there are instant messages waiting, and we notice that we haven't checked them in
+ * a while, it probably means that we need to open the instant messenger window.
*/
-void do_chat(void)
+int Conditional_PAGE_WAITING(StrBuf *Target, WCTemplputParams *TP)
{
+ int len;
char buf[SIZ];
- /* First, check to make sure we're still allowed in this room. */
- serv_printf("GOTO %s", WC->wc_roomname);
- serv_getln(buf, sizeof buf);
- if (buf[0] != '2') {
- smart_goto("_BASEROOM_");
- return;
- }
-
- /* If the chat socket is still open from a previous chat,
- * close it -- because it might be stale or in the wrong room.
- */
- if (WC->chat_sock < 0) {
- close(WC->chat_sock);
- WC->chat_sock = (-1);
- }
-
- /* WebCit Chat works by having transmit, receive, and refresh
- * frames. Load the frameset.
- */
- do_template("chatframeset");
- return;
-}
-
-
-/*
- *
- */
-void page_popup(void)
-{
- char buf[SIZ];
- char pagefrom[SIZ];
-
- while (serv_puts("GEXP"), serv_getln(buf, sizeof buf), buf[0]=='1') {
-
- extract_token(pagefrom, &buf[4], 3, '|', sizeof pagefrom);
-
- wprintf("
");
- wprintf("");
- wprintf(_("Instant message from "));
- escputs(pagefrom);
- wprintf(" |
");
- fmout("LEFT");
- wprintf(" |
"
- ""
- " |
"
- "
\n");
- }
-
- WC->HaveInstantMessages = 0;
-}
-
-
-
-/*
- * Support function for chat -- make sure the chat socket is connected
- * and in chat mode.
- */
-int setup_chat_socket(void) {
- char buf[SIZ];
- int i;
- int good_chatmode = 0;
-
- if (WC->chat_sock < 0) {
-
- if (!strcasecmp(ctdlhost, "uds")) {
- /* unix domain socket */
- sprintf(buf, "%s/citadel.socket", ctdlport);
- WC->chat_sock = uds_connectsock(buf);
- }
- else {
- /* tcp socket */
- WC->chat_sock = tcp_connectsock(ctdlhost, ctdlport);
- }
-
- if (WC->chat_sock < 0) {
- return(errno);
- }
-
- /* 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_getln(buf, sizeof buf);
- if (buf[0] == '2') {
- serv_printf("USER %s", WC->wc_username);
- serv_getln(buf, sizeof buf);
- if (buf[0] == '3') {
- serv_printf("PASS %s", WC->wc_password);
- serv_getln(buf, sizeof buf);
- if (buf[0] == '2') {
- serv_printf("GOTO %s", WC->wc_roomname);
- serv_getln(buf, sizeof buf);
- if (buf[0] == '2') {
- serv_puts("CHAT");
- serv_getln(buf, sizeof buf);
- if (buf[0] == '8') {
- good_chatmode = 1;
- }
- }
- }
- }
+ /** JavaScript function to alert the user that popups are probably blocked */
+ /** First, do the check as part of our page load. */
+ serv_puts("NOOP");
+ len = serv_getln(buf, sizeof buf);
+ if ((len >= 3) && (buf[3] == '*')) {
+ if ((time(NULL) - WC->last_pager_check) > 60) {
+ return 1;
}
-
- /* Unswap the sockets. */
- i = WC->serv_sock;
- WC->serv_sock = WC->chat_sock;
- WC->chat_sock = i;
-
- if (!good_chatmode) close(WC->serv_sock);
-
}
- return(0);
+ return 0;
+ /* Then schedule it to happen again a minute from now if the user is idle. */
}
+void ajax_send_instant_message(void) {
+ char recp[256];
+ char buf[256];
-/*
- * 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, 0, 0, 0, 0, 0);
-
- wprintf("Content-type: text/html; charset=utf-8\n");
- wprintf("\n");
- wprintf("\n"
- "\n"
- "
\n"
- "\n"
-
- "\n"
- );
-
- if (setup_chat_socket() != 0) {
- wprintf(_("An error occurred while setting up the chat socket."));
- wprintf("\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_getln(buf, sizeof buf);
-
- if (!strcmp(buf, "000")) {
- strcpy(buf, ":|");
- strcat(buf, _("Now 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");
- }
+ safestrncpy(recp, bstr("recp"), sizeof recp);
- } while ( (got_data) && (!end_chat_now) );
-
- if (end_chat_now) {
- close(WC->chat_sock);
- WC->chat_sock = (-1);
- wprintf("
\n");
- }
-
- if (strlen(output_data) > 0) {
-
- if (output_data[strlen(output_data)-1] == '\n') {
- output_data[strlen(output_data)-1] = 0;
- }
-
- /* Output our fun to the other frame. */
- wprintf("
last_chat_user)) {
- wprintf("
"
- );
-
- }
-
- wprintf("
");
-
- wprintf("");
-
- if (!strcasecmp(cl_user, ":")) {
- wprintf("");
- }
-
- if (strcasecmp(cl_user, WC->last_chat_user)) {
- wprintf("");
-
- if (!strcasecmp(cl_user, WC->wc_username)) {
- wprintf("");
- }
- else {
- wprintf("");
- }
- jsescputs(cl_user);
-
- wprintf(": ");
- }
- else {
- wprintf(" ");
- }
- jsescputs(cl_text);
- if (!strcasecmp(cl_user, ":")) {
- wprintf("");
- }
-
- wprintf(" |
");
- wprintf("'); \n");
-
- strcpy(WC->last_chat_user, cl_user);
- }
- }
+ serv_printf("SEXP %s|-", recp);
+ serv_getln(buf, sizeof buf);
- wprintf("parent.chat_transcript.scrollTo(999999,999999);\">\n");
+ if (buf[0] == '4') {
+ text_to_server(bstr("msg"));
+ serv_puts("000");
}
- free(output_data);
-
- wprintf("