Ultra-simplification of the build system for the text client.
[citadel.git] / textclient / src / include / citadel_ipc.h
diff --git a/textclient/src/include/citadel_ipc.h b/textclient/src/include/citadel_ipc.h
deleted file mode 100644 (file)
index ab054dd..0000000
+++ /dev/null
@@ -1,514 +0,0 @@
-
-#define        UDS                     "_UDS_"
-#ifdef __CYGWIN__
-#define DEFAULT_HOST           "localhost"
-#else
-#define DEFAULT_HOST           UDS
-#endif
-#define DEFAULT_PORT           "504"
-
-#include <libcitadel.h>
-#include <limits.h>
-#ifdef HAVE_PTHREAD_H
-#include <pthread.h>
-#endif
-#ifdef HAVE_OPENSSL
-#include <openssl/ssl.h>
-#include <openssl/err.h>
-#include <openssl/rand.h>
-#endif
-
-#define CLIENT_VERSION          918
-#define CLIENT_TYPE               0
-//copycat of: /#include "server.h"
-
-#define ROOMNAMELEN    128     /* The size of a roomname string */
-
-// copycat of citadel_dirs.h
-void calc_dirs_n_files(int relh, int home, const char *relhome, char  *ctdldir, int dbg);
-
-//copycat of: /#include "citadel.h"
-/* commands we can send to the stty_ctdl() routine */
-#define SB_NO_INTR      0               /* set to Citadel client mode, i/q disabled */
-#define SB_YES_INTR     1               /* set to Citadel client mode, i/q enabled */
-#define SB_SAVE         2               /* save settings */
-#define SB_RESTORE      3               /* restore settings */
-#define SB_LAST         4               /* redo the last command sent */
-
-#define UGLISTLEN      100     /* you get a ungoto list of this size */
-
-#define USERNAME_SIZE   64      /* The size of a username string */
-#define MAX_EDITORS     5       /* # of external editors supported */
-                                /* MUST be at least 1 */
-
-#define NONCE_SIZE     128     /* Added by <bc> to allow for APOP auth 
-                                * it is BIG becuase there is a hostname
-                                * in the nonce, as per the APOP RFC.
-                                */
-
-/* 
- * S_KEEPALIVE is a watchdog timer.  It is used to send "keep
- * alive" messages to the server to prevent the server from assuming the
- * client is dead and terminating the session.  30 seconds is the recommended
- * value; I can't think of any good reason to change it.
- */
-#define S_KEEPALIVE    30
-
-#define READ_HEADER    2
-#define READ_MSGBODY   3
-
-#define NUM_CONFIGS    72
-
-
-
-/*
- * This struct stores a list of rooms with new messages which the client
- * fetches from the server.  This allows the client to "march" through
- * relevant rooms without having to ask the server each time where to go next.
- */
-typedef struct ExpirePolicy ExpirePolicy;
-struct ExpirePolicy {
-       int expire_mode;
-       int expire_value;
-};
-
-typedef struct march march;
-struct march {
-       struct march *next;
-       char march_name[ROOMNAMELEN];
-       unsigned int march_flags;
-       char march_floor;
-       char march_order;
-       unsigned int march_flags2;
-       int march_access;
-};
-
-/*
- * This is NOT the same 'struct ctdluser' from the server.
- */
-typedef struct ctdluser ctdluser;
-struct ctdluser {                      // User record
-       int version;                    // Cit vers. which created this rec
-       uid_t uid;                      // Associate with a unix account?
-       char password[32];              // password
-       unsigned flags;                 // See US_ flags below
-       long timescalled;               // Total number of logins
-       long posted;                    // Number of messages ever submitted
-       uint8_t axlevel;                // Access level
-       long usernum;                   // User number (never recycled)
-       time_t lastcall;                // Date/time of most recent login
-       int USuserpurge;                // Purge time (in days) for user
-       char fullname[64];              // Display name (primary identifier)
-       char emailaddrs[512];           // Internet email addresses
-};
-
-typedef struct ctdlroom ctdlroom;
-struct ctdlroom {
-       char QRname[ROOMNAMELEN];       /* Name of room                     */
-       char QRpasswd[10];              /* Only valid if it's a private rm  */
-       long QRroomaide;                /* User number of room aide         */
-       long QRhighest;                 /* Highest message NUMBER in room   */
-       time_t QRgen;                   /* Generation number of room        */
-       unsigned QRflags;               /* See flag values below            */
-       char QRdirname[15];             /* Directory name, if applicable    */
-       long QRinfo;                    /* Info file update relative to msgs*/
-       char QRfloor;                   /* Which floor this room is on      */
-       time_t QRmtime;                 /* Date/time of last post           */
-       struct ExpirePolicy QRep;       /* Message expiration policy        */
-       long QRnumber;                  /* Globally unique room number      */
-       char QRorder;                   /* Sort key for room listing order  */
-       unsigned QRflags2;              /* Additional flags                 */
-       int QRdefaultview;              /* How to display the contents      */
-};
-
-
-/////////////
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Quick and dirty hack; we don't want to use malloc() in C++ */
-#ifdef __cplusplus
-#define ialloc(t)      new t()
-#define ifree(o)       delete o
-#else
-#define ialloc(t)      malloc(sizeof(t))
-#define ifree(o)       free(o);
-#endif
-
-struct CtdlServInfo {
-       int pid;
-       char nodename[32];
-       char humannode[64];
-       char fqdn[64];
-       char software[64];
-       int rev_level;
-       char site_location[64];
-       char sysadm[64];
-       char moreprompt[256];
-       int ok_floors;
-       int paging_level;
-       int supports_qnop;
-       int supports_ldap;
-       int newuser_disabled;
-       char default_cal_zone[256];
-       double load_avg;
-       double worker_avg;
-       int thread_count;
-       int has_sieve;
-       int fulltext_enabled;
-       char svn_revision[256];
-       int guest_logins;
-};
-
-/*
- * This class is responsible for the server connection
- */
-typedef struct _CtdlIPC {
-       struct CtdlServInfo ServInfo;   /* The server info for this connection */
-
-#if defined(HAVE_OPENSSL)
-       SSL *ssl;                       /* NULL if not encrypted, non-NULL otherwise */
-#endif
-
-#if defined(HAVE_PTHREAD_H)
-       pthread_mutex_t mutex;          /* Fast mutex, call CtdlIPC_lock() or CtdlIPC_unlock() to use */
-#endif
-
-       int sock;                       /* Socket for connection to server, or -1 if not connected */
-       int isLocal;                    /* 1 if server is local, 0 otherwise or if not connected */
-       int downloading;                /* 1 if a download is open on the server, 0 otherwise */
-       int uploading;                  /* 1 if an upload is open on the server, 0 otherwise */
-       time_t last_command_sent;       /* Time the last command was sent to the server */
-
-       char *Buf;                      /* Our buffer for linebuffered read. */
-       size_t BufSize;
-       size_t BufUsed;
-       char *BufPtr;
-
-       void (*network_status_cb)(int state);   /* Callback for update on whether the IPC is locked */
-       char ip_hostname[256];          /* host name of server to which we are connected (if network) */
-       char ip_address[64];            /* IP address of server to which we are connected (if network) */
-
-} CtdlIPC;
-
-/* C constructor */
-CtdlIPC* CtdlIPC_new(int argc, char **argv, char *hostbuf, char *portbuf);
-/* C destructor */
-void CtdlIPC_delete(CtdlIPC* ipc);
-/* Convenience destructor; also nulls out caller's pointer */
-void CtdlIPC_delete_ptr(CtdlIPC** pipc);
-/* Read a line from server, discarding newline, for chat, will go away */
-void CtdlIPC_chat_recv(CtdlIPC* ipc, char *buf);
-/* Write a line to server, adding newline, for chat, will go away */
-void CtdlIPC_chat_send(CtdlIPC* ipc, const char *buf);
-
-struct ctdlipcroom {
-       char RRname[ROOMNAMELEN];       /* Name of room */
-       long RRunread;                  /* Number of unread messages */
-       long RRtotal;                   /* Total number of messages in room */
-       char RRinfoupdated;             /* Nonzero if info was updated */
-       unsigned RRflags;               /* Various flags (see LKRN) */
-       unsigned RRflags2;              /* Various flags (see LKRN) */
-       long RRhighest;                 /* Highest message number in room */
-       long RRlastread;                /* Highest message user has read */
-       char RRismailbox;               /* Is this room a mailbox room? */
-       char RRaide;                    /* User can do aide commands in room */
-       long RRnewmail;                 /* Number of new mail messages */
-       char RRfloor;                   /* Which floor this room is on */
-       char RRcurrentview;             /* The user's current view for this room */
-       char RRdefaultview;             /* The default view for this room */
-};
-
-
-struct parts {
-       struct parts *next;
-       char number[16];                /* part number */
-       char name[PATH_MAX];            /* Name */
-       char filename[PATH_MAX];        /* Suggested filename */
-       char mimetype[SIZ];             /* MIME type */
-       char disposition[SIZ];          /* Content disposition */
-       unsigned long length;           /* Content length */
-};
-
-
-struct ctdlipcmessage {
-       char msgid[SIZ];                /* Original message ID */
-       char path[SIZ];                 /* Return path to sender */
-       char zaps[SIZ];                 /* Message ID that this supersedes */
-       char subject[SIZ];              /* Message subject */
-       char email[SIZ];                /* Email address of sender */
-       char author[SIZ];               /* Sender of message */
-       char recipient[SIZ];            /* Recipient of message */
-       char room[SIZ];                 /* Originating room */
-       struct parts *attachments;      /* Available attachments */
-       char *text;                     /* Message text */
-       int type;                       /* Message type */
-       time_t time;                    /* Time message was posted */
-       char nhdr;                      /* Suppress message header? */
-       char anonymous;                 /* An anonymous message */
-       char mime_chosen[SIZ];          /* Chosen MIME part to output */
-       char content_type[SIZ];         /* How would you like that? */
-       char references[SIZ];           /* Thread references */
-};
-
-
-struct ctdlipcfile {
-       char remote_name[PATH_MAX];     /* Filename on server */
-       char local_name[PATH_MAX];      /* Filename on client */
-       char description[80];           /* Description on server */
-       FILE *local_fd;                 /* Open file on client */
-       size_t size;                    /* Size of file in octets */
-       unsigned int upload:1;          /* uploading? 0 if downloading */
-       unsigned int complete:1;        /* Transfer has finished? */
-};
-
-
-struct ctdlipcmisc {
-       long newmail;                   /* Number of new Mail messages */
-       char needregis;                 /* Nonzero if user needs to register */
-       char needvalid;                 /* Nonzero if users need validation */
-};
-
-enum RoomList {
-       SubscribedRooms,
-       SubscribedRoomsWithNewMessages,
-       SubscribedRoomsWithNoNewMessages,
-       UnsubscribedRooms,
-       AllAccessibleRooms,
-       AllPublicRooms
-};
-#define AllFloors -1
-enum MessageList {
-       AllMessages,
-       OldMessages,
-       NewMessages,
-       LastMessages,
-       FirstMessages,
-       MessagesGreaterThan,
-       MessagesLessThan
-};
-enum MessageDirection {
-       ReadReverse = -1,
-       ReadForward = 1
-};
-extern char file_citadel_rc[PATH_MAX];
-extern char file_citadel_config[PATH_MAX];
-
-/* Shared Diffie-Hellman parameters */
-#define DH_P           "F6E33BD70D475906ABCFB368DA2D1E5611D57DFDAC6A10CD78F406D6952519C74E21FFDCC5A780B9359722AACC8036E4CD24D5F5165EAC9EF226DBD9BBCF678F8DDEE86386F1BC20E291A9854A513A2CA326B411DC92E38F2ED2FEB6A3B792F13DB6550371FDBAC5ECA373BE5050CA4905431CA86088737D52B36C8D13CE9CB4EEF4C910285035E8329DD07551A80B87775676DD1067395CCEE9040C9B8BF998C528B3772B4C590A2CF18C5E58929BFCB538A62638B7437A9C68572D15287E97692B0B1EC5444D9DAB6EB062D20B79CA005EC5035065567AFD1FEF9B251D74747C6065D8C8B6B0862D1EE03F3A244C429EADE0CCC5C3A4196F5CBF5AA01A9026EFB20AA90E462BD64620278F271905EB604F38E6CFAE412EAA6C468E3B58170909BC18662FE2053224F30BE4FDB93BF9FBF969D91A5427A0665AC7BD1C43701B991094C92F7A935063055617142164F02973EB4ED86DD74D2BBAB3CD3B28F7BBD8D9F925B0FE92F7F7D0568D783F9ECE7AF96FB5AF274B586924B64639733A73ACA8F2BD1E970DF51ADDD983F7F6361A2B0DC4F086DE26D8656EC8813DE4B74D6D57BC1E690AC2FF1682B7E16938565A41D1DC64C75ADB81DA4582613FC68C0FDD327D35E2CDF20D009465303773EF3870FBDB0985EE7002A95D7912BBCC78187C29DB046763B7FABFF44EABE820F8ED0D7230AA0AF24F428F82448345BC099B"
-#define DH_G           "2"
-#define DH_L           4096
-#define CIT_CIPHERS    "ALL:RC4+RSA:+SSLv2:+TLSv1:!MD5:@STRENGTH"      /* see ciphers(1) */
-
-int CtdlIPCNoop(CtdlIPC *ipc);
-int CtdlIPCEcho(CtdlIPC *ipc, const char *arg, char *cret);
-int CtdlIPCQuit(CtdlIPC *ipc);
-int CtdlIPCLogout(CtdlIPC *ipc);
-int CtdlIPCTryLogin(CtdlIPC *ipc, const char *username, char *cret);
-int CtdlIPCTryPassword(CtdlIPC *ipc, const char *passwd, char *cret);
-int CtdlIPCTryApopPassword(CtdlIPC *ipc, const char *response, char *cret);
-int CtdlIPCCreateUser(CtdlIPC *ipc, const char *username, int selfservice,
-               char *cret);
-int CtdlIPCChangePassword(CtdlIPC *ipc, const char *passwd, char *cret);
-int CtdlIPCKnownRooms(CtdlIPC *ipc, enum RoomList which, int floor,
-               struct march **listing, char *cret);
-int CtdlIPCGetConfig(CtdlIPC *ipc, struct ctdluser **uret, char *cret);
-int CtdlIPCSetConfig(CtdlIPC *ipc, struct ctdluser *uret, char *cret);
-int CtdlIPCGotoRoom(CtdlIPC *ipc, const char *room, const char *passwd,
-               struct ctdlipcroom **rret, char *cret);
-int CtdlIPCGetMessages(CtdlIPC *ipc, enum MessageList which, int whicharg,
-               const char *mtemplate, unsigned long **mret, char *cret);
-int CtdlIPCGetSingleMessage(CtdlIPC *ipc, long msgnum, int headers, int as_mime,
-               struct ctdlipcmessage **mret, char *cret);
-int CtdlIPCWhoKnowsRoom(CtdlIPC *ipc, char **listing, char *cret);
-int CtdlIPCServerInfo(CtdlIPC *ipc, char *cret);
-/* int CtdlIPCReadDirectory(CtdlIPC *ipc, struct ctdlipcfile **files, char *cret); */
-int CtdlIPCReadDirectory(CtdlIPC *ipc, char **listing, char *cret);
-int CtdlIPCSetLastRead(CtdlIPC *ipc, long msgnum, char *cret);
-int CtdlIPCInviteUserToRoom(CtdlIPC *ipc, const char *username, char *cret);
-int CtdlIPCKickoutUserFromRoom(CtdlIPC *ipc, const char *username, char *cret);
-int CtdlIPCGetRoomAttributes(CtdlIPC *ipc, struct ctdlroom **qret, char *cret);
-int CtdlIPCSetRoomAttributes(CtdlIPC *ipc, int forget, struct ctdlroom *qret,
-               char *cret);
-int CtdlIPCGetRoomAide(CtdlIPC *ipc, char *cret);
-int CtdlIPCSetRoomAide(CtdlIPC *ipc, const char *username, char *cret);
-int CtdlIPCPostMessage(CtdlIPC *ipc, int flag, int *subject_required, 
-                                          struct ctdlipcmessage *mr,
-                                          char *cret);
-int CtdlIPCRoomInfo(CtdlIPC *ipc, char **iret, char *cret);
-int CtdlIPCDeleteMessage(CtdlIPC *ipc, long msgnum, char *cret);
-int CtdlIPCMoveMessage(CtdlIPC *ipc, int copy, long msgnum,
-               const char *destroom, char *cret);
-int CtdlIPCDeleteRoom(CtdlIPC *ipc, int for_real, char *cret);
-int CtdlIPCCreateRoom(CtdlIPC *ipc, int for_real, const char *roomname,
-               int type, const char *password, int floor, char *cret);
-int CtdlIPCForgetRoom(CtdlIPC *ipc, char *cret);
-int CtdlIPCSystemMessage(CtdlIPC *ipc, const char *message, char **mret,
-               char *cret);
-int CtdlIPCNextUnvalidatedUser(CtdlIPC *ipc, char *cret);
-int CtdlIPCGetUserRegistration(CtdlIPC *ipc, const char *username, char **rret,
-               char *cret);
-int CtdlIPCValidateUser(CtdlIPC *ipc, const char *username, int axlevel,
-               char *cret);
-int CtdlIPCSetRoomInfo(CtdlIPC *ipc, int for_real, const char *info,
-               char *cret);
-int CtdlIPCUserListing(CtdlIPC *ipc, char *searchstring, char **list, char *cret);
-int CtdlIPCSetRegistration(CtdlIPC *ipc, const char *info, char *cret);
-int CtdlIPCMiscCheck(CtdlIPC *ipc, struct ctdlipcmisc *chek, char *cret);
-int CtdlIPCDeleteFile(CtdlIPC *ipc, const char *filename, char *cret);
-int CtdlIPCMoveFile(CtdlIPC *ipc, const char *filename, const char *destroom,
-               char *cret);
-int CtdlIPCNetSendFile(CtdlIPC *ipc, const char *filename,
-               const char *destnode, char *cret);
-int CtdlIPCOnlineUsers(CtdlIPC *ipc, char **listing, time_t *stamp, char *cret);
-int CtdlIPCFileDownload(CtdlIPC *ipc, const char *filename, void **buf,
-               size_t resume,
-               void (*progress_gauge_callback)(CtdlIPC*, unsigned long, unsigned long),
-               char *cret);
-int CtdlIPCAttachmentDownload(CtdlIPC *ipc, long msgnum, const char *part,
-               void **buf,
-               void (*progress_gauge_callback)(CtdlIPC*, unsigned long, unsigned long),
-               char *cret);
-int CtdlIPCImageDownload(CtdlIPC *ipc, const char *filename, void **buf,
-               void (*progress_gauge_callback)(CtdlIPC*, unsigned long, unsigned long),
-               char *cret);
-int CtdlIPCFileUpload(CtdlIPC *ipc, const char *save_as, const char *comment,
-               const char *path, 
-               void (*progress_gauge_callback)(CtdlIPC*, unsigned long, unsigned long),
-               char *cret);
-int CtdlIPCImageUpload(CtdlIPC *ipc, int for_real, const char *path,
-               const char *save_as,
-               void (*progress_gauge_callback)(CtdlIPC*, unsigned long, unsigned long),
-               char *cret);
-int CtdlIPCQueryUsername(CtdlIPC *ipc, const char *username, char *cret);
-int CtdlIPCFloorListing(CtdlIPC *ipc, char **listing, char *cret);
-int CtdlIPCCreateFloor(CtdlIPC *ipc, int for_real, const char *name,
-               char *cret);
-int CtdlIPCDeleteFloor(CtdlIPC *ipc, int for_real, int floornum, char *cret);
-int CtdlIPCEditFloor(CtdlIPC *ipc, int floornum, const char *floorname,
-               char *cret);
-int CtdlIPCIdentifySoftware(CtdlIPC *ipc, int developerid, int clientid,
-               int revision, const char *software_name, const char *hostname,
-               char *cret);
-int CtdlIPCSendInstantMessage(CtdlIPC *ipc, const char *username,
-               const char *text, char *cret);
-int CtdlIPCGetInstantMessage(CtdlIPC *ipc, char **listing, char *cret);
-int CtdlIPCEnableInstantMessageReceipt(CtdlIPC *ipc, int mode, char *cret);
-int CtdlIPCSetBio(CtdlIPC *ipc, char *bio, char *cret);
-int CtdlIPCGetBio(CtdlIPC *ipc, const char *username, char **listing,
-               char *cret);
-int CtdlIPCListUsersWithBios(CtdlIPC *ipc, char **listing, char *cret);
-int CtdlIPCStealthMode(CtdlIPC *ipc, int mode, char *cret);
-int CtdlIPCTerminateSession(CtdlIPC *ipc, int sid, char *cret);
-int CtdlIPCTerminateServerNow(CtdlIPC *ipc, char *cret);
-int CtdlIPCTerminateServerScheduled(CtdlIPC *ipc, int mode, char *cret);
-int CtdlIPCEnterSystemMessage(CtdlIPC *ipc, const char *filename, const char *text,
-               char *cret);
-int CtdlIPCChangeHostname(CtdlIPC *ipc, const char *hostname, char *cret);
-int CtdlIPCChangeRoomname(CtdlIPC *ipc, const char *roomname, char *cret);
-int CtdlIPCChangeUsername(CtdlIPC *ipc, const char *username, char *cret);
-time_t CtdlIPCServerTime(CtdlIPC *ipc, char *crert);
-int CtdlIPCAideGetUserParameters(CtdlIPC *ipc, const char *who, struct ctdluser **uret, char *cret);
-int CtdlIPCAideGetEmailAddresses(CtdlIPC *ipc, const char *who, char *, char *cret);
-int CtdlIPCAideSetUserParameters(CtdlIPC *ipc, const struct ctdluser *uret, char *cret);
-int CtdlIPCAideSetEmailAddresses(CtdlIPC *ipc, const char *who, char *emailaddrs, char *cret);
-int CtdlIPCRenameUser(CtdlIPC *ipc, char *oldname, char *newname, char *cret);
-int CtdlIPCGetMessageExpirationPolicy(CtdlIPC *ipc, GPEXWhichPolicy which,
-               struct ExpirePolicy **policy, char *cret);
-int CtdlIPCSetMessageExpirationPolicy(CtdlIPC *ipc, int which,
-               struct ExpirePolicy *policy, char *cret);
-int CtdlIPCGetSystemConfig(CtdlIPC *ipc, char **listing, char *cret);
-int CtdlIPCSetSystemConfig(CtdlIPC *ipc, const char *listing, char *cret);
-int CtdlIPCGetSystemConfigByType(CtdlIPC *ipc, const char *mimetype,
-               char **listing, char *cret);
-int CtdlIPCSetSystemConfigByType(CtdlIPC *ipc, const char *mimetype,
-              const char *listing, char *cret);
-int CtdlIPCGetRoomNetworkConfig(CtdlIPC *ipc, char **listing, char *cret);
-int CtdlIPCSetRoomNetworkConfig(CtdlIPC *ipc, const char *listing, char *cret);
-int CtdlIPCRequestClientLogout(CtdlIPC *ipc, int session, char *cret);
-int CtdlIPCSetMessageSeen(CtdlIPC *ipc, long msgnum, int seen, char *cret);
-int CtdlIPCStartEncryption(CtdlIPC *ipc, char *cret);
-int CtdlIPCDirectoryLookup(CtdlIPC *ipc, const char *address, char *cret);
-int CtdlIPCSpecifyPreferredFormats(CtdlIPC *ipc, char *cret, char *formats);
-int CtdlIPCInternalProgram(CtdlIPC *ipc, int secret, char *cret);
-
-/* ************************************************************************** */
-/*             Stuff below this line is not for public consumption            */
-/* ************************************************************************** */
-
-char *CtdlIPCReadListing(CtdlIPC *ipc, char *dest);
-int CtdlIPCSendListing(CtdlIPC *ipc, const char *listing);
-size_t CtdlIPCPartialRead(CtdlIPC *ipc, void **buf, size_t offset,
-               size_t bytes, char *cret);
-int CtdlIPCEndUpload(CtdlIPC *ipc, int discard, char *cret);
-int CtdlIPCWriteUpload(CtdlIPC *ipc, FILE *uploadFP,
-               void (*progress_gauge_callback)(CtdlIPC*, unsigned long, unsigned long),
-               char *cret);
-int CtdlIPCEndDownload(CtdlIPC *ipc, char *cret);
-int CtdlIPCReadDownload(CtdlIPC *ipc, void **buf, size_t bytes, size_t resume,
-               void (*progress_gauge_callback)(CtdlIPC*, unsigned long, unsigned long),
-               char *cret);
-int CtdlIPCHighSpeedReadDownload(CtdlIPC *ipc, void **buf, size_t bytes,
-               size_t resume,
-               void (*progress_gauge_callback)(CtdlIPC*, unsigned long, unsigned long),
-               char *cret);
-int CtdlIPCGenericCommand(CtdlIPC *ipc, const char *command,
-               const char *to_send, size_t bytes_to_send, char **to_receive,
-               size_t *bytes_to_receive, char *proto_response);
-
-/* Internals */
-int starttls(CtdlIPC *ipc);
-void setCryptoStatusHook(void (*hook)(char *s));
-void CtdlIPC_SetNetworkStatusCallback(CtdlIPC *ipc, void (*hook)(int state));
-/* This is all Ford's doing.  FIXME: figure out what it's doing */
-extern int (*error_printf)(char *s, ...);
-void setIPCDeathHook(void (*hook)(void));
-void setIPCErrorPrintf(int (*func)(char *s, ...));
-void connection_died(CtdlIPC* ipc, int using_ssl);
-int CtdlIPC_getsockfd(CtdlIPC* ipc);
-char CtdlIPC_get(CtdlIPC* ipc);
-
-
-
-void CtdlIPC_lock(CtdlIPC *ipc);
-
-void CtdlIPC_unlock(CtdlIPC *ipc);
-
-char *libcitadelclient_version_string(void);
-
-/* commands we can send to the stty_ctdl() routine */
-#define SB_NO_INTR     0               /* set to Citadel client mode, i/q disabled */
-#define SB_YES_INTR    1               /* set to Citadel client mode, i/q enabled */
-#define SB_SAVE                2               /* save settings */
-#define SB_RESTORE     3               /* restore settings */
-#define SB_LAST                4               /* redo the last command sent */
-
-#define        NEXT_KEY        15
-#define STOP_KEY       3
-
-/* citadel.rc stuff */
-#define RC_NO          0               /* always no */
-#define RC_YES         1               /* always yes */
-#define RC_DEFAULT     2               /* setting depends on user config */
-
-/* keepalives */
-enum {
-       KA_NO,                          /* no keepalives */
-       KA_YES,                         /* full keepalives */
-       KA_HALF                         /* half keepalives */
-};
-
-/* for <;G>oto and <;S>kip commands */
-#define GF_GOTO                0               /* <;G>oto floor mode */
-#define GF_SKIP                1               /* <;S>kip floor mode */
-#define GF_ZAP         2               /* <;Z>ap floor mode */
-
-
-#ifndef AXDEFS
-
-extern char *axdefs[];
-
-extern char *viewdefs[];
-#endif