rfc2045.h
上传用户:s81996212
上传日期:2007-01-04
资源大小:722k
文件大小:5k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /*
  2. ** Copyright 1998 - 2000 Double Precision, Inc.  See COPYING for
  3. ** distribution information.
  4. */
  5. /*
  6. ** $Id: rfc2045.h,v 1.16 2000/04/10 22:42:02 mrsam Exp $
  7. */
  8. #ifndef rfc2045_h
  9. #define rfc2045_h
  10. #include <sys/types.h>
  11. #include <string.h>
  12. #include <stdio.h>
  13. #ifdef  __cplusplus
  14. extern "C" {
  15. #endif
  16. #define RFC2045_ISMIME1(p) ((p) && atoi(p) == 1)
  17. #define RFC2045_ISMIME1DEF(p) (!(p) || atoi(p) == 1)
  18. struct rfc2045 {
  19. struct rfc2045 *parent;
  20. unsigned pindex;
  21. struct rfc2045 *next;
  22. off_t startpos, /* At which offset in msg this section starts */
  23. endpos, /* Where it ends */
  24. startbody, /* Where the body of the msg starts */
  25. endbody; /* endpos - trailing CRLF terminator */
  26. off_t nlines; /* Number of lines in message */
  27. off_t nbodylines; /* Number of lines only in the body */
  28. char *mime_version;
  29. char *content_type;
  30. struct rfc2045attr *content_type_attr; /* Content-Type: attributes */
  31. char *content_disposition;
  32. char *boundary;
  33. struct rfc2045attr *content_disposition_attr;
  34. char *content_transfer_encoding;
  35. int content_8bit; /*
  36. ** Set if content_transfer_encoding is
  37. ** 8bit
  38. */
  39. char *content_id;
  40. char *content_description;
  41. char *content_language;
  42. char *content_md5;
  43. char *content_base;
  44. char *content_location;
  45. struct  rfc2045ac *rfc2045acptr;
  46. int has8bitchars; /* For rewriting */
  47. int haslongline; /* For rewriting */
  48. unsigned rfcviolation; /* Boo-boos */
  49. #define RFC2045_ERR8BITHEADER 1 /* 8 bit characters in headers */
  50. #define RFC2045_ERR8BITCONTENT 2 /* 8 bit contents, but no 8bit
  51. content-transfer-encoding */
  52. #define RFC2045_ERR2COMPLEX 4 /* Too many nested contents */
  53. unsigned numparts; /* # of parts allocated */
  54. char *rw_transfer_encoding; /* For rewriting */
  55. #define RFC2045_RW_7BIT 1
  56. #define RFC2045_RW_8BIT 2
  57. /* Subsections */
  58. struct rfc2045 *firstpart, *lastpart;
  59. /* Working area */
  60. char *workbuf;
  61. size_t workbufsize;
  62. size_t workbuflen;
  63. int workinheader;
  64. int workclosed;
  65. int isdummy;
  66. int informdata; /* In a middle of a long form-data part */
  67. char *header;
  68. size_t headersize;
  69. size_t headerlen;
  70. int (*decode_func)(struct rfc2045 *, const char *, size_t);
  71. void *misc_decode_ptr;
  72. int (*udecode_func)(const char *, size_t, void *);
  73. } ;
  74. struct rfc2045attr {
  75. struct rfc2045attr *next;
  76. char *name;
  77. char *value;
  78. } ;
  79. struct rfc2045 *rfc2045_alloc();
  80. void rfc2045_parse(struct rfc2045 *, const char *, size_t);
  81. void rfc2045_free(struct rfc2045 *);
  82. const char *rfc2045_contentname(const struct rfc2045 *);
  83. void rfc2045_mimeinfo(const struct rfc2045 *,
  84. const char **,
  85. const char **,
  86. const char **);
  87. const char *rfc2045_boundary(const struct rfc2045 *);
  88. char *rfc2045_related_start(const struct rfc2045 *);
  89. const char *rfc2045_content_id(const struct rfc2045 *);
  90. const char *rfc2045_content_description(const struct rfc2045 *);
  91. const char *rfc2045_content_language(const struct rfc2045 *);
  92. const char *rfc2045_content_md5(const struct rfc2045 *);
  93. void rfc2045_dispositioninfo(const struct rfc2045 *,
  94. const char **,
  95. const char **,
  96. const char **);
  97. void rfc2045_mimepos(const struct rfc2045 *, off_t *, off_t *, off_t *,
  98. off_t *, off_t *);
  99. unsigned rfc2045_mimepartcount(const struct rfc2045 *);
  100. void rfc2045_xdump(struct rfc2045 *);
  101. struct rfc2045id {
  102. struct rfc2045id *next;
  103. int idnum;
  104. } ;
  105. void rfc2045_decode(struct rfc2045 *,
  106. void (*)(struct rfc2045 *, struct rfc2045id *, void *),
  107. void *);
  108. struct rfc2045 *rfc2045_find(struct rfc2045 *, const char *);
  109. void rfc2045_cdecode_start(struct rfc2045 *,
  110. int (*)(const char *, size_t, void *), void *);
  111. int rfc2045_cdecode(struct rfc2045 *, const char *, size_t);
  112. int rfc2045_cdecode_end(struct rfc2045 *);
  113. void rfc2045_base64encode_start( void (*)(const char *, size_t));
  114. void rfc2045_base64encode(const char *, size_t);
  115. void rfc2045_base64encode_end();
  116. const char *rfc2045_getdefaultcharset();
  117. void rfc2045_setdefaultcharset(const char *);
  118. struct rfc2045 *rfc2045_fromfd(int);
  119. #define rfc2045_fromfp(f) (rfc2045_fromfd(fileno((f))))
  120. extern void rfc2045_error(const char *);
  121. struct  rfc2045ac {
  122. void (*start_section)(struct rfc2045 *);
  123. void (*section_contents)(const char *, size_t);
  124. void (*end_section)();
  125. } ;
  126. struct rfc2045 *rfc2045_alloc_ac();
  127. int rfc2045_ac_check(struct rfc2045 *, int);
  128. int rfc2045_rewrite(struct rfc2045 *, int, int, const char *);
  129. int rfc2045_rewrite_func(struct rfc2045 *p, int,
  130. int (*)(const char *, int, void *), void *,
  131. const char *);
  132. /* Internal functions */
  133. int rfc2045_try_boundary(struct rfc2045 *, int, const char *);
  134. char *rfc2045_mk_boundary(struct rfc2045 *, int);
  135. const char *rfc2045_getattr(const struct rfc2045attr *, const char *);
  136. void rfc2045_setattr(struct rfc2045attr **, const char *, const char *);
  137. /* MIME content base/location */
  138. char *rfc2045_content_base(struct rfc2045 *p);
  139. /* This joins Content-Base: and Content-Location:, as best as I
  140. ** can figure it out.
  141. */
  142. char *rfc2045_append_url(const char *, const char *);
  143. /* Do this with two arbitrary URLs */
  144. #ifdef  __cplusplus
  145. }
  146. #endif
  147. #endif