X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fclient_chat.c;h=c86914f02bc6e80574c87df9e142f79aab05f2ce;hb=4eb74b26380dfde31c86c685f0589e0c653aebf0;hp=5b1351f7262f680919c403c1df71d66149a149fa;hpb=4f0a46fc946ddc739758c6be5532543a4fff3c2b;p=citadel.git diff --git a/citadel/client_chat.c b/citadel/client_chat.c index 5b1351f72..c86914f02 100644 --- a/citadel/client_chat.c +++ b/citadel/client_chat.c @@ -4,6 +4,21 @@ * front end for chat mode * (the "single process" version - no more fork() anymore) * + * Copyright (c) 1987-2009 by the citadel.org team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "sysdep.h" @@ -32,13 +47,13 @@ #include #endif #include +#include #include "citadel.h" #include "citadel_ipc.h" #include "client_chat.h" #include "commands.h" #include "routines.h" #include "citadel_decls.h" -#include "tools.h" #include "rooms.h" #include "messages.h" #ifndef HAVE_SNPRINTF @@ -49,7 +64,7 @@ #define MIN(a, b) ((a) < (b) ? (a) : (b)) extern char temp[]; -void getline(char *, int); +void ctdl_getline(char *, int); char last_paged[SIZ] = ""; @@ -71,8 +86,8 @@ void chatmode(CtdlIPC *ipc) struct timeval tv; int retval; - CtdlIPC_putline(ipc, "CHAT"); - CtdlIPC_getline(ipc, buf); + CtdlIPC_chat_send(ipc, "CHAT"); + CtdlIPC_chat_recv(ipc, buf); if (buf[0] != '8') { scr_printf("%s\n", &buf[4]); return; @@ -84,6 +99,7 @@ void chatmode(CtdlIPC *ipc) strcpy(buf, ""); strcpy(wbuf, ""); + strcpy(last_user, ""); color(BRIGHT_YELLOW); sln_printf_if("\n"); sln_printf("> "); @@ -102,7 +118,7 @@ void chatmode(CtdlIPC *ipc) /* If there's data from the server... */ if (FD_ISSET(CtdlIPC_getsockfd(ipc), &rfds)) { - CtdlIPC_getline(ipc, buf); + CtdlIPC_chat_recv(ipc, buf); recv_complete_line = 1; goto RCL; /* ugly, but we've gotta get out! */ } @@ -113,7 +129,7 @@ void chatmode(CtdlIPC *ipc) if ((ch == 10) || (ch == 13)) { send_complete_line = 1; } else if ((ch == 8) || (ch == 127)) { - if (strlen(wbuf) > 0) { + if (!IsEmptyStr(wbuf)) { wbuf[strlen(wbuf) - 1] = 0; sln_printf("%c %c", 8, 8); } @@ -126,7 +142,7 @@ void chatmode(CtdlIPC *ipc) /* if the user hit return, send the line */ RCL: if (send_complete_line) { - CtdlIPC_putline(ipc, wbuf); + CtdlIPC_chat_send(ipc, wbuf); last_transmit = time(NULL); strcpy(wbuf, ""); send_complete_line = 0; @@ -135,18 +151,18 @@ RCL: if (send_complete_line) { /* if it's time to word wrap, send a partial line */ if (strlen(wbuf) >= (77 - strlen(fullname))) { pos = 0; - for (a = 0; a < strlen(wbuf); ++a) { + for (a = 0; !IsEmptyStr(&wbuf[a]); ++a) { if (wbuf[a] == 32) pos = a; } if (pos == 0) { - CtdlIPC_putline(ipc, wbuf); + CtdlIPC_chat_send(ipc, wbuf); last_transmit = time(NULL); strcpy(wbuf, ""); send_complete_line = 0; } else { wbuf[pos] = 0; - CtdlIPC_putline(ipc, wbuf); + CtdlIPC_chat_send(ipc, wbuf); last_transmit = time(NULL); strcpy(wbuf, &wbuf[pos + 1]); } @@ -165,17 +181,17 @@ RCL: if (send_complete_line) { * exiting chat. This little dialog forces * everything to be hunky-dory. */ - CtdlIPC_putline(ipc, "ECHO __ExitingChat__"); + CtdlIPC_chat_send(ipc, "ECHO __ExitingChat__"); do { - CtdlIPC_getline(ipc, buf); + CtdlIPC_chat_recv(ipc, buf); } while (strcmp(buf, "200 __ExitingChat__")); return; } if (num_parms(buf) >= 2) { - extract(c_user, buf, 0); - extract(c_text, buf, 1); + extract_token(c_user, buf, 0, '|', sizeof c_user); + extract_token(c_text, buf, 1, '|', sizeof c_text); if (num_parms(buf) > 2) { - extract(c_room, buf, 2); + extract_token(c_room, buf, 2, '|', sizeof c_room); scr_printf("Got room %s\n", c_room); } if (strcasecmp(c_text, "NOOP")) { @@ -217,7 +233,7 @@ RCL: if (send_complete_line) { * server to prevent session timeout. */ if ((time(NULL) - last_transmit) >= S_KEEPALIVE) { - CtdlIPC_putline(ipc, "NOOP"); + CtdlIPC_chat_send(ipc, "NOOP"); last_transmit = time(NULL); } @@ -225,7 +241,7 @@ RCL: if (send_complete_line) { } /* - * send an express message + * send an instant message */ void page_user(CtdlIPC *ipc) { @@ -239,8 +255,8 @@ void page_user(CtdlIPC *ipc) if (ipc->ServInfo.paging_level == 0) { newprompt("Message: ", msg, 69); snprintf(buf, sizeof buf, "SEXP %s|%s", touser, msg); - CtdlIPC_putline(ipc, buf); - CtdlIPC_getline(ipc, buf); + CtdlIPC_chat_send(ipc, buf); + CtdlIPC_chat_recv(ipc, buf); if (!strncmp(buf, "200", 3)) { strcpy(last_paged, touser); } @@ -250,29 +266,29 @@ void page_user(CtdlIPC *ipc) /* new server -- use extended paging */ else if (ipc->ServInfo.paging_level >= 1) { snprintf(buf, sizeof buf, "SEXP %s||", touser); - CtdlIPC_putline(ipc, buf); - CtdlIPC_getline(ipc, buf); + CtdlIPC_chat_send(ipc, buf); + CtdlIPC_chat_recv(ipc, buf); if (buf[0] != '2') { scr_printf("%s\n", &buf[4]); return; } - if (client_make_message(ipc, temp, touser, 0, 0, 0, NULL) != 0) { + if (client_make_message(ipc, temp, touser, 0, 0, 0, NULL, 0) != 0) { scr_printf("No message sent.\n"); return; } pagefp = fopen(temp, "r"); unlink(temp); snprintf(buf, sizeof buf, "SEXP %s|-", touser); - CtdlIPC_putline(ipc, buf); - CtdlIPC_getline(ipc, buf); + CtdlIPC_chat_send(ipc, buf); + CtdlIPC_chat_recv(ipc, buf); if (buf[0] == '4') { strcpy(last_paged, touser); while (fgets(buf, sizeof buf, pagefp) != NULL) { buf[strlen(buf) - 1] = 0; - CtdlIPC_putline(ipc, buf); + CtdlIPC_chat_send(ipc, buf); } fclose(pagefp); - CtdlIPC_putline(ipc, "000"); + CtdlIPC_chat_send(ipc, "000"); scr_printf("Message sent.\n"); } else { scr_printf("%s\n", &buf[4]);