]> code.citadel.org Git - citadel.git/blobdiff - citadel/citadel.c
* Removed the NETF command and the UI elements which call it. We haven't had the...
[citadel.git] / citadel / citadel.c
index c8c05146ceca3f6425eb2903e8a749803a7fd8d6..5dca5cceeb0e233efc73564a75fe267e20c9d3b1 100644 (file)
@@ -32,7 +32,7 @@
 #include <pwd.h>
 #include <stdarg.h>
 #include <errno.h>
-
+#include <libcitadel.h>
 #include "citadel.h"
 #include "citadel_ipc.h"
 #include "axdefs.h"
@@ -45,7 +45,6 @@
 #include "client_chat.h"
 #include "client_passwords.h"
 #include "citadel_decls.h"
-#include "tools.h"
 #include "sysdep.h"
 #ifndef HAVE_SNPRINTF
 #include "snprintf.h"
@@ -63,7 +62,7 @@
 
 int rordercmp(struct ctdlroomlisting *r1, struct ctdlroomlisting *r2);
 
-struct march *march = NULL;
+march *marchptr = NULL;
 
 /* globals associated with the client program */
 char temp[PATH_MAX];           /* Name of general-purpose temp file */
@@ -104,7 +103,6 @@ char curr_floor = 0;                /* number of current floor */
 char floorlist[128][SIZ];      /* names of floors */
 int termn8 = 0;                        /* Set to nonzero to cause a logoff */
 int secure;                    /* Set to nonzero when wire is encrypted */
-int can_do_msg4 = 0;           /* Set to nonzero if the server can handle MSG4 commands */
 
 extern char instant_msgs;      /* instant messages waiting! */
 extern int rc_ansi_color;      /* ansi color value from citadel.rc */
@@ -115,13 +113,12 @@ int enable_syslog = 0;
 
 
 /*
- * lprintf()  ...   Write logging information; 
+ * CtdlLogPrintf()  ...   Write logging information; 
  *                  simple here to have the same 
  *                  symbols in the client.
  */
-enum LogLevel {CTDL_EMERG};
 
-void lprintf(enum LogLevel loglevel, const char *format, ...) {   
+void CtdlLogPrintf(enum LogLevel loglevel, const char *format, ...) {   
        va_list arg_ptr;
 
        va_start(arg_ptr, format);
@@ -241,8 +238,8 @@ void userlist(CtdlIPC *ipc, char *patn)
                return;
        }
 
-       pprintf("       User Name           Num  L  LastCall  Calls Posts\n");
-       pprintf("------------------------- ----- - ---------- ----- -----\n");
+       pprintf("       User Name           Num  L Last Visit Logins Messages\n");
+       pprintf("------------------------- ----- - ---------- ------ --------\n");
        if (listing != NULL) while (!IsEmptyStr(listing)) {
                extract_token(buf, listing, 0, '\n', sizeof buf);
                remove_token(listing, 0, '\n');
@@ -259,7 +256,7 @@ void userlist(CtdlIPC *ipc, char *patn)
                               (tmbuf.tm_mon + 1),
                               tmbuf.tm_mday,
                               (tmbuf.tm_year + 1900));
-                       pprintf("%5ld %5ld\n", extract_long(buf, 4), extract_long(buf, 5));
+                       pprintf("%6ld %8ld\n", extract_long(buf, 4), extract_long(buf, 5));
                    }
 
                }
