X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmsgbase.h;h=084e5189b171cf5c1baeb1d7b8aedbf417b61f49;hb=2da538b2dcf832611d6a81b233bab64c7bf9b009;hp=56f2488249358035514925632b27116a1a9b2737;hpb=f2899a64d7a8d232d6c0bf36ee62254a2dd2152d;p=citadel.git diff --git a/citadel/msgbase.h b/citadel/msgbase.h index 56f248824..084e5189b 100644 --- a/citadel/msgbase.h +++ b/citadel/msgbase.h @@ -1,10 +1,8 @@ -/* $Id$ */ #ifndef MSGBASE_H #define MSGBASE_H -#define aide_message(text, subject) quickie_message("Citadel",NULL,NULL,AIDEROOM,text,FMT_CITADEL,subject) - +#include "event_client.h" enum { MSGS_ALL, MSGS_OLD, @@ -13,7 +11,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 }; /* @@ -23,7 +28,8 @@ enum { om_ok, om_not_logged_in, om_no_such_msg, - om_mime_error + om_mime_error, + om_access_denied }; /* @@ -43,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? */ }; @@ -90,7 +97,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); @@ -101,7 +108,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); @@ -113,12 +120,13 @@ 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 *req_room, /* Room to stuff it in */ @@ -137,11 +145,18 @@ 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, int sock); -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? */ @@ -151,18 +166,21 @@ int CtdlOutputMsg(long msg_num, /* message number (local) to fetch */ int flags /* should the bessage be exported clean? */ ); -#define QP_EADDR (1<<0) -#define CRLF (1<<1) -#define ESC_DOT (1<<2) +/* 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 do_proto, /* do Citadel protocol responses? */ int crlf, /* 0=LF, 1=CRLF */ int flags /* should the bessage be exported clean? */ ); int CtdlDoIHavePermissionToDeleteMessagesFromThisRoom(void); +int CtdlDoIHavePermissionToReadMessagesInThisRoom(void); enum { POST_LOGGED_IN, @@ -170,10 +188,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 */ @@ -186,7 +207,7 @@ 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); @@ -209,4 +230,38 @@ struct CtdlMessage *CtdlMakeMessage( 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)); + +void seenit_store(struct seenit **si, long msgnum); +int seenit_isthere(struct seenit *si, long msgnum); +void seenit_free(struct seenit **si); + + + +/* + * 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); + + + #endif /* MSGBASE_H */