* allow LMTP posting to all rooms.
[citadel.git] / citadel / msgbase.h
index d8a3697ee5a865b3bc33d16bd505b7d2a64442dd..731f1bcd0f7cbe1ddba261137f15363b07ddb85a 100644 (file)
@@ -1,5 +1,8 @@
 /* $Id$ */
 
+#ifndef MSGBASE_H
+#define MSGBASE_H
+
 #define aide_message(text, subject)      quickie_message("Citadel",NULL,NULL,AIDEROOM,text,0,subject)
 
 enum {
@@ -51,19 +54,22 @@ struct repl {                       /* Info for replication checking */
 
 /* Data structure returned by validate_recipients() */
 struct recptypes {
+       int recptypes_magic;
         int num_local;
         int num_internet;
         int num_ignet;
        int num_room;
         int num_error;
-       char errormsg[SIZ];
-       char recp_local[SIZ];
-       char recp_internet[SIZ];
-       char recp_ignet[SIZ];
-       char recp_room[SIZ];
-       char display_recp[SIZ];
+       char *errormsg;
+       char *recp_local;
+       char *recp_internet;
+       char *recp_ignet;
+       char *recp_room;
+       char *display_recp;
 };
 
+#define RECPTYPES_MAGIC 0xfeeb
+
 /*
  * This is a list of "harvested" email addresses that we might want to
  * stick into someone's address book.  But we defer this operaiton so
@@ -118,12 +124,13 @@ void CtdlWriteObject(char *, char *, char *, struct ctdluser *,
 struct CtdlMessage *CtdlFetchMessage(long msgnum, int with_body);
 void CtdlFreeMessage(struct CtdlMessage *msg);
 void serialize_message(struct ser_ret *, struct CtdlMessage *);
+void dump_message(struct CtdlMessage *msg, long Siz);
 int is_valid_message(struct CtdlMessage *);
 void ReplicationChecks(struct CtdlMessage *);
 int CtdlSaveMsgPointersInRoom(char *roomname, long newmsgidlist[], int num_newmsgs,
                                int do_repl_check, struct CtdlMessage *supplied_msg);
 int CtdlSaveMsgPointerInRoom(char *roomname, long msgid, int do_repl_check, struct CtdlMessage *msg);
-char *CtdlReadMessageBody(char *terminator, size_t maxlen, char *exist, int crlf);
+char *CtdlReadMessageBody(char *terminator, size_t maxlen, char *exist, int crlf, int sock);
 char *CtdlGetSysConfig(char *sysconfname);
 void CtdlPutSysConfig(char *sysconfname, char *sysconfdata);
 int CtdlOutputMsg(long msg_num,                /* message number (local) to fetch */
@@ -141,7 +148,17 @@ int CtdlOutputPreLoadedMsg(struct CtdlMessage *,
 );
 int CtdlCopyMsgsToRoom(long *msgnum, int num_msgs, char *dest);
 int CtdlDoIHavePermissionToDeleteMessagesFromThisRoom(void);
-int CtdlDoIHavePermissionToPostInThisRoom(char *errmsgbuf, size_t n);
+
+enum {
+       POST_LOGGED_IN,
+       POST_EXTERNAL,
+       CHECK_EXISTANCE,
+       POST_LMTP
+};
+int CtdlDoIHavePermissionToPostInThisRoom(char *errmsgbuf, 
+                                         size_t n, 
+                                         const char* RemoteIdentifier,
+                                         int PostPublic);
 
 
 /* values for which_set */
@@ -154,7 +171,12 @@ void CtdlSetSeen(long *target_msgnums, int num_target_msgnums,
                struct ctdluser *which_user, struct ctdlroom *which_room);
 void CtdlGetSeen(char *buf, int which_set);
 
-struct recptypes *validate_recipients(char *recipients);
+struct recptypes *validate_recipients(char *recipients,
+                                     const char *RemoteIdentifier, 
+                                     int Flags);
+
+void free_recipients(struct recptypes *);
+
 struct CtdlMessage *CtdlMakeMessage(
         struct ctdluser *author,        /* author's user structure */
         char *recipient,                /* NULL if it's not mail */
@@ -163,9 +185,12 @@ struct CtdlMessage *CtdlMakeMessage(
         int type,                       /* see MES_ types in header file */
         int format_type,                /* variformat, plain text, MIME... */
         char *fake_name,                /* who we're masquerading as */
+       char *my_email,                 /* which of my email addresses to use (empty is ok) */
         char *subject,                  /* Subject (optional) */
        char *supplied_euid,            /* ...or NULL if this is irrelevant */
         char *preformatted_text         /* ...or NULL to read text from client */
 );
 int CtdlCheckInternetMailPermission(struct ctdluser *who);
 int CtdlIsMe(char *addr, int addr_buf_len);
+
+#endif /* MSGBASE_H */