\n");
wDumpContent(1);
}
-/**
- * \brief page another user
+/*
+ * page another user
*/
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");
- }
- else {
- wprintf("
%s\n", &buf[4]);
+ stresc(buf, 256, recp, 0, 0);
+ AppendImportantMessage(buf, -1);
+ AppendImportantMessage(_("Message has been sent to "), -1);
}
}
-
- if (!strcasecmp(closewin, "yes")) {
- wprintf("
");
- wprintf(_("[ close window ]"));
- wprintf("\n");
- }
- wDumpContent(1);
+ url_do_template();
}
-/**
- * \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", 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
+/*
+ * 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 */
/** 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(""
- );
+ return 1;
}
}
-
- /** Then schedule it to happen again a minute from now if the user is idle. */
- wprintf(" \n"
- );
+ 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 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;
- }
- }
- }
- }
- }
-
- /** Unswap the sockets. */
- i = WC->serv_sock;
- WC->serv_sock = WC->chat_sock;
- WC->chat_sock = i;
-
- if (!good_chatmode) close(WC->serv_sock);
+ safestrncpy(recp, bstr("recp"), sizeof recp);
- }
- 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);
-
- 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;
- }
-
- /** 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("