dummyt20.c
上传用户:ycwykj01
上传日期:2007-01-04
资源大小:1819k
文件大小:7k
源码类别:

网络编程

开发平台:

Unix_Linux

  1. /*
  2.  * Program: Dummy routines for TOPS-20
  3.  *
  4.  * Author: Mark Crispin
  5.  * 6158 Lariat Loop NE
  6.  * Bainbridge Island, WA  98110-2098
  7.  * Internet: MRC@Panda.COM
  8.  *
  9.  * Date: 13 June 1995
  10.  * Last Edited: 4 September 1999
  11.  *
  12.  * Copyright 1999 by Mark Crispin
  13.  *
  14.  *  Permission to use, copy, modify, and distribute this software and its
  15.  * documentation for any purpose and without fee is hereby granted, provided
  16.  * that the above copyright notice appears in all copies and that both the
  17.  * above copyright notices and this permission notice appear in supporting
  18.  * documentation, and that the name of Mark Crispin not be used in advertising
  19.  * or publicity pertaining to distribution of the software without specific,
  20.  * written prior permission.  This software is made available "as is", and
  21.  * MARK CRISPIN DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD TO
  22.  * THIS SOFTWARE, INCLUDING WITHOUT LIMITATION ALL IMPLIED WARRANTIES OF
  23.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND IN NO EVENT SHALL
  24.  * MARK CRISPIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES
  25.  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  26.  * WHETHER IN AN ACTION OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR STRICT
  27.  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
  28.  * THIS SOFTWARE.
  29.  *
  30.  */
  31. #include <ctype.h>
  32. #include <stdio.h>
  33. #include "mail.h"
  34. #include "osdep.h"
  35. #include "dummy.h"
  36. #include "misc.h"
  37. /* Dummy routines */
  38. /* Driver dispatch used by MAIL */
  39. DRIVER dummydriver = {
  40.   "dummy", /* driver name */
  41.   DR_LOCAL|DR_MAIL, /* driver flags */
  42.   (DRIVER *) NIL, /* next driver */
  43.   dummy_valid, /* mailbox is valid for us */
  44.   dummy_parameters, /* manipulate parameters */
  45.   dummy_scan, /* scan mailboxes */
  46.   dummy_list, /* list mailboxes */
  47.   dummy_lsub, /* list subscribed mailboxes */
  48.   NIL, /* subscribe to mailbox */
  49.   NIL, /* unsubscribe from mailbox */
  50.   dummy_create, /* create mailbox */
  51.   dummy_delete, /* delete mailbox */
  52.   dummy_rename, /* rename mailbox */
  53.   NIL, /* status of mailbox */
  54.   dummy_open, /* open mailbox */
  55.   dummy_close, /* close mailbox */
  56.   NIL, /* fetch message "fast" attributes */
  57.   NIL, /* fetch message flags */
  58.   NIL, /* fetch overview */
  59.   NIL, /* fetch message structure */
  60.   NIL, /* fetch header */
  61.   NIL, /* fetch text */
  62.   NIL, /* fetch message data */
  63.   NIL, /* unique identifier */
  64.   NIL, /* message number from UID */
  65.   NIL, /* modify flags */
  66.   NIL, /* per-message modify flags */
  67.   NIL, /* search for message based on criteria */
  68.   NIL, /* sort messages */
  69.   NIL, /* thread messages */
  70.   dummy_ping, /* ping mailbox to see if still alive */
  71.   dummy_check, /* check for new messages */
  72.   dummy_expunge, /* expunge deleted messages */
  73.   dummy_copy, /* copy messages to another mailbox */
  74.   dummy_append, /* append string message to mailbox */
  75.   NIL /* garbage collect stream */
  76. };
  77. /* prototype stream */
  78. MAILSTREAM dummyproto = {&dummydriver};
  79. /* Dummy validate mailbox
  80.  * Accepts: mailbox name
  81.  * Returns: our driver if name is valid, NIL otherwise
  82.  */
  83. DRIVER *dummy_valid (char *name)
  84. {
  85.   char tmp[MAILTMPLEN];
  86. /* must be valid local mailbox */
  87.   return (name && *name && (*name != '{') &&
  88. /* INBOX is always accepted */
  89.   ((!strcmp (ucase (strcpy (tmp,name)),"INBOX"))))
  90.     ? &dummydriver : NIL;
  91. }
  92. /* Dummy manipulate driver parameters
  93.  * Accepts: function code
  94.  *     function-dependent value
  95.  * Returns: function-dependent return value
  96.  */
  97. void *dummy_parameters (long function,void *value)
  98. {
  99.   return NIL;
  100. }
  101. /* Dummy scan mailboxes
  102.  * Accepts: mail stream
  103.  *     reference
  104.  *     pattern to search
  105.  *     string to scan
  106.  */
  107. void dummy_scan (MAILSTREAM *stream,char *ref,char *pat,char *contents)
  108. {
  109. /* return silently */
  110. }
  111. /* Dummy list mailboxes
  112.  * Accepts: mail stream
  113.  *     reference
  114.  *     pattern to search
  115.  */
  116. void dummy_list (MAILSTREAM *stream,char *ref,char *pat)
  117. {
  118. /* return silently */
  119. }
  120. /* Dummy list subscribed mailboxes
  121.  * Accepts: mail stream
  122.  *     reference
  123.  *     pattern to search
  124.  */
  125. void dummy_lsub (MAILSTREAM *stream,char *ref,char *pat)
  126. {
  127. /* return silently */
  128. }
  129. /* Dummy create mailbox
  130.  * Accepts: mail stream
  131.  *     mailbox name to create
  132.  *     driver type to use
  133.  * Returns: T on success, NIL on failure
  134.  */
  135. long dummy_create (MAILSTREAM *stream,char *mailbox)
  136. {
  137.   return NIL; /* always fails */
  138. }
  139. /* Dummy delete mailbox
  140.  * Accepts: mail stream
  141.  *     mailbox name to delete
  142.  * Returns: T on success, NIL on failure
  143.  */
  144. long dummy_delete (MAILSTREAM *stream,char *mailbox)
  145. {
  146.   return NIL; /* always fails */
  147. }
  148. /* Mail rename mailbox
  149.  * Accepts: mail stream
  150.  *     old mailbox name
  151.  *     new mailbox name
  152.  * Returns: T on success, NIL on failure
  153.  */
  154. long dummy_rename (MAILSTREAM *stream,char *old,char *newname)
  155. {
  156.   return NIL; /* always fails */
  157. }
  158. /* Dummy open
  159.  * Accepts: stream to open
  160.  * Returns: stream on success, NIL on failure
  161.  */
  162. MAILSTREAM *dummy_open (MAILSTREAM *stream)
  163. {
  164.   char tmp[MAILTMPLEN];
  165. /* OP_PROTOTYPE call or silence */
  166.   if (!stream || stream->silent) return NIL;
  167.   if (strcmp (ucase (strcpy (tmp,stream->mailbox)),"INBOX")) {
  168.     sprintf (tmp,"Not a mailbox: %s",stream->mailbox);
  169.     mm_log (tmp,ERROR);
  170.     return NIL; /* always fails */
  171.   }
  172.   if (!stream->silent) { /* only if silence not requested */
  173.     mail_exists (stream,0); /* say there are 0 messages */
  174.     mail_recent (stream,0);
  175.     stream->uid_validity = 1;
  176.   }
  177.   stream->inbox = T; /* note that it's an INBOX */
  178.   return stream; /* return success */
  179. }
  180. /* Dummy close
  181.  * Accepts: MAIL stream
  182.  *     options
  183.  */
  184. void dummy_close (MAILSTREAM *stream,long options)
  185. {
  186. /* return silently */
  187. }
  188. /* Dummy ping mailbox
  189.  * Accepts: MAIL stream
  190.  * Returns: T if stream alive, else NIL
  191.  * No-op for readonly files, since read/writer can expunge it from under us!
  192.  */
  193. long dummy_ping (MAILSTREAM *stream)
  194. {
  195.   return T;
  196. }
  197. /* Dummy check mailbox
  198.  * Accepts: MAIL stream
  199.  * No-op for readonly files, since read/writer can expunge it from under us!
  200.  */
  201. void dummy_check (MAILSTREAM *stream)
  202. {
  203.   dummy_ping (stream); /* invoke ping */
  204. }
  205. /* Dummy expunge mailbox
  206.  * Accepts: MAIL stream
  207.  */
  208. void dummy_expunge (MAILSTREAM *stream)
  209. {
  210. /* return silently */
  211. }
  212. /* Dummy copy message(s)
  213.  * Accepts: MAIL stream
  214.  *     sequence
  215.  *     destination mailbox
  216.  *     options
  217.  * Returns: T if copy successful, else NIL
  218.  */
  219. long dummy_copy (MAILSTREAM *stream,char *sequence,char *mailbox,long options)
  220. {
  221.   if ((options & CP_UID) ? mail_uid_sequence (stream,sequence) :
  222.       mail_sequence (stream,sequence)) fatal ("Impossible dummy_copy");
  223.   return NIL;
  224. }
  225. /* Dummy append message string
  226.  * Accepts: mail stream
  227.  *     destination mailbox
  228.  *     optional flags
  229.  *     optional date
  230.  *     stringstruct of message to append
  231.  * Returns: T on success, NIL on failure
  232.  */
  233. long dummy_append (MAILSTREAM *stream,char *mailbox,char *flags,char *date,
  234.    STRING *message)
  235. {
  236.   char tmp[MAILTMPLEN];
  237.   sprintf (tmp,"Can't append to %s",mailbox);
  238.   mm_log (tmp,ERROR); /* pass up error */
  239.   return NIL; /* always fails */
  240. }
  241. /* Dummy canonicalize name
  242.  * Accepts: buffer to write name
  243.  *     reference
  244.  *     pattern
  245.  * Returns: T if success, NIL if failure
  246.  */
  247. long dummy_canonicalize (char *tmp,char *ref,char *pat)
  248. {
  249.   if (*pat == '{' || (ref && (*ref == '{'))) return NIL;
  250. /* write name with reference */
  251.   if (ref && *ref && !strpbrk (pat,":<"))
  252.     sprintf (tmp,"%s%s",ref,pat);
  253.   else strcpy (tmp,pat); /* ignore reference, only need mailbox name */
  254.   return T;
  255. }