@@ -293,18 +290,18 @@ void remove_march(char *roomname, int floornum)
 {
        struct march *mptr, *mptr2;
 
-       if (march == NULL)
+       if (marchptr == NULL)
                return;
 
-       if ((!strcasecmp(march->march_name, roomname))
-           || ((!strcasecmp(roomname, "_FLOOR_")) && (march->march_floor == floornum))) {
-               mptr = march->next;
-               free(march);
-               march = mptr;
+       if ((!strcasecmp(marchptr->march_name, roomname))
+           || ((!strcasecmp(roomname, "_FLOOR_")) && (marchptr->march_floor == floornum))) {
+               mptr = marchptr->next;
+               free(marchptr);
+               marchptr = mptr;
                return;
        }
-       mptr2 = march;
-       for (mptr = march; mptr != NULL; mptr = mptr->next) {
+       mptr2 = marchptr;
+       for (mptr = marchptr; mptr != NULL; mptr = mptr->next) {
 
                if ((!strcasecmp(mptr->march_name, roomname))
                    || ((!strcasecmp(roomname, "_FLOOR_"))
@@ -528,9 +525,9 @@ void gotonext(CtdlIPC *ipc)
        /* Check to see if the march-mode list is already allocated.
         * If it is, pop the first room off the list and go there.
         */
-       if (march == NULL) {
+       if (marchptr == NULL) {
                r = CtdlIPCKnownRooms(ipc, SubscribedRoomsWithNewMessages,
-                                       AllFloors, &march, buf);
+                                       AllFloors, &marchptr, buf);
 
 /* add _BASEROOM_ to the end of the march list, so the user will end up
  * in the system base room (usually the Lobby>) at the end of the loop
@@ -540,10 +537,10 @@ void gotonext(CtdlIPC *ipc)
                mptr->march_order = 0;
                mptr->march_floor = 0;
                strcpy(mptr->march_name, "_BASEROOM_");
-               if (march == NULL) {
-                       march = mptr;
+               if (marchptr == NULL) {
+                       marchptr = mptr;
                } else {
-                       mptr2 = march;
+                       mptr2 = marchptr;
                        while (mptr2->next != NULL)
                                mptr2 = mptr2->next;
                        mptr2->next = mptr;
@@ -554,8 +551,8 @@ void gotonext(CtdlIPC *ipc)
  */
                remove_march(room_name, 0);
        }
-       if (march != NULL) {
-               strcpy(next_room, pop_march(curr_floor, march));
+       if (marchptr != NULL) {
+               strcpy(next_room, pop_march(curr_floor, marchptr));
        } else {
                strcpy(next_room, "_BASEROOM_");
        }
@@ -657,7 +654,7 @@ void gotofloor(CtdlIPC *ipc, char *towhere, int mode)
                scr_printf("No floor '%s'.\n", towhere);
                return;
        }
-       for (mptr = march; mptr != NULL; mptr = mptr->next) {
+       for (mptr = marchptr; mptr != NULL; mptr = mptr->next) {
                if ((mptr->march_floor) == tofloor) {
                        gf_toroom(ipc, mptr->march_name, mode);
                        return;
@@ -1022,11 +1019,12 @@ void system_info(CtdlIPC *ipc)
 
        scr_printf("You are connected to %s (%s) @%s\n", ipc->ServInfo.nodename, ipc->ServInfo.humannode, ipc->ServInfo.fqdn);
        scr_printf("running %s with text client v%.2f,\n", ipc->ServInfo.software, (float)REV_LEVEL/100);
+       scr_printf("server build %s,\n", ipc->ServInfo.svn_revision, (float)REV_LEVEL/100);
     scr_printf("and located in %s.\n", ipc->ServInfo.site_location);
     scr_printf("Connected users %d / Active users %d / Highest message #%ld\n", mrtg_users, mrtg_active_users, mrtg_himessage);
     scr_printf("Server uptime: %s\n", mrtg_server_uptime);
     scr_printf("Your system administrator is %s.\n", ipc->ServInfo.sysadm);
-    scr_printf("Copyright (C)1987-2007 by the Citadel development team\n");
+    scr_printf("Copyright (C)1987-2009 by the Citadel development team\n");
 }
 
 /*
@@ -1147,6 +1145,14 @@ void get_serv_info(CtdlIPC *ipc, char *supplied_hostname)
                 /* Look up the , in the bible if you're confused */
                 (locate_host(ipc, buf), buf), buf);
 
+       /* Indicate to the server that we prefer to decode Base64 and
+        * quoted-printable on the client side.
+        */
+       if ((CtdlIPCSpecifyPreferredFormats(ipc, buf, "dont_decode") / 100 ) != 2) {
+               scr_printf("ERROR: Extremely old server; MSG4 framework not supported.\n");
+               logoff(ipc, 0);
+       }
+
        /*
         * Tell the server what our preferred content formats are.
         *
@@ -1155,8 +1161,9 @@ void get_serv_info(CtdlIPC *ipc, char *supplied_hostname)
         * isn't really all that great, it's probably better to just go with
         * the plain text when we have it available.
         */
-       if ((CtdlIPCSpecifyPreferredFormats(ipc, buf, "text/plain|text/html") / 100 )== 2) {
-               can_do_msg4 = 1;
+       if ((CtdlIPCSpecifyPreferredFormats(ipc, buf, "text/plain|text/html") / 100 ) != 2) {
+               scr_printf("ERROR: Extremely old server; MSG4 framework not supported.\n");
+               logoff(ipc, 0);
        }
 }
 
@@ -1411,8 +1418,7 @@ int main(int argc, char **argv)
        eCrashParameters params;
 //     eCrashSymbolTable symbol_table;
 #endif
-       CtdlInitBase64Table();
-       calc_dirs_n_files(relh, home, relhome, ctdldir);
+       calc_dirs_n_files(relh, home, relhome, ctdldir, 0);
 
 #ifdef HAVE_BACKTRACE
        bzero(&params, sizeof(params));
@@ -2208,10 +2214,6 @@ NEWUSR:  if (IsEmptyStr(rc_password)) {
                                deletefile(ipc);
                                break;
 
-                       case 53:
-                               netsendfile(ipc);
-                               break;
-
                        case 54:
                                movefile(ipc);
                                break;
@@ -2292,6 +2294,10 @@ NEWUSR:  if (IsEmptyStr(rc_password)) {
                                do_pop3client_configuration(ipc);
                                break;
 
+                       case 128:           /* Configure XML/RSS feed retrieval */
+                               do_rssclient_configuration(ipc);
+                               break;
+
                        default: /* allow some math on the command */
                                /* commands 100... to 100+MAX_EDITORS-1 will
                                   call the appropriate editor... in other
@@ -2310,8 +2316,8 @@ TERMN8:   scr_printf("%s logged out.", fullname);
        termn8 = 0;
        color(ORIGINAL_PAIR);
        scr_printf("\n");
-       while (march != NULL) {
-               remove_march(march->march_name, 0);
+       while (marchptr != NULL) {
+               remove_march(marchptr->march_name, 0);
        }
        if (mcmd == 30) {
                sln_printf("\n\nType 'off' to disconnect, or next user...\n");
@@ -2331,3 +2337,4 @@ TERMN8:   scr_printf("%s logged out.", fullname);
        goto GSTA;
 
 }      /* end main() */
+