1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238
|
/* $Id: msgbase.h 8430 2010-03-05 21:19:07Z ajc $ */
#ifndef MSGBASE_H
#define MSGBASE_H
enum {
MSGS_ALL,
MSGS_OLD,
MSGS_NEW,
MSGS_FIRST,
MSGS_LAST,
MSGS_GT,
MSGS_EQ,
MSGS_SEARCH,
MSGS_LT
};
enum {
MSG_HDRS_BRIEF = 0,
MSG_HDRS_ALL = 1,
MSG_HDRS_EUID = 4
};
/*
* Possible return codes from CtdlOutputMsg()
*/
enum {
om_ok,
om_not_logged_in,
om_no_such_msg,
om_mime_error
};
/*
* Values of "headers_only" when calling message output routines
*/
#define HEADERS_ALL 0 /* Headers and body */
#define HEADERS_ONLY 1 /* Headers only */
#define HEADERS_NONE 2 /* Body only */
#define HEADERS_FAST 3 /* Headers only with no MIME info */
struct ma_info {
int is_ma; /* Set to 1 if we are using this stuff */
int freeze; /* Freeze the replacement chain because we're
* digging through a subsection */
int did_print; /* One alternative has been displayed */
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 */
};
struct repl { /* Info for replication checking */
char exclusive_id[SIZ];
time_t highest;
};
/* 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
* stick into someone's address book. But we defer this operaiton so
* it can be done asynchronously.
*/
struct addresses_to_be_filed {
struct addresses_to_be_filed *next;
char *roomname;
char *collected_addresses;
};
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 *, 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);
void GetMetaData(struct MetaData *, long);
void PutMetaData(struct MetaData *);
void AdjRefCount(long, int);
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,
ForEachMsgCallback CallBack,
void *userdata);
int CtdlDeleteMessages(char *, long *, int, char *);
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 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 */
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 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 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);
/* values for which_set */
enum {
ctdlsetseen_seen,
ctdlsetseen_answered
};
void CtdlSetSeen(long *target_msgnums, int num_target_msgnums,
int target_setting, int which_set,
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 */
char *recipient, /* NULL if it's not mail */
char *recp_cc, /* NULL if it's not mail */
char *room, /* room where it's going */
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 */
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 */
|