imapext-2007

annotate src/osdep/tops-20/dummyt20.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 TOPS-20
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: 13 June 1995
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 /* must be valid local mailbox */
yuuji@0 105 return (name && *name && (*name != '{') && !compare_cstring (name,"INBOX")) ?
yuuji@0 106 &dummydriver : NIL;
yuuji@0 107 }
yuuji@0 108
yuuji@0 109
yuuji@0 110 /* Dummy manipulate driver parameters
yuuji@0 111 * Accepts: function code
yuuji@0 112 * function-dependent value
yuuji@0 113 * Returns: function-dependent return value
yuuji@0 114 */
yuuji@0 115
yuuji@0 116 void *dummy_parameters (long function,void *value)
yuuji@0 117 {
yuuji@0 118 return NIL;
yuuji@0 119 }
yuuji@0 120
yuuji@0 121 /* Dummy scan mailboxes
yuuji@0 122 * Accepts: mail stream
yuuji@0 123 * reference
yuuji@0 124 * pattern to search
yuuji@0 125 * string to scan
yuuji@0 126 */
yuuji@0 127
yuuji@0 128 void dummy_scan (MAILSTREAM *stream,char *ref,char *pat,char *contents)
yuuji@0 129 {
yuuji@0 130 /* return silently */
yuuji@0 131 }
yuuji@0 132
yuuji@0 133
yuuji@0 134 /* Dummy list mailboxes
yuuji@0 135 * Accepts: mail stream
yuuji@0 136 * reference
yuuji@0 137 * pattern to search
yuuji@0 138 */
yuuji@0 139
yuuji@0 140 void dummy_list (MAILSTREAM *stream,char *ref,char *pat)
yuuji@0 141 {
yuuji@0 142 /* return silently */
yuuji@0 143 }
yuuji@0 144
yuuji@0 145
yuuji@0 146 /* Dummy list subscribed mailboxes
yuuji@0 147 * Accepts: mail stream
yuuji@0 148 * reference
yuuji@0 149 * pattern to search
yuuji@0 150 */
yuuji@0 151
yuuji@0 152 void dummy_lsub (MAILSTREAM *stream,char *ref,char *pat)
yuuji@0 153 {
yuuji@0 154 /* return silently */
yuuji@0 155 }
yuuji@0 156
yuuji@0 157 /* Dummy create mailbox
yuuji@0 158 * Accepts: mail stream
yuuji@0 159 * mailbox name to create
yuuji@0 160 * driver type to use
yuuji@0 161 * Returns: T on success, NIL on failure
yuuji@0 162 */
yuuji@0 163
yuuji@0 164 long dummy_create (MAILSTREAM *stream,char *mailbox)
yuuji@0 165 {
yuuji@0 166 return NIL; /* always fails */
yuuji@0 167 }
yuuji@0 168
yuuji@0 169
yuuji@0 170 /* Dummy delete mailbox
yuuji@0 171 * Accepts: mail stream
yuuji@0 172 * mailbox name to delete
yuuji@0 173 * Returns: T on success, NIL on failure
yuuji@0 174 */
yuuji@0 175
yuuji@0 176 long dummy_delete (MAILSTREAM *stream,char *mailbox)
yuuji@0 177 {
yuuji@0 178 return NIL; /* always fails */
yuuji@0 179 }
yuuji@0 180
yuuji@0 181
yuuji@0 182 /* Mail rename mailbox
yuuji@0 183 * Accepts: mail stream
yuuji@0 184 * old mailbox name
yuuji@0 185 * new mailbox name
yuuji@0 186 * Returns: T on success, NIL on failure
yuuji@0 187 */
yuuji@0 188
yuuji@0 189 long dummy_rename (MAILSTREAM *stream,char *old,char *newname)
yuuji@0 190 {
yuuji@0 191 return NIL; /* always fails */
yuuji@0 192 }
yuuji@0 193
yuuji@0 194 /* Dummy open
yuuji@0 195 * Accepts: stream to open
yuuji@0 196 * Returns: stream on success, NIL on failure
yuuji@0 197 */
yuuji@0 198
yuuji@0 199 MAILSTREAM *dummy_open (MAILSTREAM *stream)
yuuji@0 200 {
yuuji@0 201 char tmp[MAILTMPLEN];
yuuji@0 202 /* OP_PROTOTYPE call or silence */
yuuji@0 203 if (!stream || stream->silent) return NIL;
yuuji@0 204 if (compare_cstring (stream->mailbox,"INBOX")) {
yuuji@0 205 sprintf (tmp,"Not a mailbox: %s",stream->mailbox);
yuuji@0 206 mm_log (tmp,ERROR);
yuuji@0 207 return NIL; /* always fails */
yuuji@0 208 }
yuuji@0 209 if (!stream->silent) { /* only if silence not requested */
yuuji@0 210 mail_exists (stream,0); /* say there are 0 messages */
yuuji@0 211 mail_recent (stream,0);
yuuji@0 212 stream->uid_validity = time (0);
yuuji@0 213 }
yuuji@0 214 stream->inbox = T; /* note that it's an INBOX */
yuuji@0 215 return stream; /* return success */
yuuji@0 216 }
yuuji@0 217
yuuji@0 218
yuuji@0 219 /* Dummy close
yuuji@0 220 * Accepts: MAIL stream
yuuji@0 221 * options
yuuji@0 222 */
yuuji@0 223
yuuji@0 224 void dummy_close (MAILSTREAM *stream,long options)
yuuji@0 225 {
yuuji@0 226 /* return silently */
yuuji@0 227 }
yuuji@0 228
yuuji@0 229 /* Dummy ping mailbox
yuuji@0 230 * Accepts: MAIL stream
yuuji@0 231 * Returns: T if stream alive, else NIL
yuuji@0 232 * No-op for readonly files, since read/writer can expunge it from under us!
yuuji@0 233 */
yuuji@0 234
yuuji@0 235 long dummy_ping (MAILSTREAM *stream)
yuuji@0 236 {
yuuji@0 237 return T;
yuuji@0 238 }
yuuji@0 239
yuuji@0 240
yuuji@0 241 /* Dummy check mailbox
yuuji@0 242 * Accepts: MAIL stream
yuuji@0 243 * No-op for readonly files, since read/writer can expunge it from under us!
yuuji@0 244 */
yuuji@0 245
yuuji@0 246 void dummy_check (MAILSTREAM *stream)
yuuji@0 247 {
yuuji@0 248 dummy_ping (stream); /* invoke ping */
yuuji@0 249 }
yuuji@0 250
yuuji@0 251
yuuji@0 252 /* Dummy expunge mailbox
yuuji@0 253 * Accepts: MAIL stream
yuuji@0 254 * sequence to expunge if non-NIL
yuuji@0 255 * expunge options
yuuji@0 256 * Returns: T, always
yuuji@0 257 */
yuuji@0 258
yuuji@0 259 long dummy_expunge (MAILSTREAM *stream,char *sequence,long options)
yuuji@0 260 {
yuuji@0 261 return LONGT;
yuuji@0 262 }
yuuji@0 263
yuuji@0 264 /* Dummy copy message(s)
yuuji@0 265 * Accepts: MAIL stream
yuuji@0 266 * sequence
yuuji@0 267 * destination mailbox
yuuji@0 268 * options
yuuji@0 269 * Returns: T if copy successful, else NIL
yuuji@0 270 */
yuuji@0 271
yuuji@0 272 long dummy_copy (MAILSTREAM *stream,char *sequence,char *mailbox,long options)
yuuji@0 273 {
yuuji@0 274 if ((options & CP_UID) ? mail_uid_sequence (stream,sequence) :
yuuji@0 275 mail_sequence (stream,sequence)) fatal ("Impossible dummy_copy");
yuuji@0 276 return NIL;
yuuji@0 277 }
yuuji@0 278
yuuji@0 279
yuuji@0 280 /* Dummy append message string
yuuji@0 281 * Accepts: mail stream
yuuji@0 282 * destination mailbox
yuuji@0 283 * append callback function
yuuji@0 284 * data for callback
yuuji@0 285 * Returns: T on success, NIL on failure
yuuji@0 286 */
yuuji@0 287
yuuji@0 288 long dummy_append (MAILSTREAM *stream,char *mailbox,append_t af,void *data)
yuuji@0 289 {
yuuji@0 290 char tmp[MAILTMPLEN];
yuuji@0 291 sprintf (tmp,"Can't append to %s",mailbox);
yuuji@0 292 mm_log (tmp,ERROR); /* pass up error */
yuuji@0 293 return NIL; /* always fails */
yuuji@0 294 }

UW-IMAP'd extensions by yuuji