X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmsgbase.h;h=0917f1978a526115023728a0c601de053b36d741;hb=182f984f6f03067f40a7e01bfa82df95f5605358;hp=6a6f5e109b831c0228376d364355f47f9356d03a;hpb=d9f0c753cde3bdc98f536eed77308be9434b3ed5;p=citadel.git diff --git a/citadel/msgbase.h b/citadel/msgbase.h index 6a6f5e109..0917f1978 100644 --- a/citadel/msgbase.h +++ b/citadel/msgbase.h @@ -1,6 +1,8 @@ /* $Id$ */ -#define aide_message(text, subject) quickie_message("Citadel",NULL,NULL,AIDEROOM,text,0,subject) +#ifndef MSGBASE_H +#define MSGBASE_H + enum { MSGS_ALL, @@ -10,7 +12,14 @@ enum { MSGS_LAST, MSGS_GT, MSGS_EQ, - MSGS_SEARCH + MSGS_SEARCH, + MSGS_LT +}; + +enum { + MSG_HDRS_BRIEF = 0, + MSG_HDRS_ALL = 1, + MSG_HDRS_EUID = 4 }; /* @@ -63,6 +72,8 @@ struct recptypes { char *recp_ignet; char *recp_room; char *display_recp; + char *bounce_to; + char *envelope_from; }; #define RECPTYPES_MAGIC 0xfeeb @@ -85,7 +96,7 @@ void cmd_msgs (char *cmdbuf); void cmd_isme (char *cmdbuf); void help_subst (char *strbuf, char *source, char *dest); void do_help_subst (char *buffer); -void memfmout (char *mptr, char subst, char *nl); +void memfmout (char *mptr, const char *nl); void output_mime_parts(char *); void cmd_msg0 (char *cmdbuf); void cmd_msg2 (char *cmdbuf); @@ -96,8 +107,8 @@ void cmd_opna (char *cmdbuf); void cmd_dlat (char *cmdbuf); long send_message (struct CtdlMessage *); void loadtroom (void); -long CtdlSubmitMsg(struct CtdlMessage *, struct recptypes *, char *); -void quickie_message (char *, char *, char *, char *, char *, int, char *); +long CtdlSubmitMsg(struct CtdlMessage *, struct recptypes *, char *, int); +void quickie_message (const char *, const char *, char *, char *, const char *, int, const char *); void cmd_ent0 (char *entargs); void cmd_dele (char *delstr); void cmd_move (char *args); @@ -108,43 +119,78 @@ void TDAP_AdjRefCount(long, int); int TDAP_ProcessAdjRefCountQueue(void); void simple_listing(long, void *); int CtdlMsgCmp(struct CtdlMessage *msg, struct CtdlMessage *template); +typedef void (*ForEachMsgCallback)(long MsgNumber, void *UserData); int CtdlForEachMessage(int mode, long ref, char *searchstring, char *content_type, struct CtdlMessage *compare, - void (*CallBack) (long, void *), + ForEachMsgCallback CallBack, void *userdata); int CtdlDeleteMessages(char *, long *, int, char *); -void CtdlWriteObject(char *, char *, char *, struct ctdluser *, - int, int, unsigned int); +void CtdlWriteObject(char *req_room, /* Room to stuff it in */ + char *content_type, /* MIME type of this object */ + char *raw_message, /* Data to be written */ + off_t raw_length, /* Size of raw_message */ + struct ctdluser *is_mailbox, /* Mailbox room? */ + int is_binary, /* Is encoding necessary? */ + int is_unique, /* Del others of this type? */ + unsigned int flags /* Internal save flags */ +); 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 do_repl_check, struct CtdlMessage *supplied_msg, int suppress_refcount_adj); 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 *CtdlGetSysConfig(char *sysconfname); -void CtdlPutSysConfig(char *sysconfname, char *sysconfdata); +char *CtdlReadMessageBody(char *terminator, long tlen, size_t maxlen, char *exist, int crlf, int *sock); +StrBuf *CtdlReadMessageBodyBuf(char *terminator, /* token signalling EOT */ + long tlen, + size_t maxlen, /* maximum message length */ + char *exist, /* if non-null, append to it; + exist is ALWAYS freed */ + int crlf, /* CRLF newlines instead of LF */ + int *sock /* socket handle or 0 for this session's client socket */ + ); + int CtdlOutputMsg(long msg_num, /* message number (local) to fetch */ - int mode, /* how would you like that message? */ - int headers_only, /* eschew the message body? */ - int do_proto, /* do Citadel protocol responses? */ - int crlf, /* 0=LF, 1=CRLF */ - char *section /* output a message/rfc822 section */ + int mode, /* how would you like that message? */ + int headers_only, /* eschew the message body? */ + int do_proto, /* do Citadel protocol responses? */ + int crlf, /* 0=LF, 1=CRLF */ + char *section, /* output a message/rfc822 section */ + int flags /* should the bessage be exported clean? */ ); + +/* Flags which may be passed to CtdlOutputMsg() and CtdlOutputPreLoadedMsg() */ +#define QP_EADDR (1<<0) /* quoted-printable encode email addresses */ +#define CRLF (1<<1) +#define ESC_DOT (1<<2) /* output a line containing only "." as ".." instead */ +#define SUPPRESS_ENV_TO (1<<3) /* suppress Envelope-to: header (warning: destructive!) */ + int CtdlOutputPreLoadedMsg(struct CtdlMessage *, - int mode, /* how would you like that message? */ - int headers_only, /* eschew the message body? */ - int do_proto, /* do Citadel protocol responses? */ - int crlf /* 0=LF, 1=CRLF */ + int mode, /* how would you like that message? */ + int headers_only, /* eschew the message body? */ + int do_proto, /* do Citadel protocol responses? */ + int crlf, /* 0=LF, 1=CRLF */ + int flags /* should the bessage be exported clean? */ ); -int CtdlCopyMsgsToRoom(long *msgnum, int num_msgs, char *dest); int CtdlDoIHavePermissionToDeleteMessagesFromThisRoom(void); -int CtdlDoIHavePermissionToPostInThisRoom(char *errmsgbuf, size_t n); +int CtdlDoIHavePermissionToReadMessagesInThisRoom(void); + +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 */ @@ -157,7 +203,10 @@ 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(const char *recipients, + const char *RemoteIdentifier, + int Flags); + void free_recipients(struct recptypes *); struct CtdlMessage *CtdlMakeMessage( @@ -171,7 +220,19 @@ struct CtdlMessage *CtdlMakeMessage( 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 */ + char *preformatted_text, /* ...or NULL to read text from client */ + char *references /* Thread references */ ); int CtdlCheckInternetMailPermission(struct ctdluser *who); int CtdlIsMe(char *addr, int addr_buf_len); + +/* + * Use of aide_message is deprecated. + * It has been replaced with CtdlAideMessage. + * All parameters remain the same. +*/ +void aide_message(char *text, char *subject) __attribute__ ((deprecated)); + + + +#endif /* MSGBASE_H */