1
/* ========================================================================
2
* Copyright 1988-2006 University of Washington
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
8
* http://www.apache.org/licenses/LICENSE-2.0
11
* ========================================================================
15
* Program: Dummy routines for Mac
17
* Author: Mark Crispin
18
* Networks and Distributed Computing
19
* Computing & Communications
20
* University of Washington
21
* Administration Building, AG-44
23
* Internet: MRC@CAC.Washington.EDU
26
* Last Edited: 30 August 2006
37
/* Function prototypes */
39
DRIVER *dummy_valid (char *name);
40
void *dummy_parameters (long function,void *value);
41
MAILSTREAM *dummy_open (MAILSTREAM *stream);
42
void dummy_close (MAILSTREAM *stream,long options);
43
long dummy_ping (MAILSTREAM *stream);
44
void dummy_check (MAILSTREAM *stream);
45
long dummy_expunge (MAILSTREAM *stream,char *sequence,long options);
46
long dummy_copy (MAILSTREAM *stream,char *sequence,char *mailbox,long options);
47
long dummy_append (MAILSTREAM *stream,char *mailbox,append_t af,void *data);
52
/* Driver dispatch used by MAIL */
54
DRIVER dummydriver = {
55
"dummy", /* driver name */
56
DR_LOCAL|DR_MAIL, /* driver flags */
57
(DRIVER *) NIL, /* next driver */
58
dummy_valid, /* mailbox is valid for us */
59
dummy_parameters, /* manipulate parameters */
60
dummy_scan, /* scan mailboxes */
61
dummy_list, /* list mailboxes */
62
dummy_lsub, /* list subscribed mailboxes */
63
NIL, /* subscribe to mailbox */
64
NIL, /* unsubscribe from mailbox */
65
dummy_create, /* create mailbox */
66
dummy_delete, /* delete mailbox */
67
dummy_rename, /* rename mailbox */
68
mail_status_default, /* status of mailbox */
69
dummy_open, /* open mailbox */
70
dummy_close, /* close mailbox */
71
NIL, /* fetch message "fast" attributes */
72
NIL, /* fetch message flags */
73
NIL, /* fetch overview */
74
NIL, /* fetch message structure */
75
NIL, /* fetch header */
77
NIL, /* fetch message data */
78
NIL, /* unique identifier */
79
NIL, /* message number from UID */
80
NIL, /* modify flags */
81
NIL, /* per-message modify flags */
82
NIL, /* search for message based on criteria */
83
NIL, /* sort messages */
84
NIL, /* thread messages */
85
dummy_ping, /* ping mailbox to see if still alive */
86
dummy_check, /* check for new messages */
87
dummy_expunge, /* expunge deleted messages */
88
dummy_copy, /* copy messages to another mailbox */
89
dummy_append, /* append string message to mailbox */
90
NIL /* garbage collect stream */
94
/* prototype stream */
95
MAILSTREAM dummyproto = {&dummydriver};
97
/* Dummy validate mailbox
98
* Accepts: mailbox name
99
* Returns: our driver if name is valid, NIL otherwise
102
DRIVER *dummy_valid (char *name)
104
char tmp[MAILTMPLEN];
105
/* must be valid local mailbox */
106
return (name && *name && (*name != '{') && !compare_cstring (name,"INBOX")) ?
111
/* Dummy manipulate driver parameters
112
* Accepts: function code
113
* function-dependent value
114
* Returns: function-dependent return value
117
void *dummy_parameters (long function,void *value)
122
/* Dummy scan mailboxes
123
* Accepts: mail stream
129
void dummy_scan (MAILSTREAM *stream,char *ref,char *pat,char *contents)
131
/* return silently */
135
/* Dummy list mailboxes
136
* Accepts: mail stream
141
void dummy_list (MAILSTREAM *stream,char *ref,char *pat)
143
/* return silently */
147
/* Dummy list subscribed mailboxes
148
* Accepts: mail stream
153
void dummy_lsub (MAILSTREAM *stream,char *ref,char *pat)
155
/* return silently */
158
/* Dummy create mailbox
159
* Accepts: mail stream
160
* mailbox name to create
162
* Returns: T on success, NIL on failure
165
long dummy_create (MAILSTREAM *stream,char *mailbox)
167
return NIL; /* always fails */
171
/* Dummy delete mailbox
172
* Accepts: mail stream
173
* mailbox name to delete
174
* Returns: T on success, NIL on failure
177
long dummy_delete (MAILSTREAM *stream,char *mailbox)
179
return NIL; /* always fails */
183
/* Mail rename mailbox
184
* Accepts: mail stream
187
* Returns: T on success, NIL on failure
190
long dummy_rename (MAILSTREAM *stream,char *old,char *newname)
192
return NIL; /* always fails */
196
* Accepts: stream to open
197
* Returns: stream on success, NIL on failure
200
MAILSTREAM *dummy_open (MAILSTREAM *stream)
202
char tmp[MAILTMPLEN];
203
/* OP_PROTOTYPE call or silence */
204
if (!stream || stream->silent) return NIL;
205
if (compare_cstring (stream->mailbox,"INBOX")) {
206
sprintf (tmp,"Not a mailbox: %s",stream->mailbox);
208
return NIL; /* always fails */
210
if (!stream->silent) { /* only if silence not requested */
211
mail_exists (stream,0); /* say there are 0 messages */
212
mail_recent (stream,0);
213
stream->uid_validity = time (0);
215
stream->inbox = T; /* note that it's an INBOX */
216
return stream; /* return success */
221
* Accepts: MAIL stream
225
void dummy_close (MAILSTREAM *stream,long options)
227
/* return silently */
230
/* Dummy ping mailbox
231
* Accepts: MAIL stream
232
* Returns: T if stream alive, else NIL
233
* No-op for readonly files, since read/writer can expunge it from under us!
236
long dummy_ping (MAILSTREAM *stream)
242
/* Dummy check mailbox
243
* Accepts: MAIL stream
244
* No-op for readonly files, since read/writer can expunge it from under us!
247
void dummy_check (MAILSTREAM *stream)
249
dummy_ping (stream); /* invoke ping */
253
/* Dummy expunge mailbox
254
* Accepts: MAIL stream
255
* sequence to expunge if non-NIL
260
long dummy_expunge (MAILSTREAM *stream,char *sequence,long options)
265
/* Dummy copy message(s)
266
* Accepts: MAIL stream
268
* destination mailbox
270
* Returns: T if copy successful, else NIL
273
long dummy_copy (MAILSTREAM *stream,char *sequence,char *mailbox,long options)
275
if ((options & CP_UID) ? mail_uid_sequence (stream,sequence) :
276
mail_sequence (stream,sequence)) fatal ("Impossible dummy_copy");
281
/* Dummy append message string
282
* Accepts: mail stream
283
* destination mailbox
284
* append callback function
286
* Returns: T on success, NIL on failure
289
long dummy_append (MAILSTREAM *stream,char *mailbox,append_t af,void *data)
291
char tmp[MAILTMPLEN];
292
sprintf (tmp,"Can't append to %s",mailbox);
293
mm_log (tmp,ERROR); /* pass up error */
294
return NIL; /* always fails */