X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fpaging.c;h=4b3dc217a716983c01875f6c31fbf74fd74741b6;hb=HEAD;hp=0932db026f6fc84f756de5455980816cf7869b7b;hpb=bedf5c0b955473d8ad02eaf628e8d209f534f2b6;p=citadel.git
diff --git a/webcit/paging.c b/webcit/paging.c
index 0932db026..f022c48bc 100644
--- a/webcit/paging.c
+++ b/webcit/paging.c
@@ -1,501 +1,146 @@
-/*
- * $Id$
- */
-/**
- * \defgroup PageFunc Functions which implement the chat and paging facilities.
- * \ingroup ClientPower
- */
-/*@{*/
+// This module handles instant message related functions.
+//
+// Copyright (c) 1996-2023 by the citadel.org team
+//
+// This program is open source software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License, version 3.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
#include "webcit.h"
-/**
- * \brief display the form for paging (x-messaging) another user
- */
-void display_page(void)
-{
+// display the form for paging (x-messaging) another user
+void display_page(void) {
char recp[SIZ];
strcpy(recp, bstr("recp"));
- output_headers(1, 1, 2, 0, 0, 0);
- wprintf("
\n"
- );
-
- wprintf("
"
- "
\n");
-
- wprintf(_("Send an instant message to: "));
+ output_headers(1, 1, 1, 0, 0, 0);
+ wc_printf(" \n");
+ wc_printf(" ");
+ wc_printf(_("Send instant message"));
+ wc_printf("");
+ wc_printf("\n");
+
+ wc_printf("\n");
+
+ wc_printf(" \n");
+
+ wc_printf(_("Send an instant message to: "));
escputs(recp);
- wprintf(" \n");
+ wc_printf(" \n");
- wprintf("\n");
- wprintf(" |
\n");
+ wc_printf("\n");
+ wc_printf(" |
\n");
wDumpContent(1);
}
-/**
- * \brief page another user
- */
-void page_user(void)
-{
+
+// page another user
+void page_user(void) {
char recp[256];
- char buf[256];
+ StrBuf *Line;
safestrncpy(recp, bstr("recp"), sizeof recp);
- if (strlen(bstr("send_button")) == 0) {
- safestrncpy(WC->ImportantMessage,
- _("Message was not sent."),
- sizeof WC->ImportantMessage
- );
- } else {
+ 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') {
+ StrBuf_ServGetln(Line);
+ if (GetServerStatusMsg(Line, NULL, 0, 0) == 4) {
+ char buf[256];
text_to_server(bstr("msgtext"));
serv_puts("000");
- stresc(buf, recp, 0, 0);
- snprintf(WC->ImportantMessage,
- sizeof WC->ImportantMessage,
- "%s%s.",
- _("Message has been sent to "),
- buf
- );
- }
- else {
- safestrncpy(WC->ImportantMessage, &buf[4], sizeof WC->ImportantMessage);
+ stresc(buf, 256, recp, 0, 0);
+ AppendImportantMessage(buf, -1);
+ AppendImportantMessage(_("Message has been sent to "), -1);
}
}
- who();
+ url_do_template();
}
-
-/**
- * \brief multiuser chat
- */
-void do_chat(void)
-{
+// 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.
+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. (This isn't AJAX but the headers
- * output by begin_ajax_response() happen to be the ones we need.)
- */
- begin_ajax_response();
- do_template("chatframeset");
- end_ajax_response();
- return;
-}
-
-
-/**
- * \brief 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 page_popup(void)
-{
- char buf[SIZ];
-
- /** JavaScript function to alert the user that popups are probably blocked */
- wprintf("\n",
- _("You have one or more instant messages waiting, but the Citadel Instant Messenger "
- "window failed to open. This is probably because you have a popup blocker "
- "installed. Please configure your popup blocker to allow popups from this site "
- "if you wish to receive instant messages.")
- );
-
- /** First, do the check as part of our page load. */
+ // JavaScript function to alert the user that popups are probably blocked
+ // First, do the check as part of our page load.
serv_puts("NOOP");
- serv_getln(buf, sizeof buf);
- if (buf[3] == '*') {
+ len = serv_getln(buf, sizeof buf);
+ if ((len >= 3) && (buf[3] == '*')) {
if ((time(NULL) - WC->last_pager_check) > 60) {
- wprintf(""
- );
- }
- }
-
- /** Then schedule it to happen again a minute from now if the user is idle. */
- wprintf(" "
- );
-}
-
-
-
-/**
- * \brief 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;
- }
- }
- }
- }
+ 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];
-/**
- * \brief 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");
- }
-
- } 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;
- }
+ safestrncpy(recp, bstr("recp"), sizeof recp);
- /** 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_fullname)) {
- 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("