]> code.citadel.org Git - citadel.git/blob - citadel/citadel_ipc.h
* Allow multiple simultaneous IPC connections. All changes necessary for
[citadel.git] / citadel / citadel_ipc.h
1 /* $Id$ */
2
3 #include "ipc.h"
4
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8
9 struct ctdlipcroom {
10         char RRname[ROOMNAMELEN];       /* Name of room */
11         long RRunread;                  /* Number of unread messages */
12         long RRtotal;                   /* Total number of messages in room */
13         char RRinfoupdated;             /* Nonzero if info was updated */
14         unsigned RRflags;               /* Various flags (see LKRN) */
15         long RRhighest;                 /* Highest message number in room */
16         long RRlastread;                /* Highest message user has read */
17         char RRismailbox;               /* Is this room a mailbox room? */
18         char RRaide;                    /* User can do aide commands in room */
19         long RRnewmail;                 /* Number of new mail messages */
20         char RRfloor;                   /* Which floor this room is on */
21 };
22
23
24 struct parts {
25         struct parts *next;
26         char number[16];                /* part number */
27         char name[PATH_MAX];            /* Name */
28         char filename[PATH_MAX];        /* Suggested filename */
29         char mimetype[SIZ];             /* MIME type */
30         char disposition[SIZ];          /* Content disposition */
31         unsigned long length;           /* Content length */
32 };
33
34
35 struct ctdlipcmessage {
36         char msgid[SIZ];                /* Original message ID */
37         char path[SIZ];                 /* Return path to sender */
38         char zaps[SIZ];                 /* Message ID that this supersedes */
39         char subject[SIZ];              /* Message subject */
40         char email[SIZ];                /* Email address of sender */
41         char author[USERNAME_SIZE];     /* Sender of message */
42         char recipient[USERNAME_SIZE];  /* Recipient of message */
43         char room[ROOMNAMELEN];         /* Originating room */
44         char node[16];                  /* Short nodename of origin system */
45         char hnod[21];                  /* Humannode of origin system */
46         struct parts *attachments;      /* Available attachments */
47         char *text;                     /* Message text */
48         int type;                       /* Message type */
49         time_t time;                    /* Time message was posted */
50         char nhdr;                      /* Suppress message header? */
51         char anonymous;                 /* An anonymous message */
52         char mime_chosen[SIZ];          /* Chosen MIME part to output */
53         char content_type[SIZ];         /* How would you like that? */
54 };
55
56
57 struct ctdlipcmisc {
58         long newmail;                   /* Number of new Mail messages */
59         char needregis;                 /* Nonzero if user needs to register */
60         char needvalid;                 /* Nonzero if users need validation */
61 };
62
63 int CtdlIPCNoop(CtdlIPC *ipc);
64 int CtdlIPCEcho(CtdlIPC *ipc, const char *arg, char *cret);
65 int CtdlIPCQuit(CtdlIPC *ipc);
66 int CtdlIPCLogout(CtdlIPC *ipc);
67 int CtdlIPCTryLogin(CtdlIPC *ipc, const char *username, char *cret);
68 int CtdlIPCTryPassword(CtdlIPC *ipc, const char *passwd, char *cret);
69 int CtdlIPCCreateUser(CtdlIPC *ipc, const char *username, int selfservice, char *cret);
70 int CtdlIPCChangePassword(CtdlIPC *ipc, const char *passwd, char *cret);
71 int CtdlIPCKnownRooms(CtdlIPC *ipc, int which, int floor, struct march **listing, char *cret);
72 int CtdlIPCGetConfig(CtdlIPC *ipc, struct usersupp **uret, char *cret);
73 int CtdlIPCSetConfig(CtdlIPC *ipc, struct usersupp *uret, char *cret);
74 int CtdlIPCGotoRoom(CtdlIPC *ipc, const char *room, const char *passwd,
75                 struct ctdlipcroom **rret, char *cret);
76 int CtdlIPCGetMessages(CtdlIPC *ipc, int which, int whicharg, const char *template,
77                 long **mret, char *cret);
78 int CtdlIPCGetSingleMessage(CtdlIPC *ipc, long msgnum, int headers, int as_mime,
79                 struct ctdlipcmessage **mret, char *cret);
80 int CtdlIPCWhoKnowsRoom(CtdlIPC *ipc, char **listing, char *cret);
81 int CtdlIPCServerInfo(CtdlIPC *ipc, struct CtdlServInfo *ServInfo, char *cret);
82 int CtdlIPCReadDirectory(CtdlIPC *ipc, char **listing, char *cret);
83 int CtdlIPCSetLastRead(CtdlIPC *ipc, long msgnum, char *cret);
84 int CtdlIPCInviteUserToRoom(CtdlIPC *ipc, const char *username, char *cret);
85 int CtdlIPCKickoutUserFromRoom(CtdlIPC *ipc, const char *username, char *cret);
86 int CtdlIPCGetRoomAttributes(CtdlIPC *ipc, struct quickroom **qret, char *cret);
87 int CtdlIPCSetRoomAttributes(CtdlIPC *ipc, int forget, struct quickroom *qret, char *cret);
88 int CtdlIPCGetRoomAide(CtdlIPC *ipc, char *cret);
89 int CtdlIPCSetRoomAide(CtdlIPC *ipc, const char *username, char *cret);
90 int CtdlIPCPostMessage(CtdlIPC *ipc, int flag, const struct ctdlipcmessage *mr, char *cret);
91 int CtdlIPCRoomInfo(CtdlIPC *ipc, char **iret, char *cret);
92 int CtdlIPCDeleteMessage(CtdlIPC *ipc, long msgnum, char *cret);
93 int CtdlIPCMoveMessage(CtdlIPC *ipc, int copy, long msgnum, const char *destroom, char *cret);
94 int CtdlIPCDeleteRoom(CtdlIPC *ipc, int for_real, char *cret);
95 int CtdlIPCCreateRoom(CtdlIPC *ipc, int for_real, const char *roomname, int type,
96                 const char *password, int floor, char *cret);
97 int CtdlIPCForgetRoom(CtdlIPC *ipc, char *cret);
98 int CtdlIPCSystemMessage(CtdlIPC *ipc, const char *message, char **mret, char *cret);
99 int CtdlIPCNextUnvalidatedUser(CtdlIPC *ipc, char *cret);
100 int CtdlIPCGetUserRegistration(CtdlIPC *ipc, const char *username, char **rret, char *cret);
101 int CtdlIPCValidateUser(CtdlIPC *ipc, const char *username, int axlevel, char *cret);
102 int CtdlIPCSetRoomInfo(CtdlIPC *ipc, int for_real, const char *info, char *cret);
103 int CtdlIPCUserListing(CtdlIPC *ipc, char **list, char *cret);
104 int CtdlIPCSetRegistration(CtdlIPC *ipc, const char *info, char *cret);
105 int CtdlIPCMiscCheck(CtdlIPC *ipc, struct ctdlipcmisc *chek, char *cret);
106 int CtdlIPCDeleteFile(CtdlIPC *ipc, const char *filename, char *cret);
107 int CtdlIPCMoveFile(CtdlIPC *ipc, const char *filename, const char *destroom, char *cret);
108 int CtdlIPCNetSendFile(CtdlIPC *ipc, const char *filename, const char *destnode, char *cret);
109 int CtdlIPCOnlineUsers(CtdlIPC *ipc, char **listing, time_t *stamp, char *cret);
110 int CtdlIPCFileDownload(CtdlIPC *ipc, const char *filename, void **buf, char *cret);
111 int CtdlIPCAttachmentDownload(CtdlIPC *ipc, long msgnum, const char *part, void **buf,
112                 char *cret);
113 int CtdlIPCImageDownload(CtdlIPC *ipc, const char *filename, void **buf, char *cret);
114 int CtdlIPCFileUpload(CtdlIPC *ipc, const char *filename, const char *comment, void *buf,
115                 size_t bytes, char *cret);
116 int CtdlIPCImageUpload(CtdlIPC *ipc, int for_real, const char *filename, size_t bytes,
117                 char *cret);
118 int CtdlIPCQueryUsername(CtdlIPC *ipc, const char *username, char *cret);
119 int CtdlIPCFloorListing(CtdlIPC *ipc, char **listing, char *cret);
120 int CtdlIPCCreateFloor(CtdlIPC *ipc, int for_real, const char *name, char *cret);
121 int CtdlIPCDeleteFloor(CtdlIPC *ipc, int for_real, int floornum, char *cret);
122 int CtdlIPCEditFloor(CtdlIPC *ipc, int floornum, const char *floorname, char *cret);
123 int CtdlIPCIdentifySoftware(CtdlIPC *ipc, int developerid, int clientid, int revision,
124                 const char *software_name, const char *hostname, char *cret);
125 int CtdlIPCSendInstantMessage(CtdlIPC *ipc, const char *username, const char *text,
126                 char *cret);
127 int CtdlIPCGetInstantMessage(CtdlIPC *ipc, char **listing, char *cret);
128 int CtdlIPCEnableInstantMessageReceipt(CtdlIPC *ipc, int mode, char *cret);
129 int CtdlIPCSetBio(CtdlIPC *ipc, char *bio, char *cret);
130 int CtdlIPCGetBio(CtdlIPC *ipc, const char *username, char **listing, char *cret);
131 int CtdlIPCListUsersWithBios(CtdlIPC *ipc, char **listing, char *cret);
132 int CtdlIPCStealthMode(CtdlIPC *ipc, int mode, char *cret);
133 int CtdlIPCTerminateSession(CtdlIPC *ipc, int sid, char *cret);
134 int CtdlIPCTerminateServerNow(CtdlIPC *ipc, char *cret);
135 int CtdlIPCTerminateServerScheduled(CtdlIPC *ipc, int mode, char *cret);
136 int CtdlIPCEnterSystemMessage(CtdlIPC *ipc, const char *filename, const char *text,
137                 char *cret);
138 int CtdlIPCChangeHostname(CtdlIPC *ipc, const char *hostname, char *cret);
139 int CtdlIPCChangeRoomname(CtdlIPC *ipc, const char *roomname, char *cret);
140 int CtdlIPCChangeUsername(CtdlIPC *ipc, const char *username, char *cret);
141 time_t CtdlIPCServerTime(CtdlIPC *ipc, char *crert);
142 int CtdlIPCAideGetUserParameters(CtdlIPC *ipc, const char *who,
143                                  struct usersupp **uret, char *cret);
144 int CtdlIPCAideSetUserParameters(CtdlIPC *ipc, const struct usersupp *uret, char *cret);
145 int CtdlIPCGetMessageExpirationPolicy(CtdlIPC *ipc, int which, char *cret);
146 int CtdlIPCSetMessageExpirationPolicy(CtdlIPC *ipc, int which, int policy, int value,
147                 char *cret);
148 int CtdlGetSystemConfig(CtdlIPC *ipc, char **listing, char *cret);
149 int CtdlSetSystemConfig(CtdlIPC *ipc, const char *listing, char *cret);
150 int CtdlGetSystemConfigByType(CtdlIPC *ipc, const char *mimetype,
151                 char **listing, char *cret);
152 int CtdlSetSystemConfigByType(CtdlIPC *ipc, const char *mimetype,
153                const char *listing, char *cret);
154 int CtdlIPCModerateMessage(CtdlIPC *ipc, long msgnum, int level, char *cret);
155 int CtdlIPCRequestClientLogout(CtdlIPC *ipc, int session, char *cret);
156 int CtdlIPCSetMessageSeen(CtdlIPC *ipc, long msgnum, int seen, char *cret);
157 int CtdlIPCStartEncryption(CtdlIPC *ipc, char *cret);
158 int CtdlIPCDirectoryLookup(CtdlIPC *ipc, const char *address, char *cret);
159 int CtdlIPCSpecifyPreferredFormats(CtdlIPC *ipc, char *cret, char *formats);
160 int CtdlIPCInternalProgram(CtdlIPC *ipc, int secret, char *cret);
161
162 /* ************************************************************************** */
163 /*             Stuff below this line is not for public consumption            */
164 /* ************************************************************************** */
165
166 inline void CtdlIPC_lock(CtdlIPC *ipc);
167 inline void CtdlIPC_unlock(CtdlIPC *ipc);
168 char *CtdlIPCReadListing(CtdlIPC *ipc, char *dest);
169 int CtdlIPCSendListing(CtdlIPC *ipc, const char *listing);
170 size_t CtdlIPCPartialRead(CtdlIPC *ipc, void **buf, size_t offset, size_t bytes, char *cret);
171 int CtdlIPCEndUpload(CtdlIPC *ipc, char *cret);
172 int CtdlIPCWriteUpload(CtdlIPC *ipc, void *buf, size_t bytes, char *cret);
173 int CtdlIPCEndDownload(CtdlIPC *ipc, char *cret);
174 int CtdlIPCReadDownload(CtdlIPC *ipc, void **buf, size_t bytes, char *cret);
175 int CtdlIPCGenericCommand(CtdlIPC *ipc, const char *command, const char *to_send,
176                 size_t bytes_to_send, char **to_receive,
177                 size_t *bytes_to_receive, char *proto_response);
178
179 #ifdef __cplusplus
180 }
181 #endif