\n");
- wprintf("
"
- "
\n");
+ wc_printf("\n");
- wprintf(_("Send an instant message to: "));
+ 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
+/*
+ * page another user
*/
void page_user(void)
{
char recp[256];
- char buf[256];
+ StrBuf *Line;
safestrncpy(recp, bstr("recp"), sizeof recp);
if (!havebstr("send_button")) {
- safestrncpy(WC->ImportantMessage,
- _("Message was not sent."),
- sizeof WC->ImportantMessage
- );
+ 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, 256, 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);
+ AppendImportantMessage(buf, -1);
+ AppendImportantMessage(_("Message has been sent to "), -1);
}
}
@@ -95,406 +95,27 @@ void page_user(void)
-/**
- * \brief multiuser chat
- */
-void do_chat(void)
-{
- char buf[SIZ];
-
- /** First, check to make sure we're still allowed in this room. */
- serv_printf("GOTO %s", ChrPtr(WC->wc_roomname));
- serv_getln(buf, sizeof buf);
- if (buf[0] != '2') {
- StrBuf *Buf;
- Buf = NewStrBufPlain(HKEY("_BASEROOM_"));
- smart_goto(Buf);
- FreeStrBuf(&Buf);
- 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", NULL);
- end_ajax_response();
- return;
-}
-
-
-/**
- * \brief display page popup
+/*
+ * 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)
+int Conditional_PAGE_WAITING(StrBuf *Target, WCTemplputParams *TP)
{
int len;
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. */
serv_puts("NOOP");
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", ChrPtr(WC->wc_username));
- serv_getln(buf, sizeof buf);
- if (buf[0] == '3') {
- serv_printf("PASS %s", ChrPtr(WC->wc_password));
- serv_getln(buf, sizeof buf);
- if (buf[0] == '2') {
- serv_printf("GOTO %s", ChrPtr(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;
- }
- }
- }
- }
- }
-
- /** 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);
-}
-
-
-
-/**
- * \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);
-
- hprintf("Content-type: text/html; charset=utf-8\r\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) && (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 (!IsEmptyStr(output_data)) {
- int len;
- len = strlen(output_data);
- if (output_data[len-1] == '\n') {
- output_data[len-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, ChrPtr(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);
- }
- }
-
- wprintf("parent.chat_transcript.scrollTo(999999,999999);\">\n");
- }
-
- free(output_data);
-
- wprintf("