X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmsgbase.h;h=a9a4eaba47a1ef0848d10b8c7138014d11f074b5;hb=2b80e75820618944e1c75b9c01aeeefc8b6b0c81;hp=37a94c63d16e8a3f564a5aa0c6a6b57bda538ab5;hpb=c855d497545dad80942a194624c111a54cd1fdc7;p=citadel.git diff --git a/citadel/msgbase.h b/citadel/msgbase.h index 37a94c63d..a9a4eaba4 100644 --- a/citadel/msgbase.h +++ b/citadel/msgbase.h @@ -59,25 +59,6 @@ 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; - char *recp_local; - char *recp_internet; - char *recp_ignet; - char *recp_room; - char *display_recp; - char *bounce_to; - char *envelope_from; -}; - -#define RECPTYPES_MAGIC 0xfeeb /* * This is a list of "harvested" email addresses that we might want to @@ -92,27 +73,34 @@ struct addresses_to_be_filed { extern struct addresses_to_be_filed *atbf; -int alias (char *name); -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, const char *nl); void output_mime_parts(char *); -void cmd_msg0 (char *cmdbuf); -void cmd_msg2 (char *cmdbuf); -void cmd_msg3 (char *cmdbuf); -void cmd_msg4 (char *cmdbuf); -void cmd_msgp (char *cmdbuf); -void cmd_opna (char *cmdbuf); -void cmd_dlat (char *cmdbuf); long send_message (struct CtdlMessage *); void loadtroom (void); -long CtdlSubmitMsg(struct CtdlMessage *, struct recptypes *, const 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); +long CtdlSubmitMsg(struct CtdlMessage *, recptypes *, const char *, int); + +void quickie_message(const char *from, + const char *fromaddr, + const char *to, + char *room, + const char *text, + int format_type, + const char *subject); + +void flood_protect_quickie_message(const char *from, + const char *fromaddr, + const char *to, + char *room, + const char *text, + int format_type, + const char *subject, + int nCriterions, + const char **CritStr, + long *CritStrLen, + long ccid, + long ioid, + time_t NOW); + void GetMetaData(struct MetaData *, long); void PutMetaData(struct MetaData *); void AdjRefCount(long, int); @@ -139,20 +127,36 @@ void CtdlWriteObject(char *req_room, /* Room to stuff it in */ unsigned int flags /* Internal save flags */ ); struct CtdlMessage *CtdlFetchMessage(long msgnum, int with_body); -void CtdlFreeMessage(struct CtdlMessage *msg); -void CtdlFreeMessageContents(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 *); +struct CtdlMessage * CM_Duplicate + (struct CtdlMessage *OrgMsg); +int CM_IsEmpty (struct CtdlMessage *Msg, eMsgField which); +void CM_SetField (struct CtdlMessage *Msg, eMsgField which, const char *buf, long length); +void CM_SetFieldLONG (struct CtdlMessage *Msg, eMsgField which, long lvalue); +void CM_CopyField (struct CtdlMessage *Msg, eMsgField WhichToPutTo, eMsgField WhichtToCopy); +void CM_CutFieldAt (struct CtdlMessage *Msg, eMsgField WhichToCut, long maxlen); +void CM_FlushField (struct CtdlMessage *Msg, eMsgField which); +void CM_Flush (struct CtdlMessage *Msg); +void CM_SetAsField (struct CtdlMessage *Msg, eMsgField which, char **buf, long length); +void CM_SetAsFieldSB (struct CtdlMessage *Msg, eMsgField which, StrBuf **buf); +void CM_GetAsField (struct CtdlMessage *Msg, eMsgField which, char **ret, long *retlen); +void CM_PrependToField (struct CtdlMessage *Msg, eMsgField which, const char *buf, long length); + +void CM_Free (struct CtdlMessage *msg); +void CM_FreeContents (struct CtdlMessage *msg); +int CM_IsValidMsg (struct CtdlMessage *msg); + +#define CM_KEY(Message, Which) Message->cm_fields[Which], Message->cm_lengths[Which] + +void CtdlSerializeMessage(struct ser_ret *, struct CtdlMessage *); void ReplicationChecks(struct CtdlMessage *); int CtdlSaveMsgPointersInRoom(char *roomname, long newmsgidlist[], int num_newmsgs, 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, long tlen, size_t maxlen, char *exist, int crlf, int *sock); +char *CtdlReadMessageBody(char *terminator, long tlen, size_t maxlen, StrBuf *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; + StrBuf *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 */ @@ -164,7 +168,9 @@ int CtdlOutputMsg(long msg_num, /* message number (local) to fetch */ 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? */ + int flags, /* should the bessage be exported clean? */ + char **Author, /* if you want to know the author of the message... */ + char **Address /* if you want to know the sender address of the message... */ ); /* Flags which may be passed to CtdlOutputMsg() and CtdlOutputPreLoadedMsg() */ @@ -180,22 +186,6 @@ int CtdlOutputPreLoadedMsg(struct CtdlMessage *, int crlf, /* 0=LF, 1=CRLF */ int flags /* should the bessage be exported clean? */ ); -int CtdlDoIHavePermissionToDeleteMessagesFromThisRoom(void); -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, - int is_reply -); /* values for which_set */ @@ -208,11 +198,6 @@ 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(const char *recipients, - const char *RemoteIdentifier, - int Flags); - -void free_recipients(struct recptypes *); struct CtdlMessage *CtdlMakeMessage( struct ctdluser *author, /* author's user structure */ @@ -228,16 +213,29 @@ struct CtdlMessage *CtdlMakeMessage( 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)); +struct CtdlMessage *CtdlMakeMessageLen( + struct ctdluser *author, /* author's user structure */ + char *recipient, /* NULL if it's not mail */ + long rcplen, + char *recp_cc, /* NULL if it's not mail */ + long cclen, + char *room, /* room where it's going */ + long roomlen, + int type, /* see MES_ types in header file */ + int format_type, /* variformat, plain text, MIME... */ + char *fake_name, /* who we're masquerading as */ + long fnlen, + char *my_email, /* which of my email addresses to use (empty is ok) */ + long myelen, + char *subject, /* Subject (optional) */ + long subjlen, + char *supplied_euid, /* ...or NULL if this is irrelevant */ + long euidlen, + char *preformatted_text, /* ...or NULL to read text from client */ + long textlen, + char *references, /* Thread references */ + long reflen); /* * loading messages async via an FD: @@ -249,7 +247,7 @@ ReadAsyncMsg *NewAsyncMsg(const char *terminator, /* token signalling EOT */ long tlen, size_t expectlen, /* if we expect a message, how long should it be? */ size_t maxlen, /* maximum message length */ - char *exist, /* if non-null, append to it; + StrBuf *exist, /* if non-null, append to it; exist is ALWAYS freed */ long eLen, /* length of exist */ int crlf /* CRLF newlines instead of LF */ @@ -258,6 +256,20 @@ ReadAsyncMsg *NewAsyncMsg(const char *terminator, /* token signalling EOT */ eReadState CtdlReadMessageBodyAsync(AsyncIO *IO); void DeleteAsyncMsg(ReadAsyncMsg **Msg); +extern int MessageDebugEnabled; + +#define MSGDBGLOG(LEVEL) if ((LEVEL != LOG_DEBUG) || (MessageDebugEnabled != 0)) +#define CCCID CCC->cs_pid +#define MSG_syslog(LEVEL, FORMAT, ...) \ + MSGDBGLOG(LEVEL) syslog(LEVEL, \ + "CC[%d]MSG" FORMAT, \ + CCCID, __VA_ARGS__) + +#define MSGM_syslog(LEVEL, FORMAT) \ + MSGDBGLOG(LEVEL) syslog(LEVEL, \ + "CC[%d]MSG" FORMAT, \ + CCCID) + #endif /* MSGBASE_H */