X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmsgbase.h;h=f74c64b734590c51bea2d4c9ce2733c6b20ada2b;hb=d2fbe9d0eeadfaa1054e959031d6859164dfa78e;hp=31a0e520f39b9374198caf07793b8ca4fd2b8807;hpb=2b6008f54e8b56b79e24617f47308e469fcaca0e;p=citadel.git diff --git a/citadel/msgbase.h b/citadel/msgbase.h index 31a0e520f..f74c64b73 100644 --- a/citadel/msgbase.h +++ b/citadel/msgbase.h @@ -1,9 +1,8 @@ -/* $Id$ */ #ifndef MSGBASE_H #define MSGBASE_H - +#include "event_client.h" enum { MSGS_ALL, MSGS_OLD, @@ -29,7 +28,8 @@ enum { om_ok, om_not_logged_in, om_no_such_msg, - om_mime_error + om_mime_error, + om_access_denied }; /* @@ -49,6 +49,7 @@ struct ma_info { char chosen_part[128]; /* Which part of a m/a did we choose? */ int chosen_pref; /* Chosen part preference level (lower is better) */ int use_fo_hooks; /* Use fixed output hooks */ + int dont_decode; /* should we call the decoder or not? */ }; @@ -71,9 +72,11 @@ struct recptypes { char *recp_internet; char *recp_ignet; char *recp_room; + char *recp_orgroom; char *display_recp; char *bounce_to; char *envelope_from; + char *sending_room; }; #define RECPTYPES_MAGIC 0xfeeb @@ -107,7 +110,7 @@ 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 *, int); +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); @@ -139,12 +142,13 @@ void CtdlWriteObject(char *req_room, /* Room to stuff it in */ ); 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 *); 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, long tlen, size_t maxlen, char *exist, int crlf, int *sock); StrBuf *CtdlReadMessageBodyBuf(char *terminator, /* token signalling EOT */ @@ -187,10 +191,13 @@ enum { CHECK_EXISTANCE, POST_LMTP }; + int CtdlDoIHavePermissionToPostInThisRoom(char *errmsgbuf, - size_t n, - const char* RemoteIdentifier, - int PostPublic); + size_t n, + const char* RemoteIdentifier, + int PostPublic, + int is_reply +); /* values for which_set */ @@ -234,5 +241,39 @@ int CtdlIsMe(char *addr, int addr_buf_len); void aide_message(char *text, char *subject) __attribute__ ((deprecated)); +/* + * loading messages async via an FD: + * add IO->ReadMsg = NewAsyncMsg(...) + * and then call CtdlReadMessageBodyAsync() from your linreader handler. + */ + +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; + exist is ALWAYS freed */ + long eLen, /* length of exist */ + int crlf /* CRLF newlines instead of LF */ + ); + +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]" FORMAT, \ + CCCID, __VA_ARGS__) + +#define MSGM_syslog(LEVEL, FORMAT) \ + MSGDBGLOG(LEVEL) syslog(LEVEL, \ + "CC[%d]" FORMAT, \ + CCCID) + + #endif /* MSGBASE_H */