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

网络编程

开发平台:

Unix_Linux

  1. /*
  2.  * Program: Interactive Mail Access Protocol 4rev1 (IMAP4R1) routines
  3.  *
  4.  * Author: Mark Crispin
  5.  * Networks and Distributed Computing
  6.  * Computing & Communications
  7.  * University of Washington
  8.  * Administration Building, AG-44
  9.  * Seattle, WA  98195
  10.  * Internet: MRC@CAC.Washington.EDU
  11.  *
  12.  * Date: 14 October 1988
  13.  * Last Edited: 27 July 1999
  14.  *
  15.  * Sponsorship: The original version of this work was developed in the
  16.  * Symbolic Systems Resources Group of the Knowledge Systems
  17.  * Laboratory at Stanford University in 1987-88, and was funded
  18.  * by the Biomedical Research Technology Program of the National
  19.  * Institutes of Health under grant number RR-00785.
  20.  *
  21.  * Original version Copyright 1988 by The Leland Stanford Junior University
  22.  * Copyright 1999 by the University of Washington
  23.  *
  24.  *  Permission to use, copy, modify, and distribute this software and its
  25.  * documentation for any purpose and without fee is hereby granted, provided
  26.  * that the above copyright notices appear in all copies and that both the
  27.  * above copyright notices and this permission notice appear in supporting
  28.  * documentation, and that the name of the University of Washington or The
  29.  * Leland Stanford Junior University not be used in advertising or publicity
  30.  * pertaining to distribution of the software without specific, written prior
  31.  * permission.  This software is made available "as is", and
  32.  * THE UNIVERSITY OF WASHINGTON AND THE LELAND STANFORD JUNIOR UNIVERSITY
  33.  * DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD TO THIS SOFTWARE,
  34.  * INCLUDING WITHOUT LIMITATION ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
  35.  * FITNESS FOR A PARTICULAR PURPOSE, AND IN NO EVENT SHALL THE UNIVERSITY OF
  36.  * WASHINGTON OR THE LELAND STANFORD JUNIOR UNIVERSITY BE LIABLE FOR ANY
  37.  * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
  38.  * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
  39.  * CONTRACT, TORT (INCLUDING NEGLIGENCE) OR STRICT LIABILITY, ARISING OUT OF
  40.  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  41.  *
  42.  */
  43. /* Parameters */
  44. #define MAXLOGINTRIALS 3 /* maximum number of login trials */
  45. #define IMAPLOOKAHEAD 20 /* envelope lookahead */
  46. #define IMAPUIDLOOKAHEAD 1000 /* UID lookahead */
  47. #define IMAPTCPPORT (long) 143 /* assigned TCP contact port */
  48. /* Parsed reply message from imap_reply */
  49. typedef struct imap_parsed_reply {
  50.   char *line; /* original reply string pointer */
  51.   char *tag; /* command tag this reply is for */
  52.   char *key; /* reply keyword */
  53.   char *text; /* subsequent text */
  54. } IMAPPARSEDREPLY;
  55. #define IMAPTMPLEN 16*MAILTMPLEN
  56. #define MAXAUTHENTICATORS 8
  57. /* IMAP4 I/O stream local data */
  58. typedef struct imap_local {
  59.   NETSTREAM *netstream; /* TCP I/O stream */
  60.   IMAPPARSEDREPLY reply; /* last parsed reply */
  61.   MAILSTATUS *stat; /* status to fill in */
  62.   unsigned int imap4rev1 : 1; /* server is IMAP4rev1 */
  63.   unsigned int imap4 : 1; /* server is IMAP4 */
  64.   unsigned int imap2bis : 1; /* server is IMAP2bis */
  65.   unsigned int rfc1176 : 1; /* server is RFC-1176 IMAP2 */
  66.   unsigned int use_status : 1; /* server has STATUS */
  67.   unsigned int use_namespace :1;/* server has NAMESPACE */
  68.   unsigned int use_mbx_ref : 1; /* server has mailbox referrals */
  69.   unsigned int use_log_ref : 1; /* server has login referrals */
  70.   unsigned int use_scan : 1; /* server has SCAN */
  71.   unsigned int use_sort : 1; /* server has SORT */
  72.   unsigned int use_authanon : 1;/* server has anonymous authentication */
  73.   unsigned int uidsearch : 1; /* UID searching */
  74.   unsigned int byeseen : 1; /* saw a BYE response */
  75.   unsigned int use_auth : MAXAUTHENTICATORS;
  76.   unsigned long sortsize; /* sort return data size */
  77.   unsigned long *sortdata; /* sort return data */
  78.   NAMESPACE **namespace; /* namespace return data */
  79.   THREADNODE *threaddata; /* thread return data */
  80.   THREADER *threader; /* list of threaders */
  81.   char *referral; /* last referral */
  82.   char *prefix; /* find prefix */
  83.   char *user; /* logged-in user */
  84.   char tmp[IMAPTMPLEN]; /* temporary buffer */
  85. } IMAPLOCAL;
  86. /* Convenient access to local data */
  87. #define LOCAL ((IMAPLOCAL *) stream->local)
  88. /* Has THREAD extension (else done in client) */
  89. #define LEVELTHREAD(stream) (((IMAPLOCAL *) stream->local)->threader ? T : NIL)
  90. /* Has SORT extension (else done in client) */
  91. #define LEVELSORT(stream) ((IMAPLOCAL *) stream->local)->use_sort
  92. /* IMAP4rev1 level or better */
  93. #define LEVELIMAP4rev1(stream) ((IMAPLOCAL *) stream->local)->imap4rev1
  94. /* IMAP4 w/ STATUS level or better */
  95. #define LEVELSTATUS(stream) (((IMAPLOCAL *) stream->local)->imap4rev1 || 
  96.      ((IMAPLOCAL *) stream->local)->use_status)
  97. /* IMAP4 level or better */
  98. #define LEVELIMAP4(stream) (((IMAPLOCAL *) stream->local)->imap4rev1 || 
  99.     ((IMAPLOCAL *) stream->local)->imap4)
  100. /* IMAP4 RFC-1730 level */
  101. #define LEVEL1730(stream) ((IMAPLOCAL *) stream->local)->imap4
  102. /* IMAP2bis level or better */
  103. #define LEVELIMAP2bis(stream) ((IMAPLOCAL *) stream->local)->imap2bis
  104. /* IMAP2 RFC-1176 level or better */
  105. #define LEVEL1176(stream) ((IMAPLOCAL *) stream->local)->rfc1176
  106. /* Arguments to imap_send() */
  107. typedef struct imap_argument {
  108.   int type; /* argument type */
  109.   void *text; /* argument text */
  110. } IMAPARG;
  111. /* imap_send() argument types */
  112. #define ATOM 0
  113. #define NUMBER 1
  114. #define FLAGS 2
  115. #define ASTRING 3
  116. #define LITERAL 4
  117. #define LIST 5
  118. #define SEARCHPROGRAM 6
  119. #define SORTPROGRAM 7
  120. #define BODYTEXT 8
  121. #define BODYPEEK 9
  122. #define BODYCLOSE 10
  123. #define SEQUENCE 11
  124. #define LISTMAILBOX 12
  125. /* Function prototypes */
  126. DRIVER *imap_valid (char *name);
  127. void *imap_parameters (long function,void *value);
  128. void imap_scan (MAILSTREAM *stream,char *ref,char *pat,char *contents);
  129. void imap_list (MAILSTREAM *stream,char *ref,char *pat);
  130. void imap_lsub (MAILSTREAM *stream,char *ref,char *pat);
  131. void imap_list_work (MAILSTREAM *stream,char *cmd,char *ref,char *pat,
  132.      char *contents);
  133. long imap_subscribe (MAILSTREAM *stream,char *mailbox);
  134. long imap_unsubscribe (MAILSTREAM *stream,char *mailbox);
  135. long imap_create (MAILSTREAM *stream,char *mailbox);
  136. long imap_delete (MAILSTREAM *stream,char *mailbox);
  137. long imap_rename (MAILSTREAM *stream,char *old,char *newname);
  138. long imap_manage (MAILSTREAM *stream,char *mailbox,char *command,char *arg2);
  139. long imap_status (MAILSTREAM *stream,char *mbx,long flags);
  140. MAILSTREAM *imap_open (MAILSTREAM *stream);
  141. IMAPPARSEDREPLY *imap_tcp (MAILSTREAM *stream,NETMBX *mb,NETDRIVER *dv,
  142.    unsigned long port,
  143.    NETDRIVER *altd,char *alts,unsigned long altp);
  144. IMAPPARSEDREPLY *imap_rimap (MAILSTREAM *stream,char *service,NETMBX *mb,
  145.      char *usr,char *tmp);
  146. long imap_anon (MAILSTREAM *stream,char *tmp);
  147. long imap_auth (MAILSTREAM *stream,NETMBX *mb,char *tmp,char *usr);
  148. long imap_login (MAILSTREAM *stream,NETMBX *mb,char *tmp,char *usr);
  149. void *imap_challenge (void *stream,unsigned long *len);
  150. long imap_response (void *stream,char *s,unsigned long size);
  151. void imap_close (MAILSTREAM *stream,long options);
  152. void imap_fast (MAILSTREAM *stream,char *sequence,long flags);
  153. void imap_flags (MAILSTREAM *stream,char *sequence,long flags);
  154. long imap_overview (MAILSTREAM *stream,char *sequence,overview_t ofn);
  155. ENVELOPE *imap_structure (MAILSTREAM *stream,unsigned long msgno,BODY **body,
  156.   long flags);
  157. long imap_msgdata (MAILSTREAM *stream,unsigned long msgno,char *section,
  158.    unsigned long first,unsigned long last,STRINGLIST *lines,
  159.    long flags);
  160. unsigned long imap_uid (MAILSTREAM *stream,unsigned long msgno);
  161. unsigned long imap_msgno (MAILSTREAM *stream,unsigned long uid);
  162. void imap_flag (MAILSTREAM *stream,char *sequence,char *flag,long flags);
  163. void imap_search (MAILSTREAM *stream,char *charset,SEARCHPGM *pgm,long flags);
  164. unsigned long *imap_sort (MAILSTREAM *stream,char *charset,SEARCHPGM *spg,
  165.   SORTPGM *pgm,long flags);
  166. THREADNODE *imap_thread (MAILSTREAM *stream,char *type,char *charset,
  167.  SEARCHPGM *spg,long flags);
  168. long imap_ping (MAILSTREAM *stream);
  169. void imap_check (MAILSTREAM *stream);
  170. void imap_expunge (MAILSTREAM *stream);
  171. long imap_copy (MAILSTREAM *stream,char *sequence,char *mailbox,long options);
  172. long imap_append (MAILSTREAM *stream,char *mailbox,char *flags,char *date,
  173.  STRING *msg);
  174. void imap_gc (MAILSTREAM *stream,long gcflags);
  175. void imap_gc_body (BODY *body);
  176. IMAPPARSEDREPLY *imap_send (MAILSTREAM *stream,char *cmd,IMAPARG *args[]);
  177. IMAPPARSEDREPLY *imap_sout (MAILSTREAM *stream,char *tag,char *base,char **s);
  178. long imap_soutr (MAILSTREAM *stream,char *string);
  179. IMAPPARSEDREPLY *imap_send_astring (MAILSTREAM *stream,char *tag,char **s,
  180.     SIZEDTEXT *as,long wildok);
  181. IMAPPARSEDREPLY *imap_send_literal (MAILSTREAM *stream,char *tag,char **s,
  182.     STRING *st);
  183. IMAPPARSEDREPLY *imap_send_spgm (MAILSTREAM *stream,char *tag,char **s,
  184.  SEARCHPGM *pgm);
  185. void imap_send_sset (char **s,SEARCHSET *set);
  186. IMAPPARSEDREPLY *imap_send_slist (MAILSTREAM *stream,char *tag,char **s,
  187.   char *name,STRINGLIST *list);
  188. void imap_send_sdate (char **s,char *name,unsigned short date);
  189. IMAPPARSEDREPLY *imap_reply (MAILSTREAM *stream,char *tag);
  190. IMAPPARSEDREPLY *imap_parse_reply (MAILSTREAM *stream,char *text);
  191. IMAPPARSEDREPLY *imap_fake (MAILSTREAM *stream,char *tag,char *text);
  192. long imap_OK (MAILSTREAM *stream,IMAPPARSEDREPLY *reply);
  193. void imap_parse_unsolicited (MAILSTREAM *stream,IMAPPARSEDREPLY *reply);
  194. void imap_parse_response (MAILSTREAM *stream,char *text,long errflg,long ntfy);
  195. NAMESPACE *imap_parse_namespace (MAILSTREAM *stream,char **txtptr,
  196.  IMAPPARSEDREPLY *reply);
  197. THREADNODE *imap_parse_thread (char **txtptr);
  198. void imap_parse_header (MAILSTREAM *stream,ENVELOPE **env,SIZEDTEXT *hdr,
  199. STRINGLIST *stl);
  200. void imap_parse_envelope (MAILSTREAM *stream,ENVELOPE **env,char **txtptr,
  201.   IMAPPARSEDREPLY *reply);
  202. ADDRESS *imap_parse_adrlist (MAILSTREAM *stream,char **txtptr,
  203.      IMAPPARSEDREPLY *reply);
  204. ADDRESS *imap_parse_address (MAILSTREAM *stream,char **txtptr,
  205.      IMAPPARSEDREPLY *reply);
  206. void imap_parse_flags (MAILSTREAM *stream,MESSAGECACHE *elt,char **txtptr);
  207. unsigned long imap_parse_user_flag (MAILSTREAM *stream,char *flag);
  208. char *imap_parse_string (MAILSTREAM *stream,char **txtptr,
  209.  IMAPPARSEDREPLY *reply,GETS_DATA *md,
  210.  unsigned long *len);
  211. void imap_parse_body (GETS_DATA *md,char *seg,char **txtptr,
  212.       IMAPPARSEDREPLY *reply);
  213. long imap_cache (MAILSTREAM *stream,unsigned long msgno,char *seg,
  214.  STRINGLIST *stl,SIZEDTEXT *text);
  215. void imap_parse_body_structure (MAILSTREAM *stream,BODY *body,char **txtptr,
  216. IMAPPARSEDREPLY *reply);
  217. PARAMETER *imap_parse_body_parameter (MAILSTREAM *stream,char **txtptr,
  218.       IMAPPARSEDREPLY *reply);
  219. void imap_parse_disposition (MAILSTREAM *stream,BODY *body,char **txtptr,
  220.      IMAPPARSEDREPLY *reply);
  221. STRINGLIST *imap_parse_language (MAILSTREAM *stream,char **txtptr,
  222.  IMAPPARSEDREPLY *reply);
  223. STRINGLIST *imap_parse_stringlist (MAILSTREAM *stream,char **txtptr,
  224.    IMAPPARSEDREPLY *reply);
  225. void imap_parse_extension (MAILSTREAM *stream,char **txtptr,
  226.    IMAPPARSEDREPLY *reply);
  227. char *imap_host (MAILSTREAM *stream);