imapext-2007

annotate src/osdep/mac/dummymac.c @ 0:ada5e610ab86

imap-2007e
author yuuji@gentei.org
date Mon, 14 Sep 2009 15:17:45 +0900
parents
children
rev   line source
yuuji@0 1 /* ========================================================================
yuuji@0 2 * Copyright 1988-2006 University of Washington
yuuji@0 3 *
yuuji@0 4 * Licensed under the Apache License, Version 2.0 (the "License");
yuuji@0 5 * you may not use this file except in compliance with the License.
yuuji@0 6 * You may obtain a copy of the License at
yuuji@0 7 *
yuuji@0 8 * http://www.apache.org/licenses/LICENSE-2.0
yuuji@0 9 *
yuuji@0 10 *
yuuji@0 11 * ========================================================================
yuuji@0 12 */
yuuji@0 13
yuuji@0 14 /*
yuuji@0 15 * Program: Dummy routines for Mac
yuuji@0 16 *
yuuji@0 17 * Author: Mark Crispin
yuuji@0 18 * Networks and Distributed Computing
yuuji@0 19 * Computing & Communications
yuuji@0 20 * University of Washington
yuuji@0 21 * Administration Building, AG-44
yuuji@0 22 * Seattle, WA 98195
yuuji@0 23 * Internet: MRC@CAC.Washington.EDU
yuuji@0 24 *
yuuji@0 25 * Date: 24 May 1993
yuuji@0 26 * Last Edited: 30 August 2006
yuuji@0 27 */
yuuji@0 28
yuuji@0 29
yuuji@0 30 #include <ctype.h>
yuuji@0 31 #include <stdio.h>
yuuji@0 32 #include "mail.h"
yuuji@0 33 #include "osdep.h"
yuuji@0 34 #include "dummy.h"
yuuji@0 35 #include "misc.h"
yuuji@0 36
yuuji@0 37 /* Function prototypes */
yuuji@0 38
yuuji@0 39 DRIVER *dummy_valid (char *name);
yuuji@0 40 void *dummy_parameters (long function,void *value);
yuuji@0 41 MAILSTREAM *dummy_open (MAILSTREAM *stream);
yuuji@0 42 void dummy_close (MAILSTREAM *stream,long options);
yuuji@0 43 long dummy_ping (MAILSTREAM *stream);
yuuji@0 44 void dummy_check (MAILSTREAM *stream);
yuuji@0 45 long dummy_expunge (MAILSTREAM *stream,char *sequence,long options);
yuuji@0 46 long dummy_copy (MAILSTREAM *stream,char *sequence,char *mailbox,long options);
yuuji@0 47 long dummy_append (MAILSTREAM *stream,char *mailbox,append_t af,void *data);
yuuji@0 48
yuuji@0 49 /* Dummy routines */
yuuji@0 50
yuuji@0 51
yuuji@0 52 /* Driver dispatch used by MAIL */
yuuji@0 53
yuuji@0 54 DRIVER dummydriver = {
yuuji@0 55 "dummy", /* driver name */
yuuji@0 56 DR_LOCAL|DR_MAIL, /* driver flags */
yuuji@0 57 (DRIVER *) NIL, /* next driver */
yuuji@0 58 dummy_valid, /* mailbox is valid for us */
yuuji@0 59 dummy_parameters, /* manipulate parameters */
yuuji@0 60 dummy_scan, /* scan mailboxes */
yuuji@0 61 dummy_list, /* list mailboxes */
yuuji@0 62 dummy_lsub, /* list subscribed mailboxes */
yuuji@0 63 NIL, /* subscribe to mailbox */
yuuji@0 64 NIL, /* unsubscribe from mailbox */
yuuji@0 65 dummy_create, /* create mailbox */
yuuji@0 66 dummy_delete, /* delete mailbox */
yuuji@0 67 dummy_rename, /* rename mailbox */
yuuji@0 68 mail_status_default, /* status of mailbox */
yuuji@0 69 dummy_open, /* open mailbox */
yuuji@0 70 dummy_close, /* close mailbox */
yuuji@0 71 NIL, /* fetch message "fast" attributes */
yuuji@0 72 NIL, /* fetch message flags */
yuuji@0 73 NIL, /* fetch overview */
yuuji@0 74 NIL, /* fetch message structure */
yuuji@0 75 NIL, /* fetch header */
yuuji@0 76 NIL, /* fetch text */
yuuji@0 77 NIL, /* fetch message data */
yuuji@0 78 NIL, /* unique identifier */
yuuji@0 79 NIL, /* message number from UID */
yuuji@0 80 NIL, /* modify flags */
yuuji@0 81 NIL, /* per-message modify flags */
yuuji@0 82 NIL, /* search for message based on criteria */
yuuji@0 83 NIL, /* sort messages */
yuuji@0 84 NIL, /* thread messages */
yuuji@0 85 dummy_ping, /* ping mailbox to see if still alive */
yuuji@0 86 dummy_check, /* check for new messages */
yuuji@0 87 dummy_expunge, /* expunge deleted messages */
yuuji@0 88 dummy_copy, /* copy messages to another mailbox */
yuuji@0 89 dummy_append, /* append string message to mailbox */
yuuji@0 90 NIL /* garbage collect stream */
yuuji@0 91 };
yuuji@0 92
yuuji@0 93
yuuji@0 94 /* prototype stream */
yuuji@0 95 MAILSTREAM dummyproto = {&dummydriver};
yuuji@0 96
yuuji@0 97 /* Dummy validate mailbox
yuuji@0 98 * Accepts: mailbox name
yuuji@0 99 * Returns: our driver if name is valid, NIL otherwise
yuuji@0 100 */
yuuji@0 101
yuuji@0 102 DRIVER *dummy_valid (char *name)
yuuji@0 103 {
yuuji@0 104 char tmp[MAILTMPLEN];
yuuji@0 105 /* must be valid local mailbox */
yuuji@0 106 return (name && *name && (*name != '{') && !compare_cstring (name,"INBOX")) ?
yuuji@0 107 &dummydriver : NIL;
yuuji@0 108 }
yuuji@0 109
yuuji@0 110
yuuji@0 111 /* Dummy manipulate driver parameters
yuuji@0 112 * Accepts: function code
yuuji@0 113 * function-dependent value
yuuji@0 114 * Returns: function-dependent return value
yuuji@0 115 */
yuuji@0 116
yuuji@0 117 void *dummy_parameters (long function,void *value)
yuuji@0 118 {
yuuji@0 119 return NIL;
yuuji@0 120 }
yuuji@0 121
yuuji@0 122 /* Dummy scan mailboxes
yuuji@0 123 * Accepts: mail stream
yuuji@0 124 * reference
yuuji@0 125 * pattern to search
yuuji@0 126 * string to scan
yuuji@0 127 */
yuuji@0 128
yuuji@0 129 void dummy_scan (MAILSTREAM *stream,char *ref,char *pat,char *contents)
yuuji@0 130 {
yuuji@0 131 /* return silently */
yuuji@0 132 }
yuuji@0 133
yuuji@0 134
yuuji@0 135 /* Dummy list mailboxes
yuuji@0 136 * Accepts: mail stream
yuuji@0 137 * reference
yuuji@0 138 * pattern to search
yuuji@0 139 */
yuuji@0 140
yuuji@0 141 void dummy_list (MAILSTREAM *stream,char *ref,char *pat)
yuuji@0 142 {
yuuji@0 143 /* return silently */
yuuji@0 144 }
yuuji@0 145
yuuji@0 146
yuuji@0 147 /* Dummy list subscribed mailboxes
yuuji@0 148 * Accepts: mail stream
yuuji@0 149 * reference
yuuji@0 150 * pattern to search
yuuji@0 151 */
yuuji@0 152
yuuji@0 153 void dummy_lsub (MAILSTREAM *stream,char *ref,char *pat)
yuuji@0 154 {
yuuji@0 155 /* return silently */
yuuji@0 156 }
yuuji@0 157
yuuji@0 158 /* Dummy create mailbox
yuuji@0 159 * Accepts: mail stream
yuuji@0 160 * mailbox name to create
yuuji@0 161 * driver type to use
yuuji@0 162 * Returns: T on success, NIL on failure
yuuji@0 163 */
yuuji@0 164
yuuji@0 165 long dummy_create (MAILSTREAM *stream,char *mailbox)
yuuji@0 166 {
yuuji@0 167 return NIL; /* always fails */
yuuji@0 168 }
yuuji@0 169
yuuji@0 170
yuuji@0 171 /* Dummy delete mailbox
yuuji@0 172 * Accepts: mail stream
yuuji@0 173 * mailbox name to delete
yuuji@0 174 * Returns: T on success, NIL on failure
yuuji@0 175 */
yuuji@0 176
yuuji@0 177 long dummy_delete (MAILSTREAM *stream,char *mailbox)
yuuji@0 178 {
yuuji@0 179 return NIL; /* always fails */
yuuji@0 180 }
yuuji@0 181
yuuji@0 182
yuuji@0 183 /* Mail rename mailbox
yuuji@0 184 * Accepts: mail stream
yuuji@0 185 * old mailbox name
yuuji@0 186 * new mailbox name
yuuji@0 187 * Returns: T on success, NIL on failure
yuuji@0 188 */
yuuji@0 189
yuuji@0 190 long dummy_rename (MAILSTREAM *stream,char *old,char *newname)
yuuji@0 191 {
yuuji@0 192 return NIL; /* always fails */
yuuji@0 193 }
yuuji@0 194
yuuji@0 195 /* Dummy open
yuuji@0 196 * Accepts: stream to open
yuuji@0 197 * Returns: stream on success, NIL on failure
yuuji@0 198 */
yuuji@0 199
yuuji@0 200 MAILSTREAM *dummy_open (MAILSTREAM *stream)
yuuji@0 201 {
yuuji@0 202 char tmp[MAILTMPLEN];
yuuji@0 203 /* OP_PROTOTYPE call or silence */
yuuji@0 204 if (!stream || stream->silent) return NIL;
yuuji@0 205 if (compare_cstring (stream->mailbox,"INBOX")) {
yuuji@0 206 sprintf (tmp,"Not a mailbox: %s",stream->mailbox);
yuuji@0 207 mm_log (tmp,ERROR);
yuuji@0 208 return NIL; /* always fails */
yuuji@0 209 }
yuuji@0 210 if (!stream->silent) { /* only if silence not requested */
yuuji@0 211 mail_exists (stream,0); /* say there are 0 messages */
yuuji@0 212 mail_recent (stream,0);
yuuji@0 213 stream->uid_validity = time (0);
yuuji@0 214 }
yuuji@0 215 stream->inbox = T; /* note that it's an INBOX */
yuuji@0 216 return stream; /* return success */
yuuji@0 217 }
yuuji@0 218
yuuji@0 219
yuuji@0 220 /* Dummy close
yuuji@0 221 * Accepts: MAIL stream
yuuji@0 222 * options
yuuji@0 223 */
yuuji@0 224
yuuji@0 225 void dummy_close (MAILSTREAM *stream,long options)
yuuji@0 226 {
yuuji@0 227 /* return silently */
yuuji@0 228 }
yuuji@0 229
yuuji@0 230 /* Dummy ping mailbox
yuuji@0 231 * Accepts: MAIL stream
yuuji@0 232 * Returns: T if stream alive, else NIL
yuuji@0 233 * No-op for readonly files, since read/writer can expunge it from under us!
yuuji@0 234 */
yuuji@0 235
yuuji@0 236 long dummy_ping (MAILSTREAM *stream)
yuuji@0 237 {
yuuji@0 238 return T;
yuuji@0 239 }
yuuji@0 240
yuuji@0 241
yuuji@0 242 /* Dummy check mailbox
yuuji@0 243 * Accepts: MAIL stream
yuuji@0 244 * No-op for readonly files, since read/writer can expunge it from under us!
yuuji@0 245 */
yuuji@0 246
yuuji@0 247 void dummy_check (MAILSTREAM *stream)
yuuji@0 248 {
yuuji@0 249 dummy_ping (stream); /* invoke ping */
yuuji@0 250 }
yuuji@0 251
yuuji@0 252
yuuji@0 253 /* Dummy expunge mailbox
yuuji@0 254 * Accepts: MAIL stream
yuuji@0 255 * sequence to expunge if non-NIL
yuuji@0 256 * expunge options
yuuji@0 257 * Returns: T, always
yuuji@0 258 */
yuuji@0 259
yuuji@0 260 long dummy_expunge (MAILSTREAM *stream,char *sequence,long options)
yuuji@0 261 {
yuuji@0 262 return LONGT;
yuuji@0 263 }
yuuji@0 264
yuuji@0 265 /* Dummy copy message(s)
yuuji@0 266 * Accepts: MAIL stream
yuuji@0 267 * sequence
yuuji@0 268 * destination mailbox
yuuji@0 269 * options
yuuji@0 270 * Returns: T if copy successful, else NIL
yuuji@0 271 */
yuuji@0 272
yuuji@0 273 long dummy_copy (MAILSTREAM *stream,char *sequence,char *mailbox,long options)
yuuji@0 274 {
yuuji@0 275 if ((options & CP_UID) ? mail_uid_sequence (stream,sequence) :
yuuji@0 276 mail_sequence (stream,sequence)) fatal ("Impossible dummy_copy");
yuuji@0 277 return NIL;
yuuji@0 278 }
yuuji@0 279
yuuji@0 280
yuuji@0 281 /* Dummy append message string
yuuji@0 282 * Accepts: mail stream
yuuji@0 283 * destination mailbox
yuuji@0 284 * append callback function
yuuji@0 285 * data for callback
yuuji@0 286 * Returns: T on success, NIL on failure
yuuji@0 287 */
yuuji@0 288
yuuji@0 289 long dummy_append (MAILSTREAM *stream,char *mailbox,append_t af,void *data)
yuuji@0 290 {
yuuji@0 291 char tmp[MAILTMPLEN];
yuuji@0 292 sprintf (tmp,"Can't append to %s",mailbox);
yuuji@0 293 mm_log (tmp,ERROR); /* pass up error */
yuuji@0 294 return NIL; /* always fails */
yuuji@0 295 }

UW-IMAP'd extensions by yuuji